Shining-in-the-Darkness-Lua.../trans.txt
2024-06-05 15:01:45 +03:00

330 lines
No EOL
9.2 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Свободное место:
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.