tmc/asm/macros/scripts.inc

744 lines
9.5 KiB
PHP

@ All the macro functions for scripts
@ helper macros
.macro RecursiveOpcodeN count:req, opcode:req, size:req, arg:req, args:vararg
.ifnb \args
RecursiveOpcodeN \count + 1 \opcode \size \args
.else
.2byte 0x400 * (((\count) * \size) + 1) + \opcode
.endif
.endm
.macro RecursiveOpcode opcode:req, size:req, args:vararg
RecursiveOpcodeN 1 \opcode \size \args
.endm
.macro RecursiveArgs size:req, arg:req, args:vararg
\size \arg
.ifnb \args
RecursiveArgs \size \args
.endif
.endm
@ script macros
.macro SCRIPT_START name
.globl \name
.section .text
\name:
.endm
.macro SCRIPT_END
.2byte 0xffff
.endm
.macro Nop
.2byte 0x0400
.endm
.macro BeginBlock
.2byte 0x0401
.endm
.macro EndBlock
.2byte 0x0402
.endm
.macro Jump label:req
.2byte 0x0803
1: .2byte \label - 1b
.endm
.macro JumpIf label:req
.2byte 0x0804
1: .2byte \label - 1b
.endm
.macro JumpIfNot label:req
.2byte 0x0805
1: .2byte \label - 1b
.endm
.macro JumpTableLabel temp:req, label:req, labels:vararg
.2byte \label - \temp
.ifnb \labels
JumpTableLabel \temp - 2 \labels
.endif
.endm
.macro JumpTable labels:vararg
RecursiveOpcode 0x6 1 \labels
1:
JumpTableLabel 1b \labels
.endm
.macro JumpAbsolute label:req
.2byte 0x0c07
.4byte \label
.endm
.macro JumpAbsoluteIf label:req
.2byte 0x0c08
.4byte \label
.endm
.macro JumpAbsoluteIfNot label:req
.2byte 0x0c09
.4byte \label
.endm
.macro JumpAbsoluteTable labels:vararg
RecursiveOpcode 0xa 2 \labels
RecursiveArgs .4byte \labels
.endm
.macro Call function:req
.2byte 0x0c0b
.4byte \function
.endm
@this shouldn't be use without an argument
.macro CallWithArg function:req, argument
.ifnb \argument
.2byte 0x140c
.4byte \function
.4byte \argument
.else
.2byte 0x0c0c
.4byte \function
.endif
.endm
.macro LoadRoomEntityList entityDataList:req
.2byte 0x0c0d
.4byte \entityDataList
.endm
.macro CheckSyncFlagAndClear bitmask:req
.2byte 0x0c0e
.4byte \bitmask
.endm
.macro CheckInventory1 s:req
.2byte 0x080f
.2byte \s
.endm
.macro CheckInventory2 s:req
.2byte 0x0810
.2byte \s
.endm
.macro HasRoomItemForSale
.2byte 0x0411
.endm
.macro CheckLocalFlag s:req
.2byte 0x0812
.2byte \s
.endm
.macro CheckLocalFlagByBank a:req, b:req
.2byte 0x0c13
.2byte \a
.2byte \b
.endm
.macro CheckGlobalFlag s:req
.2byte 0x0814
.2byte \s
.endm
.macro CheckRoomFlag s:req
.2byte 0x0815
.2byte \s
.endm
.macro CheckPlayerInRegion x:req, y:req, dimension:req
.2byte 0x1016
.2byte \x
.2byte \y
.2byte \dimension
.endm
.macro CheckPlayerInRegion2 dimension:req
.2byte 0x0817
.2byte \dimension
.endm
.macro CheckEntityInteractType
.2byte 0x0418
.endm
.macro FacePlayerAndCheckDist
.2byte 0x0419
.endm
.macro HasRupees amount:req
.2byte 0x081a
.2byte \amount
.endm
.macro HasShells s:req
.2byte 0x081b
.2byte \s
.endm
.macro CheckTextboxResult
.2byte 0x041c
.endm
.macro CheckKinstoneFused s:req
.2byte 0x081d
.2byte \s
.endm
.macro BuyItem item, b
.2byte 0x0c1e
.ifnb \item
.2byte \item
.2byte \b
.else
.4byte 0
.endif
.endm
.macro CheckBottleContaining s:req
.2byte 0x081f
.2byte \s
.endm
.macro VariableBitSet w:req
.2byte 0x0c20
.4byte \w
.endm
.macro VariableOnlyBitSet w:req
.2byte 0x0c21
.4byte \w
.endm
.macro VariableEqual w:req
.2byte 0x0c22
.4byte \w
.endm
.macro CheckPlayerFlags w:req
.2byte 0x0c23
.4byte \w
.endm
.macro CheckPlayerMinish
.2byte 0x0424
.endm
.macro EntityHasHeight
.2byte 0x0425
.endm
.macro ComparePlayerAction s:req
.2byte 0x0826
.2byte \s
.endm
.macro ComparePlayerAnimationState s:req
.2byte 0x0827
.2byte \s
.endm
.macro SetSyncFlag w:req
.2byte 0x0c28
.4byte \w
.endm
.macro ClearSyncFlag w:req
.2byte 0x0c29
.4byte \w
.endm
.macro SetLocalFlag s:req
.2byte 0x082a
.2byte \s
.endm
.macro SetLocalFlagByBank a:req, b:req
.2byte 0x0c2b
.2byte \a
.2byte \b
.endm
.macro ClearLocalFlag s:req
.2byte 0x082c
.2byte \s
.endm
.macro SetGlobalFlag s:req
.2byte 0x082d
.2byte \s
.endm
.macro ClearGlobalFlag s:req
.2byte 0x082e
.2byte \s
.endm
.macro SetRoomFlag s:req
.2byte 0x082f
.2byte \s
.endm
.macro ClearRoomFlag s:req
.2byte 0x0830
.2byte \s
.endm
.macro Wait frames:req
.2byte 0x0831
.2byte \frames
.endm
.macro WaitForSyncFlag w:req
.2byte 0x0c32
.4byte \w
.endm
.macro WaitForSyncFlagAndClear w:req
.2byte 0x0c33
.4byte \w
.endm
.macro WaitPlayerGetItem
.2byte 0x0434
.endm
.macro WaitForPlayerEnterRoom
.2byte 0x0435
.endm
.macro WaitFor_1
.2byte 0x0436
.endm
.macro WaitForFadeFinish
.2byte 0x0437
.endm
.macro SetFadeTime s:req
.2byte 0x0838
.2byte \s
.endm
.macro SetFadeMask w:req
.2byte 0x0c39
.4byte \w
.endm
.macro FadeInvert
.2byte 0x043a
.endm
.macro Nop2 s:req
.2byte 0x083b
.2byte \s
.endm
.macro SetFade4
.2byte 0x043c
.endm
.macro SetFade5
.2byte 0x043d
.endm
.macro SetFade6
.2byte 0x043e
.endm
.macro SetFade7
.2byte 0x043f
.endm
.macro _0807E800 w:req
.2byte 0x0c40
.4byte \w
.endm
.macro _0807E80C w:req
.2byte 0x0c41
.4byte \w
.endm
.macro _0807E858 s:req
.2byte 0x0842
.2byte \s
.endm
.macro _0807E858_0
.2byte 0x0442
.endm
.macro SetPlayerIdle
.2byte 0x0443
.endm
.macro EnablePlayerControl
.2byte 0x0444
.endm
.macro DisablePlayerControl
.2byte 0x0445
.endm
.macro SetPlayerAction w:req
.2byte 0x0c46
.4byte \w
.endm
.macro StartPlayerScript script:req
.2byte 0x0c47
.4byte \script
.endm
.macro SetPlayerAnimation s:req
.2byte 0x0848
.2byte \s
.endm
.macro _0807E8E4_0
.2byte 0x0449
.endm
.macro _0807E8E4_1
.2byte 0x044a
.endm
.macro _0807E8E4_2
.2byte 0x044b
.endm
.macro _0807E8E4_3
.2byte 0x044c
.endm
.macro SetAction s:req
.2byte 0x084d
.2byte \s
.endm
.macro SetIntVariable value:req
.2byte 0x0c4e
.4byte \value
.endm
.macro SetVariableToFrame
.2byte 0x044f
.endm
.macro SetAnimation s:req
.2byte 0x0850
.2byte \s
.endm
.macro TriggerInteract
.2byte 0x0451
.endm
.macro _0807E974 s:req
.2byte 0x0852
.2byte \s
.endm
.macro _0807E9D4
.2byte 0x0453
.endm
.macro _0807E9DC
.2byte 0x0454
.endm
.macro _0807E9E4 s:req
.2byte 0x0855
.2byte \s
.endm
.macro _0807E9F0
.2byte 0x0456
.endm
.macro _0807EA4C
.2byte 0x0457
.endm
.macro _0807EA88 s:req
.2byte 0x0858
.2byte \s
.endm
.macro WaitUntilTextboxCloses
.2byte 0x0459
.endm
.macro MessageFromTarget s:req
.2byte 0x085a
.2byte \s
.endm
.macro MessageNoOverlap a:req, b
.2byte 0x085b
.ifnb \b
.byte \b
.byte \a
.else
.2byte \a
.endif
.endm
.macro MessageFromTargetPos a:req, b:req
.2byte 0x0c5c
.2byte \a
.2byte \b
.endm
.macro MessageFromTargetPos_1 s:req
.2byte 0x085c
.2byte \s
.endm
.macro MessageFromTargetTable labels:vararg
RecursiveOpcode 0x5d 1 \labels
RecursiveArgs .2byte \labels
.endm
.macro MessageNoOverlapVar
.2byte 0x045e
.endm
.macro EzloMessage s:req
.2byte 0x085f
.2byte \s
.endm
.macro _0807EB38
.2byte 0x0460
.endm
.macro SetAnimationState s:req
.2byte 0x0861
.2byte \s
.endm
.macro _0807EB4C a:req, b:req
.2byte 0x0c62
.2byte \a
.2byte \b
.endm
.macro FacePlayer
.2byte 0x0463
.endm
.macro FaceAwayFromPlayer
.2byte 0x0464
.endm
.macro SetEntityDirection direction:req
.2byte 0x0865
.2byte \direction
.endm
.macro SetEntityDirectionWithAnimationState direction:req
.2byte 0x0866
.2byte \direction
.endm
.macro SetEntitySpeed speed:req
.2byte 0x0867
.2byte \speed
.endm
.macro SetEntityVelocity value:req
.2byte 0x0c68
.4byte \value
.endm
.macro SetEntityPositionRelative xOffset:req, yOffset:req
.2byte 0x0c69
.2byte \xOffset
.2byte \yOffset
.endm
.macro OffsetEntityPosition x:req, y:req
.2byte 0x0c6a
.2byte \x
.2byte \y
.endm
.macro MoveEntityToPlayer
.2byte 0x046b
.endm
.macro Nop3
.2byte 0x046c
.endm
.macro WalkForward s:req
.2byte 0x086d
.2byte \s
.endm
.macro WalkNorth s:req
.2byte 0x086e
.2byte \s
.endm
.macro WalkEast s:req
.2byte 0x086f
.2byte \s
.endm
.macro WalkSouth s:req
.2byte 0x0870
.2byte \s
.endm
.macro WalkWest s:req
.2byte 0x0871
.2byte \s
.endm
.macro _0807ED24 a:req, b:req, c:req
.2byte 0x1072
.2byte \a
.2byte \b
.2byte \c
.endm
.macro _0807EDD4 a:req, b:req
.2byte 0x0c73
.2byte \a
.2byte \b
.endm
.macro _0807EE04 a:req, b:req
.2byte 0x0c74
.2byte \a
.2byte \b
.endm
.macro _0807EE30
.2byte 0x0475
.endm
.macro _0807EEB4
.2byte 0x0476
.endm
.macro _0807EEF4 a:req, b:req
.2byte 0x0c77
.2byte \a
.2byte \b
.endm
.macro _0807EF3C a:req, b:req
.2byte 0x0c78
.2byte \a
.2byte \b
.endm
.macro DoPostScriptAction action:req
.2byte 0x0879
.2byte \action
.endm
.macro DoPostScriptAction2 action:req
.2byte 0x087a
.2byte \action
.endm
.macro PlaySound s:req
.2byte 0x087b
.2byte \s
.endm
.macro PlayBgm s
.2byte 0x087c
.ifnb \s
.2byte \s
.else
.2byte -1
.endif
.endm
.macro SoundReq w:req
.2byte 0x0c7d
.4byte \w
.endm
.macro StopBgm
.2byte 0x047e
.endm
.macro ModRupees amount:req
.2byte 0x087f
.2byte \amount
.endm
.macro ModHealth amount:req
.2byte 0x0880
.2byte \amount
.endm
@ this command doesn't actually take an argument
.macro IncreaseMaxHealth
.2byte 0x0881
.2byte 8
.endm
.macro GivePlayerItem s:req
.2byte 0x0882
.2byte \s
.endm
.macro GiveKinstone s:req
.2byte 0x0883
.2byte \s
.endm
.macro GetInventoryValue s:req
.2byte 0x0884
.2byte \s
.endm
.macro SetInventoryValue a:req, b:req
.2byte 0x0c85
.2byte \a
.2byte \b
.endm
.macro _0807F088 s:req
.2byte 0x0886
.2byte \s
.endm
.macro CameraTargetEntity
.2byte 0x0487
.endm
.macro CameraTargetPlayer
.2byte 0x0488
.endm
.macro _0807F0B4 s:req
.2byte 0x0889
.2byte \s
.endm
.macro _0807F0C8 a:req, b:req
.2byte 0x0c8a
.2byte \a
.2byte \b
.endm