Compare commits
2 Commits
Author | SHA1 | Date |
---|---|---|
Vivian Lim | c8ffb475a5 | |
Vivian Lim | 15aa7d86bd |
|
@ -329,6 +329,7 @@ struct MarioState
|
|||
/*0xBC*/ f32 peakHeight;
|
||||
/*0xC0*/ f32 quicksandDepth;
|
||||
/*0xC4*/ f32 unkC4;
|
||||
u8 airRepositioning;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -173,7 +173,7 @@ u32 determine_interaction(struct MarioState *m, struct Object *o) {
|
|||
if (action == ACT_PUNCHING || action == ACT_MOVE_PUNCHING || action == ACT_JUMP_KICK) {
|
||||
s16 dYawToObject = mario_angle_to_object(m, o) - m->faceAngle[1];
|
||||
|
||||
if (m->flags & MARIO_PUNCHING) {
|
||||
if (m->flags & MARIO_PUNCHING || action == ACT_MOVE_PUNCHING) {
|
||||
if (-0x2AAA <= dYawToObject && dYawToObject <= 0x2AAA) {
|
||||
interaction = INT_PUNCH;
|
||||
}
|
||||
|
|
|
@ -247,12 +247,12 @@ void update_lava_boost_or_twirling(struct MarioState *m) {
|
|||
m->forwardVel += coss(intendedDYaw) * intendedMag;
|
||||
m->faceAngle[1] += sins(intendedDYaw) * intendedMag * 1024.0f;
|
||||
|
||||
if (m->forwardVel < 0.0f) {
|
||||
if (m->forwardVel < 0.0f && !(m->input & INPUT_A_DOWN)) {
|
||||
m->faceAngle[1] += 0x8000;
|
||||
m->forwardVel *= -1.0f;
|
||||
}
|
||||
|
||||
if (m->forwardVel > 32.0f) {
|
||||
if (m->forwardVel > 42.0f) {
|
||||
m->forwardVel -= 2.0f;
|
||||
}
|
||||
}
|
||||
|
@ -264,6 +264,11 @@ void update_lava_boost_or_twirling(struct MarioState *m) {
|
|||
void update_flying_yaw(struct MarioState *m) {
|
||||
s16 targetYawVel = -(s16)(m->controller->stickX * (m->forwardVel / 4.0f));
|
||||
|
||||
if (m->input & INPUT_A_DOWN) {
|
||||
// we're holding in place, just allow the controller to do whatever
|
||||
targetYawVel = -(s16)(m->controller->stickX) * 20.0f;
|
||||
}
|
||||
|
||||
if (targetYawVel > 0) {
|
||||
if (m->angleVel[1] < 0) {
|
||||
m->angleVel[1] += 0x40;
|
||||
|
@ -293,6 +298,11 @@ void update_flying_yaw(struct MarioState *m) {
|
|||
void update_flying_pitch(struct MarioState *m) {
|
||||
s16 targetPitchVel = -(s16)(m->controller->stickY * (m->forwardVel / 5.0f));
|
||||
|
||||
if (m->input & INPUT_A_DOWN) {
|
||||
// we're holding in place, just allow the controller to do whatever
|
||||
targetPitchVel = -(s16)(m->controller->stickY) * 20.0f;
|
||||
}
|
||||
|
||||
if (targetPitchVel > 0) {
|
||||
if (m->angleVel[0] < 0) {
|
||||
m->angleVel[0] += 0x40;
|
||||
|
@ -333,8 +343,8 @@ void update_flying(struct MarioState *m) {
|
|||
m->faceAngle[0] += (m->forwardVel - 32.0f) * 6.0f;
|
||||
} else if (m->forwardVel > 4.0f) {
|
||||
m->faceAngle[0] += (m->forwardVel - 32.0f) * 10.0f;
|
||||
} else {
|
||||
m->faceAngle[0] -= 0x400;
|
||||
} else if (!(m->input & INPUT_A_DOWN)){
|
||||
m->faceAngle[0] -= 0x400; // tip downward when slowing
|
||||
}
|
||||
|
||||
m->faceAngle[0] += m->angleVel[0];
|
||||
|
@ -444,11 +454,14 @@ s32 act_jump(struct MarioState *m) {
|
|||
s32 act_double_jump(struct MarioState *m) {
|
||||
s32 animation;
|
||||
|
||||
/*
|
||||
if (m->vel[1] >= 0.0f) {
|
||||
animation = MARIO_ANIM_DOUBLE_JUMP_RISE;
|
||||
} else {
|
||||
animation = MARIO_ANIM_DOUBLE_JUMP_FALL;
|
||||
}
|
||||
*/
|
||||
animation = MARIO_ANIM_SLIDEFLIP;
|
||||
|
||||
if (check_kick_or_dive_in_air(m)) {
|
||||
return TRUE;
|
||||
|
@ -1664,12 +1677,44 @@ s32 act_flying(struct MarioState *m) {
|
|||
return set_mario_action(m, ACT_GROUND_POUND, 1);
|
||||
}
|
||||
|
||||
if (m->input & INPUT_A_PRESSED) {
|
||||
play_sound(SOUND_MARIO_HRMM, m->marioObj->header.gfx.cameraToObject);
|
||||
m-> airRepositioning = 1;
|
||||
}
|
||||
|
||||
if (m->input & INPUT_A_DOWN) {
|
||||
m->particleFlags |= PARTICLE_SPARKLES;
|
||||
m->forwardVel = -8;
|
||||
set_mario_animation(m, MARIO_ANIM_RIDING_SHELL);
|
||||
}
|
||||
else if (m->airRepositioning == 1){
|
||||
m->airRepositioning = 0;
|
||||
m->particleFlags |= 0x00040000;
|
||||
m->forwardVel = 35.0f;
|
||||
set_mario_animation(m, MARIO_ANIM_WING_CAP_FLY);
|
||||
}
|
||||
if (m->input & INPUT_B_PRESSED) {
|
||||
play_sound(SOUND_MARIO_UH, m->marioObj->header.gfx.cameraToObject);
|
||||
//play_sound(SOUND_MARIO_WAAAOOOW, m->marioObj->header.gfx.cameraToObject);
|
||||
play_sound(SOUND_ACTION_FLYING_FAST, m->marioObj->header.gfx.cameraToObject);
|
||||
play_sound(SOUND_GENERAL2_BOBOMB_EXPLOSION, m->marioObj->header.gfx.cameraToObject);
|
||||
m->particleFlags |= PARTICLE_DUST;
|
||||
if (m->forwardVel < 69.0f){
|
||||
m->forwardVel = 69.0f;
|
||||
}
|
||||
else {
|
||||
m->forwardVel *= 1.25f;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
if (!(m->flags & MARIO_WING_CAP)) {
|
||||
if (m->area->camera->mode == CAMERA_MODE_BEHIND_MARIO) {
|
||||
set_camera_mode(m->area->camera, m->area->camera->defMode, 1);
|
||||
}
|
||||
return set_mario_action(m, ACT_FREEFALL, 0);
|
||||
}
|
||||
*/
|
||||
|
||||
if (m->area->camera->mode != CAMERA_MODE_BEHIND_MARIO) {
|
||||
set_camera_mode(m->area->camera, CAMERA_MODE_BEHIND_MARIO, 1);
|
||||
|
@ -1928,7 +1973,7 @@ s32 act_special_triple_jump(struct MarioState *m) {
|
|||
return set_mario_action(m, ACT_GROUND_POUND, 0);
|
||||
}
|
||||
|
||||
play_mario_sound(m, SOUND_ACTION_TERRAIN_JUMP, SOUND_MARIO_YAHOO);
|
||||
play_mario_sound(m, SOUND_ACTION_TERRAIN_JUMP, 0);
|
||||
|
||||
update_air_without_turn(m);
|
||||
|
||||
|
@ -1939,7 +1984,8 @@ s32 act_special_triple_jump(struct MarioState *m) {
|
|||
} else {
|
||||
set_mario_action(m, ACT_FREEFALL_LAND_STOP, 0);
|
||||
}
|
||||
play_mario_landing_sound(m, SOUND_ACTION_TERRAIN_LANDING);
|
||||
//play_mario_landing_sound(m, SOUND_ACTION_TERRAIN_LANDING);
|
||||
play_mario_sound(m, SOUND_ACTION_TERRAIN_LANDING, SOUND_MARIO_HAHA);
|
||||
break;
|
||||
|
||||
case AIR_STEP_HIT_WALL:
|
||||
|
|
|
@ -146,15 +146,7 @@ void slide_bonk(struct MarioState *m, u32 fastAction, u32 slowAction) {
|
|||
}
|
||||
|
||||
s32 set_triple_jump_action(struct MarioState *m, UNUSED u32 action, UNUSED u32 actionArg) {
|
||||
if (m->flags & MARIO_WING_CAP) {
|
||||
return set_mario_action(m, ACT_FLYING_TRIPLE_JUMP, 0);
|
||||
} else if (m->forwardVel > 20.0f) {
|
||||
return set_mario_action(m, ACT_TRIPLE_JUMP, 0);
|
||||
} else {
|
||||
return set_mario_action(m, ACT_JUMP, 0);
|
||||
}
|
||||
|
||||
return 0;
|
||||
return set_mario_action(m, ACT_FLYING_TRIPLE_JUMP, 0);
|
||||
}
|
||||
|
||||
void update_sliding_angle(struct MarioState *m, f32 accel, f32 lossFactor) {
|
||||
|
@ -487,11 +479,13 @@ s32 check_ground_dive_or_punch(struct MarioState *m) {
|
|||
UNUSED s32 unused;
|
||||
|
||||
if (m->input & INPUT_B_PRESSED) {
|
||||
/*
|
||||
//! Speed kick (shoutouts to SimpleFlips)
|
||||
if (m->forwardVel >= 29.0f && m->controller->stickMag > 48.0f) {
|
||||
m->vel[1] = 20.0f;
|
||||
return set_mario_action(m, ACT_DIVE, 1);
|
||||
}
|
||||
*/
|
||||
|
||||
return set_mario_action(m, ACT_MOVE_PUNCHING, 0);
|
||||
}
|
||||
|
@ -843,6 +837,89 @@ s32 act_walking(struct MarioState *m) {
|
|||
}
|
||||
|
||||
s32 act_move_punching(struct MarioState *m) {
|
||||
// repurpose for star dash
|
||||
|
||||
if (m->input & INPUT_A_PRESSED) {
|
||||
return set_mario_action(m, ACT_SPECIAL_TRIPLE_JUMP, 0);
|
||||
}
|
||||
|
||||
if (m->input & INPUT_B_PRESSED && m->actionState > 0) {
|
||||
return set_mario_action(m, ACT_BRAKING, 0);
|
||||
}
|
||||
|
||||
if (m->actionState == 0) {
|
||||
//play_sound(SOUND_MARIO_YAHOO_WAHA_YIPPEE, m->marioObj->header.gfx.cameraToObject);
|
||||
play_sound(SOUND_GENERAL_SWISH_AIR, m->marioObj->header.gfx.cameraToObject);
|
||||
}
|
||||
|
||||
m->actionState = 1;
|
||||
//m->flags |= MARIO_PUNCHING;
|
||||
|
||||
if (mario_check_object_grab(m)) {
|
||||
mario_grab_used_object(m);
|
||||
m->marioBodyState->grabPos = GRAB_POS_LIGHT_OBJ;
|
||||
return set_mario_action(m, ACT_DIVE_SLIDE, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
if (m->waterLevel - m->floorHeight > 50.0f) {
|
||||
play_sound(SOUND_GENERAL_FLAME_OUT, m->marioObj->header.gfx.cameraToObject);
|
||||
return set_mario_action(m, ACT_WALKING, 0);
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
if (m->input & INPUT_Z_DOWN) {
|
||||
if (m->forwardVel > 0) {
|
||||
m->forwardVel = approach_f32(m->forwardVel, 0.0f, 4.0f, 2.0f);
|
||||
}
|
||||
else if (m->forwardVel == 0){
|
||||
return set_mario_action(m, ACT_BRAKING, 0);
|
||||
}
|
||||
}
|
||||
else {
|
||||
m->forwardVel = approach_f32(m->forwardVel, 60.0f, 10.0f, 1.0f);
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (m->input & INPUT_Z_DOWN) {
|
||||
set_mario_animation(m, MARIO_ANIM_SKID_ON_GROUND);
|
||||
m->particleFlags |= PARTICLE_DUST;
|
||||
play_sound(SOUND_MOVING_TERRAIN_SLIDE + m->terrainSoundAddend, m->marioObj->header.gfx.cameraToObject);
|
||||
}
|
||||
else {
|
||||
set_mario_anim_with_accel(m, MARIO_ANIM_RUNNING, (s32)(m->forwardVel / 2.0f * 0x10000));
|
||||
m->particleFlags |= PARTICLE_SPARKLES;
|
||||
}
|
||||
|
||||
|
||||
if (m->input & INPUT_NONZERO_ANALOG) {
|
||||
m->faceAngle[1] =
|
||||
m->intendedYaw - approach_s32((s16)(m->intendedYaw - m->faceAngle[1]), 0, 0x600, 0x600);
|
||||
}
|
||||
|
||||
apply_slope_accel(m);
|
||||
|
||||
switch (perform_ground_step(m)) {
|
||||
case GROUND_STEP_LEFT_GROUND:
|
||||
set_mario_action(m, ACT_FREEFALL, 0);
|
||||
break;
|
||||
|
||||
case GROUND_STEP_HIT_WALL:
|
||||
slide_bonk(m, ACT_BACKWARD_GROUND_KB, ACT_BRAKING_STOP);
|
||||
break;
|
||||
}
|
||||
|
||||
//func_80263AD4(m, 9, 45);
|
||||
|
||||
//play_sound(SOUND_MOVING_SHOCKED, m->marioObj->header.gfx.cameraToObject);
|
||||
play_sound(SOUND_ACTION_TERRAIN_STEP, m->marioObj->header.gfx.cameraToObject);
|
||||
|
||||
return FALSE;
|
||||
//
|
||||
/*
|
||||
|
||||
if (should_begin_sliding(m)) {
|
||||
return set_mario_action(m, ACT_BEGIN_SLIDING, 0);
|
||||
}
|
||||
|
@ -853,7 +930,7 @@ s32 act_move_punching(struct MarioState *m) {
|
|||
|
||||
m->actionState = 1;
|
||||
|
||||
mario_update_punch_sequence(m);
|
||||
//mario_update_punch_sequence(m);
|
||||
|
||||
if (m->forwardVel >= 0.0f) {
|
||||
apply_slope_decel(m, 0.5f);
|
||||
|
@ -864,6 +941,9 @@ s32 act_move_punching(struct MarioState *m) {
|
|||
apply_slope_accel(m);
|
||||
}
|
||||
|
||||
play_sound(SOUND_MARIO_ON_FIRE, m->marioObj->header.gfx.cameraToObject);
|
||||
m->forwardVel = 20.0f;
|
||||
|
||||
switch (perform_ground_step(m)) {
|
||||
case GROUND_STEP_LEFT_GROUND:
|
||||
set_mario_action(m, ACT_FREEFALL, 0);
|
||||
|
@ -875,6 +955,7 @@ s32 act_move_punching(struct MarioState *m) {
|
|||
}
|
||||
|
||||
return FALSE;
|
||||
*/
|
||||
}
|
||||
|
||||
s32 act_hold_walking(struct MarioState *m) {
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
* Used by act_punching() to determine Mario's forward velocity during each
|
||||
* animation frame.
|
||||
*/
|
||||
s8 sPunchingForwardVelocities[8] = { 0, 1, 1, 2, 3, 5, 7, 10 };
|
||||
s8 sPunchingForwardVelocities[8] = { 0, 100, 90, 100, 10, 10, 5, 4 };
|
||||
|
||||
void animated_stationary_ground_step(struct MarioState *m, s32 animation, u32 endAction) {
|
||||
stationary_ground_step(m);
|
||||
|
@ -158,9 +158,13 @@ s32 act_punching(struct MarioState *m) {
|
|||
}
|
||||
|
||||
m->actionState = 1;
|
||||
/*
|
||||
if (m->actionArg == 0) {
|
||||
m->actionTimer = 7;
|
||||
}
|
||||
*/
|
||||
|
||||
m->actionTimer = 4;
|
||||
|
||||
mario_set_forward_vel(m, sPunchingForwardVelocities[m->actionTimer]);
|
||||
if (m->actionTimer > 0) {
|
||||
|
|
|
@ -333,7 +333,14 @@ static s32 act_water_idle(struct MarioState *m) {
|
|||
}
|
||||
|
||||
if (m->input & INPUT_B_PRESSED) {
|
||||
return set_mario_action(m, ACT_WATER_PUNCH, 0);
|
||||
//return set_mario_action(m, ACT_WATER_PUNCH, 0);
|
||||
play_sound(SOUND_MARIO_UH, m->marioObj->header.gfx.cameraToObject);
|
||||
play_sound(SOUND_MARIO_WAAAOOOW, m->marioObj->header.gfx.cameraToObject);
|
||||
play_sound(SOUND_ACTION_FLYING_FAST, m->marioObj->header.gfx.cameraToObject);
|
||||
play_sound(SOUND_GENERAL2_BOBOMB_EXPLOSION, m->marioObj->header.gfx.cameraToObject);
|
||||
m->particleFlags |= PARTICLE_DUST;
|
||||
m->particleFlags |= PARTICLE_SPARKLES;
|
||||
m->forwardVel = 69.0f;
|
||||
}
|
||||
|
||||
if (m->input & INPUT_A_PRESSED) {
|
||||
|
@ -1354,7 +1361,7 @@ static s32 act_metal_water_falling(struct MarioState *m) {
|
|||
}
|
||||
|
||||
set_mario_animation(m, m->actionArg == 0 ? MARIO_ANIM_GENERAL_FALL : MARIO_ANIM_FALL_FROM_WATER);
|
||||
stationary_slow_down(m);
|
||||
//stationary_slow_down(m);
|
||||
|
||||
if (perform_water_step(m) & WATER_STEP_HIT_FLOOR) { // hit floor or cancelled
|
||||
set_mario_action(m, ACT_METAL_WATER_FALL_LAND, 0);
|
||||
|
@ -1377,7 +1384,7 @@ static s32 act_hold_metal_water_falling(struct MarioState *m) {
|
|||
}
|
||||
|
||||
set_mario_animation(m, MARIO_ANIM_FALL_WITH_LIGHT_OBJ);
|
||||
stationary_slow_down(m);
|
||||
//stationary_slow_down(m);
|
||||
|
||||
if (perform_water_step(m) & WATER_STEP_HIT_FLOOR) { // hit floor or cancelled
|
||||
set_mario_action(m, ACT_HOLD_METAL_WATER_FALL_LAND, 0);
|
||||
|
|
Loading…
Reference in New Issue