Difference between revisions of "Script Format"

From Terranigma Wiki
Jump to navigation Jump to search
m
m (Created new table)
Line 13: Line 13:
== Commands ==
== Commands ==


 
{| class="wikitable sortable collapsible" style="font-family:Lucida Console;"
{| class="wikitable"
|-
|-
! Opcode
! Opcode
! argument length (byte)
! Function
! Function
! Length
! Arguments
! Comments
|-
|00
| JumpOffsetSet
| 4
|
|
|-
|01
| JumpOffset
| 1
|
|
|-
|02
| LoopSetup
| 3
|
|
|-
|03
| LoopDo
| 1
|
|
|-
|04
|
| 1
|
|
|-
|-
| 0x00
|05
| EventFlag?
| 3
| 3
| Jump to 24byte offset
|
{| class="wikitable"
|
 
|-
|-
! Offset
|06
! Length
|
! Name
| 4
|
|
 
|-
|-
| 0
|07
| EventFlagModify
| 3
| 3
| Script offset
|
|}
|
 
|-
|08
| EventFlagCheckJump
| 5
|
|
 
|-
|09
| EventFlagCheckJump2
| 7
|
|
 
|-
|0A
| EventFlagCheckJump3
| 5
|
|


|-
|-
| 0x01
|0B
| 1
|
| Unknown
|
|
|
 
|-
|0C
| OnTriggerAreaAbsolute
| 8
|
|
 
|-
|0D
| OnTriggerAreaRelative
| 8
|
|


|-
|-
| 0x02
|0E
| 2
|
| Setup a loop
|
{| class="wikitable"
|
|
 
|-
|-
! Offset
|0F
! Length
|
! Name
|
|
|
 
|-
|-
| 0
|10
| 2
|
| Loop count
|
|}
|
|


|-
|-
| 0x03
|11
| 1
|
| Execute loop
|
|
|


|-
|12
| OnObjectTriggerAreaRelative
| 8
|
|


|-
|-
| 0x04
|13
| SetSpritePosition
| 4
| 4
| Unknown
|
|
 
|-
|14
| PlayerPort
| 9
|
|


|-
|-
| 0x07
|15
| 2
|
| Modify event flag
|
{| class="wikitable"
|
|
 
|-
|16
|
|
|
|
 
|-
|17
|
|
|
|
 
|-
|18
|
|
|
|
 
|-
|19
| SetRespawnLocation
| 15
|
|
 
|-
|-
! Offset
|1A
! Length
| ChoiceDialog
! Name
| x
|
|
 
|-
|-
| 0
|1B
| 2
| PrintRelative
| Flag+Value (see note), set 0x8000 to set flag otherwise the flag is cleared
| 3
|}
|
|


|-
|-
| 0x08
|1C
| PrintAbsolute
| 4
| 4
| Jumps to offset if flag is set
|
{| class="wikitable"
|
 
|-
|-
! Offset
|1D
! Length
|
! Name
|
|
|
 
|-
|1E
|
|
|
|
 
|-
|1F
| WaitMessage
| 1
|
|
 
|-
|20
|
|
|
|
 
|-
|21
| OnTrigger
| 3
|
|
 
|-
|-
| 0
|22
| 2
|
| Flag+Value (see note)
|
|
|
 
|-
|-
| 2
|23
| 2
|
| Offset to script location
| 3
|}
|
|


|-
|-
| 0x09
|24
|
| 4
| 4
| Jumps to offset if flag is not set
|
{| class="wikitable"
|
 
|-
|25
| Rand
| 1
|
|
 
|-
|26
|
|
|
|
 
|-
|-
! Offset
|27
! Length
|
! Name
|
|
|
 
|-
|-
| 0
|28
|
| 2
| 2
| Flag+Value (see note)
|
|
 
|-
|29
|
| 3
|
|
 
|-
|2A
|
| 3
|
|
 
|-
|2B
|
|
|
|
 
|-
|2C
|
|
|
|
 
|-
|2D
|
|
|
|
 
|-
|2E
| CallCodeOnMovementMaskSet
| 5
|
|
 
|-
|2F
|
|
|
|
 
|-
|-
|30
| PlayMusic
| 2
| 2
|
|
|-
|31
|
| 2
| 2
| Offset to script location
|
|}
|
 
|-
|32
|
|
|
|


|-
|-
| 0x0C
|33
| 8
|
| Trigger area
| 1
{| class="wikitable"
|
|
 
|-
|-
! Offset
|34
! Length
|
! Name
|
|
|
 
|-
|-
| 0
|35
| 1
|
| Movement mask
|
|
|
 
|-
|-
| 1
|36
| 1
| PlaySoundEffectOnce
| Start X
| 2
|
|
 
|-
|-
|37
| PlaySoundEffect
| 2
| 2
|
|
|-
|38
|
|
|
|
|-
|39
| SpriteGotoPosition
| 4
|
|
|-
|3A
|
| 4
|
|
|-
|3B
| SetObjectSolid
| 1
| 1
| Start Y
|
|
 
|-
|-
| 3
|3C
|
| 1
| 1
| End X
|
|
 
|-
|-
|3D
|
| 4
| 4
| 1
|
| End Y
|
 
|-
|3E
|
|
|
|
 
|-
|3F
|
|
|
|
 
|-
|40
|
|
|
|
 
|-
|41
|
|
|
|
 
|-
|42
|
|
|
|
 
|-
|43
|
|
|
|
 
|-
|44
|
|
|
|
 
|-
|45
|
|
|
|
 
|-
|46
|
|
|
|
 
|-
|-
|47
| EventFlagCheck
| 5
| 5
| 2
|
| Script offset
|
 
|-
|48
| EventFlagCheckSkipNext
| 3
|
|
 
|-
|49
|
| 3
|
|
 
|-
|4A
|
|
|
|
 
|-
|4B
|
|
|
|
 
|-
|4C
|
|
|
|
 
|-
|4D
|
|
|
|
 
|-
|4E
|
|
|
|
 
|-
|-
| 7
|4F
| 1
|
| Unknown
|
|}
|
|


|-
|-
| 0x14
|50
| 8
|
| Port player
|
{| class="wikitable"
|
|
 
|-
|-
! Offset
|51
! Length
|
! Name
|
|
|
 
|-
|-
| 0
|52
| 2
|
| [[Maps|Map ID]]
|
|
|
 
|-
|-
| 2
|53
| 2
|
| Map X
|
|
|
 
|-
|-
|54
| GiveItem
| 4
| 4
|
|
|-
|55
|
|
|
|
|-
|56
|
|
|
|
|-
|57
|
|
|
|
|-
|58
|
|
|
|
|-
|59
|
| 2
| 2
| Map Y
|
|
 
|-
|-
|5A
|
| 6
| 6
| 2
|
| Unknown
|
|}
 
|-
|5B
|
|
|
|
 
|-
|5C
|
|
|
|
 
|-
|5D
|
|
|
|
 
|-
|5E
|
|
|
|
 
|-
|5F
|
|
|
|
 
|-
|60
|
|
|
|
 
|-
|61
|
|
|
|


|-
|62
|
|
|
|


|-
|-
| 0x1A
|63
| 11
|
| Display choice dialog
|
{| class="wikitable"
|
|
 
|-
|-
! Offset
|64
! Length
|
! Name
|
|
|
 
|-
|-
| 0
|65
| 2
|
| Pointer to options
| 6
|
|
 
|-
|66
|
|
|
|
 
|-
|-
| 3
|67
| 2
|
| Cancel option
|
|
|
 
|-
|-
| 5
|68
| 2
|
| First option
|
|
|
 
|-
|-
| 7
|69
| 2
|
| Second option
|
|
|
 
|-
|-
| 9
|6A
| 2
|
| Third option
|
|}
|
|


|-
|-
| 0x1B
|6B
| 2
|
| Call text script (16 byte address)
|
{| class="wikitable"
|
|
 
|-
|-
! Offset
|6C
! Length
| PrintAbsolute2
! Name
| 4
|
|
 
|-
|-
| 0
|6D
| 2
|
| Offset
|
|}
|
|


|-
|-
| 0x1C
|6E
| UpdateScene
| 3
| 3
| Call text script (24 byte address)
|
{| class="wikitable"
|
 
|-
|-
! Offset
|6F
! Length
|
! Name
|
|
|
 
|-
|-
| 0
|70
|
|
|
|
 
|-
|71
|
|
|
|
 
|-
|72
|
|
|
|
 
|-
|73
|
| 3
| 3
| Offset
|
|}
|
 
|-
|74
|
|
|
|


|-
|-
| 0x1F
|75
| 0
|
| End script
|
|
|


|-
|-
| 0x21
|76
| 2
|
|  
|
{| class="wikitable"
|
|
 
|-
|77
|
|
|
|
 
|-
|78
| UpdateBackgroundFade
|
|
|
 
|-
|79
|
|
|
|STA S,2
RTI
|-
|7A
|
|
|
| Calls asm BRK instruction
 
|-
|7B
|
|
|
| Calls asm BRK instruction
 
|-
|7C
|
|
|
|
 
|-
|7D
|
|
|
|
 
|-
|7E
|
|
|
| Calls asm BRK instruction
 
|-
|-
! Offset
|7F
! Length
|
! Name
|
|
| Calls asm BRK instruction
 
|-
|-
| 0
|80
| SetAnimationA
| 2
| 2
| Offset
|
|}
|


|-
|-
| 0x23
|81
| SetAnimationB
| 2
| 2
|
|
|-
|82
|
|
|
|
|-
|83
|
|
|
|
|-
|84
|
|
|
|
|-
|85
| SetAnimationC
| 3
|
|
|-
|86
| SetAnimationD
| 3
|  
|  
{| class="wikitable"
|
 
|-
|87
| ObjectMove
| 4
|
|
 
|-
|88
|
|
|
|
 
|-
|89
|
|
|
|
 
|-
|8A
|
|
|
|
 
|-
|8B
|
|
|
|
 
|-
|8C
|
|
|
|
 
|-
|8D
|
|
|
|
 
|-
|8E
| WaitAnimation
| 1
|
|
 
|-
|8F
|
| 1
|
|
 
|-
|90
|
|
|
|
 
|-
|91
|
|
|
|
 
|-
|92
|
|
|
|
 
|-
|93
|
|
|
|
 
|-
|94
|
|
|
|
 
|-
|95
|
| 1
|
|
 
|-
|96
|
| 1
|
|
 
|-
|97
|
| 9
|
|
 
|-
|98
|
| 11
|
|
 
|-
|99
|
| 6
|
|
 
|-
|9A
|
|
|
|
 
|-
|9B
|
|
|
|
 
|-
|9C
|
|
|
|
 
|-
|9D
|
|
|
|
 
|-
|9E
|
|
|
|
 
|-
|9F
|
|
|
|
 
|-
|A0
|
|
|
|
 
|-
|A1
|
| 4
|
|
 
|-
|A2
|
| 6
|
|
 
|-
|A3
|
|
|
|
 
|-
|A4
|
| 10
|
| Same handler as 0xE8
 
|-
|A5
|
|
|
|
 
|-
|A6
|
|
|
|
 
|-
|A7
|
|
|
|
 
|-
|A8
|
|
|
|
 
|-
|A9
|
|
|
|
 
|-
|-
! Offset
|AA
! Length
|
! Name
| 4
|
|
 
|-
|-
| 0
|AB
| 2
|
| Offset
|
|}
|
|


|-
|AC
|
|
|
|


|-
|-
| 0x2D
|AD
| 7
|
| Call code when movement mask matches
|
{| class="wikitable"
|
|
 
|-
|-
! Offset
|AE
! Length
|
! Name
|
|
|
 
|-
|-
| 0
|AF
|
| 2
| 2
| Movement mask
|
|
 
|-
|B0
|
| 2 or 4
|
|
 
|-
|B1
|
| 3
|
|
 
|-
|-
| 2
|B2
| 2
|
| script offset
| 5
|
|
 
|-
|-
|B3
|
| 5
| 5
| 3
|
| code offset
|
|}
 
|-
|B4
| SpriteSetUpsideDown
| 1
|
|


|-
|-
| 0x39
|B5
| 2
| SpriteSetDownsideUp
| Goto position
| 1
{| class="wikitable"
|
|
 
|-
|-
! Offset
|B6
! Length
| SpriteSetFacingRight
! Name
| 1
|
|
 
|-
|-
| 0
|B7
| SpriteSetFacingLeft
| 1
| 1
| unk
|
|
 
|-
|-
|B8
| SpriteFlipVertical
| 1
| 1
|
|
|-
|B9
| SpriteFlipHorizontal
| 1
| 1
| animation
|
|
 
|-
|BA
|
| 2
|
|
 
|-
|-
|BB
|
| 2
| 2
|
|
|-
|BC
|
| 1
|
|
|-
|BD
|
| 1
| 1
| positions
|
|}
|
 
|-
|BE
|
| 6
|
|
 
|-
|BF
|
| 4
|
|
 
|-
|C0
|
| 4
|
|
 
|-
|C1
| Delay
| 3
|
|
 
|-
|C2
|
|
|
|
 
|-
|C3
|
|
|
|
 
|-
|C4
|
|
|
|
 
|-
|C5
|
|
|
|
 
|-
|C6
|
|
|
|
 
|-
|C7
|
|
|
|
 
|-
|C8
|
|
|
|
 
|-
|C9
|
|
|
|
 
|-
|CA
|
|
|
|
 
|-
|CB
|
| 5
|
|
 
|-
|CC
|
| 6
|
|
 
|-
|CD
|
|
|
|
 
|-
|CE
|
|
|
|
 
|-
|CF
|
|
|
|
 
|-
|D0
|
|
|
|
 
|-
|D1
|
|
|
|
 
|-
|D2
|
|
|
|
 
|-
|D3
|
|
|
|
 
|-
|D4
|
| 9
|
|
 
|-
|D5
|
|
|
|
 
|-
|D6
|
| 4
|
|


|-
|-
| 0x48
|D7
|
| 5
|
|
 
|-
|D8
|
| 4
|
|
 
|-
|D9
| SetProjectileDamage
| 2
| 2
| Skip next opcode if event flag is unset
|
{| class="wikitable"
|
 
|-
|-
! Offset
|DA
! Length
|
! Name
|
|
|
 
|-
|DB
|
|
|
|
 
|-
|DC
|
| 5
|
|
 
|-
|DD
|
| 8
|
|
 
|-
|-
| 0
|DE
|
| 2
| 2
| Flag+Value (see note)
|
|}
|
 
|-
|DF
|
| 4
|
|
 
|-
|E0
|
|
|
|
 
|-
|E1
|
|
|
|
 
|-
|E2
|
|
|
|
 
|-
|E3
|
|
|
|
 
|-
|E4
|
|
|
|
 
|-
|-
| 0x6E
|E5
| 1
|
| Update scene
|
|
|
 
|-
|E6
|
|
|
|
 
|-
|E7
|
| 6
|
|
 
|-
|E8
|
| 10
|
|


|-
|-
| 0x78
|E9
| x
|
| Update BG fade
|
|
|


|-
|-
| 0x80
|EA
| x
|
| Set model mode
|
|
|


|-
|-
| 0x87
|EB
| x
|
| Move object
| 1
|
|


|-
|-
| 0x8F
|EC
| 0
|
| Unknown
|
|
|


|-
|-
| 0xC1
|ED
| x
|
| Set scene time
| 6
|
|


|-
|-
| 0xAA
|EE
| x
|
| Call script
| 2
|
|


|-
|-
| 0xB7
|EF
| 0
|
| Unknown
|
|
|


|}
|}

Revision as of 10:18, 11 February 2016

Scripts are parsed bytewise.

A note about event flags

Event flags are calculated from an u16 value like this:

u16 EventFlag;

Flag  = (EventFlag & 0xFFF) >> 3;
Value = 1 << (EventFlag & 7);
IsSet = EventFlag & 0x8000

Commands

Opcode Function Length Arguments Comments
00 JumpOffsetSet 4
01 JumpOffset 1
02 LoopSetup 3
03 LoopDo 1
04 1
05 EventFlag? 3
06 4
07 EventFlagModify 3
08 EventFlagCheckJump 5
09 EventFlagCheckJump2 7
0A EventFlagCheckJump3 5
0B
0C OnTriggerAreaAbsolute 8
0D OnTriggerAreaRelative 8
0E
0F
10
11
12 OnObjectTriggerAreaRelative 8
13 SetSpritePosition 4
14 PlayerPort 9
15
16
17
18
19 SetRespawnLocation 15
1A ChoiceDialog x
1B PrintRelative 3
1C PrintAbsolute 4
1D
1E
1F WaitMessage 1
20
21 OnTrigger 3
22
23 3
24 4
25 Rand 1
26
27
28 2
29 3
2A 3
2B
2C
2D
2E CallCodeOnMovementMaskSet 5
2F
30 PlayMusic 2
31 2
32
33 1
34
35
36 PlaySoundEffectOnce 2
37 PlaySoundEffect 2
38
39 SpriteGotoPosition 4
3A 4
3B SetObjectSolid 1
3C 1
3D 4
3E
3F
40
41
42
43
44
45
46
47 EventFlagCheck 5
48 EventFlagCheckSkipNext 3
49 3
4A
4B
4C
4D
4E
4F
50
51
52
53
54 GiveItem 4
55
56
57
58
59 2
5A 6
5B
5C
5D
5E
5F
60
61
62
63
64
65 6
66
67
68
69
6A
6B
6C PrintAbsolute2 4
6D
6E UpdateScene 3
6F
70
71
72
73 3
74
75
76
77
78 UpdateBackgroundFade
79 STA S,2

RTI

7A Calls asm BRK instruction
7B Calls asm BRK instruction
7C
7D
7E Calls asm BRK instruction
7F Calls asm BRK instruction
80 SetAnimationA 2
81 SetAnimationB 2
82
83
84
85 SetAnimationC 3
86 SetAnimationD 3
87 ObjectMove 4
88
89
8A
8B
8C
8D
8E WaitAnimation 1
8F 1
90
91
92
93
94
95 1
96 1
97 9
98 11
99 6
9A
9B
9C
9D
9E
9F
A0
A1 4
A2 6
A3
A4 10 Same handler as 0xE8
A5
A6
A7
A8
A9
AA 4
AB
AC
AD
AE
AF 2
B0 2 or 4
B1 3
B2 5
B3 5
B4 SpriteSetUpsideDown 1
B5 SpriteSetDownsideUp 1
B6 SpriteSetFacingRight 1
B7 SpriteSetFacingLeft 1
B8 SpriteFlipVertical 1
B9 SpriteFlipHorizontal 1
BA 2
BB 2
BC 1
BD 1
BE 6
BF 4
C0 4
C1 Delay 3
C2
C3
C4
C5
C6
C7
C8
C9
CA
CB 5
CC 6
CD
CE
CF
D0
D1
D2
D3
D4 9
D5
D6 4
D7 5
D8 4
D9 SetProjectileDamage 2
DA
DB
DC 5
DD 8
DE 2
DF 4
E0
E1
E2
E3
E4
E5
E6
E7 6
E8 10
E9
EA
EB 1
EC
ED 6
EE 2
EF