@ 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 TestBit 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 CheckLocalFlagByOffset 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 _0807E30C .2byte 0x0419 .endm .macro HasRupees amount:req .2byte 0x081a .2byte \amount .endm .macro _0807E3BC s:req .2byte 0x081b .2byte \s .endm .macro _0807E3E8 .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 _0807E48C s:req .2byte 0x081f .2byte \s .endm .macro _0807E4CC w:req .2byte 0x0c20 .4byte \w .endm .macro _0807E4EC w:req .2byte 0x0c21 .4byte \w .endm .macro _0807E514 w:req .2byte 0x0c22 .4byte \w .endm .macro CheckPlayerFlags w:req .2byte 0x0c23 .4byte \w .endm .macro _0807E564 .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 _0807E5F8 w:req .2byte 0x0c28 .4byte \w .endm .macro _0807E610 w:req .2byte 0x0c29 .4byte \w .endm .macro SetLocalFlag s:req .2byte 0x082a .2byte \s .endm .macro SetLocalFlagByOffset 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 WaitForSomething w:req .2byte 0x0c32 .4byte \w .endm .macro WaitForSomething2 w:req .2byte 0x0c33 .4byte \w .endm .macro WaitPlayerAction8 .2byte 0x0434 .endm .macro WaitForPlayerAction0x17 .2byte 0x0435 .endm .macro WaitFor_1 .2byte 0x0436 .endm .macro WaitFor_2 .2byte 0x0437 .endm .macro _0807E778 s:req .2byte 0x0838 .2byte \s .endm .macro _0807E788 w:req .2byte 0x0c39 .4byte \w .endm .macro _0807E79C .2byte 0x043a .endm .macro Nop2 s:req .2byte 0x083b .2byte \s .endm .macro DoFade4 .2byte 0x043c .endm .macro DoFade5 .2byte 0x043d .endm .macro DoFade6 .2byte 0x043e .endm .macro DoFade7 .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 _0807E864 .2byte 0x0443 .endm .macro _0807E878 .2byte 0x0444 .endm .macro _0807E888 .2byte 0x0445 .endm .macro SetPlayerAction w:req .2byte 0x0c46 .4byte \w .endm .macro StartPlayerScript script:req .2byte 0x0c47 .4byte \script .endm .macro _0807E8D4 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 _0807E908 s:req .2byte 0x084d .2byte \s .endm .macro SetIntVariable value:req .2byte 0x0c4e .4byte \value .endm .macro _0807E924 .2byte 0x044f .endm .macro _0807E930 s:req .2byte 0x0850 .2byte \s .endm .macro _0807E944 .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 _0807EA94 .2byte 0x0459 .endm .macro TextboxNoOverlapFollow s:req .2byte 0x085a .2byte \s .endm .macro TextboxNoOverlap s:req .2byte 0x085b .2byte \s .endm .macro TextboxNoOverlapFollowPos a:req, b:req .2byte 0x0c5c .2byte \a .2byte \b .endm .macro TextboxNoOverlapFollowPos_1 s:req .2byte 0x085c .2byte \s .endm .macro TextboxNoOverlapFollowTable labels:vararg RecursiveOpcode 0x5d 1 \labels RecursiveArgs .2byte \labels .endm .macro TextboxNoOverlapVar .2byte 0x045e .endm .macro _0807EB28 s:req .2byte 0x085f .2byte \s .endm .macro _0807EB38 .2byte 0x0460 .endm .macro _0807EB44 s:req .2byte 0x0861 .2byte \s .endm .macro _0807EB4C a:req, b:req .2byte 0x0c62 .2byte \a .2byte \b .endm .macro _0807EB74 .2byte 0x0463 .endm .macro _0807EB8C .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 SetEntity0x20 value:req .2byte 0x0c68 .4byte \value .endm .macro SetEntityPositionRelative xOffset:req, yOffset:req .2byte 0x0c69 .2byte \xOffset .2byte \yOffset .endm .macro SetEntityPosition x:req, y:req .2byte 0x0c6a .2byte \x .2byte \y .endm .macro MoveEntityToPlayer .2byte 0x046b .endm .macro Nop3 .2byte 0x046c .endm .macro _0807EC1C s:req .2byte 0x086d .2byte \s .endm .macro _0807EC64 s:req .2byte 0x086e .2byte \s .endm .macro _0807EC94 s:req .2byte 0x086f .2byte \s .endm .macro _0807ECC4 s:req .2byte 0x0870 .2byte \s .endm .macro _0807ECF4 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 _0807F034 s:req .2byte 0x0882 .2byte \s .endm .macro _0807F050 s:req .2byte 0x0883 .2byte \s .endm .macro GetInventoryValue s:req .2byte 0x0884 .2byte \s .endm .macro _0807F078 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