Разработка и ромхакинг > Ромхакинг
[SMD] Dune: The Battle for Arrakis
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 миссии и сразу прыгнул на неё и юзверь уже сидит играет. никакой задержки.
--- Конец цитаты ---
Серег тут надо на курсы С или С++ посылать , пока опыта не будет в работе с указателями это все ровно что объяснять дроби, человеку незнающему умножение.
SeregaZ:
не не :) я еще не сдался!
ты приехал на склад разгружаться. кладовщик такой - да в конец склада вези. вот там свалил в кучу... и домой. а кладовщику не сказал какая полка. и всё. хрен он потом найдет твой товар :) вот так и здесь...
Добавлено позже:
и да! я все-таки оторвал свою жопу и купил старые-новые обновки для компа :) сижу винду-шминду ставлю. правда купил то что было... абы какое. i3 9100F. ну... после моего старенького компа будет самолет. хотя думаю надо было еще SSD сразу взять... чтоб самолет был в двойне :)
Slava1989:
--- Цитата: SeregaZ от 23 Апреля 2025, 12:57:44 ---не не :) я еще не сдался!
ты приехал на склад разгружаться. кладовщик такой - да в конец склада вези. вот там свалил в кучу... и домой. а кладовщику не сказал какая полка. и всё. хрен он потом найдет твой товар :) вот так и здесь...
--- Конец цитаты ---
давай я тоже пример приведу.
берем книгу и оглавление на начальной странице читаем оглавление : карты на 4 и 5 странице,(представим что на 4той маленькая карта 32 на 32, а на пятой большая 64 на 64 и большая карта так как в 4 раза больше занимает аж целых 4 страницы,
а после карт к примеру у нас идут юниты, и они у нас на 9 странице,
вот мы берем и меняем карту на странице 4 на карту размера 64 на 64. но мы вставляем ее, а не переписываем первые 3 страницы карты которая изначально была по оглавлению с 5 страницы. и по итогу получаем что первая карта с 4той страницы вторая карта с 8 страницы, а юниты с 12!
а игра об наших изменениях нихрена не знает , и запускает 1вую карту со станицы 4, и тут все работает ... но тут игра получает инструкцию отрисовать юнита. и она смотрит в оглавление, там написано юниты страница 9! лезет на страницу девять. а там с какого то хрена вторая часть карты номер 2 . все вылет или зависон ...
--- Цитата ---и да! я все-таки оторвал свою жопу и купил старые-новые обновки для компа :) сижу винду-шминду ставлю. правда купил то что было... абы какое. i3 9100F. ну... после моего старенького компа будет самолет. хотя думаю надо было еще SSD сразу взять... чтоб самолет был в двойне :)
--- Конец цитаты ---
встроенную бери та которая сразу в материнку втыкается, а не через сата кабель... там скорость в раз выше...
Навигация
Перейти к полной версии