Разработка и ромхакинг > Ромхакинг
[SMD] хакинг Dune: The Battle for Arrakis
ModCraft:
--- Цитата: Smoke_John от 19 Апрель 2025, 18:57:41 ---А как ты собрался размещать карты из разных модов в одну сборку? Где-то есть дюны новые, где-то такой ландшафт, где-то другой, и так далее. Править будешь несоответствия вручную, или тебе для другого проекта, которому скормить можно всё вместе без ограничений?
--- Конец цитаты ---
В данны момент цель просто модификация существующих миссий,в качестве эксперемента,и размещения обратно
Добавлено позже:
Кстати был же где-то мап эдитор который загружал карты прям из ром вот така когда это было и где он хм
SeregaZ:
а как он тебе сработает, если там были кастомные метатайлы? будет пургу в этих местах показывать :)
ModCraft:
--- Цитата: SeregaZ от 19 Апрель 2025, 20:19:50 ---а как он тебе сработает, если там были кастомные метатайлы? будет пургу в этих местах показывать :)
--- Конец цитаты ---
кто он?
Razor:
--- Цитата: ModCraft от 19 Апрель 2025, 20:13:40 ---В данны момент цель просто модификация существующих миссий,в качестве эксперемента,и размещения обратно
--- Конец цитаты ---
Почему просто не взять дефолтную сборку и не модифицировать оригинальные миссии? Там ничего не нужно доставать из рома, просто открывать в любом редакторе. Откуда такая нужда именно выдирать карты из рома?
SeregaZ:
--- Цитата: ModCraft от 19 Апрель 2025, 20:30:57 ---кто он?
--- Конец цитаты ---
эм... мап эдитор?
ModCraft:
--- Цитата: SeregaZ от 19 Апрель 2025, 21:04:33 ---эм... мап эдитор?
--- Конец цитаты ---
есть такое дело кое что не понимает
Добавлено позже:
Да ну эту идею все ровно я ни черта не понимаю как патчить ром с помощью ASM68k так что
отправляюсь редачить стандартный сборщик.
Чтото на сплитил но вот засунуть обратно чтоб не руками не вышло
SeregaZ:
ну ты блин... я так надеялся на тебя, что вооот! наконец-то! появится мощнецкий ромхак тысячелетия!...
шаг первый:
создаем бат файл, вкуда пишем типа такого:
--- Код: ---asm68k /p input.asm,romfile.bin
pause
--- Конец кода ---
то есть здесь мы вызываем асм, пихаем ему на вход асм файл input.asm и чтобы он нам на выходе сделал romfile.bin
что значит /p - хрен знает. а pause в конце - чтобы ты мог прочитать текст ошибок, если они были и нажать ентыр и тогда окно закроется.
input.asm,romfile.bin надо писать без пробелов рядом, именно как написано. а то асм кривой :) и будет ругаться будь там пробел или русские буквы или еще что.
шаг фтарой:
создаем input.asm файл и открываем его в блокноте. а дальше идет магия.
--- Код: --- org 0
incbin "originalgame.bin"
org $1234
incbin "kusochekoda.bin"
--- Конец кода ---
org - значит прыгать куда-то по какому-то адресу.
incbin "originalgame.bin" - тут надо указать путь до оригинальной игры. скопируй её в эту же папку.
incbin "kusochekoda.bin" - тут у тебя есть какой-то кусман, который ты хочешь вшить в оригинальную игру.
но понятно надо знать миллион нюансов - какой размер старого куска и какой нового - а влезет ли новый на место старого? если меньше - хорошо. если больше - плохо. тогда надо будет писать в конец игры новый кусман, а потом искать все ссылки в коде, которые указывали на старое место и ставить туда адрес на конец рома, где у тебя новый кусман лежит.
то есть что-то типа такого:
--- Код: --- org 0
incbin "originalgame.bin"
metkakoncaroma:
incbin "kusochekoda.bin"
org $3245
dc.l metkakoncaroma
--- Конец кода ---
как бы предполагается что у тебя готовый кусман для вшивания в игру. но ежели не готовый, то надо смотреть. то есть ASM68K.exe может и код втулить куда надо, а не только готовый кусман.
Razor:
--- Цитата: SeregaZ от 20 Апрель 2025, 10:00:22 ---что значит /p - хрен знает
--- Конец цитаты ---
/p (parameter) - установка свойств переменных
ModCraft:
--- Цитата: SeregaZ от 20 Апрель 2025, 10:00:22 ---org 0
--- Конец цитаты ---
вот такой код
--- Код: --- org 0
incbin "dune2.bin"
scenh001:
incbin "missions\hrk\scenh001.bin"
scenh002:
incbin "missions\hrk\scenh002.bin"
scenh003:
incbin "missions\hrk\scenh003.bin"
scenh004:
incbin "missions\hrk\scenh004.bin"
scenh005:
incbin "missions\hrk\scenh005.bin"
scenh006:
incbin "missions\hrk\scenh006.bin"
scenh007:
incbin "missions\hrk\scenh007.bin"
scenh008:
incbin "missions\hrk\scenh008.bin"
scenh009:
incbin "missions\hrk\scenh009.bin"
org $24A64E
dc.l scenh001
dc.l scenh002
dc.l scenh003
dc.l scenh004
dc.l scenh005
dc.l scenh006
dc.l scenh007
dc.l scenh008
dc.l scenh009
--- Конец кода ---
на выходе в адресе $24A64E каша.
Все тоже самое что и было и у меня до инструкции выше
SeregaZ:
а игру ты запускал смотрел? по идее мы пишем оригинальный ром файл, записываем в конец рома новые миссии, и исправляем таблицу адресов, которые ссылались на старые миссии, то есть по логике все верно. а значит все должно работать. правда еще надо посмотреть как именно хранилась таблица уровней...
ModCraft:
--- Цитата: SeregaZ от 20 Апрель 2025, 15:29:56 ---а игру ты запускал смотрел? по идее мы пишем оригинальный ром файл, записываем в конец рома новые миссии, и исправляем таблицу адресов, которые ссылались на старые миссии, то есть по логике все верно. а значит все должно работать. правда еще надо посмотреть как именно хранилась таблица уровней...
--- Конец цитаты ---
Менял тока у харконенов миссии У Атредис,ородос,саудукар первая миссия работает а вот у фременов какойто глюк,и Харконен полный ппц деньги капают и не останавливаются.
Добавлено позже:
Интересно кто автор мода ядра genesis_plus_gx_libretro_480x464_1.7.4.0.0.1_X7_SX4 можно ли под андроид собрать такое
Razor:
--- Цитата: ModCraft от 20 Апрель 2025, 16:57:21 ---Интересно кто автор мода ядра genesis_plus_gx_libretro_480x464_1.7.4.0.0.1_X7_SX4
--- Конец цитаты ---
Doomday
--- Цитата: ModCraft от 20 Апрель 2025, 16:57:21 ---можно ли под андроид собрать такое
--- Конец цитаты ---
Можно, если есть исходники
ModCraft:
--- Цитата: Razor от 20 Апрель 2025, 17:17:21 ---DoomdayМожно, если есть исходники
--- Конец цитаты ---
ну исходники на гитхаб есть проблема знать бы где и на что править,дискордом не пользуюсь да и он в россии блокирован
SeregaZ:
чото кароче ты не так делаешь :) попробуй scenh002.bin переименовать в scenh001.bin и пересобрать. может сами файлы миссий битые? должно работать по идее.
ModCraft:
--- Цитата: SeregaZ от 20 Апрель 2025, 19:05:18 ---чото кароче ты не так делаешь :) попробуй scenh002.bin переименовать в scenh001.bin и пересобрать. может сами файлы миссий битые? должно работать по идее.
--- Конец цитаты ---
да открывал я хексом их и смотрел там все в порядке,а касяк идет в самом начале адреса тоесть в заголовке первой миссии
Добавлено позже:
--- Цитата: SeregaZ от 20 Апрель 2025, 19:05:18 ---чото кароче ты не так делаешь :) попробуй scenh002.bin переименовать в scenh001.bin и пересобрать. может сами файлы миссий битые? должно работать по идее.
--- Конец цитаты ---
самое интересное есле их вставить в DuneHack_Rebuild_R82c_(2024-11-17) и собрать все работает
SeregaZ:
тогда может надо добавить even ?
--- Код: --- org 0
incbin "dune2.bin"
even
scenh001:
incbin "missions\hrk\sc......
--- Конец кода ---
что-то типа такого может...
SeregaZ:
казалось бы вроде есть умные мысли:
--- Цитата ---потому-что размер отличается, адресация не туда идёт
--- Конец цитаты ---
но нет... делает не по умному :)
--- Цитата ---И да, не понимаю зачем писать этот мусор, а потом удивляться
--- Конец цитаты ---
ты получается пишешь сценарии на старое место. где ясен пень сработает только 1 миссия. потому что 2 уже будет ссылаться на неправильное место - типа в середину второй или в середину первой. поэтому мы и пишем миссии в конец рома, где точно ничего не повредится, а после новые адреса миссий вписываем в оригинальную таблицу адресов миссий. вот в чем была суть. тогда и 1 и 2 и все прочие миссии должны работать верно.
SeregaZ:
как игра, по твоему мнению, узнает где 1 миссия, а где 2, а где 3, а где ваще дом харконенов? ты же не просто приложил файлы-миссии к игре и она сама все поняла, верно? смотрим где эти файлы-миссии прикладываются к рому - а это файл maps_64.asm к примеру. и нас интересует эта часть:
--- Код: ---scena001:
incbin missions\atr\scena001.bin
scena002:
incbin missions\atr\scena002.bin
scena003:.....
--- Конец кода ---
и причем они не просто файлы друг за другом
--- Код: --- incbin missions\atr\scena001.bin
incbin missions\atr\scena002.bin
incbin missions\atr\scena003.bin....
--- Конец кода ---
а именно каждому файлу есть своя метка - scena001: или scena002: или scena003: и так далее. получается у каждого добавленного в проект файла есть своя метка, сиречь свой адрес. значит где-то должно быть место в коде игры, где эти адреса лежат, это место игра знает и знает что там адреса лежат друг за другом - сиречь таблица. если мы сделаем поиск в том-же insclude.asm по слову scena001 - то найдется это место:
--- Код: ---atreides_missions:
dc.l scena001
dc.l scena002
dc.l scena003
dc.l scena004...
--- Конец кода ---
вот наша таблица и есть. то есть игра изначально понятия не имеет где лежит миссия номер 3 к примеру. но у ней есть ссылка на таблицу - atreides_missions:
и тогда игра расчитывает место, где лежит миссия что-то типа по такой формуле:
адрес метки atreides_missions: + ((номер миссии - 1) * 4)
вот скажем миссия номер 2:
atreides_missions: + ((2 - 1) * 4) = то есть прыгнет на 2 ячейку в этой таблице - scena002 и начнет её грузить.
ты-же получается новые миссии добавил, но ссылки-метки остались неправленные. если 1 миссия еще ладно совпадает со старой 1 миссией, то уже начиная со 2 - у тебя таблица будет ссылаться на неверное место и все посыплется. однако если ты в этой таблице внесешь изменения, с правкой новых адресов на конец рома, на реальные места расположения новых миссий - все должно заработать адекватно.
конечно есть много НО - сейчас мы пишем тупо в конец рома, не разбираясь. но может там 4 мегабайта уже ром (распоследние версии сборки там что-то намудрили, я сам хз зачем это - какую-то приблуду про 4 мегабайта там добавили), следовательно допись новых миссий будет происходить за пределами 4 мегабайт, а значит с тем-же Fusion вылезут проблемы и игра зависнет, даже если все вроде как верно в ром внесли и в таблицы тоже. в Gens проблем по идее не возникнет.
Добавлено позже:
так-же этим самым НО может быть обязательная кратность двум. поэтому то я и написал про even. скажем каким-то образом оригинальный ром весит не 2 мегабайта ровно, а типа 1999. значит при дописывании новых файлов миссий - у них адрес будет нечетный. это может непонравится системе. вот команда эта самая even - следит за четностью, и дописывает нолик где нужно, чтобы последующие данные лежали уже по четному адресу.
SeregaZ:
да я тоже не понимаю зачем ты тратишь свою жизнь создавая ромхаки про Метро :) создавал бы про... что-то менее хейто-персональное. для практических занятий нам надо:
1. сам оригинальный ром ромхака.
2. найти в нем где лежит таблица с перечислением адресов миссий, ну или где сами миссии лежат.
3. сами миссии, которые мы хотим внедрить в свой ромхак в виде отдельных файлов.
Добавлено позже:
--- Цитата: Император от 22 Апрель 2025, 01:26:53 ---Речь о начале и конце миссии для игры
--- Конец цитаты ---
Игра не может знать где конец для миссии. она прыгает на метку начала миссии и начинает гнать, пока не упрется там куда-то... в 00 наверное, не помню какой там байт для конца миссий. поэтому ей важно иметь под рукой таблицу адресов начал миссий. после она просто по номеру в таблице будет прыгать на начало и читать до упора.
по твоей логике игра будет знать только адрес 1 миссии. получается чтобы получить вторую, то игре надо прыгнуть на первую, после мотать весь код миссии до конца, и только тогда она узнает где начало 2 миссии. а если тебе надо 6 миссию? и чо? ждать пока игра промотает весь код с 1 по 5 миссии, найдет наконец начало 6 и начнет наконец загружать 6? это сколько времени займется? а так ты по таблице взял адрес 6 миссии и сразу прыгнул на неё и юзверь уже сидит играет. никакой задержки.
Slava1989:
--- Цитата: SeregaZ от 22 Апрель 2025, 11:22:02 ---
по твоей логике игра будет знать только адрес 1 миссии. получается чтобы получить вторую, то игре надо прыгнуть на первую, после мотать весь код миссии до конца, и только тогда она узнает где начало 2 миссии. а если тебе надо 6 миссию? и чо? ждать пока игра промотает весь код с 1 по 5 миссии, найдет наконец начало 6 и начнет наконец загружать 6? это сколько времени займется? а так ты по таблице взял адрес 6 миссии и сразу прыгнул на неё и юзверь уже сидит играет. никакой задержки.
--- Конец цитаты ---
Серег тут надо на курсы С или С++ посылать , пока опыта не будет в работе с указателями это все ровно что объяснять дроби, человеку незнающему умножение.
Навигация
Перейти к полной версии