Uh-oh! Forgot to stash a file

This commit is contained in:
MascaraSnake 2020-04-26 10:37:31 +02:00
parent abcc47ac61
commit b439fa2b99

View file

@ -1833,14 +1833,18 @@ void T_EachTimeThinker(levelspecthink_t *eachtime)
// Rises up to its topmost position when a // Rises up to its topmost position when a
// player steps on it. Lowers otherwise. // player steps on it. Lowers otherwise.
// //
void T_RaiseSector(levelspecthink_t *raise) void T_RaiseSector(raise_t *raise)
{ {
msecnode_t *node; msecnode_t *node;
mobj_t *thing; mobj_t *thing;
sector_t *sector; sector_t *sector;
INT32 i; INT32 i;
boolean playeronme = false, active = false; boolean playeronme = false, active = false;
boolean moveUp;
fixed_t ceilingdestination, floordestination; fixed_t ceilingdestination, floordestination;
fixed_t speed, origspeed;
fixed_t distToNearestEndpoint;
INT32 direction;
result_e res = 0; result_e res = 0;
if (raise->sector->crumblestate >= 3 || raise->sector->ceilingdata) if (raise->sector->crumblestate >= 3 || raise->sector->ceilingdata)
@ -1863,7 +1867,7 @@ void T_RaiseSector(levelspecthink_t *raise)
continue; continue;
// Option to require spindashing. // Option to require spindashing.
if (raise->vars[1] && !(thing->player->pflags & PF_STARTDASH)) if (raise->flags & RF_SPINDASH && !(thing->player->pflags & PF_STARTDASH))
continue; continue;
if (!(thing->z == P_GetSpecialTopZ(thing, raise->sector, sector))) if (!(thing->z == P_GetSpecialTopZ(thing, raise->sector, sector)))
@ -1874,43 +1878,43 @@ void T_RaiseSector(levelspecthink_t *raise)
} }
} }
if (raise->vars[9]) // Dynamically Sinking Platform^tm if (raise->flags & RF_DYNAMIC) // Dynamically Sinking Platform^tm
{ {
#define shaketime 10 #define shaketime 10
if (raise->vars[11] > shaketime) // State: moving if (raise->shaketimer > shaketime) // State: moving
{ {
if (playeronme) // If player is standing on the platform, accelerate if (playeronme) // If player is standing on the platform, accelerate
{ {
raise->vars[10] += (FRACUNIT >> 5); raise->extraspeed += (FRACUNIT >> 5);
} }
else // otherwise, decelerate until inflection else // otherwise, decelerate until inflection
{ {
raise->vars[10] -= FRACUNIT >> 3; raise->extraspeed -= FRACUNIT >> 3;
if (raise->vars[10] <= 0) // inflection! if (raise->extraspeed <= 0) // inflection!
{ {
raise->vars[10] = 0; raise->extraspeed = 0;
raise->vars[11] = 0; // allow the shake to occur again (fucks over players attempting to jump-cheese) raise->shaketimer = 0; // allow the shake to occur again (fucks over players attempting to jump-cheese)
} }
} }
active = raise->vars[10] > 0; active = raise->extraspeed > 0;
} }
else // State: shaking else // State: shaking
{ {
if (playeronme || raise->vars[11]) if (playeronme || raise->shaketimer)
{ {
active = true; active = true;
if (++raise->vars[11] > shaketime) if (++raise->shaketimer > shaketime)
{ {
if (playeronme) if (playeronme)
raise->vars[10] = FRACUNIT >> 5; raise->extraspeed = FRACUNIT >> 5;
else else
raise->vars[10] = FRACUNIT << 1; raise->extraspeed = FRACUNIT << 1;
} }
else else
{ {
raise->vars[10] = ((shaketime/2) - raise->vars[11]) << FRACBITS; raise->extraspeed = ((shaketime/2) - raise->shaketimer) << FRACBITS;
if (raise->vars[10] < -raise->vars[2]/2) if (raise->extraspeed < -raise->basespeed/2)
raise->vars[10] = -raise->vars[2]/2; raise->extraspeed = -raise->basespeed/2;
} }
} }
} }
@ -1919,125 +1923,59 @@ void T_RaiseSector(levelspecthink_t *raise)
else // Air bobbing platform (not a Dynamically Sinking Platform^tm) else // Air bobbing platform (not a Dynamically Sinking Platform^tm)
active = playeronme; active = playeronme;
if (active) moveUp = active ^ (raise->flags & RF_REVERSE);
{ ceilingdestination = moveUp ? raise->ceilingtop : raise->ceilingbottom;
raise->vars[3] = raise->vars[2]; floordestination = ceilingdestination - (raise->sector->ceilingheight - raise->sector->floorheight);
if (raise->vars[0] == 1) if ((moveUp && raise->sector->ceilingheight >= ceilingdestination)
|| (!moveUp && raise->sector->ceilingheight <= ceilingdestination))
{ {
if (raise->sector->ceilingheight <= raise->vars[7]) raise->sector->floorheight = floordestination;
{ raise->sector->ceilingheight = ceilingdestination;
raise->sector->floorheight = raise->vars[7] - (raise->sector->ceilingheight - raise->sector->floorheight);
raise->sector->ceilingheight = raise->vars[7];
raise->sector->ceilspeed = 0; raise->sector->ceilspeed = 0;
raise->sector->floorspeed = 0; raise->sector->floorspeed = 0;
return; return;
} }
direction = moveUp ? 1 : -1;
raise->vars[8] = -1; origspeed = raise->basespeed;
ceilingdestination = raise->vars[7]; if (!active)
floordestination = raise->vars[6]; origspeed /= 2;
}
else // elevateUp
{
if (raise->sector->ceilingheight >= raise->vars[5])
{
raise->sector->floorheight = raise->vars[5] - (raise->sector->ceilingheight - raise->sector->floorheight);
raise->sector->ceilingheight = raise->vars[5];
raise->sector->ceilspeed = 0;
raise->sector->floorspeed = 0;
return;
}
raise->vars[8] = 1; // Speed up as you get closer to the middle, then slow down again
ceilingdestination = raise->vars[5]; distToNearestEndpoint = min(raise->sector->ceilingheight - raise->ceilingbottom, raise->ceilingtop - raise->sector->ceilingheight);
floordestination = raise->vars[4]; speed = FixedMul(origspeed, FixedDiv(distToNearestEndpoint, (raise->ceilingtop - raise->ceilingbottom) >> 5));
}
}
else
{
raise->vars[3] = raise->vars[2]/2;
if (raise->vars[0] == 1) if (speed <= origspeed/16)
{ speed = origspeed/16;
if (raise->sector->ceilingheight >= raise->vars[5]) else if (speed > origspeed)
{ speed = origspeed;
raise->sector->floorheight = raise->vars[5] - (raise->sector->ceilingheight - raise->sector->floorheight);
raise->sector->ceilingheight = raise->vars[5];
raise->sector->ceilspeed = 0;
raise->sector->floorspeed = 0;
return;
}
raise->vars[8] = 1;
ceilingdestination = raise->vars[5];
floordestination = raise->vars[4];
}
else // elevateUp
{
if (raise->sector->ceilingheight <= raise->vars[7])
{
raise->sector->floorheight = raise->vars[7] - (raise->sector->ceilingheight - raise->sector->floorheight);
raise->sector->ceilingheight = raise->vars[7];
raise->sector->ceilspeed = 0;
raise->sector->floorspeed = 0;
return;
}
raise->vars[8] = -1;
ceilingdestination = raise->vars[7];
floordestination = raise->vars[6];
}
}
if ((raise->sector->ceilingheight - raise->vars[7]) speed += raise->extraspeed;
< (raise->vars[5] - raise->sector->ceilingheight))
{
fixed_t origspeed = raise->vars[3];
// Slow down as you get closer to the bottom
raise->vars[3] = FixedMul(raise->vars[3],FixedDiv(raise->sector->ceilingheight - raise->vars[7], (raise->vars[5] - raise->vars[7])>>5));
if (raise->vars[3] <= origspeed/16)
raise->vars[3] = origspeed/16;
else if (raise->vars[3] > origspeed)
raise->vars[3] = origspeed;
}
else
{
fixed_t origspeed = raise->vars[3];
// Slow down as you get closer to the top
raise->vars[3] = FixedMul(raise->vars[3],FixedDiv(raise->vars[5] - raise->sector->ceilingheight, (raise->vars[5] - raise->vars[7])>>5));
if (raise->vars[3] <= origspeed/16)
raise->vars[3] = origspeed/16;
else if (raise->vars[3] > origspeed)
raise->vars[3] = origspeed;
}
raise->vars[3] += raise->vars[10];
res = T_MovePlane res = T_MovePlane
( (
raise->sector, // sector raise->sector, // sector
raise->vars[3], // speed speed, // speed
ceilingdestination, // dest ceilingdestination, // dest
0, // crush 0, // crush
1, // floor or ceiling (1 for ceiling) 1, // floor or ceiling (1 for ceiling)
raise->vars[8] // direction direction // direction
); );
if (res == ok || res == pastdest) if (res == ok || res == pastdest)
T_MovePlane T_MovePlane
( (
raise->sector, // sector raise->sector, // sector
raise->vars[3], // speed speed, // speed
floordestination, // dest floordestination, // dest
0, // crush 0, // crush
0, // floor or ceiling (0 for floor) 0, // floor or ceiling (0 for floor)
raise->vars[8] // direction direction // direction
); );
raise->sector->ceilspeed = 42; raise->sector->ceilspeed = 42;
raise->sector->floorspeed = raise->vars[3]*raise->vars[8]; raise->sector->floorspeed = speed*direction;
for (i = -1; (i = P_FindSectorFromTag(raise->sourceline->args[0], i)) >= 0 ;) for (i = -1; (i = P_FindSectorFromTag(raise->sourceline->args[0], i)) >= 0 ;)
P_RecalcPrecipInSector(&sectors[i]); P_RecalcPrecipInSector(&sectors[i]);