# Assembly Macros .set NULL, 0 .set FALSE, 0 .set TRUE, 1 .set K0BASE, 0x80000000 .set K1BASE, 0xA0000000 .set K2BASE, 0xC0000000 .set SCREEN_WIDTH, 320 .set SCREEN_HEIGHT, 240 .macro glabel label .global \label \label: .endm # F3D vertex .macro vertex x, y, z, u, v, r=0xFF, g=0xFF, b=0xFF, a=0xFF .hword \x, \y, \z, 0, \u, \v .byte \r, \g, \b, \a .endm # Beginning of trajectory .macro trajectory_init .set TRAJ_ID, 0 .endm # Entry in trajectory .macro trajectory_pos x, y, z .hword TRAJ_ID, \x, \y, \z .set TRAJ_ID, TRAJ_ID + 1 .endm # Skips an ID (used for CCM) .macro trajectory_skip .set TRAJ_ID, TRAJ_ID + 1 .endm # End of trajectory .macro trajectory_end .hword -1 .endm .macro macro_object preset, yaw, x, y, z, bparam=0 .hword ((\yaw * 0x10 / 45) << 9) | (\preset + 0x1F), \x, \y, \z, \bparam .endm # General special object macro .macro special_object preset, posX, posY, posZ, rotY=-1, param=-1 .if (\param != -1) && (\rotY != -1) # 11 byte .hword \preset, \posX, \posY, \posZ, \rotY, \param .endif .if (\param == -1) && (\rotY != -1) # 10 byte .hword \preset, \posX, \posY, \posZ, \rotY .endif .if (\param == -1) && (\rotY == -1) # 8 byte .hword \preset, \posX, \posY, \posZ .endif .endm # Actor include .macro actor name .include "actors/\name\()/model.s" .include "actors/\name\()/collision.s" binid .endm # Actor include (no binid), needed for mario bin (TODO: Better solution?) .macro rawactor name .include "actors/\name\()/model.s" .include "actors/\name\()/collision.s" .endm # Actor geo include .macro actorgeo name .include "actors/\name\()/geo.s" .endm .macro initbinid .set BINID, 0 .endm .macro binid .dword BINID .set BINID, BINID + 1 .endm .macro leveldata name .section .seg07, "a" .align 4 .incbin "mio0/\name\()/leveldata.mio0" .align 4 .endm .macro levelscript name .section .level, "a" .include "levels/\name\()/script.s" .endm .macro levelgeo name .align 4 .include "levels/\name\()/geo.s" .align 4 .endm .macro dialog_entry w1, w2, w3, w4 .word \w1 .byte (\w2 >> 24), 0x00 .hword (\w2 & 0xFFFF), (\w3 >> 16), 0x0000 .long \w4 .endm