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 Нашёл в сети порт Delphi DOOM и начал его портировать. Написал тогда для этой цели небольшой PascalPreprocessor, который переводил все ключевые слова в капсы, менял некоторые типы... паскалевские крышечки в POINTER TO, например и т.д. и тому подобное. Но передо мной встала во весь рост большая проблема. Юнитов в паскалевском исходнике >80 штук и все они тесно друг друга используют. Т.е. не проблема код подправить в почти аналогичный код на Активном Обероне, а попрописывать везде квалифицированный импорт это уже огромная проблема. И мне пришла идея скинуть весь код юнитов в один здоровенный юнит, тогда квалифицированный импорт просто не надо будет прописывать. Вот, и начал я тогда писать этот инструмент. И сейчас закончил При объединении объединяются соответствующие секции: интерфейсная, реализации, инициализации и финализации каждого модуля. Что-бы всё объединить в правильном порядке применена топологическая сортировка. В таком объединённом юните конечно возникает другая проблема - конфликты имён в реализационной части. Но как я и предполагал, таких конфликтов будет не слишком много. В проекте 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 будет Прилагаю файлы оригинального порта, утилиту и конечный результат. Код так же залит в Oberon Community репозиторий. Замечания, пожелания, планы... что портировать в первую очередь?
|
Автор: | Ярослав Романченко [ Среда, 22 Май, 2019 15:43 ] |
Заголовок сообщения: | Re: Обещанное в телеге по направлениям работ. |
В подобном ключе можно попробовать обрабатывать и сишные исходники. Нужен только сишный сканер |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |