Chief-NET

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Chief-NET » Переводы » The Legend of Zelda - Oracle of Seasons [GBC]


The Legend of Zelda - Oracle of Seasons [GBC]

Сообщений 121 страница 140 из 331

121

Можно поподробнее? Подскажешь - перепишу по-нормальному...
Я лично использовал TBitmap.Canvas.Pixels[x,y]...

Скачай DelphiX и юзай либо TDIB + TImage, либо DXDraw для отрисовки.

Отрисовка графики на 8bpp TDIB (4bpp planar/linear + 8bpp):

Код:
Procedure TileToPic(P: Pointer; W,H,TW,TH,BitCount: Integer; Rev: Boolean = True; Mat: TMatrix = NIL);
var n,m,l,r,ByteCount: Integer; B,WB: ^Byte;
begin
  B:=P;
  Pic.Width:=W*TW;
  Pic.Height:=H*TH;
  ByteCount:=W*BitCount div 8;
  For l:=0 To TH-1 do
  begin
    For r:=0 To TW-1 do
    begin
      For m:=0 To H-1 do
      begin
        Case BitCount of
          4:
          begin
            WB:=Pointer(DWord(Pic.ScanLine[m+l*H])+r*W);
            For n:=0 To ByteCount-1 do
            begin
              If Rev Then WB^:=B^ and $F else WB^:=B^ SHR 4; Inc(WB);
              If Rev Then WB^:=B^ shr 4 else WB^:=B^ AND $F;  Inc(WB); Inc(B);
            end;
            Dec(B,ByteCount);
          end;
          8:  Move(B^,Pointer(DWord(Pic.ScanLine[m+l*H])+r*W)^,W);
        end;
        Inc(B,ByteCount);
      end;
    end;
  end;
end;

Отрисовка этого TDIB на TImage, Sc - масштаб:

Код:
Img.Canvas.CopyRect(Bounds(0,0,Pic.Width*Sc,Pic.Height*Sc),Pic.Canvas,Bounds(0,0,Pic.Width,Pic.Height));

А на DXDraw можно даже и таким же способом, как ты отрисовывать.
DXDraw.Surface.Canvas.Pixels[x,y]...
Но после полной отрисовки пикселей, необходимо выполнить две строки:
DXDraw.Surface.Canvas.Release;
DXDraw.Flip;
Они обновляют картинку.

Отредактировано HoRRoR (2008-06-20 12:09:13)

122

Спасибо, Horror... твои and и shr натолкнули меня на мысль...

Отредактировано ReCom (2008-06-20 16:30:28)

123

На какую, если не секрет? :)

124

Собственно на упрощение кода.
Просто вместо них использовал самописный ByteToBin.

Результат: серьёзно увеличилась скорость отрисовки...

125

Хех, ну ещё бы) Если ты говоришь о самописном ByteToBin, то вместо пары строк на ассемблере у тебя получалась пара тысяч строк на ассемблере))
Ещё заюзаешь DelphiX - вообще мгновенно всё будет.

Отредактировано HoRRoR (2008-06-20 17:02:50)

126

Класс! Быстро.
Приятней просматривать стало) А, ес бы еще и поддержку скрола (на мышке )добавил, то ваще класс)))

127

ес бы еще и поддержку скрола (на мышке )добавил

Скролл работает вроде...

Отредактировано ReCom (2008-06-20 22:24:12)

128

Слушай!
А, как можно узнать адрес графики, в роме, с помощью дебаггера?
На примере ГБС)))
Вот классный дебаггер) (+)

ПС
все таки, нужно развиваться =))))

Отредактировано <GD> (2008-06-20 22:40:18)

129

Собственно, обычно так и узнаётся.

130

а, как узнается?)))
мож задать вектор капания))))?

131

А, как можно узнать адрес графики, в роме, с помощью дебаггера?

1. Основная (циклическая) часть процедуры распаковки находится по адресу 06DF-0763. Так что бряк (Breakpoint) нужно ставить чуть выше, например на 06DB.

2. Как игра остановится, смотришь на регистр de.
Если значение de лежит в пределах 9800-9BFF, значит распаковывается карта тайлов заднего фона - она нам не нужна. Нажимаешь F9.
Если значение de имеет вид Cxxx или Dxxx, значит ЧТО-ТО распаковывается во WRam-память. Нужно проверить (переходим к пункту 3).
Если значение de находится в пределах 8000-97FF, значит распаковываются тайлы (Можешь заглянуть во VRam-вьювер и, многократно нажимая F7, понаблюдать за тем, как выводятся тайлы).
Переходим к 3-му пункту.

3. Нужно посмотреть, какой блок рома загружен в память.
Для этого в нижней области дебаггера спускаешься вниз и смотришь данные адреса FF97 (X), либо по адресу 4000-79FF смотришь номер блока слева вида RoX, где X - номер блока.
Далее X умножаешь на 4000, к произведению прибавляешь значение регистра hl минус 4000 - вот начальный адрес нужного ресурса.
Нажимаешь F9, чтобы продолжить.

И ещё: значение регистра bc / h10 - количество тайлов.

Примечание: все числа и адреса в дебаггере представляются в 16-ричном формате.

Отредактировано ReCom (2008-08-08 15:00:37)

132

хммм...
у мя,  по твоему примеру получилось: DFAE6
чет ни че, не нашел...

Отредактировано <GD> (2008-06-21 01:18:01)

133

Как ничего? Я лично нашёл... смотри в режиме 1.

134

Нашел... (кашу :lol: )

Слушай, меня уже клинет...
...с этим поиском  :blink:
Можешь мне сдампить графу, а?
Обещаю, в тот же день готовую скину! Правда =) (Рисовать, я быстро умею))))

ПС
Прост, седня экзамен... (в сумме, еще 3 осталось сдавать  :blink: )

Отредактировано <GD> (2008-06-21 09:04:55)

135

Удалось добиться максимального сжатия графики. (Компрессор пока сжимает только в LZ77-1). Сейчас потихоньку перевожу и вставляю в ром...

<GD>...

Отредактировано ReCom (2008-08-08 15:01:55)

136

как у тебя переведены названия:

http://gdomain.ucoz.com/screenshots/1.GIF

http://gdomain.ucoz.com/screenshots/2.GIF

ПС
А то будет, в тексте одно, а на карте другое...

С графой не спеши) Если я уж взялся, то давай и закончу.
Просто если у тебя есть все адреса, то дай их мне.

ПС2
У некоторых названий нету обозначения уровень... "L-..." (в роме, каша...)
Может плохо распаковывает?

ПС3
Асю все таки включай...

ПС4
Можно твой проект перенести из "Базы" в "Переводы"?

Отредактировано &lt;GD&gt; (2008-06-22 20:18:13)

137

как у тебя переведены названия:
...

Переводи так:

У-1 Подземелье Гигантского Корня
У-5 Пещера Единорога
У-2 Змеиные Останки
У-6 Древние Руины
У-3 Логовище Ядовитого Мотылька
У-7 Склеп Путешественника
У-8 Лабиринт "Щит и Меч"

Ещё должен быть Level 4  Dancing Dragon Dungeon -
У-4 Подземелье Танцующего Дракона

С графой не спеши) Если я уж взялся, то давай и закончу.

OK, только надпись "PRESS START" не перерисовывай - уж очень удачно я её нарисовал )))

Просто если у тебя есть все адреса, то дай их мне.

В том то и дело, что у меня не все адреса. Поищи сам, используя дебаггер)))

У некоторых названий нету обозначения уровень... "L-..." (в роме, каша...)

Хмм... Скажи адрес.

Асю все таки включай...

Сейчас не могу.

Можно твой проект перенести из "Базы" в "Переводы"?

Можно. И ещё неплохо было бы переименовать тему: "The Legend of Zelda - Oracle of Seasons".

***
Нашёл ещё одну процедуру распаковки графики с надписями в роме...... предстоит изучить ещё один алгоритм сжатия.   :(

<GD>, попробую разобраться с поинтерами на сжатую графу, она расположена в начале рома вместе с LZ77-заголовками. Если получится, получишь всю графу...

:unsure:  :unsure:  :unsure:

138

вот адрес:
a14e0     ;)

ПС:
А мне "Ж", не понравилось) :rolleyes:
А так, тютелька в тютельку) :D

Отредактировано &lt;GD&gt; (2008-06-22 21:43:07)

139

Как же долго я мучался с этой "Ж"...  <_<
Получилось более или менее...

140

А ты, как рисуешь?
С помощью каких прог?

Ес сразу в роме (дампе), то  :wacko:

Проще в пэинте))))


Вы здесь » Chief-NET » Переводы » The Legend of Zelda - Oracle of Seasons [GBC]