Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет nancygold ([info]nancygold)
@ 2024-07-05 01:32:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Настроение: accomplished
Entry tags:gamedev

Today's Progress
It was really hard, but I've finally dumped the first image - mouse cursor.
I've also tracked it to the original LBM filename and the position inside of it.
BTW, the Ghidra produced C rle_decoder worked without modifications.

Originally these LBM files had pixel rect separated sprites.
During the grab process, the game took all these LBMs, cut them into pieces,
using manually supplied coords and then stashed inside STRONG.DAT,
which only preserved graphic ids.
The executable was not stripped of that grab code, likely due to a deadline.
It is apparently also unoptimized.

Still the cursor is without palette.
There three ways to recover palette:
1. from screenshot.
2. from the DOS box, when the game loads VGA registers.
3. from the static analysis, looking for the `out` opcode, and the ascending from it.

I'm afraid the palette is stored in one of these rle encoded images inside of strong.dat,
and it is impossible to calculated the entry's index, without first deciphering the previous entries.

Still the hardest and unfun parts are almost over.
I have grinded through the STRONG.DAT processing functions.
These are so large, Ghidra decompiler fails.



(Добавить комментарий)


(Анонимно)
2024-07-05 06:36 (ссылка)
Твиттерские скандалы — это не наш уровень, этакая антиполитика, коммунальная склока. Однако, и они приносят свои плоды к доказательной базе, чем же на самом деле является ФБК. Для тех, кто еще не понял, если такие наивные еще остались. Всплыл любопытный факт о Марии Певчих (иноагент). В 2010-ом году она была "дублером президента" на встрече большой восьмерки. Дублеры президентов — это молодые люди из разных стран, которые, в формате "Большой восьмерки", пересекаясь с самими президентами, обсуждали различные проблемы. Каждого такого дублера от России выбирала Администрация Президента. Проверяли и утверждали кандидатов МИД и ФСБ. Есть вопросы?

(Ответить)


(Анонимно)
2024-07-05 08:37 (ссылка)
Why do this? Is it a kind of coping?

(Ответить)


(Анонимно)
2024-07-05 09:26 (ссылка)
Amazing. But shouldn't you first decompile the entire game and then gradually fix everything to make it work? Why spend time on reading data with half-decompiled code?

(Ответить) (Ветвь дискуссии)


(Анонимно)
2024-07-05 10:34 (ссылка)
Lack of education and systemic thinking.

(Ответить) (Уровень выше)


[info]nancygold
2024-07-05 10:39 (ссылка)
One can't decompile entire game at once:
1. The size and type of data structures, global and on stack, is unknown.
2. The decompiler support for 16bit x86 is limited, and it doesn't support handling 32bit integers, passed in DX:AX and CD:BX.
3. The 16bit switch statement is not implemented by the analyzer, so you can't even disassemble the game, before manually fixing all statements.

Also, the main part of decompilation is naming the functions and data areas.
That involves a lot of rename and retype refactoring.
Ghidra does such refactor perfectly, while I use Notepad++ to edit C code.
Notepad++ doesn't have any refactoring features, not even an XREF.

Now dumping and analyzing the data used by the game is on way to name the functions.
I.e. I now know that previously unknown variable is a mouse cursor.
Thefore I can name all functions using it as mice_XXXX_YYYY.

Also, the game logic isn't too difficult, so you can just go from main().

(Ответить) (Уровень выше) (Ветвь дискуссии)


(Анонимно)
2024-07-05 13:17 (ссылка)
Короче decompile workflow сломан. Удовольствие таким заниматься (для меня) сомнительное.

...

>while I use Notepad++ to edit C code.

Then don't use it? Why not finally surrender, and adopt vscode/vscodium, which is miles better at everything. The "clangd" extension allows renaming symbols. You'll also need "CMake Tools" and the "Native Debug" extensions for the complete C/C++ IDE experience

(Ответить) (Уровень выше)


(Анонимно)
2024-07-05 19:13 (ссылка)
create a game named 'a senseless pursuit'
this would be a game of your life

(Ответить)