PvP Rework

This rearranges the damages of last PR. The underused attacks should still see some buffs.
This commit is contained in:
Sunk 2024-10-07 03:49:39 -04:00
parent b2bf9abafa
commit fa6c6bdb54
4 changed files with 12 additions and 10 deletions

View file

@ -666,13 +666,15 @@ u32 determine_knockback_action(struct MarioState *m, UNUSED s32 arg) {
// set knockback very high when dealing with player attacks
if (m->interactObj != NULL && (m->interactObj->oInteractType & INTERACT_PLAYER) && terrainIndex != 2) {
f32 scaler = 1;
s8 hasBeenPunched = FALSE;
for (s32 i = 0; i < MAX_PLAYERS; i++) {
struct MarioState* m2 = &gMarioStates[i];
if (!is_player_active(m2)) { continue; }
if (m2->marioObj == NULL) { continue; }
if (m2->marioObj != m->interactObj) { continue; }
if (m2->action == ACT_JUMP_KICK) { scaler = 2.0f; }
if (m2->action == ACT_DIVE) { scaler += fabs(m2->forwardVel * 0.01); }
else if (m2->action == ACT_DIVE) { scaler = 1 + fabs(m2->forwardVel * 0.01f); }
else if (m2->action == ACT_PUNCHING || m2->action == ACT_MOVE_PUNCHING) { hasBeenPunched = TRUE; }
if (m2->flags & MARIO_METAL_CAP) { scaler *= 1.25f; }
break;
}
@ -690,7 +692,7 @@ u32 determine_knockback_action(struct MarioState *m, UNUSED s32 arg) {
m->vel[2] = -mag * coss(m->interactObj->oFaceAngleYaw);
m->slideVelX = m->vel[0];
m->slideVelZ = m->vel[2];
m->knockbackTimer = 10;
m->knockbackTimer = hasBeenPunched ? 9 : PVP_ATTACK_KNOCKBACK_TIMER_MAX;
m->faceAngle[1] = m->interactObj->oFaceAngleYaw + (sign == 1.0f ? 0 : 0x8000);
}
@ -824,8 +826,8 @@ u32 take_damage_and_knock_back(struct MarioState *m, struct Object *o) {
}
update_mario_sound_and_camera(m);
return drop_and_set_mario_action(m, determine_knockback_action(m, o->oDamageOrCoinValue),
damage);
u32 action = determine_knockback_action(m, o->oDamageOrCoinValue);
return drop_and_set_mario_action(m, action, (m->knockbackTimer == PVP_ATTACK_KNOCKBACK_TIMER_MAX) ? damage : 0);
}
return FALSE;
@ -1317,10 +1319,8 @@ static u8 resolve_player_collision(struct MarioState* m, struct MarioState* m2)
}
u8 determine_player_damage_value(u32 interaction) {
if (interaction & INT_GROUND_POUND) { return 4; }
if (interaction & (INT_TWIRL | INT_PUNCH | INT_TRIP)) { return 3; }
if (interaction & INT_KICK) { return 2; }
if (interaction & INT_SLIDE_KICK) { return 2; }
if (interaction & INT_GROUND_POUND_OR_TWIRL) { return 3; }
if (interaction & (INT_KICK | INT_SLIDE_KICK | INT_TRIP)) { return 2; }
return 1;
}

View file

@ -99,6 +99,8 @@ enum InteractionFlag {
#define ATTACK_FAST_ATTACK 5
#define ATTACK_FROM_BELOW 6
#define PVP_ATTACK_KNOCKBACK_TIMER_MAX 10
#define INT_STATUS_ATTACK_MASK 0x000000FF
#define INT_STATUS_HOOT_GRABBED_BY_MARIO (1 << 0) /* 0x00000001 */

View file

@ -1161,7 +1161,7 @@ u32 common_air_knockback_step(struct MarioState *m, u32 landAction, u32 hardFall
mario_set_forward_vel(m, speed);
}
} else {
m->knockbackTimer = 10;
m->knockbackTimer = PVP_ATTACK_KNOCKBACK_TIMER_MAX;
}
stepResult = perform_air_step(m, 0);

View file

@ -1679,7 +1679,7 @@ s32 common_ground_knockback_action(struct MarioState *m, s32 animation, s32 arg2
}
}
} else {
m->knockbackTimer = 10;
m->knockbackTimer = PVP_ATTACK_KNOCKBACK_TIMER_MAX;
}
animFrame = set_character_animation(m, animation);