форум группы Chief-Net » » Переводы » Legend of Zelda - Oracle of Seasons, The [GBC]

Страниц (12): « 1 2 3 [4] 5 6 7 8 9 ... » В конец
 

91. HoRRoR - 02 Августа, 2016 - 07:34:33 - перейти к сообщению
HoRRoR
Спасибо Улыбка

--

Ну кто ж так пишет Улыбка
Взять хотя бы это:

procedure TForm1.ReadRom(Adress: Integer); //читает блок в память
var I: Integer;
begin
AssignFile(FRam, 'C:\Rom.gbc'Подмигивание;
Reset(FRam);
Seek(FRam, Adress);
for I := $4000 to $7FFF do begin //Rom-память
Read(FRam, Ram[i]);
end;
CloseFile(FRam);
end;

Вот как надо:

CODE:

procedure TForm1.ReadRom(Adress: Integer); //читает блок в память
begin
AssignFile(FRam, 'C:\Rom.gbc');
Reset(FRam);
Seek(FRam, Adress);
BlockRead(FRam, Ram[$4000],$4000);
CloseFile(FRam);
end;
92. GD - 02 Августа, 2016 - 07:35:02 - перейти к сообщению
GDgt;
красотиШШШШааааа Укатываюсь
93. ReCom - 02 Августа, 2016 - 07:35:39 - перейти к сообщению
ReCom
Horror, помощь уже не нужна.
В игре, видимо, используется несколько алгоритмов сжатия графики.
Один из них - LZ77 такого типа:
1. Читается первый байт из блока, например h5C, т.е. b01011100.
2. Далее читаются 8 байт, каждый из которых в соответствии с битами первого байта выполняет свою функцию:
если 0 - расжатый байт;
если 1 - байт вида bxxxyyyyy (в двоичной системе), информирующий о том, откуда (А) и сколько байт повторить (В):
(А) = yyyyy+1 - отсылка назад на yyyyy байт (до 32).
(В) = xxx+1 - количество подряд идущих байт, которые нужно повторить (до 8 байт)
если xxx = 000, то (В) = следующий байт (если нужно повторить большее кол-во байт).
3. Возвращаемся к пункту 1.
94. GD - 02 Августа, 2016 - 07:36:00 - перейти к сообщению
GDgt;
Так и знал.... <_<
Вот прога, которая занимается декомпрес. и компрес. графики LZ77.
(Виртуал Киллер, писал ее.)
Описание:
LZ77 Restructor - это программа для компрессии и декомпрессии LZ77 данных. В первую очередь она рассчитана на компрессию и декомпрессию графики, но может и работать с другими типами данных.
Описание функций:
- Пока что она поддерживает только 4 графических форматов: Linear 8BPP, Linear 4BPP, Linear 2BPP и Linear 1BPP, так что выбор других значений BPP (3, 5, 6 и 7) может вызвать ошибку.
- При установленном флажке на "Заголовок под LZ", программа закодирует под LZ заголовок следующего вида: 00 XX XX XX, где X - размер незапаковынных данных.
- При установленном флажке на "Без нулей", программа будет применять менее эффективный метод сжатия, исключающий появление нулей в LZ коде (используется в некоторых играх).
"СКАЧАТЬ"
ПС
Догадываюсь, что скажет Хоррор... Голливудская улыбка
Но есё же) Если есть, зачем парится и создавать?
95. ReCom - 02 Августа, 2016 - 07:38:12 - перейти к сообщению
ReCom
GD, во-первых, в GBC используется формат Planar 4BPP,
во-вторых, есть множество видов/модификаций алгоритма LZ77.
Так что LZ77 Restructor VK-ра для Зельды не подойдет...
Написал свой реструктор, который позволяет разжимать и просматривать содержимое рома.
GD, поможешь мне? Нужно найти с помощью неё все сжатые LZ77 надписи, подровнять их (с помощью + и -), чтобы выглядели корректно, сохранить в отдельные файлы, перевести на русский язык в любом тайловом редакторе и выслать обратно мне.
Просто лень искать...
Вот некоторые адреса запакованного содержимого:
h000C3E3E - "Press Start"
h000C3A19 - логотип "Nintendo" - не изменять!
h000C3281, C365C - "Produced..."
h000C2F19 - "Zelda..."
Сейчас пишу компрессор графики - нужно же как-то вернуть всё это в ром Улыбка
96. GD - 02 Августа, 2016 - 07:38:26 - перейти к сообщению
;GDgt;
Давай)))
до экзамена еще 4 дня)))
97. ReCom - 02 Августа, 2016 - 07:38:40 - перейти к сообщению
ReCom
OK, заранее благодарю)
P.S. Надеюсь, разберёшься с программкой...
98. GD - 02 Августа, 2016 - 07:38:54 - перейти к сообщению
GDgt;
)))
Твоя прога, что обычный вювер графики?
Полно же аналогов)))
99. ReCom - 02 Августа, 2016 - 07:39:20 - перейти к сообщению
ReCom
Эммм. Не вювер, а распаковщик. Окошко для отображения тайлов сделал лишь для удобства.
100. GD - 02 Августа, 2016 - 07:39:38 - перейти к сообщению
GDgt;
блин) не мого погодя, сам разобрался)
101. ReCom - 02 Августа, 2016 - 07:40:13 - перейти к сообщению
ReCom
Молодец)
***
Почти написал компрессор графики... сегодня-завтра допишу и возьмусь за остальные тайловые надписи, встречающиеся в игре, - там другое сжатие.
102. ReCom - 02 Августа, 2016 - 07:41:08 - перейти к сообщению
ReCom
Обновился распаковщик.
103. GD - 02 Августа, 2016 - 07:41:26 - перейти к сообщению
GDgt;
Слушай, а сделай, чтоб окно распаковщика, можно было увеличить, как по X, так и по Y осям.
Просто не удобно.
104. ReCom - 02 Августа, 2016 - 07:43:35 - перейти к сообщению
ReCom
Цитата:
Слушай, а сделай, чтоб окно распаковщика, можно было увеличить, как по X, так и по Y осям.

Поподробнее, пожалуйста...
***
Вот ещё адреса:
C4470 - "Nint" (1)
C4089 - "Seasons", "endo" (2)
C6BC2 - "Legend of Zelda" (1)
(1), (2) - режимы просмотра графики.
105. GD - 02 Августа, 2016 - 07:44:21 - перейти к сообщению
GDgt;
чтоб можно было увеличеть кол-во тайлов по осям 1 и 2, то есть расширить ее и удленнить.
http://gdomain.ucoz.com/screenshots/111.JPG
А я нашел эти адреса...))))
Короче, давай тогда, так... Улыбка
Ты находишь, где графа и скидываешь сюда адрес, я перерисовываю)))
106. ReCom - 02 Августа, 2016 - 07:44:57 - перейти к сообщению
ReCom
Дописал LZ77-компрессор графики ))
Цитата:
чтоб можно было увеличеть кол-во тайлов по осям 1 и 2, то есть расширить ее и удленнить.


Прорисовка пикселей в Delphi - процесс долгий; чем больше тайлов будет находиться на экране, а соответственно и пикселей, тем дольше будет прорисовываться сам рисунок.
107. GD - 02 Августа, 2016 - 07:45:16 - перейти к сообщению
GDgt;

Ну лан, тада)
108. ReCom - 02 Августа, 2016 - 07:45:37 - перейти к сообщению
ReCom
Если хочешь, можешь воспользоваться этой версией (можно изменять размеры окна => увеличивать число тайлов).
109. Mefistotel - 02 Августа, 2016 - 07:45:55 - перейти к сообщению
Mefistotel
ReCom, послушай. А нельзя ли ты твою прогу приспособить и к другим играм??? В окне выбора сделать и другие игры, а не только Zelda.
110. HoRRoR - 02 Августа, 2016 - 07:46:19 - перейти к сообщению
HoRRoR
Цитата:
Прорисовка пикселей в Delphi - процесс долгий, чем больше тайлов будет находиться на экране (а соответственно и пикселей), тем дольше будет прорисовываться сам рисунок.

Дельфи тут совершенно не при чём. Как пишешь - так и отрисовывает. Я писал вьюверы без прямого обращения к DirectX/OpenGL, причём конвертируя рисунок в битмап и дополнительно прорисовывая его со скаллингом - мгновенно всё происходит.

Цитата:
ReCom, послушай. А нельзя ли ты твою прогу приспособить и к другим играм??? В окне выбора сделать и другие игры, а не только Zelda.

Только один вопрос: нафига тебе декомпрессор конкретно от Зельды в других играх?
111. Mefistotel - 02 Августа, 2016 - 07:46:37 - перейти к сообщению
Mefistotel
Компрессор от Zelda мне нафиг не нужен. Мене интересно знать, возможно ли его использовать в других играх с шрифтом 4 bpp Planar и подобным сжатием...
Вот в чём вопрос.
112. HoRRoR - 02 Августа, 2016 - 07:47:00 - перейти к сообщению
HoRRoR
Да, но не факт, что игр с подобным сжатием больше одной Подмигивание
Каждый случай в таких случаях (лол) обычно уникален.
113. GD - 02 Августа, 2016 - 07:47:16 - перейти к сообщению
GDgt;
Так, перерисованную графу (не всю), скину завтра вечером. (или после завтра утром)
Цитата:
Если хочешь, можешь воспользоваться этой версией (можно изменять размеры окна => увеличивать число тайлов).


ВОТ!!!! Вот, что мне требовалось =) Спасибо! Улыбка
114. ReCom - 02 Августа, 2016 - 07:47:41 - перейти к сообщению
ReCom
Цитата:
ReCom, послушай. А нельзя ли ты твою прогу приспособить и к другим играм??? В окне выбора сделать и другие игры, а не только Zelda.

Распаковщик работает только с 2-мя модификациями LZ77, одна его модификация описана выше в этой теме.
Распаковщик писал только для Зельды.

Цитата:
Дельфи тут совершенно не при чём. Как пишешь - так и отрисовывает. Я писал вьюверы без прямого обращения к DirectX/OpenGL, причём конвертируя рисунок в битмап и дополнительно прорисовывая его со скаллингом - мгновенно всё происходит.

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

Цитата:
Мене интересно знать, возможно ли его использовать в других играх с шрифтом 4 bpp Linear и подобным сжатием...
Вот в чём вопрос.

Можно! (если алгоритм сжатия тот же)
Правда, в окошке тайлы будут вырисовываться planar-ом. Тут главное знать начальный адрес распаковываемого ресурса.

Цитата:
Да, но не факт, что игр с подобным сжатием больше одной

Не знаю, не знаю... Oracle of Ages нужно проверить...
Там то же самое сжатие.

Цитата:
Так, перерисованную графу (не всю), скину завтра вечером. (или после завтра утром)

Подожду...
115. HoRRoR - 02 Августа, 2016 - 07:48:09 - перейти к сообщению
HoRRoR
Цитата:
Можно поподробнее? Подскажешь - перепишу по-нормальному...
Я лично использовал TBitmap.Canvas.Pixels[x,y]...

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

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

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 - масштаб:
CODE:

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;
Они обновляют картинку.
116. ReCom - 02 Августа, 2016 - 07:48:52 - перейти к сообщению
ReCom
Спасибо, Horror... твои and и shr натолкнули меня на мысль...
117. HoRRoR - 02 Августа, 2016 - 07:49:11 - перейти к сообщению
HoRRoR
На какую, если не секрет? Улыбка
118. ReCom - 02 Августа, 2016 - 07:49:34 - перейти к сообщению
ReCom
Собственно на упрощение кода.
Просто вместо них использовал самописный ByteToBin.
Результат: серьёзно увеличилась скорость отрисовки...
119. HoRRoR - 02 Августа, 2016 - 07:49:55 - перейти к сообщению
HoRRoR
Хех, ну ещё бы) Если ты говоришь о самописном ByteToBin, то вместо пары строк на ассемблере у тебя получалась пара тысяч строк на ассемблере))
Ещё заюзаешь DelphiX - вообще мгновенно всё будет.
120. GD - 02 Августа, 2016 - 07:50:11 - перейти к сообщению
GDgt;
Класс! Быстро.
Приятней просматривать стало) А, ес бы еще и поддержку скрола (на мышке )добавил, то ваще класс)))

Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®