mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-03-24 03:32:22 +00:00
Merge branch 'nights-inufixes' into 'master'
NiGHTS Minor Fixes: Snappier paraloop attract; drill mash penalty; configurable link timer See merge request STJr/SRB2Internal!156
This commit is contained in:
commit
baa6ba6899
7 changed files with 65 additions and 17 deletions
|
@ -2732,11 +2732,14 @@ static void readmaincfg(MYFILE *f)
|
|||
{
|
||||
extralifetics = (UINT16)get_number(word2);
|
||||
}
|
||||
else if (fastcmp(word, "NIGHTSLINKTICS"))
|
||||
{
|
||||
nightslinktics = (UINT16)get_number(word2);
|
||||
}
|
||||
else if (fastcmp(word, "GAMEOVERTICS"))
|
||||
{
|
||||
gameovertics = get_number(word2);
|
||||
}
|
||||
|
||||
else if (fastcmp(word, "INTROTOPLAY"))
|
||||
{
|
||||
introtoplay = (UINT8)get_number(word2);
|
||||
|
|
|
@ -414,6 +414,7 @@ extern UINT16 tailsflytics;
|
|||
extern UINT16 underwatertics;
|
||||
extern UINT16 spacetimetics;
|
||||
extern UINT16 extralifetics;
|
||||
extern UINT16 nightslinktics;
|
||||
|
||||
extern UINT8 introtoplay;
|
||||
extern UINT8 creditscutscene;
|
||||
|
|
|
@ -201,6 +201,7 @@ UINT16 tailsflytics = 8*TICRATE;
|
|||
UINT16 underwatertics = 30*TICRATE;
|
||||
UINT16 spacetimetics = 11*TICRATE + (TICRATE/2);
|
||||
UINT16 extralifetics = 4*TICRATE;
|
||||
UINT16 nightslinktics = 2*TICRATE;
|
||||
|
||||
INT32 gameovertics = 15*TICRATE;
|
||||
|
||||
|
|
|
@ -182,14 +182,14 @@ void P_DoNightsScore(player_t *player)
|
|||
{
|
||||
if (++players[i].linkcount > players[i].maxlink)
|
||||
players[i].maxlink = players[i].linkcount;
|
||||
players[i].linktimer = 2*TICRATE;
|
||||
players[i].linktimer = nightslinktics;
|
||||
}
|
||||
}
|
||||
else // Individual link counts
|
||||
{
|
||||
if (++player->linkcount > player->maxlink)
|
||||
player->maxlink = player->linkcount;
|
||||
player->linktimer = 2*TICRATE;
|
||||
player->linktimer = nightslinktics;
|
||||
}
|
||||
|
||||
if (player->linkcount < 10)
|
||||
|
@ -946,6 +946,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
|||
// Yay! The thing's in reach! Pull it in!
|
||||
mo2->flags |= MF_NOCLIP|MF_NOCLIPHEIGHT;
|
||||
mo2->flags2 |= MF2_NIGHTSPULL;
|
||||
mo2->movefactor = 32*FRACUNIT; // initialize the NightsItemChase timer
|
||||
P_SetTarget(&mo2->tracer, toucher);
|
||||
}
|
||||
}
|
||||
|
@ -1159,7 +1160,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
|||
if (!G_IsSpecialStage(gamemap))
|
||||
{
|
||||
player->powers[pw_nights_linkfreeze] = (UINT16)special->info->speed;
|
||||
player->linktimer = 2*TICRATE;
|
||||
player->linktimer = nightslinktics;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1167,7 +1168,7 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
|||
if (playeringame[i] && players[i].powers[pw_carry] == CR_NIGHTSMODE)
|
||||
{
|
||||
players[i].powers[pw_nights_linkfreeze] += (UINT16)special->info->speed;
|
||||
players[i].linktimer = 2*TICRATE;
|
||||
players[i].linktimer = nightslinktics;
|
||||
}
|
||||
if (special->info->deathsound != sfx_None)
|
||||
S_StartSound(NULL, special->info->deathsound);
|
||||
|
@ -2120,7 +2121,10 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
|
|||
target->flags |= MF_NOGRAVITY|MF_NOCLIP|MF_NOCLIPHEIGHT; // Don't drop Tails 03-08-2000
|
||||
|
||||
if (target->flags2 & MF2_NIGHTSPULL)
|
||||
{
|
||||
P_SetTarget(&target->tracer, NULL);
|
||||
target->movefactor = 0; // reset NightsItemChase timer
|
||||
}
|
||||
|
||||
// dead target is no more shootable
|
||||
target->flags &= ~(MF_SHOOTABLE|MF_FLOAT|MF_SPECIAL);
|
||||
|
@ -2179,7 +2183,7 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, UINT8 damaget
|
|||
// to make people want to actually dash towards/paraloop enemies
|
||||
if (++source->player->linkcount > source->player->maxlink)
|
||||
source->player->maxlink = source->player->linkcount;
|
||||
source->player->linktimer = 2*TICRATE;
|
||||
source->player->linktimer = nightslinktics;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
40
src/p_mobj.c
40
src/p_mobj.c
|
@ -6102,9 +6102,11 @@ void P_SetScale(mobj_t *mobj, fixed_t newscale)
|
|||
void P_Attract(mobj_t *source, mobj_t *dest, boolean nightsgrab) // Home in on your target
|
||||
{
|
||||
fixed_t dist, ndist, speedmul;
|
||||
angle_t vangle;
|
||||
fixed_t tx = dest->x;
|
||||
fixed_t ty = dest->y;
|
||||
fixed_t tz = dest->z + (dest->height/2); // Aim for center
|
||||
fixed_t xydist = P_AproxDistance(tx - source->x, ty - source->y);
|
||||
|
||||
if (!dest || dest->health <= 0 || !dest->player || !source->tracer)
|
||||
return;
|
||||
|
@ -6113,19 +6115,40 @@ void P_Attract(mobj_t *source, mobj_t *dest, boolean nightsgrab) // Home in on y
|
|||
source->angle = R_PointToAngle2(source->x, source->y, tx, ty);
|
||||
|
||||
// change slope
|
||||
dist = P_AproxDistance(P_AproxDistance(tx - source->x, ty - source->y), tz - source->z);
|
||||
dist = P_AproxDistance(xydist, tz - source->z);
|
||||
|
||||
if (dist < 1)
|
||||
dist = 1;
|
||||
|
||||
if (nightsgrab)
|
||||
speedmul = P_AproxDistance(dest->momx, dest->momy) + FixedMul(8*FRACUNIT, source->scale);
|
||||
else
|
||||
speedmul = P_AproxDistance(dest->momx, dest->momy) + FixedMul(source->info->speed, source->scale);
|
||||
if (nightsgrab && source->movefactor)
|
||||
{
|
||||
source->movefactor += FRACUNIT/2;
|
||||
|
||||
source->momx = FixedMul(FixedDiv(tx - source->x, dist), speedmul);
|
||||
source->momy = FixedMul(FixedDiv(ty - source->y, dist), speedmul);
|
||||
source->momz = FixedMul(FixedDiv(tz - source->z, dist), speedmul);
|
||||
if (dist < source->movefactor)
|
||||
{
|
||||
source->momx = source->momy = source->momz = 0;
|
||||
P_TeleportMove(source, tx, ty, tz);
|
||||
}
|
||||
else
|
||||
{
|
||||
vangle = R_PointToAngle2(source->z, 0, tz, xydist);
|
||||
|
||||
source->momx = FixedMul(FINESINE(vangle >> ANGLETOFINESHIFT), FixedMul(FINECOSINE(source->angle >> ANGLETOFINESHIFT), source->movefactor));
|
||||
source->momy = FixedMul(FINESINE(vangle >> ANGLETOFINESHIFT), FixedMul(FINESINE(source->angle >> ANGLETOFINESHIFT), source->movefactor));
|
||||
source->momz = FixedMul(FINECOSINE(vangle >> ANGLETOFINESHIFT), source->movefactor);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (nightsgrab)
|
||||
speedmul = P_AproxDistance(dest->momx, dest->momy) + FixedMul(8*FRACUNIT, source->scale);
|
||||
else
|
||||
speedmul = P_AproxDistance(dest->momx, dest->momy) + FixedMul(source->info->speed, source->scale);
|
||||
|
||||
source->momx = FixedMul(FixedDiv(tx - source->x, dist), speedmul);
|
||||
source->momy = FixedMul(FixedDiv(ty - source->y, dist), speedmul);
|
||||
source->momz = FixedMul(FixedDiv(tz - source->z, dist), speedmul);
|
||||
}
|
||||
|
||||
// Instead of just unsetting NOCLIP like an idiot, let's check the distance to our target.
|
||||
ndist = P_AproxDistance(P_AproxDistance(tx - (source->x+source->momx),
|
||||
|
@ -6150,6 +6173,7 @@ static void P_NightsItemChase(mobj_t *thing)
|
|||
{
|
||||
P_SetTarget(&thing->tracer, NULL);
|
||||
thing->flags2 &= ~MF2_NIGHTSPULL;
|
||||
thing->movefactor = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
17
src/p_user.c
17
src/p_user.c
|
@ -6666,7 +6666,18 @@ static void P_NiGHTSMovement(player_t *player)
|
|||
S_StartSound(player->mo, sfx_drill1);
|
||||
player->drilltimer = 32;
|
||||
}
|
||||
else if (--player->drilltimer <= 0)
|
||||
else if (player->drilltimer == 32)
|
||||
{
|
||||
// drill mash penalty
|
||||
player->drilltimer = 31;
|
||||
player->drillmeter -= TICRATE/2;
|
||||
if (player->drillmeter <= 0)
|
||||
player->drillmeter = TICRATE/10;
|
||||
}
|
||||
else if (--player->drilltimer == 11)
|
||||
// give that drill mash penalty back (after 0.6 seconds)
|
||||
player->drillmeter += TICRATE/2;
|
||||
else if (player->drilltimer <= 0)
|
||||
{
|
||||
player->drilltimer = 10;
|
||||
S_StartSound(player->mo, sfx_drill2);
|
||||
|
@ -9787,12 +9798,16 @@ void P_PlayerThink(player_t *player)
|
|||
|| mo2->type == MT_NIGHTSCHIP || mo2->type == MT_NIGHTSSTAR))
|
||||
continue;
|
||||
|
||||
if (mo2->flags2 & MF2_NIGHTSPULL)
|
||||
continue;
|
||||
|
||||
if (P_AproxDistance(P_AproxDistance(mo2->x - x, mo2->y - y), mo2->z - z) > FixedMul(128*FRACUNIT, player->mo->scale))
|
||||
continue;
|
||||
|
||||
// Yay! The thing's in reach! Pull it in!
|
||||
mo2->flags |= MF_NOCLIP|MF_NOCLIPHEIGHT;
|
||||
mo2->flags2 |= MF2_NIGHTSPULL;
|
||||
mo2->movefactor = 40*FRACUNIT; // initialize the NightsItemChase timer
|
||||
P_SetTarget(&mo2->tracer, player->mo);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1491,8 +1491,8 @@ static void ST_drawNiGHTSLink(void)
|
|||
else
|
||||
colornum = linkColor[mag][sel];
|
||||
|
||||
aflag |= ((stplyr->linktimer < 2*TICRATE/3)
|
||||
? (9 - 9*stplyr->linktimer/(2*TICRATE/3)) << V_ALPHASHIFT
|
||||
aflag |= ((stplyr->linktimer < nightslinktics/3)
|
||||
? (9 - 9*stplyr->linktimer/(nightslinktics/3)) << V_ALPHASHIFT
|
||||
: 0);
|
||||
|
||||
y = (160+11)<<FRACBITS;
|
||||
|
|
Loading…
Reference in a new issue