| Разработка и ромхакинг > Ромхакинг |
| [SMD] Dune: The Battle for Arrakis |
| << < (465/482) > >> |
| 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 сразу взять... чтоб самолет был в двойне :) --- Конец цитаты --- встроенную бери та которая сразу в материнку втыкается, а не через сата кабель... там скорость в раз выше... |
| Навигация |
| Главная страница сообщений |
| Следующая страница |
| Предыдущая страница |