Разработка и ромхакинг > Редакторы для консольных игр
ZAMN Editor Sega Genesis
Марат:
Представляю вашему вниманию редактор уровней Zombies ate my neighbors, в оригинале написанный Piranhaplant и модифицированный мною для редактирования версии игры для Sega Genesis. Начал я переделку в прошлом месяце. На данном этапе почти всё удалось адаптировать. Единственное что пока не доработано, так это возможность безбоязненно редактировать все уровни игры. Дело в том, что в версии игры для SNES все данные уровней находятся в последнем банке и есть возможность как уменьшать размер рома, так и увеличивать. В Сеге же данные находятся между кодом игры и менять размер нет возможности. Пока я ещё не придумал как обойти этот момент. Возможно придется увеличить ром и перенести все данные уровней в новое место. Либо запаковать карты метаблоков. В SNES, к слову, они запакованы, но все остальные ресурсы нет. В Сеге же наоборот, все ресурсы запакованы кроме палитры и карт метаблоков. Так же пока не разбирал генератор паролей для игры. В общем, можете пока поиграться с редактором в таком виде, каком он есть.
SeregaZ:
к сеговской версии еще расковыряй GEMS, в смысле чтоб можно было менять мелодии, в смысле измененные банки не портили код, который будет идти после этих банков.
адреса, оставленные неким товарищем Megaplex, который где-то сгинул в просторах тырнета :(
--- Цитата ---Zombies Ate My Neighbors (U) [c][!]
EAB00 pat
EBF1C mod
EBF24 seq
F0D18 dac
--- Конец цитаты ---
паковать мелодии и спецэффекты можно... эээ... по идее можно - шеловским комбайном. хотя тут я чото не уверен :) ну попробуй тада еще и драйвер тоже изменить, если вдруг там какой там разительно отличающийся от стандартного. GemsScan находит этот адрес драйвера. хотя я не уверен в правильности, так как банки он не находит. только драйвер. это несколько настораживает.
Марат:
C аудио не приходилось работать. Поэтому даже не имею представления как и что там работает.
SeregaZ:
и не парься :) главное все что после аудио не потерялось. типа скажем:
0 начало рома, заголовок
10 графика
20 звук
30 какой-то еще код
типа мы изменили звук - скажем какой-то сэмпл стал длиннее. то есть стало
20 звук
34 какой-то еще код.
вот старая ссылка в оригинале будет смещение 30. а надо чтоб оно изменилось на 34. весь вопрос что это за код после банков звука идет и где это указывается выше вроме. в зеротолерансе например так. есть какие-то данные после звука, из-за чего мы не можем менять сэмплы на какие угодно. только если в пределах размеров старого банка сэмплов подменивать. но это не очень :) хотелось бы прям полностью чо захотел - то и втулил и чтоб игра ничо не заметила :)
сами адреса банков сэмплов, мелодий, инструментов и модуляций по моему указываются в файле драйвера. и если это был не очень перехимиченный модифицированный GEMS - возможно я даж найду где это в файле драйвера. я по моему что-то такое делал... то есть файл драйвера читался, и каждое двухбайтовое значение сравнивалось - а не равно ли оно смещению одного из банков? если равно или плюс минус из-за неточностей, то маяковало - что возможно это нужный адрес. в итоге у меня был лист с возможными адресами, но это все осталось на уровне теории и проверить я не проверил :)
но это будет только пол дела. главное весь код после звука и где указан адрес на этот послезвучный код и что там именно - тут я пас :) я ж не ромхакер :) хотяяяяяяяяяя... хорошая мысля приходит апосля :))) а кто сказал, что код музыки должен лежать там, где он должен лежать? что мешает взять и переместить интересуемый адрес в конец рома, а сам ром увеличить скажем на 1 мегабайт. то есть драйвер физически остается на старом месте, код после звука на старом - просто смешения в драйвере будут ссылаться куда подальше, чем оно в оригинале. согласно моему диванно икспердному мнению - все должно получится :) правда там могут быть подводные камни в виде ограничения на размер рома. мож игра пошлет меня нахер после такого...
Добавлено позже:
перечитал твой первый пост, и сижу теперь огорченный. я писал свой пост про перенос банков в конец рома - думая что меня осенило :) оказывается я просто по диагонали прочитал твой тот раз, не асилил, но это отложилось в памяти, а потом подумал что придумал это сам :))) у меня батя так делает. ему чего посоветуешь, он забудет. потом вспомнит, но будет думать что это он сам придумал :)
Марат:
Да с музыкой проблем нет. Достаточно указать номер нужной мелодии в шапке уровня и всё.
Вопрос с местом для настроек уровня решён. Осталось придумать куда деть перепакованные карты уровня.
SeregaZ:
это ты в смысле подмена мелодий внутри игры? так я ж про импорт мелодий из других GEMS игр в эту игру. под подмену то да, размеры и физическое нахождение в роме мелодий остаются неизменные. другое дело ежели там втулить игре какую-то большую по весу мелодию :) или сэмплы какие-то подменить скажем.
Добавлено позже:
что-то комбайн оказывается с ошибкой распаковал... пишет что типа 3 сэмпл размером куда больше, чем типа банк сэмпла вмещает. по идее такое может быть. типа игру когда собирали, выяснилось что она чуть больше 1 мегабайта и взяли тупо обрезали сэмпл. физических обрезали в конце файла, а в заголовке не правили. однако тут вроде бы ошибки нет и смещение и размер вполне вписывается в этот 1 мегабайт рома и сэмплы идут по порядку:
--- Код: ---Offset 0 1 2 3 4 5 6 7 8 9 A B
00000000 47 9C 00 00 00 00 13 10 00 00 00 00 0
4A AF 10 00 00 00 32 1E 00 00 00 00 1
49 E1 2E 00 00 00 A4 0B 00 00 00 00 2
5A 85 3A 00 00 00 08 0F 88 02 FF FF 3
00000030 4A 8C 49 00 00 00 11 0F 00 00 00 00 4
57 9D 58 00 00 00 27 1E 81 0F 00 00 5
4A C4 76 00 00 00 7B 1A 00 00 00 00 6
48 3F 91 00 00 00 48 1B 00 00 00 00 7
00000060 48 87 AC 00 00 00 BD 1B 00 00 00 00 8
47 44 C8 00 00 00 F6 12 00 00 00 00 9
49 3A DB 00 00 00 83 0F 00 00 00 00 A
00 00 00 00 00 00 00 00 00 00 00 00 B
00000090 4A BD EA 00 00 00 18 08 00 00 00 00 C
5A - метка частоты сэмпла
85 3A 00 - смещение
00 00
08 0F - по идее размер
88 02
FF FF
--- Конец кода ---
мля... придется идти в этот сраный дискорд назад, спрашивать у товарища раздолбая шелла чо за затык... мож у меня комбайн старый или чего.
SeregaZ:
шелл этот блудит где-то в творческом запое :( чтоб ему икалось.
так вот тут значит две загвоздки:
первая шелловская, а именно где при распаковке мелодий один сэмпл не распаковывается из за того, что сплиттер шелла складывает реальный размер с сэмпла с переменной END. и получается, что сэмпл якобы вылазит за пределы рома и поэтому он не создается. это означает, что распаковать мы распакуем, а запаковать обратно не получится. это можно переделать, выкинув из формулы учет этого дурацкого параметра END для сэмпла. тогда, думаю, получится собрать банки так как были.
вторая: GEMSScan находит драйвер черт знает где в роме. хотя обычно этот драйвер как раз перед банками лежит. в этом драйвере, по идее, должны быть смещения на банки. типа банк нот там-то, банк сэмплов сям-то, банк модуляций там-то и банк инструментов вот там. то есть согласно моей диванно икспердной теории в этом драйвере должны где-то лежать некоторые значения - 4 штуки, которые были бы смещениями до этих банков. так вот чот они у меня не находятся :) или файл драйвера GEMSScan находит неверно... или мои кривые руки неверно подсчитывают смещения и соответственно я ищу неправильные значения и поэтому не могу их найтить.
при всем этом ежели нужно просто подменить сэмплы - с этим никаких проблем нет. даже без знаний всех этих смещений у меня получилось подменить и игра ничего не заметила :) но это несколько неверно. правильней было бы все-таки делать полное перелопачивание банков и правильное их добавление в ром, с изменением смещений в драйвере.
так что вопрос - а ты сможешь найти этот самый драйвер вручную? чтоб не надеяться на эту горе-софтину, которая сама банки найти не может. находит только драйвер. в моем случае это USA версия игры. берем файл рома и мышкой перетаскиваем на этот GEMSScan - он должен родить рядышком с ромом файл 7 килобайт чтоль... с таким-же названием, как у рома, с припиской driver. вот я сомневаюсь что она правильно его находит. в этом файле должны быть смещения на такие адреса в роме:
EAB00 pat
EBF1C mod
EBF24 seq
F0D18 dac
хотя это адреса по отношению к началу рома. в драйвере видимо должно быть что-то типа:
EAB00 pat - адрес драйвера = настоящее значение
Добавлено позже:
зря проклинал шелла. заявился :) подсказал чо поправить. один затык решился. так-же проконсультировал он и по второму. я правда ничего не понял, но кажется адреса все-таки нашлись. попробую подменить какую-то мелодию.
Марат:
А где можно почитать доки по этой теме?
SeregaZ:
я наверное видео запишу... или по крайней мере пост зафигачу с подробными объяснениями :) и поскольку я нифига не ромхакер - то объяснения будут на пальцах :) и видимо архив приложу со всеми нужными бубнами, с которыми потом танцевать надо будет.
Добавлено позже:
угу... или не напишу :) сыпется после сборки. зараза :) первую ноту из мелодии логотипа конами проигрывает и все. звук зависает.
SeregaZ:
свершилось! и друг спас друга! кароче заработало... товарищу r57shell'у было прокомпосированно кучу мозга, и оно после этого заработало. теперь надо это дело все оформить в более понятную программу и написать пост как этим пользоваться.
Марат:
Нашёл интересный материал. Кое-что проясняется. В доке, кстати, написано, что 128 инструментов. И по первому поинтеру это тоже становится ясно.
SeregaZ:
не торопись :) я почти доделал. из дюновского редактора все чо хотел перенес. это будет шедевр... опять :) точнее он итак шедевр, только теперь будет еще и для зомбей.
пока сижу ковыряю - ты про свой редактор расскажи. как он работает? куда что пишет? просто я к чему веду то... мои банки идут в конце рома. и их в принципе можно подвинуть. если тебе надо место... НО! пока-что предполагаю что ты как бы сначала музыку правишь, как тебе надо, а уже после рисуешь уровни в своей программе. твоя программа умеет сохранять проделанную работу если чо? или она сразу в игру пишет? просто я к чему... ты корпел две недели и рисовал пять уровней. тут выясняется, что какой-то звук корявый. при переделке - мой редактор возьмет оригинальную игру и зафигачит туда новые песни, которые ты выбирал для своего хака. и соберет оригинал с новыми песнями. и тебе получается надо свои уровни опять втуливать в оригинальную игру. если твой редактор конфиги не делает, а сразу пишет в игру - получается вся работа по уровням улетит на смарку. так что тут еще надо подумать. я почти доделал :) правда на всяких виндовсах 7 и выше не тестировал... хрен знает как она себя поведет.
материал в основном тут: http://elektropage.ru/publ/o_prekrasnom/articles/gems_sound_driver/2-1-0-71
но несколько туманно. лови в дискорде шелла :) я ему эти два дня мозги компосировал. он все знает и пояснил чо нужно доделать в этом зомби-случае. каждый случай можно сказать уникальный :)
Марат:
Ну да, сразу в игру сохраняешь. Там как бы есть возможность эскпорт/импорт уровней. Можно сохранять в виде текста.
Добавлено позже:
Ну, все теперь более менее понятно. Выдернул музыку и проиграл треки с помощью GemsPlay. Стало понятно почему номера треков музыки не по порядку. Они в ресурсах так и идут вперемешку со звуками.
Добавлено позже:
Место, кстати под настройки уровней нашлось аж 2 кб. Осталось найти место под перепакованные карты уровней. Думаю, сжать карты блоков и тогда должно места освободиться прилично. 5 наборов блоков по 32 килобайта. Если все это сжать, то, думаю, килобайта 32 освободиться. Просто надо будет редактор с хакнутым ромом распространять или патчить ром и сделать какую-то проверку, чтоб программа знала ром уже хакнутый или нет.
SeregaZ:
пока ютуб заливается :) краткий инструктаж:
не каждая мелодия подойдет туда куда хотелось бы. есть короткие проигрыши к примеру. при смерти скажем в марио. этот фрагмент естественно не подойдет заместо фоновой мелодии. так-же следует ориентироваться на место, где играет мелодия. например дюна - на брифинге ментат что-то там трындит. там мелодии могут использовать 6 канал для сэмплов. скажем барабаны туда втулили. и мелодия будет звучать хорошо. но ежели эту-же мелодию впихивать уже в мелодию, которая играет в сражениях - там она не подойдет, так как крики пехоты, выстрелы, взрывы - много чего сделано как раз с использованием сэмплов и соответственно мелодия и звуки в бою будут друг другу мешать, ведь GEMS не умеет смешивать сэмплы.
потом следует ориентироваться на зацикленность мелодии. и это может быть проблемой. для дюны например расчитано что мелодия в бою будет играть минуты 3 или скок там, и затем она будет сменяна на следующую. но вдруг, втуливаемая новая мелодия всего по длительности меньше этих 3 минут? произойдет неприятный затык. мелодия закончит играть, а время старта следующей еще не наступило, так как игра будет думать что старая мелодия еще играет. в результате будешь сидеть эту оставшуюся минуту без музыки. такое может быть и здесь наверное. так что это тоже надо учитывать.
Марат:
Там же вроде как в заголовке сэмпла указывается, смещение на следующую мелодию относительно текущей. Не все ведь мелодии одинаковой длины.
SeregaZ:
так она ж работает как:
играй это. ожидаю, что играть будешь 3 минуты.
3 минуты прошло. играй вот то. ожидаю 3 минуты...
а мелодия у тебя 2 минуты. 2 минуты проиграло - все. будет тишина :) там нет перехода, что дескать в конце мелодии начинать играть следующую. точнее команда вроде такая вобще есть и может быть записана в конце мелодии, но просто мелодии в моей дата базе из всяких игр как они были в оригинале, и естественно что там в конце незапланировано такого перехода. поэтому тут помогли бы закольцовки в треках на бесконечность. где-то они есть, а где-то нет. а полноценный GEMS треккер, чтоб можно было прям до ноты все раздербанить - никак не доделаю :) черновики то набросал - это будет лист в клетку, где мышкой ноты таскать. но мне не нравится что там нельзя уменьшать или увеличивать масштаб. сейчас там несколько крупновато... то есть не удобно :)
еще несколько минут. думаю скоро до конвертируется :)
SeregaZ:
на виндовсях 7 и выше не тестировалось. возможно понадобится запуск от администратора.
возможно эмулятор не будет запускаться. возможно эмулятор не сможет увидеть ром в автоматическом режиме и придется запускать вручную из папки. эмуляторы оказываются такие капризули :) один работает в консоли с путем, где есть пробелы - второй не работает. один работает когда ему драг н дропом ром мышкой переносишь - другой не работает. так что ежели эмулятор не прокатит - снести в моих документах в папке GEMSDATABASE файл config.ini - в него путь до эмулятора вписывается. и тогда при старте программы она опять попросит указать путь до эмулятора. это тоже надо продумать чтоб кнопку отдельную для пути родить.
пока-что чтобы сбросить мелодии на оригинал надо будет сначала запустить батник split_zomb.bat - он из оригинальной игры выковыряет банки оригинальные и положит их в папку gems.
после того запустить game_gems_split.bat - он распакует эти банки на отдельные файлы мелодии, сэмплов , инструментов и модуляций.
архив пришлось снести. надеюсь доделаю и будет в последнем сообщении выложен.
Марат:
Интересно. Вечером посмотрю. А новые мелодии в игру добавить можно? Т. е. не просто замена, а чтоб дополнительно к существующим?
SeregaZ:
вопрос конечно интересный... однако это нужен будет дополнительный код, эти новые мелодии или спецэффеты задействующие. сам GEMS по идее может быть больше. они просто не будут использоваться.
зайти в папку gems, создать новую папку 085 или скок там... +1 по отношению к последней. зайти в неё и создать файл 085.cfg. а в файле game.cfg добавить строчку sequence '085\085.cfg'
после в эту папку уже докидывать нужную мелодию через программу. посмотрим, может надо будет добавить такую возможность в редакторе. так-же может быть надо будет туда добавить из дюновского редактора всякие дополнительные мелкие редакторы - типа редактор сэмплов, редактор FM и PSG инструментов, редактор модуляций... запасные части от GEMS треккера :) без него самого.
но это только будут банки gems. в игру добавлять - нужен код, использующий правильный номер мелодии. причем с этими номерами тоже не все так однозначно :) например в дюне не напрямую обращается, дескать проиграй мне номер 085. там идет запрос к таблице. проиграй мне из таблицы номер 5. а уже в этой таблице, в ячейке номер 5 - лежит значение 085. поэтому тот номер мелодии в шапке уровня в зомбях - не обязательно сразу порядковый номер в GEMS :) возможно тебе придется искать и эту таблицу... если она тут применяется. со спецэффектами - всякими выстрелами и криками зомбей, тут вовсе темный лес. где их искать в коде и как добавлять новые события - тут я вобще не представляю.
ты еще как Ti сделай :) в смысле для рокенролрейсинга он добавлял AI-игрока, который играет на стороне игрока - вот чтоб второй игрок в зомбях был AI, бегал за живым игроком и постреливал туда суда :)
Марат:
Ну, я вообщето планировал только редактор переписать под сегу и всё.
Навигация
Перейти к полной версии