Allow extended moveset to be fully disabled and improved performance (#461)
* Allow extended moveset to be fully disabled and improved performance
This commit is contained in:
parent
a976077697
commit
461ccf68f9
|
@ -4,31 +4,46 @@
|
||||||
|
|
||||||
local enable_extended_moveset = true
|
local enable_extended_moveset = true
|
||||||
|
|
||||||
|
------------------------------
|
||||||
|
----- Localize functions -----
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
local allocate_mario_action, atan2s, sins, coss, mario_update_moving_sand, mario_update_windy_ground, mario_floor_is_slope, mario_set_forward_vel, set_mario_action, queue_rumble_data_mario, set_jumping_action, play_mario_sound, play_sound, set_mario_animation, common_slide_action, set_anim_to_frame, check_fall_damage_or_get_stuck, play_sound_and_spawn_particles, mario_bonk_reflection, play_mario_landing_sound_once, common_air_action_step, perform_air_step, should_get_stuck_in_ground, play_mario_heavy_landing_sound, check_fall_damage, set_camera_shake_from_hit, drop_and_set_mario_action, stationary_ground_step, check_common_action_exits, stopping_step, mario_drop_held_object, perform_water_step, perform_water_full_step, vec3f_copy, vec3s_set, approach_f32, is_anim_at_end, float_surface_gfx, set_swimming_at_surface_particles, apply_water_current, update_air_without_turn, play_mario_landing_sound, lava_boost_on_wall, check_kick_or_dive_in_air, update_sliding, mario_check_object_grab, mario_grab_used_object, analog_stick_held_back, approach_s32, apply_slope_accel, should_begin_sliding, begin_braking_action, set_jump_from_landing, check_ground_dive_or_punch, anim_and_audio_for_walk, perform_ground_step, push_or_sidle_wall, check_ledge_climb_down, tilt_body_walking, anim_and_audio_for_hold_walk, anim_and_audio_for_heavy_walk, align_with_floor, set_mario_anim_with_accel, play_step_sound =
|
||||||
|
allocate_mario_action, atan2s, sins, coss, mario_update_moving_sand, mario_update_windy_ground, mario_floor_is_slope, mario_set_forward_vel, set_mario_action, queue_rumble_data_mario, set_jumping_action, play_mario_sound, play_sound, set_mario_animation, common_slide_action, set_anim_to_frame, check_fall_damage_or_get_stuck, play_sound_and_spawn_particles, mario_bonk_reflection, play_mario_landing_sound_once, common_air_action_step, perform_air_step, should_get_stuck_in_ground, play_mario_heavy_landing_sound, check_fall_damage, set_camera_shake_from_hit, drop_and_set_mario_action, stationary_ground_step, check_common_action_exits, stopping_step, mario_drop_held_object, perform_water_step, perform_water_full_step, vec3f_copy, vec3s_set, approach_f32, is_anim_at_end, float_surface_gfx, set_swimming_at_surface_particles, apply_water_current, update_air_without_turn, play_mario_landing_sound, lava_boost_on_wall, check_kick_or_dive_in_air, update_sliding, mario_check_object_grab, mario_grab_used_object, analog_stick_held_back, approach_s32, apply_slope_accel, should_begin_sliding, begin_braking_action, set_jump_from_landing, check_ground_dive_or_punch, anim_and_audio_for_walk, perform_ground_step, push_or_sidle_wall, check_ledge_climb_down, tilt_body_walking, anim_and_audio_for_hold_walk, anim_and_audio_for_heavy_walk, align_with_floor, set_mario_anim_with_accel, play_step_sound
|
||||||
|
local math_sqrt, math_min, math_max, math_floor = math.sqrt, math.min, math.max, math.floor
|
||||||
|
|
||||||
------------------------
|
------------------------
|
||||||
-- initialize actions --
|
-- initialize actions --
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
ACT_SPIN_POUND_LAND = allocate_mario_action(ACT_GROUP_STATIONARY | ACT_FLAG_STATIONARY | ACT_FLAG_ATTACKING)
|
local ACT_SPIN_POUND_LAND = allocate_mario_action(ACT_GROUP_STATIONARY | ACT_FLAG_STATIONARY | ACT_FLAG_ATTACKING)
|
||||||
ACT_ROLL = allocate_mario_action(ACT_GROUP_MOVING | ACT_FLAG_MOVING | ACT_FLAG_BUTT_OR_STOMACH_SLIDE)
|
local ACT_ROLL = allocate_mario_action(ACT_GROUP_MOVING | ACT_FLAG_MOVING | ACT_FLAG_BUTT_OR_STOMACH_SLIDE)
|
||||||
ACT_GROUND_POUND_JUMP = allocate_mario_action(ACT_GROUP_AIRBORNE | ACT_FLAG_AIR | ACT_FLAG_ALLOW_VERTICAL_WIND_ACTION)
|
local ACT_GROUND_POUND_JUMP = allocate_mario_action(ACT_GROUP_AIRBORNE | ACT_FLAG_AIR | ACT_FLAG_ALLOW_VERTICAL_WIND_ACTION)
|
||||||
ACT_SPIN_JUMP = allocate_mario_action(ACT_GROUP_AIRBORNE | ACT_FLAG_AIR | ACT_FLAG_ALLOW_VERTICAL_WIND_ACTION)
|
local ACT_SPIN_JUMP = allocate_mario_action(ACT_GROUP_AIRBORNE | ACT_FLAG_AIR | ACT_FLAG_ALLOW_VERTICAL_WIND_ACTION)
|
||||||
ACT_SPIN_POUND = allocate_mario_action(ACT_GROUP_AIRBORNE | ACT_FLAG_AIR | ACT_FLAG_ATTACKING)
|
local ACT_SPIN_POUND = allocate_mario_action(ACT_GROUP_AIRBORNE | ACT_FLAG_AIR | ACT_FLAG_ATTACKING)
|
||||||
ACT_LEDGE_PARKOUR = allocate_mario_action(ACT_GROUP_AIRBORNE | ACT_FLAG_AIR)
|
local ACT_LEDGE_PARKOUR = allocate_mario_action(ACT_GROUP_AIRBORNE | ACT_FLAG_AIR)
|
||||||
ACT_ROLL_AIR = allocate_mario_action(ACT_GROUP_AIRBORNE | ACT_FLAG_AIR | ACT_FLAG_ALLOW_VERTICAL_WIND_ACTION)
|
local ACT_ROLL_AIR = allocate_mario_action(ACT_GROUP_AIRBORNE | ACT_FLAG_AIR | ACT_FLAG_ALLOW_VERTICAL_WIND_ACTION)
|
||||||
ACT_WALL_SLIDE = allocate_mario_action(ACT_GROUP_AIRBORNE | ACT_FLAG_AIR | ACT_FLAG_MOVING | ACT_FLAG_ALLOW_VERTICAL_WIND_ACTION)
|
local ACT_WALL_SLIDE = allocate_mario_action(ACT_GROUP_AIRBORNE | ACT_FLAG_AIR | ACT_FLAG_MOVING | ACT_FLAG_ALLOW_VERTICAL_WIND_ACTION)
|
||||||
ACT_WATER_GROUND_POUND = allocate_mario_action(ACT_GROUP_SUBMERGED | ACT_FLAG_MOVING | ACT_FLAG_SWIMMING | ACT_FLAG_SWIMMING_OR_FLYING | ACT_FLAG_WATER_OR_TEXT | ACT_FLAG_ATTACKING)
|
local ACT_WATER_GROUND_POUND = allocate_mario_action(ACT_GROUP_SUBMERGED | ACT_FLAG_MOVING | ACT_FLAG_SWIMMING | ACT_FLAG_SWIMMING_OR_FLYING | ACT_FLAG_WATER_OR_TEXT | ACT_FLAG_ATTACKING)
|
||||||
ACT_WATER_GROUND_POUND_LAND = allocate_mario_action(ACT_GROUP_SUBMERGED | ACT_FLAG_STATIONARY | ACT_FLAG_SWIMMING | ACT_FLAG_SWIMMING_OR_FLYING | ACT_FLAG_WATER_OR_TEXT)
|
local ACT_WATER_GROUND_POUND_LAND = allocate_mario_action(ACT_GROUP_SUBMERGED | ACT_FLAG_STATIONARY | ACT_FLAG_SWIMMING | ACT_FLAG_SWIMMING_OR_FLYING | ACT_FLAG_WATER_OR_TEXT)
|
||||||
ACT_WATER_GROUND_POUND_STROKE = allocate_mario_action(ACT_GROUP_SUBMERGED | ACT_FLAG_MOVING | ACT_FLAG_SWIMMING | ACT_FLAG_SWIMMING_OR_FLYING | ACT_FLAG_WATER_OR_TEXT)
|
local ACT_WATER_GROUND_POUND_STROKE = allocate_mario_action(ACT_GROUP_SUBMERGED | ACT_FLAG_MOVING | ACT_FLAG_SWIMMING | ACT_FLAG_SWIMMING_OR_FLYING | ACT_FLAG_WATER_OR_TEXT)
|
||||||
ACT_WATER_GROUND_POUND_JUMP = allocate_mario_action(ACT_GROUP_SUBMERGED | ACT_FLAG_MOVING | ACT_FLAG_SWIMMING | ACT_FLAG_SWIMMING_OR_FLYING | ACT_FLAG_WATER_OR_TEXT)
|
local ACT_WATER_GROUND_POUND_JUMP = allocate_mario_action(ACT_GROUP_SUBMERGED | ACT_FLAG_MOVING | ACT_FLAG_SWIMMING | ACT_FLAG_SWIMMING_OR_FLYING | ACT_FLAG_WATER_OR_TEXT)
|
||||||
|
local ACT_CUSTOM_DIVE_SLIDE = allocate_mario_action(ACT_GROUP_MOVING | ACT_FLAG_MOVING | ACT_FLAG_DIVING | ACT_FLAG_ATTACKING)
|
||||||
|
local ACT_CUSTOM_WALKING = allocate_mario_action(ACT_GROUP_MOVING | ACT_FLAG_MOVING | ACT_FLAG_ALLOW_FIRST_PERSON)
|
||||||
|
local ACT_CUSTOM_HOLD_WALKING = allocate_mario_action(ACT_GROUP_MOVING | ACT_FLAG_MOVING)
|
||||||
|
local ACT_CUSTOM_HOLD_HEAVY_WALKING = allocate_mario_action(ACT_GROUP_MOVING | ACT_FLAG_MOVING)
|
||||||
|
local ACT_CUSTOM_FINISH_TURNING_AROUND = allocate_mario_action(ACT_GROUP_MOVING | ACT_FLAG_MOVING)
|
||||||
|
local ACT_CUSTOM_CRAWLING = allocate_mario_action(ACT_GROUP_MOVING | ACT_FLAG_MOVING | ACT_FLAG_SHORT_HITBOX | ACT_FLAG_ALLOW_FIRST_PERSON)
|
||||||
|
local ACT_CUSTOM_AIR_HIT_WALL = allocate_mario_action(ACT_GROUP_AIRBORNE | ACT_FLAG_AIR)
|
||||||
|
|
||||||
-----------------------------
|
-----------------------------
|
||||||
-- initialize extra fields --
|
-- initialize extra fields --
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
ANGLE_QUEUE_SIZE = 9
|
local ANGLE_QUEUE_SIZE = 9
|
||||||
SPIN_TIMER_SUCCESSFUL_INPUT = 4
|
local SPIN_TIMER_SUCCESSFUL_INPUT = 4
|
||||||
|
|
||||||
gMarioStateExtras = {}
|
local gMarioStateExtras = {}
|
||||||
for i=0,(MAX_PLAYERS-1) do
|
for i=0,(MAX_PLAYERS-1) do
|
||||||
gMarioStateExtras[i] = {}
|
gMarioStateExtras[i] = {}
|
||||||
local m = gMarioStates[i]
|
local m = gMarioStates[i]
|
||||||
|
@ -59,7 +74,7 @@ for i=0,(MAX_PLAYERS-1) do
|
||||||
e.savedWallSlide = false
|
e.savedWallSlide = false
|
||||||
end
|
end
|
||||||
|
|
||||||
function limit_angle(a)
|
local function limit_angle(a)
|
||||||
return (a + 0x8000) % 0x10000 - 0x8000
|
return (a + 0x8000) % 0x10000 - 0x8000
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -67,10 +82,10 @@ end
|
||||||
-- roll --
|
-- roll --
|
||||||
----------
|
----------
|
||||||
|
|
||||||
function update_roll_sliding_angle(m, accel, lossFactor)
|
local function update_roll_sliding_angle(m, accel, lossFactor)
|
||||||
local floor = m.floor
|
local floor = m.floor
|
||||||
local slopeAngle = atan2s(floor.normal.z, floor.normal.x)
|
local slopeAngle = atan2s(floor.normal.z, floor.normal.x)
|
||||||
local steepness = math.sqrt(floor.normal.x * floor.normal.x + floor.normal.z * floor.normal.z)
|
local steepness = math_sqrt(floor.normal.x * floor.normal.x + floor.normal.z * floor.normal.z)
|
||||||
|
|
||||||
m.slideVelX = m.slideVelX + accel * steepness * sins(slopeAngle)
|
m.slideVelX = m.slideVelX + accel * steepness * sins(slopeAngle)
|
||||||
m.slideVelZ = m.slideVelZ + accel * steepness * coss(slopeAngle)
|
m.slideVelZ = m.slideVelZ + accel * steepness * coss(slopeAngle)
|
||||||
|
@ -102,14 +117,14 @@ function update_roll_sliding_angle(m, accel, lossFactor)
|
||||||
mario_update_windy_ground(m)
|
mario_update_windy_ground(m)
|
||||||
|
|
||||||
--! Speed is capped a frame late (butt slide HSG)
|
--! Speed is capped a frame late (butt slide HSG)
|
||||||
m.forwardVel = math.sqrt(m.slideVelX * m.slideVelX + m.slideVelZ * m.slideVelZ)
|
m.forwardVel = math_sqrt(m.slideVelX * m.slideVelX + m.slideVelZ * m.slideVelZ)
|
||||||
if m.forwardVel > 100.0 then
|
if m.forwardVel > 100.0 then
|
||||||
m.slideVelX = m.slideVelX * 100.0 / m.forwardVel
|
m.slideVelX = m.slideVelX * 100.0 / m.forwardVel
|
||||||
m.slideVelZ = m.slideVelZ * 100.0 / m.forwardVel
|
m.slideVelZ = m.slideVelZ * 100.0 / m.forwardVel
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function update_roll_sliding(m, stopSpeed)
|
local function update_roll_sliding(m, stopSpeed)
|
||||||
local stopped = 0
|
local stopped = 0
|
||||||
|
|
||||||
local intendedDYaw = m.intendedYaw - m.slideYaw
|
local intendedDYaw = m.intendedYaw - m.slideYaw
|
||||||
|
@ -124,7 +139,7 @@ function update_roll_sliding(m, stopSpeed)
|
||||||
local accel = 4.0
|
local accel = 4.0
|
||||||
local lossFactor = 0.994
|
local lossFactor = 0.994
|
||||||
|
|
||||||
local oldSpeed = math.sqrt(m.slideVelX * m.slideVelX + m.slideVelZ * m.slideVelZ)
|
local oldSpeed = math_sqrt(m.slideVelX * m.slideVelX + m.slideVelZ * m.slideVelZ)
|
||||||
|
|
||||||
--! This is uses trig derivatives to rotate Mario's speed.
|
--! This is uses trig derivatives to rotate Mario's speed.
|
||||||
-- In vanilla, it was slightly off/asymmetric since it uses the new X speed, but the old
|
-- In vanilla, it was slightly off/asymmetric since it uses the new X speed, but the old
|
||||||
|
@ -136,7 +151,7 @@ function update_roll_sliding(m, stopSpeed)
|
||||||
m.slideVelX = m.slideVelX + modSlideVelX
|
m.slideVelX = m.slideVelX + modSlideVelX
|
||||||
m.slideVelZ = m.slideVelZ - modSlideVelZ
|
m.slideVelZ = m.slideVelZ - modSlideVelZ
|
||||||
|
|
||||||
local newSpeed = math.sqrt(m.slideVelX * m.slideVelX + m.slideVelZ * m.slideVelZ)
|
local newSpeed = math_sqrt(m.slideVelX * m.slideVelX + m.slideVelZ * m.slideVelZ)
|
||||||
|
|
||||||
if oldSpeed > 0.0 and newSpeed > 0.0 then
|
if oldSpeed > 0.0 and newSpeed > 0.0 then
|
||||||
m.slideVelX = m.slideVelX * oldSpeed / newSpeed
|
m.slideVelX = m.slideVelX * oldSpeed / newSpeed
|
||||||
|
@ -153,7 +168,7 @@ function update_roll_sliding(m, stopSpeed)
|
||||||
return stopped
|
return stopped
|
||||||
end
|
end
|
||||||
|
|
||||||
function act_roll(m)
|
local function act_roll(m)
|
||||||
local e = gMarioStateExtras[m.playerIndex]
|
local e = gMarioStateExtras[m.playerIndex]
|
||||||
|
|
||||||
local MAX_NORMAL_ROLL_SPEED = 50.0
|
local MAX_NORMAL_ROLL_SPEED = 50.0
|
||||||
|
@ -193,7 +208,7 @@ function act_roll(m)
|
||||||
e.boostTimer = 0
|
e.boostTimer = 0
|
||||||
|
|
||||||
if m.forwardVel < MAX_NORMAL_ROLL_SPEED then
|
if m.forwardVel < MAX_NORMAL_ROLL_SPEED then
|
||||||
mario_set_forward_vel(m, math.min(m.forwardVel + ROLL_BOOST_GAIN, MAX_NORMAL_ROLL_SPEED))
|
mario_set_forward_vel(m, math_min(m.forwardVel + ROLL_BOOST_GAIN, MAX_NORMAL_ROLL_SPEED))
|
||||||
end
|
end
|
||||||
|
|
||||||
m.particleFlags = m.particleFlags | PARTICLE_HORIZONTAL_STAR
|
m.particleFlags = m.particleFlags | PARTICLE_HORIZONTAL_STAR
|
||||||
|
@ -226,7 +241,7 @@ function act_roll(m)
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
function act_roll_air(m)
|
local function act_roll_air(m)
|
||||||
local e = gMarioStateExtras[m.playerIndex]
|
local e = gMarioStateExtras[m.playerIndex]
|
||||||
local MAX_NORMAL_ROLL_SPEED = 50.0
|
local MAX_NORMAL_ROLL_SPEED = 50.0
|
||||||
local ROLL_AIR_CANCEL_LOCKOUT_TIME = 15
|
local ROLL_AIR_CANCEL_LOCKOUT_TIME = 15
|
||||||
|
@ -276,7 +291,7 @@ function act_roll_air(m)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
function update_roll(m)
|
local function update_roll(m)
|
||||||
if m.action == ACT_DIVE_SLIDE then
|
if m.action == ACT_DIVE_SLIDE then
|
||||||
if (m.input & INPUT_ABOVE_SLIDE) == 0 then
|
if (m.input & INPUT_ABOVE_SLIDE) == 0 then
|
||||||
if (m.input & INPUT_Z_DOWN) ~= 0 and m.actionTimer < 2 then
|
if (m.input & INPUT_Z_DOWN) ~= 0 and m.actionTimer < 2 then
|
||||||
|
@ -308,7 +323,7 @@ function update_roll(m)
|
||||||
if m.action == ACT_CROUCH_SLIDE then
|
if m.action == ACT_CROUCH_SLIDE then
|
||||||
if (m.controller.buttonPressed & X_BUTTON) ~= 0 then
|
if (m.controller.buttonPressed & X_BUTTON) ~= 0 then
|
||||||
m.vel.y = 19.0
|
m.vel.y = 19.0
|
||||||
mario_set_forward_vel(m, math.max(32, m.forwardVel))
|
mario_set_forward_vel(m, math_max(32, m.forwardVel))
|
||||||
play_mario_sound(m, SOUND_ACTION_TERRAIN_JUMP, 0)
|
play_mario_sound(m, SOUND_ACTION_TERRAIN_JUMP, 0)
|
||||||
|
|
||||||
play_sound(SOUND_ACTION_SPIN, m.marioObj.header.gfx.cameraToObject)
|
play_sound(SOUND_ACTION_SPIN, m.marioObj.header.gfx.cameraToObject)
|
||||||
|
@ -332,7 +347,7 @@ end
|
||||||
-- spin --
|
-- spin --
|
||||||
----------
|
----------
|
||||||
|
|
||||||
function mario_update_spin_input(m)
|
local function mario_update_spin_input(m)
|
||||||
local e = gMarioStateExtras[m.playerIndex]
|
local e = gMarioStateExtras[m.playerIndex]
|
||||||
local rawAngle = atan2s(-m.controller.stickY, m.controller.stickX)
|
local rawAngle = atan2s(-m.controller.stickY, m.controller.stickX)
|
||||||
e.spinInput = 0
|
e.spinInput = 0
|
||||||
|
@ -341,7 +356,7 @@ function mario_update_spin_input(m)
|
||||||
if e.lastIntendedMag > 0.5 and m.intendedMag > 0.5 then
|
if e.lastIntendedMag > 0.5 and m.intendedMag > 0.5 then
|
||||||
local angleOverFrames = 0
|
local angleOverFrames = 0
|
||||||
local thisFrameDelta = 0
|
local thisFrameDelta = 0
|
||||||
local i = 0
|
-- local i = 0
|
||||||
|
|
||||||
local newDirection = e.spinDirection
|
local newDirection = e.spinDirection
|
||||||
local signedOverflow = 0
|
local signedOverflow = 0
|
||||||
|
@ -380,13 +395,13 @@ function mario_update_spin_input(m)
|
||||||
|
|
||||||
if e.spinDirection < 0 then
|
if e.spinDirection < 0 then
|
||||||
if signedOverflow ~= 0 then
|
if signedOverflow ~= 0 then
|
||||||
thisFrameDelta = math.floor((1.0*e.stickLastAngle + 0x10000) - rawAngle)
|
thisFrameDelta = math_floor((1.0*e.stickLastAngle + 0x10000) - rawAngle)
|
||||||
else
|
else
|
||||||
thisFrameDelta = e.stickLastAngle - rawAngle
|
thisFrameDelta = e.stickLastAngle - rawAngle
|
||||||
end
|
end
|
||||||
elseif e.spinDirection > 0 then
|
elseif e.spinDirection > 0 then
|
||||||
if signedOverflow ~= 0 then
|
if signedOverflow ~= 0 then
|
||||||
thisFrameDelta = math.floor(1.0*rawAngle + 0x10000 - e.stickLastAngle)
|
thisFrameDelta = math_floor(1.0*rawAngle + 0x10000 - e.stickLastAngle)
|
||||||
else
|
else
|
||||||
thisFrameDelta = rawAngle - e.stickLastAngle
|
thisFrameDelta = rawAngle - e.stickLastAngle
|
||||||
end
|
end
|
||||||
|
@ -414,7 +429,7 @@ function mario_update_spin_input(m)
|
||||||
e.lastIntendedMag = m.intendedMag
|
e.lastIntendedMag = m.intendedMag
|
||||||
end
|
end
|
||||||
|
|
||||||
function act_spin_jump(m)
|
local function act_spin_jump(m)
|
||||||
local e = gMarioStateExtras[m.playerIndex]
|
local e = gMarioStateExtras[m.playerIndex]
|
||||||
if m.actionTimer == 0 then
|
if m.actionTimer == 0 then
|
||||||
-- determine clockwise/counter-clockwise spin
|
-- determine clockwise/counter-clockwise spin
|
||||||
|
@ -465,7 +480,7 @@ function act_spin_jump(m)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
function act_spin_jump_gravity(m)
|
local function act_spin_jump_gravity(m)
|
||||||
if (m.flags & MARIO_WING_CAP) ~= 0 and m.vel.y < 0.0 and (m.input & INPUT_A_DOWN) ~= 0 then
|
if (m.flags & MARIO_WING_CAP) ~= 0 and m.vel.y < 0.0 and (m.input & INPUT_A_DOWN) ~= 0 then
|
||||||
m.marioBodyState.wingFlutter = 1
|
m.marioBodyState.wingFlutter = 1
|
||||||
m.vel.y = m.vel.y - 0.7
|
m.vel.y = m.vel.y - 0.7
|
||||||
|
@ -490,7 +505,7 @@ function act_spin_jump_gravity(m)
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
function act_spin_pound(m)
|
local function act_spin_pound(m)
|
||||||
local e = gMarioStateExtras[m.playerIndex]
|
local e = gMarioStateExtras[m.playerIndex]
|
||||||
if m.actionTimer == 0 then
|
if m.actionTimer == 0 then
|
||||||
m.actionState = m.actionArg
|
m.actionState = m.actionArg
|
||||||
|
@ -548,7 +563,7 @@ function act_spin_pound(m)
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
function act_spin_pound_land(m)
|
local function act_spin_pound_land(m)
|
||||||
m.actionState = 1
|
m.actionState = 1
|
||||||
|
|
||||||
if m.actionTimer <= 8 then
|
if m.actionTimer <= 8 then
|
||||||
|
@ -598,7 +613,7 @@ end
|
||||||
-- wall slide --
|
-- wall slide --
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
function act_wall_slide(m)
|
local function act_wall_slide(m)
|
||||||
local e = gMarioStateExtras[m.playerIndex]
|
local e = gMarioStateExtras[m.playerIndex]
|
||||||
e.savedWallSlideHeight = m.pos.y
|
e.savedWallSlideHeight = m.pos.y
|
||||||
e.savedWallSlide = true
|
e.savedWallSlide = true
|
||||||
|
@ -625,7 +640,7 @@ function act_wall_slide(m)
|
||||||
end
|
end
|
||||||
|
|
||||||
m.actionTimer = m.actionTimer + 1
|
m.actionTimer = m.actionTimer + 1
|
||||||
if m.wall == nil and m.actionTimer > 2 then
|
if not m.wall and m.actionTimer > 2 then
|
||||||
mario_set_forward_vel(m, 0.0)
|
mario_set_forward_vel(m, 0.0)
|
||||||
return set_mario_action(m, ACT_FREEFALL, 0)
|
return set_mario_action(m, ACT_FREEFALL, 0)
|
||||||
end
|
end
|
||||||
|
@ -633,7 +648,7 @@ function act_wall_slide(m)
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
function act_wall_slide_gravity(m)
|
local function act_wall_slide_gravity(m)
|
||||||
m.vel.y = m.vel.y - 2
|
m.vel.y = m.vel.y - 2
|
||||||
|
|
||||||
if m.vel.y < -15 then
|
if m.vel.y < -15 then
|
||||||
|
@ -641,7 +656,7 @@ function act_wall_slide_gravity(m)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function act_air_hit_wall(m)
|
local function act_air_hit_wall(m)
|
||||||
if m.heldObj ~= 0 then
|
if m.heldObj ~= 0 then
|
||||||
mario_drop_held_object(m)
|
mario_drop_held_object(m)
|
||||||
end
|
end
|
||||||
|
@ -678,7 +693,7 @@ end
|
||||||
-- water ground pound --
|
-- water ground pound --
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
function act_water_ground_pound(m)
|
local function act_water_ground_pound(m)
|
||||||
local GROUND_POUND_STROKE_SPEED = 27
|
local GROUND_POUND_STROKE_SPEED = 27
|
||||||
local GROUND_POUND_TIMER = 30
|
local GROUND_POUND_TIMER = 30
|
||||||
|
|
||||||
|
@ -736,7 +751,6 @@ function act_water_ground_pound(m)
|
||||||
-- make current apply
|
-- make current apply
|
||||||
stepResult = perform_water_step(m)
|
stepResult = perform_water_step(m)
|
||||||
else
|
else
|
||||||
|
|
||||||
set_mario_animation(m, MARIO_ANIM_GROUND_POUND)
|
set_mario_animation(m, MARIO_ANIM_GROUND_POUND)
|
||||||
|
|
||||||
m.particleFlags = m.particleFlags | PARTICLE_PLUNGE_BUBBLE
|
m.particleFlags = m.particleFlags | PARTICLE_PLUNGE_BUBBLE
|
||||||
|
@ -779,7 +793,7 @@ function act_water_ground_pound(m)
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
function act_water_ground_pound_land(m)
|
local function act_water_ground_pound_land(m)
|
||||||
local GROUND_POUND_JUMP_VEL = 40.0
|
local GROUND_POUND_JUMP_VEL = 40.0
|
||||||
|
|
||||||
m.actionState = 1
|
m.actionState = 1
|
||||||
|
@ -811,7 +825,7 @@ function act_water_ground_pound_land(m)
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
function act_water_ground_pound_stroke(m)
|
local function act_water_ground_pound_stroke(m)
|
||||||
local GROUND_POUND_STROKE_TIMER = 20
|
local GROUND_POUND_STROKE_TIMER = 20
|
||||||
local GROUND_POUND_STROKE_DECAY = 0.3
|
local GROUND_POUND_STROKE_DECAY = 0.3
|
||||||
local stepResult = 0
|
local stepResult = 0
|
||||||
|
@ -844,7 +858,7 @@ function act_water_ground_pound_stroke(m)
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
function act_water_ground_pound_jump(m)
|
local function act_water_ground_pound_jump(m)
|
||||||
local e = gMarioStateExtras[m.playerIndex]
|
local e = gMarioStateExtras[m.playerIndex]
|
||||||
local GROUND_POUND_JUMP_TIMER = 20
|
local GROUND_POUND_JUMP_TIMER = 20
|
||||||
local GROUND_POUND_JUMP_DECAY = 1.4
|
local GROUND_POUND_JUMP_DECAY = 1.4
|
||||||
|
@ -904,7 +918,7 @@ end
|
||||||
-- ledge parkour --
|
-- ledge parkour --
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
function act_ledge_parkour(m)
|
local function act_ledge_parkour(m)
|
||||||
set_mario_animation(m, MARIO_ANIM_SLIDEFLIP)
|
set_mario_animation(m, MARIO_ANIM_SLIDEFLIP)
|
||||||
|
|
||||||
local animFrame = m.marioObj.header.gfx.animInfo.animFrame
|
local animFrame = m.marioObj.header.gfx.animInfo.animFrame
|
||||||
|
@ -950,7 +964,7 @@ function act_ledge_parkour(m)
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
function act_ground_pound_jump(m)
|
local function act_ground_pound_jump(m)
|
||||||
local e = gMarioStateExtras[m.playerIndex]
|
local e = gMarioStateExtras[m.playerIndex]
|
||||||
if check_kick_or_dive_in_air(m) ~= 0 then
|
if check_kick_or_dive_in_air(m) ~= 0 then
|
||||||
m.marioObj.header.gfx.angle.y = m.marioObj.header.gfx.angle.y + e.rotAngle
|
m.marioObj.header.gfx.angle.y = m.marioObj.header.gfx.angle.y + e.rotAngle
|
||||||
|
@ -989,7 +1003,7 @@ end
|
||||||
-- dive slide patched for dive hop --
|
-- dive slide patched for dive hop --
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
|
|
||||||
function act_dive_slide(m)
|
local function act_dive_slide(m)
|
||||||
if (m.input & INPUT_ABOVE_SLIDE) == 0 and (m.input & INPUT_A_PRESSED) ~= 0 then
|
if (m.input & INPUT_ABOVE_SLIDE) == 0 and (m.input & INPUT_A_PRESSED) ~= 0 then
|
||||||
queue_rumble_data_mario(m, 5, 80)
|
queue_rumble_data_mario(m, 5, 80)
|
||||||
if m.forwardVel > 0 then
|
if m.forwardVel > 0 then
|
||||||
|
@ -1036,7 +1050,7 @@ end
|
||||||
-- for Tight Controls and modfied speed caps --
|
-- for Tight Controls and modfied speed caps --
|
||||||
-------------------------------------------------------
|
-------------------------------------------------------
|
||||||
|
|
||||||
function update_walking_speed_extended(m)
|
local function update_walking_speed_extended(m)
|
||||||
local maxTargetSpeed = 0
|
local maxTargetSpeed = 0
|
||||||
local targetSpeed = 0
|
local targetSpeed = 0
|
||||||
local firmSpeedCap = 0
|
local firmSpeedCap = 0
|
||||||
|
@ -1065,7 +1079,7 @@ function update_walking_speed_extended(m)
|
||||||
end
|
end
|
||||||
|
|
||||||
if m.forwardVel <= 8.0 then
|
if m.forwardVel <= 8.0 then
|
||||||
m.forwardVel = math.min(m.intendedMag, 8.0) -- Same fix as Melee dashback (by Kaze)
|
m.forwardVel = math_min(m.intendedMag, 8.0) -- Same fix as Melee dashback (by Kaze)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- instead of a hard walk speed cap, going over this new firm speed cap makes you slow down to it twice as fast
|
-- instead of a hard walk speed cap, going over this new firm speed cap makes you slow down to it twice as fast
|
||||||
|
@ -1106,7 +1120,7 @@ function update_walking_speed_extended(m)
|
||||||
apply_slope_accel(m)
|
apply_slope_accel(m)
|
||||||
end
|
end
|
||||||
|
|
||||||
function act_walking(m)
|
local function act_walking(m)
|
||||||
local startPos = m.pos
|
local startPos = m.pos
|
||||||
local startYaw = m.faceAngle.y
|
local startYaw = m.faceAngle.y
|
||||||
|
|
||||||
|
@ -1164,8 +1178,9 @@ function act_walking(m)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
function act_hold_walking(m)
|
local function act_hold_walking(m)
|
||||||
if m.heldObj ~= nil and m.heldObj.behavior == bhvJumpingBox then
|
-- Unlikely to happen
|
||||||
|
if m.heldObj and obj_has_behavior_id(m.heldObj, id_bhvJumpingBox) == 1 then
|
||||||
return set_mario_action(m, ACT_CRAZY_BOX_BOUNCE, 0)
|
return set_mario_action(m, ACT_CRAZY_BOX_BOUNCE, 0)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -1215,7 +1230,7 @@ function act_hold_walking(m)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
function act_hold_heavy_walking(m)
|
local function act_hold_heavy_walking(m)
|
||||||
if (m.input & INPUT_B_PRESSED) ~= 0 then
|
if (m.input & INPUT_B_PRESSED) ~= 0 then
|
||||||
return set_mario_action(m, ACT_HEAVY_THROW, 0)
|
return set_mario_action(m, ACT_HEAVY_THROW, 0)
|
||||||
end
|
end
|
||||||
|
@ -1245,7 +1260,7 @@ function act_hold_heavy_walking(m)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
function act_finish_turning_around(m)
|
local function act_finish_turning_around(m)
|
||||||
if (m.input & INPUT_ABOVE_SLIDE) ~= 0 then
|
if (m.input & INPUT_ABOVE_SLIDE) ~= 0 then
|
||||||
return set_mario_action(m, ACT_BEGIN_SLIDING, 0)
|
return set_mario_action(m, ACT_BEGIN_SLIDING, 0)
|
||||||
end
|
end
|
||||||
|
@ -1269,7 +1284,7 @@ function act_finish_turning_around(m)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
function act_crawling(m)
|
local function act_crawling(m)
|
||||||
if should_begin_sliding(m) ~= 0 then
|
if should_begin_sliding(m) ~= 0 then
|
||||||
return set_mario_action(m, ACT_BEGIN_SLIDING, 0)
|
return set_mario_action(m, ACT_BEGIN_SLIDING, 0)
|
||||||
end
|
end
|
||||||
|
@ -1319,7 +1334,7 @@ end
|
||||||
|
|
||||||
---------------------------------------------------------
|
---------------------------------------------------------
|
||||||
|
|
||||||
function mario_on_set_action(m)
|
local function mario_on_set_action(m)
|
||||||
if not enable_extended_moveset then return end
|
if not enable_extended_moveset then return end
|
||||||
local e = gMarioStateExtras[m.playerIndex]
|
local e = gMarioStateExtras[m.playerIndex]
|
||||||
|
|
||||||
|
@ -1354,7 +1369,7 @@ function mario_on_set_action(m)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function before_mario_update(m)
|
local function before_mario_update(m)
|
||||||
if not enable_extended_moveset then return end
|
if not enable_extended_moveset then return end
|
||||||
local e = gMarioStateExtras[m.playerIndex]
|
local e = gMarioStateExtras[m.playerIndex]
|
||||||
-- revert fake saved action
|
-- revert fake saved action
|
||||||
|
@ -1366,7 +1381,7 @@ function before_mario_update(m)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function after_mario_update(m)
|
local function after_mario_update(m)
|
||||||
local e = gMarioStateExtras[m.playerIndex]
|
local e = gMarioStateExtras[m.playerIndex]
|
||||||
-- pretend *_POUND_LAND is ACT_GROUND_POUND_LAND so switches work correctly
|
-- pretend *_POUND_LAND is ACT_GROUND_POUND_LAND so switches work correctly
|
||||||
if m.action == ACT_SPIN_POUND_LAND or m.action == ACT_WATER_GROUND_POUND_LAND then
|
if m.action == ACT_SPIN_POUND_LAND or m.action == ACT_WATER_GROUND_POUND_LAND then
|
||||||
|
@ -1380,7 +1395,7 @@ function after_mario_update(m)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function mario_update(m)
|
local function mario_update(m)
|
||||||
if not enable_extended_moveset then return end
|
if not enable_extended_moveset then return end
|
||||||
local e = gMarioStateExtras[m.playerIndex]
|
local e = gMarioStateExtras[m.playerIndex]
|
||||||
|
|
||||||
|
@ -1446,6 +1461,22 @@ function mario_update(m)
|
||||||
after_mario_update(m)
|
after_mario_update(m)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local convert_actions = {
|
||||||
|
[ACT_DIVE_SLIDE] = ACT_CUSTOM_DIVE_SLIDE,
|
||||||
|
[ACT_WALKING] = ACT_CUSTOM_WALKING,
|
||||||
|
[ACT_HOLD_WALKING] = ACT_CUSTOM_HOLD_WALKING,
|
||||||
|
[ACT_HOLD_HEAVY_WALKING] = ACT_CUSTOM_HOLD_HEAVY_WALKING,
|
||||||
|
[ACT_FINISH_TURNING_AROUND] = ACT_CUSTOM_FINISH_TURNING_AROUND,
|
||||||
|
[ACT_CRAWLING] = ACT_CUSTOM_CRAWLING,
|
||||||
|
[ACT_AIR_HIT_WALL] = ACT_CUSTOM_AIR_HIT_WALL
|
||||||
|
}
|
||||||
|
|
||||||
|
local function before_set_mario_action(m, action)
|
||||||
|
if not enable_extended_moveset then return action end
|
||||||
|
|
||||||
|
return convert_actions[action] ~= nil and convert_actions[action] or action
|
||||||
|
end
|
||||||
|
|
||||||
local function on_chat_command(msg)
|
local function on_chat_command(msg)
|
||||||
if msg:lower() == 'off' then
|
if msg:lower() == 'off' then
|
||||||
enable_extended_moveset = false
|
enable_extended_moveset = false
|
||||||
|
@ -1464,6 +1495,7 @@ end
|
||||||
hook_event(HOOK_BEFORE_MARIO_UPDATE, before_mario_update)
|
hook_event(HOOK_BEFORE_MARIO_UPDATE, before_mario_update)
|
||||||
hook_event(HOOK_MARIO_UPDATE, mario_update)
|
hook_event(HOOK_MARIO_UPDATE, mario_update)
|
||||||
hook_event(HOOK_ON_SET_MARIO_ACTION, mario_on_set_action)
|
hook_event(HOOK_ON_SET_MARIO_ACTION, mario_on_set_action)
|
||||||
|
hook_event(HOOK_BEFORE_SET_MARIO_ACTION, before_set_mario_action)
|
||||||
|
|
||||||
hook_mario_action(ACT_ROLL, { every_frame = act_roll })
|
hook_mario_action(ACT_ROLL, { every_frame = act_roll })
|
||||||
hook_mario_action(ACT_ROLL_AIR, { every_frame = act_roll_air })
|
hook_mario_action(ACT_ROLL_AIR, { every_frame = act_roll_air })
|
||||||
|
@ -1477,12 +1509,12 @@ hook_mario_action(ACT_WATER_GROUND_POUND_LAND, { every_frame = act_water_groun
|
||||||
hook_mario_action(ACT_WATER_GROUND_POUND_STROKE, { every_frame = act_water_ground_pound_stroke })
|
hook_mario_action(ACT_WATER_GROUND_POUND_STROKE, { every_frame = act_water_ground_pound_stroke })
|
||||||
hook_mario_action(ACT_WATER_GROUND_POUND_JUMP, { every_frame = act_water_ground_pound_jump })
|
hook_mario_action(ACT_WATER_GROUND_POUND_JUMP, { every_frame = act_water_ground_pound_jump })
|
||||||
hook_mario_action(ACT_LEDGE_PARKOUR, { every_frame = act_ledge_parkour })
|
hook_mario_action(ACT_LEDGE_PARKOUR, { every_frame = act_ledge_parkour })
|
||||||
hook_mario_action(ACT_DIVE_SLIDE, { every_frame = act_dive_slide })
|
hook_mario_action(ACT_CUSTOM_DIVE_SLIDE, { every_frame = act_dive_slide })
|
||||||
hook_mario_action(ACT_WALKING, { every_frame = act_walking })
|
hook_mario_action(ACT_CUSTOM_WALKING, { every_frame = act_walking })
|
||||||
hook_mario_action(ACT_HOLD_WALKING, { every_frame = act_hold_walking })
|
hook_mario_action(ACT_CUSTOM_HOLD_WALKING, { every_frame = act_hold_walking })
|
||||||
hook_mario_action(ACT_HOLD_HEAVY_WALKING, { every_frame = act_hold_heavy_walking })
|
hook_mario_action(ACT_CUSTOM_HOLD_HEAVY_WALKING, { every_frame = act_hold_heavy_walking })
|
||||||
hook_mario_action(ACT_FINISH_TURNING_AROUND, { every_frame = act_finish_turning_around })
|
hook_mario_action(ACT_CUSTOM_FINISH_TURNING_AROUND, { every_frame = act_finish_turning_around })
|
||||||
hook_mario_action(ACT_CRAWLING, { every_frame = act_crawling })
|
hook_mario_action(ACT_CUSTOM_CRAWLING, { every_frame = act_crawling })
|
||||||
hook_mario_action(ACT_AIR_HIT_WALL, { every_frame = act_air_hit_wall })
|
hook_mario_action(ACT_CUSTOM_AIR_HIT_WALL, { every_frame = act_air_hit_wall })
|
||||||
|
|
||||||
hook_chat_command('ext-moveset', "Turn extended moveset [on|off]", on_chat_command)
|
hook_chat_command('ext-moveset', "Turn extended moveset [on|off]", on_chat_command)
|
Loading…
Reference in New Issue