Difference between revisions of "Script Format"

From Terranigma Wiki
Jump to navigation Jump to search
(cmds: 33, 39, 3C-40)
m (Updated wording)
(10 intermediate revisions by 2 users not shown)
Line 18: Line 18:
! Function
! Function
! Length
! Length
! Arguments
! Comments
! Comments
|-
|-
Line 24: Line 23:
| Call
| Call
| 4
| 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.
| 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.


Line 33: Line 31:
| ReturnFrom00
| ReturnFrom00
| 1
| 1
|
| If not inside 00-Call, this command is ignored.
| If not inside 00-Call, this command is ignored.


Line 40: Line 37:
| LoopSetup( u16 Count )
| LoopSetup( u16 Count )
| 3
| 3
|
|
|


Line 47: Line 43:
| LoopDoAsync()
| LoopDoAsync()
| 1
| 1
|
|
|


Line 54: Line 49:
| LoopDo()
| LoopDo()
| 1
| 1
|
|
|


Line 61: Line 55:
| WaitOnEventFlag( u16 Flag )
| WaitOnEventFlag( u16 Flag )
| 3
| 3
|
|
|


Line 68: Line 61:
| JumpAndSetOrigin
| JumpAndSetOrigin
| 4
| 4
|
|
|


Line 75: Line 67:
| EventFlagModify
| EventFlagModify
| 3
| 3
|
|
|


Line 82: Line 73:
| EventFlagCheckJump
| EventFlagCheckJump
| 5
| 5
|
|
|


Line 89: Line 79:
| EventFlagCheckMultiple
| EventFlagCheckMultiple
| 3+2*x
| 3+2*x
|
|
|


Line 96: Line 85:
| CheckMapID
| CheckMapID
| 5
| 5
|
|
|


Line 103: Line 91:
| CheckDeathwarpMapID
| CheckDeathwarpMapID
| 5
| 5
|
|
|


Line 110: Line 97:
| TriggerOnAreaAbsolute
| TriggerOnAreaAbsolute
| 8
| 8
|
|
|


Line 117: Line 103:
| TriggerOnAreaRelative
| TriggerOnAreaRelative
| 8
| 8
|
|
|


Line 124: Line 109:
| TriggerOnAreaAbsolutePixel
| TriggerOnAreaAbsolutePixel
| 12
| 12
|
|
|


Line 131: Line 115:
| TriggerOnBlockAbsolute
| TriggerOnBlockAbsolute
| 6
| 6
|
|
|


Line 138: Line 121:
| TriggerOnBlockRelative
| TriggerOnBlockRelative
| 6
| 6
|
|
|


Line 145: Line 127:
| TriggerObjectOnAreaAbsolute
| TriggerObjectOnAreaAbsolute
| 9
| 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.
| 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.
Remaining parameters are same as command 0C.
Line 153: Line 134:
| TriggerObjectOnAreaRelative
| TriggerObjectOnAreaRelative
| 9
| 9
|
| Broken command.
| Broken command.


Line 163: Line 143:
| SpriteSetPosition
| SpriteSetPosition
| 4
| 4
|
|
|


Line 170: Line 149:
| PlayerPort
| PlayerPort
| 9
| 9
|
|
|


Line 177: Line 155:
| PlayerPortByEnemy
| PlayerPortByEnemy
| 1
| 1
|
| Used by Guardner to port Ark out of towers. Uses byte #15 of the extended sprite definition, see [[Enemy Induced Warps]].
| Used by Guardner to port Ark out of towers. Uses byte #15 of the extended sprite definition, see [[Enemy Induced Warps]].


Line 184: Line 161:
| SetBonepinWarp( u16, u8, u16, u16 )
| SetBonepinWarp( u16, u8, u16, u16 )
| 8
| 8
|
| The bonepin warp location is stored in memory at address 7E0608 (8 bytes, right after the deathwarp location)
| The bonepin warp location is stored in memory at address 7E0608 (8 bytes, right after the deathwarp location)


Line 191: Line 167:
| SeagullTransport( u8 to, u16 src_x, u16 src_y )
| SeagullTransport( u8 to, u16 src_x, u16 src_y )
| 6
| 6
|
| Includes automatic port to map 5, flight scene and port to the destination map, see [[Seagull Transport]].
| Includes automatic port to map 5, flight scene and port to the destination map, see [[Seagull Transport]].


Line 198: Line 173:
| RideShip( u8 route, u8 direction, u16 src_x, u16 src_y )
| RideShip( u8 route, u8 direction, u16 src_x, u16 src_y )
| 7
| 7
|
| Includes automatic port to map 2, ship scene and port to destination map, see [[Automatic Ship Routes]]
| Includes automatic port to map 2, ship scene and port to destination map, see [[Automatic Ship Routes]]


|-
|-
|19
|19
| RespawnSetLocation( u16 MapID, u8, u16, u16, u16, u8, u16, u16 )
| RespawnBonePinLocationSet( u16 MapID, u8 Direction, u16 X, u16 Y, u16 MapID, u8 Direction, u16 X, u16 Y )
| 15
| 15
|
| Sets the Death- and Bonepin warp location (7E0600 and 7E0608 respectively).
| Sets the Death- and Bonepin warp location (7E0600 and 7E0608 respectively).


Line 212: Line 185:
| DialogSwitchChoice( u8 layout, u16 choices_ptr )
| DialogSwitchChoice( u8 layout, u16 choices_ptr )
| 4
| 4
|
| choices_ptr refers to a table with jump addresses. The text for the choices needs to be created beforehand by a normal text command.
| choices_ptr refers to a table with jump addresses. The text for the choices needs to be created beforehand by a normal text command.


Line 247: Line 219:
| PrintRelative( u16 Address )
| PrintRelative( u16 Address )
| 3
| 3
|
|
|


Line 254: Line 225:
| PrintAbsolute( u24 Address )
| PrintAbsolute( u24 Address )
| 4
| 4
|
|
|


Line 261: Line 231:
| u16
| u16
| 3
| 3
|
|
|


Line 268: Line 237:
| u8, u16
| u8, u16
| 4
| 4
|
| calls 0x1D
| calls 0x1D


Line 275: Line 243:
| MessageWait
| MessageWait
| 1
| 1
|
| This waits for a button input for the message to continue/close
| This waits for a button input for the message to continue/close


Line 282: Line 249:
| MessageAuto
| MessageAuto
| 1
| 1
|
| This automatically continues/closes the message
| This automatically continues/closes the message


Line 289: Line 255:
| TriggerSet( u16 addr )
| TriggerSet( u16 addr )
| 3
| 3
|
| Trigger is executed when Ark talks to an object. When addr is 0 it is deleted
| Trigger is executed when Ark talks to an object. When addr is 0 it is deleted


Line 296: Line 261:
| SwitchRange( u8 first, u8 last, ... )
| SwitchRange( u8 first, u8 last, ... )
| 3 + 2*(last+1-first)
| 3 + 2*(last+1-first)
|
| Choice is determined by object data byte $26. One 2-byte jump address for each possible choice is directly included in the command.
| Choice is determined by object data byte $26. One 2-byte jump address for each possible choice is directly included in the command.


Line 303: Line 267:
| TriggerNearPlayer( u16 addr )
| TriggerNearPlayer( u16 addr )
| 3
| 3
|
| Turns NPC towards player and jumps to addr.
| Turns NPC towards player and jumps to addr.


Line 310: Line 273:
| TriggerNearPlayer( u8, u16 addr )
| TriggerNearPlayer( u8, u16 addr )
| 4
| 4
|
| Turns NPC towards player and jumps to addr.
| Turns NPC towards player and jumps to addr.


Line 317: Line 279:
| Rand
| Rand
| 1
| 1
|
|
|


Line 324: Line 285:
| RandomMoveInArea( u8 left, u8 top, u8 right, u8 bottom )
| RandomMoveInArea( u8 left, u8 top, u8 right, u8 bottom )
| 5
| 5
|
|
|


Line 331: Line 291:
| RandomMoveInArea( u8 animation, u8 ???, u8 left, u8 top, u8 right, u8 bottom )
| RandomMoveInArea( u8 animation, u8 ???, u8 left, u8 top, u8 right, u8 bottom )
| 7
| 7
|
| not used by the game
| not used by the game


Line 338: Line 297:
|
|
| 2
| 2
|
| Set 0x7F2018 to value
| Set 0x7F2018 to value


Line 345: Line 303:
| PadButtonsEnable( u16 buttons )
| PadButtonsEnable( u16 buttons )
| 3
| 3
|
|
|


Line 352: Line 309:
| PadButtonsDisable( u16 buttons )
| PadButtonsDisable( u16 buttons )
| 3
| 3
|
|  
|  


Line 359: Line 315:
| PadCheckAllButtonsPressed2
| PadCheckAllButtonsPressed2
| 5
| 5
|
|
|


Line 366: Line 321:
| PadCheckNoButtonPressed2
| PadCheckNoButtonPressed2
| 5
| 5
|
|
|


Line 373: Line 327:
| PadCheckButtonPressed
| PadCheckButtonPressed
| 8
| 8
|
|
|


Line 380: Line 333:
| PadCheckAnyButtonPressed
| PadCheckAnyButtonPressed
| 5
| 5
|
|
|


Line 387: Line 339:
| PadCheckNoButtonPressed
| PadCheckNoButtonPressed
| 5
| 5
|
|
|


Line 394: Line 345:
| MusicPlay
| MusicPlay
| 2
| 2
|
|
|


Line 401: Line 351:
| MusicPlayFadeOver
| MusicPlayFadeOver
| 2
| 2
|
|
|


Line 408: Line 357:
| MusicPlay2
| MusicPlay2
| 2
| 2
|
| This saves the last track played via this command.
| 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.
When calling it with the value set to 0xFF it plays the last played track again.
Line 416: Line 364:
| WaitMusicLoaded
| WaitMusicLoaded
| 1
| 1
|
|
|


Line 423: Line 370:
| APUWriteByte_F5( u8 Byte )
| APUWriteByte_F5( u8 Byte )
| 2
| 2
|
| Writes one byte to 0x2140 (APUI00) followed by a write with 0xF5
| Writes one byte to 0x2140 (APUI00) followed by a write with 0xF5


Line 430: Line 376:
| APUWriteByte_F6( u8 Byte )
| APUWriteByte_F6( u8 Byte )
| 2
| 2
|
| Writes one byte to 0x2140 (APUI00) followed by a write with 0xF6
| Writes one byte to 0x2140 (APUI00) followed by a write with 0xF6


Line 437: Line 382:
| SoundEffectPlayOnce
| SoundEffectPlayOnce
| 2
| 2
|
|
|


Line 444: Line 388:
| SoundEffectPlay
| SoundEffectPlay
| 2
| 2
|
|
|


Line 451: Line 394:
| SoundEffect?
| SoundEffect?
| 3
| 3
|
|
|


Line 458: Line 400:
| SpriteGotoPositionX
| SpriteGotoPositionX
| 4
| 4
|
| This command expects to be followed by "0x8E, 0x3B, asm(BRA -11)" because once it reaches the position it is hardcoded to jump 6 bytes ahead.
| This command expects to be followed by "0x8E, 0x3B, asm(BRA -11)" because once it reaches the position it is hardcoded to jump 6 bytes ahead.


Line 465: Line 406:
| SpriteGotoPositionY
| SpriteGotoPositionY
| 4
| 4
|
| This command expects to be followed by "0x8E, 0x3B, asm(BRA -11)" because once it reaches the position it is hardcoded to jump 6 bytes ahead.
| This command expects to be followed by "0x8E, 0x3B, asm(BRA -11)" because once it reaches the position it is hardcoded to jump 6 bytes ahead.


Line 472: Line 412:
| ObjectSetSolid
| ObjectSetSolid
| 1
| 1
|
|
|


Line 479: Line 418:
| ObjectSetHollow
| ObjectSetHollow
| 1
| 1
|
|
|


Line 486: Line 424:
| BlockSetSolid( u8 rel_or_abs, u8 x, u8 y )
| BlockSetSolid( u8 rel_or_abs, u8 x, u8 y )
| 4
| 4
|
| if rel_or_abs is 00, the coordinate is relative to the current object, for 01 it is absolute.
| if rel_or_abs is 00, the coordinate is relative to the current object, for 01 it is absolute.


Line 493: Line 430:
| BlockSetHollow( u8 rel_or_abs, u8 x, u8 y )
| BlockSetHollow( u8 rel_or_abs, u8 x, u8 y )
| 4
| 4
|
| if rel_or_abs is 00, the coordinate is relative to the current object, for 01 it is absolute.
| if rel_or_abs is 00, the coordinate is relative to the current object, for 01 it is absolute.


Line 500: Line 436:
| BlockSetCollision( u8 value, u8 x, u8 y )
| BlockSetCollision( u8 value, u8 x, u8 y )
| 4
| 4
|
| if (value & 80) is clear, the coordinate is relative to the current object, else it is absolute.
| if (value & 80) is clear, the coordinate is relative to the current object, else it is absolute.


Line 507: Line 442:
| DungeonBlockSetHollow( u8 rel_or_abs, u8 x, u8 y )
| DungeonBlockSetHollow( u8 rel_or_abs, u8 x, u8 y )
| 4
| 4
|
| if rel_or_abs is 00, the coordinate is relative to the current object, for 01 it is absolute.
| if rel_or_abs is 00, the coordinate is relative to the current object, for 01 it is absolute.


|-
|-
|41
|41
|  
| BlockCheck( u16 block, u16 addr )
|  
| 5
|
| Compares 9 least significant bits of block with the block actually under object. If they match, jump to addr.
|


|-
|-
|42
|42
|
| BlockCheckRelative( u8 dx, u8 dy, u16 block, u16 addr )
| 7
| 7
|
| Compares 9 least significant bits of block with the block relative to object. If they match, jump to addr.
|


|-
|-
|43
|43
|
| BlockSetAbsolute( u8 x, u8 y, u16 block )
| 5
| 5
|
|
|


|-
|-
|44
|44
|
| BlockSetRelative( u8 dx, u8 dy, u16 block )
| 5
| 5
|
|
|


|-
|-
|45
|45
|
| BlockSet
|
| 1
|
| Changes the block under object. block = object[7F201A]
|
 
 
|-
|-
|46
|46
| MapCopyRect( u16 SizeX (Blocks), u16 SizeY (Pixels), u16 SrcX(Blocks), u16 SrcY(Blocks), u16 DstX(Blocks), u16 DstY(Blocks), u8 Unknown )
| MapCopyRect( u16 SizeX (Blocks), u16 SizeY (Pixels), u16 SrcX(Blocks), u16 SrcY(Blocks), u16 DstX(Blocks), u16 DstY(Blocks), u8 Unknown )
| 8
| 8
|
|
|


Line 556: Line 484:
| ObjectDeleteIfEventFlags
| ObjectDeleteIfEventFlags
| 1+2*x
| 1+2*x
|
|
|


|-
|-
|48
|48
| ObjectDeleteIfEventFlag
| ObjectDeleteIfEventFlag( u16 flag )
| 3
| 3
|
|
|


|-
|-
|49
|49
| ObjectDeleteIfMapID
| ObjectDeleteIfMapID( u16 map )
| 3
| 3
|
|
|


Line 577: Line 502:
|
|
| 6
| 6
|
|
|


Line 584: Line 508:
| u8, u16, (u16)
| u8, u16, (u16)
| 4 or 6
| 4 or 6
|
|  
|  


|-
|-
|4C
|4C
| u8, u16, (u16)
| TownGrowthCheck( u8 id, u16 minimum, u16 addr )
| 4 or 6
| 6
|
| Jump to addr if growth rate id is at least the specified minimum.
|


|-
|-
|4D
|4D
|
| TownGrowthUpdate( u8 id, u16 amount )
| 2 or 4
| 4
|
| (id & C0) specifies the update mode:
|
{| class="wikitable" style="font-family:Lucida Console;"
! mode
! description
|-
| 00
| overwrite
|-
| 40
| subtract
|-
| 80
| add
|}


|-
|-
Line 605: Line 539:
| u16, u16
| u16, u16
| 5
| 5
|
|  
|  


Line 612: Line 545:
| u16, u16
| u16, u16
| 5
| 5
|
|  
|  


Line 619: Line 551:
| u16, u8
| u16, u8
| 4
| 4
|
|  
|  


Line 625: Line 556:
|51
|51
|   
|   
|
|
|
|
|
Line 632: Line 562:
|52
|52
|  
|  
|
|
|
|  
|  
Line 639: Line 568:
|53
|53
|  
|  
|
|
|
|  
|  
Line 645: Line 573:
|-
|-
|54
|54
| ItemAdd
| ItemAdd( u8 item, u16 addr )
| 4
| 4
|
| Jump to addr if the item can't be carried because the slot or inventory is full.
|


|-
|-
|55
|55
| ItemDel
| ItemDel( u8 item )
| 2
| 2
|
|
|


|-
|-
|56
|56
|  
| ItemCheckEmptySlot( u8 id, u16 addr )
|  
| 4
|
| Jump to addr if the item can't be carried because the slot or inventory is full.
|


|-
|-
|57
|57
|
| ItemCheckOwned( u8 id, u16 addr )
|  
| 4
|
| Jump to addr if Ark has the item in his inventory.
|


|-
|-
|58
|58
| JumpIf0648( u8 Value, u16 JumpAddress )
| ItemCheckEquipped( u8 id, u16 addr )
| 2 or 4
| 4
|
| Jump to addr if Ark has the item equipped.
| Jump if [0648] == Value


|-
|-
|59
|59
|
|
|
|
|
|
|
Line 687: Line 609:
|-
|-
|5A
|5A
|  
| PaletteLoad( u8 src_bank, u16 src_addr, u8 dest_color_index, u8 count )
|  
| 6
|
|
|


|-
|-
|5B
|5B
|  
| DecompressToMemory( u24 src, u16 dest )
|  
| 6
|
|
|


|-
|-
|5C
|5C
| MoneyAdd
| MoneyAdd( u24 amount )
| 4
| 4
|
| amount is BCD
|


|-
|-
|5D
|5D
| MoneyDel
| MoneyTake( u24 amount, u16 addr )
| 4
| 6
|
| amount is BCD. Jump to addr if Ark has not enough money.
|


|-
|-
|5E
|5E
|
| MoneyCheck( u24 amount, u8 mode, u16 addr )
| 7
| 7
|
| amount is BCD. The result of the comparison is interpreted according to mode:
|
{| class="wikitable" style="font-family:Lucida Console;"
! mode & C0
! action
|-
| 00
| jump if money == amount
|-
| 40
| jump if money < amount
|-
| 80
| jump if money > amount
|-
| C0
| jump if money != amount
|}


|-
|-
Line 724: Line 657:
| SwitchOnDirection( u16 DownJump, u16 UpJump, u16 LeftJump, u16 RightJump )
| SwitchOnDirection( u16 DownJump, u16 UpJump, u16 LeftJump, u16 RightJump )
| 9
| 9
|
|
|


Line 731: Line 663:
| ItemAddPlayMusic( u8 ItemID, u16 Delay, u8 MusicID )
| ItemAddPlayMusic( u8 ItemID, u16 Delay, u8 MusicID )
| 5
| 5
|
|
|


|-
|-
|61
|61
|
| CheckDirectionEx( u8 direction, u8 a, u8 b, u8 c, u16 jump )
|
| 7
|
| Jump if current directon matches. Diagonal movement is acknowledged if it's primarily in the specified direction. '''direction''' can be 0-3:
|
{| class="wikitable" style="font-family:Lucida Console;"
 
! colspan="2" | direction
|-
|-
|62
| 00
|
| down
|
|-
|
| 01
| up
|-
| 02
| left
|-
| 03
| right
|}
The values '''a''', '''b''' and '''c''' correspond to skew directions and are used with object[7F2014] ???
 
|-
|62
| SetInvulnerable( u8 frames )
| 2
|
|


Line 752: Line 697:
|
|
| 3
| 3
|
|
|


|-
|-
|64
|64
|
|
|
|
|
Line 766: Line 709:
| HandlerRegisterOnDamage( u16 HandlerAddress, u24 ReturnAddress )
| HandlerRegisterOnDamage( u16 HandlerAddress, u24 ReturnAddress )
| 6
| 6
|
|
|


Line 773: Line 715:
| ReturnFromDamageHandler
| ReturnFromDamageHandler
| 1
| 1
|
|
|


Line 780: Line 721:
|
|
| 1
| 1
|
|
|


|-
|-
|68
|68
|
|
|
|
|
Line 794: Line 733:
|
|
| 1
| 1
|
|
|


Line 801: Line 739:
| u8, u8
| u8, u8
| 3
| 3
|
|
|


Line 808: Line 745:
| PrintRelative2
| PrintRelative2
| 3
| 3
|
|
|


Line 815: Line 751:
| PrintAbsolute2
| PrintAbsolute2
| 4
| 4
|
|
|


|-
|-
|6D
|6D
|
|
|
|
|
Line 829: Line 763:
| SceneUpdate
| SceneUpdate
| 1
| 1
|
|
|


Line 836: Line 769:
|  
|  
| 1
| 1
|
|
|


|-
|-
|70
|70
| u16, u16
| Follow( u16 ptrObject, u16 ptrAnimations )
| 5
| 5
|
| '''Animations''' is a table of 3x4 animation id's, that specify what animation to use for every possible (diagonal) movement.
|
 
 
|-
|-
|71
|71
| Check???( u16, u16, u16 jump )
|
| 7
|
| Jumps if the check is successful
|
|


|-
|-
Line 857: Line 787:
| u16, u8
| u16, u8
| 4
| 4
|
|
|


Line 864: Line 793:
|
|
| 5
| 5
|
| Wait for unknown condition and then jump
| Wait for unknown condition and then jump


|-
|-
|74
|74
| u8 a, u16 b
| SetMagicHandler( u8 magic_id, u16 handler )
| 4
| 4
|
| Registers a handler that is executed when the specific magic is used. If '''handler & 0x8000''' is set, it refers to a script address, else it is a flag that will be set.
| $7F2024,x = (u16)a; $7F2022,x = b;
object[7F2024] = magic_id
object[7F2022] = handler


|-
|-
|75
|75
| u16 a, u16 b
| SetConditionalTalkHandler( u16 flag, u16 handler )
| 5
| 5
|
| custom '''handler''' must be '''>= 0x8000''', values below are predefined handlers, but only '''0000''' is currently used and prints a line of dots.
| $7F2028,x = a; $7F2026,x = b;
object[7F2028] = flag
object[7F2026] = handler


|-
|-
Line 885: Line 815:
| SystemRegisterWrite
| SystemRegisterWrite
| 3
| 3
|
|
|


|-
|-
|77
|77
|
|
|
|
|
Line 899: Line 827:
| BackgroundUpdateFade
| BackgroundUpdateFade
| 2
| 2
|
|
|


|-
|-
|79
|79
|
|
|
|
|
Line 911: Line 837:
|-
|-
|7A
|7A
|
|
|
|
|
Line 918: Line 843:
|-
|-
|7B
|7B
|
|
|
|
|
Line 925: Line 849:
|-
|-
|7C
|7C
|
|
|
|
|
Line 932: Line 855:
|-
|-
|7D
|7D
|
|
|
|
|
Line 939: Line 861:
|-
|-
|7E
|7E
|
|
|
|
|
Line 946: Line 867:
|-
|-
|7F
|7F
|
|
|
|
|
Line 955: Line 875:
| AnimationSetSpriteFlagsAndResetElevationLevel( u8 SpriteFlags )
| AnimationSetSpriteFlagsAndResetElevationLevel( u8 SpriteFlags )
| 2
| 2
|
|
|


Line 962: Line 881:
| AnimationSetB( u8 SpriteFlags )
| AnimationSetB( u8 SpriteFlags )
| 2
| 2
|
|
|


Line 969: Line 887:
| AnimationSetC( u8 SpriteFlags, u8 )
| AnimationSetC( u8 SpriteFlags, u8 )
| 3
| 3
|
|
|


Line 976: Line 893:
| SpriteSetFlagsAndElevationLevel( u8 SpriteFlags, u8 EleveationLevel )
| SpriteSetFlagsAndElevationLevel( u8 SpriteFlags, u8 EleveationLevel )
| 3
| 3
|
|
|


Line 983: Line 899:
|
|
| 4
| 4
|
|
|


Line 990: Line 905:
| AnimationSetD
| AnimationSetD
| 3
| 3
|
| calls 80
| calls 80


Line 997: Line 911:
| AnimationSetE( u8, u8 )
| AnimationSetE( u8, u8 )
| 3
| 3
|
| calls 81
| calls 81


Line 1,004: Line 917:
| ObjectMove( u8, u8, u8 )
| ObjectMove( u8, u8, u8 )
| 4
| 4
|
| calls 82
| calls 82


Line 1,011: Line 923:
|
|
| 4
| 4
|
| calls 83
| calls 83


Line 1,018: Line 929:
|
|
| 5
| 5
|
| calls 84
| calls 84


Line 1,025: Line 935:
|
|
| 2
| 2
|
|  
|  


Line 1,032: Line 941:
|
|
| 3
| 3
|
| calls 8A
| calls 8A


Line 1,039: Line 947:
|
|
| 2
| 2
|
|
|


Line 1,046: Line 953:
|
|
| 3
| 3
|
| calls 8C
| calls 8C


Line 1,053: Line 959:
| AnimationWait
| AnimationWait
| 1
| 1
|
|
|


Line 1,060: Line 965:
| AnimationWait2
| AnimationWait2
| 1
| 1
|
|
|


Line 1,066: Line 970:
|90
|90
| 1
| 1
|
|
|
| wait for loop
| wait for loop
Line 1,073: Line 976:
|91
|91
| 1
| 1
|
|
|
|
|
Line 1,080: Line 982:
|92
|92
| 1
| 1
|
|
|
| wait for loop
| wait for loop
Line 1,087: Line 988:
|93
|93
| 1
| 1
|
|
|
|
|
Line 1,094: Line 994:
|94
|94
| 1
| 1
|
|
|
| wait for loop
| wait for loop
Line 1,102: Line 1,001:
| u16, u8, u16, u16, u16, u8
| u16, u8, u16, u16, u16, u8
| 9
| 9
|
|
|


Line 1,109: Line 1,007:
| u16, u16, u16, u16, u16
| u16, u16, u16, u16, u16
| 11
| 11
|
|
|


Line 1,116: Line 1,013:
| u16, u8, u16, ?
| u16, u8, u16, ?
| 6
| 6
|
|
|


Line 1,123: Line 1,019:
| u16, u8, ?
| u16, u8, ?
| 11
| 11
|
| Object related
| Object related


Line 1,130: Line 1,025:
| ObjectCloneInsertAtBeginSF
| ObjectCloneInsertAtBeginSF
| 6
| 6
|
| Insert at begin of list, set script pointer and flags
| Insert at begin of list, set script pointer and flags


Line 1,137: Line 1,031:
| ObjectCloneInsertBeforeSP
| ObjectCloneInsertBeforeSP
| 4
| 4
|
| Insert before current object, set script pointer and parent (implied)
| Insert before current object, set script pointer and parent (implied)


Line 1,144: Line 1,037:
| ObjectCloneInsertBeforeSFP
| ObjectCloneInsertBeforeSFP
| 6
| 6
|
| Insert before current object, set script pointer, flags and parent (implied)
| Insert before current object, set script pointer, flags and parent (implied)


Line 1,151: Line 1,043:
| ObjectCloneInsertBeforeSRP
| ObjectCloneInsertBeforeSRP
| 8
| 8
|
| Insert before current object, set script pointer, relative placement and parent (implied)
| Insert before current object, set script pointer, relative placement and parent (implied)


Line 1,158: Line 1,049:
| ObjectCloneInsertBeforeSRFP
| ObjectCloneInsertBeforeSRFP
| 10
| 10
|
| Insert before current object, set script pointer, relative placement, flags and parent (implied)
| Insert before current object, set script pointer, relative placement, flags and parent (implied)


Line 1,165: Line 1,055:
| ObjectCloneInsertBeforeSAP
| ObjectCloneInsertBeforeSAP
| 8
| 8
|
| Insert before current object, set script pointer, absolute placement and parent (implied)
| Insert before current object, set script pointer, absolute placement and parent (implied)


Line 1,172: Line 1,061:
| ObjectCloneInsertBeforeSAFP
| ObjectCloneInsertBeforeSAFP
| 10
| 10
|
| Insert before current object, set script pointer, absolute placement, flags and parent (implied)
| Insert before current object, set script pointer, absolute placement, flags and parent (implied)


Line 1,179: Line 1,067:
| ObjectCloneInsertAtEndSFP
| ObjectCloneInsertAtEndSFP
| 6
| 6
|
| Insert at end of list, set script pointer, flags and parent (implied)
| Insert at end of list, set script pointer, flags and parent (implied)


Line 1,186: Line 1,073:
| ObjectCloneInsertAfterSP
| ObjectCloneInsertAfterSP
| 4
| 4
|
| Insert after current object, set script pointer and parent (implied)
| Insert after current object, set script pointer and parent (implied)


Line 1,193: Line 1,079:
| ObjectCloneInsertAfterSFP
| ObjectCloneInsertAfterSFP
| 6
| 6
|
| Insert after current object, set script pointer, flags and parent (implied)
| Insert after current object, set script pointer, flags and parent (implied)


Line 1,200: Line 1,085:
| ObjectCloneInsertAfterSRP
| ObjectCloneInsertAfterSRP
| 8
| 8
|
| Insert after current object, set script pointer, relative placement and parent (implied)
| Insert after current object, set script pointer, relative placement and parent (implied)


Line 1,207: Line 1,091:
| ObjectCloneInsertAfterSRFP
| ObjectCloneInsertAfterSRFP
| 10
| 10
|
| Insert after current object, set script pointer, relative placement, flags and parent (implied)
| Insert after current object, set script pointer, relative placement, flags and parent (implied)


Line 1,216: Line 1,099:
| ObjectCloneInsertAfterSAP
| ObjectCloneInsertAfterSAP
| 8
| 8
|
| Insert after current object, set script pointer, absolute placement and parent (implied)
| Insert after current object, set script pointer, absolute placement and parent (implied)


Line 1,223: Line 1,105:
| ObjectCloneInsertAfterSAFP
| ObjectCloneInsertAfterSAFP
| 10
| 10
|
| Insert after current object, set script pointer, absolute placement, flags and parent (implied)
| Insert after current object, set script pointer, absolute placement, flags and parent (implied)


Line 1,230: Line 1,111:
| ObjectDelete
| ObjectDelete
| 1
| 1
|
|
|


Line 1,237: Line 1,117:
|  
|  
| 1
| 1
|
|
|


|-
|-
|A9
|A9
|
|
|
|
|
Line 1,251: Line 1,129:
|
|
| 4
| 4
|
|
|


|-
|-
|AB
|AB
|
|
|
|
|
Line 1,263: Line 1,139:
|-
|-
|AC
|AC
|
|
|
|
|
Line 1,270: Line 1,145:
|-
|-
|AD
|AD
|
|
|
|
|
Line 1,277: Line 1,151:
|-
|-
|AE
|AE
|
|
|
|
|
Line 1,286: Line 1,159:
|
|
| 2
| 2
|
|
|


Line 1,293: Line 1,165:
|
|
| 2 or 5
| 2 or 5
|
|
|


Line 1,300: Line 1,171:
| ObjectMoveHorizontal
| ObjectMoveHorizontal
| 3
| 3
|
|
|


Line 1,307: Line 1,177:
| ObjectMoveVertical
| ObjectMoveVertical
| 3
| 3
|
|
|


Line 1,314: Line 1,183:
| ObjectMove
| ObjectMove
| 5
| 5
|
|
|


Line 1,321: Line 1,189:
| SpriteSetUpsideDown
| SpriteSetUpsideDown
| 1
| 1
|
|
|


Line 1,328: Line 1,195:
| SpriteSetDownsideUp
| SpriteSetDownsideUp
| 1
| 1
|
|
|


Line 1,335: Line 1,201:
| SpriteSetFacingRight  
| SpriteSetFacingRight  
| 1
| 1
|
|
|


Line 1,342: Line 1,207:
| SpriteSetFacingLeft
| SpriteSetFacingLeft
| 1
| 1
|
|
|


Line 1,349: Line 1,213:
| SpriteFlipVertical
| SpriteFlipVertical
| 1
| 1
|
|
|


Line 1,356: Line 1,219:
| SpriteFlipHorizontal
| SpriteFlipHorizontal
| 1
| 1
|
|
|


Line 1,363: Line 1,225:
| SpriteSetPriority
| SpriteSetPriority
| 2
| 2
|
| Allowed values: 0..3 << 4
| Allowed values: 0..3 << 4


Line 1,370: Line 1,231:
| SpriteSetPalette
| SpriteSetPalette
| 2
| 2
|
| Allowed values: 0..7 << 1
| Allowed values: 0..7 << 1


Line 1,377: Line 1,237:
| MarkOrigin
| MarkOrigin
| 1
| 1
|
|
|


Line 1,384: Line 1,243:
| MarkOriginAsync
| MarkOriginAsync
| 1
| 1
|
|
|


Line 1,391: Line 1,249:
| JumpAndSetOriginWithDelay
| JumpAndSetOriginWithDelay
| 6
| 6
|
|
|


Line 1,398: Line 1,255:
| JumpAndSetOriginAsync
| JumpAndSetOriginAsync
| 4
| 4
|
|
|


Line 1,405: Line 1,261:
| SetOriginAndEraseDelay
| SetOriginAndEraseDelay
| 4
| 4
|
|
|


Line 1,412: Line 1,267:
| Delay
| Delay
| 3
| 3
|
|
|


Line 1,419: Line 1,273:
| JumpIfMapCollisionAbove
| JumpIfMapCollisionAbove
| 3
| 3
|
|
|


Line 1,426: Line 1,279:
| JumpIfMapCollisionBelow
| JumpIfMapCollisionBelow
| 3
| 3
|
|
|


Line 1,433: Line 1,285:
| JumpIfMapCollisionLeft
| JumpIfMapCollisionLeft
| 3
| 3
|
|
|


Line 1,440: Line 1,291:
| JumpIfMapCollisionRight
| JumpIfMapCollisionRight
| 3
| 3
|
|
|


Line 1,447: Line 1,297:
| GetCurrentBlockCollision
| GetCurrentBlockCollision
| 1
| 1
|
| ??
| ??


Line 1,454: Line 1,303:
| CheckMapCollisionAbove
| CheckMapCollisionAbove
| 3 or 9
| 3 or 9
|
|
|


Line 1,461: Line 1,309:
| CheckMapCollisionBelow
| CheckMapCollisionBelow
| 3 or 9
| 3 or 9
|
|
|


Line 1,468: Line 1,315:
| CheckMapCollisionLeft
| CheckMapCollisionLeft
| 3 or 9
| 3 or 9
|
|
|


Line 1,475: Line 1,321:
| CheckMapCollisionRight
| CheckMapCollisionRight
| 3 or 9
| 3 or 9
|
|
|


Line 1,482: Line 1,327:
|
|
| 5
| 5
|
| Change other object script ??
| Change other object script ??


Line 1,489: Line 1,333:
|
|
| 6
| 6
|
|
|


|-
|-
|CD
|CD
|
|
|
|
|
Line 1,501: Line 1,343:
|-
|-
|CE
|CE
|
|
|
|
|
Line 1,508: Line 1,349:
|-
|-
|CF
|CF
|
|
|
|
|
Line 1,515: Line 1,355:
|-
|-
|D0
|D0
|
|
|
|
|
Line 1,522: Line 1,361:
|-
|-
|D1
|D1
|
|
|
|
|
Line 1,531: Line 1,369:
| TriggerOnSight( u8 SideRange, u8 FrontRange, u8 Direction, u16 JumpAddress )
| TriggerOnSight( u8 SideRange, u8 FrontRange, u8 Direction, u16 JumpAddress )
| 6
| 6
|
|
|


Line 1,538: Line 1,375:
| RangeCheckHorizontal
| RangeCheckHorizontal
| 9
| 9
|
|
|


Line 1,545: Line 1,381:
| RangeCheckVertical
| RangeCheckVertical
| 9
| 9
|
|
|


|-
|-
|D5
|D5
|
|
|
|
|
Line 1,559: Line 1,393:
| ProximityTrigger
| ProximityTrigger
| 4
| 4
|
|
|


Line 1,566: Line 1,399:
| DetermineNearestAxis
| DetermineNearestAxis
| 5
| 5
|
|
|


Line 1,573: Line 1,405:
|
|
| 4
| 4
|
|
|


Line 1,580: Line 1,411:
| LoadFightingStats
| LoadFightingStats
| 2
| 2
|
| Load pointer to index in enemy table
| Load pointer to index in enemy table


Line 1,589: Line 1,419:
| HandlerRegisterOnWall( u16 HandlerAddress )
| HandlerRegisterOnWall( u16 HandlerAddress )
| 3
| 3
|
| Set Wall Hit Handler
| Set Wall Hit Handler


|-
|-
|DB
|DB
|
|
|
|
|
Line 1,601: Line 1,429:
|-
|-
|DC
|DC
|
| ScreenScroll( u16 ScrollX, u16 ScrollY, u8 Token )
| 6
| 6
|
|
|


Line 1,610: Line 1,437:
|
|
| 8
| 8
|
|
|


|-
|-
|DE
|DE
|
| ScreenReturnScroll( u8 Token )
| 2
| 2
|
|
|


Line 1,624: Line 1,449:
| WaitOn097C_0810
| WaitOn097C_0810
| 4
| 4
|
| Wait For ([097C] & 0810) == 0, Then Jump
| Wait For ([097C] & 0810) == 0, Then Jump


|-
|-
|E0
|E0
|
|
|
|
|
Line 1,636: Line 1,459:
|-
|-
|E1
|E1
|
|
|
|
|
Line 1,643: Line 1,465:
|-
|-
|E2
|E2
|
|
|
|
|
Line 1,650: Line 1,471:
|-
|-
|E3
|E3
|
|
|
|
|
Line 1,659: Line 1,479:
|
|
| 1
| 1
|
|
|


|-
|-
|E5
|E5
|
|
|
|
|
Line 1,673: Line 1,491:
| ObjectCloneDepInsertAfterSP
| ObjectCloneDepInsertAfterSP
| 4
| 4
|
| Like A1, but additionally makes new object depend on the old one, which mainly matters for mass deletion with command EB.
| Like A1, but additionally makes new object depend on the old one, which mainly matters for mass deletion with command EB.


Line 1,680: Line 1,497:
| ObjectCloneDepInsertAfterSFP
| ObjectCloneDepInsertAfterSFP
| 6
| 6
|
| Like A2, but additionally makes new object depend on the old one.
| Like A2, but additionally makes new object depend on the old one.


Line 1,687: Line 1,503:
| ObjectCloneDepInsertAfterSRFP
| ObjectCloneDepInsertAfterSRFP
| 10
| 10
|
| Like A4, but additionally makes new object depend on the old one.
| Like A4, but additionally makes new object depend on the old one.


Line 1,694: Line 1,509:
| ObjectCloneDepInsertAfterSAFP
| ObjectCloneDepInsertAfterSAFP
| 10
| 10
|
| Like A6, but additionally makes new object depend on the old one.
| Like A6, but additionally makes new object depend on the old one.


Line 1,701: Line 1,515:
| ObjectCloneDepInsertBeforeSP
| ObjectCloneDepInsertBeforeSP
| 4
| 4
|
| Like 9A, but additionally makes new object depend on the old one.
| Like 9A, but additionally makes new object depend on the old one.


Line 1,708: Line 1,521:
| DeleteAllDependingObjects
| DeleteAllDependingObjects
| 1
| 1
|
| Delete all depending objects, but only if 'this' has no parent
| Delete all depending objects, but only if 'this' has no parent


|-
|-
|EC
|EC
|
|
|
|
|
Line 1,722: Line 1,533:
| ObjectMoveRelative( u16 AnimationID, s16 X, s16 Y)
| ObjectMoveRelative( u16 AnimationID, s16 X, s16 Y)
| 6
| 6
|
|
|


Line 1,729: Line 1,539:
| ObjectMoveWaitRelative( u8 )
| ObjectMoveWaitRelative( u8 )
| 2
| 2
|
|
|


|-
|-
|EF
|EF
|
|
|
|
|

Revision as of 12:05, 18 May 2019

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 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 PlayerPortByEnemy 1 Used by Guardner to port Ark out of towers. Uses byte #15 of the extended sprite definition, see Enemy Induced Warps.
16 SetBonepinWarp( u16, u8, u16, u16 ) 8 The bonepin warp location is stored in memory at address 7E0608 (8 bytes, right after the deathwarp location)
17 SeagullTransport( u8 to, u16 src_x, u16 src_y ) 6 Includes automatic port to map 5, flight scene and port to the destination map, see Seagull Transport.
18 RideShip( u8 route, u8 direction, u16 src_x, u16 src_y ) 7 Includes automatic port to map 2, ship scene and port to destination map, see Automatic Ship Routes
19 RespawnBonePinLocationSet( u16 MapID, u8 Direction, u16 X, u16 Y, u16 MapID, u8 Direction, u16 X, u16 Y ) 15 Sets the Death- and Bonepin warp location (7E0600 and 7E0608 respectively).
1A DialogSwitchChoice( u8 layout, u16 choices_ptr ) 4 choices_ptr refers to a table with jump addresses. The text for the choices needs to be created beforehand by a normal text command.

Known layouts are:

Layout Choices
00 2
01
02
03
04
08 3
09 4
0A 2
0B
1B PrintRelative( u16 Address ) 3
1C PrintAbsolute( u24 Address ) 4
1D u16 3
1E u8, u16 4 calls 0x1D
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 TriggerSet( u16 addr ) 3 Trigger is executed when Ark talks to an object. When addr is 0 it is deleted
22 SwitchRange( u8 first, u8 last, ... ) 3 + 2*(last+1-first) Choice is determined by object data byte $26. One 2-byte jump address for each possible choice is directly included in the command.
23 TriggerNearPlayer( u16 addr ) 3 Turns NPC towards player and jumps to addr.
24 TriggerNearPlayer( u8, u16 addr ) 4 Turns NPC towards player and jumps to addr.
25 Rand 1
26 RandomMoveInArea( u8 left, u8 top, u8 right, u8 bottom ) 5
27 RandomMoveInArea( u8 animation, u8 ???, u8 left, u8 top, u8 right, u8 bottom ) 7 not used by the game
28 2 Set 0x7F2018 to value
29 PadButtonsEnable( u16 buttons ) 3
2A PadButtonsDisable( u16 buttons ) 3
2B PadCheckAllButtonsPressed2 5
2C PadCheckNoButtonPressed2 5
2D PadCheckButtonPressed 8
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 WaitMusicLoaded 1
34 APUWriteByte_F5( u8 Byte ) 2 Writes one byte to 0x2140 (APUI00) followed by a write with 0xF5
35 APUWriteByte_F6( u8 Byte ) 2 Writes one byte to 0x2140 (APUI00) followed by a write with 0xF6
36 SoundEffectPlayOnce 2
37 SoundEffectPlay 2
38 SoundEffect? 3
39 SpriteGotoPositionX 4 This command expects to be followed by "0x8E, 0x3B, asm(BRA -11)" because once it reaches the position it is hardcoded to jump 6 bytes ahead.
3A SpriteGotoPositionY 4 This command expects to be followed by "0x8E, 0x3B, asm(BRA -11)" because once it reaches the position it is hardcoded to jump 6 bytes ahead.
3B ObjectSetSolid 1
3C ObjectSetHollow 1
3D BlockSetSolid( u8 rel_or_abs, u8 x, u8 y ) 4 if rel_or_abs is 00, the coordinate is relative to the current object, for 01 it is absolute.
3E BlockSetHollow( u8 rel_or_abs, u8 x, u8 y ) 4 if rel_or_abs is 00, the coordinate is relative to the current object, for 01 it is absolute.
3F BlockSetCollision( u8 value, u8 x, u8 y ) 4 if (value & 80) is clear, the coordinate is relative to the current object, else it is absolute.
40 DungeonBlockSetHollow( u8 rel_or_abs, u8 x, u8 y ) 4 if rel_or_abs is 00, the coordinate is relative to the current object, for 01 it is absolute.
41 BlockCheck( u16 block, u16 addr ) 5 Compares 9 least significant bits of block with the block actually under object. If they match, jump to addr.
42 BlockCheckRelative( u8 dx, u8 dy, u16 block, u16 addr ) 7 Compares 9 least significant bits of block with the block relative to object. If they match, jump to addr.
43 BlockSetAbsolute( u8 x, u8 y, u16 block ) 5
44 BlockSetRelative( u8 dx, u8 dy, u16 block ) 5
45 BlockSet 1 Changes the block under object. block = object[7F201A]
46 MapCopyRect( u16 SizeX (Blocks), u16 SizeY (Pixels), u16 SrcX(Blocks), u16 SrcY(Blocks), u16 DstX(Blocks), u16 DstY(Blocks), u8 Unknown ) 8
47 ObjectDeleteIfEventFlags 1+2*x
48 ObjectDeleteIfEventFlag( u16 flag ) 3
49 ObjectDeleteIfMapID( u16 map ) 3
4A 6
4B u8, u16, (u16) 4 or 6
4C TownGrowthCheck( u8 id, u16 minimum, u16 addr ) 6 Jump to addr if growth rate id is at least the specified minimum.
4D TownGrowthUpdate( u8 id, u16 amount ) 4 (id & C0) specifies the update mode:
mode description
00 overwrite
40 subtract
80 add
4E u16, u16 5
4F u16, u16 5
50 u16, u8 4
51
52
53
54 ItemAdd( u8 item, u16 addr ) 4 Jump to addr if the item can't be carried because the slot or inventory is full.
55 ItemDel( u8 item ) 2
56 ItemCheckEmptySlot( u8 id, u16 addr ) 4 Jump to addr if the item can't be carried because the slot or inventory is full.
57 ItemCheckOwned( u8 id, u16 addr ) 4 Jump to addr if Ark has the item in his inventory.
58 ItemCheckEquipped( u8 id, u16 addr ) 4 Jump to addr if Ark has the item equipped.
59
5A PaletteLoad( u8 src_bank, u16 src_addr, u8 dest_color_index, u8 count ) 6
5B DecompressToMemory( u24 src, u16 dest ) 6
5C MoneyAdd( u24 amount ) 4 amount is BCD
5D MoneyTake( u24 amount, u16 addr ) 6 amount is BCD. Jump to addr if Ark has not enough money.
5E MoneyCheck( u24 amount, u8 mode, u16 addr ) 7 amount is BCD. The result of the comparison is interpreted according to mode:
mode & C0 action
00 jump if money == amount
40 jump if money < amount
80 jump if money > amount
C0 jump if money != amount
5F SwitchOnDirection( u16 DownJump, u16 UpJump, u16 LeftJump, u16 RightJump ) 9
60 ItemAddPlayMusic( u8 ItemID, u16 Delay, u8 MusicID ) 5
61 CheckDirectionEx( u8 direction, u8 a, u8 b, u8 c, u16 jump ) 7 Jump if current directon matches. Diagonal movement is acknowledged if it's primarily in the specified direction. direction can be 0-3:
direction
00 down
01 up
02 left
03 right

The values a, b and c correspond to skew directions and are used with object[7F2014] ???

62 SetInvulnerable( u8 frames ) 2
63 3
64
65 HandlerRegisterOnDamage( u16 HandlerAddress, u24 ReturnAddress ) 6
66 ReturnFromDamageHandler 1
67 1
68
69 1
6A u8, u8 3
6B PrintRelative2 3
6C PrintAbsolute2 4
6D
6E SceneUpdate 1
6F 1
70 Follow( u16 ptrObject, u16 ptrAnimations ) 5 Animations is a table of 3x4 animation id's, that specify what animation to use for every possible (diagonal) movement.
71 Check???( u16, u16, u16 jump ) 7 Jumps if the check is successful
72 u16, u8 4
73 5 Wait for unknown condition and then jump
74 SetMagicHandler( u8 magic_id, u16 handler ) 4 Registers a handler that is executed when the specific magic is used. If handler & 0x8000 is set, it refers to a script address, else it is a flag that will be set.
object[7F2024] = magic_id
object[7F2022] = handler
75 SetConditionalTalkHandler( u16 flag, u16 handler ) 5 custom handler must be >= 0x8000, values below are predefined handlers, but only 0000 is currently used and prints a line of dots.
object[7F2028] = flag
object[7F2026] = handler
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 AnimationSetSpriteFlagsAndResetElevationLevel( u8 SpriteFlags ) 2
81 AnimationSetB( u8 SpriteFlags ) 2
82 AnimationSetC( u8 SpriteFlags, u8 ) 3
83 SpriteSetFlagsAndElevationLevel( u8 SpriteFlags, u8 EleveationLevel ) 3
84 4
85 AnimationSetD 3 calls 80
86 AnimationSetE( u8, u8 ) 3 calls 81
87 ObjectMove( u8, u8, u8 ) 4 calls 82
88 4 calls 83
89 5 calls 84
8A 2
8B 3 calls 8A
8C 2
8D 3 calls 8C
8E AnimationWait 1
8F AnimationWait2 1
90 1 wait for loop
91 1
92 1 wait for loop
93 1
94 1 wait for loop
95 u16, u8, u16, u16, u16, u8 9
96 u16, u16, u16, u16, u16 11
97 u16, u8, u16, ? 6
98 u16, u8, ? 11 Object related
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 1
A9
AA 4
AB
AC
AD
AE
AF 2
B0 2 or 5
B1 ObjectMoveHorizontal 3
B2 ObjectMoveVertical 3
B3 ObjectMove 5
B4 SpriteSetUpsideDown 1
B5 SpriteSetDownsideUp 1
B6 SpriteSetFacingRight 1
B7 SpriteSetFacingLeft 1
B8 SpriteFlipVertical 1
B9 SpriteFlipHorizontal 1
BA SpriteSetPriority 2 Allowed values: 0..3 << 4
BB SpriteSetPalette 2 Allowed values: 0..7 << 1
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 RangeCheckHorizontal 9
D4 RangeCheckVertical 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 ScreenScroll( u16 ScrollX, u16 ScrollY, u8 Token ) 6
DD 8
DE ScreenReturnScroll( u8 Token ) 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 ObjectMoveRelative( u16 AnimationID, s16 X, s16 Y) 6
EE ObjectMoveWaitRelative( u8 ) 2
EF