sm64ex-coop/docs/lua/examples/spawn-stuff.lua

136 lines
3.6 KiB
Lua

-- name: Spawn Stuff
-- description: Press DPAD, or L+DPAD to spawn things
function non_l_spawning(m)
if (m.controller.buttonPressed & U_JPAD) ~= 0 then
-- spawn TTC cube
spawn_sync_object(
id_bhvTTCRotatingSolid,
E_MODEL_TTC_ROTATING_CUBE,
m.pos.x, m.pos.y, m.pos.z,
function(obj)
obj.oBehParams2ndByte = 0
obj.oOpacity = 255
end)
end
if (m.controller.buttonPressed & D_JPAD) ~= 0 then
-- spawn breakable box
spawn_sync_object(
id_bhvBreakableBox,
E_MODEL_BREAKABLE_BOX,
m.pos.x, m.pos.y, m.pos.z,
nil)
end
if (m.controller.buttonPressed & L_JPAD) ~= 0 then
-- spawn bobomb in hand
local obj = spawn_sync_object(
id_bhvBobomb,
E_MODEL_BOBOMB_BUDDY,
m.pos.x, m.pos.y, m.pos.z,
function(obj)
obj.oBehParams2ndByte = 0
obj.oOpacity = 255
obj.oFlags = OBJ_FLAG_HOLDABLE
obj.oInteractType = obj.oInteractType | INTERACT_GRABBABLE
end)
if obj ~= nil then
m.usedObj = obj
mario_grab_used_object(m)
m.marioBodyState.grabPos = GRAB_POS_LIGHT_OBJ
set_mario_action(m, ACT_HOLD_IDLE, 0)
end
end
if (m.controller.buttonPressed & R_JPAD) ~= 0 then
-- spawn goomba
spawn_sync_object(
id_bhvGoomba,
E_MODEL_GOOMBA,
m.pos.x + 150, m.pos.y, m.pos.z,
nil)
end
end
function l_spawning(m)
if (m.controller.buttonPressed & U_JPAD) ~= 0 then
-- spawn TTC prism
spawn_sync_object(
id_bhvTTCRotatingSolid,
E_MODEL_TTC_ROTATING_PRISM,
m.pos.x, m.pos.y, m.pos.z,
function(obj)
obj.oBehParams2ndByte = 1
obj.oOpacity = 255
end)
end
if (m.controller.buttonPressed & D_JPAD) ~= 0 then
-- spawn small breakable box in hand
local obj = spawn_sync_object(
id_bhvBreakableBoxSmall,
E_MODEL_BREAKABLE_BOX_SMALL,
m.pos.x, m.pos.y, m.pos.z,
function(obj)
obj.oBehParams2ndByte = 0
obj.oOpacity = 255
obj.oFlags = OBJ_FLAG_HOLDABLE
obj.oInteractType = obj.oInteractType | INTERACT_GRABBABLE
end)
if obj ~= nil then
m.usedObj = obj
mario_grab_used_object(m)
m.marioBodyState.grabPos = GRAB_POS_LIGHT_OBJ
set_mario_action(m, ACT_HOLD_IDLE, 0)
end
end
if (m.controller.buttonPressed & L_JPAD) ~= 0 then
-- spawn boulder
spawn_sync_object(
id_bhvBigBoulder,
E_MODEL_HMC_ROLLING_ROCK,
m.pos.x, m.pos.y, m.pos.z,
function(obj)
obj.oBehParams2ndByte = 2
obj.oMoveAngleYaw = m.marioObj.oMoveAngleYaw
end)
m.invincTimer = 5
end
if (m.controller.buttonPressed & R_JPAD) ~= 0 then
-- spawn boulder
spawn_sync_object(
id_bhvKoopaShell,
E_MODEL_KOOPA_SHELL,
m.pos.x + 150, m.pos.y, m.pos.z,
nil)
m.invincTimer = 5
end
end
function mario_update_local(m)
if (m.controller.buttonDown & L_TRIG) ~= 0 then
l_spawning(m)
else
non_l_spawning(m)
end
end
function mario_update(m)
if m.playerIndex == 0 then
mario_update_local(m)
end
end
hook_event(HOOK_MARIO_UPDATE, mario_update)