From acaa832b7b70ea3b329873bc31458c547cb735f0 Mon Sep 17 00:00:00 2001 From: MysterD Date: Thu, 1 Jun 2023 13:00:42 -0700 Subject: [PATCH] Arena: ladder update and typo fix the only behavior param now is ladder height ladders' orientation (yaw) is now simply set by the object's yaw when adding ladders in fast64, the cone empty is recommended --- mods/arena/arena-ladder.lua | 19 +++++++++---------- mods/arena/arena-player.lua | 3 ++- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/mods/arena/arena-ladder.lua b/mods/arena/arena-ladder.lua index 7ab9ae48..a7022c60 100644 --- a/mods/arena/arena-ladder.lua +++ b/mods/arena/arena-ladder.lua @@ -1,20 +1,17 @@ ACT_LADDER = allocate_mario_action(ACT_GROUP_AIRBORNE | ACT_FLAG_AIR) - -- behavior params: --- ladder height|ladder orientation (0..3) --- ex: 13881 <-- --- height^^|| orientation --- 1388 .. 1 +-- ladder height +-- ex: 1388 +-- object yaw = ladder yaw local sLadderClimb = 0 ---@param obj Object function bhv_arena_ladder_init(obj) obj.hitboxRadius = 40 - obj.hitboxHeight = math.floor(obj.oBehParams * 0.1) - obj.oFaceAngleYaw = (obj.oBehParams - math.floor(obj.oBehParams * 0.1) * 10) * 16384 - 32768 + obj.hitboxHeight = obj.oBehParams end id_bhvArenaLadder = hook_behavior(nil, OBJ_LIST_LEVEL, true, bhv_arena_ladder_init, nil) @@ -23,14 +20,15 @@ id_bhvArenaLadder = hook_behavior(nil, OBJ_LIST_LEVEL, true, bhv_arena_ladder_in function mario_check_for_ladder(m) local ladder = obj_get_nearest_object_with_behavior_id(m.marioObj, id_bhvArenaLadder) if ladder == nil then return end - if m.action & ACT_FLAG_ATTACKING ~= 0 and lateral_dist_between_objects(m.marioObj, ladder) < ladder.hitboxRadius + m.marioObj.hitboxRadius and m.pos.y < ladder.oPosY + ladder.hitboxHeight and m.pos.y > ladder.oPosY then + if m.action & ACT_FLAG_ATTACKING ~= 0 and lateral_dist_between_objects(m.marioObj, ladder) < ladder.hitboxRadius + m.marioObj.hitboxRadius and m.pos.y < ladder.oPosY + ladder.hitboxHeight and m.pos.y + m.marioObj.hitboxHeight > ladder.oPosY then set_mario_action(m, ACT_LADDER, 0) + gMarioStateExtras[m.playerIndex].ladder = ladder end end ---@param m MarioState function act_ladder(m) - local ladder = obj_get_nearest_object_with_behavior_id(m.marioObj, id_bhvArenaLadder) + local ladder = gMarioStateExtras[m.playerIndex].ladder m.vel.x = 0 m.vel.y = 0 @@ -67,7 +65,8 @@ function act_ladder(m) if (m.input & (INPUT_A_PRESSED | INPUT_B_PRESSED)) ~= 0 then set_mario_action(m,ACT_FREEFALL,0) m.vel.y = m.controller.rawStickY * 0.2 + gMarioStateExtras[m.playerIndex].ladder = nil end end -hook_mario_action(ACT_LADDER, { every_frame = act_ladder }) \ No newline at end of file +hook_mario_action(ACT_LADDER, { every_frame = act_ladder }) diff --git a/mods/arena/arena-player.lua b/mods/arena/arena-player.lua index a5c616c9..8f33025c 100644 --- a/mods/arena/arena-player.lua +++ b/mods/arena/arena-player.lua @@ -15,6 +15,7 @@ for i = 0, (MAX_PLAYERS - 1) do e.prevHurtCounter = 0 e.levelTimer = 0 e.levelTimerLevel = 0 + e.ladder = nil local s = gPlayerSyncTable[i] s.item = ITEM_NONE @@ -386,7 +387,7 @@ function mario_local_update(m) -- prevent water heal if m.health >= 0x100 then - if m.healthCounter == 0 and m.hurtCounter == 0 then + if m.healCounter == 0 and m.hurtCounter == 0 then if ((m.action & ACT_FLAG_SWIMMING ~= 0) and (m.action & ACT_FLAG_INTANGIBLE == 0)) then if ((m.pos.y >= (m.waterLevel - 140)) and not (m.area.terrainType & TERRAIN_SNOW ~= 0)) then m.health = m.health - 0x1A