mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2025-10-30 08:01:01 +00:00
Second iteration of Lua IO
Started working on third
This commit is contained in:
parent
0aa1e04f93
commit
1c29a2b47f
16 changed files with 1940 additions and 299 deletions
|
|
@ -386,8 +386,8 @@ struct MarioState
|
|||
|
||||
// Variables for a spline curve animation (used for the flight path in the grand star cutscene)
|
||||
/*????*/ Vec4s* splineKeyframe;
|
||||
/*????*/ float splineKeyframeFraction;
|
||||
/*????*/ int splineState;
|
||||
/*????*/ f32 splineKeyframeFraction;
|
||||
/*????*/ s32 splineState;
|
||||
|
||||
/*????*/ Vec3f nonInstantWarpPos;
|
||||
/*????*/ struct Character* character;
|
||||
|
|
|
|||
|
|
@ -1,7 +1,66 @@
|
|||
-----------
|
||||
-- co-op --
|
||||
-----------
|
||||
|
||||
MAX_PLAYERS = 16
|
||||
|
||||
_gMarioStatesIndices = {}
|
||||
do
|
||||
_MarioStateMeta = {
|
||||
__index = function (t,k)
|
||||
return get_mario_state_field(_gMarioStatesIndices[t], k)
|
||||
end,
|
||||
__newindex = function (t,k,v)
|
||||
set_mario_state_field(_gMarioStatesIndices[t], k, v)
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
gMarioStates = {}
|
||||
for i=0,(MAX_PLAYERS-1) do
|
||||
gMarioStates[i] = setmetatable({}, _MarioStateMeta)
|
||||
_gMarioStatesIndices[gMarioStates[i]] = i
|
||||
end
|
||||
|
||||
_Vec3sMeta = {
|
||||
__index = function (t,k)
|
||||
return get_vec3s_field(t['_pointer'], k);
|
||||
end,
|
||||
__newindex = function (t,k,v)
|
||||
set_vec3s_field(t['_pointer'], k, v);
|
||||
end
|
||||
}
|
||||
|
||||
_Vec3fMeta = {
|
||||
__index = function (t,k)
|
||||
return get_vec3f_field(t['_pointer'], k);
|
||||
end,
|
||||
__newindex = function (t,k,v)
|
||||
set_vec3f_field(t['_pointer'], k, v);
|
||||
end
|
||||
}
|
||||
|
||||
_CObject = {
|
||||
__index = function (t,k)
|
||||
return _get_field(t['_lot'], t['_pointer'], k);
|
||||
end,
|
||||
__newindex = function (t,k,v)
|
||||
_set_field(t['_lot'], t['_pointer'], k, v);
|
||||
end
|
||||
}
|
||||
|
||||
---------
|
||||
-- lua --
|
||||
---------
|
||||
|
||||
HOOK_UPDATE = 0
|
||||
HOOK_MARIO_UPDATE = 1
|
||||
HOOK_MAX = 2
|
||||
|
||||
------------
|
||||
-- layers --
|
||||
------------
|
||||
|
||||
LAYER_FORCE = 0
|
||||
LAYER_OPAQUE = 1
|
||||
LAYER_OPAQUE_DECAL = 2
|
||||
|
|
@ -11,6 +70,40 @@ LAYER_TRANSPARENT = 5
|
|||
LAYER_TRANSPARENT_DECAL = 6
|
||||
LAYER_TRANSPARENT_INTER = 7
|
||||
|
||||
--------------
|
||||
-- controls --
|
||||
--------------
|
||||
|
||||
CONT_A = 0x8000
|
||||
CONT_B = 0x4000
|
||||
CONT_G = 0x2000
|
||||
CONT_START = 0x1000
|
||||
CONT_UP = 0x0800
|
||||
CONT_DOWN = 0x0400
|
||||
CONT_LEFT = 0x0200
|
||||
CONT_RIGHT = 0x0100
|
||||
CONT_L = 0x0020
|
||||
CONT_R = 0x0010
|
||||
CONT_E = 0x0008
|
||||
CONT_D = 0x0004
|
||||
CONT_C = 0x0002
|
||||
CONT_F = 0x0001
|
||||
|
||||
A_BUTTON = CONT_A
|
||||
B_BUTTON = CONT_B
|
||||
L_TRIG = CONT_L
|
||||
R_TRIG = CONT_R
|
||||
Z_TRIG = CONT_G
|
||||
START_BUTTON = CONT_START
|
||||
U_JPAD = CONT_UP
|
||||
L_JPAD = CONT_LEFT
|
||||
R_JPAD = CONT_RIGHT
|
||||
D_JPAD = CONT_DOWN
|
||||
U_CBUTTONS = CONT_E
|
||||
L_CBUTTONS = CONT_C
|
||||
R_CBUTTONS = CONT_F
|
||||
D_CBUTTONS = CONT_D
|
||||
|
||||
INPUT_NONZERO_ANALOG = 0x0001
|
||||
INPUT_A_PRESSED = 0x0002
|
||||
INPUT_OFF_FLOOR = 0x0004
|
||||
|
|
@ -28,6 +121,10 @@ INPUT_B_PRESSED = 0x2000
|
|||
INPUT_Z_DOWN = 0x4000
|
||||
INPUT_Z_PRESSED = 0x8000
|
||||
|
||||
-------------
|
||||
-- physics --
|
||||
-------------
|
||||
|
||||
GROUND_STEP_LEFT_GROUND = 0
|
||||
GROUND_STEP_NONE = 1
|
||||
GROUND_STEP_HIT_WALL = 2
|
||||
|
|
@ -49,6 +146,10 @@ WATER_STEP_HIT_CEILING = 2
|
|||
WATER_STEP_CANCELLED = 3
|
||||
WATER_STEP_HIT_WALL = 4
|
||||
|
||||
---------------
|
||||
-- particles --
|
||||
---------------
|
||||
|
||||
PARTICLE_DUST = (1 << 0)
|
||||
PARTICLE_VERTICAL_STAR = (1 << 1)
|
||||
PARTICLE_2 = (1 << 2)
|
||||
|
|
@ -73,6 +174,10 @@ PARTICLE_19 = (1 << 19)
|
|||
MODEL_STATE_NOISE_ALPHA = 0x180
|
||||
MODEL_STATE_METAL = 0x200
|
||||
|
||||
----------
|
||||
-- caps --
|
||||
----------
|
||||
|
||||
MARIO_NORMAL_CAP = 0x00000001
|
||||
MARIO_VANISH_CAP = 0x00000002
|
||||
MARIO_METAL_CAP = 0x00000004
|
||||
|
|
@ -94,6 +199,10 @@ MARIO_UNKNOWN_30 = 0x40000000
|
|||
MARIO_UNKNOWN_31 = 0x80000000
|
||||
MARIO_CAP_FLAGS = 0x0000001F
|
||||
|
||||
-------------
|
||||
-- actions --
|
||||
-------------
|
||||
|
||||
ACT_ID_MASK = 0x000001FF
|
||||
ACT_GROUP_MASK = 0x000001C0
|
||||
ACT_GROUP_STATIONARY = (0 << 6)
|
||||
|
|
@ -358,3 +467,727 @@ ACT_HEAVY_THROW = 0x80000589
|
|||
ACT_PICKING_UP_BOWSER = 0x00000390
|
||||
ACT_HOLDING_BOWSER = 0x00000391
|
||||
ACT_RELEASING_BOWSER = 0x00000392
|
||||
|
||||
|
||||
------------
|
||||
-- sounds --
|
||||
------------
|
||||
|
||||
SOUNDARGS_MASK_BANK = 0xF0000000
|
||||
SOUNDARGS_MASK_SOUNDID = 0x00FF0000
|
||||
SOUNDARGS_MASK_PRIORITY = 0x0000FF00
|
||||
SOUNDARGS_MASK_STATUS = 0x0000000F
|
||||
|
||||
SOUNDARGS_SHIFT_BANK = 28
|
||||
SOUNDARGS_SHIFT_SOUNDID = 16
|
||||
SOUNDARGS_SHIFT_PRIORITY = 8
|
||||
|
||||
SOUND_STATUS_STOPPED = 0
|
||||
SOUND_STATUS_STARTING = 1
|
||||
SOUND_STATUS_PLAYING = 2
|
||||
|
||||
function SOUND_ARG_LOAD(bank, playFlags, soundID, priority, flags2)
|
||||
return ((bank << 28) | (playFlags << 24) | (soundID << 16) | (priority << 8) | (flags2 << 4) | 1)
|
||||
end
|
||||
|
||||
SOUND_LO_BITFLAG_UNK1 = 0x10
|
||||
SOUND_NO_ECHO = 0x20
|
||||
SOUND_LO_BITFLAG_UNK8 = 0x80
|
||||
|
||||
|
||||
SOUND_NO_VOLUME_LOSS = 0x1000000
|
||||
SOUND_VIBRATO = 0x2000000
|
||||
SOUND_NO_PRIORITY_LOSS = 0x4000000
|
||||
SOUND_NO_FREQUENCY_LOSS = 0x8000000
|
||||
|
||||
NO_SOUND = 0
|
||||
|
||||
SOUND_TERRAIN_DEFAULT = 0
|
||||
SOUND_TERRAIN_GRASS = 1
|
||||
SOUND_TERRAIN_WATER = 2
|
||||
SOUND_TERRAIN_STONE = 3
|
||||
SOUND_TERRAIN_SPOOKY = 4
|
||||
SOUND_TERRAIN_SNOW = 5
|
||||
SOUND_TERRAIN_ICE = 6
|
||||
SOUND_TERRAIN_SAND = 7
|
||||
|
||||
SOUND_ACTION_TERRAIN_JUMP = SOUND_ARG_LOAD(0, 4, 0x00, 0x80, 8)
|
||||
SOUND_ACTION_TERRAIN_LANDING = SOUND_ARG_LOAD(0, 4, 0x08, 0x80, 8)
|
||||
SOUND_ACTION_TERRAIN_STEP = SOUND_ARG_LOAD(0, 6, 0x10, 0x80, 8)
|
||||
SOUND_ACTION_TERRAIN_BODY_HIT_GROUND = SOUND_ARG_LOAD(0, 4, 0x18, 0x80, 8)
|
||||
SOUND_ACTION_TERRAIN_STEP_TIPTOE = SOUND_ARG_LOAD(0, 6, 0x20, 0x80, 8)
|
||||
SOUND_ACTION_TERRAIN_STUCK_IN_GROUND = SOUND_ARG_LOAD(0, 4, 0x48, 0x80, 8)
|
||||
SOUND_ACTION_TERRAIN_HEAVY_LANDING = SOUND_ARG_LOAD(0, 4, 0x60, 0x80, 8)
|
||||
|
||||
SOUND_ACTION_METAL_JUMP = SOUND_ARG_LOAD(0, 4, 0x28, 0x90, 8)
|
||||
SOUND_ACTION_METAL_LANDING = SOUND_ARG_LOAD(0, 4, 0x29, 0x90, 8)
|
||||
SOUND_ACTION_METAL_STEP = SOUND_ARG_LOAD(0, 4, 0x2A, 0x90, 8)
|
||||
SOUND_ACTION_METAL_HEAVY_LANDING = SOUND_ARG_LOAD(0, 4, 0x2B, 0x90, 8)
|
||||
SOUND_ACTION_CLAP_HANDS_COLD = SOUND_ARG_LOAD(0, 6, 0x2C, 0x00, 8)
|
||||
SOUND_ACTION_HANGING_STEP = SOUND_ARG_LOAD(0, 4, 0x2D, 0xA0, 8)
|
||||
SOUND_ACTION_QUICKSAND_STEP = SOUND_ARG_LOAD(0, 4, 0x2E, 0x00, 8)
|
||||
SOUND_ACTION_METAL_STEP_TIPTOE = SOUND_ARG_LOAD(0, 4, 0x2F, 0x90, 8)
|
||||
SOUND_ACTION_UNKNOWN430 = SOUND_ARG_LOAD(0, 4, 0x30, 0xC0, 8)
|
||||
SOUND_ACTION_UNKNOWN431 = SOUND_ARG_LOAD(0, 4, 0x31, 0x60, 8)
|
||||
SOUND_ACTION_UNKNOWN432 = SOUND_ARG_LOAD(0, 4, 0x32, 0x80, 8)
|
||||
SOUND_ACTION_SWIM = SOUND_ARG_LOAD(0, 4, 0x33, 0x80, 8)
|
||||
SOUND_ACTION_UNKNOWN434 = SOUND_ARG_LOAD(0, 4, 0x34, 0x80, 8)
|
||||
SOUND_ACTION_THROW = SOUND_ARG_LOAD(0, 4, 0x35, 0x80, 8)
|
||||
SOUND_ACTION_KEY_SWISH = SOUND_ARG_LOAD(0, 4, 0x36, 0x80, 8)
|
||||
SOUND_ACTION_SPIN = SOUND_ARG_LOAD(0, 4, 0x37, 0x80, 8)
|
||||
SOUND_ACTION_TWIRL = SOUND_ARG_LOAD(0, 4, 0x38, 0x80, 8)
|
||||
SOUND_ACTION_CLIMB_UP_TREE = SOUND_ARG_LOAD(0, 4, 0x3A, 0x80, 8)
|
||||
SOUND_ACTION_CLIMB_DOWN_TREE = 0x003B
|
||||
SOUND_ACTION_UNK3C = 0x003C
|
||||
SOUND_ACTION_UNKNOWN43D = SOUND_ARG_LOAD(0, 4, 0x3D, 0x80, 8)
|
||||
SOUND_ACTION_UNKNOWN43E = SOUND_ARG_LOAD(0, 4, 0x3E, 0x80, 8)
|
||||
SOUND_ACTION_PAT_BACK = SOUND_ARG_LOAD(0, 4, 0x3F, 0x80, 8)
|
||||
SOUND_ACTION_BRUSH_HAIR = SOUND_ARG_LOAD(0, 4, 0x40, 0x80, 8)
|
||||
SOUND_ACTION_CLIMB_UP_POLE = SOUND_ARG_LOAD(0, 4, 0x41, 0x80, 8)
|
||||
SOUND_ACTION_METAL_BONK = SOUND_ARG_LOAD(0, 4, 0x42, 0x80, 8)
|
||||
SOUND_ACTION_UNSTUCK_FROM_GROUND = SOUND_ARG_LOAD(0, 4, 0x43, 0x80, 8)
|
||||
SOUND_ACTION_HIT = SOUND_ARG_LOAD(0, 4, 0x44, 0xC0, 8)
|
||||
SOUND_ACTION_HIT_2 = SOUND_ARG_LOAD(0, 4, 0x44, 0xB0, 8)
|
||||
SOUND_ACTION_HIT_3 = SOUND_ARG_LOAD(0, 4, 0x44, 0xA0, 8)
|
||||
SOUND_ACTION_BONK = SOUND_ARG_LOAD(0, 4, 0x45, 0xA0, 8)
|
||||
SOUND_ACTION_SHRINK_INTO_BBH = SOUND_ARG_LOAD(0, 4, 0x46, 0xA0, 8)
|
||||
SOUND_ACTION_SWIM_FAST = SOUND_ARG_LOAD(0, 4, 0x47, 0xA0, 8)
|
||||
SOUND_ACTION_METAL_JUMP_WATER = SOUND_ARG_LOAD(0, 4, 0x50, 0x90, 8)
|
||||
SOUND_ACTION_METAL_LAND_WATER = SOUND_ARG_LOAD(0, 4, 0x51, 0x90, 8)
|
||||
SOUND_ACTION_METAL_STEP_WATER = SOUND_ARG_LOAD(0, 4, 0x52, 0x90, 8)
|
||||
SOUND_ACTION_UNK53 = 0x0053
|
||||
SOUND_ACTION_UNK54 = 0x0054
|
||||
SOUND_ACTION_UNK55 = 0x0055
|
||||
SOUND_ACTION_FLYING_FAST = SOUND_ARG_LOAD(0, 4, 0x56, 0x80, 8)
|
||||
SOUND_ACTION_TELEPORT = SOUND_ARG_LOAD(0, 4, 0x57, 0xC0, 8)
|
||||
SOUND_ACTION_UNKNOWN458 = SOUND_ARG_LOAD(0, 4, 0x58, 0xA0, 8)
|
||||
SOUND_ACTION_BOUNCE_OFF_OBJECT = SOUND_ARG_LOAD(0, 4, 0x59, 0xB0, 8)
|
||||
SOUND_ACTION_SIDE_FLIP_UNK = SOUND_ARG_LOAD(0, 4, 0x5A, 0x80, 8)
|
||||
SOUND_ACTION_READ_SIGN = SOUND_ARG_LOAD(0, 4, 0x5B, 0xFF, 8)
|
||||
SOUND_ACTION_UNKNOWN45C = SOUND_ARG_LOAD(0, 4, 0x5C, 0x80, 8)
|
||||
SOUND_ACTION_UNK5D = 0x005D
|
||||
SOUND_ACTION_INTRO_UNK45E = SOUND_ARG_LOAD(0, 4, 0x5E, 0x80, 8)
|
||||
SOUND_ACTION_INTRO_UNK45F = SOUND_ARG_LOAD(0, 4, 0x5F, 0x80, 8)
|
||||
|
||||
SOUND_MOVING_TERRAIN_SLIDE = SOUND_ARG_LOAD(1, 4, 0x00, 0x00, 0)
|
||||
SOUND_MOVING_TERRAIN_RIDING_SHELL = SOUND_ARG_LOAD(1, 4, 0x20, 0x00, 0)
|
||||
|
||||
SOUND_MOVING_LAVA_BURN = SOUND_ARG_LOAD(1, 4, 0x10, 0x00, 0)
|
||||
SOUND_MOVING_SLIDE_DOWN_POLE = SOUND_ARG_LOAD(1, 4, 0x11, 0x00, 0)
|
||||
SOUND_MOVING_SLIDE_DOWN_TREE = SOUND_ARG_LOAD(1, 4, 0x12, 0x80, 0)
|
||||
SOUND_MOVING_QUICKSAND_DEATH = SOUND_ARG_LOAD(1, 4, 0x14, 0x00, 0)
|
||||
SOUND_MOVING_SHOCKED = SOUND_ARG_LOAD(1, 4, 0x16, 0x00, 0)
|
||||
SOUND_MOVING_FLYING = SOUND_ARG_LOAD(1, 4, 0x17, 0x00, 0)
|
||||
SOUND_MOVING_ALMOST_DROWNING = SOUND_ARG_LOAD(1, 0xC, 0x18, 0x00, 0)
|
||||
SOUND_MOVING_AIM_CANNON = SOUND_ARG_LOAD(1, 0xD, 0x19, 0x20, 0)
|
||||
SOUND_MOVING_UNK1A = 0x101A
|
||||
SOUND_MOVING_RIDING_SHELL_LAVA = SOUND_ARG_LOAD(1, 4, 0x28, 0x00, 0)
|
||||
|
||||
SOUND_MARIO_YAH_WAH_HOO = SOUND_ARG_LOAD(2, 4, 0x00, 0x80, 8)
|
||||
SOUND_MARIO_HOOHOO = SOUND_ARG_LOAD(2, 4, 0x03, 0x80, 8)
|
||||
SOUND_MARIO_YAHOO = SOUND_ARG_LOAD(2, 4, 0x04, 0x80, 8)
|
||||
SOUND_MARIO_UH = SOUND_ARG_LOAD(2, 4, 0x05, 0x80, 8)
|
||||
SOUND_MARIO_HRMM = SOUND_ARG_LOAD(2, 4, 0x06, 0x80, 8)
|
||||
SOUND_MARIO_WAH2 = SOUND_ARG_LOAD(2, 4, 0x07, 0x80, 8)
|
||||
SOUND_MARIO_WHOA = SOUND_ARG_LOAD(2, 4, 0x08, 0xC0, 8)
|
||||
SOUND_MARIO_EEUH = SOUND_ARG_LOAD(2, 4, 0x09, 0x80, 8)
|
||||
SOUND_MARIO_ATTACKED = SOUND_ARG_LOAD(2, 4, 0x0A, 0xFF, 8)
|
||||
SOUND_MARIO_OOOF = SOUND_ARG_LOAD(2, 4, 0x0B, 0x80, 8)
|
||||
SOUND_MARIO_OOOF2 = SOUND_ARG_LOAD(2, 4, 0x0B, 0xD0, 8)
|
||||
SOUND_MARIO_HERE_WE_GO = SOUND_ARG_LOAD(2, 4, 0x0C, 0x80, 8)
|
||||
SOUND_MARIO_YAWNING = SOUND_ARG_LOAD(2, 4, 0x0D, 0x80, 8)
|
||||
SOUND_MARIO_SNORING1 = SOUND_ARG_LOAD(2, 4, 0x0E, 0x00, 8)
|
||||
SOUND_MARIO_SNORING2 = SOUND_ARG_LOAD(2, 4, 0x0F, 0x00, 8)
|
||||
SOUND_MARIO_WAAAOOOW = SOUND_ARG_LOAD(2, 4, 0x10, 0xC0, 8)
|
||||
SOUND_MARIO_HAHA = SOUND_ARG_LOAD(2, 4, 0x11, 0x80, 8)
|
||||
SOUND_MARIO_HAHA_2 = SOUND_ARG_LOAD(2, 4, 0x11, 0xF0, 8)
|
||||
SOUND_MARIO_UH2 = SOUND_ARG_LOAD(2, 4, 0x13, 0xD0, 8)
|
||||
SOUND_MARIO_UH2_2 = SOUND_ARG_LOAD(2, 4, 0x13, 0x80, 8)
|
||||
SOUND_MARIO_ON_FIRE = SOUND_ARG_LOAD(2, 4, 0x14, 0xA0, 8)
|
||||
SOUND_MARIO_DYING = SOUND_ARG_LOAD(2, 4, 0x15, 0xFF, 8)
|
||||
SOUND_MARIO_PANTING_COLD = SOUND_ARG_LOAD(2, 4, 0x16, 0x80, 8)
|
||||
|
||||
SOUND_MARIO_PANTING = SOUND_ARG_LOAD(2, 4, 0x18, 0x80, 8)
|
||||
|
||||
SOUND_MARIO_COUGHING1 = SOUND_ARG_LOAD(2, 4, 0x1B, 0x80, 8)
|
||||
SOUND_MARIO_COUGHING2 = SOUND_ARG_LOAD(2, 4, 0x1C, 0x80, 8)
|
||||
SOUND_MARIO_COUGHING3 = SOUND_ARG_LOAD(2, 4, 0x1D, 0x80, 8)
|
||||
SOUND_MARIO_PUNCH_YAH = SOUND_ARG_LOAD(2, 4, 0x1E, 0x80, 8)
|
||||
SOUND_MARIO_PUNCH_HOO = SOUND_ARG_LOAD(2, 4, 0x1F, 0x80, 8)
|
||||
SOUND_MARIO_MAMA_MIA = SOUND_ARG_LOAD(2, 4, 0x20, 0x80, 8)
|
||||
SOUND_MARIO_OKEY_DOKEY = 0x2021
|
||||
SOUND_MARIO_GROUND_POUND_WAH = SOUND_ARG_LOAD(2, 4, 0x22, 0x80, 8)
|
||||
SOUND_MARIO_DROWNING = SOUND_ARG_LOAD(2, 4, 0x23, 0xF0, 8)
|
||||
SOUND_MARIO_PUNCH_WAH = SOUND_ARG_LOAD(2, 4, 0x24, 0x80, 8)
|
||||
|
||||
SOUND_PEACH_DEAR_MARIO = SOUND_ARG_LOAD(2, 4, 0x28, 0xFF, 8)
|
||||
|
||||
SOUND_MARIO_YAHOO_WAHA_YIPPEE = SOUND_ARG_LOAD(2, 4, 0x2B, 0x80, 8)
|
||||
|
||||
SOUND_MARIO_DOH = SOUND_ARG_LOAD(2, 4, 0x30, 0x80, 8)
|
||||
SOUND_MARIO_GAME_OVER = SOUND_ARG_LOAD(2, 4, 0x31, 0xFF, 8)
|
||||
SOUND_MARIO_HELLO = SOUND_ARG_LOAD(2, 4, 0x32, 0xFF, 8)
|
||||
SOUND_MARIO_PRESS_START_TO_PLAY = SOUND_ARG_LOAD(2, 4, 0x33, 0xFF, 0xA)
|
||||
SOUND_MARIO_TWIRL_BOUNCE = SOUND_ARG_LOAD(2, 4, 0x34, 0x80, 8)
|
||||
SOUND_MARIO_SNORING3 = SOUND_ARG_LOAD(2, 4, 0x35, 0x00, 8)
|
||||
SOUND_MARIO_SO_LONGA_BOWSER = SOUND_ARG_LOAD(2, 4, 0x36, 0x80, 8)
|
||||
SOUND_MARIO_IMA_TIRED = SOUND_ARG_LOAD(2, 4, 0x37, 0x80, 8)
|
||||
|
||||
SOUND_PEACH_MARIO = SOUND_ARG_LOAD(2, 4, 0x38, 0xFF, 8)
|
||||
SOUND_PEACH_POWER_OF_THE_STARS = SOUND_ARG_LOAD(2, 4, 0x39, 0xFF, 8)
|
||||
SOUND_PEACH_THANKS_TO_YOU = SOUND_ARG_LOAD(2, 4, 0x3A, 0xFF, 8)
|
||||
SOUND_PEACH_THANK_YOU_MARIO = SOUND_ARG_LOAD(2, 4, 0x3B, 0xFF, 8)
|
||||
SOUND_PEACH_SOMETHING_SPECIAL = SOUND_ARG_LOAD(2, 4, 0x3C, 0xFF, 8)
|
||||
SOUND_PEACH_BAKE_A_CAKE = SOUND_ARG_LOAD(2, 4, 0x3D, 0xFF, 8)
|
||||
SOUND_PEACH_FOR_MARIO = SOUND_ARG_LOAD(2, 4, 0x3E, 0xFF, 8)
|
||||
SOUND_PEACH_MARIO2 = SOUND_ARG_LOAD(2, 4, 0x3F, 0xFF, 8)
|
||||
|
||||
SOUND_GENERAL_ACTIVATE_CAP_SWITCH = SOUND_ARG_LOAD(3, 0, 0x00, 0x80, 8)
|
||||
SOUND_GENERAL_FLAME_OUT = SOUND_ARG_LOAD(3, 0, 0x03, 0x80, 8)
|
||||
SOUND_GENERAL_OPEN_WOOD_DOOR = SOUND_ARG_LOAD(3, 0, 0x04, 0xC0, 8)
|
||||
SOUND_GENERAL_CLOSE_WOOD_DOOR = SOUND_ARG_LOAD(3, 0, 0x05, 0xC0, 8)
|
||||
SOUND_GENERAL_OPEN_IRON_DOOR = SOUND_ARG_LOAD(3, 0, 0x06, 0xC0, 8)
|
||||
SOUND_GENERAL_CLOSE_IRON_DOOR = SOUND_ARG_LOAD(3, 0, 0x07, 0xC0, 8)
|
||||
SOUND_GENERAL_BUBBLES = 0x3008
|
||||
SOUND_GENERAL_MOVING_WATER = SOUND_ARG_LOAD(3, 0, 0x09, 0x00, 8)
|
||||
SOUND_GENERAL_SWISH_WATER = SOUND_ARG_LOAD(3, 0, 0x0A, 0x00, 8)
|
||||
SOUND_GENERAL_QUIET_BUBBLE = SOUND_ARG_LOAD(3, 0, 0x0B, 0x00, 8)
|
||||
SOUND_GENERAL_VOLCANO_EXPLOSION = SOUND_ARG_LOAD(3, 0, 0x0C, 0x80, 8)
|
||||
SOUND_GENERAL_QUIET_BUBBLE2 = SOUND_ARG_LOAD(3, 0, 0x0D, 0x00, 8)
|
||||
SOUND_GENERAL_CASTLE_TRAP_OPEN = SOUND_ARG_LOAD(3, 0, 0x0E, 0x80, 8)
|
||||
SOUND_GENERAL_WALL_EXPLOSION = SOUND_ARG_LOAD(3, 0, 0x0F, 0x00, 8)
|
||||
SOUND_GENERAL_COIN = SOUND_ARG_LOAD(3, 8, 0x11, 0x80, 8)
|
||||
SOUND_GENERAL_COIN_WATER = SOUND_ARG_LOAD(3, 8, 0x12, 0x80, 8)
|
||||
SOUND_GENERAL_SHORT_STAR = SOUND_ARG_LOAD(3, 0, 0x16, 0x00, 9)
|
||||
SOUND_GENERAL_BIG_CLOCK = SOUND_ARG_LOAD(3, 0, 0x17, 0x00, 8)
|
||||
SOUND_GENERAL_LOUD_POUND = 0x3018
|
||||
SOUND_GENERAL_LOUD_POUND2 = 0x3019
|
||||
SOUND_GENERAL_SHORT_POUND1 = 0x301A
|
||||
SOUND_GENERAL_SHORT_POUND2 = 0x301B
|
||||
SOUND_GENERAL_SHORT_POUND3 = 0x301C
|
||||
SOUND_GENERAL_SHORT_POUND4 = 0x301D
|
||||
SOUND_GENERAL_SHORT_POUND5 = 0x301E
|
||||
SOUND_GENERAL_SHORT_POUND6 = 0x301F
|
||||
SOUND_GENERAL_OPEN_CHEST = SOUND_ARG_LOAD(3, 1, 0x20, 0x80, 8)
|
||||
SOUND_GENERAL_CLAM_SHELL1 = SOUND_ARG_LOAD(3, 1, 0x22, 0x80, 8)
|
||||
SOUND_GENERAL_BOX_LANDING = SOUND_ARG_LOAD(3, 0, 0x24, 0x00, 8)
|
||||
SOUND_GENERAL_BOX_LANDING_2 = SOUND_ARG_LOAD(3, 2, 0x24, 0x00, 8)
|
||||
SOUND_GENERAL_UNKNOWN1 = SOUND_ARG_LOAD(3, 0, 0x25, 0x00, 8)
|
||||
SOUND_GENERAL_UNKNOWN1_2 = SOUND_ARG_LOAD(3, 2, 0x25, 0x00, 8)
|
||||
SOUND_GENERAL_CLAM_SHELL2 = SOUND_ARG_LOAD(3, 0, 0x26, 0x40, 8)
|
||||
SOUND_GENERAL_CLAM_SHELL3 = SOUND_ARG_LOAD(3, 0, 0x27, 0x40, 8)
|
||||
SOUND_GENERAL_PAINTING_EJECT = SOUND_ARG_LOAD(3, 9, 0x28, 0x00, 8)
|
||||
SOUND_GENERAL_LEVEL_SELECT_CHANGE = SOUND_ARG_LOAD(3, 0, 0x2B, 0x00, 8)
|
||||
SOUND_GENERAL_PLATFORM = SOUND_ARG_LOAD(3, 0, 0x2D, 0x80, 8)
|
||||
SOUND_GENERAL_DONUT_PLATFORM_EXPLOSION = SOUND_ARG_LOAD(3, 0, 0x2E, 0x20, 8)
|
||||
SOUND_GENERAL_BOWSER_BOMB_EXPLOSION = SOUND_ARG_LOAD(3, 1, 0x2F, 0x00, 8)
|
||||
SOUND_GENERAL_COIN_SPURT = SOUND_ARG_LOAD(3, 0, 0x30, 0x00, 8)
|
||||
SOUND_GENERAL_COIN_SPURT_2 = SOUND_ARG_LOAD(3, 8, 0x30, 0x00, 8)
|
||||
SOUND_GENERAL_COIN_SPURT_EU = SOUND_ARG_LOAD(3, 8, 0x30, 0x20, 8)
|
||||
|
||||
SOUND_GENERAL_EXPLOSION6 = 0x3031
|
||||
SOUND_GENERAL_UNK32 = 0x3032
|
||||
SOUND_GENERAL_BOAT_TILT1 = SOUND_ARG_LOAD(3, 0, 0x34, 0x40, 8)
|
||||
SOUND_GENERAL_BOAT_TILT2 = SOUND_ARG_LOAD(3, 0, 0x35, 0x40, 8)
|
||||
SOUND_GENERAL_COIN_DROP = SOUND_ARG_LOAD(3, 0, 0x36, 0x40, 8)
|
||||
SOUND_GENERAL_UNKNOWN3_LOWPRIO = SOUND_ARG_LOAD(3, 0, 0x37, 0x00, 8)
|
||||
SOUND_GENERAL_UNKNOWN3 = SOUND_ARG_LOAD(3, 0, 0x37, 0x80, 8)
|
||||
SOUND_GENERAL_UNKNOWN3_2 = SOUND_ARG_LOAD(3, 8, 0x37, 0x80, 8)
|
||||
SOUND_GENERAL_PENDULUM_SWING = SOUND_ARG_LOAD(3, 0, 0x38, 0x00, 8)
|
||||
SOUND_GENERAL_CHAIN_CHOMP1 = SOUND_ARG_LOAD(3, 0, 0x39, 0x00, 8)
|
||||
SOUND_GENERAL_CHAIN_CHOMP2 = SOUND_ARG_LOAD(3, 0, 0x3A, 0x00, 8)
|
||||
SOUND_GENERAL_DOOR_TURN_KEY = SOUND_ARG_LOAD(3, 0, 0x3B, 0x00, 8)
|
||||
SOUND_GENERAL_MOVING_IN_SAND = SOUND_ARG_LOAD(3, 0, 0x3C, 0x00, 8)
|
||||
SOUND_GENERAL_UNKNOWN4_LOWPRIO = SOUND_ARG_LOAD(3, 0, 0x3D, 0x00, 8)
|
||||
SOUND_GENERAL_UNKNOWN4 = SOUND_ARG_LOAD(3, 0, 0x3D, 0x80, 8)
|
||||
SOUND_GENERAL_MOVING_PLATFORM_SWITCH = SOUND_ARG_LOAD(3, 0, 0x3E, 0x00, 8)
|
||||
SOUND_GENERAL_CAGE_OPEN = SOUND_ARG_LOAD(3, 0, 0x3F, 0xA0, 8)
|
||||
SOUND_GENERAL_QUIET_POUND1_LOWPRIO = SOUND_ARG_LOAD(3, 0, 0x40, 0x00, 8)
|
||||
SOUND_GENERAL_QUIET_POUND1 = SOUND_ARG_LOAD(3, 0, 0x40, 0x40, 8)
|
||||
SOUND_GENERAL_BREAK_BOX = SOUND_ARG_LOAD(3, 0, 0x41, 0xC0, 8)
|
||||
SOUND_GENERAL_DOOR_INSERT_KEY = SOUND_ARG_LOAD(3, 0, 0x42, 0x00, 8)
|
||||
SOUND_GENERAL_QUIET_POUND2 = SOUND_ARG_LOAD(3, 0, 0x43, 0x00, 8)
|
||||
SOUND_GENERAL_BIG_POUND = SOUND_ARG_LOAD(3, 0, 0x44, 0x00, 8)
|
||||
SOUND_GENERAL_UNK45 = SOUND_ARG_LOAD(3, 0, 0x45, 0x00, 8)
|
||||
SOUND_GENERAL_UNK46_LOWPRIO = SOUND_ARG_LOAD(3, 0, 0x46, 0x00, 8)
|
||||
SOUND_GENERAL_UNK46 = SOUND_ARG_LOAD(3, 0, 0x46, 0x80, 8)
|
||||
SOUND_GENERAL_CANNON_UP = SOUND_ARG_LOAD(3, 0, 0x47, 0x80, 8)
|
||||
SOUND_GENERAL_GRINDEL_ROLL = SOUND_ARG_LOAD(3, 0, 0x48, 0x00, 8)
|
||||
SOUND_GENERAL_EXPLOSION7 = 0x3049
|
||||
SOUND_GENERAL_SHAKE_COFFIN = 0x304A
|
||||
SOUND_GENERAL_RACE_GUN_SHOT = SOUND_ARG_LOAD(3, 1, 0x4D, 0x40, 8)
|
||||
SOUND_GENERAL_STAR_DOOR_OPEN = SOUND_ARG_LOAD(3, 0, 0x4E, 0xC0, 8)
|
||||
SOUND_GENERAL_STAR_DOOR_CLOSE = SOUND_ARG_LOAD(3, 0, 0x4F, 0xC0, 8)
|
||||
SOUND_GENERAL_POUND_ROCK = SOUND_ARG_LOAD(3, 0, 0x56, 0x00, 8)
|
||||
SOUND_GENERAL_STAR_APPEARS = SOUND_ARG_LOAD(3, 0, 0x57, 0xFF, 9)
|
||||
SOUND_GENERAL_COLLECT_1UP = SOUND_ARG_LOAD(3, 0, 0x58, 0xFF, 8)
|
||||
SOUND_GENERAL_BUTTON_PRESS_LOWPRIO = SOUND_ARG_LOAD(3, 0, 0x5A, 0x00, 8)
|
||||
SOUND_GENERAL_BUTTON_PRESS = SOUND_ARG_LOAD(3, 0, 0x5A, 0x40, 8)
|
||||
SOUND_GENERAL_BUTTON_PRESS_2_LOWPRIO = SOUND_ARG_LOAD(3, 1, 0x5A, 0x00, 8)
|
||||
SOUND_GENERAL_BUTTON_PRESS_2 = SOUND_ARG_LOAD(3, 1, 0x5A, 0x40, 8)
|
||||
SOUND_GENERAL_ELEVATOR_MOVE = SOUND_ARG_LOAD(3, 0, 0x5B, 0x00, 8)
|
||||
SOUND_GENERAL_ELEVATOR_MOVE_2 = SOUND_ARG_LOAD(3, 1, 0x5B, 0x00, 8)
|
||||
SOUND_GENERAL_SWISH_AIR = SOUND_ARG_LOAD(3, 0, 0x5C, 0x00, 8)
|
||||
SOUND_GENERAL_SWISH_AIR_2 = SOUND_ARG_LOAD(3, 1, 0x5C, 0x00, 8)
|
||||
SOUND_GENERAL_HAUNTED_CHAIR = SOUND_ARG_LOAD(3, 0, 0x5D, 0x00, 8)
|
||||
SOUND_GENERAL_SOFT_LANDING = SOUND_ARG_LOAD(3, 0, 0x5E, 0x00, 8)
|
||||
SOUND_GENERAL_HAUNTED_CHAIR_MOVE = SOUND_ARG_LOAD(3, 0, 0x5F, 0x00, 8)
|
||||
SOUND_GENERAL_BOWSER_PLATFORM = SOUND_ARG_LOAD(3, 0, 0x62, 0x80, 8)
|
||||
SOUND_GENERAL_BOWSER_PLATFORM_2 = SOUND_ARG_LOAD(3, 1, 0x62, 0x80, 8)
|
||||
SOUND_GENERAL_HEART_SPIN = SOUND_ARG_LOAD(3, 0, 0x64, 0xC0, 8)
|
||||
SOUND_GENERAL_POUND_WOOD_POST = SOUND_ARG_LOAD(3, 0, 0x65, 0xC0, 8)
|
||||
SOUND_GENERAL_WATER_LEVEL_TRIG = SOUND_ARG_LOAD(3, 0, 0x66, 0x80, 8)
|
||||
SOUND_GENERAL_SWITCH_DOOR_OPEN = SOUND_ARG_LOAD(3, 0, 0x67, 0xA0, 8)
|
||||
SOUND_GENERAL_RED_COIN = SOUND_ARG_LOAD(3, 0, 0x68, 0x90, 8)
|
||||
SOUND_GENERAL_BIRDS_FLY_AWAY = SOUND_ARG_LOAD(3, 0, 0x69, 0x00, 8)
|
||||
SOUND_GENERAL_METAL_POUND = SOUND_ARG_LOAD(3, 0, 0x6B, 0x80, 8)
|
||||
SOUND_GENERAL_BOING1 = SOUND_ARG_LOAD(3, 0, 0x6C, 0x40, 8)
|
||||
SOUND_GENERAL_BOING2_LOWPRIO = SOUND_ARG_LOAD(3, 0, 0x6D, 0x20, 8)
|
||||
SOUND_GENERAL_BOING2 = SOUND_ARG_LOAD(3, 0, 0x6D, 0x40, 8)
|
||||
SOUND_GENERAL_YOSHI_WALK = SOUND_ARG_LOAD(3, 0, 0x6E, 0x20, 8)
|
||||
SOUND_GENERAL_ENEMY_ALERT1 = SOUND_ARG_LOAD(3, 0, 0x6F, 0x30, 8)
|
||||
SOUND_GENERAL_YOSHI_TALK = SOUND_ARG_LOAD(3, 0, 0x70, 0x30, 8)
|
||||
SOUND_GENERAL_SPLATTERING = SOUND_ARG_LOAD(3, 0, 0x71, 0x30, 8)
|
||||
SOUND_GENERAL_BOING3 = 0x3072
|
||||
SOUND_GENERAL_GRAND_STAR = SOUND_ARG_LOAD(3, 0, 0x73, 0x00, 8)
|
||||
SOUND_GENERAL_GRAND_STAR_JUMP = SOUND_ARG_LOAD(3, 0, 0x74, 0x00, 8)
|
||||
SOUND_GENERAL_BOAT_ROCK = SOUND_ARG_LOAD(3, 0, 0x75, 0x00, 8)
|
||||
SOUND_GENERAL_VANISH_SFX = SOUND_ARG_LOAD(3, 0, 0x76, 0x20, 8)
|
||||
|
||||
SOUND_ENV_WATERFALL1 = SOUND_ARG_LOAD(4, 0, 0x00, 0x00, 0)
|
||||
SOUND_ENV_WATERFALL2 = SOUND_ARG_LOAD(4, 0, 0x01, 0x00, 0)
|
||||
SOUND_ENV_ELEVATOR1 = SOUND_ARG_LOAD(4, 0, 0x02, 0x00, 0)
|
||||
SOUND_ENV_DRONING1 = SOUND_ARG_LOAD(4, 1, 0x03, 0x00, 0)
|
||||
SOUND_ENV_DRONING2 = SOUND_ARG_LOAD(4, 0, 0x04, 0x00, 0)
|
||||
SOUND_ENV_WIND1 = SOUND_ARG_LOAD(4, 0, 0x05, 0x00, 0)
|
||||
SOUND_ENV_MOVING_SAND_SNOW = 0x4006
|
||||
SOUND_ENV_UNK07 = 0x4007
|
||||
SOUND_ENV_ELEVATOR2 = SOUND_ARG_LOAD(4, 0, 0x08, 0x00, 0)
|
||||
SOUND_ENV_WATER = SOUND_ARG_LOAD(4, 0, 0x09, 0x00, 0)
|
||||
SOUND_ENV_UNKNOWN2 = SOUND_ARG_LOAD(4, 0, 0x0A, 0x00, 0)
|
||||
SOUND_ENV_BOAT_ROCKING1 = SOUND_ARG_LOAD(4, 0, 0x0B, 0x00, 0)
|
||||
SOUND_ENV_ELEVATOR3 = SOUND_ARG_LOAD(4, 0, 0x0C, 0x00, 0)
|
||||
SOUND_ENV_ELEVATOR4 = SOUND_ARG_LOAD(4, 0, 0x0D, 0x00, 0)
|
||||
SOUND_ENV_ELEVATOR4_2 = SOUND_ARG_LOAD(4, 1, 0x0D, 0x00, 0)
|
||||
SOUND_ENV_MOVINGSAND = SOUND_ARG_LOAD(4, 0, 0x0E, 0x00, 0)
|
||||
SOUND_ENV_MERRY_GO_ROUND_CREAKING = SOUND_ARG_LOAD(4, 0, 0x0F, 0x40, 0)
|
||||
SOUND_ENV_WIND2 = SOUND_ARG_LOAD(4, 0, 0x10, 0x80, 0)
|
||||
SOUND_ENV_UNK12 = 0x4012
|
||||
SOUND_ENV_SLIDING = SOUND_ARG_LOAD(4, 0, 0x13, 0x00, 0)
|
||||
SOUND_ENV_STAR = SOUND_ARG_LOAD(4, 0, 0x14, 0x00, 1)
|
||||
SOUND_ENV_UNKNOWN4 = SOUND_ARG_LOAD(4, 1, 0x15, 0x00, 0)
|
||||
SOUND_ENV_WATER_DRAIN = SOUND_ARG_LOAD(4, 1, 0x16, 0x00, 0)
|
||||
SOUND_ENV_METAL_BOX_PUSH = SOUND_ARG_LOAD(4, 0, 0x17, 0x80, 0)
|
||||
SOUND_ENV_SINK_QUICKSAND = SOUND_ARG_LOAD(4, 0, 0x18, 0x80, 0)
|
||||
|
||||
SOUND_OBJ_SUSHI_SHARK_WATER_SOUND = SOUND_ARG_LOAD(5, 0, 0x00, 0x80, 8)
|
||||
SOUND_OBJ_MRI_SHOOT = SOUND_ARG_LOAD(5, 0, 0x01, 0x00, 8)
|
||||
SOUND_OBJ_BABY_PENGUIN_WALK = SOUND_ARG_LOAD(5, 0, 0x02, 0x00, 8)
|
||||
SOUND_OBJ_BOWSER_WALK = SOUND_ARG_LOAD(5, 0, 0x03, 0x00, 8)
|
||||
SOUND_OBJ_BOWSER_TAIL_PICKUP = SOUND_ARG_LOAD(5, 0, 0x05, 0x00, 8)
|
||||
SOUND_OBJ_BOWSER_DEFEATED = SOUND_ARG_LOAD(5, 0, 0x06, 0x00, 8)
|
||||
SOUND_OBJ_BOWSER_SPINNING = SOUND_ARG_LOAD(5, 0, 0x07, 0x00, 8)
|
||||
SOUND_OBJ_BOWSER_INHALING = SOUND_ARG_LOAD(5, 0, 0x08, 0x00, 8)
|
||||
SOUND_OBJ_BIG_PENGUIN_WALK = SOUND_ARG_LOAD(5, 0, 0x09, 0x80, 8)
|
||||
SOUND_OBJ_BOO_BOUNCE_TOP = SOUND_ARG_LOAD(5, 0, 0x0A, 0x00, 8)
|
||||
SOUND_OBJ_BOO_LAUGH_SHORT = SOUND_ARG_LOAD(5, 0, 0x0B, 0x00, 8)
|
||||
SOUND_OBJ_THWOMP = SOUND_ARG_LOAD(5, 0, 0x0C, 0xA0, 8)
|
||||
SOUND_OBJ_CANNON1 = SOUND_ARG_LOAD(5, 0, 0x0D, 0xF0, 8)
|
||||
SOUND_OBJ_CANNON2 = SOUND_ARG_LOAD(5, 0, 0x0E, 0xF0, 8)
|
||||
SOUND_OBJ_CANNON3 = SOUND_ARG_LOAD(5, 0, 0x0F, 0xF0, 8)
|
||||
SOUND_OBJ_JUMP_WALK_WATER = 0x5012
|
||||
SOUND_OBJ_UNKNOWN2 = SOUND_ARG_LOAD(5, 0, 0x13, 0x00, 8)
|
||||
SOUND_OBJ_MRI_DEATH = SOUND_ARG_LOAD(5, 0, 0x14, 0x00, 8)
|
||||
SOUND_OBJ_POUNDING1 = SOUND_ARG_LOAD(5, 0, 0x15, 0x50, 8)
|
||||
SOUND_OBJ_POUNDING1_HIGHPRIO = SOUND_ARG_LOAD(5, 0, 0x15, 0x80, 8)
|
||||
SOUND_OBJ_WHOMP_LOWPRIO = SOUND_ARG_LOAD(5, 0, 0x16, 0x60, 8)
|
||||
SOUND_OBJ_KING_BOBOMB = SOUND_ARG_LOAD(5, 0, 0x16, 0x80, 8)
|
||||
SOUND_OBJ_BULLY_METAL = SOUND_ARG_LOAD(5, 0, 0x17, 0x80, 8)
|
||||
SOUND_OBJ_BULLY_EXPLODE = SOUND_ARG_LOAD(5, 0, 0x18, 0xA0, 8)
|
||||
SOUND_OBJ_BULLY_EXPLODE_2 = SOUND_ARG_LOAD(5, 1, 0x18, 0xA0, 8)
|
||||
SOUND_OBJ_POUNDING_CANNON = SOUND_ARG_LOAD(5, 0, 0x1A, 0x50, 8)
|
||||
SOUND_OBJ_BULLY_WALK = SOUND_ARG_LOAD(5, 0, 0x1B, 0x30, 8)
|
||||
SOUND_OBJ_UNKNOWN3 = SOUND_ARG_LOAD(5, 0, 0x1D, 0x80, 8)
|
||||
SOUND_OBJ_UNKNOWN4 = SOUND_ARG_LOAD(5, 0, 0x1E, 0xA0, 8)
|
||||
SOUND_OBJ_BABY_PENGUIN_DIVE = SOUND_ARG_LOAD(5, 0, 0x1F, 0x40, 8)
|
||||
SOUND_OBJ_GOOMBA_WALK = SOUND_ARG_LOAD(5, 0, 0x20, 0x00, 8)
|
||||
SOUND_OBJ_UKIKI_CHATTER_LONG = SOUND_ARG_LOAD(5, 0, 0x21, 0x00, 8)
|
||||
SOUND_OBJ_MONTY_MOLE_ATTACK = SOUND_ARG_LOAD(5, 0, 0x22, 0x00, 8)
|
||||
SOUND_OBJ_EVIL_LAKITU_THROW = SOUND_ARG_LOAD(5, 0, 0x22, 0x20, 8)
|
||||
SOUND_OBJ_UNK23 = 0x5023
|
||||
SOUND_OBJ_DYING_ENEMY1 = SOUND_ARG_LOAD(5, 0, 0x24, 0x40, 8)
|
||||
SOUND_OBJ_CANNON4 = SOUND_ARG_LOAD(5, 0, 0x25, 0x40, 8)
|
||||
SOUND_OBJ_DYING_ENEMY2 = 0x5026
|
||||
SOUND_OBJ_BOBOMB_WALK = SOUND_ARG_LOAD(5, 0, 0x27, 0x00, 8)
|
||||
SOUND_OBJ_SOMETHING_LANDING = SOUND_ARG_LOAD(5, 0, 0x28, 0x80, 8)
|
||||
SOUND_OBJ_DIVING_IN_WATER = SOUND_ARG_LOAD(5, 0, 0x29, 0xA0, 8)
|
||||
SOUND_OBJ_SNOW_SAND1 = SOUND_ARG_LOAD(5, 0, 0x2A, 0x00, 8)
|
||||
SOUND_OBJ_SNOW_SAND2 = SOUND_ARG_LOAD(5, 0, 0x2B, 0x00, 8)
|
||||
SOUND_OBJ_DEFAULT_DEATH = SOUND_ARG_LOAD(5, 0, 0x2C, 0x80, 8)
|
||||
SOUND_OBJ_BIG_PENGUIN_YELL = SOUND_ARG_LOAD(5, 0, 0x2D, 0x00, 8)
|
||||
SOUND_OBJ_WATER_BOMB_BOUNCING = SOUND_ARG_LOAD(5, 0, 0x2E, 0x80, 8)
|
||||
SOUND_OBJ_GOOMBA_ALERT = SOUND_ARG_LOAD(5, 0, 0x2F, 0x00, 8)
|
||||
SOUND_OBJ_WIGGLER_JUMP = SOUND_ARG_LOAD(5, 0, 0x2F, 0x60, 8)
|
||||
SOUND_OBJ_STOMPED = SOUND_ARG_LOAD(5, 0, 0x30, 0x80, 8)
|
||||
SOUND_OBJ_UNKNOWN6 = SOUND_ARG_LOAD(5, 0, 0x31, 0x00, 8)
|
||||
SOUND_OBJ_DIVING_INTO_WATER = SOUND_ARG_LOAD(5, 0, 0x32, 0x40, 8)
|
||||
SOUND_OBJ_PIRANHA_PLANT_SHRINK = SOUND_ARG_LOAD(5, 0, 0x33, 0x40, 8)
|
||||
SOUND_OBJ_KOOPA_THE_QUICK_WALK = SOUND_ARG_LOAD(5, 0, 0x34, 0x20, 8)
|
||||
SOUND_OBJ_KOOPA_WALK = SOUND_ARG_LOAD(5, 0, 0x35, 0x00, 8)
|
||||
SOUND_OBJ_BULLY_WALKING = SOUND_ARG_LOAD(5, 0, 0x36, 0x60, 8)
|
||||
SOUND_OBJ_DORRIE = SOUND_ARG_LOAD(5, 0, 0x37, 0x60, 8)
|
||||
SOUND_OBJ_BOWSER_LAUGH = SOUND_ARG_LOAD(5, 0, 0x38, 0x80, 8)
|
||||
SOUND_OBJ_UKIKI_CHATTER_SHORT = SOUND_ARG_LOAD(5, 0, 0x39, 0x00, 8)
|
||||
SOUND_OBJ_UKIKI_CHATTER_IDLE = SOUND_ARG_LOAD(5, 0, 0x3A, 0x00, 8)
|
||||
SOUND_OBJ_UKIKI_STEP_DEFAULT = SOUND_ARG_LOAD(5, 0, 0x3B, 0x00, 8)
|
||||
SOUND_OBJ_UKIKI_STEP_LEAVES = SOUND_ARG_LOAD(5, 0, 0x3C, 0x00, 8)
|
||||
SOUND_OBJ_KOOPA_TALK = SOUND_ARG_LOAD(5, 0, 0x3D, 0xA0, 8)
|
||||
SOUND_OBJ_KOOPA_DAMAGE = SOUND_ARG_LOAD(5, 0, 0x3E, 0xA0, 8)
|
||||
SOUND_OBJ_KLEPTO1 = SOUND_ARG_LOAD(5, 0, 0x3F, 0x40, 8)
|
||||
SOUND_OBJ_KLEPTO2 = SOUND_ARG_LOAD(5, 0, 0x40, 0x60, 8)
|
||||
SOUND_OBJ_KING_BOBOMB_TALK = SOUND_ARG_LOAD(5, 0, 0x41, 0x00, 8)
|
||||
SOUND_OBJ_KING_BOBOMB_JUMP = SOUND_ARG_LOAD(5, 0, 0x46, 0x80, 8)
|
||||
SOUND_OBJ_KING_WHOMP_DEATH = SOUND_ARG_LOAD(5, 1, 0x47, 0xC0, 8)
|
||||
SOUND_OBJ_BOO_LAUGH_LONG = SOUND_ARG_LOAD(5, 0, 0x48, 0x00, 8)
|
||||
SOUND_OBJ_EEL = SOUND_ARG_LOAD(5, 0, 0x4A, 0x00, 8)
|
||||
SOUND_OBJ_EEL_2 = SOUND_ARG_LOAD(5, 2, 0x4A, 0x00, 8)
|
||||
SOUND_OBJ_EYEROK_SHOW_EYE = SOUND_ARG_LOAD(5, 2, 0x4B, 0x00, 8)
|
||||
SOUND_OBJ_MR_BLIZZARD_ALERT = SOUND_ARG_LOAD(5, 0, 0x4C, 0x00, 8)
|
||||
SOUND_OBJ_SNUFIT_SHOOT = SOUND_ARG_LOAD(5, 0, 0x4D, 0x00, 8)
|
||||
SOUND_OBJ_SKEETER_WALK = SOUND_ARG_LOAD(5, 0, 0x4E, 0x00, 8)
|
||||
SOUND_OBJ_WALKING_WATER = SOUND_ARG_LOAD(5, 0, 0x4F, 0x00, 8)
|
||||
SOUND_OBJ_BIRD_CHIRP3 = SOUND_ARG_LOAD(5, 0, 0x51, 0x40, 0)
|
||||
SOUND_OBJ_PIRANHA_PLANT_APPEAR = SOUND_ARG_LOAD(5, 0, 0x54, 0x20, 8)
|
||||
SOUND_OBJ_FLAME_BLOWN = SOUND_ARG_LOAD(5, 0, 0x55, 0x80, 8)
|
||||
SOUND_OBJ_MAD_PIANO_CHOMPING = SOUND_ARG_LOAD(5, 2, 0x56, 0x40, 8)
|
||||
SOUND_OBJ_BOBOMB_BUDDY_TALK = SOUND_ARG_LOAD(5, 0, 0x58, 0x40, 8)
|
||||
SOUND_OBJ_SPINY_UNK59 = SOUND_ARG_LOAD(5, 0, 0x59, 0x10, 8)
|
||||
SOUND_OBJ_WIGGLER_HIGH_PITCH = SOUND_ARG_LOAD(5, 0, 0x5C, 0x40, 8)
|
||||
SOUND_OBJ_HEAVEHO_TOSSED = SOUND_ARG_LOAD(5, 0, 0x5D, 0x40, 8)
|
||||
SOUND_OBJ_WIGGLER_DEATH = 0x505E
|
||||
SOUND_OBJ_BOWSER_INTRO_LAUGH = SOUND_ARG_LOAD(5, 0, 0x5F, 0x80, 9)
|
||||
SOUND_OBJ_ENEMY_DEATH_HIGH = SOUND_ARG_LOAD(5, 0, 0x60, 0xB0, 8)
|
||||
SOUND_OBJ_ENEMY_DEATH_LOW = SOUND_ARG_LOAD(5, 0, 0x61, 0xB0, 8)
|
||||
SOUND_OBJ_SWOOP_DEATH = SOUND_ARG_LOAD(5, 0, 0x62, 0xB0, 8)
|
||||
SOUND_OBJ_KOOPA_FLYGUY_DEATH = SOUND_ARG_LOAD(5, 0, 0x63, 0xB0, 8)
|
||||
SOUND_OBJ_POKEY_DEATH = SOUND_ARG_LOAD(5, 0, 0x63, 0xC0, 8)
|
||||
SOUND_OBJ_SNOWMAN_BOUNCE = SOUND_ARG_LOAD(5, 0, 0x64, 0xC0, 8)
|
||||
SOUND_OBJ_SNOWMAN_EXPLODE = SOUND_ARG_LOAD(5, 0, 0x65, 0xD0, 8)
|
||||
SOUND_OBJ_POUNDING_LOUD = SOUND_ARG_LOAD(5, 0, 0x68, 0x40, 8)
|
||||
SOUND_OBJ_MIPS_RABBIT = SOUND_ARG_LOAD(5, 0, 0x6A, 0x00, 8)
|
||||
SOUND_OBJ_MIPS_RABBIT_WATER = SOUND_ARG_LOAD(5, 0, 0x6C, 0x00, 8)
|
||||
SOUND_OBJ_EYEROK_EXPLODE = SOUND_ARG_LOAD(5, 0, 0x6D, 0x00, 8)
|
||||
SOUND_OBJ_CHUCKYA_DEATH = SOUND_ARG_LOAD(5, 1, 0x6E, 0x00, 8)
|
||||
SOUND_OBJ_WIGGLER_TALK = SOUND_ARG_LOAD(5, 0, 0x6F, 0x00, 8)
|
||||
SOUND_OBJ_WIGGLER_ATTACKED = SOUND_ARG_LOAD(5, 0, 0x70, 0x60, 8)
|
||||
SOUND_OBJ_WIGGLER_LOW_PITCH = SOUND_ARG_LOAD(5, 0, 0x71, 0x20, 8)
|
||||
SOUND_OBJ_SNUFIT_SKEETER_DEATH = SOUND_ARG_LOAD(5, 0, 0x72, 0xC0, 8)
|
||||
SOUND_OBJ_BUBBA_CHOMP = SOUND_ARG_LOAD(5, 0, 0x73, 0x40, 8)
|
||||
SOUND_OBJ_ENEMY_DEFEAT_SHRINK = SOUND_ARG_LOAD(5, 0, 0x74, 0x40, 8)
|
||||
|
||||
SOUND_AIR_BOWSER_SPIT_FIRE = SOUND_ARG_LOAD(6, 0, 0x00, 0x00, 0)
|
||||
SOUND_AIR_UNK01 = 0x6001
|
||||
SOUND_AIR_LAKITU_FLY = SOUND_ARG_LOAD(6, 0, 0x02, 0x80, 0)
|
||||
SOUND_AIR_LAKITU_FLY_HIGHPRIO = SOUND_ARG_LOAD(6, 0, 0x02, 0xFF, 0)
|
||||
SOUND_AIR_AMP_BUZZ = SOUND_ARG_LOAD(6, 0, 0x03, 0x40, 0)
|
||||
SOUND_AIR_BLOW_FIRE = SOUND_ARG_LOAD(6, 0, 0x04, 0x80, 0)
|
||||
SOUND_AIR_BLOW_WIND = SOUND_ARG_LOAD(6, 0, 0x04, 0x40, 0)
|
||||
SOUND_AIR_ROUGH_SLIDE = SOUND_ARG_LOAD(6, 0, 0x05, 0x00, 0)
|
||||
SOUND_AIR_HEAVEHO_MOVE = SOUND_ARG_LOAD(6, 0, 0x06, 0x40, 0)
|
||||
SOUND_AIR_UNK07 = 0x6007
|
||||
SOUND_AIR_BOBOMB_LIT_FUSE = SOUND_ARG_LOAD(6, 0, 0x08, 0x60, 0)
|
||||
SOUND_AIR_HOWLING_WIND = SOUND_ARG_LOAD(6, 0, 0x09, 0x80, 0)
|
||||
SOUND_AIR_CHUCKYA_MOVE = SOUND_ARG_LOAD(6, 0, 0x0A, 0x40, 0)
|
||||
SOUND_AIR_PEACH_TWINKLE = SOUND_ARG_LOAD(6, 0, 0x0B, 0x40, 0)
|
||||
SOUND_AIR_CASTLE_OUTDOORS_AMBIENT = SOUND_ARG_LOAD(6, 0, 0x10, 0x40, 0)
|
||||
|
||||
SOUND_MENU_CHANGE_SELECT = SOUND_ARG_LOAD(7, 0, 0x00, 0xF8, 8)
|
||||
SOUND_MENU_REVERSE_PAUSE = 0x7001
|
||||
SOUND_MENU_PAUSE = SOUND_ARG_LOAD(7, 0, 0x02, 0xF0, 8)
|
||||
SOUND_MENU_PAUSE_HIGHPRIO = SOUND_ARG_LOAD(7, 0, 0x02, 0xFF, 8)
|
||||
SOUND_MENU_PAUSE_2 = SOUND_ARG_LOAD(7, 0, 0x03, 0xFF, 8)
|
||||
SOUND_MENU_MESSAGE_APPEAR = SOUND_ARG_LOAD(7, 0, 0x04, 0x00, 8)
|
||||
SOUND_MENU_MESSAGE_DISAPPEAR = SOUND_ARG_LOAD(7, 0, 0x05, 0x00, 8)
|
||||
SOUND_MENU_CAMERA_ZOOM_IN = SOUND_ARG_LOAD(7, 0, 0x06, 0x00, 8)
|
||||
SOUND_MENU_CAMERA_ZOOM_OUT = SOUND_ARG_LOAD(7, 0, 0x07, 0x00, 8)
|
||||
SOUND_MENU_PINCH_MARIO_FACE = SOUND_ARG_LOAD(7, 0, 0x08, 0x00, 8)
|
||||
SOUND_MENU_LET_GO_MARIO_FACE = SOUND_ARG_LOAD(7, 0, 0x09, 0x00, 8)
|
||||
SOUND_MENU_HAND_APPEAR = SOUND_ARG_LOAD(7, 0, 0x0A, 0x00, 8)
|
||||
SOUND_MENU_HAND_DISAPPEAR = SOUND_ARG_LOAD(7, 0, 0x0B, 0x00, 8)
|
||||
SOUND_MENU_UNK0C = SOUND_ARG_LOAD(7, 0, 0x0C, 0x00, 8)
|
||||
SOUND_MENU_POWER_METER = SOUND_ARG_LOAD(7, 0, 0x0D, 0x00, 8)
|
||||
SOUND_MENU_CAMERA_BUZZ = SOUND_ARG_LOAD(7, 0, 0x0E, 0x00, 8)
|
||||
SOUND_MENU_CAMERA_TURN = SOUND_ARG_LOAD(7, 0, 0x0F, 0x00, 8)
|
||||
SOUND_MENU_UNK10 = 0x7010
|
||||
SOUND_MENU_CLICK_FILE_SELECT = SOUND_ARG_LOAD(7, 0, 0x11, 0x00, 8)
|
||||
SOUND_MENU_MESSAGE_NEXT_PAGE = SOUND_ARG_LOAD(7, 0, 0x13, 0x00, 8)
|
||||
SOUND_MENU_COIN_ITS_A_ME_MARIO = SOUND_ARG_LOAD(7, 0, 0x14, 0x00, 8)
|
||||
SOUND_MENU_YOSHI_GAIN_LIVES = SOUND_ARG_LOAD(7, 0, 0x15, 0x00, 8)
|
||||
SOUND_MENU_ENTER_PIPE = SOUND_ARG_LOAD(7, 0, 0x16, 0xA0, 8)
|
||||
SOUND_MENU_EXIT_PIPE = SOUND_ARG_LOAD(7, 0, 0x17, 0xA0, 8)
|
||||
SOUND_MENU_BOWSER_LAUGH = SOUND_ARG_LOAD(7, 0, 0x18, 0x80, 8)
|
||||
SOUND_MENU_ENTER_HOLE = SOUND_ARG_LOAD(7, 1, 0x19, 0x80, 8)
|
||||
SOUND_MENU_CLICK_CHANGE_VIEW = SOUND_ARG_LOAD(7, 0, 0x1A, 0x80, 8)
|
||||
SOUND_MENU_CAMERA_UNUSED1 = 0x701B
|
||||
SOUND_MENU_CAMERA_UNUSED2 = 0x701C
|
||||
SOUND_MENU_MARIO_CASTLE_WARP = SOUND_ARG_LOAD(7, 0, 0x1D, 0xB0, 8)
|
||||
SOUND_MENU_STAR_SOUND = SOUND_ARG_LOAD(7, 0, 0x1E, 0xFF, 8)
|
||||
SOUND_MENU_THANK_YOU_PLAYING_MY_GAME = SOUND_ARG_LOAD(7, 0, 0x1F, 0xFF, 8)
|
||||
SOUND_MENU_READ_A_SIGN = 0x7020
|
||||
SOUND_MENU_EXIT_A_SIGN = 0x7021
|
||||
SOUND_MENU_MARIO_CASTLE_WARP2 = SOUND_ARG_LOAD(7, 0, 0x22, 0x20, 8)
|
||||
SOUND_MENU_STAR_SOUND_OKEY_DOKEY = SOUND_ARG_LOAD(7, 0, 0x23, 0xFF, 8)
|
||||
SOUND_MENU_STAR_SOUND_LETS_A_GO = SOUND_ARG_LOAD(7, 0, 0x24, 0xFF, 8)
|
||||
|
||||
SOUND_MENU_COLLECT_RED_COIN = SOUND_ARG_LOAD(7, 8, 0x28, 0x90, 8)
|
||||
SOUND_MENU_COLLECT_SECRET = SOUND_ARG_LOAD(7, 0, 0x30, 0x20, 8)
|
||||
|
||||
SOUND_GENERAL2_BOBOMB_EXPLOSION = SOUND_ARG_LOAD(8, 0, 0x2E, 0x20, 8)
|
||||
SOUND_GENERAL2_PURPLE_SWITCH = SOUND_ARG_LOAD(8, 0, 0x3E, 0xC0, 8)
|
||||
SOUND_GENERAL2_ROTATING_BLOCK_CLICK = SOUND_ARG_LOAD(8, 0, 0x40, 0x00, 8)
|
||||
SOUND_GENERAL2_SPINDEL_ROLL = SOUND_ARG_LOAD(8, 0, 0x48, 0x20, 8)
|
||||
SOUND_GENERAL2_PYRAMID_TOP_SPIN = SOUND_ARG_LOAD(8, 1, 0x4B, 0xE0, 8)
|
||||
SOUND_GENERAL2_PYRAMID_TOP_EXPLOSION = SOUND_ARG_LOAD(8, 1, 0x4C, 0xF0, 8)
|
||||
SOUND_GENERAL2_BIRD_CHIRP2 = SOUND_ARG_LOAD(8, 0, 0x50, 0x40, 0)
|
||||
SOUND_GENERAL2_SWITCH_TICK_FAST = SOUND_ARG_LOAD(8, 0, 0x54, 0xF0, 1)
|
||||
SOUND_GENERAL2_SWITCH_TICK_SLOW = SOUND_ARG_LOAD(8, 0, 0x55, 0xF0, 1)
|
||||
SOUND_GENERAL2_STAR_APPEARS = SOUND_ARG_LOAD(8, 0, 0x57, 0xFF, 9)
|
||||
SOUND_GENERAL2_ROTATING_BLOCK_ALERT = SOUND_ARG_LOAD(8, 0, 0x59, 0x00, 8)
|
||||
SOUND_GENERAL2_BOWSER_EXPLODE = SOUND_ARG_LOAD(8, 0, 0x60, 0x00, 8)
|
||||
SOUND_GENERAL2_BOWSER_KEY = SOUND_ARG_LOAD(8, 0, 0x61, 0x00, 8)
|
||||
SOUND_GENERAL2_1UP_APPEAR = SOUND_ARG_LOAD(8, 0, 0x63, 0xD0, 8)
|
||||
SOUND_GENERAL2_RIGHT_ANSWER = SOUND_ARG_LOAD(8, 0, 0x6A, 0xA0, 8)
|
||||
|
||||
SOUND_OBJ2_BOWSER_ROAR = SOUND_ARG_LOAD(9, 0, 0x04, 0x00, 8)
|
||||
SOUND_OBJ2_PIRANHA_PLANT_BITE = SOUND_ARG_LOAD(9, 0, 0x10, 0x50, 8)
|
||||
SOUND_OBJ2_PIRANHA_PLANT_DYING = SOUND_ARG_LOAD(9, 0, 0x11, 0x60, 8)
|
||||
SOUND_OBJ2_BOWSER_PUZZLE_PIECE_MOVE = SOUND_ARG_LOAD(9, 0, 0x19, 0x20, 8)
|
||||
SOUND_OBJ2_BULLY_ATTACKED = SOUND_ARG_LOAD(9, 0, 0x1C, 0x00, 8)
|
||||
SOUND_OBJ2_KING_BOBOMB_DAMAGE = SOUND_ARG_LOAD(9, 1, 0x42, 0x40, 8)
|
||||
SOUND_OBJ2_SCUTTLEBUG_WALK = SOUND_ARG_LOAD(9, 0, 0x43, 0x40, 8)
|
||||
SOUND_OBJ2_SCUTTLEBUG_ALERT = SOUND_ARG_LOAD(9, 0, 0x44, 0x40, 8)
|
||||
SOUND_OBJ2_BABY_PENGUIN_YELL = SOUND_ARG_LOAD(9, 0, 0x45, 0x00, 8)
|
||||
SOUND_OBJ2_SWOOP = SOUND_ARG_LOAD(9, 0, 0x49, 0x00, 8)
|
||||
SOUND_OBJ2_BIRD_CHIRP1 = SOUND_ARG_LOAD(9, 0, 0x52, 0x40, 0)
|
||||
SOUND_OBJ2_LARGE_BULLY_ATTACKED = SOUND_ARG_LOAD(9, 0, 0x57, 0x00, 8)
|
||||
SOUND_OBJ2_EYEROK_SOUND_SHORT = SOUND_ARG_LOAD(9, 3, 0x5A, 0x00, 8)
|
||||
SOUND_OBJ2_WHOMP_SOUND_SHORT = SOUND_ARG_LOAD(9, 3, 0x5A, 0xC0, 8)
|
||||
SOUND_OBJ2_EYEROK_SOUND_LONG = SOUND_ARG_LOAD(9, 2, 0x5B, 0x00, 8)
|
||||
SOUND_OBJ2_BOWSER_TELEPORT = SOUND_ARG_LOAD(9, 0, 0x66, 0x80, 8)
|
||||
SOUND_OBJ2_MONTY_MOLE_APPEAR = SOUND_ARG_LOAD(9, 0, 0x67, 0x80, 8)
|
||||
SOUND_OBJ2_BOSS_DIALOG_GRUNT = SOUND_ARG_LOAD(9, 0, 0x69, 0x40, 8)
|
||||
SOUND_OBJ2_MRI_SPINNING = SOUND_ARG_LOAD(9, 0, 0x6B, 0x00, 8)
|
||||
|
||||
----------------
|
||||
-- animations --
|
||||
----------------
|
||||
|
||||
MARIO_ANIM_SLOW_LEDGE_GRAB = 0
|
||||
MARIO_ANIM_FALL_OVER_BACKWARDS = 1
|
||||
MARIO_ANIM_BACKWARD_AIR_KB = 2
|
||||
MARIO_ANIM_DYING_ON_BACK = 3
|
||||
MARIO_ANIM_BACKFLIP = 4
|
||||
MARIO_ANIM_CLIMB_UP_POLE = 5
|
||||
MARIO_ANIM_GRAB_POLE_SHORT = 6
|
||||
MARIO_ANIM_GRAB_POLE_SWING_PART1 = 7
|
||||
MARIO_ANIM_GRAB_POLE_SWING_PART2 = 8
|
||||
MARIO_ANIM_HANDSTAND_IDLE = 9
|
||||
MARIO_ANIM_HANDSTAND_JUMP = 10
|
||||
MARIO_ANIM_START_HANDSTAND = 11
|
||||
MARIO_ANIM_RETURN_FROM_HANDSTAND = 12
|
||||
MARIO_ANIM_IDLE_ON_POLE = 13
|
||||
MARIO_ANIM_A_POSE = 14
|
||||
MARIO_ANIM_SKID_ON_GROUND = 15
|
||||
MARIO_ANIM_STOP_SKID = 16
|
||||
MARIO_ANIM_CROUCH_FROM_FAST_LONGJUMP = 17
|
||||
MARIO_ANIM_CROUCH_FROM_SLOW_LONGJUMP = 18
|
||||
MARIO_ANIM_FAST_LONGJUMP = 19
|
||||
MARIO_ANIM_SLOW_LONGJUMP = 20
|
||||
MARIO_ANIM_AIRBORNE_ON_STOMACH = 21
|
||||
MARIO_ANIM_WALK_WITH_LIGHT_OBJ = 22
|
||||
MARIO_ANIM_RUN_WITH_LIGHT_OBJ = 23
|
||||
MARIO_ANIM_SLOW_WALK_WITH_LIGHT_OBJ = 24
|
||||
MARIO_ANIM_SHIVERING_WARMING_HAND = 25
|
||||
MARIO_ANIM_SHIVERING_RETURN_TO_IDLE = 26
|
||||
MARIO_ANIM_SHIVERING = 27
|
||||
MARIO_ANIM_CLIMB_DOWN_LEDGE = 28
|
||||
MARIO_ANIM_CREDITS_WAVING = 29
|
||||
MARIO_ANIM_CREDITS_LOOK_UP = 30
|
||||
MARIO_ANIM_CREDITS_RETURN_FROM_LOOK_UP = 31
|
||||
MARIO_ANIM_CREDITS_RAISE_HAND = 32
|
||||
MARIO_ANIM_CREDITS_LOWER_HAND = 33
|
||||
MARIO_ANIM_CREDITS_TAKE_OFF_CAP = 34
|
||||
MARIO_ANIM_CREDITS_START_WALK_LOOK_UP = 35
|
||||
MARIO_ANIM_CREDITS_LOOK_BACK_THEN_RUN = 36
|
||||
MARIO_ANIM_FINAL_BOWSER_RAISE_HAND_SPIN = 37
|
||||
MARIO_ANIM_FINAL_BOWSER_WING_CAP_TAKE_OFF = 38
|
||||
MARIO_ANIM_CREDITS_PEACE_SIGN = 39
|
||||
MARIO_ANIM_STAND_UP_FROM_LAVA_BOOST = 40
|
||||
MARIO_ANIM_FIRE_LAVA_BURN = 41
|
||||
MARIO_ANIM_WING_CAP_FLY = 42
|
||||
MARIO_ANIM_HANG_ON_OWL = 43
|
||||
MARIO_ANIM_LAND_ON_STOMACH = 44
|
||||
MARIO_ANIM_AIR_FORWARD_KB = 45
|
||||
MARIO_ANIM_DYING_ON_STOMACH = 46
|
||||
MARIO_ANIM_SUFFOCATING = 47
|
||||
MARIO_ANIM_COUGHING = 48
|
||||
MARIO_ANIM_THROW_CATCH_KEY = 49
|
||||
MARIO_ANIM_DYING_FALL_OVER = 50
|
||||
MARIO_ANIM_IDLE_ON_LEDGE = 51
|
||||
MARIO_ANIM_FAST_LEDGE_GRAB = 52
|
||||
MARIO_ANIM_HANG_ON_CEILING = 53
|
||||
MARIO_ANIM_PUT_CAP_ON = 54
|
||||
MARIO_ANIM_TAKE_CAP_OFF_THEN_ON = 55
|
||||
MARIO_ANIM_QUICKLY_PUT_CAP_ON = 56
|
||||
MARIO_ANIM_HEAD_STUCK_IN_GROUND = 57
|
||||
MARIO_ANIM_GROUND_POUND_LANDING = 58
|
||||
MARIO_ANIM_TRIPLE_JUMP_GROUND_POUND = 59
|
||||
MARIO_ANIM_START_GROUND_POUND = 60
|
||||
MARIO_ANIM_GROUND_POUND = 61
|
||||
MARIO_ANIM_BOTTOM_STUCK_IN_GROUND = 62
|
||||
MARIO_ANIM_IDLE_WITH_LIGHT_OBJ = 63
|
||||
MARIO_ANIM_JUMP_LAND_WITH_LIGHT_OBJ = 64
|
||||
MARIO_ANIM_JUMP_WITH_LIGHT_OBJ = 65
|
||||
MARIO_ANIM_FALL_LAND_WITH_LIGHT_OBJ = 66
|
||||
MARIO_ANIM_FALL_WITH_LIGHT_OBJ = 67
|
||||
MARIO_ANIM_FALL_FROM_SLIDING_WITH_LIGHT_OBJ = 68
|
||||
MARIO_ANIM_SLIDING_ON_BOTTOM_WITH_LIGHT_OBJ = 69
|
||||
MARIO_ANIM_STAND_UP_FROM_SLIDING_WITH_LIGHT_OBJ = 70
|
||||
MARIO_ANIM_RIDING_SHELL = 71
|
||||
MARIO_ANIM_WALKING = 72
|
||||
MARIO_ANIM_FORWARD_FLIP = 73
|
||||
MARIO_ANIM_JUMP_RIDING_SHELL = 74
|
||||
MARIO_ANIM_LAND_FROM_DOUBLE_JUMP = 75
|
||||
MARIO_ANIM_DOUBLE_JUMP_FALL = 76
|
||||
MARIO_ANIM_SINGLE_JUMP = 77
|
||||
MARIO_ANIM_LAND_FROM_SINGLE_JUMP = 78
|
||||
MARIO_ANIM_AIR_KICK = 79
|
||||
MARIO_ANIM_DOUBLE_JUMP_RISE = 80
|
||||
MARIO_ANIM_START_FORWARD_SPINNING = 81
|
||||
MARIO_ANIM_THROW_LIGHT_OBJECT = 82
|
||||
MARIO_ANIM_FALL_FROM_SLIDE_KICK = 83
|
||||
MARIO_ANIM_BEND_KNESS_RIDING_SHELL = 84
|
||||
MARIO_ANIM_LEGS_STUCK_IN_GROUND = 85
|
||||
MARIO_ANIM_GENERAL_FALL = 86
|
||||
MARIO_ANIM_GENERAL_LAND = 87
|
||||
MARIO_ANIM_BEING_GRABBED = 88
|
||||
MARIO_ANIM_GRAB_HEAVY_OBJECT = 89
|
||||
MARIO_ANIM_SLOW_LAND_FROM_DIVE = 90
|
||||
MARIO_ANIM_FLY_FROM_CANNON = 91
|
||||
MARIO_ANIM_MOVE_ON_WIRE_NET_RIGHT = 92
|
||||
MARIO_ANIM_MOVE_ON_WIRE_NET_LEFT = 93
|
||||
MARIO_ANIM_MISSING_CAP = 94
|
||||
MARIO_ANIM_PULL_DOOR_WALK_IN = 95
|
||||
MARIO_ANIM_PUSH_DOOR_WALK_IN = 96
|
||||
MARIO_ANIM_UNLOCK_DOOR = 97
|
||||
MARIO_ANIM_START_REACH_POCKET = 98
|
||||
MARIO_ANIM_REACH_POCKET = 99
|
||||
MARIO_ANIM_STOP_REACH_POCKET = 100
|
||||
MARIO_ANIM_GROUND_THROW = 101
|
||||
MARIO_ANIM_GROUND_KICK = 102
|
||||
MARIO_ANIM_FIRST_PUNCH = 103
|
||||
MARIO_ANIM_SECOND_PUNCH = 104
|
||||
MARIO_ANIM_FIRST_PUNCH_FAST = 105
|
||||
MARIO_ANIM_SECOND_PUNCH_FAST = 106
|
||||
MARIO_ANIM_PICK_UP_LIGHT_OBJ = 107
|
||||
MARIO_ANIM_PUSHING = 108
|
||||
MARIO_ANIM_START_RIDING_SHELL = 109
|
||||
MARIO_ANIM_PLACE_LIGHT_OBJ = 110
|
||||
MARIO_ANIM_FORWARD_SPINNING = 111
|
||||
MARIO_ANIM_BACKWARD_SPINNING = 112
|
||||
MARIO_ANIM_BREAKDANCE = 113
|
||||
MARIO_ANIM_RUNNING = 114
|
||||
MARIO_ANIM_RUNNING_UNUSED = 115
|
||||
MARIO_ANIM_SOFT_BACK_KB = 116
|
||||
MARIO_ANIM_SOFT_FRONT_KB = 117
|
||||
MARIO_ANIM_DYING_IN_QUICKSAND = 118
|
||||
MARIO_ANIM_IDLE_IN_QUICKSAND = 119
|
||||
MARIO_ANIM_MOVE_IN_QUICKSAND = 120
|
||||
MARIO_ANIM_ELECTROCUTION = 121
|
||||
MARIO_ANIM_SHOCKED = 122
|
||||
MARIO_ANIM_BACKWARD_KB = 123
|
||||
MARIO_ANIM_FORWARD_KB = 124
|
||||
MARIO_ANIM_IDLE_HEAVY_OBJ = 125
|
||||
MARIO_ANIM_STAND_AGAINST_WALL = 126
|
||||
MARIO_ANIM_SIDESTEP_LEFT = 127
|
||||
MARIO_ANIM_SIDESTEP_RIGHT = 128
|
||||
MARIO_ANIM_START_SLEEP_IDLE = 129
|
||||
MARIO_ANIM_START_SLEEP_SCRATCH = 130
|
||||
MARIO_ANIM_START_SLEEP_YAWN = 131
|
||||
MARIO_ANIM_START_SLEEP_SITTING = 132
|
||||
MARIO_ANIM_SLEEP_IDLE = 133
|
||||
MARIO_ANIM_SLEEP_START_LYING = 134
|
||||
MARIO_ANIM_SLEEP_LYING = 135
|
||||
MARIO_ANIM_DIVE = 136
|
||||
MARIO_ANIM_SLIDE_DIVE = 137
|
||||
MARIO_ANIM_GROUND_BONK = 138
|
||||
MARIO_ANIM_STOP_SLIDE_LIGHT_OBJ = 139
|
||||
MARIO_ANIM_SLIDE_KICK = 140
|
||||
MARIO_ANIM_CROUCH_FROM_SLIDE_KICK = 141
|
||||
MARIO_ANIM_SLIDE_MOTIONLESS = 142
|
||||
MARIO_ANIM_STOP_SLIDE = 143
|
||||
MARIO_ANIM_FALL_FROM_SLIDE = 144
|
||||
MARIO_ANIM_SLIDE = 145
|
||||
MARIO_ANIM_TIPTOE = 146
|
||||
MARIO_ANIM_TWIRL_LAND = 147
|
||||
MARIO_ANIM_TWIRL = 148
|
||||
MARIO_ANIM_START_TWIRL = 149
|
||||
MARIO_ANIM_STOP_CROUCHING = 150
|
||||
MARIO_ANIM_START_CROUCHING = 151
|
||||
MARIO_ANIM_CROUCHING = 152
|
||||
MARIO_ANIM_CRAWLING = 153
|
||||
MARIO_ANIM_STOP_CRAWLING = 154
|
||||
MARIO_ANIM_START_CRAWLING = 155
|
||||
MARIO_ANIM_SUMMON_STAR = 156
|
||||
MARIO_ANIM_RETURN_STAR_APPROACH_DOOR = 157
|
||||
MARIO_ANIM_BACKWARDS_WATER_KB = 158
|
||||
MARIO_ANIM_SWIM_WITH_OBJ_PART1 = 159
|
||||
MARIO_ANIM_SWIM_WITH_OBJ_PART2 = 160
|
||||
MARIO_ANIM_FLUTTERKICK_WITH_OBJ = 161
|
||||
MARIO_ANIM_WATER_ACTION_END_WITH_OBJ = 162
|
||||
MARIO_ANIM_STOP_GRAB_OBJ_WATER = 163
|
||||
MARIO_ANIM_WATER_IDLE_WITH_OBJ = 164
|
||||
MARIO_ANIM_DROWNING_PART1 = 165
|
||||
MARIO_ANIM_DROWNING_PART2 = 166
|
||||
MARIO_ANIM_WATER_DYING = 167
|
||||
MARIO_ANIM_WATER_FORWARD_KB = 168
|
||||
MARIO_ANIM_FALL_FROM_WATER = 169
|
||||
MARIO_ANIM_SWIM_PART1 = 170
|
||||
MARIO_ANIM_SWIM_PART2 = 171
|
||||
MARIO_ANIM_FLUTTERKICK = 172
|
||||
MARIO_ANIM_WATER_ACTION_END = 173
|
||||
MARIO_ANIM_WATER_PICK_UP_OBJ = 174
|
||||
MARIO_ANIM_WATER_GRAB_OBJ_PART2 = 175
|
||||
MARIO_ANIM_WATER_GRAB_OBJ_PART1 = 176
|
||||
MARIO_ANIM_WATER_THROW_OBJ = 177
|
||||
MARIO_ANIM_WATER_IDLE = 178
|
||||
MARIO_ANIM_WATER_STAR_DANCE = 179
|
||||
MARIO_ANIM_RETURN_FROM_WATER_STAR_DANCE = 180
|
||||
MARIO_ANIM_GRAB_BOWSER = 181
|
||||
MARIO_ANIM_SWINGING_BOWSER = 182
|
||||
MARIO_ANIM_RELEASE_BOWSER = 183
|
||||
MARIO_ANIM_HOLDING_BOWSER = 184
|
||||
MARIO_ANIM_HEAVY_THROW = 185
|
||||
MARIO_ANIM_WALK_PANTING = 186
|
||||
MARIO_ANIM_WALK_WITH_HEAVY_OBJ = 187
|
||||
MARIO_ANIM_TURNING_PART1 = 188
|
||||
MARIO_ANIM_TURNING_PART2 = 189
|
||||
MARIO_ANIM_SLIDEFLIP_LAND = 190
|
||||
MARIO_ANIM_SLIDEFLIP = 191
|
||||
MARIO_ANIM_TRIPLE_JUMP_LAND = 192
|
||||
MARIO_ANIM_TRIPLE_JUMP = 193
|
||||
MARIO_ANIM_FIRST_PERSON = 194
|
||||
MARIO_ANIM_IDLE_HEAD_LEFT = 195
|
||||
MARIO_ANIM_IDLE_HEAD_RIGHT = 196
|
||||
MARIO_ANIM_IDLE_HEAD_CENTER = 197
|
||||
MARIO_ANIM_HANDSTAND_LEFT = 198
|
||||
MARIO_ANIM_HANDSTAND_RIGHT = 199
|
||||
MARIO_ANIM_WAKE_FROM_SLEEP = 200
|
||||
MARIO_ANIM_WAKE_FROM_LYING = 201
|
||||
MARIO_ANIM_START_TIPTOE = 202
|
||||
MARIO_ANIM_SLIDEJUMP = 203
|
||||
MARIO_ANIM_START_WALLKICK = 204
|
||||
MARIO_ANIM_STAR_DANCE = 205
|
||||
MARIO_ANIM_RETURN_FROM_STAR_DANCE = 206
|
||||
MARIO_ANIM_FORWARD_SPINNING_FLIP = 207
|
||||
MARIO_ANIM_TRIPLE_JUMP_FLY = 208
|
||||
|
|
|
|||
122
mods/test.lua
122
mods/test.lua
|
|
@ -1,16 +1,124 @@
|
|||
function mario_update(index)
|
||||
local m = get_mario_state(index)
|
||||
if m.vel.y > 0 then
|
||||
m.vel.y = m.vel.y + 2
|
||||
|
||||
ACT_ROLL = (0x05B | ACT_FLAG_MOVING | ACT_FLAG_BUTT_OR_STOMACH_SLIDE)
|
||||
ACT_ROLL_AIR = (0x0BA | ACT_FLAG_AIR | ACT_FLAG_ALLOW_VERTICAL_WIND_ACTION)
|
||||
|
||||
function act_roll(mario_index)
|
||||
print("rolling!")
|
||||
local m = get_mario_state(mario_index)
|
||||
|
||||
local MAX_NORMAL_ROLL_SPEED = 50.0
|
||||
local ROLL_BOOST_GAIN = 10.0
|
||||
local ROLL_CANCEL_LOCKOUT_TIME = 10
|
||||
local BOOST_LOCKOUT_TIME = 20
|
||||
|
||||
-- m.spareFloat is used for Mario's rotation angle during the roll (persists when going into ACT_ROLL_AIR and back)
|
||||
-- m.spareInt is used for the boost lockout timer (persists when going into ACT_ROLL_AIR and back)
|
||||
-- m.actionTimer is used to lockout walk canceling out of rollout (reset each action switch)
|
||||
|
||||
if m.actionTimer == 0 then
|
||||
if m.prevAction ~= ACT_ROLL_AIR then
|
||||
m.spareFloat = 0
|
||||
m.spareInt = 0
|
||||
end
|
||||
set_mario_state(index, m)
|
||||
if m.action == ACT_DIVE then
|
||||
set_mario_action(index, ACT_TWIRLING, 0);
|
||||
elseif m.actionTimer >= ROLL_CANCEL_LOCKOUT_TIME or m.actionArg == 1 then
|
||||
if (m.input & INPUT_Z_DOWN) == 0 then
|
||||
print("rolling -> walking")
|
||||
return set_mario_action(mario_index, ACT_WALKING, 0);
|
||||
end
|
||||
end
|
||||
|
||||
if (m.input & INPUT_B_PRESSED) ~= 0 then
|
||||
print("rolling -> rollout")
|
||||
return set_jumping_action(mario_index, ACT_FORWARD_ROLLOUT, 0);
|
||||
end
|
||||
|
||||
if (m.input & INPUT_A_PRESSED) ~= 0 then
|
||||
print("rolling -> long jump")
|
||||
return set_jumping_action(mario_index, ACT_LONG_JUMP, 0);
|
||||
end
|
||||
|
||||
if (m.controller.buttonPressed & R_TRIG) ~= 0 and m.actionTimer > 0 then
|
||||
m.vel[1] = 19.0;
|
||||
play_mario_sound(mario_index, SOUND_ACTION_TERRAIN_JUMP, 0);
|
||||
|
||||
if m.spareInt >= BOOST_LOCKOUT_TIME then
|
||||
m.spareInt = 0;
|
||||
|
||||
if m.forwardVel < MAX_NORMAL_ROLL_SPEED then
|
||||
mario_set_forward_vel(mario_index, math.min(m.forwardVel + ROLL_BOOST_GAIN, MAX_NORMAL_ROLL_SPEED));
|
||||
end
|
||||
|
||||
m.particleFlags = m.particleFlags | PARTICLE_HORIZONTAL_STAR;
|
||||
|
||||
-- ! playing this after the call to play_mario_sound seems to matter in making this sound play
|
||||
------ play_sound(SOUND_ACTION_SPIN, m.marioObj->header.gfx.cameraToObject);
|
||||
end
|
||||
|
||||
print("rolling -> rolling air")
|
||||
return set_mario_action(mario_index, ACT_ROLL_AIR, m.actionArg);
|
||||
end
|
||||
|
||||
set_mario_animation(mario_index, MARIO_ANIM_FORWARD_SPINNING);
|
||||
|
||||
if update_sliding(mario_index, 10.0) ~= 0 then
|
||||
print("rolling -> crouch slide")
|
||||
return set_mario_action(mario_index, ACT_CROUCH_SLIDE, 0);
|
||||
end
|
||||
|
||||
common_slide_action(mario_index, ACT_CROUCH_SLIDE, ACT_ROLL_AIR, MARIO_ANIM_FORWARD_SPINNING);
|
||||
|
||||
------------------------------------
|
||||
-- todo: implement spareFloat/int --
|
||||
------------------------------------
|
||||
if m.spareFloat == nil then m.spareFloat = 0 end -- remove me
|
||||
if m.spareInt == nil then m.spareInt = 0 end -- remove me
|
||||
|
||||
m.spareFloat = m.spareFloat + (0x80 * m.forwardVel);
|
||||
if m.spareFloat > 0x10000 then
|
||||
m.spareFloat = m.spareFloat - 0x10000;
|
||||
end
|
||||
set_anim_to_frame(mario_index, 10 * m.spareFloat / 0x10000);
|
||||
|
||||
m.spareInt = m.spareInt + 1;
|
||||
|
||||
m = get_mario_state(mario_index)
|
||||
m.actionTimer = m.actionTimer + 1;
|
||||
|
||||
set_mario_state(mario_index, m)
|
||||
return 0;
|
||||
end
|
||||
|
||||
function act_roll_air(mario_index)
|
||||
print("rolling air!")
|
||||
return set_mario_action(mario_index, ACT_DIVE, 0);
|
||||
end
|
||||
|
||||
function update()
|
||||
print("----------")
|
||||
print(gMarioStates[0].pos)
|
||||
print(gMarioStates[0].pos.x)
|
||||
print(gMarioStates[0].pos.y)
|
||||
print(gMarioStates[0].pos.z)
|
||||
end
|
||||
|
||||
function mario_update(mario_index)
|
||||
local m = get_mario_state(mario_index)
|
||||
-- if m.vel.y > 0 then
|
||||
-- m.vel.y = m.vel.y + 2
|
||||
-- end
|
||||
|
||||
-- set_mario_state(mario_index, m)
|
||||
|
||||
if m.action == ACT_DIVE_SLIDE then
|
||||
set_mario_action(mario_index, ACT_ROLL, 0);
|
||||
end
|
||||
end
|
||||
|
||||
function override_mario_action(mario_index, action)
|
||||
return (action == ACT_ROLL) or (action == ACT_ROLL_AIR)
|
||||
end
|
||||
|
||||
hook_event(HOOK_UPDATE, update)
|
||||
hook_event(HOOK_MARIO_UPDATE, mario_update)
|
||||
hook_mario_action(ACT_ROLL, act_roll)
|
||||
hook_mario_action(ACT_ROLL_AIR, act_roll_air)
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@
|
|||
#include "object_helpers.h"
|
||||
#include "pc/configfile.h"
|
||||
#include "pc/network/network.h"
|
||||
#include "pc/lua/smlua.h"
|
||||
|
||||
void play_flip_sounds(struct MarioState *m, s16 frame1, s16 frame2, s16 frame3) {
|
||||
s32 animFrame = m->marioObj->header.gfx.unk38.animFrame;
|
||||
|
|
@ -2184,6 +2185,7 @@ s32 mario_execute_airborne_action(struct MarioState *m) {
|
|||
|
||||
play_far_fall_sound(m);
|
||||
|
||||
if (!smlua_call_action_hook(m, (s32*)&cancel)) {
|
||||
/* clang-format off */
|
||||
switch (m->action) {
|
||||
case ACT_JUMP: cancel = act_jump(m); break;
|
||||
|
|
@ -2233,6 +2235,7 @@ s32 mario_execute_airborne_action(struct MarioState *m) {
|
|||
case ACT_VERTICAL_WIND: cancel = act_vertical_wind(m); break;
|
||||
}
|
||||
/* clang-format on */
|
||||
}
|
||||
|
||||
return cancel;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
#include "mario_step.h"
|
||||
#include "pc/configfile.h"
|
||||
#include "pc/network/network.h"
|
||||
#include "pc/lua/smlua.h"
|
||||
|
||||
#define POLE_NONE 0
|
||||
#define POLE_TOUCHED_FLOOR 1
|
||||
|
|
@ -1048,6 +1049,7 @@ s32 mario_execute_automatic_action(struct MarioState *m) {
|
|||
|
||||
m->quicksandDepth = 0.0f;
|
||||
|
||||
if (!smlua_call_action_hook(m, &cancel)) {
|
||||
/* clang-format off */
|
||||
switch (m->action) {
|
||||
case ACT_HOLDING_POLE: cancel = act_holding_pole(m); break;
|
||||
|
|
@ -1070,6 +1072,7 @@ s32 mario_execute_automatic_action(struct MarioState *m) {
|
|||
case ACT_BUBBLED: cancel = act_bubbled(m); break;
|
||||
}
|
||||
/* clang-format on */
|
||||
}
|
||||
|
||||
return cancel;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@
|
|||
#include "pc/pc_main.h"
|
||||
#include "pc/configfile.h"
|
||||
#include "pc/network/network.h"
|
||||
#include "pc/lua/smlua.h"
|
||||
|
||||
// TODO: put this elsewhere
|
||||
enum SaveOption { SAVE_OPT_SAVE_AND_CONTINUE = 1, /*SAVE_OPT_SAVE_AND_QUIT, SAVE_OPT_SAVE_EXIT_GAME,*/ SAVE_OPT_CONTINUE_DONT_SAVE };
|
||||
|
|
@ -2880,6 +2881,7 @@ s32 mario_execute_cutscene_action(struct MarioState *m) {
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
if (!smlua_call_action_hook(m, &cancel)) {
|
||||
/* clang-format off */
|
||||
switch (m->action) {
|
||||
case ACT_DISAPPEARED: cancel = act_disappeared(m); break;
|
||||
|
|
@ -2935,6 +2937,7 @@ s32 mario_execute_cutscene_action(struct MarioState *m) {
|
|||
case ACT_PUTTING_ON_CAP: cancel = act_putting_on_cap(m); break;
|
||||
}
|
||||
/* clang-format on */
|
||||
}
|
||||
|
||||
if (!cancel) {
|
||||
if (m->input & INPUT_IN_WATER) {
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
#include "pc/configfile.h"
|
||||
#include "pc/cheats.h"
|
||||
#include "pc/network/network.h"
|
||||
#include "pc/lua/smlua.h"
|
||||
|
||||
struct LandingAction {
|
||||
s16 numFrames;
|
||||
|
|
@ -186,7 +187,7 @@ void update_sliding_angle(struct MarioState *m, f32 accel, f32 lossFactor) {
|
|||
if ((newFacingDYaw -= 0x200) < 0) {
|
||||
newFacingDYaw = 0;
|
||||
}
|
||||
} else if (newFacingDYaw > -0x4000 && newFacingDYaw < 0) {
|
||||
} else if (newFacingDYaw >= -0x4000 && newFacingDYaw < 0) {
|
||||
if ((newFacingDYaw += 0x200) > 0) {
|
||||
newFacingDYaw = 0;
|
||||
}
|
||||
|
|
@ -259,6 +260,8 @@ s32 update_sliding(struct MarioState *m, f32 stopSpeed) {
|
|||
lossFactor = m->intendedMag / 32.0f * forward * 0.02f + 0.92f;
|
||||
break;
|
||||
}
|
||||
accel = 4.0f;
|
||||
lossFactor = 0.994f;
|
||||
|
||||
oldSpeed = sqrtf(m->slideVelX * m->slideVelX + m->slideVelZ * m->slideVelZ);
|
||||
|
||||
|
|
@ -1997,6 +2000,7 @@ s32 mario_execute_moving_action(struct MarioState *m) {
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
if (!smlua_call_action_hook(m, &cancel)) {
|
||||
/* clang-format off */
|
||||
switch (m->action) {
|
||||
case ACT_WALKING: cancel = act_walking(m); break;
|
||||
|
|
@ -2039,6 +2043,7 @@ s32 mario_execute_moving_action(struct MarioState *m) {
|
|||
case ACT_LONG_JUMP_LAND: cancel = act_long_jump_land(m); break;
|
||||
}
|
||||
/* clang-format on */
|
||||
}
|
||||
|
||||
if (!cancel && (m->input & INPUT_IN_WATER)) {
|
||||
m->particleFlags |= PARTICLE_WAVE_TRAIL;
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@
|
|||
#include "pc/configfile.h"
|
||||
#include "pc/network/network.h"
|
||||
#include "object_helpers.h"
|
||||
#include "pc/lua/smlua.h"
|
||||
|
||||
/**
|
||||
* Used by act_punching() to determine Mario's forward velocity during each
|
||||
|
|
@ -492,6 +493,7 @@ s32 mario_execute_object_action(struct MarioState *m) {
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
if (!smlua_call_action_hook(m, &cancel)) {
|
||||
/* clang-format off */
|
||||
switch (m->action) {
|
||||
case ACT_PUNCHING: cancel = act_punching(m); break;
|
||||
|
|
@ -506,6 +508,7 @@ s32 mario_execute_object_action(struct MarioState *m) {
|
|||
case ACT_RELEASING_BOWSER: cancel = act_releasing_bowser(m); break;
|
||||
}
|
||||
/* clang-format on */
|
||||
}
|
||||
|
||||
if (!cancel && (m->input & INPUT_IN_WATER)) {
|
||||
m->particleFlags |= PARTICLE_IDLE_WATER_WAVE;
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@
|
|||
#include "thread6.h"
|
||||
#include "pc/configfile.h"
|
||||
#include "pc/network/network.h"
|
||||
#include "pc/lua/smlua.h"
|
||||
|
||||
s32 check_common_idle_cancels(struct MarioState *m) {
|
||||
mario_drop_held_object(m);
|
||||
|
|
@ -1146,6 +1147,7 @@ s32 mario_execute_stationary_action(struct MarioState *m) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
if (!smlua_call_action_hook(m, &sp24)) {
|
||||
/* clang-format off */
|
||||
switch (m->action) {
|
||||
case ACT_IDLE: sp24 = act_idle(m); break;
|
||||
|
|
@ -1186,6 +1188,7 @@ s32 mario_execute_stationary_action(struct MarioState *m) {
|
|||
case ACT_HOLD_BUTT_SLIDE_STOP: sp24 = act_hold_butt_slide_stop(m); break;
|
||||
}
|
||||
/* clang-format on */
|
||||
}
|
||||
|
||||
if (!sp24) {
|
||||
if (m->input & INPUT_IN_WATER) {
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@
|
|||
#include "thread6.h"
|
||||
#include "pc/configfile.h"
|
||||
#include "pc/network/network.h"
|
||||
#include "pc/lua/smlua.h"
|
||||
|
||||
#define MIN_SWIM_STRENGTH 160
|
||||
#define MIN_SWIM_SPEED 16.0f
|
||||
|
|
@ -1543,6 +1544,7 @@ s32 mario_execute_submerged_action(struct MarioState *m) {
|
|||
m->marioBodyState->headAngle[1] = 0;
|
||||
m->marioBodyState->headAngle[2] = 0;
|
||||
|
||||
if (!smlua_call_action_hook(m, &cancel)) {
|
||||
/* clang-format off */
|
||||
switch (m->action) {
|
||||
case ACT_WATER_IDLE: cancel = act_water_idle(m); break;
|
||||
|
|
@ -1579,6 +1581,7 @@ s32 mario_execute_submerged_action(struct MarioState *m) {
|
|||
case ACT_HOLD_METAL_WATER_JUMP_LAND: cancel = act_hold_metal_water_jump_land(m); break;
|
||||
}
|
||||
/* clang-format on */
|
||||
}
|
||||
|
||||
return cancel;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -286,7 +286,7 @@ void bhv_mario_update(void) {
|
|||
|
||||
particleFlags = execute_mario_action(gCurrentObject);
|
||||
gCurrentObject->oMarioParticleFlags = particleFlags;
|
||||
smlua_call_hooks_param(HOOK_MARIO_UPDATE, stateIndex);
|
||||
smlua_call_event_hooks_param(HOOK_MARIO_UPDATE, stateIndex);
|
||||
|
||||
// Mario code updates MarioState's versions of position etc, so we need
|
||||
// to sync it with the Mario object
|
||||
|
|
|
|||
|
|
@ -2,6 +2,10 @@
|
|||
|
||||
lua_State* gLuaState = NULL;
|
||||
|
||||
///////////////////
|
||||
// hooked events //
|
||||
///////////////////
|
||||
|
||||
#define MAX_HOOKED_REFERENCES 64
|
||||
|
||||
struct LuaHookedEvent {
|
||||
|
|
@ -29,30 +33,7 @@ int smlua_hook_event(lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
static void smlua_execfile(char* path) {
|
||||
lua_State* L = gLuaState;
|
||||
if (luaL_dofile(L, path) != LUA_OK) {
|
||||
LOG_LUA("LUA: Failed to load lua file.");
|
||||
puts(lua_tostring(L, lua_gettop(L)));
|
||||
}
|
||||
lua_pop(L, lua_gettop(L));
|
||||
}
|
||||
|
||||
void smlua_init(void) {
|
||||
gLuaState = luaL_newstate();
|
||||
lua_State* L = gLuaState;
|
||||
luaL_openlibs(L);
|
||||
|
||||
lua_pushcfunction(L, smlua_hook_event);
|
||||
lua_setglobal(L, "hook_event");
|
||||
|
||||
smlua_bind_get_set();
|
||||
|
||||
smlua_execfile("mods/constants.lua");
|
||||
smlua_execfile("mods/test.lua");
|
||||
}
|
||||
|
||||
void smlua_call_hooks(enum LuaHookedEventType hookType) {
|
||||
void smlua_call_event_hooks(enum LuaHookedEventType hookType) {
|
||||
lua_State* L = gLuaState;
|
||||
struct LuaHookedEvent* hook = &sHookedEvents[hookType];
|
||||
for (int i = 0; i < hook->count; i++) {
|
||||
|
|
@ -67,7 +48,7 @@ void smlua_call_hooks(enum LuaHookedEventType hookType) {
|
|||
}
|
||||
}
|
||||
|
||||
void smlua_call_hooks_param(enum LuaHookedEventType hookType, int param) {
|
||||
void smlua_call_event_hooks_param(enum LuaHookedEventType hookType, int param) {
|
||||
lua_State* L = gLuaState;
|
||||
struct LuaHookedEvent* hook = &sHookedEvents[hookType];
|
||||
for (int i = 0; i < hook->count; i++) {
|
||||
|
|
@ -85,11 +66,112 @@ void smlua_call_hooks_param(enum LuaHookedEventType hookType, int param) {
|
|||
}
|
||||
}
|
||||
|
||||
////////////////////
|
||||
// hooked actions //
|
||||
////////////////////
|
||||
|
||||
struct LuaHookedMarioAction {
|
||||
u32 action;
|
||||
int reference;
|
||||
};
|
||||
|
||||
#define MAX_HOOKED_ACTIONS 64
|
||||
|
||||
static struct LuaHookedMarioAction sHookedMarioActions[MAX_HOOKED_ACTIONS] = { 0 };
|
||||
static int sHookedMarioActionsCount = 0;
|
||||
|
||||
int smlua_hook_mario_action(lua_State* L) {
|
||||
if (sHookedMarioActionsCount >= MAX_HOOKED_ACTIONS) {
|
||||
LOG_LUA("LUA: Hooked mario actions exceeded maximum references!");
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct LuaHookedMarioAction* hooked = &sHookedMarioActions[sHookedMarioActionsCount];
|
||||
hooked->action = lua_tointeger(L, -2);
|
||||
hooked->reference = luaL_ref(L, LUA_REGISTRYINDEX);
|
||||
|
||||
sHookedMarioActionsCount++;
|
||||
return 1;
|
||||
}
|
||||
|
||||
bool smlua_call_action_hook(struct MarioState* m, s32* returnValue) {
|
||||
lua_State* L = gLuaState;
|
||||
for (int i = 0; i < sHookedMarioActionsCount; i++) {
|
||||
if (sHookedMarioActions[i].action == m->action) {
|
||||
// push the callback onto the stack
|
||||
lua_rawgeti(L, LUA_REGISTRYINDEX, sHookedMarioActions[i].reference);
|
||||
|
||||
// push param
|
||||
lua_pushinteger(L, m->playerIndex);
|
||||
|
||||
// call the callback
|
||||
if (0 != lua_pcall(L, 1, 1, 0)) {
|
||||
LOG_LUA("LUA: Failed to call the callback: %s", lua_tostring(L, -1));
|
||||
continue;
|
||||
}
|
||||
|
||||
// output the return value
|
||||
*returnValue = lua_tointeger(L, -1);
|
||||
lua_pop(L, 1);
|
||||
|
||||
printf(">> action hook return: %d\n", *returnValue);
|
||||
fflush(stdout);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
//////////
|
||||
// main //
|
||||
//////////
|
||||
|
||||
static void smlua_execfile(char* path) {
|
||||
lua_State* L = gLuaState;
|
||||
if (luaL_dofile(L, path) != LUA_OK) {
|
||||
LOG_LUA("LUA: Failed to load lua file.");
|
||||
puts(lua_tostring(L, lua_gettop(L)));
|
||||
}
|
||||
lua_pop(L, lua_gettop(L));
|
||||
}
|
||||
|
||||
void smlua_init(void) {
|
||||
gLuaState = luaL_newstate();
|
||||
lua_State* L = gLuaState;
|
||||
luaL_openlibs(L);
|
||||
|
||||
lua_pushcfunction(L, smlua_hook_event);
|
||||
lua_setglobal(L, "hook_event");
|
||||
|
||||
lua_pushcfunction(L, smlua_hook_mario_action);
|
||||
lua_setglobal(L, "hook_mario_action");
|
||||
|
||||
smlua_bind_get_set();
|
||||
|
||||
smlua_execfile("mods/constants.lua");
|
||||
smlua_execfile("mods/test.lua");
|
||||
}
|
||||
|
||||
void smlua_update(void) {
|
||||
smlua_call_hooks(HOOK_UPDATE);
|
||||
smlua_call_event_hooks(HOOK_UPDATE);
|
||||
}
|
||||
|
||||
void smlua_shutdown(void) {
|
||||
lua_State* L = gLuaState;
|
||||
lua_close(L);
|
||||
|
||||
for (int i = 0; i < HOOK_MAX; i++) {
|
||||
for (int j = 0; j < sHookedEvents[i].count; j++) {
|
||||
sHookedEvents[i].reference[j] = 0;
|
||||
}
|
||||
sHookedEvents[i].count = 0;
|
||||
}
|
||||
|
||||
for (int i = 0; i < sHookedMarioActionsCount; i++) {
|
||||
sHookedMarioActions[i].action = 0;
|
||||
sHookedMarioActions[i].reference = 0;
|
||||
}
|
||||
sHookedMarioActionsCount = 0;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,11 +22,14 @@ enum LuaHookedEventType {
|
|||
|
||||
extern lua_State* gLuaState;
|
||||
|
||||
void smlua_call_event_hooks(enum LuaHookedEventType hookType);
|
||||
void smlua_call_event_hooks_param(enum LuaHookedEventType hookType, int param);
|
||||
|
||||
|
||||
bool smlua_call_action_hook(struct MarioState* m, s32* returnValue);
|
||||
|
||||
void smlua_init(void);
|
||||
void smlua_update(void);
|
||||
void smlua_shutdown(void);
|
||||
|
||||
void smlua_call_hooks(enum LuaHookedEventType hookType);
|
||||
void smlua_call_hooks_param(enum LuaHookedEventType hookType, int param);
|
||||
|
||||
#endif
|
||||
|
|
@ -1,10 +1,434 @@
|
|||
#include "smlua.h"
|
||||
|
||||
#include "game\level_update.h"
|
||||
#include "game\area.h"
|
||||
#include "game\mario.h"
|
||||
#include "game/level_update.h"
|
||||
#include "game/area.h"
|
||||
#include "game/mario.h"
|
||||
#include "audio/external.h"
|
||||
#include "object_fields.h"
|
||||
|
||||
enum LuaValueType {
|
||||
LVT_U8,
|
||||
LVT_U16,
|
||||
LVT_U32,
|
||||
LVT_S8,
|
||||
LVT_S16,
|
||||
LVT_S32,
|
||||
LVT_F32,
|
||||
LVT_VEC3S,
|
||||
LVT_VEC3F,
|
||||
};
|
||||
|
||||
struct LuaObjectField {
|
||||
const char* key;
|
||||
enum LuaValueType valueType;
|
||||
size_t valueOffset;
|
||||
bool immutable;
|
||||
};
|
||||
|
||||
#define LUA_VEC3S_FIELD_COUNT 3
|
||||
static struct LuaObjectField sVec3sFields[LUA_VEC3S_FIELD_COUNT] = {
|
||||
{ "x", LVT_S16, sizeof(s16) * 0, false },
|
||||
{ "y", LVT_S16, sizeof(s16) * 1, false },
|
||||
{ "z", LVT_S16, sizeof(s16) * 2, false },
|
||||
};
|
||||
|
||||
#define LUA_VEC3F_FIELD_COUNT 3
|
||||
static struct LuaObjectField sVec3fFields[LUA_VEC3F_FIELD_COUNT] = {
|
||||
{ "x", LVT_F32, sizeof(f32) * 0, false },
|
||||
{ "y", LVT_F32, sizeof(f32) * 1, false },
|
||||
{ "z", LVT_F32, sizeof(f32) * 2, false },
|
||||
};
|
||||
|
||||
#define LUA_MARIO_STATE_FIELD_COUNT 55
|
||||
static struct LuaObjectField sMarioStateFields[LUA_MARIO_STATE_FIELD_COUNT] = {
|
||||
{ "playerIndex", LVT_U16, offsetof(struct MarioState, playerIndex) , true },
|
||||
{ "input", LVT_U16, offsetof(struct MarioState, input) , false },
|
||||
{ "flags", LVT_U32, offsetof(struct MarioState, flags) , false },
|
||||
{ "particleFlags", LVT_U32, offsetof(struct MarioState, particleFlags) , false },
|
||||
{ "action", LVT_U32, offsetof(struct MarioState, action) , false },
|
||||
{ "prevAction", LVT_U32, offsetof(struct MarioState, prevAction) , false },
|
||||
{ "terrainSoundAddend", LVT_U32, offsetof(struct MarioState, terrainSoundAddend) , false },
|
||||
{ "actionState", LVT_U16, offsetof(struct MarioState, actionState) , false },
|
||||
{ "actionTimer", LVT_U16, offsetof(struct MarioState, actionTimer) , false },
|
||||
{ "actionArg", LVT_U32, offsetof(struct MarioState, actionArg) , false },
|
||||
{ "intendedMag", LVT_F32, offsetof(struct MarioState, intendedMag) , false },
|
||||
{ "intendedYaw", LVT_S16, offsetof(struct MarioState, intendedYaw) , false },
|
||||
{ "invincTimer", LVT_S16, offsetof(struct MarioState, invincTimer) , false },
|
||||
{ "framesSinceA", LVT_U8, offsetof(struct MarioState, framesSinceA) , false },
|
||||
{ "framesSinceB", LVT_U8, offsetof(struct MarioState, framesSinceB) , false },
|
||||
{ "wallKickTimer", LVT_U8, offsetof(struct MarioState, wallKickTimer) , false },
|
||||
{ "doubleJumpTimer", LVT_U8, offsetof(struct MarioState, doubleJumpTimer) , false },
|
||||
{ "faceAngle", LVT_VEC3S, offsetof(struct MarioState, faceAngle) , true },
|
||||
{ "angleVel", LVT_VEC3S, offsetof(struct MarioState, angleVel) , true },
|
||||
{ "slideYaw", LVT_S16, offsetof(struct MarioState, slideYaw) , false },
|
||||
{ "twirlYaw", LVT_S16, offsetof(struct MarioState, twirlYaw) , false },
|
||||
{ "pos", LVT_VEC3F, offsetof(struct MarioState, pos) , true },
|
||||
{ "vel", LVT_VEC3F, offsetof(struct MarioState, vel) , true },
|
||||
{ "forwardVel", LVT_F32, offsetof(struct MarioState, forwardVel) , false },
|
||||
{ "slideVelX", LVT_F32, offsetof(struct MarioState, slideVelX) , false },
|
||||
{ "slideVelZ", LVT_F32, offsetof(struct MarioState, slideVelZ) , false },
|
||||
{ "ceilHeight", LVT_F32, offsetof(struct MarioState, ceilHeight) , false },
|
||||
{ "floorHeight", LVT_F32, offsetof(struct MarioState, floorHeight) , false },
|
||||
{ "floorAngle", LVT_S16, offsetof(struct MarioState, floorAngle) , false },
|
||||
{ "waterLevel", LVT_S16, offsetof(struct MarioState, waterLevel) , false },
|
||||
{ "collidedObjInteractTypes", LVT_U32, offsetof(struct MarioState, collidedObjInteractTypes), false },
|
||||
{ "numCoins", LVT_S16, offsetof(struct MarioState, numCoins) , false },
|
||||
{ "numStars", LVT_S16, offsetof(struct MarioState, numStars) , false },
|
||||
{ "mechani", LVT_S8, offsetof(struct MarioState, numKeys) , false },
|
||||
{ "numLives", LVT_S8, offsetof(struct MarioState, numLives) , false },
|
||||
{ "health", LVT_S16, offsetof(struct MarioState, health) , false },
|
||||
{ "unkB0", LVT_S16, offsetof(struct MarioState, unkB0) , false },
|
||||
{ "hurtCounter", LVT_U8, offsetof(struct MarioState, hurtCounter) , false },
|
||||
{ "healCounter", LVT_U8, offsetof(struct MarioState, healCounter) , false },
|
||||
{ "squishTimer", LVT_U8, offsetof(struct MarioState, squishTimer) , false },
|
||||
{ "fadeWarpOpacity", LVT_U8, offsetof(struct MarioState, fadeWarpOpacity) , false },
|
||||
{ "capTimer", LVT_U16, offsetof(struct MarioState, capTimer) , false },
|
||||
{ "prevNumStarsForDialog", LVT_S16, offsetof(struct MarioState, prevNumStarsForDialog) , false },
|
||||
{ "peakHeight", LVT_F32, offsetof(struct MarioState, peakHeight) , false },
|
||||
{ "quicksandDepth", LVT_F32, offsetof(struct MarioState, quicksandDepth) , false },
|
||||
{ "unkC4", LVT_F32, offsetof(struct MarioState, unkC4) , false },
|
||||
{ "currentRoom", LVT_S16, offsetof(struct MarioState, currentRoom) , false },
|
||||
{ "isSnoring", LVT_U8, offsetof(struct MarioState, isSnoring) , false },
|
||||
{ "freeze", LVT_U8, offsetof(struct MarioState, freeze) , false },
|
||||
{ "splineKeyframeFraction", LVT_F32, offsetof(struct MarioState, splineKeyframeFraction) , false },
|
||||
{ "splineState", LVT_S32, offsetof(struct MarioState, splineState) , false },
|
||||
{ "nonInstantWarpPos", LVT_VEC3F, offsetof(struct MarioState, nonInstantWarpPos) , true },
|
||||
{ "wasNetworkVisible", LVT_U8, offsetof(struct MarioState, wasNetworkVisible) , false },
|
||||
{ "minimumBoneY", LVT_F32, offsetof(struct MarioState, minimumBoneY) , false },
|
||||
{ "curAnimOffset", LVT_F32, offsetof(struct MarioState, curAnimOffset) , false },
|
||||
/* TODO: implement
|
||||
struct Surface *wall;
|
||||
struct Surface *ceil;
|
||||
struct Surface *floor;
|
||||
struct Object *interactObj;
|
||||
struct Object *heldObj;
|
||||
struct Object *usedObj;
|
||||
struct Object *riddenObj;
|
||||
struct Object *marioObj;
|
||||
struct SpawnInfo *spawnInfo;
|
||||
struct Area *area;
|
||||
struct PlayerCameraState *statusForCamera;
|
||||
struct MarioBodyState *marioBodyState;
|
||||
struct Controller *controller;
|
||||
struct MarioAnimation *animation;
|
||||
struct Object* heldByObj;
|
||||
struct Object* bubbleObj;
|
||||
Vec4s* splineKeyframe;
|
||||
struct Character* character;
|
||||
*/
|
||||
};
|
||||
|
||||
enum LuaObjectType {
|
||||
LOT_VEC3S,
|
||||
LOT_VEC3F,
|
||||
LOT_MARIO_STATE,
|
||||
LOT_MAX,
|
||||
};
|
||||
|
||||
struct LuaObjectTable {
|
||||
enum LuaObjectType objectType;
|
||||
struct LuaObjectField* fields;
|
||||
u16 fieldCount;
|
||||
};
|
||||
|
||||
struct LuaObjectTable sLuaObjectTable[LOT_MAX] = {
|
||||
{ LOT_VEC3S, sVec3sFields, LUA_VEC3S_FIELD_COUNT },
|
||||
{ LOT_VEC3F, sVec3fFields, LUA_VEC3F_FIELD_COUNT },
|
||||
{ LOT_MARIO_STATE, sMarioStateFields, LUA_MARIO_STATE_FIELD_COUNT },
|
||||
};
|
||||
|
||||
static struct LuaObjectField* smlua_get_object_field(struct LuaObjectTable* ot, const char* key) {
|
||||
// TODO: change this to binary search or hash table or something
|
||||
for (int i = 0; i < ot->fieldCount; i++) {
|
||||
if (!strcmp(ot->fields[i].key, key)) {
|
||||
return &ot->fields[i];
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// iteration 3
|
||||
|
||||
static void smlua_push_object(lua_State* L, enum LuaObjectType lot, void* p) {
|
||||
lua_newtable(L);
|
||||
smlua_push_integer_field(lot, "_lot");
|
||||
smlua_push_integer_field((u64)p, "_pointer");
|
||||
lua_pushglobaltable(L);
|
||||
lua_getfield(gLuaState, -1, "_CObject");
|
||||
lua_setmetatable(L, -3);
|
||||
lua_pop(L, 1); // pop global table
|
||||
}
|
||||
|
||||
static int smlua__get_field(lua_State* L) {
|
||||
enum LuaObjectType lot = lua_tointeger(L, -3);
|
||||
u64 pointer = lua_tointeger(L, -2);
|
||||
const char* key = lua_tostring(L, -1);
|
||||
|
||||
if (pointer == 0) {
|
||||
LOG_LUA("_get_field on null pointer");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (lot >= LOT_MAX) {
|
||||
LOG_LUA("_get_field on invalid LOT '%u'", lot);
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct LuaObjectField* data = smlua_get_object_field(&sLuaObjectTable[lot], key);
|
||||
if (data == NULL) {
|
||||
LOG_LUA("_get_field on invalid key '%s'", key);
|
||||
return 0;
|
||||
}
|
||||
|
||||
u8* p = ((u8*)pointer) + data->valueOffset;
|
||||
switch (data->valueType) {
|
||||
case LVT_U8: lua_pushinteger(L, *(u8* )p); break;
|
||||
case LVT_U16: lua_pushinteger(L, *(u16*)p); break;
|
||||
case LVT_U32: lua_pushinteger(L, *(u32*)p); break;
|
||||
case LVT_S8: lua_pushinteger(L, *(s8* )p); break;
|
||||
case LVT_S16: lua_pushinteger(L, *(s16*)p); break;
|
||||
case LVT_S32: lua_pushinteger(L, *(s32*)p); break;
|
||||
case LVT_F32: lua_pushnumber( L, *(f32*)p); break;
|
||||
case LVT_VEC3S: smlua_push_object(L, LOT_VEC3S, p); break;
|
||||
case LVT_VEC3F: smlua_push_object(L, LOT_VEC3F, p); break;
|
||||
default:
|
||||
LOG_LUA("_get_field on unimplemented type '%d', key '%s'", data->valueType, key);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int smlua__set_field(lua_State* L) {
|
||||
enum LuaObjectType lot = lua_tointeger(L, -4);
|
||||
u64 pointer = lua_tointeger(L, -3);
|
||||
const char* key = lua_tostring(L, -2);
|
||||
|
||||
if (pointer == 0) {
|
||||
LOG_LUA("_get_field on null pointer");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (lot >= LOT_MAX) {
|
||||
LOG_LUA("_get_field on invalid LOT '%u'", lot);
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct LuaObjectField* data = smlua_get_object_field(&sLuaObjectTable[lot], key);
|
||||
if (data == NULL) {
|
||||
LOG_LUA("_get_field on invalid key '%s'", key);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (data->immutable) {
|
||||
LOG_LUA("_get_field on immutable key '%s'", key);
|
||||
return 0;
|
||||
}
|
||||
|
||||
u8* p = ((u8*)pointer) + data->valueOffset;
|
||||
switch (data->valueType) {
|
||||
case LVT_U8: *(u8*) p = lua_tointeger(L, -1); break;
|
||||
case LVT_U16: *(u16*)p = lua_tointeger(L, -1); break;
|
||||
case LVT_U32: *(u32*)p = lua_tointeger(L, -1); break;
|
||||
case LVT_S8: *(s8*) p = lua_tointeger(L, -1); break;
|
||||
case LVT_S16: *(s16*)p = lua_tointeger(L, -1); break;
|
||||
case LVT_S32: *(s32*)p = lua_tointeger(L, -1); break;
|
||||
case LVT_F32: *(f32*)p = lua_tonumber(L, -1); break;
|
||||
default:
|
||||
LOG_LUA("_get_field on unimplemented type '%d', key '%s'", data->valueType, key);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
// iteration 2
|
||||
|
||||
static int smlua_get_mario_state_field(lua_State* L) {
|
||||
u8 index = lua_tointeger(L, -2);
|
||||
const char* key = lua_tostring(L, -1);
|
||||
if (index >= MAX_PLAYERS) {
|
||||
LOG_LUA("get_mario_state_field() on invalid index '%d'", index);
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct LuaObjectField* data = smlua_get_object_field(&sLuaObjectTable[LOT_MARIO_STATE], key);
|
||||
if (data == NULL) {
|
||||
LOG_LUA("get_mario_state_field() on invalid key '%s'", key);
|
||||
return 0;
|
||||
}
|
||||
|
||||
u8* p = ((u8*)&gMarioStates[index]) + data->valueOffset;
|
||||
switch (data->valueType) {
|
||||
case LVT_U8: lua_pushinteger(L, *(u8* )p); break;
|
||||
case LVT_U16: lua_pushinteger(L, *(u16*)p); break;
|
||||
case LVT_U32: lua_pushinteger(L, *(u32*)p); break;
|
||||
case LVT_S8: lua_pushinteger(L, *(s8* )p); break;
|
||||
case LVT_S16: lua_pushinteger(L, *(s16*)p); break;
|
||||
case LVT_S32: lua_pushinteger(L, *(s32*)p); break;
|
||||
case LVT_F32: lua_pushnumber( L, *(f32*)p); break;
|
||||
case LVT_VEC3S:
|
||||
lua_newtable(L);
|
||||
smlua_push_integer_field((u64)p, "_pointer");
|
||||
lua_pushglobaltable(L);
|
||||
lua_getfield(gLuaState, -1, "_Vec3sMeta");
|
||||
lua_setmetatable(L, -3);
|
||||
lua_pop(L, 1); // pop global table
|
||||
break;
|
||||
case LVT_VEC3F:
|
||||
lua_newtable(L);
|
||||
smlua_push_integer_field((u64)p, "_pointer");
|
||||
lua_pushglobaltable(L);
|
||||
lua_getfield(gLuaState, -1, "_Vec3fMeta");
|
||||
lua_setmetatable(L, -3);
|
||||
lua_pop(L, 1); // pop global table
|
||||
break;
|
||||
default:
|
||||
LOG_LUA("get_mario_state_field() on unimplemented type '%d', key '%s'", data->valueType, key);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int smlua_set_mario_state_field(lua_State* L) {
|
||||
u8 index = lua_tointeger(L, -3);
|
||||
const char* key = lua_tostring(L, -2);
|
||||
if (index >= MAX_PLAYERS) {
|
||||
LOG_LUA("set_mario_state_field() on invalid index '%d'", index);
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct LuaObjectField* data = smlua_get_object_field(&sLuaObjectTable[LOT_MARIO_STATE], key);
|
||||
if (data == NULL) {
|
||||
LOG_LUA("set_mario_state_field() on invalid key '%s'", key);
|
||||
return 0;
|
||||
}
|
||||
if (data->immutable) {
|
||||
LOG_LUA("set_mario_state_field() on immutable key '%s'", key);
|
||||
return 0;
|
||||
}
|
||||
|
||||
u8* p = ((u8*)&gMarioStates[index]) + data->valueOffset;
|
||||
switch (data->valueType) {
|
||||
case LVT_U8: *(u8* )p = lua_tointeger(L, -1); break;
|
||||
case LVT_U16: *(u16*)p = lua_tointeger(L, -1); break;
|
||||
case LVT_U32: *(u32*)p = lua_tointeger(L, -1); break;
|
||||
case LVT_S8: *(s8* )p = lua_tointeger(L, -1); break;
|
||||
case LVT_S16: *(s16*)p = lua_tointeger(L, -1); break;
|
||||
case LVT_S32: *(s32*)p = lua_tointeger(L, -1); break;
|
||||
case LVT_F32: *(f32*)p = lua_tonumber( L, -1); break;
|
||||
default:
|
||||
LOG_LUA("set_mario_state_field() on unimplemented type '%d', key '%s'", data->valueType, key);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int smlua_get_vec3s_field(lua_State* L) {
|
||||
u64 pointer = lua_tointeger(L, -2);
|
||||
const char* key = lua_tostring(L, -1);
|
||||
|
||||
if (pointer == 0) {
|
||||
LOG_LUA("get_vec3s_field() on null pointer");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp("x", key)) {
|
||||
lua_pushinteger(L, ((s16*)pointer)[0]);
|
||||
}
|
||||
else if (!strcmp("y", key)) {
|
||||
lua_pushinteger(L, ((s16*)pointer)[1]);
|
||||
}
|
||||
else if (!strcmp("z", key)) {
|
||||
lua_pushinteger(L, ((s16*)pointer)[2]);
|
||||
}
|
||||
else {
|
||||
LOG_LUA("get_vec3s_field() on invalid key '%s'", key);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int smlua_set_vec3s_field(lua_State* L) {
|
||||
u64 pointer = lua_tointeger(L, -3);
|
||||
const char* key = lua_tostring(L, -2);
|
||||
s16 value = lua_tointeger(L, -1);
|
||||
|
||||
if (pointer == 0) {
|
||||
LOG_LUA("set_vec3s_field() on null pointer");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp("x", key)) {
|
||||
((s16*)pointer)[0] = value;
|
||||
}
|
||||
else if (!strcmp("y", key)) {
|
||||
((s16*)pointer)[1] = value;
|
||||
}
|
||||
else if (!strcmp("z", key)) {
|
||||
((s16*)pointer)[2] = value;
|
||||
}
|
||||
else {
|
||||
LOG_LUA("set_vec3s_field() on invalid key '%s'", key);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int smlua_get_vec3f_field(lua_State* L) {
|
||||
u64 pointer = lua_tointeger(L, -2);
|
||||
const char* key = lua_tostring(L, -1);
|
||||
|
||||
if (pointer == 0) {
|
||||
LOG_LUA("get_vec3f_field() on null pointer");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp("x", key)) {
|
||||
lua_pushnumber(L, ((f32*)pointer)[0]);
|
||||
} else if (!strcmp("y", key)) {
|
||||
lua_pushnumber(L, ((f32*)pointer)[1]);
|
||||
} else if (!strcmp("z", key)) {
|
||||
lua_pushnumber(L, ((f32*)pointer)[2]);
|
||||
} else {
|
||||
LOG_LUA("get_vec3f_field() on invalid key '%s'", key);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int smlua_set_vec3f_field(lua_State* L) {
|
||||
u64 pointer = lua_tointeger(L, -3);
|
||||
const char* key = lua_tostring(L, -2);
|
||||
f32 value = lua_tonumber(L, -1);
|
||||
|
||||
if (pointer == 0) {
|
||||
LOG_LUA("set_vec3f_field() on null pointer");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp("x", key)) {
|
||||
((f32*)pointer)[0] = value;
|
||||
} else if (!strcmp("y", key)) {
|
||||
((f32*)pointer)[1] = value;
|
||||
} else if (!strcmp("z", key)) {
|
||||
((f32*)pointer)[2] = value;
|
||||
} else {
|
||||
LOG_LUA("set_vec3f_field() on invalid key '%s'", key);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
// iteration 1
|
||||
|
||||
static int smlua_get_mario_state(lua_State* L) {
|
||||
int index = lua_tointeger(L, -1);
|
||||
lua_newtable(L);
|
||||
|
|
@ -88,7 +512,24 @@ static int smlua_get_mario_state(lua_State* L) {
|
|||
//struct Area* area;
|
||||
//struct PlayerCameraState* statusForCamera;
|
||||
//struct MarioBodyState* marioBodyState;
|
||||
//struct Controller* controller;
|
||||
|
||||
{
|
||||
lua_newtable(L);
|
||||
smlua_push_integer_field(m->controller->buttonDown, "buttonDown");
|
||||
smlua_push_integer_field(m->controller->buttonPressed, "buttonPressed");
|
||||
smlua_push_integer_field(m->controller->extStickX, "extStickX");
|
||||
smlua_push_integer_field(m->controller->extStickY, "extStickY");
|
||||
smlua_push_integer_field(m->controller->port, "port");
|
||||
smlua_push_integer_field(m->controller->rawStickX, "rawStickX");
|
||||
smlua_push_integer_field(m->controller->rawStickY, "rawStickY");
|
||||
smlua_push_number_field(m->controller->stickMag, "stickMag");
|
||||
smlua_push_number_field(m->controller->stickX, "stickX");
|
||||
smlua_push_number_field(m->controller->stickY, "stickY");
|
||||
//m->controller->controllerData
|
||||
//m->controller->statusData
|
||||
lua_setfield(L, t, "controller");
|
||||
}
|
||||
|
||||
//struct MarioAnimation* animation;
|
||||
|
||||
smlua_push_integer_field(m->collidedObjInteractTypes, "collidedObjInteractTypes");
|
||||
|
|
@ -237,7 +678,23 @@ static int smlua_set_mario_state(lua_State* L) {
|
|||
//struct Area* area;
|
||||
//struct PlayerCameraState* statusForCamera;
|
||||
//struct MarioBodyState* marioBodyState;
|
||||
//struct Controller* controller;
|
||||
|
||||
{
|
||||
lua_getfield(L, -1, "controller");
|
||||
smlua_get_u16_field(&m->controller->buttonDown, "buttonDown");
|
||||
smlua_get_u16_field(&m->controller->buttonPressed, "buttonPressed");
|
||||
smlua_get_s16_field(&m->controller->extStickX, "extStickX");
|
||||
smlua_get_s16_field(&m->controller->extStickY, "extStickY");
|
||||
smlua_get_s32_field(&m->controller->port, "port");
|
||||
smlua_get_s16_field(&m->controller->rawStickX, "rawStickX");
|
||||
smlua_get_s16_field(&m->controller->rawStickY, "rawStickY");
|
||||
smlua_get_number_field(&m->controller->stickMag, "stickMag");
|
||||
smlua_get_number_field(&m->controller->stickX, "stickX");
|
||||
//m->controller->controllerData
|
||||
//m->controller->statusData
|
||||
lua_pop(L, 1);
|
||||
}
|
||||
|
||||
//struct MarioAnimation* animation;
|
||||
|
||||
smlua_get_u32_field(&m->collidedObjInteractTypes, "collidedObjInteractTypes");
|
||||
|
|
@ -291,17 +748,100 @@ static int smlua_set_mario_state(lua_State* L) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
// END iteration 1
|
||||
|
||||
int smlua_set_mario_action(lua_State* L) {
|
||||
int index = lua_tointeger(L, -3);
|
||||
u32 action = lua_tointeger(L, -2);
|
||||
u32 actionArg = lua_tointeger(L, -1);
|
||||
set_mario_action(&gMarioStates[index], action, actionArg);
|
||||
lua_pushinteger(L, set_mario_action(&gMarioStates[index], action, actionArg));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_set_jumping_action(lua_State* L) {
|
||||
int index = lua_tointeger(L, -3);
|
||||
u32 action = lua_tointeger(L, -2);
|
||||
u32 actionArg = lua_tointeger(L, -1);
|
||||
lua_pushinteger(L, set_jumping_action(&gMarioStates[index], action, actionArg));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_play_mario_sound(lua_State* L) {
|
||||
int index = lua_tointeger(L, -3);
|
||||
s32 actionSound = lua_tointeger(L, -2);
|
||||
s32 marioSound = lua_tointeger(L, -1);
|
||||
play_mario_sound(&gMarioStates[index], actionSound, marioSound);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_mario_set_forward_vel(lua_State* L) {
|
||||
int index = lua_tointeger(L, -2);
|
||||
f32 forwardVel = lua_tonumber(L, -1);
|
||||
mario_set_forward_vel(&gMarioStates[index], forwardVel);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_play_sound(lua_State* L) {
|
||||
s32 soundsBits = lua_tointeger(L, -4);
|
||||
f32 pos[3] = { lua_tonumber(L, -3), lua_tonumber(L, -2), lua_tonumber(L, -1) };
|
||||
extern void play_sound(s32 soundBits, f32 * pos);
|
||||
play_sound(soundsBits, pos);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_set_mario_animation(lua_State* L) {
|
||||
int index = lua_tointeger(L, -2);
|
||||
s32 targetAnimID = lua_tointeger(L, -1);
|
||||
lua_pushinteger(L, set_mario_animation(&gMarioStates[index], targetAnimID));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_update_sliding(lua_State* L) {
|
||||
int index = lua_tointeger(L, -2);
|
||||
f32 stopSpeed = lua_tonumber(L, -1);
|
||||
extern s32 update_sliding(struct MarioState* m, f32 stopSpeed);
|
||||
lua_pushinteger(L, update_sliding(&gMarioStates[index], stopSpeed));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_common_slide_action(lua_State* L) {
|
||||
int index = lua_tointeger(L, -4);
|
||||
u32 endAction = lua_tointeger(L, -3);
|
||||
u32 airAction = lua_tointeger(L, -2);
|
||||
u32 animation = lua_tointeger(L, -1);
|
||||
extern void common_slide_action(struct MarioState* m, u32 endAction, u32 airAction, s32 animation);
|
||||
common_slide_action(&gMarioStates[index], endAction, airAction, animation);
|
||||
return 1;
|
||||
}
|
||||
|
||||
int smlua_set_anim_to_frame(lua_State* L) {
|
||||
int index = lua_tointeger(L, -2);
|
||||
s16 animFrame = lua_tonumber(L, -1);
|
||||
set_anim_to_frame(&gMarioStates[index], animFrame);
|
||||
return 1;
|
||||
}
|
||||
|
||||
void smlua_bind_get_set(void) {
|
||||
lua_State* L = gLuaState;
|
||||
|
||||
lua_pushcfunction(L, smlua_get_mario_state_field);
|
||||
lua_setglobal(L, "get_mario_state_field");
|
||||
|
||||
lua_pushcfunction(L, smlua_set_mario_state_field);
|
||||
lua_setglobal(L, "set_mario_state_field");
|
||||
|
||||
lua_pushcfunction(L, smlua_get_vec3s_field);
|
||||
lua_setglobal(L, "get_vec3s_field");
|
||||
|
||||
lua_pushcfunction(L, smlua_set_vec3s_field);
|
||||
lua_setglobal(L, "set_vec3s_field");
|
||||
|
||||
lua_pushcfunction(L, smlua_get_vec3f_field);
|
||||
lua_setglobal(L, "get_vec3f_field");
|
||||
|
||||
lua_pushcfunction(L, smlua_set_vec3f_field);
|
||||
lua_setglobal(L, "set_vec3f_field");
|
||||
|
||||
lua_pushcfunction(L, smlua_get_mario_state);
|
||||
lua_setglobal(L, "get_mario_state");
|
||||
|
||||
|
|
@ -311,4 +851,28 @@ void smlua_bind_get_set(void) {
|
|||
lua_pushcfunction(L, smlua_set_mario_action);
|
||||
lua_setglobal(L, "set_mario_action");
|
||||
|
||||
lua_pushcfunction(L, smlua_set_jumping_action);
|
||||
lua_setglobal(L, "set_jumping_action");
|
||||
|
||||
lua_pushcfunction(L, smlua_play_mario_sound);
|
||||
lua_setglobal(L, "play_mario_sound");
|
||||
|
||||
lua_pushcfunction(L, smlua_mario_set_forward_vel);
|
||||
lua_setglobal(L, "mario_set_forward_vel");
|
||||
|
||||
lua_pushcfunction(L, smlua_play_sound);
|
||||
lua_setglobal(L, "play_sound");
|
||||
|
||||
lua_pushcfunction(L, smlua_set_mario_animation);
|
||||
lua_setglobal(L, "set_mario_animation");
|
||||
|
||||
lua_pushcfunction(L, smlua_update_sliding);
|
||||
lua_setglobal(L, "update_sliding");
|
||||
|
||||
lua_pushcfunction(L, smlua_common_slide_action);
|
||||
lua_setglobal(L, "common_slide_action");
|
||||
|
||||
lua_pushcfunction(L, smlua_set_anim_to_frame);
|
||||
lua_setglobal(L, "set_anim_to_frame");
|
||||
|
||||
}
|
||||
|
|
@ -3,6 +3,7 @@
|
|||
void smlua_dump_stack(void) {
|
||||
lua_State* L = gLuaState;
|
||||
int top = lua_gettop(L);
|
||||
printf("--------------\n");
|
||||
for (int i = 1; i <= top; i++) {
|
||||
printf("%d\t%s\t", i, luaL_typename(L, i));
|
||||
switch (lua_type(L, i)) {
|
||||
|
|
@ -23,9 +24,35 @@ void smlua_dump_stack(void) {
|
|||
break;
|
||||
}
|
||||
}
|
||||
printf("--------------\n");
|
||||
}
|
||||
|
||||
void smlua_push_integer_field(int val, char* name) {
|
||||
void smlua_dump_globals(void) {
|
||||
lua_State* L = gLuaState;
|
||||
printf("--------------\n");
|
||||
lua_pushglobaltable(L);
|
||||
|
||||
// table is in the stack at index 't'
|
||||
lua_pushnil(L); // first key
|
||||
while (lua_next(L, -2) != 0) {
|
||||
// uses 'key' (at index -2) and 'value' (at index -1)
|
||||
if (lua_type(L, -2) == LUA_TSTRING) {
|
||||
printf("%s - %s\n",
|
||||
lua_tostring(L, -2),
|
||||
lua_typename(L, lua_type(L, -1)));
|
||||
} else {
|
||||
printf("%s - %s\n",
|
||||
lua_typename(L, lua_type(L, -2)),
|
||||
lua_typename(L, lua_type(L, -1)));
|
||||
}
|
||||
// removes 'value'; keeps 'key' for next iteration
|
||||
lua_pop(L, 1);
|
||||
}
|
||||
lua_pop(L, 1); // remove global table(-1)
|
||||
printf("--------------\n");
|
||||
}
|
||||
|
||||
void smlua_push_integer_field(lua_Integer val, char* name) {
|
||||
int t = lua_gettop(gLuaState);
|
||||
lua_pushinteger(gLuaState, val);
|
||||
lua_setfield(gLuaState, t, name);
|
||||
|
|
|
|||
|
|
@ -2,8 +2,9 @@
|
|||
#define SMLUA_UTILS_H
|
||||
|
||||
void smlua_dump_stack(void);
|
||||
void smlua_dump_globals(void);
|
||||
|
||||
void smlua_push_integer_field(int val, char* name);
|
||||
void smlua_push_integer_field(lua_Integer val, char* name);
|
||||
void smlua_push_number_field(float val, char* name);
|
||||
|
||||
void smlua_get_u8_field(u8* val, char* name);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue