Difference between revisions of "Script Format"

From Terranigma Wiki
Jump to navigation Jump to search
(commands: D2, DA, 65, 66, 5F, DF)
(1F, 20)
Line 248: Line 248:
| 1
| 1
|
|
|
| This waits for a button input for the message to continue/close


|-
|-
|20
|20
|
| MessageAuto
|
| 1
|
|  
|
| This automatically continues/closes the message


|-
|-

Revision as of 18:37, 18 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 Call 4 This command has no stack for return addresses. Nested calls simply overwrite any previous return address, so return is only possible to the most recent call site.

If a simple jump is desired, use command 06 for an async jump, or ASM BRA or JMP for an instantaneous jump.

01 ReturnFrom00 1 If not inside 00-Call, this command is ignored.
02 LoopSetup( u16 Count ) 3
03 LoopDoAsync() 1
04 LoopDo() 1
05 WaitOnEventFlag( u16 Flag ) 3
06 JumpAndSetOrigin 4
07 EventFlagModify 3
08 EventFlagCheckJump 5
09 EventFlagCheckMultiple 3+2*x
0A CheckMapID 5
0B CheckDeathwarpMapID 5
0C TriggerOnAreaAbsolute 8
0D TriggerOnAreaRelative 8
0E TriggerOnAreaAbsolutePixel 12
0F TriggerOnBlockAbsolute 6
10 TriggerOnBlockRelative 6
11 TriggerObjectOnAreaAbsolute 9 First parameter is object index, which is multiplied by 40 and added to 1000 to get the object handle, for which the trigger is checked.

Remaining parameters are same as command 0C.

12 TriggerObjectOnAreaRelative 9 Broken command.

Supposed to be 0D-counterpart of 11: it should compare the position of the object that is given as first parameter to the position of the object that executes the command, but it uses for both purposes only the object that is given as parameter, which makes it useless.

13 SpriteSetPosition 4
14 PlayerPort 9
15
16
17
18
19 RespawnSetLocation( u16 MapID, u8, u16, u16, u16, u8, u16, u16 ) 15
1A DialogSwitchChoice 4
1B PrintRelative( u16 Address ) 3
1C PrintAbsolute( u24 Address ) 4
1D
1E
1F MessageWait 1 This waits for a button input for the message to continue/close
20 MessageAuto 1 This automatically continues/closes the message
21 Trigger 3
22
23 3
24 4
25 Rand 1
26 RandomMoveInArea 5
27
28 2 Set 0x7F2018 to value
29 3
2A PadDisableButtons 3
2B PadCheckAllButtonsPressed2 5
2C PadCheckNoButtonPressed2 5
2D
2E PadCheckAnyButtonPressed 5
2F PadCheckNoButtonPressed 5
30 MusicPlay 2
31 MusicPlayFadeOver 2
32 MusicPlay2 2 This saves the last track played via this command.

When calling it with the value set to 0xFF it plays the last played track again.

33 1
34
35
36 SoundEffectPlayOnce 2
37 SoundEffectPlay 2
38 SoundEffect? 3
39 SpriteGotoPosition 4
3A 4
3B ObjectSetSolid 1
3C 1
3D 4
3E
3F
40
41
42 7
43
44 5
45
46 MapCopyRect 8
47 ObjectDeleteIfEventFlags 1+2*x
48 ObjectDeleteIfEventFlag 3
49 ObjectDeleteIfMapID 3
4A
4B
4C
4D
4E
4F
50
51
52
53
54 ItemAdd 4
55 ItemDel 2
56
57
58 JumpIf0648( u8 Value, u16 JumpAddress ) 4 Jump if [0648] == Value
59 2
5A 6
5B
5C
5D
5E
5F SwitchOnDirection( u16 DownJump, u16 UpJump, u16 LeftJump, u16 RightJump ) 9
60
61
62
63
64
65 HandlerRegisterOnDamage( u16 HandlerAddress, u24 ReturnAddress ) 6
66 ReturnFromDamageHandler 1
67
68
69
6A
6B PrintRelative2 3
6C PrintAbsolute2 4
6D
6E SceneUpdate 1
6F
70
71
72
73 5 Wait for unknown condition and then jump
74
75 5
76 SystemRegisterWrite 3
77
78 BackgroundUpdateFade 2
79 Unused command
7A Unused command
7B Unused command
7C Unknown Command, Only implemented in JP version, FFFF in German and English
7D Unused command
7E Unused command
7F Unused command
80 AnimationSetA 2
81 AnimationSetB 2
82 AnimationSetC 3
83 3
84 4
85 AnimationSetD 3
86 AnimationSetE 3
87 ObjectMove 4
88 4
89 5
8A 2
8B 3
8C 2
8D 3
8E AnimationWait 1
8F AnimationWait2 1
90
91
92
93
94
95 1
96 1
97 9
98 11
99 ObjectCloneInsertAtBeginSF 6 Insert at begin of list, set script pointer and flags
9A ObjectCloneInsertBeforeSP 4 Insert before current object, set script pointer and parent (implied)
9B ObjectCloneInsertBeforeSFP 6 Insert before current object, set script pointer, flags and parent (implied)
9C ObjectCloneInsertBeforeSRP 8 Insert before current object, set script pointer, relative placement and parent (implied)
9D ObjectCloneInsertBeforeSRFP 10 Insert before current object, set script pointer, relative placement, flags and parent (implied)
9E ObjectCloneInsertBeforeSAP 8 Insert before current object, set script pointer, absolute placement and parent (implied)
9F ObjectCloneInsertBeforeSAFP 10 Insert before current object, set script pointer, absolute placement, flags and parent (implied)
A0 ObjectCloneInsertAtEndSFP 6 Insert at end of list, set script pointer, flags and parent (implied)
A1 ObjectCloneInsertAfterSP 4 Insert after current object, set script pointer and parent (implied)
A2 ObjectCloneInsertAfterSFP 6 Insert after current object, set script pointer, flags and parent (implied)
A3 ObjectCloneInsertAfterSRP 8 Insert after current object, set script pointer, relative placement and parent (implied)
A4 ObjectCloneInsertAfterSRFP 10 Insert after current object, set script pointer, relative placement, flags and parent (implied)

Same handler as 0xE8

A5 ObjectCloneInsertAfterSAP 8 Insert after current object, set script pointer, absolute placement and parent (implied)
A6 ObjectCloneInsertAfterSAFP 10 Insert after current object, set script pointer, absolute placement, flags and parent (implied)
A7 ObjectDelete 1
A8
A9
AA 4
AB
AC
AD
AE
AF 2
B0 2 or 5
B1 3
B2 3
B3 SpriteMove 5
B4 SpriteSetUpsideDown 1
B5 SpriteSetDownsideUp 1
B6 SpriteSetFacingRight 1
B7 SpriteSetFacingLeft 1
B8 SpriteFlipVertical 1
B9 SpriteFlipHorizontal 1
BA 2
BB 2
BC MarkOrigin 1
BD MarkOriginAsync 1
BE JumpAndSetOriginWithDelay 6
BF JumpAndSetOriginAsync 4
C0 SetOriginAndEraseDelay 4
C1 Delay 3
C2 JumpIfMapCollisionAbove 3
C3 JumpIfMapCollisionBelow 3
C4 JumpIfMapCollisionLeft 3
C5 JumpIfMapCollisionRight 3
C6 GetCurrentBlockCollision 1 ??
C7 CheckMapCollisionAbove 3 or 9
C8 CheckMapCollisionBelow 3 or 9
C9 CheckMapCollisionLeft 3 or 9
CA CheckMapCollisionRight 3 or 9
CB 5 Change other object script ??
CC 6
CD
CE
CF
D0
D1
D2 TriggerOnSight( u8 SideRange, u8 FrontRange, u8 Direction, u16 JumpAddress ) 6
D3 CheckHorizontalRange 9
D4 CheckVerticalRange 9
D5
D6 ProximityTrigger 4
D7 DetermineNearestAxis 5
D8 4
D9 LoadFightingStats 2 Load pointer to index in enemy table

80: Don't load max HP

DA HandlerRegisterOnWall( u16 HandlerAddress ) 3 Set Wall Hit Handler
DB
DC 6
DD 8
DE 2
DF WaitOn097C_0810 4 Wait For ([097C] & 0810) == 0, Then Jump
E0
E1
E2
E3
E4 1
E5
E6 ObjectCloneDepInsertAfterSP 4 Like A1, but additionally makes new object depend on the old one, which mainly matters for mass deletion with command EB.
E7 ObjectCloneDepInsertAfterSFP 6 Like A2, but additionally makes new object depend on the old one.
E8 ObjectCloneDepInsertAfterSRFP 10 Like A4, but additionally makes new object depend on the old one.
E9 ObjectCloneDepInsertAfterSAFP 10 Like A6, but additionally makes new object depend on the old one.
EA ObjectCloneDepInsertBeforeSP 4 Like 9A, but additionally makes new object depend on the old one.
EB DeleteAllDependingObjects 1 Delete all depending objects, but only if 'this' has no parent
EC
ED 6
EE 2
EF