New Game Introduction

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search

File Location: OPEN_OPEN_BIN

Number of pages to display
offset "43A0"
Default value is 0c (12 pages to display).
Information on where each page begins is at the following offset.

Page Addresses:
offset "9CB8"
These point to the loading information for each page to be displayed.
Each page contains the directions for opening the page (4 bytes) and the information for each line on the page (4 bytes each). So if you have a page with only 1 line, the next page's address will be 8 bytes later.
If there are 12 pages to display, the first pages address will be 80070ce8 (offset "9Ce8") which is to say, directly after the page addresses. This is why it is important to input the correct number of pages at offset "43A0".
It is important to note that you only have 204 bytes to work with starting at this offset. That equals 51 lines, including page addresses and page load information.

Custom Addresses Example:
E80C0780 -> Load first page from 80070ce8 (i.e. after these 12 addresses)
F80C0780 -> Load second page from 80070cf8 (i.e. page 1 had 3 lines of text)
040D0780 -> Load third page from 80070d04 (i.e. page 2 had 2 lines of text)
180D0780
280D0780
340D0780
440D0780
540D0780
600D0780
6c0D0780
7c0D0780
70700680 -> Load 12th page from 800670070 (i.e. there are more than 204 bytes and extra room had to be found in order to display them all)

A page can hold a maximum of 5 lines.

Each line can have a maximum width of 256, and has a height of 32. Lines will be automatically centered on the screen and will gradually reveal themselves from the left to the right. Given that a line of 60 width will take 4x less time than a line of 240 width to display, you should still calculate the width of the line and write it in the *page loading section* so that your users won't have an unusually long and annoying display speed.

Remember that the game was designed to run on 4:3 (320x240), and thus any images/text will be stretched in width to 125%!


Page Information:
Default offset "9Ce8"

XX YY ZZ 00

Byte Page
XX Number of lines for this page
YY test
ZZ test
00 00

AA BB 00 00

Byte Line
AA Line ID in the current page (0x0-0xF)
BB Width of the current line. The game will truncate anything beyong this width and horizontally center the result on the screen.
00 00
00 00
Hex String Type Load Info Operation
02 14 10 00 New Page (2 lines) Page 1 (OPNTEX3) Load OPENBK3 into VRAM (Ivalice map)
00 B0 00 00 Line 1 Row: 0 & Width: 176 Print (0,0) w=176;h=16
01 54 00 00 Line 2 Row: 1 & Width: 84 Print (0,16) w=84;h=16
01 14 00 00 New Page (1 line) Page 1 (OPNTEX3)
02 D4 00 00 Line 1 Row: 2 & Width: 212 Print (0,32) w=212;h=16
04 14 20 00 New Page (4 lines) Page 1 (OPNTEX3) Display previous loaded Image
03 AE 00 00 Line 1 Row: 3 & Width: 174 Print (0,48) w=174;h=16
04 C0 00 00 Line 2 Row: 4 & Width: 192 Print (0,64) w=192;h=16
05 B0 00 00 Line 3 Row: 5 & Width: 176 Print (0,80) w=176;h=16
06 86 00 00 Line 4 Row: 6 & Width: 134 Print (0,96) w=134;h=16
02 14 11 00 New Page (2 lines) Page 1 (OPNTEX3) Load OPENBK4 into VRAM (Shadowed Ramza)
07 98 00 00 Line 1 Row: 7 & Width: 152 Print (0,112) w=152;h=16
08 56 00 00 Line 2 Row: 8 & Width: 86 Print (0,128) w=86;h=16
03 14 00 00 New Page (3 lines) Page 1 (OPNTEX3)
09 92 00 00 Line 1 Row: 9 & Width: 146 Print (0,144) w=146;h=16
0A 92 00 00 Line 2 Row: 10 & Width: 146 Print (0,160) w=146;h=16
0B 88 00 00 Line 3 Row: 11 & Width: 136 Print (0,176) w=136;h=16
03 14 20 00 New Page (3 lines) Page 1 (OPNTEX3) Display previous loaded Image
0C 6C 00 00 Line 1 Row: 12 & Width: 108 Print (0,192) w=108;h=16
0D B4 00 00 Line 2 Row: 13 & Width: 180 Print (0,208) w=180;h=16
0E A4 00 00 Line 3 Row: 14 & Width: 164 Print (0,224) w=164;h=16
02 15 12 00 New Page (2 lines) Page 2 (OPNTEX4) Load OPENBK5 into VRAM (Light Ramza)
00 B6 00 00 Line 1 Row: 0 & Width: 182 Print (0,0) w=182;h=16
01 8C 00 00 Line 2 Row: 1 & Width: 140 Print (0,16) w=140;h=16
03 15 20 00 New Page (3 lines) Page 2 (OPNTEX4) Display previous loaded Image
02 DE 00 00 Line 1 Row: 2 & Width: 222 Print (0,32) w=222;h=16
03 C8 00 00 Line 2 Row: 3 & Width: 200 Print (0,48) w=200;h=16
04 EA 00 00 Line 3 Row: 4 & Width: 234 Print (0,64) w=234;h=16
02 15 00 00 New Page (2 lines) Page 2 (OPNTEX4)
05 D0 00 00 Line 1 Row: 5 & Width: 208 Print (0,80) w=208;h=16
06 B4 00 00 Line 2 Row: 6 & Width: 180 Print (0,96) w=180;h=16
01 15 00 00 New Page (1 line) Page 2 (OPNTEX4)
07 7A 00 00 Line 1 Row: 7 & Width: 122 Print (0,112) w=122;h=16
02 15 00 00 New Page (2 lines) Page 2 (OPNTEX4)
08 7A 00 00 Line 1 Row: 8 & Width: 122 Print (0,128) w=122;h=16
09 82 00 00 Line 2 Row: 9 & Width: 130 Print (0,144) w=130;h=16
02 15 00 00 New Page (2 lines) Page 2 (OPNTEX4)
0A A2 00 00 Line 1 Row: 10 & Width: 162 Print (0,160) w=162;h=16
0B 74 00 00 Line 2 Row: 11 & Width: 116 Print (0,176) w=116;h=16


A few notes about working on the introduction... The game will read the text page offset and then read 4 bytes at that offset.

For example the first one by default is: 02 14 10 00

The first byte tells the number of lines the page has.

The second byte tells which image to load the text from: 0x14 = Page 1 0x15 = Page 2

The third byte in this case is special. 0x10 = load Ivalice Map 0x11 = load Shadow Ramza 0x12 = load Ramza 0x20 = print previously loaded image Sadly this means you can't have two different images two pages in a row. If you want to edit those, you can find them in OPEN\OPENTEXT.BIN. They are 16bpp 210x180 TIM images. Loading coordinates are 0 pixels from the left and 43 pixels from the top. Because of these dimensions, you can't completely print over the previous background which is 256x240.

As for the text itself, they are 256x256 4bpp TIM images with a line height of 16 pixels. (0,0,0) Black will be automatically transparent, even if it's not the first color of the palette.

An important thing to note is that the palette of both files MUST be identical.

But then you have the lines bytes 02 14 10 00 (page settings) 00 B0 00 00 (first line) 01 54 00 00 (second line)

The first byte is the ID of the line in the assigned page, while the second byte is the width of the line. You will need to manually get the width of your line so that it prints all your text and centers it properly on the screen.

What the above does is as follows. 02 14 10 00 (2 lines, 1st page, load Ivalice Map) 00 B0 00 00 (print line 0x00 with 176 width; centered) 01 54 00 00 (print line 0x01 with 84 width; centered)

Oh and don't worry about vertically centering, that's automated too. It doesn't require any edit since the height of the lines is always 16 pixels. The height of the lines cannot be changed, and although 256/16 = 16, you can only have 15 lines of text per image. If you try to use the last 16 pixels for another line, it will simply display a big mess of pixels.

If you actually end up using less or more (you can't add much more...) you'll have to edit the number of page offsets... Else the best you can do is make it print a 0 width line on the screen and the player will still have to press the confirm button to get past it.