OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Понедельник, 23 Сентябрь, 2019 14:07

Часовой пояс: UTC + 3 часа




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

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1199
Откуда: Украина, Киев
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 КБ]
Скачиваний: 20
Doom32_comb.zip [355.89 КБ]
Скачиваний: 20
Doom32_orig.zip [421.92 КБ]
Скачиваний: 20
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 22 Май, 2019 15:43 
Аватара пользователя

Зарегистрирован: Пятница, 11 Май, 2007 21:57
Сообщения: 1199
Откуда: Украина, Киев
В подобном ключе можно попробовать обрабатывать и сишные исходники. Нужен только сишный сканер


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Ярослав Романченко и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB