Разработка и ромхакинг > Ромхакинг
[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
--- Конец кода ---
Интересно, что эта дверь открывается без ключа, если вернуться назад в левую комнату. Так было в оригинале, может я что-то не понял.
Навигация
Главная страница сообщений
Предыдущая страница

Перейти к полной версии