From CloudModding MM Wiki

Finding Cutscenes

There are a few ways that you can locate a cutscene.

Cutscene Pointer

You can always find the start of a cutscene in memory by watching the cutscene pointer with a memory viewer. It's located at 8044A628 in the Debug Rom, 803E8C18 in NTSC-J 1.0, and 803E8A48 in NTSC-U. Be aware that the cutscene pointer does not null itself once the cutscene has finished playing, but as long as you don't leave the immediate area this won't be an issue.

Scenes

Many, but not all, cutscenes are stored within scene files. These are referenced directly from the scene header.

Header References

The main scene header can contain a command (the 0x18 command) that defines extra headers for the purpose of creating different variations of the same scene. Some of these extra headers exist with the purpose of playing a single cutscene. This is done by defining the 0x17 command, which in turn points to the start of the cutscene header by a bank offset.

See Scenes and Rooms for more information on the header commands.

Cutscene Commands

Cutscenes begin with a simple 8 byte header of the following form:

/*0x00*/ int Commands; // number of commands in the cutscene. 
/*0x04*/ int EndFrame; // Last frame of the cutscene.

Notes:

  • If the number of commands or end frame variables are negative, the cutscene will not be parsed, and normal play will resume.
  • Other commands can (and typically will) terminate the cutscene before the end frame is reached.

Following that are the cutscene commands. Every command is at least 8 bytes long. Valid commands are 0x01-0x90, 0x3E8, and -1

Marker Description Variables Usage Notes
0000000A Textbox 0000xxxx x = Entries End Frame waits for text/action to finish before continuing cutscene. The frame counter will be stopped at one less than the End Frame value
No Text FFFFssss eeeeFFFF

FFFFFFFF

s = start frame
e = end frame
Display Text iiiissss eeeeoooo

yyyynnnn

i = message id
s = start frame
e = end frame
o = Type. Set 0 for standard dialog, 1 for yes/no branching dialog
y = yes/no top option branch
n = yes/no bottom option branch
Learn
Song
iiiissss eeee0002

mmmmFFFF

i = Play Song Action
s = start frame
e = end frame
m = message id displayed when making a mistake. 088B is used here.
0000005A Camera Data aaaaaaaa a = size of block See Camera Data
00000096 Performs Various Actions 00000001 xxxxyyyy

zzzz[zzzz]

00000001 = constant?
x = Action
y = start frame
z = end frame (seems to be repeated)
00000097 Lighting? 00000001 xxxxyyyy

zzzz[zzzz]

00000001 = constant?
x =
y = start frame
z = end frame (seems to be repeated)
00000098 Scene Transition Effects? 00000001 xxxxyyyy

zzzz[zzzz]

00000001 = constant?
x = transition (probably the same as entrance/exit transitions)
y = start frame
z = end frame (seems to be repeated)
00000099 Motion Blur aaaaaaaa

xxxxyyyy zzzz[zzzz]

a = number of entries
x =
y = start frame
z = end frame (seems to be repeated)
0001 = on, 0002 = off?
0000009A Gives Link Tatl 00000001 xxxxyyyy

zzzz[zzzz]

00000001 = constant?
x = 0001 only?
y = start frame
z = end frame (seems to be repeated)
0000009B Black Overlay? 00000001 aaaabbbb

ccccdddd dd000000

00000001 = constant?
a = Fade type?
b = start frame
c = end frame (seems to be repeated)
d = RGB Value
0000009C Unknown 00000001 xxxxyyyy

zzzz[zzzz]

00000001 = constant?
x =
y = start frame
z = end frame (seems to be repeated)
0000015E Cutscene Terminator 00000001 xxxxyyyy

zzzz[zzzz]

00000001 = constant?
x =
y = start frame
z = end frame (seems to be repeated)
FFFFFFFF Cutscene Terminator 00000000 Commands beyond this one will not be parsed, even if the number of commands is higher
0000aaaa Actor Command 0000yyyy a = Marker, where a relates to a specific actor.
y = Number of entries.
Marker values are NOT the same numbers used to load an actor in a room.
Actor Path aaaabbbb ccccdddd
???????? eeeeeeee
ffffffff gggggggg
hhhhhhhh iiiiiiii
jjjjjjjj kkkkkkkk
llllllll mmmmmmmm
a = Actor Action/Animation
b = Start frame for path.
c = End frame for path.
d = ?
e f g = Path start vertex coordinate (x,y,z)
h i j = Path end vertex coordinate (x,y,z)
k l m = Vertex normal for the path, single precision floats.

Play Song Action Ids

Value Purpose
0001 Free Play
0002 Monkey teaches Sonata of Awakening
0003 Goron Elder's son teaches Goron Lullaby
0004 Zora Tadpoles teach New Wave Bossa Nova
0005 King of Ikana teaches Elegy of Emptiness
0006 Giant teaches Oath to Order
0007 Giant (?) teaches Saria's Song
0008 Zelda teaches Song of Time
0009 Happy Mask Man teaches Song of Healing
000A Romani Teaches Epona's Song
000B Kaepora Gaebora teaches Song of Soaring
000C Stone teaches Song of Storms
000D Blank Text Box
000E Blank Text Box
000F Blank Text Box
0010 Goron Elder teaches part of Goron Lullaby
0011 Blank Text Box
0012 Play back Sonata of Awakening
0013 Play back Goron Lullaby
0014 Play back New Wave Bossa Nova
0015 Play back Elegy of Emptiness
0016 Play back Oath to Order
0017 Play back Saria's Song
0018 Play back Song of Time
0019 Play back Song of Healing
001A Play back Epona's Song
001B Play back Song of Soaring
001C Play back Song of Storms
001D Play back Sun's Song
001E Play back Inverted Song of Time
001F Play back Song of Double Time
0020 Play back part of Goron Lullaby
0021 Play back Ballad of the Wind Fish (Link)
0022 Play back Ballad of the Wind Fish (Goron)
0023 Play back Ballad of the Wind Fish (Zora)
0024 Play back Ballad of the Wind Fish (Deku)
0025 Play back Zora Jam Session I
0026 Play back Zora Jam Session II
0027 Play back Zelda's Lullaby
0028 Play back Scarecrow's Song?

Camera Data

Camera Chunk Header

eeeessss llllllll

e = number of entries
s = size
l = length (frames)

Camera Entries

First half of data appears to be focus, second half position.

ccddeeee xxxxyyyy zzzzaaaa

c = Camera behaviour (use 05 if you don't know what to use)
d = Factor (?)
e = End frame
x = X-position
y = Y-position
z = Z-position
a = Actor

Entries can be broken down into sub-groups based on e. If e becomes less than the previous entry, then this entry starts a new group. The chunk will end at the header's defined length of frames even if the total length of frames for the entries exceed it.

If a is 0000 then the x, y, and z positions will be relative to the map. Otherwise they will be relative to an actor's position.
Not sure how values for a work. 0001 seems to mean Link, 0002 and 0003 are Great Fairy/Stray Fairies?, 0004 is Goron Elder.

Field of View

Values after the camera entries deal with the FOV for each entry.

llllrrrr ffffuuuu

l = Length (in frames)
r = Rotation
f = Field of View
u = Unknown

Not sure how the rotation works here. Is it a signed 16bit integer? Negative means rotate counterclockwise? Positive means rotate clockwise?
Clock Tower twisted tunnel entrance cutscene uses 0x0000 then 0x0078 (120°?) then 0xFF88 (-120°?) then back to 0x0000. This results in a full 360° counterclockwise rotation.

Actor Entities

Marker Actor Action Param (v)
0064 En_Elfgrp (Broken Great Fairy)
0065 En_Dnp (Deku Princess)
0066 Dm_Zl (Zelda)
0067 Bg_Dy_Yoseizo
0068 Bg_Ctower_Gear
0069 En_Dnq (Deku King)
006B Dm_Stk (Skullkid)
006C En_Ge3
006D Dm_Char05
0070 En_Horse (Epona)
0071 Dm_Char00 (var 0000, Tatl)
0072 Dm_Char00 (var 0001, Tael)
0073 Dm_Opstage
0077 En_Gg
0078 En_Ma_Yts
En_Ma4 (Romani)
0079 En_Ge1
007C Bg_Open_Shutter
007D Bg_Open_Spot
007E En_Dnk
007F En_Mk (Professor)
0082 En_Osn (Happy Mask Man)
0083 Dm_Char02
0084 Obj_Tokeidai
0085 En_Fall
0086 Obj_Tokei_Step
0087 Dm_Char01
0088 Dm_Char03 (Happy Mask Man)
00C8 Player (Link) See Link Action Parameters below
00C9 En_Elf (Tatl) 0003 Bounces up and down in a rhythmic pattern
01C2 En_Fall
01C5 En_Giant
01C6 En_Giant
01C7 En_Giant
01C8 En_Giant
01C9 En_Zoraegg
01CF Dm_Char06
01D5 Bg_Haka_Curtain
01D6 En_Jg
01D7 En_Zog
01D8 En_Dai
01D9 Dm_Char05
01DA Dm_Char08
01DB En_Dno
01DC En_Ge2
01DF En_Gk
01E0 Eff_Kamejima_Wave
01E2 En_Po_Composer
01E3 Obj_Hgdoor
01E4 En_Hg
01E5 En_Pamera
01E6 En_Hgo
01F4 En_Zob
01F5 En_Zos
01F6 Eff_Kamejima_Wave
01F7 Dm_Char09
01F8 En_Zov
01F9 En_Test6
01FA En_Test3 (Kafei)
01FF Obj_Boat
0200 Eff_Stk
0201 Dm_Stk (Skullkid)
0202 Dm_Tsg
0203 En_Zod
0206 Dm_Char05
020D En_Toto
020E En_Gm
020F Eff_Zoraband
0214 En_Bsb
0226 En_Rz
0227 En_Rz
0228 Obj_Usiyane
022C En_Ma_Yto (Cremia)
022D En_An
Dm_An
Dm_Gm
022F Dm_Char05 (var 0003, Majora's Mask)
0232 Dm_Al
Dm_Ah
Dm_Nb
0235 En_And
0238 Dm_Bal
0239 Door_Warp1
02C8 En_Dns (Deku Palace Scrub)

Link Action Parameters

0001 Walking
0002 Walking
0003 Surprised
0004 Standing then stop
0005 Sleeping
0006 Turn around shocked
0007 Standing?
0008 Standing?
0009 Walk into warp
000A Looking around
000B Running from giant deku scrub
000C Turns around and starts running
000D Getting up?
000E Looking down then forward?
000F Being blessed by a restored temple fairy, lifted up
0010 Being blessed by a restored temple fairy, set back down
0011 Looks behind himself, then shakes head
0012 Standing, waving
0013 Staring at tatl
0014 Looks at ocarina (OoT Leftover?)
0015 Looks worn out
0016 Recieve item
0017 Looks to the side, shaking head
0018 Standing, frozen?
0019 Raises hand and shakes head
001A Playing Ocarina
001B Standing, frozen?
001C Bows twice
001D Riding epona
001E Standing?
001F Invisible?
0020 Standing?
0021 Standing?
0022 Sitting down, shaking head, then looks up
0023 Gets up, groggy
0024 Trying to catch skullkid
0025 Looking around
0026 On epona, looking behind
0027 Catches onto skullkid riding epona
0028 Holding onto skullkid riding epona
0029 On walking epona
002A Falls off epona
002B Tips over and falls
002C Gets up and stares at ground
002D Holds hand up in front of face
002E Being transformed
002F Deku Link shocked at reflection in water
0030 Runs after skullkid but tatl blocks him
0031 Unknown deku link animation
0032 Mask salesman shaking Link?
0033 Laying face down
0034 Holds hands, then looks up with arms out to sides (unused?)
0035 Falling down on back
0036 Looking around
0037 Link dazed/confused?
0038 Shielding face with hands
0039 Invisible?
003A Sitting, looking around
003B Looks down scratching back of head
003C Charging spin attack
003D Slips then falls on butt?
003E Doing situps
003F Doing situps
0040 Hands behind back and jumping forward
0041 Doing pushups
0042 Leans forward
0043 Standing, frozen?
0044 No idea what he's doing
0045 Pretends to be a scary monster?
0046 Pulls item out for mailbox
0047 Being shaken by mask salesman
0048 Takes out item to show
0049 Creates elegy of emptiness statue
004A Posing in an odd stance
004B Gets on epona and looks to the right
004C On epona, nods and looks forward
004D On epona, stares up, moves backwards?
004E Posing in an odd stance
004F Posing in an odd stance
0050 Standing, holding shield up?
0051 Hugging cremia
0052 Grabbing something and pulling it towards himself
0053 Holding something
0054 Holding something
0055 Holding something back?
0056 Sitting down
0057 Sitting down, looking around
0058 Sitting down, waving
0059 Dance learned from kamaro
005A Salute

0x96 Actions

0005 End Cutscene, Return Control to Link
0007 Show Area Title Card
000A Turn Child Link
0014 Fade in title screen
0015 Fade out title screen
0016 Turn Deku Link
001E Disable Actor Path Data
0021 Set entered clocktown for the first time flag
0023 Pass In-game Time
0026 Set day to day 9
0027 Turn Zora Link