This commit is contained in:
ezwrk 2024-06-05 14:16:51 +03:00
commit b8d1a8022c
649 changed files with 171549 additions and 0 deletions

330
trans.txt Normal file
View file

@ -0,0 +1,330 @@
Свободное место:
007600-008000 (2560)
01761E-018000 (2530)
04fc20-050000 (992)
057480-058000 (2944)
05a0c0-05b300 (4672)
0f3420-0f4000 (3040)
5744C
$50000 - там поинтер на главные поинтеры текста
$5744C - там поинтеры на главные блоки текста
Указания к скрипту
Особых ограничений на длину строки нет, т.к. длина символов не фиксированная. Ширина символа определяется по крайней правой его точке. +1 разделительный столбец между символами. Ширина одной строки = 200 пикселей. В среднем на строке помещается 25 символов по 7 пикселей (+1), но может поместиться и все 100.
Управляющие и прочие символы:
<44> - точка на среднем уровне высоты (не используется)
<4B> - конец фразы
<4D> - перенос строки (не пишется) - исправлено
<4E> - ? (управляющий символ)
<4F> - ? (управляющий символ)
<50> - число (уровень, урон, бонус атаки и т.д.)
<51> - персонаж
<52> - направление (Север, Юг, Запад, Восток)
<53> - герой
<54> - враг
<55> - предмет
<56> - заклинание
<58> - управляющий символ
Управляющие символы <4B>, <4E>, <4F>, <58> НЕ удалять и НЕ перемещать. Остальные можно перемещать при необходимости (например, имя врага стояло ДО какой-то фразы, а можно поставить ПОСЛЕ неё).
Символы на персонажа, врага и т.д. просто вставляют имя персонажа, врага и т.д. без всяких изменений и дополнений (например, пробелов слева или справа от имени).
В шаблонных фразах типа
<51> attacks!<4B>
могут использоваться разные падежи (в английском-то один падеж).
Поэтому, если использовать другой падеж (например, винительный), надо "придумать" новый управляющий символ (любой, больше $60) и вписать его, например, <62> - предмет в винительном падеже.
Тогда фраза
<51> uses the (кто-то использует такой-то предмет)
<55>!<4B>
будет переведена так:
<51> использует
<62>!<4B> (предмет в винительном падеже)
Соответственно, для остальных падежей и для остальных типов символов (на врагов, персонажей) или для множественного числа (врагов, т.к. в некоторых фразах есть коолективные действия врагов) будут другие символы.
Будут составлены таблицы в разных падежах и мн. числе, к которым и будет идти обращение при соответствующих символах.
Возможно использование английского текста. В шрифт поместятся оба алфавита.
Шрифты:
основной (текст и надписи на спрайтах) начинается с адреса F10CC
все символы 14 пикселей в выосту, ширина - любая до 16, следующий символ выводится сразу после самой правой точки предыдущей, причём, в надписях две нижние строки предыдущего символа оказываются над последующим. На каждый символ отводится $1C байт.
Декодирование:
MOVE.B (A0)+,D0 ; записываем байт текста
1B70C LEA $06DC(PC),A1 ; A1=1BDEA
1B710 MOVE.W $00(A1,D0),D0
По адресу 1BDEA идёт таблица соответствия символов шрифта (или управления) байтам текста.
Надо:
01B70C: 4EF9XXXXXXXX4E71 (JMP, NOP)
XXXXXX: 43F9YYYYYYYY303100004EF90001B70C (LEA, MOVE.W, JMP)
$1BED0 move.w #$0011,D0 - ширина символа по умолчанию, затем идут сдвиги вправо, и ширина уменьшается до тех пор, пока не будет найдена самая правая точка
Другой шрифт:
00CBA8 JSR ($0009C00C) - загрузка 1-х 8 кб видео с шрифтом и "EXP" в городе
00CBA8:6004
09C554 BSR $02 - загрузка 1-х 8 кб видео с шрифтом и "EXP" в начале
Слова в меню начинаются с адреса 145609
слова EXP в видео (адрес "карты"):
C094, C095 - два тайла
1) E190
2) E350
3) E510
23910:94
Враги начинаются с адреса $6FF1, поинтер 000348
Первые слова предметов начинаются с адреса $69E4, поинтер 000340
Вторые слова предметов начинаются с адреса $6DDB, поинтер 000344
Слова в городе начинаются с адреса $7527, поинтер 00034C
Имена начинаются с адреса $755B (1-е имя пустое), поинтер 000350
Магии начинаются с адреса $74B2, поинтер 00033C
Менюшные слова (HP, REMOVE, ARMOR и т.д.): 238C9 - 23D3C, формат необычный.
Названия предметов состоят из двух частей. Каждая часть не больше 9 символов. Если в конце первой части нет разделительного пробела, а вторая часть есть (т.е. непустая), при выводе названия предмета в окошке меню после первой части приписывается "-".
Пример:
слово SHORT SWORD (см. файл Shorts1.bmp)
1-я часть SHORT_ ("_" - пробел)
2-я часть SWORD
первая часть с пробелом, поэтому слово выводится в окошке меню как обычно (см. файл Bronzek.bmp)
слово BROADSWORD (см. файл Broads1.bmp)
1-я часть BROAD
2-я часть SWORD
первая часть без пробела, а вторая часть непустая (слово SWORD), поэтому приписывается "-" после 1-й части (см. файл Broads.bmp)
Поэтому надо учитывать пробелы в концах первых частей.
По адресу 1A9BE идёт проверка с номером предмета, и по ней пишется или не пишется тире после первой части.
4 17 1B 3D 49 46
Направления движения по адресу $CAA3
Код разжатия старикашки, облаков и земли: 9C716
Шрифт - 58000, 5801C - 58818 - 2044 байта -> 6384
Старикашка - C00A0, D8684 - D981C - 4504 байт -> 6304
Облака - C00C4, D981C - D9E68 - 1612 байт -> 3872
Пол - C00CC, D9E68 - DA69A - 2098 байт -> 3680
Основной текст:
Процедура разжатия текста $18018 (обычно JSR), далее прыжок на $1B5AC, d0.w содержит номер фразы.
1B5C8: BSR $1B694 - извлечение адреса фразы по номеру
1B69E: move.l $50000,a0 - главный поинтер на поинтеры блоков
1B5D8: BSR $1B52A - инициализация начального символа [$4B]
1B6F6: BSR $1B53A - распаковка очередного символа
1B552: lea $1aec0(pc),a1 - таблица поинтеров на деревья
1B55A: lea $1af7a(pc),a1 - базовый адрес деревьев, указывает на кодовую часть первого дерева, левее - символьная часть
1B598: move.b - распакованный символ
$FF3222 (reg a3) - номер текущего бита считанного байта сжатого текста, $FF3224 (2+a3)- текущее значение сдвинутого байта
1B5A2: move.b d0,$00B5(a3) - символ
$FF3A58 - адрес считываемого байта сжатого текста
1B700: Если d0.b не равен символу конца, то он увеличивается в два раза и смотрим следующую таблицу:
1B70C: LEA $1BDEA(PC),A1 - таблица соответствий символам их действий (вывод тайла или управляющий символ)
1B77E: CPMI.W $8000,D0 - проверка, является ли символ управляющим
1BEA4: вывод символа
1BEB6: move.l $e4004,a1 - базовый адрес основного шрифта
1BED0: move.w #$0011,d0 - максимальная ширина символа
1BEEC: MOVE.W #$0008,D0 - ширина пробела
$FF301A - текущий столбец вывода символов
1BEF6: cmp.w #$C4 - максимальная ширина строки в пикселях
$FF3A50 - адрес слова, которое будет подставлено вместо управляющего символа
В VBL:
1B636: cmpi.w #$0024,d1 - сравнение d1 с диапазоном символов, при появлении которых выдаётся звук. Если d1>24, звука нет.
Направления (румбы):
Просмотр карты: $C9FE
CA04 - CA34 - код проверки, мы НАД землёй или ПОД ней и вывод сообщения
$FF000F - номер румба, 0-3 (север, восток, юг, запад)
$FF0010 - координаты на восток
$FF0011 - координаты на юг
CA6C: move.b - вывод румба
CA74: move.w - сохранение длины-1 вставляемого слова (румба) по адресу $FF3066
$CAC0 - длины румбов
$CAA3 - румбы, на каждый по 8 байт, разделены байтами 00
Разжатие второго шрифта:
2 обращения:
CBA8: JSR $9C00C - в городе
9C554: bsr $02 - перед старикашкой
9C558: move.l $58000,a0 - поинтер на запакованный шрифт
9c55e: move.w #0,a1 - начальный адрес куска в VRAM
9c562: move.w #$1000,d0 - DMA length
Затем прыжок на одну из стандартных процедур распаковки 0FCC.
$FFAE84 - начало распакованной графики, конец определяется самой data и не зависит от DAM length
27E84: конец распаковки
0DC8: начало пересылки по DMA (должно быть D1.w = 0002)
0E58: конец пересылки по DMA
0E82: выход
Второй шрифт имеет размер #$1900, но пересылается #$2000.
Основное оконное меню (ENTER, ITEM, STATUS, SPELL, USE, EQUIP, DROP, GIVE) основано на спрайтах.
1D5F6: move.l $58014,a0
1d5fc: lea $0f680,a1
1d602: move.w #$0360,d0
1d606: jsr $284
1AB08: карта надписи EQUIPPED отдельными командами
$2374E - поинтеры на менюшные/оконные карты тайлов.
1A306: обращение к этим поинтерам.
Номера карт:
0 - шаблон окошка наверху экрана со статусом перса
1 - окно с отображением золота
2 - экипировка
3 - характеристики перса
4 - WHOSE STATUS
5 - WHOSE SPELL
6 - рисунок ENTER
7 - рисунок ITEM
8 - рисунок STATUS
9 - рисунок SPELL
A -
B -
C -
D -
E - левое окно при экпировке
F - то же?
10
11
12
13 - SEARCH
14 - ITEM
15 - STATUS
16 - SPELL
17 - USE
18 - EQUIP
19 - DROP
1A - GIVE
1B, 1C - OTHERS
1D, 1E - EQUIP WHO?
1F - 22 - EQUIP WHICH?
23 - 29 - 4 надетых предмета
2A - WPN FACTOR и AMR FACTOR
2B - UNARM
2C - REMOVE 1
2D - REMOVE 2
2E - REMOVE 3
2F - CAN'T REMOVE CURSED ITEM
30 - .... IS CURSED!
31 -
32 -
33 - предметы выбранного перса
34 - выбранный предмет или заклинание (?)
35, 36 - ATTACK
37 - ITEM
38 - RUN
39 - SPELL
3A - ATTACK
3B - ITEM
3C - DEFEND
3D - SPELL
3E -
3F -
40 - BUY
41 - SELL
42 - EXIT
43 - DEALS
44 - BUY
45 - SELL
46 - EXIT
47 - CRAFT
48, 49 - REPAIR
4A, 4B - ORDER
4C - маленькое окошко с именем перса и жизнями
4D - = 33
4E - ARMOR
4F - SHIELD
50 - WEAPON
51 - HELM
52 - 56 - окно с отображением золота
57 - 5D - ?
$1aec0 - $1b52a - деревья с поинтерами, надо стереть
Поинтеры поместим на $1aec0, деревья - на $17800, поинтеры к тексту - $5000c, текст на $5003c.
Надо заменить указатели на поинтеры для деревьев и на деревья. Заменить указатель $50000. $50004, $50008 не используются, но лучше поменять.
Разжатие 2-го шрифта - $9C558
В скрипте последний символ - 5A, но в роме есть таблица и для 5C. Новые символы: 5D - куча врагов, 5E - предмет в винительном падеже. [$61] исправлено на 5D.
Имена героев по адресу $2DC6.