| Разработка и ромхакинг > Ромхакинг |
| [NES] Castlequest / Castle Excellent |
| << < (10/10) |
| Миха42:
--- Цитата: Cyneprepou4uk от 10 Апрель 2022, 14:30:00 ---Congratulations! You've completed training mode by making it all the way to a dummy princess. Perhaps it's time to face a real challenge and save the princess? --- Конец цитаты --- Попробовал впихнуть, не влезает 1 символ 'time to face a real challenge' :neznayu: |
| ПАУК:
--- Цитата: Миха42 от 11 Апрель 2022, 16:49:44 ---не влезает 1 символ 'time to face a real challenge' :neznayu: --- Конец цитаты --- В смысле? |
| Миха42:
--- Цитата: ПАУК от 11 Апрель 2022, 17:45:30 ---В смысле? --- Конец цитаты --- 29 символов выходит в строке учитывая пробелы, а по ширине доступно 28 тайлов. Добавлено позже: Вобщем выкинул "Congratulations!" чтоб уместить. В оригинальной финальной картинке тоже пришлось его выкинуть. <_< Добавлено позже: Потестил, какие недочёты заметил, вроде исправил. Обновил. 1.7.0 Всё что изменял особо уже и не помню. Из основного: Попытался добавить ENG язык, как смог :D Дабавлена сложность Легко для оригинальной версии. ;) Добавил меню тестирования игры с редактированием ключей, наличия карты, количества жизней, положения персонажа при старте игры, и комнаты старта. Для открытия данного меню: выставить Музыку: 4 Повтор: да и в положении выход зажать Влево + Вниз + SELECT + A + B при входе в данное меню все сохранения и рекорды очей стираются Делать возможность перевода данного меню на другие языки не планирую, предназначено лишь для Рус языка. |
| ПАУК:
--- Цитата: Миха42 от 11 Апрель 2022, 17:54:39 ---29 символов выходит в строке учитывая пробелы, а по ширине доступно 28 тайлов. Вобщем выкинул "Congratulations!" чтоб уместить. В оригинальной финальной картинке тоже пришлось его выкинуть. --- Конец цитаты --- Может, тогда написать "Congratulation!"? Будет поздравление, а не поздравления. |
| Миха42:
--- Цитата: ПАУК от 12 Апрель 2022, 03:34:25 ---Может, тогда написать "Congratulation!"? Будет поздравление, а не поздравления. --- Конец цитаты --- Весь текст делится на строчки по 28 тайлов, убрав даже 1 символ в первой строчке, он не поможет высвободить место под 1 символ в пятой строчке. Для этого нужно смещать слова целиком, а смещать некуда, каждая строчка заполняется полностью. Изначально же финальные заставки делал под русский язык. Из вариантов: Либо переделывать текст подгоняя под ограничения, Либо переделывать пространство заставок высвобождая ещё одну строчку, Либо переделывать всё тайлы Рус 1 языка под стандартный 7х7рх и уплотнять текст выводя в жадой строчке как это было в оригинале Но вариант с уплотнением текста мне не особо нравиться, изначально от этого ушол чтоб текст не сливался в строчках, а теперь обратно ворачиваться что-ли?! :? Добавлено позже: Хотелось бы услышать мнения относительно нового уровня сложности, от тех кто его пройдёт до конца. Старался сделать его более похожим на оригинал, урезал количество ключей относительно количества дверей в сравнении с уровнем Очень легко, перераспределил дополнительные ключи разбросанные по всему замку, изменил пути и порядок прохождения комнат замка, с целью предотвратить быстрое 15 минутное прохождение. Вроде норм получилось, пока всё доделал сам забыл порядок прохождения, в итоге лишь с третьего раза прошёл игру. :) В результате закрались сомнения по части отношения игры к уровню Легко, может стоит попроще сделать для данного уровня или переделать под Нормальный уровень сложности, учитывая сколько раз можно попасть в западню если потратить нужный ключ не в том месте? |
| Миха42:
Разобрал таки код как устроен массив карты замка. Вся карта замка как известно состоит из блоков 16х8, каждому блоку при этом присвоен свой номер Все схемы всех комнат замка хранятся в CHR-ROM игры, в коде игры имеется массив адресов начиная с какого адреса PPU читать байты для загружаемой комнаты, далее все байты данной комнаты помещаются в RAM побитно записывая каждый бит в отдельный байт, после чего перебираются все биты по порядку в поиске соответствия порядка битов для соответствующего номера блока: 53 1 00 001 01 010 02 00010 03 01100 04 01111 05 01110 16 00001 10 0001110 08 00011111 19 00011010 1A 00011011 22 00000101 23 00000110 31 00000011 32 00000100 33 00011000 34 00011001 06 011011110 07 011011111 0C 000000011 0D 000000001 0E 011010101 11 011010010 1C 011011001 1D 011011010 1F 011011100 20 011011101 2A 000000000 2F 011010001 30 011010100 43 000001111 45 011010110 4B 011010111 4D 000000100 4E 000000101 52 000111100 0A 0110100111 0B 0001111010 25 0001111011 26 0110100000 29 0110110111 3D 0000000100 4C 0000000101 51 0110110110 5E 0110110000 41 00000111001 42 00000111010 4F 01101000010 50 01101000011 56 01101001100 5A 01101001101 35 011011000101 39 011011000110 44 011011000111 49 000001110111 4A 011011000100 09 0000011100000 12 0000011100001 13 0000011100010 14 0000011100011 15 0000011101100 17 0000011101101В результате получается что-то вроде байты:| 10 | 92 | 36 | A0 | 84 | биты: |00010|000|10|011010|001| 1|0110|10100|000|10|00010|0| блоки:| 02 | 02 | 2F |53| 30 | 02 | 02 | Теперь вырисовывается задача как это всё редактировать, в ручную сидеть перебирать биты это полный бред. :-\ Если допустим сформировать даже карту в виде порядка номеров блоков в txt файл, то их нужно будет сперва преобразовать в биты, а после уже записать в виде байтов. Без компилятора тут явно не обойтись. Есть у кого какие идеи чем можно подобное сотворить? |
| Cyneprepou4uk:
Миха42, есть у меня парочка скриптов, я могу разбить байты на биты в текстовых файлах, и чтобы они потом собирались обратно в бинарник через ассемблер ca65. Скинь ром и скажи какие байты надо "забитить". Добавлено позже: В общем взял я за основу версию 1.7.0 из шапки. Тыкаешь assemble.bat, собирается файл CHR.bin. Чтобы поменять биты/байты, редактируешь asm файлы, сохраняешь и снова запускаешь батник. Для удобства я там номера комнат пометил. |
| Миха42:
b]Cyneprepou4uk[/b], вытаскивать из рома байты и битить их нет смысла, ведь можно с помощью теста комнат в игре сразу грузить любую комнату, и в эмуле из RAM $0400 скопипастить уже готовый порядок блоков комнаты, и редактировать их на своё усмотрение. Нужно чтоб сперва блоки забитить, а после биты забайтить. :) Биты соответствующие каждому блоку известны, нужно чтоб программа читала блоки по порядку из файла и с помощью цикла писала соответствующие блоку биты в другой файл или ram, a после уже байтила их и выдавала готовый текст байтов. Порядок редактирования карты: Байты ---> биты --> блоки ---> редактируем блоки ---> биты ---> байты ---> меняем указатели комнат в зависимости от изменения количества байт на комнату Каждый блок имеет разную длину в битах от 1 до 13бит, а значит просто поковырять биты не удастся. <_< Добавлено позже: Если ни чего подходящего не найдётся, то на выходных буду кумекать над алгоритмом обратного сжатия данных комнат. |
| Cyneprepou4uk:
На твоем месте я бы код в игре переписал, чтоб с битами не ковыряться. Пусть читает 1 байт = номер 1 блока. Добавишь пару новых схр банков в игру чтоб все влезло. Чтоб быстрее скопировать распакованные данные, ставишь в нужных местах бряки, настраиваешь автокликер (я юзаю Clickermann). Ставишь эмуль на паузу и сейвишься там, где уже только что прочитался индекс комнаты из адреса. С помощью калькулятора в hex режиме жмешь = (заранее подготовив +1), затем ctrl+c, в дебаггере ctrl+v в нужный регистр чтоб подменить индекс комнаты, прогоняешь по нужным брякам, параллельно копируя байты из оперативки в текстовый файл, в конце (или в начале) цикла грузишь сейв в эмуляторе. В автокликере счетчик на 100, запускаешь всю эту телегу и идешь ютуб смотреть на мобиле пару часиков. |
| Миха42:
--- Цитата: Cyneprepou4uk от 14 Апрель 2022, 00:28:52 ---Пусть читает 1 байт = номер 1 блока. Добавишь пару новых схр банков в игру чтоб все влезло. --- Конец цитаты --- Я уже думал о таком, тогда понадобится очень много места в роме, вместо занимаемых 10кб данных о комнатах, размер вырастет сразу до 40кб. Учитывая что хочу МСХ версии игры впихнуть сюда же в ром со временем, то на одни только комнаты 100+кб понадобится. Как то жирно выходит в итоге. Но на крайний вариант придётся так сделать, если не придумаю как и чем обратно сжимать данные. |
| Cyneprepou4uk:
Да какая разница какой там размер получится, если маппер позволяет? У тебя PRG на 512кб, можно туда все перенести. Или волнуешься что карик подорожает? :lol: Чтобы разжимать и сжимать обратно, нужно полюбому скрипт писать. Еще и следить чтобы размер после редактирования не увеличивался, иначе поинтеры постоянно менять нужно. Гемор в общем. |
| Миха42:
Cyneprepou4uk, поразмышлял маленько, может ты и прав, сделаю 1к1, хоть и места будет больше занимать, но зато в будущем будет меньше геморою чтоб какой-нибудь новый блок добавить в игру. ;) Добавлено 16 апреля 2022 года: Касячнул чутка с возвратом адресов из стека при открытии карты. Исправил, обновил. 1.7.1 |
| Миха42:
Увеличил обзор комнаты, сместив спрайты с фоном левее на 1 блок, и уменьшил действие скроллинга увеличив обзор с правой стороны комнаты. |
| dascratchSgt1@t23c_jjt90$:
--- Цитата: Миха42 от 19 Июнь 2022, 15:37:50 ---Увеличил обзор комнаты.. (Ссылка на вложение) --- Конец цитаты --- Не на все комнаты произвело эффект.. во-вторых, я бы шёл до конца и убрал бы отступы полностью.. ещё заметил баг в комнате с водой (если упасть за зелёную дверь со старта, потом под лифт и направо, комната с колоннами), открыв зелёную дверь справа-снизу там теперь зияет зелёный сплэш.. Ещё для эстэтики добавить пробелы перед и после слов ключи и жизни и добавить дополнительно в центре чтобы выровнять. Вообще, было бы шикарно: убрать значки ключей а цифры перекрасить в цвета соответственно. |
| Sharpnull:
--- Цитата: dascratchSgt1@t23c_jjt90$ от 17 Февраль 2026, 22:35:18 ---ещё заметил баг в комнате с водой (если упасть за зелёную дверь со старта, потом под лифт и направо, комната с колоннами), открыв зелёную дверь справа-снизу там теперь зияет зелёный сплэш --- Конец цитаты --- После смещения фона левее, не была изменения установка палитры для дверей, поэтому для всех дверей была установка палитры для блока (16x16px) справа, это обычно не заметно, потому что дверь заменяется на блок цвета фона, а он у всех палитр одинаковый, но такое не работает с водой, у неё другой индекс в палитре. Для исправления A7C1:02 (был 04). Прикладываю исправление для Castle Excellent [h][ntsc] by Miha v.1.7.2. Код, который был исправлен, Bank 5: --- Код: ---A78C A5 2A LDA $2A A78E 29 01 AND #$01 A790 85 2A STA $2A A792 A0 07 LDY #$07 A794 A5 29 LA794 LDA $29 A796 C9 14 CMP #$14 A798 A5 2A LDA $2A A79A E9 00 SBC #$00 A79C 90 0E BCC LA7AC A79E A5 29 LDA $29 A7A0 E9 14 SBC #$14 A7A2 85 29 STA $29 A7A4 C8 INY A7A5 B0 ED BCS LA794 A7A7 C6 2A DEC $2A A7A9 4C 94 A7 JMP LA794 A7AC A5 29 LA7AC LDA $29 A7AE 0A ASL A A7AF 18 CLC A7B0 69 04 ADC #$04 ; Изменить на ADC #$02 A7B2 AA TAX A7B3 20 DF E8 JSR $E8DF A7B6 49 FF EOR #$FF A7B8 3D 00 01 AND $0100,X A7BB 9D 00 01 STA $0100,X A7BE A9 FF LDA #$FF A7C0 8D 9A 07 STA $079A A7C3 8D 9B 07 STA $079B A7C6 60 RTS --- Конец кода --- Интересно, что эта дверь открывается без ключа, если вернуться назад в левую комнату. Так было в оригинале, может я что-то не понял. |
| Навигация |
| Главная страница сообщений |
| Предыдущая страница |