Skip to content
On This Day:

Super Nintendo · Game Specific

Chrono Trigger Database

By Geiger

Chrono Trigger · All hacks & resources →

About this project

A document pertaining to Chrono Trigger offsets.

Original game requirements

See the release instructions.

Creator credits

Geiger
Listed creator

RELEASE 2011.03.03

Readme & instructions

Enemy AI - Actions Long Notes.txt

Action 01 attack mode, Action 02 tech mode The third byte is a target type: 05 - random PC 06 - nearest PC 08 - PC, using unknown PC HP conditions Action 10 revive support enemies: Only used by 4 enemies: Giga Gaia ($D1) and Lavos attack mode ($E7) Guardian ($D4) and Lavos attack mode ($C2) Unknown value vv Guardian uses $00, Giga Gaia $01 The value is stored to 7E000E, and later checked by routines at $019EE8 for $01, $02, $03 Action 13 Appears to be a 3 byte command that is unused. 13 mm vv if bit 0x80 in mm is set, the byte at 7EAED8 is copied to 7EAECC. The jump to additional routines described below is skipped.

Read moreRead less
Action 01 attack mode, Action 02 tech mode

The third byte is a target type:
05 - random PC
06 - nearest PC
08 - PC, using unknown PC HP conditions


Action 10 revive support enemies:

Only used by 4 enemies:
Giga Gaia ($D1) and Lavos attack mode ($E7)
Guardian ($D4) and Lavos attack mode ($C2)

Unknown value vv
Guardian uses $00, Giga Gaia $01
The value is stored to 7E000E, and later checked by routines at $019EE8 for $01, $02, $03


Action 13

Appears to be a 3 byte command that is unused.

13 mm vv

if bit 0x80 in mm is set, the byte at 7EAED8 is copied to 7EAECC. The jump to additional routines described below is skipped.

if bit 0x80 in mm is not set, mm is x2 and used as an index for the AI related routines pointer table starting at $01B8BB

vv is used for an unknown purpose.  It is stored to 7E000E, then bit 0x80 is removed, and the result stored to 7E002C.

Event Command Long Notes.txt

Command 0D - npc movement properties Bitmask 01 - NPC walks around map solidity 02 - NPC walks around PC solidity FC - unused Interpretation NPCMoveProps([walk around walls], [walk around PCs]) Command 0E - sprite positioning properties (determines where to stop a moving sprite) Bitmask 01 - center sprite on tile, used for move commands 02 - center sprite on object, used for follow commands FC - unused Command 16 - if statement Operator enumeration 0: A == M 1: A != M 2: A > M 3: A < M 4: A >= M 5: A <= M 6: A & M != 0 7: A | M != 0 If bit 0x08 of the operator is set, then its the same as above, except that the 8-bit accumulator flag is also…

Read moreRead less
Command 0D - npc movement properties

Bitmask
01 - NPC walks around map solidity
02 - NPC walks around PC solidity
FC - unused

Interpretation
NPCMoveProps([walk around walls], [walk around PCs])


Command 0E - sprite positioning properties (determines where to stop a moving sprite)

Bitmask
01 - center sprite on tile, used for move commands
02 - center sprite on object, used for follow commands
FC - unused


Command 16 - if statement

Operator enumeration
0: A == M
1: A != M
2: A > M
3: A < M
4: A >= M
5: A <= M
6: A & M != 0
7: A | M != 0

If bit 0x08 of the operator is set, then its the same as above, except that the 8-bit accumulator flag is also set at the end.  This makes little since though, since it looks like its always set anyway before the command is decoded, and is never reset by it.
If bit 0x80 of the operator is set, 0x0100 is added to the offset.

M should be the third byte (marked vv in my notes) and A should be the value loaded from the offset marked oo in my notes.  But I might have them mixed up, so if it doesn't appear to work properly, assume that I have them reversed.


Command 2E - multi-mode memory copy

Mode
40: 2E 4c ii nn se dd . c - colors affected, same as ColorAdd command . ii - starting color index . nn - number of colors affected . s - starting intensity . e - ending intensity . dd - duration of change . Color Addition
50: Color Subtraction, same params as 40
80: 2E 8? ps nnnn . p - palette num . s - starting color . nnnn - bytes to copy, immediately after the command (+2) . does different things based on mode . two byte version of 88


Command 84 - npc solidity properties

Bitmasks
01 - npc is solid
02 - npc can be pushed
FC - unused

Interpretation
NPCSolidProps([solid], [pushable])


Command 88 - multi-mode memory copy
Does different things based on mode.  IMS, 30 and 50 do the same thing as 20 and 40.  Modes 81 and 20 are commonly used for portals.


Mode
00: 88 00 . reset palette
20: 88 20 ?? ??
30: 88 30 ?? ??
40: 88 4? ?? ?? ??
50: 88 5? ?? ?? ??
80: 88 8? cc ?? . cc - bytes to copy, immediately after the command (+2)


Command A8, A9 - face npc

These commands will change a sprite's apparent facing, but not the actual facing value in memory.  This means "relative" facing really cannot even be faked by facing an object, getting the value, and modifying it with bit and byte math.



Command C8 - special dialog

Displays special game dialogs

if bits C0 are clear:
0 - Character replace menu
1 - Load screen
2 - Save screen

values 80 - BF are shops
values C0 - C7 are naming screens
0 - Crono
1 - Marle
2 - Lucca
3 - Robo
4 - Frog
5 - Ayla
6 - Magus
7 - Epoch


Command D8 - Battle

Byte 1
01: No win pose
02: Menu at bottom
04: Close enemies (PC solidity reduced from 1 tile to 1/2 tile)
08: Unused.  Appears to have been an "easy mode" flag, as it is only set in battles where Crono is the only possible party member.
10: Persistent Enemy (must have bit 80 set in Load Enemy)
20: Pre-scripted events (Attract mode)
40: Unknown, appears unused, not set in any battle
80: No run

Byte 2
01: Unknown, appears unused, not set in any battle
02: Unknown, appears unused, not set in any battle
04: Unknown, appears unused, not set in any battle
08: Unknown, appears unused, not set in any battle
10: Unknown, used in 6 battles: Location 071 Truce Canyon portal [039C], Location 0DF Lab 32 West entrance [0309], [040E], Location 0E2 Proto Dome [0FB0], [1081], [10BE]
20: No game over
40: Map music
80: Auto-regroup


Command D9 - Move Party

Does not always seem to work.  Changing Y Coord for PC1 in Gato's room to 5 results in no change.  Changing both to 1 does though.

Top bit of coords controls PC facing:
00,00 - Up
80,00 - Left
00,80 - Down
80,80 - Right


Command E0 - Warp Party

I think the difference between this command and DF, E1 is that they wait for VBlank before updating

Location bitmasks
01FF - Location
1E00 - Unknown
6000 - Ignored
8000 - Unknown

Interpretation reads:
E0 [Location] [Mask1E00] [Mask8000] xx yy


Command E4, E5 - Copy Tiles

Need more examples to look at for this command.  E5 is almost identical to E4, but E5 looks at bits 07 again after it copies the tiles, for some reason I have not yet determined.

ff bitfield arguments:
01 - copy layer 1
02 - copy layer 2 (?)
04 - copy layer 3 (?)
08 - copy tile properties (layer 1 only?)
F0 - ???


Command E6 - Scroll Layers

E6 is a bit different from E7 (Scroll Screen).  It can do two scrolls (to and back) and can scroll individual layers.


Command EC - All purpose sound command

Commands:
11 ss 00 . play song ss
14 ss 00 . note position of current music and play song ss
18 ss pp . play sound ss at panning position pp (left = 00, right = FF)
19 ss pp . appears to be the same as 18
82 ss vv . change sound effect volume to vv over duration ss
83 ?? ?? . no discernable effect, usually follows 82
85 ss rr . appears to be the same as 86
86 ss rr . change song's rate of play to rr over duration ss . rr is a signed byte.
88 01 01 . change song's state (eg: Chrono Trigger attract mode)
F0 00 00 . song goes to silence (only used once)
F2 00 00 . sound effect goes to silence (only used once)

Only three songs can have their states changed:
0D - Lavos' Theme
18 - Chrono Trigger
23 - The Hidden Truth


Command FF - Mode 7 scene

Calls a Mode 7 scene.  causes data at 0x031513 to be decompressed.  A few values:
00 - highway race
01 - none
02 - title screen
03 - top of black omen, "blurs" into view (Does Not Load new graphics, may not be visible)
04 - lavos falls to earth
0A - fireworks
0C - credits over moving star background
0D - programmer's ending credits
25 - lavos summoned to 600AD (DNL)
66 - Epoch, first person view
67 - world globe exploding, "But the future refused to change"
68 - world globe, "But the future refused to change" (short version) 
69 - attract mode highway race
80 - long wormhole (first warp to 600 A.D.)
81 - normal wormhole
82 - quick wormhole
89 - wormhole to lavos
90 - black circle that opens similar to a portal and covers the entire screen (DNL)
91 - none
92 - the screen wipe effect used during attract mode (left to right)
93 - the screen wipe effect used during attract mode (right to left, open)
94 - left to right wipe (close)
95 - right to left wipe (close)
96 - Reset (see Castle Magus Inner Sanctum)
97 - unknown, not used.  Stores next 3 bytes to 7E013A,7E013B,7E013D, and 0x04 to 7E0139 and 0x00 to 7E013C
98 - used by Taban during Moonlight Parade ending
99 - used during Death Peak summit sequence, no noticable effect
9A - used after Crono revived in Death Peak sequence
9B - Massive Portal (see Castle Magus Inner Sanctum)
9D - unknown, not used.  Resets bit 0x02 in 7E0154.  L3 and/or ASCII text related?
9E - Reality Distortion (see Castle Magus Inner Sanctum)
9F - set New Game+, and possibly other related data.  Only used once in Location 1DF Tesseract, offset [01A4]
*PAR code 7E01DFxx will change any Mode 7 event to the new value entered

Game Notes.txt

Storyline points The Millenial Fair 00 . New Game 03 . Crono gets out of bed 06 .

Read moreRead less
Storyline points
The Millenial Fair
00 . New Game
03 . Crono gets out of bed
06 . Marle has lost her pendant
08 . Marle has joined Crono at the fair
0A . Visited Lucca's Telepod exhibit

The Queen Returns
0C . Marle disappeared into portal
0F . Met Marle masquerading as Queen Leene

The Queen is Gone
10 . Marle disappears beyond the boundaries of time
12 . Lucca arrives in past
15 . Seen through the guise of the nuns at the Cathedral
1B . Rescued Queen Leene
1C . Frog leaves Guardia throneroom in disgrace
21 . Marle rematerializes in the Queen's chambers
24 . Lucca opens the gate back to the present

We're Back!
27 . Arrived back in the present
2A . Detained for trial

The Trial
2D . Trial ends
2E . Lucca comes to break Crono out of prison
30 . Escape Guardia Castle

Beyond the Ruins
33 . Escape through Guardia Forest Portal
34 . Met the people of Arris Dome
35 . Exploring the lower levels of Arris Dome
36 . Discovered visual record of Day of Lavos
37 . Given seeds to people of Arris Dome

The Factory Ruins
3C . Setting out for the Factory Ruins
3F . Security system goes haywire
40 . Robo got creamed
42 . Defeated R Series
45 . Decided to leave via the Proto Dome portal
48 . Arrived at the End of Time

The End of Time
49 . Spoken to Gaspar
4A . Gaspar calls when trying to leave the first time
4B . Gaspar says to take a look in the room behind him
4C . Spekkio
4D . Learned magic

The Village of Magic
4E . Arrive in Medina
51 . Defeated Heckran

The Hero Appears
54 . Arrive in 600 AD to search for Magus
57 . Ozzie launches an attack on Zenan Bridge
5A . Ozzie summons Zombor

Tata and the Frog
5D . Met Tata on Denadoro Mts.
60 . Received Bent Sword
66 . Received Hero's Medal
69 . Received Bent Hilt

The Rare Red Rock
6C . Showed Melchior the broken Masamune
6F . Met Ayla
72 . Win soup race
75 . Awaken without Gate Key

Footsteps! Follow!
78 . Setting out to find Gate Key
7B . Find Kino in Forest Maze
7C . Defeated Nizbel
7D . Leaving Chief's Hut to return to the portal

The Masamune!
7E . Leaving Prehistoric times with Dreamstone
81 . Melchior reforges the Masamune
84 . Frog decides to face Magus
87 . Opened the Magic Cave

Magus' Castle
88 . Arrived at Castle Magus
89 . Ozzie Defeated
8A . Magus Defeated

Forward to the Past
8D . Arrive in Prehistoric times from Castle Magus Inner Sanctum
8E . Arrive at Laruba
90 . Meet Ayla at Dactyl Nest Summit

Unnatural Selection?
93 . Setting out for Tyrano Lair
96 . Defeated Reptite guards outside of Kino's cell
97 . Kino freed
98 . Kino opens fossil head
99 . Lavos falls to Earth

The Magic Kingdom
9F . Traveled to 12000 BC for first time
A2 . Watched Schala open door to Zeal throneroom
A5 . Charged pendant
A8 . Captured by Dalton

Break the Seal!
AB . Locked out of 12000 BC
AE . Acquired Epoch

The Guru on Mt.Woe
B1 . (Does not appear to be used, but marks the start of this chapter)
B4 . Fight the Mud Imp and his beasts
B7 . Mt Woe falls

What Lies Beyond?
BA . Dalton kidnaps Schala
BB . Melchior gives Crono the Ruby Knife

Lavos Beckons
BD . Defeated Dalton in Zeal throneroom
C3 . Queen demands Schala to raise power of Mammon Machine
C6 . Queen anticipates immortality nearing
C9 . Defeated GolemTwins
CB . Crono gets whacked
CC . Tidal Wave washes over land
CD . Awaken in Last Village

The New King
CF . Dalton attacks Last Village
D2 . Blackbird crashes

The Time Egg
D3 . Met Magus at North Cape
D4 . Black Omen rises

The Fated Hour
D5 . Received the Time Egg

The Final Battle
D6 . Destroyed the Black Omen



Endings Data

Using the following codes, one should be able to view any ending to the game at any time they have access to Crono's front door. Excepting the "Bad" ending, of course.

Crono's Front Door Exits To:
E5041402
E504130B

Storyline Counter:
7F0000xx

D4 . Beyond Time / Reunion
A2 . A Slide Show?
99 . What the Prophet Seeks...
98 . Dino Age
84 . The Oath
75 . People of the Times
66 . The Unknown Past
54 . The Legendary Hero
2D . Goodnight
27 . The Successor of Guardia
00 . The Dream Project

Memory address 7F006E result byte:

7F006E 01 Crono alive, Epoch destroyed (Beyond Time / Reunion ending)
7F006E 02 Crono dead, Epoch destroyed (Beyond Time / Reunion ending)
7F006E 03 Crono alive, have Epoch (Beyond Time / Reunion ending)
7F006E 04 Crono dead, have Epoch (Beyond Time / Reunion ending)
7F006E 05 The Successor of Guardia ending



The Trial:

Here are the conditions for each Juror, taken straight from the game's event data. Note that these Jurors are in the order presented in the event data, and may not be the same order as they come in.

Juror 1
- If you were "Just a bit" tempted, guilty.
- If you tried to sell Marle's pendant, guilty.
- Innocent.


Juror 2
- If you talked to the girl who lost her cat before bringing it back to her, guilty.
- If you brought the girl her cat back, innocent.
- If did not participate at all, 50% random chance, innocent.
- Guilty.

(Juror 2 is obviously bugged. It really ought to check for condition 2 first.)
(Juror 2's 50% random choice is not truly 50%.  The random number is the current frame displayed when entering the courtroom. It is refreshed if the game jumps to a cutscene of Crono's actions at the Millennial Fair.  The possible frame range is 00:3B, and the random number LEC adds 1, for a random number pool of 00FE01:00FE3C.  In this pool, there are 28 bytes of value 80 or below (Guilty), and 32 bytes of value 81 or above (Innocent)  The final result is a 53.3% chance of Not Guilty and 46.7% chance Guilty.)


Juror 3
- If Marle yells about being kidnapped, guilty.
- Innocent.


Juror 4
- If you were tempted by Marle's fortune, guilty.
- If you picked up the pendant before talking to Marle, guilty.
- Innocent.


Juror 5
- If you were tempted by Marle's fortune, guilty.
- If you refused to give Marle her pendant back, guilty.
- Innocent.


Juror 6
- If you ate the old man's lunch, guilty.
- Innocent.


Juror 7
- If you said "Marle started it" or "Never stole anything", guilty.
- Innocent.




Ayla's Fist Upgrades:

Formula:
(Ayla's current level / 24) + hex value at $01FDBD

Level 18 to 23 - $44 Fist
Level 24 to 47 - $45 Fist
Level 48 to 71 - $46 Fist
Level 72 to 95 - $47 Iron Fist
Level 96 to ** - $48 BronzeFist

Memory Locations Long Notes.txt

7E0A00 index of menu to load

00 Load save menu
01 Main menu
02 Shop
03 Name menu
04 Nothing? (exits back to current screen)
05 Exchange menu
06 Save menu (from save point)



Observations

Related routines tend to use the same memory locations

7E01xx - Bank $00, locations
7E02xx - Bank $02, text and overworlds
7E03xx - Bank $03, compression and Mode 7

Offset Long Notes.txt

C02E1E - Color Crash The following routines store a color index and jump to C02E1E color crash code. Dark Blue - Location index > $01FF C00077 - This code may not be reachable. The routines right before it will jump to the overworld code if the map is 01F0 or higher Light Blue - No string index set (7E012D bank byte = $00) C03574 - Event Command BB, textbox C035B9 - Event Command C1, textbox C03600 - Event Command C2, textbox C03647 - Event Command C0, dec box C036AE - Event Command C3, dec box C036E1 - Event Command C4, dec box Pink - Packet isn't being decompressed to 7F8000-7FFFFF range C046CF - Event Command 82, load NPC C04838 - Event…

Read moreRead less
C02E1E - Color Crash

The following routines store a color index and jump to C02E1E color crash code.

Dark Blue - Location index > $01FF
C00077 - This code may not be reachable.  The routines right before it will jump to the overworld code if the map is 01F0 or higher

Light Blue - No string index set (7E012D bank byte = $00)
C03574 - Event Command BB, textbox
C035B9 - Event Command C1, textbox
C03600 - Event Command C2, textbox
C03647 - Event Command C0, dec box
C036AE - Event Command C3, dec box
C036E1 - Event Command C4, dec box

Pink - Packet isn't being decompressed to 7F8000-7FFFFF range
C046CF - Event Command 82, load NPC
C04838 - Event Command 83, load enemy

Purple - Related to loaded sprite graphics?
C05CB0 - Event Command 82 & 83 subroutines

Dark Yellow - Packet begins with $0D0A BETA format
C05CD7 - Event startup

Red - Decompressed event packet too large, > $1700
C05CE5 - Event startup

Light Yellow - Event command not valid
C05F6E - Event Command 01 and others



C05C90 

Seems to be responsible for checking if a sprite's graphics are already loaded, and if not the next available slot.  This function is called by Load NPC and probably the other Load Sprite functions as well.



Menu and Battle Routine Observations

In general, routines and data in the 3DA800-3DBFFF range is battle related (mainly battle initialization it appears) that there was too much of to fit into bank $01

In general, the data in bank $3F is used by routines in the second half of bank $02, mainly menu related.  In addition, the end of bank $3F contains some routines for saving, etc. that there was too much of to fit into bank $02



Debug battle flags:

01FFFF set to non-zero value to enable
When Select is pressed on Controller 2, all enemies are instantly defeated. In the BETA version, this feature is on by default

0D3FFF set to non-zero value to enable
When R shoulder button is pressed on Controller 1, $00 stored to 7ECD02 and 7ECD03, unknown purpose

0FFFFD set to non-zero value to enable
Stores $00 to 7EAE9B and 7EAE94, attack related?

0FFFFE set to non-zero value to enable
Stores $40 to 7EAE94 and $00 to 7EAE9B, attack related?

0FFFFF set to non-zero value to enable
Stores $80 to 7EAE9B and $00 to 7EAE94, attack related?

Overworld Command Long Notes.txt

Command 38 Appears to be a multipurpose sprite command. Mask 01 . unknown 06 .

Read moreRead less
Command 38

Appears to be a multipurpose sprite command.
Mask
01 . unknown
06 . facing
F8 . unknown

Facing values
00 - up
01 - down
02 - left
03 - right

Interpretation reads as:
SpriteCommand38(unk01, facing, unkF8)


Process Memory byte 0F

01 . unknown
0E . Palette
F0 . unknown . used by Command 31


Address 7E027C - Overworld action

00 - PC movement off
01 - Normal, movement on
03 - Use entrance
05 - Enter menu
06 - Zoom out map
07 - Used for Black Omen exit and Epoch $D2 storyline cutscene
08 - Epoch time gauge
09 - Party exchange menu

Download Enemy AI - Actions Long Notes.txt ↓

Download Event Command Long Notes.txt ↓

Download Game Notes.txt ↓

Download Memory Locations Long Notes.txt ↓

Download Offset Long Notes.txt ↓

Download Overworld Command Long Notes.txt ↓

FROM THE COMMUNITY

Player reviews

0 reviews
No ratings yet

Played this project? Tell other players how it holds up.

Your take on Chrono Trigger Database

Spam has been overwhelming. To help us approve your review, sign up and introduce yourself in the Introductions forum so we know you’re not a bot.

Sign in with your Retro Replay account to rate this project and share your experience.

Sign in to review