OberonCore
https://forum.oberoncore.ru/

Портирование игры DOOM под А2
https://forum.oberoncore.ru/viewtopic.php?f=22&t=6401
Страница 1 из 1

Автор:  Ярослав Романченко [ Среда, 22 Май, 2019 13:16 ]
Заголовок сообщения:  Портирование игры DOOM под А2

Wlad писал(а):
- портирование
Представляю вашему вниманию, коллеги, результат моей давней задумки, когда-то начатой и не доведённой до конца... А теперь завершённой.

Преамбула. Когда-то я загорелся идеей портировать под А2 игру DOOM :D
Нашёл в сети порт Delphi DOOM и начал его портировать. Написал тогда для этой цели небольшой PascalPreprocessor, который переводил все ключевые слова в капсы, менял некоторые типы... паскалевские крышечки в POINTER TO, например и т.д. и тому подобное.
Но передо мной встала во весь рост большая проблема. Юнитов в паскалевском исходнике >80 штук и все они тесно друг друга используют. Т.е. не проблема код подправить в почти аналогичный код на Активном Обероне, а попрописывать везде квалифицированный импорт это уже огромная проблема.
И мне пришла идея скинуть весь код юнитов в один здоровенный юнит, тогда квалифицированный импорт просто не надо будет прописывать.
Вот, и начал я тогда писать этот инструмент. И сейчас закончил :D
При объединении объединяются соответствующие секции: интерфейсная, реализации, инициализации и финализации каждого модуля. Что-бы всё объединить в правильном порядке применена топологическая сортировка.
В таком объединённом юните конечно возникает другая проблема - конфликты имён в реализационной части. Но как я и предполагал, таких конфликтов будет не слишком много. В проекте Delphi DOOM оказалось всего 12 таких конфликтов.
Я их все задокументировал (на инглиш). Какие-то лучше править в исходных юнитах, какие-то в конечном результате:
Цитата:
Implementation parts conflicts:

Fix in original units:
* BACKUPTICS constant in d_net and i_net units. Solution: BACKUPTICS -> I_NET_BACKUPTICS in i_net unit
* finished variable in wi_stuff and i_system units. Solution: finished -> i_system_finished in i_system unit
* MAXSPECIALCROSS constant in p_enemy and p_map units. Solution: constant in p_enemy just not used, remove it
* NUMSPRITES enum and numsprites variable in info_h and r_things units respectively. Solution: numsprites -> r_things_numsprites in r_things and r_data units
* mousex and mousey variables in m_menu and g_game units. Solution: mousex -> g_game_mousex and mousey -> g_game_mousey in g_game unit
* anims variable in p_spec and wi_stuff units. Solution: anims -> wi_stuff_anims in wi_stuff unit
* BG constant and bg variable in hu_lib and wi_stuff units respectively. Solution: BG constant just not used, remove it
* plr variable in hu_stuff and am_map units. Solution: plr -> hu_stuff_plr in hu_stuff unit
* messages enum in m_menu unit conflicts with standard messages unit name. Solution: messages -> enum_messages in m_menu unit
* WindowProc function in i_midi and i_main units. Solution: WindowProc -> i_midi_WindowProc in i_midi unit
* y variable in m_menu rename to m_menu_y
* close function rename to closefile function in d_delphi, d_main, i_music, m_menu, m_misc and z_zone units

Fix in combined unit:
* SAVESTRINGSIZE constant in g_game and m_menu units. Solution: both constants are equal, just leave one of it that will be declared earlier in combined unit

Потом обработать этот комбинированный код тем первоначальным препроцессором и глядишь, скоро думец под А2 будет :D

Прилагаю файлы оригинального порта, утилиту и конечный результат. Код так же залит в Oberon Community репозиторий.
Замечания, пожелания, планы... что портировать в первую очередь? :roll:

Вложения:
PascalProjectCombine.zip [16.8 КБ]
Скачиваний: 218
Doom32_comb.zip [355.89 КБ]
Скачиваний: 209
Doom32_orig.zip [421.92 КБ]
Скачиваний: 215

Автор:  Ярослав Романченко [ Среда, 22 Май, 2019 15:43 ]
Заголовок сообщения:  Re: Обещанное в телеге по направлениям работ.

В подобном ключе можно попробовать обрабатывать и сишные исходники. Нужен только сишный сканер

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/