mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Make T_BounceCheese use its own thinker struct
This commit is contained in:
parent
54de7584d1
commit
1d35442e16
3 changed files with 57 additions and 25 deletions
|
|
@ -625,13 +625,8 @@ static fixed_t P_SectorCheckWater(sector_t *analyzesector,
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
// Bounces a floating cheese
|
// Bounces a floating cheese
|
||||||
|
|
||||||
void T_BounceCheese(levelspecthink_t *bouncer)
|
void T_BounceCheese(bouncecheese_t *bouncer)
|
||||||
{
|
{
|
||||||
#define speed vars[0]
|
|
||||||
#define distance vars[1]
|
|
||||||
#define low vars[2]
|
|
||||||
#define ceilingwasheight vars[3]
|
|
||||||
#define floorwasheight vars[4]
|
|
||||||
fixed_t sectorheight;
|
fixed_t sectorheight;
|
||||||
fixed_t halfheight;
|
fixed_t halfheight;
|
||||||
fixed_t waterheight;
|
fixed_t waterheight;
|
||||||
|
|
@ -709,7 +704,7 @@ void T_BounceCheese(levelspecthink_t *bouncer)
|
||||||
bouncer->sector->floorspeed = -bouncer->speed/2;
|
bouncer->sector->floorspeed = -bouncer->speed/2;
|
||||||
bouncer->sector->ceilspeed = 42;
|
bouncer->sector->ceilspeed = 42;
|
||||||
|
|
||||||
if ((bouncer->sector->ceilingheight < bouncer->ceilingwasheight && bouncer->low == 0) // Down
|
if ((bouncer->sector->ceilingheight < bouncer->ceilingwasheight && !bouncer->low) // Down
|
||||||
|| (bouncer->sector->ceilingheight > bouncer->ceilingwasheight && bouncer->low)) // Up
|
|| (bouncer->sector->ceilingheight > bouncer->ceilingwasheight && bouncer->low)) // Up
|
||||||
{
|
{
|
||||||
if (abs(bouncer->speed) < 6*FRACUNIT)
|
if (abs(bouncer->speed) < 6*FRACUNIT)
|
||||||
|
|
@ -717,7 +712,7 @@ void T_BounceCheese(levelspecthink_t *bouncer)
|
||||||
else
|
else
|
||||||
bouncer->speed -= bouncer->speed/2;
|
bouncer->speed -= bouncer->speed/2;
|
||||||
|
|
||||||
bouncer->low = bouncer->low ? 0 : 1;
|
bouncer->low = !bouncer->low;
|
||||||
if (abs(bouncer->speed) > 6*FRACUNIT)
|
if (abs(bouncer->speed) > 6*FRACUNIT)
|
||||||
{
|
{
|
||||||
mobj_t *mp = (void *)&actionsector->soundorg;
|
mobj_t *mp = (void *)&actionsector->soundorg;
|
||||||
|
|
@ -756,11 +751,6 @@ void T_BounceCheese(levelspecthink_t *bouncer)
|
||||||
if (actionsector)
|
if (actionsector)
|
||||||
P_RecalcPrecipInSector(actionsector);
|
P_RecalcPrecipInSector(actionsector);
|
||||||
}
|
}
|
||||||
#undef speed
|
|
||||||
#undef distance
|
|
||||||
#undef low
|
|
||||||
#undef ceilingwasheight
|
|
||||||
#undef floorwasheight
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
@ -2283,10 +2273,7 @@ void EV_CrumbleChain(sector_t *sec, ffloor_t *rover)
|
||||||
// Used for bobbing platforms on the water
|
// Used for bobbing platforms on the water
|
||||||
INT32 EV_BounceSector(sector_t *sec, fixed_t momz, line_t *sourceline)
|
INT32 EV_BounceSector(sector_t *sec, fixed_t momz, line_t *sourceline)
|
||||||
{
|
{
|
||||||
#define speed vars[0]
|
bouncecheese_t *bouncer;
|
||||||
#define distance vars[1]
|
|
||||||
#define low vars[2]
|
|
||||||
levelspecthink_t *bouncer;
|
|
||||||
|
|
||||||
// create and initialize new thinker
|
// create and initialize new thinker
|
||||||
if (sec->ceilingdata) // One at a time, ma'am.
|
if (sec->ceilingdata) // One at a time, ma'am.
|
||||||
|
|
@ -2298,16 +2285,13 @@ INT32 EV_BounceSector(sector_t *sec, fixed_t momz, line_t *sourceline)
|
||||||
bouncer->thinker.function.acp1 = (actionf_p1)T_BounceCheese;
|
bouncer->thinker.function.acp1 = (actionf_p1)T_BounceCheese;
|
||||||
|
|
||||||
// set up the fields according to the type of elevator action
|
// set up the fields according to the type of elevator action
|
||||||
|
bouncer->sourceline = sourceline;
|
||||||
bouncer->sector = sec;
|
bouncer->sector = sec;
|
||||||
bouncer->speed = momz/2;
|
bouncer->speed = momz/2;
|
||||||
bouncer->sourceline = sourceline;
|
|
||||||
bouncer->distance = FRACUNIT;
|
bouncer->distance = FRACUNIT;
|
||||||
bouncer->low = 1;
|
bouncer->low = true;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
#undef speed
|
|
||||||
#undef distance
|
|
||||||
#undef low
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// For T_ContinuousFalling special
|
// For T_ContinuousFalling special
|
||||||
|
|
|
||||||
|
|
@ -1670,6 +1670,24 @@ static void SaveNoEnemiesThinker(const thinker_t *th, const UINT8 type)
|
||||||
WRITEUINT32(save_p, SaveLine(ht->sourceline));
|
WRITEUINT32(save_p, SaveLine(ht->sourceline));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// SaveBounceCheeseThinker
|
||||||
|
//
|
||||||
|
// Saves a bouncecheese_t thinker
|
||||||
|
//
|
||||||
|
static void SaveBounceCheeseThinker(const thinker_t *th, const UINT8 type)
|
||||||
|
{
|
||||||
|
const bouncecheese_t *ht = (const void *)th;
|
||||||
|
WRITEUINT8(save_p, type);
|
||||||
|
WRITEUINT32(save_p, SaveLine(ht->sourceline));
|
||||||
|
WRITEUINT32(save_p, SaveSector(ht->sector));
|
||||||
|
WRITEFIXED(save_p, ht->speed);
|
||||||
|
WRITEFIXED(save_p, ht->distance);
|
||||||
|
WRITEFIXED(save_p, ht->floorwasheight);
|
||||||
|
WRITEFIXED(save_p, ht->ceilingwasheight);
|
||||||
|
WRITECHAR(save_p, ht->low);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// SaveContinuousFallThinker
|
// SaveContinuousFallThinker
|
||||||
//
|
//
|
||||||
|
|
@ -2378,7 +2396,7 @@ static void P_NetArchiveThinkers(void)
|
||||||
}
|
}
|
||||||
else if (th->function.acp1 == (actionf_p1)T_BounceCheese)
|
else if (th->function.acp1 == (actionf_p1)T_BounceCheese)
|
||||||
{
|
{
|
||||||
SaveSpecialLevelThinker(th, tc_bouncecheese);
|
SaveBounceCheeseThinker(th, tc_bouncecheese);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if (th->function.acp1 == (actionf_p1)T_StartCrumble)
|
else if (th->function.acp1 == (actionf_p1)T_StartCrumble)
|
||||||
|
|
@ -2893,6 +2911,24 @@ static thinker_t* LoadNoEnemiesThinker(actionf_p1 thinker)
|
||||||
return &ht->thinker;
|
return &ht->thinker;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LoadBounceCheeseThinker
|
||||||
|
//
|
||||||
|
// Loads a bouncecheese_t from a save game
|
||||||
|
//
|
||||||
|
static thinker_t* LoadBounceCheeseThinker(actionf_p1 thinker)
|
||||||
|
{
|
||||||
|
bouncecheese_t *ht = Z_Malloc(sizeof (*ht), PU_LEVSPEC, NULL);
|
||||||
|
ht->thinker.function.acp1 = thinker;
|
||||||
|
ht->sourceline = LoadLine(READUINT32(save_p));
|
||||||
|
ht->sector = LoadSector(READUINT32(save_p));
|
||||||
|
ht->speed = READFIXED(save_p);
|
||||||
|
ht->distance = READFIXED(save_p);
|
||||||
|
ht->floorwasheight = READFIXED(save_p);
|
||||||
|
ht->ceilingwasheight = READFIXED(save_p);
|
||||||
|
ht->low = READCHAR(save_p);
|
||||||
|
return &ht->thinker;
|
||||||
|
}
|
||||||
|
|
||||||
// LoadContinuousFallThinker
|
// LoadContinuousFallThinker
|
||||||
//
|
//
|
||||||
// Loads a continuousfall_t from a save game
|
// Loads a continuousfall_t from a save game
|
||||||
|
|
@ -3688,7 +3724,7 @@ static void P_NetUnArchiveThinkers(void)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case tc_bouncecheese:
|
case tc_bouncecheese:
|
||||||
th = LoadSpecialLevelThinker((actionf_p1)T_BounceCheese, 2);
|
th = LoadBounceCheeseThinker((actionf_p1)T_BounceCheese);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case tc_startcrumble:
|
case tc_startcrumble:
|
||||||
|
|
|
||||||
14
src/p_spec.h
14
src/p_spec.h
|
|
@ -337,6 +337,18 @@ typedef struct
|
||||||
fixed_t destheight;
|
fixed_t destheight;
|
||||||
} continuousfall_t;
|
} continuousfall_t;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
thinker_t thinker;
|
||||||
|
line_t *sourceline;
|
||||||
|
sector_t *sector;
|
||||||
|
fixed_t speed;
|
||||||
|
fixed_t distance;
|
||||||
|
fixed_t floorwasheight;
|
||||||
|
fixed_t ceilingwasheight;
|
||||||
|
boolean low;
|
||||||
|
} bouncecheese_t;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
thinker_t thinker;
|
thinker_t thinker;
|
||||||
|
|
@ -429,7 +441,7 @@ void T_MoveFloor(floormove_t *movefloor);
|
||||||
|
|
||||||
void T_MoveElevator(elevator_t *elevator);
|
void T_MoveElevator(elevator_t *elevator);
|
||||||
void T_ContinuousFalling(continuousfall_t *faller);
|
void T_ContinuousFalling(continuousfall_t *faller);
|
||||||
void T_BounceCheese(levelspecthink_t *bouncer);
|
void T_BounceCheese(bouncecheese_t *bouncer);
|
||||||
void T_StartCrumble(elevator_t *elevator);
|
void T_StartCrumble(elevator_t *elevator);
|
||||||
void T_MarioBlock(mariothink_t *block);
|
void T_MarioBlock(mariothink_t *block);
|
||||||
void T_FloatSector(floatthink_t *floater);
|
void T_FloatSector(floatthink_t *floater);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue