mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-11-29 07:23:01 +00:00
211 lines
No EOL
10 KiB
Lua
211 lines
No EOL
10 KiB
Lua
if not _G.charSelectExists then return end
|
|
|
|
E_MODEL_PEACH_PLAYER = smlua_model_util_get_id("peach_player_geo")
|
|
|
|
local TEX_PEACH = get_texture_info("peach_player_icon")
|
|
|
|
ACT_PEACH_FLOAT = allocate_mario_action(ACT_GROUP_AIRBORNE | ACT_FLAG_ALLOW_VERTICAL_WIND_ACTION | ACT_FLAG_MOVING)
|
|
|
|
VOICETABLE_PEACH = {
|
|
[CHAR_SOUND_ATTACKED] = "peach_attacked.ogg",
|
|
[CHAR_SOUND_COUGHING1] = "peach_coughing1.ogg",
|
|
[CHAR_SOUND_COUGHING2] = "peach_coughing2.ogg",
|
|
[CHAR_SOUND_COUGHING3] = "peach_coughing3.ogg",
|
|
[CHAR_SOUND_DOH] = "peach_doh.ogg",
|
|
[CHAR_SOUND_DROWNING] = "peach_drowning.ogg",
|
|
[CHAR_SOUND_DYING] = "peach_dying.ogg",
|
|
[CHAR_SOUND_EEUH] = "peach_euuh.ogg",
|
|
[CHAR_SOUND_GROUND_POUND_WAH] = "peach_ground_pound_wah.ogg",
|
|
[CHAR_SOUND_HAHA] = "peach_haha.ogg",
|
|
[CHAR_SOUND_HAHA_2] = "peach_haha.ogg",
|
|
[CHAR_SOUND_HERE_WE_GO] = "peach_herewego.ogg",
|
|
[CHAR_SOUND_HOOHOO] = "peach_hoohoo.ogg",
|
|
[CHAR_SOUND_HRMM] = "peach_hrmm.ogg",
|
|
[CHAR_SOUND_IMA_TIRED] = "peach_imatired.ogg",
|
|
[CHAR_SOUND_MAMA_MIA] = "peach_mamamia.ogg",
|
|
[CHAR_SOUND_LETS_A_GO] = "peach_letsago.ogg",
|
|
[CHAR_SOUND_ON_FIRE] = "peach_on_fire.ogg",
|
|
[CHAR_SOUND_OOOF] = "peach_ooof.ogg",
|
|
[CHAR_SOUND_OOOF2] = "peach_ooof2.ogg",
|
|
[CHAR_SOUND_PANTING] = "peach_panting.ogg",
|
|
[CHAR_SOUND_PANTING_COLD] = "peach_panting_cold.ogg",
|
|
[CHAR_SOUND_PUNCH_HOO] = "peach_punch_hoo.ogg",
|
|
[CHAR_SOUND_PUNCH_WAH] = "peach_punch_wah.ogg",
|
|
[CHAR_SOUND_PUNCH_YAH] = "peach_punch_yah.ogg",
|
|
[CHAR_SOUND_SO_LONGA_BOWSER] = "peach_solonga_bowser.ogg",
|
|
[CHAR_SOUND_SNORING1] = "peach_snoring1.ogg",
|
|
[CHAR_SOUND_SNORING2] = "peach_snoring2.ogg",
|
|
[CHAR_SOUND_SNORING3] = {"peach_snoring2.ogg", "peach_snoring1.ogg", "peach_snoring3.ogg"},
|
|
[CHAR_SOUND_TWIRL_BOUNCE] = "peach_twirl_bounce.ogg",
|
|
[CHAR_SOUND_UH] = "peach_uh.ogg",
|
|
[CHAR_SOUND_UH2] = "peach_uh2.ogg",
|
|
[CHAR_SOUND_UH2_2] = "peach_uh2_2.ogg",
|
|
[CHAR_SOUND_WAAAOOOW] = "peach_waaaooow.ogg",
|
|
[CHAR_SOUND_WAH2] = "peach_ground_pound_wah.ogg",
|
|
[CHAR_SOUND_WHOA] = "peach_whoa.ogg",
|
|
[CHAR_SOUND_YAHOO] = "peach_yahoo.ogg",
|
|
[CHAR_SOUND_YAWNING] = "peach_yawning.ogg",
|
|
[CHAR_SOUND_YAHOO_WAHA_YIPPEE] = { "peach_yahoo.ogg", "peach_yahoo1.ogg", "peach_yahoo2.ogg", "peach_yahoo3.ogg", "peach_yahoo4.ogg", "peach_yahoo5.ogg" },
|
|
[CHAR_SOUND_YAH_WAH_HOO] = { "peach_yah_wah_hoo1.ogg", "peach_yah_wah_hoo2.ogg", "peach_yah_wha_hoo3.ogg"},
|
|
[CHAR_SOUND_HELLO] = "peach_float.ogg"
|
|
}
|
|
|
|
-- CAPS (Will be worked on in the future)
|
|
-- local capPEACH = {
|
|
-- normal = smlua_model_util_get_id("peachs_cap_geo"),
|
|
-- wing = smlua_model_util_get_id("peachs_wing_cap_geo"),
|
|
-- metal = smlua_model_util_get_id("peachs_metal_cap_geo"),
|
|
-- metalWing = smlua_model_util_get_id("peachs_metal_wing_cap_geo")
|
|
-- }
|
|
|
|
ANIMTABLE_PEACH = {
|
|
[CHAR_ANIM_RUNNING] = "peach_running",
|
|
[CHAR_ANIM_IDLE_HEAD_CENTER] = "peach_idle_head_center",
|
|
[CHAR_ANIM_IDLE_HEAD_LEFT] = "peach_idle_head_left",
|
|
[CHAR_ANIM_IDLE_HEAD_RIGHT] = "peach_idle_head_right",
|
|
[CHAR_ANIM_BACKWARD_KB] = "peach_backward_kb",
|
|
[CHAR_ANIM_FIRST_PERSON] = "peach_first_person",
|
|
[CHAR_ANIM_FLUTTERKICK] = "peach_flutterkick",
|
|
[CHAR_ANIM_FLUTTERKICK_WITH_OBJ] = "peach_flutterkick_with_obj",
|
|
[CHAR_ANIM_FORWARD_KB] = "peach_forward_kb",
|
|
[CHAR_ANIM_GROUND_BONK] = "peach_ground_bonk",
|
|
[CHAR_ANIM_GROUND_KICK] = "peach_ground_kick",
|
|
[CHAR_ANIM_GROUND_THROW] = "peach_ground_throw",
|
|
[CHAR_ANIM_HEAVY_THROW] = "peach_heavy_throw",
|
|
[CHAR_ANIM_MISSING_CAP] = "peach_missing_cap",
|
|
[CHAR_ANIM_PULL_DOOR_WALK_IN] = "peach_pull_door_walk_in",
|
|
[CHAR_ANIM_FIRST_PERSON] = "peach_first_person",
|
|
[CHAR_ANIM_RELEASE_BOWSER] = "peach_release_bowser",
|
|
[CHAR_ANIM_RETURN_FROM_STAR_DANCE] = "peach_return_from_star_dance",
|
|
[CHAR_ANIM_RETURN_STAR_APPROACH_DOOR] = "peach_return_star_approach_door",
|
|
[CHAR_ANIM_SLIDEFLIP_LAND] = "peach_sideflip_land",
|
|
[CHAR_ANIM_SLEEP_IDLE] = "peach_sleep_idle",
|
|
[CHAR_ANIM_START_SLEEP_SITTING] = "peach_sleep_sitting",
|
|
[CHAR_ANIM_SOFT_BACK_KB] = "peach_soft_back_kb",
|
|
[CHAR_ANIM_SOFT_FRONT_KB] = "peach_soft_front_kb",
|
|
[CHAR_ANIM_STAR_DANCE] = "peach_star_dance",
|
|
[CHAR_ANIM_START_CROUCHING] = "peach_start_crouch",
|
|
[CHAR_ANIM_STOP_CROUCHING] = "peach_stop_crouch",
|
|
[CHAR_ANIM_START_SLEEP_IDLE] = "peach_start_sleep",
|
|
[CHAR_ANIM_STOP_SLIDE] = "peach_stop_slide",
|
|
[CHAR_ANIM_SUMMON_STAR] = "peach_summon_star",
|
|
[CHAR_ANIM_SWIM_WITH_OBJ_PART1] = "peach_swim_with_obj1",
|
|
[CHAR_ANIM_SWIM_WITH_OBJ_PART2] = "peach_swim_with_obj2",
|
|
[CHAR_ANIM_TRIPLE_JUMP_LAND] = "peach_triple_jump_land",
|
|
[CHAR_ANIM_TURNING_PART1] = "peach_turning_part1",
|
|
[CHAR_ANIM_TURNING_PART2] = "peach_turning_part2",
|
|
[CHAR_ANIM_TWIRL_LAND] = "peach_twirl_land",
|
|
[CHAR_ANIM_WAKE_FROM_LYING] = "peach_wake_from_lying",
|
|
[CHAR_ANIM_WAKE_FROM_SLEEP] = "peach_wake_from_sleep",
|
|
[CHAR_ANIM_CREDITS_RAISE_HAND] = "peach_credits_raise_hand",
|
|
[CHAR_ANIM_CREDITS_RETURN_FROM_LOOK_UP] = "peach_credits_return_from_look_up",
|
|
[CHAR_ANIM_CREDITS_START_WALK_LOOK_UP] = "peach_credits_start_walk_look_up",
|
|
[CHAR_ANIM_CREDITS_TAKE_OFF_CAP] = "peach_credits_take_off_cap",
|
|
[CHAR_ANIM_DYING_FALL_OVER] = "peach_dying_fall_over",
|
|
[CHAR_ANIM_FALL_OVER_BACKWARDS] = "peach_fall_over_backwards",
|
|
[CHAR_ANIM_FAST_LEDGE_GRAB] = "peach_fast_ledge_grab",
|
|
-- [CHAR_ANIM_FINAL_BOWSER_RAISE_HAND_SPIN] = "peach_final_bowser_raise_hand_spin",
|
|
[CHAR_ANIM_FIRST_PUNCH_FAST] = "peach_first_punch_fast",
|
|
[CHAR_ANIM_GENERAL_LAND] = "peach_general_land",
|
|
[CHAR_ANIM_HEAD_STUCK_IN_GROUND] = "peach_head_stuck_in_ground",
|
|
[CHAR_ANIM_LAND_FROM_DOUBLE_JUMP] = "peach_land_from_double_jump",
|
|
[CHAR_ANIM_LAND_FROM_SINGLE_JUMP] = "peach_land_from_single_jump",
|
|
[CHAR_ANIM_LAND_ON_STOMACH] = "peach_land_on_stomach",
|
|
[CHAR_ANIM_LEGS_STUCK_IN_GROUND] = "peach_legs_stuck_in_ground",
|
|
[CHAR_ANIM_PLACE_LIGHT_OBJ] = "peach_place_light_obj",
|
|
[CHAR_ANIM_PUSH_DOOR_WALK_IN] = "peach_push_door_walk_in",
|
|
[CHAR_ANIM_PUT_CAP_ON] = "peach_put_cap_on",
|
|
[CHAR_ANIM_RUN_WITH_LIGHT_OBJ] = "peach_run_with_light_obj",
|
|
[CHAR_ANIM_SECOND_PUNCH_FAST] = "peach_second_punch_fast",
|
|
[CHAR_ANIM_SHIVERING_RETURN_TO_IDLE] = "peach_shivering_returning_to_idle",
|
|
[CHAR_ANIM_SKID_ON_GROUND] = "peach_skid_on_ground",
|
|
[CHAR_ANIM_SLOW_LAND_FROM_DIVE] = "peach_slow_land_from_dive",
|
|
[CHAR_ANIM_SLOW_LEDGE_GRAB] = "peach_slow_ledge_grab",
|
|
[CHAR_ANIM_SLOW_WALK_WITH_LIGHT_OBJ] = "peach_slow_walk_with_light_obj",
|
|
[CHAR_ANIM_STAND_UP_FROM_LAVA_BOOST] = "peach_stand_up_from_lava_boost",
|
|
[CHAR_ANIM_STOP_SKID] = "peach_stop_skid",
|
|
[CHAR_ANIM_TAKE_CAP_OFF_THEN_ON] = "peach_take_cap_off_then_on",
|
|
[CHAR_ANIM_THROW_CATCH_KEY] = "peach_throw_catch_key",
|
|
[CHAR_ANIM_WALK_WITH_LIGHT_OBJ] = "peach_walk_with_light_obj",
|
|
[CHAR_ANIM_BOTTOM_STUCK_IN_GROUND] = "peach_bottom_stuck_in_ground",
|
|
-- [CHAR_ANIM_CREDITS_PEACE_SIGN] = "peach_credits_peace_sign",
|
|
[CHAR_ANIM_FIRE_LAVA_BURN] = "peach_fire_lava_burn",
|
|
[CHAR_ANIM_GROUND_POUND] = "peach_ground_pound",
|
|
[CHAR_ANIM_GROUND_POUND_LANDING] = "peach_ground_pound_landing",
|
|
[CHAR_ANIM_TRIPLE_JUMP_GROUND_POUND] = "peach_triple_jump_ground_pound_anim",
|
|
[CHAR_ANIM_UNLOCK_DOOR] = "peach_unlock_door",
|
|
[CHAR_ANIM_SWINGING_BOWSER] = "peach_swinging_bowser",
|
|
[CHAR_ANIM_HOLDING_BOWSER] = "peach_holding_bowser",
|
|
[CHAR_ANIM_GRAB_BOWSER] = "peach_grab_bowser",
|
|
[CHAR_ANIM_BEND_KNESS_RIDING_SHELL] = "peach_dressfloating"
|
|
}
|
|
|
|
local PALETTE_PEACH = {
|
|
[PANTS] = { r = 0xFF, g = 0x50, b = 0x96 },
|
|
[SHIRT] = { r = 0xF8, g = 0xC8, b = 0xBB },
|
|
[GLOVES] = { r = 0xFF, g = 0xFF, b = 0xFF },
|
|
[SHOES] = { r = 0x00, g = 0x00, b = 0xFF },
|
|
[HAIR] = { r = 0xFF, g = 0xD3, b = 0x02 },
|
|
[SKIN] = { r = 0xFE, g = 0xC1, b = 0x79 },
|
|
[CAP] = { r = 0xFF, g = 0xFF, b = 0x00 },
|
|
[EMBLEM] = { r = 0x00, g = 0x82, b = 0xFF }
|
|
}
|
|
|
|
CT_PEACH = _G.charSelect.character_add("Princess Peach", "The ruler of the Mushroom Kingdom, always ready to help Mario in his adventures and save her kingdom from the evil clutches of King Bowser! Voiced by SuperKirbyLover", "Melzinoff & SuperKirbyLover", {r = 239, g = 128, b = 177}, E_MODEL_PEACH_PLAYER, CT_MARIO, TEX_PEACH)
|
|
-- _G.charSelect.character_add_caps(E_MODEL_PEACH, capPEACH)
|
|
_G.charSelect.character_add_voice(E_MODEL_PEACH_PLAYER, VOICETABLE_PEACH)
|
|
_G.charSelect.character_add_palette_preset(E_MODEL_PEACH_PLAYER, PALETTE_PEACH)
|
|
|
|
--- @param m MarioState
|
|
local function act_peach_float(m)
|
|
-- apply movement when using action
|
|
common_air_action_step(m, ACT_JUMP_LAND, CHAR_ANIM_BEND_KNESS_RIDING_SHELL, AIR_STEP_NONE)
|
|
|
|
-- setup when action starts (horizontal speed and voiceline)
|
|
if m.actionTimer == 0 then
|
|
if m.forwardVel > 20 then
|
|
mario_set_forward_vel(m, 20)
|
|
end
|
|
play_character_sound(m, CHAR_SOUND_HELLO)
|
|
end
|
|
|
|
-- block all y movement when using the move
|
|
m.vel.y = 0
|
|
set_mario_particle_flags(m, PARTICLE_SPARKLES, 0)
|
|
|
|
-- avoid issue with flying and then make the hover end after 2 secs or when stopping holding the button
|
|
if m.prevAction ~= ACT_TRIPLE_JUMP and (m.flags & MARIO_WING_CAP) ~= 0 then
|
|
if m.actionTimer >= 50 or (m.controller.buttonDown & A_BUTTON) == 0 then
|
|
set_mario_action(m, ACT_FREEFALL, 0)
|
|
end
|
|
else
|
|
if m.actionTimer >= 50 or (m.controller.buttonDown & A_BUTTON) == 0 then
|
|
set_mario_action(m, ACT_FREEFALL, 0)
|
|
end
|
|
end
|
|
|
|
-- increment the action timer to make the hover stop
|
|
m.actionTimer = m.actionTimer + 1
|
|
end
|
|
|
|
--- @param m MarioState
|
|
function peach_update(m)
|
|
-- patch in custom animations
|
|
local anim = ANIMTABLE_PEACH[m.marioObj.header.gfx.animInfo.animID]
|
|
if anim ~= nil then
|
|
smlua_anim_util_set_animation(m.marioObj, anim)
|
|
end
|
|
|
|
if (m.input & INPUT_A_DOWN) ~= 0 and m.vel.y < -15 and (
|
|
m.action == ACT_JUMP or
|
|
m.action == ACT_DOUBLE_JUMP or
|
|
m.action == ACT_TRIPLE_JUMP or
|
|
m.action == ACT_LONG_JUMP or
|
|
m.action == ACT_BACKFLIP or
|
|
m.action == ACT_SIDE_FLIP or
|
|
m.action == ACT_WALL_KICK_AIR) then
|
|
set_mario_action(m, ACT_PEACH_FLOAT, 0)
|
|
end
|
|
end
|
|
|
|
hook_mario_action(ACT_PEACH_FLOAT, act_peach_float) |