mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Merge branch 'more-flip-fixes' into 'master'
More gravflip fixes Closes ring-racers#22 See merge request kart-krew-dev/ring-racers-internal!2814
This commit is contained in:
commit
5d57911f2c
20 changed files with 273 additions and 236 deletions
|
|
@ -177,10 +177,10 @@ demoghost *ghosts = NULL;
|
|||
// - 0x000D (Ring Racers v2.3)
|
||||
|
||||
// Currently supported:
|
||||
// - 0x000E (Ring Racers 2.4 staff ghosts part 1 - initial recordings)
|
||||
// - 0x000F (Ring Racers 2.4 staff ghosts part 2 - dynslopes thinker fix)
|
||||
// - 0x0010 (Ring Racers 2.4 staff ghosts part 3 - skinlimit raise. don't say we never did anythin for 'ya)
|
||||
// - 0x0011 (Ring Racers 2.4 staff ghosts part 4 - acid dropdash)
|
||||
// - 0x000E -- RR 2.4 indev (staff ghosts part 1 - initial recordings)
|
||||
// - 0x000F -- RR 2.4 indev (staff ghosts part 2 - dynslopes thinker fix)
|
||||
// - 0x0010 -- RR 2.4 rc1 (staff ghosts part 3 - skinlimit raise. don't say we never did anythin for 'ya)
|
||||
// - 0x0011 -- RR 2.4 rc2 (K_FlipFromObject oversight)
|
||||
|
||||
#define MINDEMOVERSION 0x000E
|
||||
#define DEMOVERSION 0x0011
|
||||
|
|
|
|||
|
|
@ -14052,7 +14052,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_GOIIT
|
||||
{ // MT_GOTIT
|
||||
-1, // doomednum
|
||||
S_GOTIT, // spawnstate
|
||||
1000, // spawnhealth
|
||||
|
|
|
|||
|
|
@ -620,12 +620,12 @@ void K_RunPaperItemSpawners(void)
|
|||
flip = P_MobjFlip(spotList[r]);
|
||||
|
||||
drop = K_SpawnSphereBox(
|
||||
spotList[r]->x, spotList[r]->y, spotList[r]->z + (128 * mapobjectscale * flip),
|
||||
spotList[r]->x, spotList[r]->y, spotList[r]->z + (128 * mapobjectscale),
|
||||
FixedAngle(P_RandomRange(PR_ITEM_SPAWNER, 0, 359) * FRACUNIT), flip,
|
||||
10
|
||||
);
|
||||
|
||||
K_FlipFromObject(drop, spotList[r]);
|
||||
K_FlipFromObjectNoInterp(drop, spotList[r]);
|
||||
|
||||
spotCount--;
|
||||
if (key != spotCount)
|
||||
|
|
|
|||
|
|
@ -516,7 +516,7 @@ void K_HandleFollower(player_t *player)
|
|||
player->follower->colorized = player->mo->colorized;
|
||||
|
||||
P_SetScale(player->follower, FixedMul(fl->scale, player->mo->scale));
|
||||
K_GenericExtraFlagsNoZAdjust(player->follower, player->mo); // Not K_MatchGenericExtraFlag because the Z adjust it has only works properly if master & mo have the same Z height.
|
||||
K_MatchGenericExtraFlagsNoZAdjust(player->follower, player->mo); // Not K_MatchGenericExtraFlag because the Z adjust it has only works properly if master & mo have the same Z height.
|
||||
|
||||
// Match how the player is being drawn
|
||||
player->follower->renderflags = player->mo->renderflags;
|
||||
|
|
@ -623,7 +623,7 @@ void K_HandleFollower(player_t *player)
|
|||
P_MoveOrigin(bmobj, player->follower->x, player->follower->y, player->follower->z);
|
||||
|
||||
P_SetScale(bmobj, FixedMul(bubble, player->mo->scale));
|
||||
K_GenericExtraFlagsNoZAdjust(bmobj, player->follower);
|
||||
K_MatchGenericExtraFlagsNoZAdjust(bmobj, player->follower);
|
||||
bmobj->renderflags = player->mo->renderflags;
|
||||
|
||||
if (player->follower->threshold)
|
||||
|
|
@ -712,7 +712,7 @@ void K_HandleFollower(player_t *player)
|
|||
player->follower->z + player->follower->height
|
||||
);
|
||||
|
||||
K_FlipFromObject(honk, player->follower);
|
||||
K_FlipFromObjectNoInterp(honk, player->follower);
|
||||
|
||||
honk->angle = R_PointToAngle2(
|
||||
player->mo->x,
|
||||
|
|
@ -856,7 +856,7 @@ void K_FollowerHornTaunt(player_t *taunter, player_t *victim, boolean mysticmelo
|
|||
P_SetTarget(&taunter->follower->hprev, honk);
|
||||
P_SetTarget(&honk->target, taunter->follower);
|
||||
|
||||
K_FlipFromObject(honk, taunter->follower);
|
||||
K_FlipFromObjectNoInterp(honk, taunter->follower);
|
||||
|
||||
honk->color = taunter->skincolor;
|
||||
|
||||
|
|
|
|||
|
|
@ -5265,6 +5265,7 @@ static void K_DrawTypingDot(fixed_t x, fixed_t y, UINT8 duration, player_t *p, I
|
|||
static void K_DrawTypingNotifier(fixed_t x, fixed_t y, player_t *p, INT32 flags)
|
||||
{
|
||||
int playernum = p - players;
|
||||
flags &= ~V_FLIP; // does not support this
|
||||
if (p->cmd.flags & TICCMD_TYPING || S_IsPlayerVoiceActive(playernum))
|
||||
{
|
||||
V_DrawFixedPatch(x, y, FRACUNIT, V_SPLITSCREEN|flags, kp_talk, NULL);
|
||||
|
|
@ -5279,7 +5280,7 @@ static void K_DrawTypingNotifier(fixed_t x, fixed_t y, player_t *p, INT32 flags)
|
|||
else if (S_IsPlayerVoiceActive(playernum))
|
||||
{
|
||||
patch_t* voxmic = kp_voice_tagactive[(leveltime / 3) % 3];
|
||||
V_DrawFixedPatch(x + 6*FRACUNIT, y - 12*FRACUNIT, FRACUNIT, V_SPLITSCREEN|flags, voxmic, NULL);
|
||||
V_DrawFixedPatch(x + 6*FRACUNIT, y - ((flags & V_VFLIP) ? -1 : 1)*12*FRACUNIT, FRACUNIT, V_SPLITSCREEN|flags, voxmic, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -5299,6 +5300,8 @@ static void K_DrawNameTagItemSpy(INT32 x, INT32 y, player_t *p, INT32 flags)
|
|||
flipboxoffset = 8;
|
||||
}
|
||||
|
||||
flags &= ~V_FLIP;
|
||||
|
||||
Draw bar = Draw(x, y).flags(V_NOSCALESTART|flags);
|
||||
Draw box = tiny ? bar.xy(-22 * vid.dupx, (-17+flipboxoffset) * vid.dupy) : bar.xy(-40 * vid.dupx, (-26+flipboxoffset) * vid.dupy);
|
||||
|
||||
|
|
@ -5406,7 +5409,7 @@ static void K_DrawRivalTagForPlayer(fixed_t x, fixed_t y, player_t *p, UINT32 fl
|
|||
bary = (y * vid.dupy) / FRACUNIT;
|
||||
|
||||
barx += (16 * vid.dupx);
|
||||
bary -= (25 * vid.dupx);
|
||||
bary -= P_MobjFlip(p->mo) * (25 * vid.dupx);
|
||||
|
||||
// Center it if necessary
|
||||
if (vid.width != BASEVIDWIDTH * vid.dupx)
|
||||
|
|
@ -5437,7 +5440,7 @@ static void K_DrawCPUTagForPlayer(fixed_t x, fixed_t y, player_t *p, UINT32 flag
|
|||
bary = (y * vid.dupy) / FRACUNIT;
|
||||
|
||||
barx += (16 * vid.dupx);
|
||||
bary -= (25 * vid.dupx);
|
||||
bary -= P_MobjFlip(p->mo) * (25 * vid.dupx);
|
||||
|
||||
// Center it if necessary
|
||||
if (vid.width != BASEVIDWIDTH * vid.dupx)
|
||||
|
|
@ -5466,15 +5469,22 @@ static void K_DrawNameTagForPlayer(fixed_t x, fixed_t y, player_t *p, UINT32 fla
|
|||
|
||||
UINT8 *colormap = V_GetStringColormap(clr);
|
||||
INT32 barx = 0, bary = 0, barw = 0;
|
||||
INT32 flipped = P_MobjFlip(p->mo), flipfilloffset = 0, flipfontoffset = 0, flipspheresoffset = 0;
|
||||
if (flipped == -1)
|
||||
INT32 flipped = 1, flipfilloffset = 0, flipfontoffset = 0, flipspheresoffset = 0;
|
||||
|
||||
const UINT8 cnum = R_GetViewNumber();
|
||||
|
||||
const UINT32 hadflags = flags;
|
||||
|
||||
if ((flags & V_VFLIP) == V_VFLIP)
|
||||
{
|
||||
flags &= ~V_VFLIP;
|
||||
flipped = P_MobjFlip(p->mo);
|
||||
flipfilloffset = -3; // You cannot really flip drawfill.
|
||||
flipfontoffset = -9; // Accounts for font height.
|
||||
flipspheresoffset = 2;
|
||||
}
|
||||
|
||||
UINT8 cnum = R_GetViewNumber();
|
||||
flags &= ~V_FLIP;
|
||||
|
||||
// Since there's no "V_DrawFixedFill", and I don't feel like making it,
|
||||
// fuck it, we're gonna just V_NOSCALESTART hack it
|
||||
|
|
@ -5512,12 +5522,12 @@ static void K_DrawNameTagForPlayer(fixed_t x, fixed_t y, player_t *p, UINT32 fla
|
|||
if ((p->itemtype != KITEM_NONE && p->itemamount != 0)
|
||||
|| (p->itemRoulette.active == true && p->itemRoulette.ringbox == false))
|
||||
{
|
||||
K_DrawNameTagItemSpy(barx, bary, p, flags);
|
||||
K_DrawNameTagItemSpy(barx, bary, p, hadflags);
|
||||
}
|
||||
|
||||
if (gametyperules & GTR_SPHERES)
|
||||
{
|
||||
K_DrawNameTagSphereMeter(barx, bary + (((4 + flipspheresoffset) * vid.dupy) * P_MobjFlip(p->mo)), barw, p->spheres, flags);
|
||||
K_DrawNameTagSphereMeter(barx, bary + (((4 + flipspheresoffset) * vid.dupy) * P_MobjFlip(p->mo)), barw, p->spheres, hadflags);
|
||||
}
|
||||
|
||||
// Lat: 10/06/2020: colormap can be NULL on the frame you join a game, just arbitrarily use palette indexes 31 and 0 instead of whatever the colormap would give us instead to avoid crashes.
|
||||
|
|
@ -5526,7 +5536,7 @@ static void K_DrawNameTagForPlayer(fixed_t x, fixed_t y, player_t *p, UINT32 fla
|
|||
// END DRAWFILL DUMBNESS
|
||||
|
||||
// Draw the stem
|
||||
V_DrawFixedPatch(x, y, FRACUNIT, flags, kp_nametagstem, colormap);
|
||||
V_DrawFixedPatch(x, y, FRACUNIT, (hadflags & ~V_FLIP), kp_nametagstem, colormap);
|
||||
|
||||
// Draw the name itself
|
||||
V_DrawThinStringAtFixed(x + (5*FRACUNIT), y - (((26 + flipfontoffset) * FRACUNIT) * P_MobjFlip(p->mo)), clr|flags, player_names[p - players]);
|
||||
|
|
@ -5534,7 +5544,7 @@ static void K_DrawNameTagForPlayer(fixed_t x, fixed_t y, player_t *p, UINT32 fla
|
|||
|
||||
playertagtype_t K_WhichPlayerTag(player_t *p)
|
||||
{
|
||||
UINT8 cnum = R_GetViewNumber();
|
||||
const UINT8 cnum = R_GetViewNumber();
|
||||
|
||||
if (!(demo.playback == true && camera[cnum].freecam == true) && P_IsDisplayPlayer(p) &&
|
||||
p != &players[displayplayers[cnum]])
|
||||
|
|
@ -5571,7 +5581,7 @@ playertagtype_t K_WhichPlayerTag(player_t *p)
|
|||
|
||||
void K_DrawPlayerTag(fixed_t x, fixed_t y, player_t *p, playertagtype_t type, boolean foreground)
|
||||
{
|
||||
INT32 flags = P_IsObjectFlipped(p->mo) ? V_VFLIP : 0;
|
||||
INT32 flags = P_IsObjectFlipped(p->mo) ? (V_VFLIP|V_FLIP) : 0;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
|
|
@ -5651,7 +5661,7 @@ static void K_DrawWeakSpot(weakspotdraw_t *ws)
|
|||
static void K_drawKartNameTags(void)
|
||||
{
|
||||
vector3_t c;
|
||||
UINT8 cnum = R_GetViewNumber();
|
||||
const UINT8 cnum = R_GetViewNumber();
|
||||
size_t i, j;
|
||||
|
||||
if (stplyr == NULL || stplyr->mo == NULL || P_MobjWasRemoved(stplyr->mo))
|
||||
|
|
|
|||
|
|
@ -282,10 +282,12 @@ private:
|
|||
default:
|
||||
if (K_IsPickMeUpItem(mobj->type))
|
||||
{
|
||||
const INT32 flipflag = P_IsObjectFlipped(mobj) ? V_VFLIP : 0;
|
||||
|
||||
return {
|
||||
{ // Near
|
||||
{2, TICRATE/2, {kp_pickmeup}, 0}, // 1P
|
||||
{{2, TICRATE/2, {kp_pickmeup}, 0}}, // 4P
|
||||
{2, TICRATE/2, {kp_pickmeup}, flipflag}, // 1P
|
||||
{{2, TICRATE/2, {kp_pickmeup}, flipflag}}, // 4P
|
||||
},
|
||||
};
|
||||
}
|
||||
|
|
@ -802,8 +804,8 @@ void K_DrawTargetTracking(const TargetTracking& target)
|
|||
patch_t* patch = array[(leveltime / anim.tics_per_frame) % anim.frames];
|
||||
|
||||
V_DrawFixedPatch(
|
||||
targetPos.x - ((patch->width << FRACBITS) >> 1),
|
||||
targetPos.y - ((patch->height << FRACBITS) >> 1),
|
||||
targetPos.x - (((anim.video_flags & V_FLIP) ? -1 : 1) * (patch->width << (FRACBITS-1))),
|
||||
targetPos.y - (((anim.video_flags & V_VFLIP) ? -1 : 1) * (patch->height << (FRACBITS-1))),
|
||||
FRACUNIT,
|
||||
V_SPLITSCREEN | anim.video_flags | trans,
|
||||
patch,
|
||||
|
|
@ -978,7 +980,7 @@ void K_drawTargetHUD(const vector3_t* origin, player_t* player)
|
|||
|
||||
if (K_IsPickMeUpItem(mobj->type))
|
||||
{
|
||||
if (stplyr->mo->eflags & MFE_VERTICALFLIP)
|
||||
if (mobj->eflags & MFE_VERTICALFLIP)
|
||||
{
|
||||
pos.z -= itemOffset;
|
||||
}
|
||||
|
|
|
|||
206
src/k_kart.c
206
src/k_kart.c
|
|
@ -1862,35 +1862,63 @@ void K_KartPainEnergyFling(player_t *player)
|
|||
}
|
||||
}
|
||||
|
||||
// Adds gravity flipping to an object relative to its master and shifts the z coordinate accordingly.
|
||||
void K_FlipFromObject(mobj_t *mo, mobj_t *master)
|
||||
void K_MatchFlipFlags(mobj_t *mo, mobj_t *master)
|
||||
{
|
||||
mo->eflags = (mo->eflags & ~MFE_VERTICALFLIP)|(master->eflags & MFE_VERTICALFLIP);
|
||||
mo->flags2 = (mo->flags2 & ~MF2_OBJECTFLIP)|(master->flags2 & MF2_OBJECTFLIP);
|
||||
}
|
||||
|
||||
static void K_MatchRenderFlags(mobj_t *mo, mobj_t *master)
|
||||
{
|
||||
// visibility (usually for hyudoro)
|
||||
mo->renderflags = (mo->renderflags & ~RF_DONTDRAW) | (master->renderflags & RF_DONTDRAW);
|
||||
}
|
||||
|
||||
// Adds gravity flipping to an object relative to its master and shifts the z coordinate accordingly.
|
||||
void K_FlipFromObject(mobj_t *mo, mobj_t *master)
|
||||
{
|
||||
K_MatchFlipFlags(mo, master);
|
||||
|
||||
if (mo->eflags & MFE_VERTICALFLIP)
|
||||
mo->z += master->height - FixedMul(master->scale, mo->height);
|
||||
{
|
||||
if (!G_CompatLevel(0x0010))
|
||||
{
|
||||
mo->z = master->z + master->height // offset based off new foot position
|
||||
- (mo->z - master->z) // the offset between us and master
|
||||
- mo->height; // and then move our feet
|
||||
}
|
||||
else
|
||||
{
|
||||
// GOD DAMN IT, this has been wrong for years and we only notice now
|
||||
mo->z += master->height - FixedMul(master->scale, mo->height);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void K_FlipFromObjectNoInterp(mobj_t *mo, mobj_t *master)
|
||||
{
|
||||
K_FlipFromObject(mo, master);
|
||||
mo->old_z = mo->z;
|
||||
}
|
||||
|
||||
void K_MatchGenericExtraFlags(mobj_t *mo, mobj_t *master)
|
||||
{
|
||||
// flipping
|
||||
// handle z shifting from there too. This is here since there's no reason not to flip us if needed when we do this anyway;
|
||||
K_FlipFromObject(mo, master);
|
||||
K_MatchRenderFlags(mo, master);
|
||||
}
|
||||
|
||||
// visibility (usually for hyudoro)
|
||||
mo->renderflags = (mo->renderflags & ~RF_DONTDRAW) | (master->renderflags & RF_DONTDRAW);
|
||||
// Also sets old_z. useful for on spawn or hard teleport
|
||||
void K_MatchGenericExtraFlagsNoInterp(mobj_t *mo, mobj_t *master)
|
||||
{
|
||||
K_FlipFromObjectNoInterp(mo, master);
|
||||
K_MatchRenderFlags(mo, master);
|
||||
}
|
||||
|
||||
// same as above, but does not adjust Z height when flipping
|
||||
void K_GenericExtraFlagsNoZAdjust(mobj_t *mo, mobj_t *master)
|
||||
void K_MatchGenericExtraFlagsNoZAdjust(mobj_t *mo, mobj_t *master)
|
||||
{
|
||||
// flipping
|
||||
mo->eflags = (mo->eflags & ~MFE_VERTICALFLIP)|(master->eflags & MFE_VERTICALFLIP);
|
||||
mo->flags2 = (mo->flags2 & ~MF2_OBJECTFLIP)|(master->flags2 & MF2_OBJECTFLIP);
|
||||
|
||||
// visibility (usually for hyudoro)
|
||||
mo->renderflags = (mo->renderflags & ~RF_DONTDRAW) | (master->renderflags & RF_DONTDRAW);
|
||||
K_MatchFlipFlags(mo, master);
|
||||
K_MatchRenderFlags(mo, master);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1932,7 +1960,7 @@ void K_SpawnDashDustRelease(player_t *player)
|
|||
dust->momy = 3*player->mo->momy/5;
|
||||
dust->momz = 3*P_GetMobjZMovement(player->mo)/5;
|
||||
|
||||
K_MatchGenericExtraFlags(dust, player->mo);
|
||||
K_MatchGenericExtraFlagsNoInterp(dust, player->mo);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1960,7 +1988,7 @@ static void K_SpawnBrakeDriftSparks(player_t *player) // Be sure to update the m
|
|||
sparks = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BRAKEDRIFT);
|
||||
P_SetTarget(&sparks->target, player->mo);
|
||||
P_SetScale(sparks, (sparks->destscale = FixedMul(K_GetBrakeFXScale(player, 3*FRACUNIT), player->mo->scale)));
|
||||
K_MatchGenericExtraFlags(sparks, player->mo);
|
||||
K_MatchGenericExtraFlagsNoInterp(sparks, player->mo);
|
||||
sparks->renderflags |= RF_DONTDRAW;
|
||||
}
|
||||
|
||||
|
|
@ -2045,18 +2073,12 @@ void K_SpawnDriftBoostClip(player_t *player)
|
|||
mobj_t *clip;
|
||||
fixed_t scale = 115*FRACUNIT/100;
|
||||
fixed_t momz = P_GetMobjZMovement(player->mo);
|
||||
fixed_t z;
|
||||
|
||||
if (( player->mo->eflags & MFE_VERTICALFLIP ))
|
||||
z = player->mo->z;
|
||||
else
|
||||
z = player->mo->z + player->mo->height;
|
||||
|
||||
clip = P_SpawnMobj(player->mo->x, player->mo->y, z, MT_DRIFTCLIP);
|
||||
clip = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_DRIFTCLIP);
|
||||
|
||||
P_SetTarget(&clip->target, player->mo);
|
||||
P_SetScale(clip, ( clip->destscale = FixedMul(scale, player->mo->scale) ));
|
||||
K_MatchGenericExtraFlags(clip, player->mo);
|
||||
K_MatchGenericExtraFlagsNoInterp(clip, player->mo);
|
||||
|
||||
clip->fuse = 105;
|
||||
clip->momz = 7 * P_MobjFlip(clip) * clip->scale;
|
||||
|
|
@ -2080,7 +2102,7 @@ void K_SpawnDriftBoostClipSpark(mobj_t *clip)
|
|||
|
||||
P_SetTarget(&spark->target, clip);
|
||||
P_SetScale(spark, ( spark->destscale = clip->scale ));
|
||||
K_MatchGenericExtraFlags(spark, clip);
|
||||
K_MatchGenericExtraFlagsNoInterp(spark, clip);
|
||||
|
||||
spark->momx = clip->momx/2;
|
||||
spark->momy = clip->momx/2;
|
||||
|
|
@ -2221,7 +2243,7 @@ void K_SpawnInvincibilitySpeedLines(mobj_t *mo)
|
|||
fast->momy = 3*mo->momy/4;
|
||||
fast->momz = 3*P_GetMobjZMovement(mo)/4;
|
||||
|
||||
K_MatchGenericExtraFlags(fast, mo);
|
||||
K_MatchGenericExtraFlagsNoZAdjust(fast, mo);
|
||||
P_SetTarget(&fast->owner, mo);
|
||||
fast->renderflags |= RF_REDUCEVFX;
|
||||
|
||||
|
|
@ -2289,7 +2311,7 @@ static void K_SpawnGrowShrinkParticles(mobj_t *mo, INT32 timer)
|
|||
particle->momy = mo->momy;
|
||||
particle->momz = P_GetMobjZMovement(mo);
|
||||
|
||||
K_MatchGenericExtraFlags(particle, mo);
|
||||
K_MatchGenericExtraFlagsNoZAdjust(particle, mo);
|
||||
|
||||
particleScale = FixedMul((shrink ? SHRINK_PHYSICS_SCALE : GROW_PHYSICS_SCALE), mapobjectscale);
|
||||
particleSpeed = mo->scale * 4 * P_MobjFlip(mo); // NOT particleScale
|
||||
|
|
@ -6051,7 +6073,7 @@ void K_SpawnMineExplosion(mobj_t *source, skincolornum_t color, tic_t delay)
|
|||
mobj_t *truc;
|
||||
INT32 speed, speed2;
|
||||
|
||||
K_MatchGenericExtraFlags(smoldering, source);
|
||||
K_MatchGenericExtraFlagsNoInterp(smoldering, source);
|
||||
smoldering->tics = TICRATE*3;
|
||||
smoldering->hitlag += delay;
|
||||
radius = source->radius>>FRACBITS;
|
||||
|
|
@ -6083,7 +6105,7 @@ void K_SpawnMineExplosion(mobj_t *source, skincolornum_t color, tic_t delay)
|
|||
truc = P_SpawnMobj(source->x + rand_x*FRACUNIT,
|
||||
source->y + rand_y*FRACUNIT,
|
||||
source->z + rand_z*FRACUNIT, MT_BOOMEXPLODE);
|
||||
K_MatchGenericExtraFlags(truc, source);
|
||||
K_MatchGenericExtraFlagsNoInterp(truc, source);
|
||||
P_SetScale(truc, source->scale);
|
||||
truc->destscale = source->scale*6;
|
||||
truc->scalespeed = source->scale/12;
|
||||
|
|
@ -6128,7 +6150,7 @@ void K_SpawnMineExplosion(mobj_t *source, skincolornum_t color, tic_t delay)
|
|||
truc = P_SpawnMobj(source->x + rand_x*FRACUNIT,
|
||||
source->y + rand_y*FRACUNIT,
|
||||
source->z + rand_z*FRACUNIT, MT_BOOMPARTICLE);
|
||||
K_MatchGenericExtraFlags(truc, source);
|
||||
K_MatchGenericExtraFlagsNoInterp(truc, source);
|
||||
P_SetScale(truc, source->scale);
|
||||
truc->destscale = source->scale*5;
|
||||
truc->scalespeed = source->scale/12;
|
||||
|
|
@ -6174,7 +6196,7 @@ void K_SpawnLandMineExplosion(mobj_t *source, skincolornum_t color, tic_t delay)
|
|||
expl->hitlag = delay;
|
||||
expl->renderflags |= RF_DONTDRAW;
|
||||
|
||||
//K_MatchGenericExtraFlags(expl, actor);
|
||||
K_MatchGenericExtraFlagsNoInterp(expl, source);
|
||||
P_SetScale(expl, source->scale*4);
|
||||
|
||||
expl->momx = P_RandomRange(PR_EXPLOSION, -3, 3)*source->scale/2;
|
||||
|
|
@ -6315,12 +6337,11 @@ static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t an, I
|
|||
|
||||
x = source->x + source->momx + FixedMul(finalspeed, FINECOSINE(an>>ANGLETOFINESHIFT));
|
||||
y = source->y + source->momy + FixedMul(finalspeed, FINESINE(an>>ANGLETOFINESHIFT));
|
||||
z = P_GetZAt(source->standingslope, x, y, source->z); // spawn on the ground please
|
||||
z = source->z + (P_IsObjectFlipped(source) ? source->height : 0);
|
||||
z = P_GetZAt(source->standingslope, x, y, z); // spawn on the ground please
|
||||
|
||||
th = P_SpawnMobj(x, y, z, type); // this will never return null because collision isn't processed here
|
||||
|
||||
K_FlipFromObject(th, source);
|
||||
|
||||
th->flags2 |= flags2;
|
||||
th->threshold = 10;
|
||||
|
||||
|
|
@ -6332,6 +6353,10 @@ static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t an, I
|
|||
P_SetScale(th, finalscale);
|
||||
th->destscale = finalscale;
|
||||
|
||||
K_MatchFlipFlags(th, source);
|
||||
if (P_IsObjectFlipped(th))
|
||||
z -= th->height;
|
||||
|
||||
th->angle = an;
|
||||
|
||||
th->momx = FixedMul(finalspeed, FINECOSINE(an>>ANGLETOFINESHIFT));
|
||||
|
|
@ -6430,6 +6455,9 @@ static mobj_t *K_SpawnKartMissile(mobj_t *source, mobjtype_t type, angle_t an, I
|
|||
x = x + P_ReturnThrustX(source, an, source->radius + th->radius);
|
||||
y = y + P_ReturnThrustY(source, an, source->radius + th->radius);
|
||||
throwmo = P_SpawnMobj(x, y, z, MT_FIREDITEM);
|
||||
K_MatchFlipFlags(throwmo, source);
|
||||
if (P_IsObjectFlipped(throwmo))
|
||||
throwmo->z -= (throwmo->height - th->height);
|
||||
throwmo->movecount = 1;
|
||||
throwmo->movedir = source->angle - an;
|
||||
P_SetTarget(&throwmo->target, source);
|
||||
|
|
@ -6551,7 +6579,7 @@ static void K_SpawnDriftElectricity(player_t *player)
|
|||
spark->momy = mo->momy;
|
||||
spark->momz = mo->momz;
|
||||
spark->color = color;
|
||||
K_GenericExtraFlagsNoZAdjust(spark, mo);
|
||||
K_MatchGenericExtraFlagsNoZAdjust(spark, mo);
|
||||
P_SetTarget(&spark->owner, mo);
|
||||
spark->renderflags |= RF_REDUCEVFX;
|
||||
|
||||
|
|
@ -6775,7 +6803,7 @@ static void K_SpawnDriftSparks(player_t *player)
|
|||
if (trail > 0)
|
||||
spark->tics += trail;
|
||||
|
||||
K_MatchGenericExtraFlags(spark, player->mo);
|
||||
K_MatchGenericExtraFlagsNoInterp(spark, player->mo);
|
||||
P_SetTarget(&spark->owner, player->mo);
|
||||
spark->renderflags |= RF_REDUCEVFX;
|
||||
}
|
||||
|
|
@ -6825,7 +6853,7 @@ static void K_SpawnAIZDust(player_t *player)
|
|||
spark->momy = (6*player->mo->momy)/5;
|
||||
spark->momz = P_GetMobjZMovement(player->mo);
|
||||
|
||||
K_MatchGenericExtraFlags(spark, player->mo);
|
||||
K_MatchGenericExtraFlagsNoInterp(spark, player->mo);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -6866,7 +6894,7 @@ void K_SpawnBoostTrail(player_t *player)
|
|||
newz -= FixedMul(mobjinfo[MT_SNEAKERTRAIL].height, player->mo->scale);
|
||||
}
|
||||
|
||||
flame = P_SpawnMobj(newx, newy, ground, MT_SNEAKERTRAIL);
|
||||
flame = P_SpawnMobj(newx, newy, newz, MT_SNEAKERTRAIL);
|
||||
|
||||
P_SetTarget(&flame->target, player->mo);
|
||||
flame->angle = travelangle;
|
||||
|
|
@ -6874,7 +6902,7 @@ void K_SpawnBoostTrail(player_t *player)
|
|||
flame->destscale = player->mo->scale;
|
||||
P_SetScale(flame, player->mo->scale);
|
||||
// not K_MatchGenericExtraFlags so that a stolen sneaker can be seen
|
||||
K_FlipFromObject(flame, player->mo);
|
||||
K_MatchFlipFlags(flame, player->mo);
|
||||
|
||||
flame->momx = 8;
|
||||
P_XYMovement(flame);
|
||||
|
|
@ -6925,7 +6953,7 @@ void K_SpawnSparkleTrail(mobj_t *mo)
|
|||
sparkle->extravalue2 = P_RandomRange(PR_DECORATION, 0, 1) ? 1 : -1; // Rotation direction?
|
||||
sparkle->cvmem = P_RandomRange(PR_DECORATION, -25, 25)*mo->scale; // Vertical "angle"
|
||||
|
||||
K_FlipFromObject(sparkle, mo);
|
||||
K_FlipFromObjectNoInterp(sparkle, mo);
|
||||
P_SetTarget(&sparkle->target, mo);
|
||||
|
||||
sparkle->destscale = mo->destscale;
|
||||
|
|
@ -6974,7 +7002,7 @@ void K_SpawnWipeoutTrail(mobj_t *mo)
|
|||
dust->angle = K_MomentumAngle(mo);
|
||||
dust->destscale = mo->scale;
|
||||
P_SetScale(dust, mo->scale);
|
||||
K_FlipFromObject(dust, mo);
|
||||
K_FlipFromObjectNoInterp(dust, mo);
|
||||
}
|
||||
|
||||
void K_SpawnFireworkTrail(mobj_t *mo)
|
||||
|
|
@ -7001,7 +7029,7 @@ void K_SpawnFireworkTrail(mobj_t *mo)
|
|||
dust->destscale = 2*mo->scale;
|
||||
dust->scalespeed = mo->scale/2;
|
||||
|
||||
K_FlipFromObject(dust, mo);
|
||||
//K_FlipFromObjectNoInterp(dust, mo); -- no, P_SpawnMobjFromMobj does this
|
||||
}
|
||||
|
||||
void K_SpawnDraftDust(mobj_t *mo)
|
||||
|
|
@ -7067,7 +7095,7 @@ void K_SpawnDraftDust(mobj_t *mo)
|
|||
dust->angle = ang - (ANGLE_90 * sign); // point completely perpendicular from the player
|
||||
dust->destscale = mo->scale;
|
||||
P_SetScale(dust, mo->scale);
|
||||
K_FlipFromObject(dust, mo);
|
||||
K_FlipFromObjectNoInterp(dust, mo);
|
||||
|
||||
if (leveltime & 1)
|
||||
dust->tics++; // "randomize" animation
|
||||
|
|
@ -7149,7 +7177,7 @@ void K_DriftDustHandling(mobj_t *spawner)
|
|||
S_StartSound(spawner, sfx_screec);
|
||||
}
|
||||
|
||||
K_MatchGenericExtraFlags(dust, spawner);
|
||||
K_MatchGenericExtraFlagsNoInterp(dust, spawner);
|
||||
|
||||
// Sparkle-y warning for when you're about to change drift sparks!
|
||||
if (spawner->player && spawner->player->drift)
|
||||
|
|
@ -7349,13 +7377,7 @@ mobj_t *K_ThrowKartItemEx(player_t *player, boolean missile, mobjtype_t mapthing
|
|||
mo->angle = player->mo->angle;
|
||||
}
|
||||
|
||||
// These are really weird so let's make it a very specific case to make SURE it works...
|
||||
if (player->mo->eflags & MFE_VERTICALFLIP)
|
||||
{
|
||||
mo->z -= player->mo->height;
|
||||
mo->eflags |= MFE_VERTICALFLIP;
|
||||
mo->flags2 |= (player->mo->flags2 & MF2_OBJECTFLIP);
|
||||
}
|
||||
K_FlipFromObjectNoInterp(mo, player->mo);
|
||||
|
||||
mo->threshold = 10;
|
||||
P_SetTarget(&mo->target, player->mo);
|
||||
|
|
@ -7421,13 +7443,7 @@ mobj_t *K_ThrowKartItemEx(player_t *player, boolean missile, mobjtype_t mapthing
|
|||
// this is the small graphic effect that plops in you when you throw an item:
|
||||
throwmo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z + player->mo->height/2, MT_FIREDITEM);
|
||||
P_SetTarget(&throwmo->target, player->mo);
|
||||
// Ditto:
|
||||
if (player->mo->eflags & MFE_VERTICALFLIP)
|
||||
{
|
||||
throwmo->z -= player->mo->height;
|
||||
throwmo->eflags |= MFE_VERTICALFLIP;
|
||||
mo->flags2 |= (player->mo->flags2 & MF2_OBJECTFLIP);
|
||||
}
|
||||
K_FlipFromObjectNoInterp(throwmo, player->mo);
|
||||
|
||||
throwmo->movecount = 0; // above player
|
||||
|
||||
|
|
@ -7478,7 +7494,7 @@ mobj_t *K_ThrowKartItemEx(player_t *player, boolean missile, mobjtype_t mapthing
|
|||
mo = P_SpawnMobj(newx, newy, newz, mapthing); // this will never return null because collision isn't processed here
|
||||
mo->angle = newangle;
|
||||
}
|
||||
K_FlipFromObject(mo, player->mo);
|
||||
K_FlipFromObjectNoInterp(mo, player->mo);
|
||||
|
||||
mo->threshold = 10;
|
||||
P_SetTarget(&mo->target, player->mo);
|
||||
|
|
@ -7799,7 +7815,7 @@ void K_DoSneaker(player_t *player, INT32 type)
|
|||
P_SetTarget(&overlay->target, cur);
|
||||
P_SetTarget(&cur->tracer, overlay);
|
||||
P_SetScale(overlay, (overlay->destscale = 3*cur->scale/4));
|
||||
K_FlipFromObject(overlay, cur);
|
||||
K_FlipFromObjectNoInterp(overlay, cur);
|
||||
}
|
||||
cur = cur->hnext;
|
||||
}
|
||||
|
|
@ -7810,7 +7826,7 @@ void K_DoSneaker(player_t *player, INT32 type)
|
|||
mobj_t *overlay = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_BOOSTFLAME);
|
||||
P_SetTarget(&overlay->target, player->mo);
|
||||
P_SetScale(overlay, (overlay->destscale = player->mo->scale));
|
||||
K_FlipFromObject(overlay, player->mo);
|
||||
K_FlipFromObjectNoInterp(overlay, player->mo);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -8020,7 +8036,7 @@ static void K_ThrowLandMine(player_t *player)
|
|||
mobj_t *throwmo;
|
||||
|
||||
landMine = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z + player->mo->height/2, MT_LANDMINE);
|
||||
K_FlipFromObject(landMine, player->mo);
|
||||
K_FlipFromObjectNoInterp(landMine, player->mo);
|
||||
landMine->threshold = 10;
|
||||
|
||||
if (landMine->info->seesound)
|
||||
|
|
@ -8548,7 +8564,7 @@ void K_DropPaperItem(player_t *player, UINT8 itemtype, UINT16 itemamount)
|
|||
itemtype, itemamount
|
||||
);
|
||||
|
||||
K_FlipFromObject(drop, player->mo);
|
||||
K_FlipFromObjectNoInterp(drop, player->mo);
|
||||
}
|
||||
|
||||
// For getting EXTRA hit!
|
||||
|
|
@ -8888,8 +8904,7 @@ static void K_MoveHeldObjects(player_t *player)
|
|||
|
||||
cur->flags &= ~MF_NOCLIPTHING;
|
||||
|
||||
if ((player->mo->eflags & MFE_VERTICALFLIP) != (cur->eflags & MFE_VERTICALFLIP))
|
||||
K_FlipFromObject(cur, player->mo);
|
||||
K_MatchFlipFlags(cur, player->mo);
|
||||
|
||||
if (!cur->health)
|
||||
{
|
||||
|
|
@ -9030,26 +9045,21 @@ static void K_MoveHeldObjects(player_t *player)
|
|||
{ // bobbing, copy pasted from my kimokawaiii entry
|
||||
fixed_t sine = FixedMul(player->mo->scale, 8 * FINESINE((((M_TAU_FIXED * (4*TICRATE)) * leveltime) >> ANGLETOFINESHIFT) & FINEMASK));
|
||||
targz = (player->mo->z + (player->mo->height/2)) + sine;
|
||||
if (player->mo->eflags & MFE_VERTICALFLIP)
|
||||
targz += (player->mo->height/2 - 32*player->mo->scale)*6;
|
||||
}
|
||||
|
||||
if (cur->tracer && !P_MobjWasRemoved(cur->tracer))
|
||||
{
|
||||
fixed_t diffx, diffy, diffz;
|
||||
|
||||
diffx = targx - cur->x;
|
||||
diffy = targy - cur->y;
|
||||
diffz = targz - cur->z;
|
||||
|
||||
P_MoveOrigin(cur->tracer, cur->tracer->x + diffx + P_ReturnThrustX(cur, cur->angle + angoffset, 6*cur->scale),
|
||||
cur->tracer->y + diffy + P_ReturnThrustY(cur, cur->angle + angoffset, 6*cur->scale), cur->tracer->z + diffz);
|
||||
P_SetScale(cur->tracer, (cur->tracer->destscale = 3*cur->scale/4));
|
||||
}
|
||||
|
||||
P_MoveOrigin(cur, targx, targy, targz);
|
||||
K_FlipFromObject(cur, player->mo); // Update graviflip in real time thanks.
|
||||
|
||||
if (cur->tracer && !P_MobjWasRemoved(cur->tracer))
|
||||
{
|
||||
P_MoveOrigin(cur->tracer,
|
||||
targx + P_ReturnThrustX(cur, cur->angle + angoffset, 6*cur->scale),
|
||||
targy + P_ReturnThrustY(cur, cur->angle + angoffset, 6*cur->scale),
|
||||
cur->z);
|
||||
P_SetScale(cur->tracer, (cur->tracer->destscale = 3*cur->scale/4));
|
||||
K_FlipFromObject(cur->tracer, cur);
|
||||
}
|
||||
|
||||
cur->roll = player->mo->roll;
|
||||
cur->pitch = player->mo->pitch;
|
||||
|
||||
|
|
@ -9912,25 +9922,21 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
// GROSS. In order to have a transparent version of this for a splitscreen local player, we actually need to spawn two!
|
||||
for (doubler = 0; doubler < 2; doubler++)
|
||||
{
|
||||
fixed_t heightOffset = player->mo->height + (24*player->mo->scale);
|
||||
if (P_IsObjectFlipped(player->mo))
|
||||
{
|
||||
// This counteracts the offset added by K_FlipFromObject so it looks seamless from non-flipped.
|
||||
heightOffset += player->mo->height - FixedMul(player->mo->scale, player->mo->height);
|
||||
heightOffset *= P_MobjFlip(player->mo); // Fleep.
|
||||
}
|
||||
|
||||
mobj_t *debtflag = P_SpawnMobj(player->mo->x + player->mo->momx, player->mo->y + player->mo->momy,
|
||||
player->mo->z + P_GetMobjZMovement(player->mo) + heightOffset, MT_THOK);
|
||||
player->mo->z + player->mo->height + (24*player->mo->scale), MT_THOK);
|
||||
|
||||
debtflag->old_x = player->mo->old_x;
|
||||
debtflag->old_y = player->mo->old_y;
|
||||
debtflag->old_z = player->mo->old_z + P_GetMobjZMovement(player->mo) + heightOffset;
|
||||
|
||||
P_SetMobjState(debtflag, S_RINGDEBT);
|
||||
P_SetScale(debtflag, (debtflag->destscale = player->mo->scale));
|
||||
|
||||
K_MatchGenericExtraFlags(debtflag, player->mo);
|
||||
K_MatchGenericExtraFlagsNoInterp(debtflag, player->mo);
|
||||
|
||||
debtflag->z += P_GetMobjZMovement(player->mo);
|
||||
|
||||
debtflag->old_z = debtflag->z + (player->mo->old_z - player->mo->z);
|
||||
|
||||
debtflag->frame += (leveltime % 4);
|
||||
|
||||
if ((leveltime/12) & 1)
|
||||
|
|
@ -10127,7 +10133,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
mobj_t *spdl = P_SpawnMobjFromMobj(player->mo, sx, sy, 0, MT_DOWNLINE);
|
||||
spdl->colorized = true;
|
||||
spdl->color = player->skincolor;
|
||||
K_MatchGenericExtraFlags(spdl, player->mo);
|
||||
K_MatchGenericExtraFlagsNoZAdjust(spdl, player->mo);
|
||||
P_SetTarget(&spdl->owner, player->mo);
|
||||
spdl->renderflags |= RF_REDUCEVFX;
|
||||
P_InstaScale(spdl, 4*player->mo->scale/2);
|
||||
|
|
@ -10710,7 +10716,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
sparkle->momx = 3*pmo->momx/4;
|
||||
sparkle->momy = 3*pmo->momy/4;
|
||||
sparkle->momz = 3*P_GetMobjZMovement(pmo)/4;
|
||||
K_MatchGenericExtraFlags(sparkle, pmo);
|
||||
K_MatchGenericExtraFlagsNoInterp(sparkle, pmo);
|
||||
sparkle->renderflags = (pmo->renderflags & ~RF_TRANSMASK);//|RF_TRANS20|RF_ADD;
|
||||
}
|
||||
|
||||
|
|
@ -11365,7 +11371,7 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
//player->flashing = 0;
|
||||
eggsexplode = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_SPBEXPLOSION);
|
||||
eggsexplode->height = 2 * player->mo->height;
|
||||
K_FlipFromObject(eggsexplode, player->mo);
|
||||
K_FlipFromObjectNoInterp(eggsexplode, player->mo);
|
||||
|
||||
S_StopSoundByID(player->mo, sfx_s3k53);
|
||||
S_StopSoundByID(player->mo, sfx_kc51);
|
||||
|
|
@ -12745,7 +12751,7 @@ void K_SpawnDriftBoostExplosion(player_t *player, int stage)
|
|||
overlay->angle = K_MomentumAngle(player->mo);
|
||||
P_SetTarget(&overlay->target, player->mo);
|
||||
P_SetScale(overlay, (overlay->destscale = player->mo->scale));
|
||||
K_FlipFromObject(overlay, player->mo);
|
||||
K_FlipFromObjectNoInterp(overlay, player->mo);
|
||||
|
||||
switch (stage)
|
||||
{
|
||||
|
|
@ -13734,7 +13740,7 @@ void K_KartEbrakeVisuals(player_t *p)
|
|||
spdl = P_SpawnMobj(sx, sy, p->mo->z, MT_DOWNLINE);
|
||||
spdl->colorized = true;
|
||||
spdl->color = SKINCOLOR_WHITE;
|
||||
K_MatchGenericExtraFlags(spdl, p->mo);
|
||||
K_MatchGenericExtraFlagsNoInterp(spdl, p->mo);
|
||||
P_SetTarget(&spdl->owner, p->mo);
|
||||
spdl->renderflags |= RF_REDUCEVFX;
|
||||
P_SetScale(spdl, p->mo->scale);
|
||||
|
|
@ -13895,7 +13901,7 @@ static void K_KartSpindashWind(mobj_t *parent)
|
|||
wind->momy = 3 * parent->momy / 4;
|
||||
wind->momz = 3 * P_GetMobjZMovement(parent) / 4;
|
||||
|
||||
K_MatchGenericExtraFlags(wind, parent);
|
||||
K_MatchGenericExtraFlagsNoZAdjust(wind, parent);
|
||||
P_SetTarget(&wind->owner, parent);
|
||||
wind->renderflags |= RF_REDUCEVFX;
|
||||
}
|
||||
|
|
@ -14807,7 +14813,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
P_SetTarget(&player->whip, whip);
|
||||
P_SetScale(whip, player->mo->scale);
|
||||
P_SetTarget(&whip->target, player->mo);
|
||||
K_MatchGenericExtraFlags(whip, player->mo);
|
||||
K_MatchGenericExtraFlagsNoInterp(whip, player->mo);
|
||||
P_SpawnFakeShadow(whip, 20);
|
||||
whip->fuse = INSTAWHIP_DURATION;
|
||||
player->flashing = max(player->flashing, INSTAWHIP_DURATION);
|
||||
|
|
@ -15054,7 +15060,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
for (moloop = 0; moloop < 2; moloop++)
|
||||
{
|
||||
mo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_ROCKETSNEAKER);
|
||||
K_MatchGenericExtraFlags(mo, player->mo);
|
||||
K_MatchGenericExtraFlagsNoInterp(mo, player->mo);
|
||||
mo->flags |= MF_NOCLIPTHING;
|
||||
mo->angle = player->mo->angle;
|
||||
mo->threshold = 10;
|
||||
|
|
@ -15133,7 +15139,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
mo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_EGGMANITEM_SHIELD);
|
||||
if (mo)
|
||||
{
|
||||
K_FlipFromObject(mo, player->mo);
|
||||
K_FlipFromObjectNoInterp(mo, player->mo);
|
||||
mo->flags |= MF_NOCLIPTHING;
|
||||
mo->threshold = 10;
|
||||
mo->movecount = 1;
|
||||
|
|
|
|||
|
|
@ -163,9 +163,12 @@ void K_PlayerJustBumped(player_t *player);
|
|||
boolean K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2);
|
||||
boolean K_KartSolidBounce(mobj_t *bounceMobj, mobj_t *solidMobj);
|
||||
void K_KartPainEnergyFling(player_t *player);
|
||||
void K_MatchFlipFlags(mobj_t *mo, mobj_t *master);
|
||||
void K_FlipFromObject(mobj_t *mo, mobj_t *master);
|
||||
void K_FlipFromObjectNoInterp(mobj_t *mo, mobj_t *master);
|
||||
void K_MatchGenericExtraFlags(mobj_t *mo, mobj_t *master);
|
||||
void K_GenericExtraFlagsNoZAdjust(mobj_t *mo, mobj_t *master);
|
||||
void K_MatchGenericExtraFlagsNoInterp(mobj_t *mo, mobj_t *master);
|
||||
void K_MatchGenericExtraFlagsNoZAdjust(mobj_t *mo, mobj_t *master);
|
||||
void K_SpawnDashDustRelease(player_t *player);
|
||||
void K_SpawnDriftBoostClip(player_t *player);
|
||||
void K_SpawnDriftBoostClipSpark(mobj_t *clip);
|
||||
|
|
|
|||
|
|
@ -3766,18 +3766,6 @@ static int lib_kKartPainEnergyFling(lua_State *L)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int lib_kFlipFromObject(lua_State *L)
|
||||
{
|
||||
mobj_t *mo = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
||||
mobj_t *master = *((mobj_t **)luaL_checkudata(L, 2, META_MOBJ));
|
||||
NOHUD
|
||||
INLEVEL
|
||||
if (!mo || !master)
|
||||
return LUA_ErrInvalid(L, "mobj_t");
|
||||
K_FlipFromObject(mo, master);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lib_kKartSolidBounce(lua_State *L)
|
||||
{
|
||||
mobj_t *bounceMobj = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
||||
|
|
@ -3792,6 +3780,30 @@ static int lib_kKartSolidBounce(lua_State *L)
|
|||
return 1;
|
||||
}
|
||||
|
||||
static int lib_kFlipFromObject(lua_State *L)
|
||||
{
|
||||
mobj_t *mo = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
||||
mobj_t *master = *((mobj_t **)luaL_checkudata(L, 2, META_MOBJ));
|
||||
NOHUD
|
||||
INLEVEL
|
||||
if (!mo || !master)
|
||||
return LUA_ErrInvalid(L, "mobj_t");
|
||||
K_FlipFromObject(mo, master);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lib_kFlipFromObjectNoInterp(lua_State *L)
|
||||
{
|
||||
mobj_t *mo = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
||||
mobj_t *master = *((mobj_t **)luaL_checkudata(L, 2, META_MOBJ));
|
||||
NOHUD
|
||||
INLEVEL
|
||||
if (!mo || !master)
|
||||
return LUA_ErrInvalid(L, "mobj_t");
|
||||
K_FlipFromObjectNoInterp(mo, master);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lib_kMatchGenericExtraFlags(lua_State *L)
|
||||
{
|
||||
mobj_t *mo = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
||||
|
|
@ -3805,6 +3817,32 @@ static int lib_kMatchGenericExtraFlags(lua_State *L)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int lib_kMatchGenericExtraFlagsNoInterp(lua_State *L)
|
||||
{
|
||||
mobj_t *mo = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
||||
mobj_t *master = *((mobj_t **)luaL_checkudata(L, 2, META_MOBJ));
|
||||
NOHUD
|
||||
if (!mo)
|
||||
return LUA_ErrInvalid(L, "mobj_t");
|
||||
if (!master)
|
||||
return LUA_ErrInvalid(L, "mobj_t");
|
||||
K_MatchGenericExtraFlagsNoInterp(mo, master);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lib_kMatchGenericExtraFlagsNoZAdjust(lua_State *L)
|
||||
{
|
||||
mobj_t *mo = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ));
|
||||
mobj_t *master = *((mobj_t **)luaL_checkudata(L, 2, META_MOBJ));
|
||||
NOHUD
|
||||
if (!mo)
|
||||
return LUA_ErrInvalid(L, "mobj_t");
|
||||
if (!master)
|
||||
return LUA_ErrInvalid(L, "mobj_t");
|
||||
K_MatchGenericExtraFlagsNoZAdjust(mo, master);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lib_kSpawnDashDustRelease(lua_State *L)
|
||||
{
|
||||
player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER));
|
||||
|
|
@ -3904,7 +3942,7 @@ static int lib_kGenericExtraFlagsNoZAdjust(lua_State *L)
|
|||
INLEVEL
|
||||
if (!mo || !master)
|
||||
return LUA_ErrInvalid(L, "mobj_t");
|
||||
K_GenericExtraFlagsNoZAdjust(mo, master);
|
||||
K_MatchGenericExtraFlagsNoZAdjust(mo, master);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -6719,8 +6757,11 @@ static luaL_Reg lib[] = {
|
|||
{"K_KartBouncing",lib_kKartBouncing},
|
||||
{"K_KartPainEnergyFling",lib_kKartPainEnergyFling},
|
||||
{"K_FlipFromObject",lib_kFlipFromObject},
|
||||
{"K_FlipFromObjectNoInterp",lib_kFlipFromObjectNoInterp},
|
||||
{"K_KartSolidBounce",lib_kKartSolidBounce},
|
||||
{"K_MatchGenericExtraFlags",lib_kMatchGenericExtraFlags},
|
||||
{"K_MatchGenericExtraFlagsNoInterp",lib_kMatchGenericExtraFlagsNoInterp},
|
||||
{"K_MatchGenericExtraFlagsNoZAdjust",lib_kMatchGenericExtraFlagsNoZAdjust},
|
||||
{"K_SpawnDashDustRelease",lib_kSpawnDashDustRelease},
|
||||
{"K_SpawnDriftBoostClip",lib_kSpawnDriftBoostClip},
|
||||
{"K_SpawnDriftBoostClipSpark",lib_kSpawnDriftBoostClipSpark},
|
||||
|
|
@ -6728,7 +6769,7 @@ static luaL_Reg lib[] = {
|
|||
{"K_SpawnGardenTopSpeedLines",lib_kSpawnGardenTopSpeedLines},
|
||||
{"K_SpawnInvincibilitySpeedLines",lib_kSpawnInvincibilitySpeedLines},
|
||||
{"K_SpawnBumpEffect",lib_kSpawnBumpEffect},
|
||||
{"K_GenericExtraFlagsNoZAdjust",lib_kGenericExtraFlagsNoZAdjust},
|
||||
{"K_MatchGenericExtraFlagsNoZAdjust",lib_kGenericExtraFlagsNoZAdjust},
|
||||
{"K_PressingEBrake",lib_kPressingEBrake},
|
||||
{"K_MomentumAngleEx",lib_kMomentumAngleEx},
|
||||
{"K_MomentumAngleReal",lib_kMomentumAngleReal},
|
||||
|
|
|
|||
|
|
@ -407,8 +407,7 @@ anchor
|
|||
const fixed_t x = P_ReturnThrustX(us, angle, radius);
|
||||
const fixed_t y = P_ReturnThrustY(us, angle, radius);
|
||||
|
||||
/* FIXME: THIS FUNCTION FUCKING SUCKS */
|
||||
K_FlipFromObject(us, them);
|
||||
K_MatchFlipFlags(us, them);
|
||||
|
||||
P_MoveOrigin(us, them->x + x, them->y + y,
|
||||
them->z + K_FlipZOffset(us, them));
|
||||
|
|
@ -439,7 +438,7 @@ anchor_top (mobj_t *top)
|
|||
|
||||
anchor(top, rider, rider->angle, 0);
|
||||
|
||||
K_GenericExtraFlagsNoZAdjust(top, rider);
|
||||
K_MatchGenericExtraFlagsNoZAdjust(top, rider);
|
||||
|
||||
/* Copying the Z momentum lets the Top squash and stretch
|
||||
as it falls with the player. Don't copy the X/Y
|
||||
|
|
|
|||
|
|
@ -467,7 +467,7 @@ adjust_monitor_drop
|
|||
drop->momz *= 8;
|
||||
}
|
||||
|
||||
K_FlipFromObject(drop, monitor);
|
||||
K_FlipFromObjectNoInterp(drop, monitor);
|
||||
|
||||
return drop;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -92,11 +92,9 @@ struct Aura : mobj_t
|
|||
{
|
||||
return;
|
||||
}
|
||||
|
||||
K_FlipFromObject(this, origin());
|
||||
fixed_t flipoffset = P_IsObjectFlipped(origin()) ? origin()->height : 0;
|
||||
|
||||
P_MoveOrigin(this, origin()->x, origin()->y, origin()->z - flipoffset);
|
||||
P_MoveOrigin(this, origin()->x, origin()->y, origin()->z);
|
||||
K_FlipFromObject(this, origin());
|
||||
P_InstaScale(this, 11 * origin()->scale / 10);
|
||||
|
||||
translate();
|
||||
|
|
|
|||
|
|
@ -171,6 +171,7 @@ static void UpdateRingShooterParts(mobj_t *mo)
|
|||
part = mo->tracer;
|
||||
part->z = mo->z + FixedMul(refNipple->height, rs_base_yscale(mo));
|
||||
MovePart(part, mo, refNipple);
|
||||
K_FlipFromObject(part, mo);
|
||||
ScalePart(part, mo);
|
||||
}
|
||||
|
||||
|
|
@ -516,7 +517,7 @@ static void SpawnRingShooter(player_t *player)
|
|||
rs_base_karted(base) = -(RS_KARTED_INC * TICRATE); // wait for "3"
|
||||
rs_base_grabberdist(base) = RS_GRABBER_START;
|
||||
|
||||
K_FlipFromObject(base, mo);
|
||||
K_FlipFromObjectNoInterp(base, mo);
|
||||
P_SetScale(base, base->destscale = FixedMul(base->destscale, scale));
|
||||
base->angle = mo->angle;
|
||||
base->scalespeed = FRACUNIT/2;
|
||||
|
|
|
|||
|
|
@ -28,26 +28,17 @@ void Obj_ServantHandSpawning(player_t *player)
|
|||
{
|
||||
player->handtimer++;
|
||||
if (player->hand == NULL && player->handtimer == TICRATE)
|
||||
{
|
||||
fixed_t heightOffset = player->mo->height + 30*mapobjectscale;
|
||||
if (P_IsObjectFlipped(player->mo))
|
||||
{
|
||||
// This counteracts the offset added by K_FlipFromObject so it looks seamless from non-flipped.
|
||||
heightOffset += player->mo->height - FixedMul(player->mo->scale, player->mo->height);
|
||||
heightOffset *= P_MobjFlip(player->mo); // Fleep.
|
||||
}
|
||||
|
||||
{
|
||||
mobj_t *hand = P_SpawnMobj(
|
||||
player->mo->x,
|
||||
player->mo->y,
|
||||
player->mo->z + heightOffset,
|
||||
player->mo->z + player->mo->height + 30*mapobjectscale,
|
||||
MT_SERVANTHAND
|
||||
);
|
||||
|
||||
if (hand)
|
||||
{
|
||||
K_FlipFromObject(hand, player->mo);
|
||||
hand->old_z = hand->z;
|
||||
K_FlipFromObjectNoInterp(hand, player->mo);
|
||||
|
||||
P_SetTarget(&hand->target, player->mo);
|
||||
P_SetTarget(&player->hand, hand);
|
||||
|
|
@ -124,16 +115,12 @@ void Obj_ServantHandThink(mobj_t *hand)
|
|||
hand->color = player->skincolor;
|
||||
hand->angle = player->besthanddirection;
|
||||
|
||||
fixed_t heightOffset = player->mo->height + 30*mapobjectscale;
|
||||
if (P_IsObjectFlipped(player->mo))
|
||||
heightOffset *= P_MobjFlip(player->mo); // Fleep.
|
||||
|
||||
K_FlipFromObject(hand, player->mo);
|
||||
P_MoveOrigin(hand,
|
||||
player->mo->x + xoffs,
|
||||
player->mo->y + yoffs,
|
||||
player->mo->z + heightOffset
|
||||
player->mo->z + player->mo->height + 30*mapobjectscale
|
||||
);
|
||||
K_FlipFromObject(hand, player->mo);
|
||||
|
||||
hand->sprzoff = player->mo->sprzoff;
|
||||
|
||||
|
|
|
|||
|
|
@ -182,7 +182,7 @@ static void SpawnSPBDust(mobj_t *spb)
|
|||
dust->angle = spb->angle - FixedAngle(FRACUNIT*90 - FRACUNIT*180*i); // The first one will spawn to the right of the spb, the second one to the left.
|
||||
P_Thrust(dust, dust->angle, 6*dust->scale);
|
||||
|
||||
K_MatchGenericExtraFlags(dust, spb);
|
||||
K_MatchGenericExtraFlagsNoZAdjust(dust, spb);
|
||||
|
||||
sa += ANG1*120; // Add 120 degrees to get to mo->angle + ANG1*60
|
||||
}
|
||||
|
|
@ -229,7 +229,7 @@ static void SpawnSPBSliptide(mobj_t *spb, SINT8 dir)
|
|||
spark->momx = (6*spb->momx)/5;
|
||||
spark->momy = (6*spb->momy)/5;
|
||||
|
||||
K_MatchGenericExtraFlags(spark, spb);
|
||||
K_MatchGenericExtraFlagsNoZAdjust(spark, spb);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -253,7 +253,7 @@ static void SpawnSPBSpeedLines(mobj_t *spb)
|
|||
fast->color = SKINCOLOR_RED;
|
||||
fast->colorized = true;
|
||||
|
||||
K_MatchGenericExtraFlags(fast, spb);
|
||||
K_MatchGenericExtraFlagsNoZAdjust(fast, spb);
|
||||
}
|
||||
|
||||
static fixed_t SPBDist(mobj_t *a, mobj_t *b)
|
||||
|
|
|
|||
|
|
@ -272,10 +272,7 @@ private:
|
|||
|
||||
sprzoff(30 * scale());
|
||||
|
||||
if (is_flipped() != follow()->is_flipped())
|
||||
{
|
||||
K_FlipFromObject(this, follow());
|
||||
}
|
||||
K_MatchFlipFlags(this, follow());
|
||||
}
|
||||
|
||||
void move_chain()
|
||||
|
|
@ -297,7 +294,7 @@ private:
|
|||
while (Mobj::valid(node))
|
||||
{
|
||||
node->move_origin({p, pz});
|
||||
K_FlipFromObject(node, this);
|
||||
K_MatchFlipFlags(node, this);
|
||||
node->sprzoff(sprzoff());
|
||||
|
||||
// Let chain flicker like shoe does
|
||||
|
|
|
|||
|
|
@ -95,6 +95,10 @@ sine_bob
|
|||
hyu->sprzoff = FixedMul(kBobHeight,
|
||||
sineofs + FINESINE(a >> ANGLETOFINESHIFT)) * P_MobjFlip(hyu);
|
||||
|
||||
// todo I think this is slightly wrong
|
||||
// but I am literally fixing every single
|
||||
// K_FlipFromObject in the code at once
|
||||
// and this is impossible in basegame rn
|
||||
if (P_IsObjectFlipped(hyu))
|
||||
hyu->sprzoff -= hyu->height;
|
||||
}
|
||||
|
|
@ -306,7 +310,7 @@ struct Flicky : mobj_t
|
|||
color = super_color();
|
||||
}
|
||||
|
||||
K_FlipFromObject(this, source());
|
||||
K_MatchFlipFlags(this, source());
|
||||
bob_in_place(this, phase() * 8, 32);
|
||||
}
|
||||
|
||||
|
|
@ -401,7 +405,7 @@ struct Flicky : mobj_t
|
|||
fast->colorized = true;
|
||||
fast->renderflags |= RF_ADD;
|
||||
|
||||
K_MatchGenericExtraFlags(fast, this);
|
||||
K_MatchGenericExtraFlagsNoZAdjust(fast, this);
|
||||
}
|
||||
|
||||
void range_check()
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ static void SpawnUFOSpeedLines(mobj_t *ufo)
|
|||
fast->color = SKINCOLOR_WHITE;
|
||||
fast->colorized = true;
|
||||
|
||||
K_MatchGenericExtraFlags(fast, ufo);
|
||||
K_MatchGenericExtraFlagsNoZAdjust(fast, ufo);
|
||||
}
|
||||
|
||||
static void SpawnEmeraldSpeedLines(mobj_t *mo)
|
||||
|
|
@ -124,7 +124,7 @@ static void SpawnEmeraldSpeedLines(mobj_t *mo)
|
|||
fast->momy = 3*mo->momy/4;
|
||||
fast->momz = 3*P_GetMobjZMovement(mo)/4;
|
||||
|
||||
K_MatchGenericExtraFlags(fast, mo);
|
||||
K_MatchGenericExtraFlagsNoZAdjust(fast, mo);
|
||||
P_SetTarget(&fast->owner, mo);
|
||||
fast->renderflags |= RF_REDUCEVFX;
|
||||
|
||||
|
|
|
|||
|
|
@ -3578,7 +3578,7 @@ void A_AttractChase(mobj_t *actor)
|
|||
fixed_t offsZ = FixedMul(actor->movefactor, offsFrac);
|
||||
|
||||
//P_SetScale(actor, (actor->destscale = actor->target->scale));
|
||||
K_MatchGenericExtraFlags(actor, actor->target);
|
||||
K_MatchGenericExtraFlagsNoZAdjust(actor, actor->target);
|
||||
|
||||
P_MoveOrigin(
|
||||
actor,
|
||||
|
|
@ -3615,7 +3615,7 @@ void A_AttractChase(mobj_t *actor)
|
|||
|
||||
P_SetScale(actor, (actor->destscale = mapobjectscale - ((mapobjectscale/14) * actor->extravalue1)));
|
||||
actor->z = actor->target->z;
|
||||
K_MatchGenericExtraFlags(actor, actor->target);
|
||||
K_MatchGenericExtraFlagsNoZAdjust(actor, actor->target);
|
||||
P_MoveOrigin(actor,
|
||||
actor->target->x + FixedMul(dist, FINECOSINE(actor->angle >> ANGLETOFINESHIFT)),
|
||||
actor->target->y + FixedMul(dist, FINESINE(actor->angle >> ANGLETOFINESHIFT)),
|
||||
|
|
|
|||
93
src/p_mobj.c
93
src/p_mobj.c
|
|
@ -2392,7 +2392,10 @@ boolean P_ZMovement(mobj_t *mo)
|
|||
break;
|
||||
case MT_BALLHOG:
|
||||
case MT_BALLHOG_RETICULE_TEST:
|
||||
if (mo->z <= mo->floorz)
|
||||
if ((mo->eflags & MFE_VERTICALFLIP)
|
||||
? (mo->z + mo->height >= mo->ceilingz)
|
||||
: (mo->z <= mo->floorz)
|
||||
)
|
||||
{
|
||||
P_ExplodeMissile(mo);
|
||||
return false;
|
||||
|
|
@ -4369,7 +4372,7 @@ static void P_RingThinker(mobj_t *mobj)
|
|||
{
|
||||
mobj->renderflags &= ~RF_DONTDRAW;
|
||||
spark = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_SIGNSPARKLE); // Spawn a fancy sparkle
|
||||
K_MatchGenericExtraFlags(spark, mobj);
|
||||
K_MatchGenericExtraFlagsNoInterp(spark, mobj);
|
||||
spark->colorized = true;
|
||||
spark->color = mobj->color ? mobj->color : SKINCOLOR_YELLOW; // Use yellow if the ring doesn't use a skin color. (It should be red for SPB rings, but let normal rings look fancy too!)
|
||||
P_RemoveMobj(mobj); // Adieu, monde cruel!
|
||||
|
|
@ -4420,7 +4423,7 @@ static void P_ItemCapsulePartThinker(mobj_t *mobj)
|
|||
if (mobj->flags2 & MF2_CLASSICPUSH) // centered items should not be flipped
|
||||
mobj->renderflags = (mobj->renderflags & ~RF_DONTDRAW) | (target->renderflags & RF_DONTDRAW);
|
||||
else
|
||||
K_GenericExtraFlagsNoZAdjust(mobj, target);
|
||||
K_MatchGenericExtraFlagsNoZAdjust(mobj, target);
|
||||
|
||||
x = target->x + target->sprxoff;
|
||||
y = target->y + target->spryoff;
|
||||
|
|
@ -6161,7 +6164,7 @@ static void P_MobjSceneryThink(mobj_t *mobj)
|
|||
fixed_t z = P_RandomRange(PR_SMOLDERING, 0, 70)*mobj->scale;
|
||||
mobj_t *smoke = P_SpawnMobj(mobj->x + x, mobj->y + y, mobj->z + z, MT_SMOKE);
|
||||
P_SetMobjState(smoke, S_OPAQUESMOKE1);
|
||||
K_MatchGenericExtraFlags(smoke, mobj);
|
||||
K_MatchGenericExtraFlagsNoInterp(smoke, mobj);
|
||||
smoke->scale = mobj->scale * 2;
|
||||
smoke->destscale = mobj->scale * 6;
|
||||
smoke->momz = P_RandomRange(PR_SMOLDERING, 4, 9)*mobj->scale*P_MobjFlip(smoke);
|
||||
|
|
@ -6175,11 +6178,11 @@ static void P_MobjSceneryThink(mobj_t *mobj)
|
|||
{
|
||||
fixed_t x = P_RandomRange(PR_EXPLOSION, -16, 16)*mobj->scale;
|
||||
fixed_t y = P_RandomRange(PR_EXPLOSION, -16, 16)*mobj->scale;
|
||||
fixed_t z = P_RandomRange(PR_EXPLOSION, 0, 32)*mobj->scale*P_MobjFlip(mobj);
|
||||
fixed_t z = P_RandomRange(PR_EXPLOSION, 0, 32)*mobj->scale;
|
||||
if (leveltime % 2 == 0)
|
||||
{
|
||||
mobj_t *smoke = P_SpawnMobj(mobj->x + x, mobj->y + y, mobj->z + z, MT_BOSSEXPLODE);
|
||||
K_MatchGenericExtraFlags(smoke, mobj);
|
||||
K_MatchGenericExtraFlagsNoInterp(smoke, mobj);
|
||||
P_SetMobjState(smoke, S_QUICKBOOM1);
|
||||
smoke->scale = mobj->scale/2;
|
||||
smoke->destscale = mobj->scale;
|
||||
|
|
@ -6189,7 +6192,7 @@ static void P_MobjSceneryThink(mobj_t *mobj)
|
|||
{
|
||||
mobj_t *smoke = P_SpawnMobj(mobj->x + x, mobj->y + y, mobj->z + z, MT_SMOKE);
|
||||
P_SetMobjState(smoke, S_OPAQUESMOKE1);
|
||||
K_MatchGenericExtraFlags(smoke, mobj);
|
||||
K_MatchGenericExtraFlagsNoInterp(smoke, mobj);
|
||||
smoke->scale = mobj->scale;
|
||||
smoke->destscale = mobj->scale*2;
|
||||
}
|
||||
|
|
@ -6805,8 +6808,7 @@ static void P_MobjSceneryThink(mobj_t *mobj)
|
|||
P_SetScale(mobj, (mobj->destscale = myscale));
|
||||
|
||||
P_MoveOrigin(mobj, mobj->target->x, mobj->target->y, mobj->target->z + mobj->target->height/2);
|
||||
// Taken from K_FlipFromObject. We just want to flip the visual according to its target, but that's it.
|
||||
mobj->eflags = (mobj->eflags & ~MFE_VERTICALFLIP)|(mobj->target->eflags & MFE_VERTICALFLIP);
|
||||
K_MatchFlipFlags(mobj, mobj->target);
|
||||
|
||||
mobj->extravalue1++;
|
||||
|
||||
|
|
@ -8040,8 +8042,8 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
target->y + FixedMul(xofs, cos) + FixedMul(frontoffset, sin),
|
||||
target->z + zofs + (target->height / 2));
|
||||
mobj->angle = facing + ANGLE_90 + (mobj->extravalue1 ? ANGLE_45 : -1*ANGLE_45);
|
||||
K_MatchGenericExtraFlags(mobj, target);
|
||||
P_InstaScale(mobj, FixedMul(target->scale, easedscale));
|
||||
K_MatchGenericExtraFlagsNoInterp(mobj, target);
|
||||
|
||||
UINT8 maxtranslevel = NUMTRANSMAPS - 2;
|
||||
UINT8 trans = FixedInt(FixedMul(percentvisible, FRACUNIT*(maxtranslevel+1)));
|
||||
|
|
@ -8191,6 +8193,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
P_MoveOrigin(mobj, mobj->target->x + P_ReturnThrustX(mobj, mobj->angle+ANGLE_180, mobj->target->radius),
|
||||
mobj->target->y + P_ReturnThrustY(mobj, mobj->angle+ANGLE_180, mobj->target->radius), mobj->target->z);
|
||||
P_SetScale(mobj, mobj->target->scale);
|
||||
K_FlipFromObject(mobj, mobj->target);
|
||||
|
||||
mobj->roll = mobj->target->roll;
|
||||
mobj->pitch = mobj->target->pitch;
|
||||
|
|
@ -8216,6 +8219,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
fixed_t rand_angle;
|
||||
fixed_t rand_move;
|
||||
mobj_t *smoke = P_SpawnMobj(mobj->x, mobj->y, mobj->z+(8<<FRACBITS), MT_BOOSTSMOKE);
|
||||
K_FlipFromObjectNoInterp(smoke, mobj);
|
||||
|
||||
P_SetScale(smoke, mobj->target->scale/2);
|
||||
smoke->destscale = 3*mobj->target->scale/2;
|
||||
|
|
@ -8342,8 +8346,8 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
if (mobj->movefactor < mobj->target->height)
|
||||
mobj->movefactor = mobj->target->height;
|
||||
}
|
||||
K_MatchGenericExtraFlags(mobj, mobj->target);
|
||||
P_MoveOrigin(mobj, mobj->target->x, mobj->target->y, mobj->target->z + (mobj->target->height/2) + mobj->movefactor);
|
||||
K_MatchGenericExtraFlags(mobj, mobj->target);
|
||||
break;
|
||||
case MT_RINGSPARKS:
|
||||
if (!mobj->target || P_MobjWasRemoved(mobj->target))
|
||||
|
|
@ -8354,11 +8358,10 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
|
||||
mobj->z = mobj->target->z;
|
||||
|
||||
K_MatchGenericExtraFlags(mobj, mobj->target);
|
||||
|
||||
P_MoveOrigin(mobj, mobj->target->x + FINECOSINE(mobj->angle >> ANGLETOFINESHIFT),
|
||||
mobj->target->y + FINESINE(mobj->angle >> ANGLETOFINESHIFT),
|
||||
mobj->z + (mobj->target->height * P_MobjFlip(mobj)));
|
||||
mobj->z + mobj->target->height);
|
||||
K_MatchGenericExtraFlags(mobj, mobj->target);
|
||||
break;
|
||||
case MT_GAINAX:
|
||||
{
|
||||
|
|
@ -8393,20 +8396,19 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
}
|
||||
|
||||
mobj->angle = mobj->target->player->drawangle;
|
||||
mobj->z = mobj->target->z;
|
||||
|
||||
P_MoveOrigin(mobj, mobj->target->x + FixedMul(34 * mapobjectscale, FINECOSINE((mobj->angle + mobj->movedir) >> ANGLETOFINESHIFT)),
|
||||
mobj->target->y + FixedMul(34 * mapobjectscale, FINESINE((mobj->angle + mobj->movedir) >> ANGLETOFINESHIFT)),
|
||||
mobj->z + (32 * mapobjectscale));
|
||||
|
||||
K_MatchGenericExtraFlags(mobj, mobj->target);
|
||||
|
||||
mobj->renderflags = (mobj->renderflags & ~RF_DONTDRAW)|K_GetPlayerDontDrawFlag(mobj->target->player);
|
||||
if (vfx)
|
||||
{
|
||||
mobj->renderflags ^= INT32_MAX;
|
||||
|
||||
P_MoveOrigin(mobj, mobj->target->x + FixedMul(34 * mapobjectscale, FINECOSINE((mobj->angle + mobj->movedir) >> ANGLETOFINESHIFT)),
|
||||
mobj->target->y + FixedMul(34 * mapobjectscale, FINESINE((mobj->angle + mobj->movedir) >> ANGLETOFINESHIFT)),
|
||||
mobj->z + (32 * mapobjectscale * P_MobjFlip(mobj)));
|
||||
|
||||
if (vfx)
|
||||
break;
|
||||
}
|
||||
|
||||
{
|
||||
statenum_t gainaxstate = mobj->state-states;
|
||||
|
|
@ -8439,22 +8441,20 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
return false;
|
||||
}
|
||||
|
||||
mobj->z = mobj->target->z;
|
||||
|
||||
K_MatchGenericExtraFlags(mobj, mobj->target);
|
||||
|
||||
{
|
||||
INT32 perpendicular = ((mobj->extravalue1 & 1) ? -ANGLE_90 : ANGLE_90);
|
||||
const INT32 perpendicular = ((mobj->extravalue1 & 1) ? -ANGLE_90 : ANGLE_90);
|
||||
fixed_t newx = mobj->target->x + P_ReturnThrustX(NULL, mobj->target->angle + perpendicular, 8*mobj->target->scale);
|
||||
fixed_t newy = mobj->target->y + P_ReturnThrustY(NULL, mobj->target->angle + perpendicular, 8*mobj->target->scale);
|
||||
|
||||
P_MoveOrigin(mobj, newx, newy, mobj->target->z);
|
||||
K_MatchGenericExtraFlags(mobj, mobj->target);
|
||||
|
||||
if (mobj->extravalue1 & 1)
|
||||
mobj->angle = mobj->target->angle - ANGLE_45;
|
||||
else
|
||||
mobj->angle = mobj->target->angle + ANGLE_45;
|
||||
}
|
||||
|
||||
break;
|
||||
case MT_TIREGREASE:
|
||||
if (!mobj->target || P_MobjWasRemoved(mobj->target) || !mobj->target->player
|
||||
|
|
@ -8464,12 +8464,9 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
return false;
|
||||
}
|
||||
|
||||
K_MatchGenericExtraFlags(mobj, mobj->target);
|
||||
|
||||
{
|
||||
const angle_t off = FixedAngle(40*FRACUNIT);
|
||||
angle_t ang = K_MomentumAngle(mobj->target);
|
||||
fixed_t z;
|
||||
UINT8 trans = (mobj->target->player->tiregrease * (NUMTRANSMAPS+1)) / greasetics;
|
||||
|
||||
if (trans > NUMTRANSMAPS)
|
||||
|
|
@ -8477,10 +8474,6 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
|
||||
trans = NUMTRANSMAPS - trans;
|
||||
|
||||
z = mobj->target->z;
|
||||
if (mobj->eflags & MFE_VERTICALFLIP)
|
||||
z += mobj->target->height;
|
||||
|
||||
if (mobj->extravalue1)
|
||||
ang = (signed)(ang - off);
|
||||
else
|
||||
|
|
@ -8489,7 +8482,8 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
P_MoveOrigin(mobj,
|
||||
mobj->target->x - FixedMul(mobj->target->radius, FINECOSINE(ang >> ANGLETOFINESHIFT)),
|
||||
mobj->target->y - FixedMul(mobj->target->radius, FINESINE(ang >> ANGLETOFINESHIFT)),
|
||||
z);
|
||||
mobj->target->z);
|
||||
K_MatchGenericExtraFlags(mobj, mobj->target);
|
||||
mobj->angle = ang;
|
||||
|
||||
if (!P_IsObjectOnGround(mobj->target))
|
||||
|
|
@ -8629,12 +8623,9 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
return false;
|
||||
}
|
||||
|
||||
statenum_t stateindex = mobj->target->state - states;
|
||||
|
||||
mobj->x = mobj->target->x;
|
||||
mobj->y = mobj->target->y;
|
||||
mobj->z = mobj->target->z + mobj->target->height/4;
|
||||
const statenum_t stateindex = mobj->target->state - states;
|
||||
|
||||
P_MoveOrigin(mobj, mobj->target->x, mobj->target->y, mobj->target->z + mobj->target->height/4);
|
||||
K_MatchGenericExtraFlags(mobj, mobj->target);
|
||||
|
||||
mobj->color = mobj->target->color;
|
||||
|
|
@ -8827,8 +8818,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
P_SetScale(mobj, (mobj->destscale = (5*mobj->target->scale)>>2));
|
||||
|
||||
P_MoveOrigin(mobj, mobj->target->x, mobj->target->y, mobj->target->z + mobj->target->height/2);
|
||||
// Taken from K_FlipFromObject. We just want to flip the visual according to its target, but that's it.
|
||||
mobj->eflags = (mobj->eflags & ~MFE_VERTICALFLIP)|(mobj->target->eflags & MFE_VERTICALFLIP);
|
||||
K_FlipFromObject(mobj, mobj->target);
|
||||
|
||||
break;
|
||||
}
|
||||
|
|
@ -8842,6 +8832,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
P_InstaScale(mobj, mobj->target->scale);
|
||||
P_MoveOrigin(mobj, mobj->target->x, mobj->target->y, mobj->target->z + mobj->target->height/2);
|
||||
K_MatchGenericExtraFlags(mobj, mobj->target);
|
||||
mobj->mirrored = ((mobj->eflags & MFE_VERTICALFLIP) == MFE_VERTICALFLIP);
|
||||
|
||||
break;
|
||||
}
|
||||
|
|
@ -9029,7 +9020,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
fast->momy = 3*mobj->target->momy/4;
|
||||
fast->momz = 3*P_GetMobjZMovement(mobj->target)/4;
|
||||
|
||||
K_MatchGenericExtraFlags(fast, mobj);
|
||||
K_MatchGenericExtraFlagsNoInterp(fast, mobj);
|
||||
P_SetMobjState(fast, S_FLAMESHIELDLINE1 + i);
|
||||
}
|
||||
}
|
||||
|
|
@ -9058,9 +9049,8 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
}
|
||||
}
|
||||
|
||||
// Taken from K_FlipFromObject. We just want to flip the visual according to its target, but that's it.
|
||||
mobj->eflags = (mobj->eflags & ~MFE_VERTICALFLIP)|(mobj->target->eflags & MFE_VERTICALFLIP);
|
||||
P_MoveOrigin(mobj, mobj->target->x, mobj->target->y, mobj->target->z + mobj->target->height/2);
|
||||
K_MatchFlipFlags(mobj, mobj->target);
|
||||
mobj->angle = K_MomentumAngle(mobj->target);
|
||||
|
||||
if (underlayst != S_NULL)
|
||||
|
|
@ -9275,8 +9265,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
}
|
||||
|
||||
// Update mobj antigravity status:
|
||||
mobj->eflags = (mobj->eflags & ~MFE_VERTICALFLIP)|(mobj->target->eflags & MFE_VERTICALFLIP);
|
||||
mobj->flags2 = (mobj->flags2 & ~MF2_OBJECTFLIP)|(mobj->target->flags2 & MF2_OBJECTFLIP);
|
||||
K_MatchFlipFlags(mobj, mobj->target);
|
||||
|
||||
// Now for the wheels
|
||||
{
|
||||
|
|
@ -10054,7 +10043,7 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
|
||||
P_SetTarget(&wave->target, mobj);
|
||||
wave->angle = mobj->angle - (ANGLE_90 * sign); // point completely perpendicular from the bubble
|
||||
K_FlipFromObject(wave, mobj);
|
||||
K_FlipFromObjectNoInterp(wave, mobj);
|
||||
|
||||
P_Thrust(wave, wave->angle, 4*mobj->scale);
|
||||
}
|
||||
|
|
@ -12785,31 +12774,31 @@ void P_SpawnPlayer(INT32 playernum)
|
|||
mobj_t *ring = P_SpawnMobj(p->mo->x, p->mo->y, p->mo->z, MT_BLOCKRING);
|
||||
P_SetTarget(&ring->target, p->mo);
|
||||
P_SetScale(ring, p->mo->scale);
|
||||
K_MatchGenericExtraFlags(ring, p->mo);
|
||||
K_MatchGenericExtraFlagsNoInterp(ring, p->mo);
|
||||
ring->renderflags &= ~RF_DONTDRAW;
|
||||
|
||||
mobj_t *body = P_SpawnMobj(p->mo->x, p->mo->y, p->mo->z, MT_BLOCKBODY);
|
||||
P_SetTarget(&body->target, p->mo);
|
||||
P_SetScale(body, p->mo->scale);
|
||||
K_MatchGenericExtraFlags(body, p->mo);
|
||||
K_MatchGenericExtraFlagsNoInterp(body, p->mo);
|
||||
body->renderflags |= RF_DONTDRAW;
|
||||
|
||||
mobj_t *aring = P_SpawnMobj(p->mo->x, p->mo->y, p->mo->z, MT_AMPRING);
|
||||
P_SetTarget(å->target, p->mo);
|
||||
P_SetScale(aring, p->mo->scale);
|
||||
K_MatchGenericExtraFlags(aring, p->mo);
|
||||
K_MatchGenericExtraFlagsNoInterp(aring, p->mo);
|
||||
aring->renderflags |= RF_DONTDRAW;
|
||||
|
||||
mobj_t *abody = P_SpawnMobj(p->mo->x, p->mo->y, p->mo->z, MT_AMPBODY);
|
||||
P_SetTarget(&abody->target, p->mo);
|
||||
P_SetScale(abody, p->mo->scale);
|
||||
K_MatchGenericExtraFlags(abody, p->mo);
|
||||
K_MatchGenericExtraFlagsNoInterp(abody, p->mo);
|
||||
abody->renderflags |= RF_DONTDRAW;
|
||||
|
||||
mobj_t *aaura = P_SpawnMobj(p->mo->x, p->mo->y, p->mo->z, MT_AMPAURA);
|
||||
P_SetTarget(&aaura->target, p->mo);
|
||||
P_SetScale(aaura, p->mo->scale);
|
||||
K_MatchGenericExtraFlags(aaura, p->mo);
|
||||
K_MatchGenericExtraFlagsNoInterp(aaura, p->mo);
|
||||
aaura->renderflags |= RF_DONTDRAW;
|
||||
|
||||
if (K_PlayerGuard(p))
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue