Compare commits

...

2 Commits
master ... dash

Author SHA1 Message Date
Vivian Lim c8ffb475a5 Replace punching with dashing 2020-05-05 08:49:43 -07:00
Vivian Lim 15aa7d86bd beak bomb and dbz hovering thing 2020-05-04 00:38:57 -07:00
6 changed files with 160 additions and 21 deletions

View File

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

View File

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

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];
@ -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:

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

View File

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

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