Compare commits

...

1 Commits

Author SHA1 Message Date
Vivian Lim 15aa7d86bd beak bomb and dbz hovering thing 2020-05-04 00:38:57 -07:00
4 changed files with 58 additions and 16 deletions

View File

@ -329,6 +329,7 @@ struct MarioState
/*0xBC*/ f32 peakHeight;
/*0xC0*/ f32 quicksandDepth;
/*0xC4*/ f32 unkC4;
u8 airRepositioning;
};
#endif

View File

@ -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];
@ -1664,12 +1674,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);

View File

@ -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) {

View File

@ -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);