mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2026-05-09 18:31:43 +00:00
PvP Rework
This rearranges the damages of last PR. The underused attacks should still see some buffs.
This commit is contained in:
parent
b2bf9abafa
commit
fa6c6bdb54
4 changed files with 12 additions and 10 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue