Text Format

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search

Extra Characters

For more information, see the Font page.

TacText Event Character Range
{0xD0??} {D0}{??} 00 to CF (do not use)
{0xD1??} {D1}{??} D100 to D1CF
{0xD2??} {D2}{??} D200 to D2CF
{0xD3??} {D3}{??} D300 to D3CF
{0xD4??} {D4}{??} D400 to D4CF
{0xD5??} {D5}{??} D500 to D5CF
{0xD6??} {D6}{??} D600 to D6CF
{0xD7??} {D7}{??} D700 to D7CF
{0xD8??} {D8}{??} D800 to D8CF
{0xD9??} {D9}{??} D900 to D9CF
{0xDA??} {DA}{??} DA00 to DA77
  • You can technically use characters D0 to FF for D1 to DA, but there is no reason to do so.

Special Characters

Note: The "next Text Variable" ID is increased by 1 every time it is called, starting from 0. This is not affected by special characters that specify a defined Text Variable such as {0xE6}/{E6}.

For example:

{E4} - {E5}{br}
{E4} - {E5}{end}

will print as:

"decimal value of TV $00" - "string value of TV $01"{br}
"decimal value of TV $02" - "string value of TV $03"{end}
Char TacText Event Description Recommended Values (hex)
D9B9 ??? {D9B9} Icon for the Circle button. N/A?
D9C7 ??? {D9C7} Icon for the Triangle button. N/A?
D9C8 ??? {D9C8} Icon for the Square button. N/A?
DA73 {SP} {DA73} A half-space. Useful for shaving some pixels off a line in a dialog box. N/A?
E0 {Ramza} {Ramza} Print World Unit 0x00's (#1) Name.

Despite not reading from text variables, will advance to the next text variable anyway.

N/A
E1 {0xE1} {unitname} Prints a string defined in the next Text Variable. See String Fetching.

Is 8 sections off into EB, making this effectively a Unit Name retriever at section 0 for both BATTLE and WORLD strings.

N/A
E2 {Delay ??} {delay:??} Wait a certain amount of frames before reading/printing the next characters. Default is 01. 00 to FF
E3 {Color ??} {font:??} Changes the colour of the displayed text (varies depending on the dialogue type). Default is 00. 00/04/08
E4 {0xE4} {E4} Prints the next text variable as a decimal value. N/A
E5 {0xE5} {E5} Prints a string defined in the next Text Variable. See String Fetching. N/A
E6 {0xE6??} {E6}{??} Prints a defined Text Variable as a decimal value. 00 to 7F
E7 {0xE7} {E7} ???
E8 {0xE8??} {E8} Next decimal number will use exactly ?? Spaces.

These spaces are empty characters that are just as wide as 0/1/2/3/4/5/6/7/8/9.

01 to 0A
E9 {0xE9} {E9} Prints a string defined in the next Text Variable. See String Fetching. N/A
EA {0xEA} {EA} Prints a string defined in the next Text Variable. See String Fetching. N/A
EB {0xEB} {EB} Prints a string defined in the next Text Variable. See String Fetching. N/A
EC {0xEC??} {EC} Displays a portrait? 00 to 7F
ED {0xED} {ED} ???
EE {0xEE} {EE} ???
EF {0xEF} {EF} ???
F0 {0xF0} {F0} ??? Doesn't open dialogue
F1 {0xF1} {F1} ??? Doesn't open dialogue
F2 {0xF2} {F2} ??? Doesn't open dialogue
F3 {0xF3} {F3} ??? Doesn't open dialogue
F4 {0xF4} {waitpress} Displays a cursor and waits for the player to press a confirmation button before resuming to read/print characters. N/A
F5 {0xF5??} {F5}{??} ???
F6 {0xF6??} {F6}{??} ???
F7 {0xF7} {F7} ???
F8 {Newline} {br} Inserts a line break. N/A
F9 {0xF9} {F9} ???
FB {BeginList} {FB} Begins a list of user-selectable choices. See Choice List. Use {close} for messages with this. N/A
FC {EndList} {FC} Ends a list of user-selectable choices. See Choice List. Use {close} for messages with this. N/A
FD {0xFD} {stayopen} Force to close via event instruction {51} ChangeDialog when used with FE {end}.

Can be placed anywhere inside the dialogue text. May prevent closing entirely.

N/A
FE {end} String End. Close via player confirm button input. N/A
FF {close} String End. Close automatically. {Close} for the FFTText Helper. N/A

String Fetching

Note: Special characters E1, E5, E9, EA, EB all use different values for each string you might seek. The string values below are according to EB - stick to EB and ignore the others as they all have access to the same strings.

To use, you need to write into the appropriate Text Variable a value that consists of the Offset defined in the tables below, plus the ID requested.

For example, let's say you want to fetch the string "Non-Charge" in an event. You would call it with character {EB} and with 0x000071E3 (Section 0x7000 + ID 0x01E3) written into address 0x80165EF4 (BATTLE Text Variable $00).

[EB] BATTLE/SQUAD Strings (BATTLE.BIN)

(Some notes on RAM locations can be found in the Discussion page.)

Offset String Set
0000 Event Text (Message ID starts at 0x0000 in this case).

Possibly buggy if dialog box isn't closed before loading another dialog box/rewriting the text variable.

0800 Section 2?
1000 Battle - Action Denied
1800 Battle - Action Effects
2000 Section 5?
2800 Section 6?
3000 Jobs - Names
3800 Items - Names
4000 In Events: ENTD Unit Nicknames by slot ID (0x00 to 0x14)
  • Does not populate list with Random or LoadFormation names until battle starts

In Squad Formation: Units - Names (ATTACK.OUT)

4800 Unknown Japanese text
5000 Misc. Menus
5800 Roster Unit Nicknames by slot ID (0x00 to 0x13)
  • Ignores units on Propositions. Here's a workaround.
6000 Section 13?
6800 Section 14?
7000 Abilities - Names
7800 Section 16?
8000 Battle - Navigation Messages
8800 Statuses - Names
9000 Formation/Squad/MC Text
9800 Section 20?
A000 Section 21?
A800 Section 22?
B000 Skillsets - Names
B800 Summon/Draw Out Display Names
C000
C800
D000
D800
E000
E800
F000
F800

[EB] WORLD/FORMATION Strings (WORLD.LZW)

Offset String Set
0000 Section 1?
0800 Section 2?
1000 Section 3?
1800 Section 4?
2000 Section 5?
2800 Section 6?
3000 Jobs - Names
3800 Items - Names
4000 Roster Unit Names
4800 Units - Names
5000 Misc. Menus
5800 World Help Messages
6000 Propositions (Completed) - Names
6800 Section 14?
7000 Abilities - Names
7800 Propositions - Rewards
8000 Tips - Names
8800 Section 18?
9000 Locations - Names
9800 Facts - Names
A000 World Map Menu
A800 Maps - Names
B000 Skillsets - Names
B800 Bar/Town Text
C000 Tutorials - Names
C800 Rumors - Names
D000 Propositions - Names
D800 Unexplored lands
E000 Treasures
E800 Record
F000 Person
F800 Propositions - Job Contents

[E9] New Game Strings (OPEN.LZW)

Offset String Set
0000 Section 1?
0800 Section 2?
1000 Section 3?
1800 Section 4?
2000 Section 5?
2800 Section 6?
3000 Section 7?
3800 Section 8?
4000 Units - Names
4800 Section 10?
5000 Section 11?
5800 Section 12?
6000 Section 13?
6800 Section 14?
7000 Section 15?
7800 Section 16?
8000 Section 17?
8800 Section 18?
9000 Section 19?
9800 Section 20?
A000 Section 21?
A800 Section 22?
B000 Section 23?
B800 Birthday Entry
C000 Sound Test - Track Names
C800 Sound Test - Comments
D000 Section 27?
D800 Section 28?
E000 Section 29?
E800 Section 30?
F000 Section 31?
F800 Section 32?


Choice List

Choice lists will create multiple selectable options in a dialogue, with each option being separated by a {Newline}/{br}. The first option will always return 0x00000000, and each extra line, when selected, will write a value with an increment of one. The returned value is written to Variable 0x0018.

Options cannot be spread over multiple pages. Thus the greatest number of options you may have, is 14.

Option Selected Returned Value
1st 0x00000000
2nd 0x00000001
3rd 0x00000002
4th 0x00000003
5th 0x00000004
6th 0x00000005
7th 0x00000006
8th 0x00000007
9th 0x00000008
10th 0x00000009
11th 0x0000000A
12th 0x0000000B
13th 0x0000000C
14th 0x0000000D

For example:

{font:08}{Ramza}{br}{font:00}
{FB}1. Kick the baby{br}
2. Don't kick the baby{FC}{end}

Text Variables

ID BATTLE Address WORLD Address
$00 0x80165EF4 0x801531D8
$01 0x80165EF8 0x801531DC
$02 0x80165EFC 0x801531E0
$03 0x80165F00 0x801531E4
$04 0x80165F04 0x801531E8
$05 0x80165F08 0x801531EC
$06 0x80165F0C 0x801531F0
$07 0x80165F10 0x801531F4
$08 0x80165F14 0x801531F8
$09 0x80165F18 0x801531FC
$0A 0x80165F1C 0x80153200
$0B 0x80165F20 0x80153204
$0C 0x80165F24 0x80153208
$0D 0x80165F28 0x8015320C
$0E 0x80165F2C 0x80153210
$0F 0x80165F30 0x80153214
$10 0x80165F34 0x80153218
$11 0x80165F38 0x8015321C
$12 0x80165F3C 0x80153220
$13 0x80165F40 0x80153224
$14 0x80165F44 0x80153228
$15 0x80165F48 0x8015322C
$16 0x80165F4C 0x80153230
$17 0x80165F50 0x80153234
$18 0x80165F54 0x80153238
$19 0x80165F58 0x8015323C
$1A 0x80165F5C 0x80153240
$1B 0x80165F60 0x80153244
$1C 0x80165F64 0x80153248
$1D 0x80165F68 0x8015324C
$1E 0x80165F6C 0x80153250
$1F 0x80165F70 0x80153254
$20 0x80165F74 0x80153258
$21 0x80165F78 0x8015325C
$22 0x80165F7C 0x80153260
$23 0x80165F80 0x80153264
$24 0x80165F84 0x80153268
$25 0x80165F88
$26 0x80165F8C
$27 0x80165F90
$28 0x80165F94
$29 0x80165F98
$2A 0x80165F9C
$2B 0x80165FA0
$2C 0x80165FA4
$2D 0x80165FA8
$2E 0x80165FAC
$2F 0x80165FB0
$30 0x80165FB4
$31 0x80165FB8
$32 0x80165FBC
$33 0x80165FC0
$34 0x80165FC4
$35 0x80165FC8
$36 0x80165FCC
$37 0x80165FD0
$38 0x80165FD4
$39 0x80165FD8
$3A 0x80165FDC
$3B 0x80165FE0
$3C 0x80165FE4
$3D 0x80165FE8
$3E 0x80165FEC
$3F 0x80165FF0
$40 0x80165FF4
$41 0x80165FF8
$42 0x80165FFC
$43 0x80166000
$44 0x80166004
$45 0x80166008
$46 0x8016600C
$47 0x80166010
$48 0x80166014
$49 0x80166018
$4A 0x8016601C
$4B 0x80166020
$4C 0x80166024
$4D 0x80166028
$4E 0x8016602C
$4F 0x80166030
$50 0x80166034
$51 0x80166038
$52 0x8016603C
$53 0x80166040
$54 0x80166044
$55 0x80166048
$56 0x8016604C
$57 0x80166050
$58 0x80166054
$59 0x80166058
$5A 0x8016605C
$5B 0x80166060
$5C 0x80166064
$5D 0x80166068
$5E 0x8016606C
$5F 0x80166070
$60 0x80166074
$61 0x80166078
$62 0x8016607C
$63 0x80166080
$64 0x80166084
$65 0x80166088
$66 0x8016608C
$67 0x80166090
$68 0x80166094
$69 0x80166098
$6A 0x8016609C
$6B 0x801660A0
$6C 0x801660A4
$6D 0x801660A8
$6E 0x801660AC
$6F 0x801660B0
$70 0x801660B4
$71 0x801660B8
$72 0x801660BC
$73 0x801660C0
$74 0x801660C4
$75 0x801660C8
$76 0x801660CC
$77 0x801660D0
$78 0x801660D4
$79 0x801660D8
$7A 0x801660DC
$7B 0x801660E0
$7C 0x801660E4
$7D 0x801660E8
$7E 0x801660EC
$7F 0x801660F0