форум группы Chief-Net форум группы Chief-Net
Перевод приставочных игр и не только!
drako site Перейти на сайт группы     Наш чат      Помощь      Поиск      Пользователи


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

> Описание: АРХИВНАЯ ТЕМА 2008-2009 года
HoRRoR Пользователь
Отправлено: 02 Августа, 2016 - 07:34:33
Post Id






Покинул форум
Сообщений всего: 654
Дата рег-ции: Окт. 2014  





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;
 
 Top
GD Пользователь
Отправлено: 02 Августа, 2016 - 07:35:02
Post Id



Призрак


Покинул форум
Сообщений всего: 2052
Дата рег-ции: Окт. 2014  





GDgt;
красотиШШШШааааа Укатываюсь
 
 Top
ReCom Пользователь
Отправлено: 02 Августа, 2016 - 07:35:39
Post Id





Покинул форум
Сообщений всего: 246
Дата рег-ции: Июнь 2015  





ReCom
Horror, помощь уже не нужна.
В игре, видимо, используется несколько алгоритмов сжатия графики.
Один из них - LZ77 такого типа:
1. Читается первый байт из блока, например h5C, т.е. b01011100.
2. Далее читаются 8 байт, каждый из которых в соответствии с битами первого байта выполняет свою функцию:
если 0 - расжатый байт;
если 1 - байт вида bxxxyyyyy (в двоичной системе), информирующий о том, откуда (А) и сколько байт повторить (В):
(А) = yyyyy+1 - отсылка назад на yyyyy байт (до 32).
(В) = xxx+1 - количество подряд идущих байт, которые нужно повторить (до 8 байт)
если xxx = 000, то (В) = следующий байт (если нужно повторить большее кол-во байт).
3. Возвращаемся к пункту 1.
 
 Top
GD Пользователь
Отправлено: 02 Августа, 2016 - 07:36:00
Post Id



Призрак


Покинул форум
Сообщений всего: 2052
Дата рег-ции: Окт. 2014  





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 коде (используется в некоторых играх).
"СКАЧАТЬ"
ПС
Догадываюсь, что скажет Хоррор... Голливудская улыбка
Но есё же) Если есть, зачем парится и создавать?
 
 Top
ReCom Пользователь
Отправлено: 02 Августа, 2016 - 07:38:12
Post Id





Покинул форум
Сообщений всего: 246
Дата рег-ции: Июнь 2015  





ReCom
GD, во-первых, в GBC используется формат Planar 4BPP,
во-вторых, есть множество видов/модификаций алгоритма LZ77.
Так что LZ77 Restructor VK-ра для Зельды не подойдет...
Написал свой реструктор, который позволяет разжимать и просматривать содержимое рома.
GD, поможешь мне? Нужно найти с помощью неё все сжатые LZ77 надписи, подровнять их (с помощью + и -), чтобы выглядели корректно, сохранить в отдельные файлы, перевести на русский язык в любом тайловом редакторе и выслать обратно мне.
Просто лень искать...
Вот некоторые адреса запакованного содержимого:
h000C3E3E - "Press Start"
h000C3A19 - логотип "Nintendo" - не изменять!
h000C3281, C365C - "Produced..."
h000C2F19 - "Zelda..."
Сейчас пишу компрессор графики - нужно же как-то вернуть всё это в ром Улыбка
 
 Top
GD Пользователь
Отправлено: 02 Августа, 2016 - 07:38:26
Post Id



Призрак


Покинул форум
Сообщений всего: 2052
Дата рег-ции: Окт. 2014  





;GDgt;
Давай)))
до экзамена еще 4 дня)))
 
 Top
ReCom Пользователь
Отправлено: 02 Августа, 2016 - 07:38:40
Post Id





Покинул форум
Сообщений всего: 246
Дата рег-ции: Июнь 2015  





ReCom
OK, заранее благодарю)
P.S. Надеюсь, разберёшься с программкой...
 
 Top
GD Пользователь
Отправлено: 02 Августа, 2016 - 07:38:54
Post Id



Призрак


Покинул форум
Сообщений всего: 2052
Дата рег-ции: Окт. 2014  





GDgt;
)))
Твоя прога, что обычный вювер графики?
Полно же аналогов)))
 
 Top
ReCom Пользователь
Отправлено: 02 Августа, 2016 - 07:39:20
Post Id





Покинул форум
Сообщений всего: 246
Дата рег-ции: Июнь 2015  





ReCom
Эммм. Не вювер, а распаковщик. Окошко для отображения тайлов сделал лишь для удобства.
 
 Top
GD Пользователь
Отправлено: 02 Августа, 2016 - 07:39:38
Post Id



Призрак


Покинул форум
Сообщений всего: 2052
Дата рег-ции: Окт. 2014  





GDgt;
блин) не мого погодя, сам разобрался)
 
 Top
ReCom Пользователь
Отправлено: 02 Августа, 2016 - 07:40:13
Post Id





Покинул форум
Сообщений всего: 246
Дата рег-ции: Июнь 2015  





ReCom
Молодец)
***
Почти написал компрессор графики... сегодня-завтра допишу и возьмусь за остальные тайловые надписи, встречающиеся в игре, - там другое сжатие.
 
 Top
ReCom Пользователь
Отправлено: 02 Августа, 2016 - 07:41:08
Post Id





Покинул форум
Сообщений всего: 246
Дата рег-ции: Июнь 2015  





ReCom
Обновился распаковщик.
 
 Top
GD Пользователь
Отправлено: 02 Августа, 2016 - 07:41:26
Post Id



Призрак


Покинул форум
Сообщений всего: 2052
Дата рег-ции: Окт. 2014  





GDgt;
Слушай, а сделай, чтоб окно распаковщика, можно было увеличить, как по X, так и по Y осям.
Просто не удобно.
 
 Top
ReCom Пользователь
Отправлено: 02 Августа, 2016 - 07:43:35
Post Id





Покинул форум
Сообщений всего: 246
Дата рег-ции: Июнь 2015  





ReCom
Цитата:
Слушай, а сделай, чтоб окно распаковщика, можно было увеличить, как по X, так и по Y осям.

Поподробнее, пожалуйста...
***
Вот ещё адреса:
C4470 - "Nint" (1)
C4089 - "Seasons", "endo" (2)
C6BC2 - "Legend of Zelda" (1)
(1), (2) - режимы просмотра графики.
 
 Top
GD Пользователь
Отправлено: 02 Августа, 2016 - 07:44:21
Post Id



Призрак


Покинул форум
Сообщений всего: 2052
Дата рег-ции: Окт. 2014  





GDgt;
чтоб можно было увеличеть кол-во тайлов по осям 1 и 2, то есть расширить ее и удленнить.
http://gdomain.ucoz.com/screenshots/111.JPG
А я нашел эти адреса...))))
Короче, давай тогда, так... Улыбка
Ты находишь, где графа и скидываешь сюда адрес, я перерисовываю)))
 
 Top
ReCom Пользователь
Отправлено: 02 Августа, 2016 - 07:44:57
Post Id





Покинул форум
Сообщений всего: 246
Дата рег-ции: Июнь 2015  





ReCom
Дописал LZ77-компрессор графики ))
Цитата:
чтоб можно было увеличеть кол-во тайлов по осям 1 и 2, то есть расширить ее и удленнить.


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



Призрак


Покинул форум
Сообщений всего: 2052
Дата рег-ции: Окт. 2014  





GDgt;

Ну лан, тада)
 
 Top
ReCom Пользователь
Отправлено: 02 Августа, 2016 - 07:45:37
Post Id





Покинул форум
Сообщений всего: 246
Дата рег-ции: Июнь 2015  





ReCom
Если хочешь, можешь воспользоваться этой версией (можно изменять размеры окна => увеличивать число тайлов).
 
 Top
Mefistotel Администратор
Отправлено: 02 Августа, 2016 - 07:45:55
Post Id



Chief-Net


Покинул форум
Сообщений всего: 7127
Дата рег-ции: Окт. 2014  
Откуда: МАГАДАН





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


-----
"Перевод старых игр - отличная возможность понять, как устроены программы, подучить иностранный язык и поднять уровень владения родным. Ну и конечно, это просто возможность "общения" со своей любимой игрой детства." © Dimouse
 
 Top
HoRRoR Пользователь
Отправлено: 02 Августа, 2016 - 07:46:19
Post Id






Покинул форум
Сообщений всего: 654
Дата рег-ции: Окт. 2014  





HoRRoR
Цитата:
Прорисовка пикселей в Delphi - процесс долгий, чем больше тайлов будет находиться на экране (а соответственно и пикселей), тем дольше будет прорисовываться сам рисунок.

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

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

Только один вопрос: нафига тебе декомпрессор конкретно от Зельды в других играх?
 
 Top
Mefistotel Администратор
Отправлено: 02 Августа, 2016 - 07:46:37
Post Id



Chief-Net


Покинул форум
Сообщений всего: 7127
Дата рег-ции: Окт. 2014  
Откуда: МАГАДАН





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

-----
"Перевод старых игр - отличная возможность понять, как устроены программы, подучить иностранный язык и поднять уровень владения родным. Ну и конечно, это просто возможность "общения" со своей любимой игрой детства." © Dimouse
 
 Top
HoRRoR Пользователь
Отправлено: 02 Августа, 2016 - 07:47:00
Post Id






Покинул форум
Сообщений всего: 654
Дата рег-ции: Окт. 2014  





HoRRoR
Да, но не факт, что игр с подобным сжатием больше одной Подмигивание
Каждый случай в таких случаях (лол) обычно уникален.
 
 Top
GD Пользователь
Отправлено: 02 Августа, 2016 - 07:47:16
Post Id



Призрак


Покинул форум
Сообщений всего: 2052
Дата рег-ции: Окт. 2014  





GDgt;
Так, перерисованную графу (не всю), скину завтра вечером. (или после завтра утром)
Цитата:
Если хочешь, можешь воспользоваться этой версией (можно изменять размеры окна => увеличивать число тайлов).


ВОТ!!!! Вот, что мне требовалось =) Спасибо! Улыбка
 
 Top
ReCom Пользователь
Отправлено: 02 Августа, 2016 - 07:47:41
Post Id





Покинул форум
Сообщений всего: 246
Дата рег-ции: Июнь 2015  





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

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

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

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

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

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

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

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

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

Подожду...
 
 Top
HoRRoR Пользователь
Отправлено: 02 Августа, 2016 - 07:48:09
Post Id






Покинул форум
Сообщений всего: 654
Дата рег-ции: Окт. 2014  





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;
Они обновляют картинку.
 
 Top
ReCom Пользователь
Отправлено: 02 Августа, 2016 - 07:48:52
Post Id





Покинул форум
Сообщений всего: 246
Дата рег-ции: Июнь 2015  





ReCom
Спасибо, Horror... твои and и shr натолкнули меня на мысль...
 
 Top
HoRRoR Пользователь
Отправлено: 02 Августа, 2016 - 07:49:11
Post Id






Покинул форум
Сообщений всего: 654
Дата рег-ции: Окт. 2014  





HoRRoR
На какую, если не секрет? Улыбка
 
 Top
ReCom Пользователь
Отправлено: 02 Августа, 2016 - 07:49:34
Post Id





Покинул форум
Сообщений всего: 246
Дата рег-ции: Июнь 2015  





ReCom
Собственно на упрощение кода.
Просто вместо них использовал самописный ByteToBin.
Результат: серьёзно увеличилась скорость отрисовки...
 
 Top
HoRRoR Пользователь
Отправлено: 02 Августа, 2016 - 07:49:55
Post Id






Покинул форум
Сообщений всего: 654
Дата рег-ции: Окт. 2014  





HoRRoR
Хех, ну ещё бы) Если ты говоришь о самописном ByteToBin, то вместо пары строк на ассемблере у тебя получалась пара тысяч строк на ассемблере))
Ещё заюзаешь DelphiX - вообще мгновенно всё будет.
 
 Top
GD Пользователь
Отправлено: 02 Августа, 2016 - 07:50:11
Post Id



Призрак


Покинул форум
Сообщений всего: 2052
Дата рег-ции: Окт. 2014  





GDgt;
Класс! Быстро.
Приятней просматривать стало) А, ес бы еще и поддержку скрола (на мышке )добавил, то ваще класс)))
 
 Top
Страниц (12): « 1 2 3 [4] 5 6 7 8 9 ... » В конец
Сейчас эту тему просматривают: 13 (гостей: 13, зарегистрированных: 0)
« Переводы »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



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