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