Автор Тема: Портирование игры SEGA на другой язык  (Прочитано 6199 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kadet.89

  • Пользователь
  • Сообщений: 9
    • Просмотр профиля
Портирование игры SEGA на другой язык
« : 11 Сентябрь 2012, 19:17:34 »
Имеется ром игры и нужно из него достать алгоритмы отвечающие за физику игры и ai чтобы собрать клон на языке с++/javase. Собственно я и так могу сделать игру, но воспроизвести точно все процессы не получится... да и уйдет много времени на написание AI  с нуля, а нужно именно клон. С ассемблером никогда не работал и мне кажется что он значительно сложнее чем с++ и java. Собственно вопрос такой - можно ли вынуть в понятном для с/java программиста виде алгоритмы из рома? Если да, то где про это почитать. Пробовал использовать IDA PRO но понятного кода так и не получил.
Те кто подобным занимались сколько уходило на это времени?
« Последнее редактирование: 11 Сентябрь 2012, 19:23:55 от kadet.89 »

Оффлайн Smoke

  • Пользователь
  • Сообщений: 3430
  • Пол: Мужской
  • Get Serious!
    • Steam
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #1 : 11 Сентябрь 2012, 19:45:51 »
Призывай r57shell'a в тему :D

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #2 : 11 Сентябрь 2012, 19:51:06 »
несколько месяцев собирал инфу.
2 недели и вот результат
http://elektropage.ru/load/samopal/apelsinovyj_raj/rrr_port_2/10-1-0-12
Добавлено позже:
А я уже тут  :lol:

Оффлайн kadet.89

  • Пользователь
  • Сообщений: 9
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #3 : 11 Сентябрь 2012, 19:57:04 »
r57shell, т.е. у вас ушло почти 2 месяца. Но при этом вы, как я понимаю, уже неплохо знали асемблер?

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #4 : 11 Сентябрь 2012, 20:00:29 »
Если не секрет, что за игра?  :)

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #5 : 11 Сентябрь 2012, 20:03:14 »
Не, ушло месяцев 5 (несколько). Был иногда усердный хаккинг, иногда говнопинство.
Я издалека знал ДРУГОЙ ассемблер (x86), а этот НОЛЬ. Щас знаю в этом ассемблере только названия команд и чего они делают "по задумке", а дальше дело мозгов.
Вообще, я давно программирую. Две недели это я переписывал код, смотришь в M68K пишешь на С++. :ohmy:
Да и пришлось баги по отлавливать тоже. :lol:

Оффлайн kadet.89

  • Пользователь
  • Сообщений: 9
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #6 : 11 Сентябрь 2012, 20:16:00 »
А с чего начать?
Пока мне удалось сделать следующее:
Образ в формате bin загрузил в IDA PRO (процессор указал Motorola 68000) Программа ошибок никаких не выдала выведя следующие результаты:
http://s011.radikal.ru/i318/1209/5f/a5ea688f9ac4.gif
В игре много того что мне не нужно (ресурсы, уровни...) Собственно по полученным данным не понять где что... я иду в неправильном направлении или что то не понимаю?

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #7 : 11 Сентябрь 2012, 20:22:42 »
Играй в ролевую игру, ты детектив. Лови вора за руку, исследуй место преступления, мотивы, причины, следствие.
Если это UMK3, то даже не начинай. :) Это как санта барбара. :D (низакончишь)

глянь эту тему
http://www.emu-land.net/forum/index.php/topic,29519.0.html

И вообще, ты тут не первый, много кто хотел такое, ни припомню никого, кто что-то дельное сделал.
Кроме меня :cool:. Оооо я великий и не повторимый.
Добавлено позже:
Кстати, я уже знаю какой ром. :lol:
Mega Bomberman (EU)
Обожаю CTF, и Google
« Последнее редактирование: 11 Сентябрь 2012, 20:33:52 от r57shell »

Оффлайн kadet.89

  • Пользователь
  • Сообщений: 9
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #8 : 11 Сентябрь 2012, 20:45:52 »
Всю игру то мне не надо портировать, только AI ботов в мультиплеерном режиме. Попробую покопать, может что и получится

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1618
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #9 : 11 Сентябрь 2012, 21:13:45 »
Те кто подобным занимались сколько уходило на это времени?
Вагон и тележка. :)

Имеется ром игры и нужно из него достать алгоритмы отвечающие за физику игры и ai чтобы собрать клон на языке с++/javase.
Искать код нужно по ресурсу который он обрабатывает.

С ассемблером никогда не работал и мне кажется что он значительно сложнее чем с++ и java.
Он проще, просто код на нём менее понятен.

Оффлайн kadet.89

  • Пользователь
  • Сообщений: 9
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #10 : 11 Сентябрь 2012, 21:22:21 »
Как работают команды я смогу понять, думаю это не сложно. Но вот как находить нужное место в коде? Тут просто нету ничего за что можно зацепиться... ни названий ни пояснений. Быть может можно пошаговую отладку как то сделать чтоб видеть когда какая строка выполняется? В си в таких случаях очень помогают названия функций, классов, переменных и пояснения да и пошаговая отладка есть.
Неужели вы напрямую перебирали весь код начиная с первой строки чтобы понять как работает вся программа?

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #11 : 11 Сентябрь 2012, 21:31:57 »
Неужели вы напрямую перебирали весь код начиная с первой строки чтобы понять как работает вся программа?
Ну кто-то может быть и перебирал весь. Я не такой маняк, я говорю, мой метод: "Детектив - поймай вора за руку".
То есть, ищешь чего тебе надо в RAM, например жизни. Всё состояние игры хранится в RAM. (за исключением редких случаев).
И каждый раз, игра, логично, модифицирует это состояние (RAM). Находишь где то, что тебе нужно, а потом устанавливаешь скрытое наблюдение, чтобы поймать вора за руку.
На многое можно выйти через связи, родственников, друзей по работе, интересам преступника.
Короче, осознавай аналогию, и тогда ты познаешь истину. :lol:

Оффлайн kadet.89

  • Пользователь
  • Сообщений: 9
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #12 : 11 Сентябрь 2012, 21:36:17 »
Если  не секрет, каким софтом вы для этого пользовались?
Находишь где то, что тебе нужно, а потом устанавливаешь скрытое наблюдение, чтобы поймать вора за руку.
Каким образом?

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #13 : 11 Сентябрь 2012, 21:49:44 »
Вначале переменные ищешь в ram, также как и читы ищутся. Увеличил значение - сравнил.  Начинаешь с самых простых - жизни, координаты, таймеры и т.п.  Далее если читал доки по сегу, можно будет найти какие-то стандартные данные - ну там буффер спрайтов, значения джоев, записи в vram, работа с z80 и т.п.
Потом переходишь к функциям - в любое время во время игры останавливаешь дебагом, далее от этого места вверх, пока не найдешь основной игровой цикл, который повторяется. Проверяешь все JSR (или BSR) отключаях их посредством записи rts в их начале (там где начинается какая-нить subroutione). Так обычно отключаются какие-то элементы игры.
Есть еще вариант начинать с нахождения декомпрессора, чтобы ресурсы выдрать.

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1618
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #14 : 11 Сентябрь 2012, 21:53:08 »
Тут просто нету ничего за что можно зацепиться... ни названий ни пояснений.
Вот разрабы негодяи, не заботятся о тех кто будет ковырять их игру. :lol:
Быть может можно пошаговую отладку как то сделать чтоб видеть когда какая строка выполняется?
В эмуляторе обычно есть дебаггер.
В си в таких случаях очень помогают названия функций, классов, переменных и пояснения да и пошаговая отладка есть.
Ну ты представь сколько места займут все эти имена, коментарии в роме? :)
В IDA есть всё чтобы откоментировать и назвать переменные и функции.
Неужели вы напрямую перебирали весь код начиная с первой строки чтобы понять как работает вся программа?
Вроде то что тебе нужно.
Молодец Griever! @}->--
« Последнее редактирование: 11 Сентябрь 2012, 22:08:26 от Mr2 »

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #15 : 11 Сентябрь 2012, 22:02:48 »
Ti_ направляет по объездной, в расчёте что ты увидишь нужное из далека, не, ещё раз.
Не слушай его, делай как я, юзай мой эмуль. на сайте в подписи.

В эмуляторе обычно есть дебаггер.
На оборот, обычно его НЕТ. Или его функционал скуден.

Оффлайн ColaKid

  • Пользователь
  • Сообщений: 365
  • Пол: Мужской
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #16 : 11 Сентябрь 2012, 22:09:11 »
В си в таких случаях очень помогают названия функций, классов, переменных и пояснения да и пошаговая отладка есть.
Бинарный файл же, откуда в нём названия функций, классов, переменных  :D

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1618
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #17 : 11 Сентябрь 2012, 22:11:42 »
На оборот, обычно его НЕТ. Или его функционал скуден.
Не, ну это понятно, обычные эмули для обычных игроков. :) Дебаггер им без надобности.
-----------
Похоже kadet.89 понял во что ввязывается. :lol:

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #18 : 11 Сентябрь 2012, 22:35:17 »
Бинарный файл же, откуда в нём названия функций, классов, переменных  :D
OBJ, DLL нынче не бинарные дада. <_<

Оффлайн kadet.89

  • Пользователь
  • Сообщений: 9
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #19 : 11 Сентябрь 2012, 22:36:53 »
Вот вам бы то что тут написали всё отшлифовать и сделать пошаговый мануал с картинками и примером на одной игре. Указать что откуда скачивать, как устанваливать и как ковыряться в исходниках. Тогдаб и ту тему не раздули на 9 страниц.

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9390
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #20 : 11 Сентябрь 2012, 22:47:26 »
Цитата: kadet.89
пошаговый мануал с картинками и примером

по реверс-инжинирингу ? спасибо, посмеялся.

самое главное - мало знать что делают всякие комманды проца, нужно понимать что делают те или иные конструкции из них, без этого ты логику фиг поймешь и соответсвенно на более высокоуровневый язык ее фиг переложишь.

r57shell, имхо Ti_ как раз прав на все 100 - стоит искать и найти главный цикл, отрубать в нем вызов подпрограмм и смотреть что отвалилось, и идти потом вниз по ним, так будет быстрее и проще.

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #21 : 11 Сентябрь 2012, 23:02:06 »
r57shell, имхо Ti_ как раз прав на все 100 - стоит искать и найти главный цикл, отрубать в нем вызов подпрограмм и смотреть что отвалилось, и идти потом вниз по ним, так будет быстрее и проще.

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #22 : 11 Сентябрь 2012, 23:21:40 »
r57shell, имхо Ti_ как раз прав на все 100 - стоит искать и найти главный цикл, отрубать в нем вызов подпрограмм и смотреть что отвалилось, и идти потом вниз по ним, так будет быстрее и проще.
Окей, ты остановился где-то.
1) не факт что ты в цикле, может ты в прирывании? можешь убить на этом попыток несколько (пока Callstack перероешь, пока осознаешь что не там).
2) не факт что этот цикл вообще есть :wow:. Внезапно?) Пример UMK3.
Окей, допустим ты нашел цикл, но человек сказал "мне не нужно всё".
Если цикл весь перебирать - пока все подсистемы потестишь. Одну отключил - вроде работает, другую отрубил снова.
А потом опа, всё повисло. Ладно врубил обратно, отрубил ещё одну, снова повисло. Они могут иметь сложные зависимости, и "вешать" или в BSOD загонять в разных совокупностях. Это конечно путь, но очень долгий. Ты только прикинь сколько ты сделаешь:
1) Hard Reset-ов
2) Введешь Game-Genie или пропатчишь по нужному ром.
3) Save/Load
4) Переберёшь функций.
Я выберу этот путь только если, ну что-то не уловимое где-то прячется, тогда надо искать во всех углах.
Или если мне нужна вся система, как было с RRR.

Всё на много проще, Ячейка RAM - это как комната, ты в неё камеру поставил, и ловишь всех кто чего-то в ней меняет. Обычно, чтобы отсечь "а, этих я уже видел" просто забиваешь их nop-ами, чтобы не обращать на них внимания.
А в крайних случаях, я просто юзаю Lua, там есть хуки на M68k, так что, иногда можно весёлые вещи вытворять, например я на Lua вытащил ВСЕ найденные мной архивы из UMK3, не ЗНАЯ как работает распаковщик, это потом я уже его написал, и запаковщик который максимально(могу доказать) сжимает под unpacker UMK3.

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1618
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #23 : 11 Сентябрь 2012, 23:32:49 »
Вот вам бы то что тут написали всё отшлифовать и сделать пошаговый мануал с картинками и примером на одной игре. Указать что откуда скачивать, как устанваливать и как ковыряться в исходниках. Тогдаб и ту тему не раздули на 9 страниц.
Тут рядом тема есть, там люди собирают n-ную сумму чтобы им сделали новую часть игры.
Так чудо мануал в этом плане интересен. :) А если учесть желающих ломануть UMK3, это золотое дно. Особенно если ещё и инструмент приложить к рому. :debile:

« Последнее редактирование: 12 Сентябрь 2012, 00:45:09 от Mr2 »

Оффлайн r57shell

  • Пользователь
  • Сообщений: 1402
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #24 : 12 Сентябрь 2012, 00:20:47 »
Особенно если ещё и инструмент приложить к рому.
Сколько инструментов не прикладывай, не хотят ничего делать.

Оффлайн Mr2

  • Пользователь
  • Сообщений: 1618
  • Пол: Мужской
  • Free roaming sorcerer
    • Facebook
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #25 : 12 Сентябрь 2012, 00:24:10 »
Сколько инструментов не прикладывай, не хотят ничего делать.
Ну твоё дело сбагрить инструмент и мануал, а там уж дело хозяйское. :lol:

Оффлайн AKuHAK

  • Пользователь
  • Сообщений: 135
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #26 : 12 Сентябрь 2012, 00:27:26 »
Странно что Ti_ про это не написал.

Оффлайн Ti_

  • Пользователь
  • Сообщений: 3265
  • Пол: Мужской
    • ВКонтакте
    • Youtube
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #27 : 12 Сентябрь 2012, 00:33:28 »
Странно что Ti_ про это не написал.
Ну да пробовал писать мануал. Но доработать его сил не хватило. А сейчас не советую ибо есть там недоработки, да и много чего кривовато написано, уж лучше вкратце на словах объяснить (тут почему-то не лень).
Думал и в виде видео сделать, типа такого: http://www.youtube.com/watch?v=KZC_s0fGzoQ

Оффлайн MetalliC

  • Технический консультант
  • Сообщений: 9390
  • Пол: Мужской
  • Demul team / MAME developer
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #28 : 12 Сентябрь 2012, 00:47:45 »
r57shell, окей да, согласен, в мегадрайве лучше от РАМ плясать, ее всего-то 64Кб, а кода много и он неизменен в роме.
я больше как-то сталкиваюсь с ситуациями когда кода много и он еще и в раме, со всякими своими локальными данными, тут такой метод не катит, или сверху-вниз или наоборот снизу-вверх надо искать или и то и другое :)

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1306
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
Re: Портирование игры SEGA на другой язык
« Ответ #29 : 12 Сентябрь 2012, 12:54:36 »
За ссылку спасибо! Очень труЪ)