mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2026-05-09 18:31:43 +00:00
Adjust how punches apply invincibility
Also increase punch invincibility timer to 12
This commit is contained in:
parent
fa6c6bdb54
commit
1d2dc78b84
7 changed files with 27 additions and 8 deletions
|
|
@ -3675,6 +3675,15 @@ INT_SUBTYPE_STAR_DOOR = 0x00000020
|
|||
--- @type integer
|
||||
INT_SUBTYPE_TWIRL_BOUNCE = 0x00000080
|
||||
|
||||
--- @type integer
|
||||
PVP_ATTACK_KNOCKBACK_TIMER_DEFAULT = 10
|
||||
|
||||
--- @type integer
|
||||
PVP_ATTACK_KNOCKBACK_TIMER_OVERRIDE = 9
|
||||
|
||||
--- @type integer
|
||||
PVP_ATTACK_OVERRIDE_VANILLA_INVINCIBILITY = 0x0000FFFF
|
||||
|
||||
--- @class InteractionFlag
|
||||
|
||||
--- @type InteractionFlag
|
||||
|
|
|
|||
|
|
@ -1295,6 +1295,9 @@
|
|||
- INT_SUBTYPE_SIGN
|
||||
- INT_SUBTYPE_STAR_DOOR
|
||||
- INT_SUBTYPE_TWIRL_BOUNCE
|
||||
- PVP_ATTACK_KNOCKBACK_TIMER_DEFAULT
|
||||
- PVP_ATTACK_KNOCKBACK_TIMER_OVERRIDE
|
||||
- PVP_ATTACK_OVERRIDE_VANILLA_INVINCIBILITY
|
||||
|
||||
### [enum InteractionFlag](#InteractionFlag)
|
||||
| Identifier | Value |
|
||||
|
|
|
|||
|
|
@ -692,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 = hasBeenPunched ? 9 : PVP_ATTACK_KNOCKBACK_TIMER_MAX;
|
||||
m->knockbackTimer = hasBeenPunched ? PVP_ATTACK_KNOCKBACK_TIMER_OVERRIDE : PVP_ATTACK_KNOCKBACK_TIMER_DEFAULT;
|
||||
|
||||
m->faceAngle[1] = m->interactObj->oFaceAngleYaw + (sign == 1.0f ? 0 : 0x8000);
|
||||
}
|
||||
|
|
@ -827,7 +827,7 @@ u32 take_damage_and_knock_back(struct MarioState *m, struct Object *o) {
|
|||
|
||||
update_mario_sound_and_camera(m);
|
||||
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 drop_and_set_mario_action(m, action, (m->knockbackTimer == PVP_ATTACK_KNOCKBACK_TIMER_DEFAULT) ? damage : PVP_ATTACK_OVERRIDE_VANILLA_INVINCIBILITY);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
|
@ -1450,8 +1450,8 @@ u32 interact_player_pvp(struct MarioState* attacker, struct MarioState* victim)
|
|||
// determine if slide attack should be ignored
|
||||
if ((interaction & INT_ATTACK_SLIDE) || player_is_sliding(cVictim)) {
|
||||
// determine the difference in velocities
|
||||
Vec3f velDiff;
|
||||
vec3f_dif(velDiff, attacker->vel, cVictim->vel);
|
||||
//Vec3f velDiff;
|
||||
//vec3f_dif(velDiff, attacker->vel, cVictim->vel);
|
||||
|
||||
if (attacker->action == ACT_SLIDE_KICK_SLIDE || attacker->action == ACT_SLIDE_KICK) {
|
||||
// if the difference vectors are not different enough, do not attack
|
||||
|
|
|
|||
|
|
@ -99,7 +99,9 @@ enum InteractionFlag {
|
|||
#define ATTACK_FAST_ATTACK 5
|
||||
#define ATTACK_FROM_BELOW 6
|
||||
|
||||
#define PVP_ATTACK_KNOCKBACK_TIMER_MAX 10
|
||||
#define PVP_ATTACK_KNOCKBACK_TIMER_DEFAULT 10
|
||||
#define PVP_ATTACK_KNOCKBACK_TIMER_OVERRIDE 9
|
||||
#define PVP_ATTACK_OVERRIDE_VANILLA_INVINCIBILITY 0x0000FFFF
|
||||
|
||||
#define INT_STATUS_ATTACK_MASK 0x000000FF
|
||||
|
||||
|
|
|
|||
|
|
@ -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 = PVP_ATTACK_KNOCKBACK_TIMER_MAX;
|
||||
m->knockbackTimer = PVP_ATTACK_KNOCKBACK_TIMER_DEFAULT;
|
||||
}
|
||||
|
||||
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 = PVP_ATTACK_KNOCKBACK_TIMER_MAX;
|
||||
m->knockbackTimer = PVP_ATTACK_KNOCKBACK_TIMER_DEFAULT;
|
||||
}
|
||||
|
||||
animFrame = set_character_animation(m, animation);
|
||||
|
|
@ -1701,7 +1701,9 @@ s32 common_ground_knockback_action(struct MarioState *m, s32 animation, s32 arg2
|
|||
if (m->health < 0x100) {
|
||||
set_mario_action(m, ACT_STANDING_DEATH, 0);
|
||||
} else {
|
||||
if (arg4 > 0) {
|
||||
if (arg4 == PVP_ATTACK_OVERRIDE_VANILLA_INVINCIBILITY) { // Make being punched have reduced invincibility frames
|
||||
m->invincTimer = 12;
|
||||
} else if (arg4 > 0) {
|
||||
m->invincTimer = 30;
|
||||
}
|
||||
set_mario_action(m, ACT_IDLE, 0);
|
||||
|
|
|
|||
|
|
@ -1444,6 +1444,9 @@ char gSmluaConstants[] = ""
|
|||
"ATTACK_GROUND_POUND_OR_TWIRL = 4\n"
|
||||
"ATTACK_FAST_ATTACK = 5\n"
|
||||
"ATTACK_FROM_BELOW = 6\n"
|
||||
"PVP_ATTACK_KNOCKBACK_TIMER_DEFAULT = 10\n"
|
||||
"PVP_ATTACK_KNOCKBACK_TIMER_OVERRIDE = 9\n"
|
||||
"PVP_ATTACK_OVERRIDE_VANILLA_INVINCIBILITY = 0x0000FFFF\n"
|
||||
"INT_STATUS_ATTACK_MASK = 0x000000FF\n"
|
||||
"INT_STATUS_HOOT_GRABBED_BY_MARIO = (1 << 0)\n"
|
||||
"INT_STATUS_MARIO_UNK1 = (1 << 1)\n"
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue