mirror of
https://github.com/ZDoom/Raze.git
synced 2025-03-22 17:01:08 +00:00
- Duke: Consolidate the mostly duplicate underwater()
functions.
This commit is contained in:
parent
02325c37bc
commit
87144564fd
4 changed files with 82 additions and 146 deletions
|
@ -239,6 +239,7 @@ void donewgame(MapRecord* map, int sk);
|
|||
int playercolor2lookup(int color);
|
||||
void PlayerColorChanged(void);
|
||||
bool movementBlocked(player_struct *p);
|
||||
void underwater(int snum, ESyncBits actions, double floorz, double ceilingz);
|
||||
void loadcons();
|
||||
void DrawStatusBar();
|
||||
void thunder(void);
|
||||
|
|
|
@ -1560,4 +1560,85 @@ void playerkick(player_struct* p, DDukeActor* g_ac)
|
|||
p->quick_kick = 14;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void underwater(int snum, ESyncBits actions, double floorz, double ceilingz)
|
||||
{
|
||||
const auto p = &ps[snum];
|
||||
const auto pact = p->GetActor();
|
||||
|
||||
p->jumping_counter = 0;
|
||||
p->pycount += 32;
|
||||
p->pycount &= 2047;
|
||||
p->pyoff = BobVal(p->pycount);
|
||||
|
||||
if (!S_CheckActorSoundPlaying(pact, DUKE_UNDERWATER))
|
||||
S_PlayActorSound(DUKE_UNDERWATER, pact);
|
||||
|
||||
if ((actions & SB_JUMP) && !p->OnMotorcycle)
|
||||
{
|
||||
if (p->vel.Z > 0) p->vel.Z = 0;
|
||||
p->vel.Z -= (348 / 256.);
|
||||
if (p->vel.Z < -6) p->vel.Z = -6;
|
||||
}
|
||||
else if ((actions & SB_CROUCH) || p->OnMotorcycle)
|
||||
{
|
||||
if (p->vel.Z < 0) p->vel.Z = 0;
|
||||
p->vel.Z += (348 / 256.);
|
||||
if (p->vel.Z > 6) p->vel.Z = 6;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (p->vel.Z < 0)
|
||||
{
|
||||
p->vel.Z += 1;
|
||||
if (p->vel.Z > 0)
|
||||
p->vel.Z = 0;
|
||||
}
|
||||
if (p->vel.Z > 0)
|
||||
{
|
||||
p->vel.Z -= 1;
|
||||
if (p->vel.Z < 0)
|
||||
p->vel.Z = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (p->vel.Z > 8)
|
||||
p->vel.Z *= 0.5;
|
||||
|
||||
pact->spr.pos.Z += p->vel.Z;
|
||||
|
||||
if (pact->getOffsetZ() > floorz - 15)
|
||||
pact->spr.pos.Z += ((floorz - 15) - pact->getOffsetZ()) * 0.5;
|
||||
|
||||
if (pact->getOffsetZ() < ceilingz + 4)
|
||||
{
|
||||
pact->spr.pos.Z = ceilingz + 4 + gs.playerheight;
|
||||
p->vel.Z = 0;
|
||||
}
|
||||
|
||||
if (p->scuba_on && (krand() & 255) < 8)
|
||||
{
|
||||
if (const auto j = spawn(pact, DukeWaterBubbleClass))
|
||||
{
|
||||
if (isRR())
|
||||
{
|
||||
j->spr.pos += (pact->spr.Angles.Yaw.ToVector() + DVector2(12 - (global_random & 8), 12 - (global_random & 8))) * 16;
|
||||
j->spr.cstat = CSTAT_SPRITE_TRANS_FLIP | CSTAT_SPRITE_TRANSLUCENT;
|
||||
}
|
||||
else
|
||||
{
|
||||
j->spr.pos += (pact->spr.Angles.Yaw.ToVector() + DVector2(4 - (global_random & 8), 4 - (global_random & 8))) * 16;
|
||||
}
|
||||
|
||||
j->spr.scale = DVector2(0.046875, 0.03125);
|
||||
j->spr.pos.Z = pact->getOffsetZ() + 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
END_DUKE_NS
|
||||
|
|
|
@ -827,79 +827,6 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
static void underwater(int snum, ESyncBits actions, double floorz, double ceilingz)
|
||||
{
|
||||
const auto p = &ps[snum];
|
||||
const auto pact = p->GetActor();
|
||||
|
||||
p->jumping_counter = 0;
|
||||
p->pycount += 32;
|
||||
p->pycount &= 2047;
|
||||
p->pyoff = BobVal(p->pycount);
|
||||
|
||||
if (!S_CheckActorSoundPlaying(pact, DUKE_UNDERWATER))
|
||||
S_PlayActorSound(DUKE_UNDERWATER, pact);
|
||||
|
||||
if (actions & SB_JUMP)
|
||||
{
|
||||
if (p->vel.Z > 0) p->vel.Z = 0;
|
||||
p->vel.Z -= (348 / 256.);
|
||||
if (p->vel.Z < -6) p->vel.Z = -6;
|
||||
}
|
||||
else if (actions & SB_CROUCH)
|
||||
{
|
||||
if (p->vel.Z < 0) p->vel.Z = 0;
|
||||
p->vel.Z += (348 / 256.);
|
||||
if (p->vel.Z > 6) p->vel.Z = 6;
|
||||
}
|
||||
else
|
||||
{
|
||||
// normal view
|
||||
if (p->vel.Z < 0)
|
||||
{
|
||||
p->vel.Z += 1;
|
||||
if (p->vel.Z > 0)
|
||||
p->vel.Z = 0;
|
||||
}
|
||||
if (p->vel.Z > 0)
|
||||
{
|
||||
p->vel.Z -= 1;
|
||||
if (p->vel.Z < 0)
|
||||
p->vel.Z = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (p->vel.Z > 8)
|
||||
p->vel.Z *= 0.5;
|
||||
|
||||
pact->spr.pos.Z += p->vel.Z;
|
||||
|
||||
if (pact->getOffsetZ() > floorz - 15)
|
||||
pact->spr.pos.Z += ((floorz - 15) - pact->getOffsetZ()) * 0.5;
|
||||
|
||||
if (pact->getOffsetZ() < ceilingz + 4)
|
||||
{
|
||||
pact->spr.pos.Z = ceilingz + 4 + gs.playerheight;
|
||||
p->vel.Z = 0;
|
||||
}
|
||||
|
||||
if (p->scuba_on && (krand() & 255) < 8)
|
||||
{
|
||||
if (const auto j = spawn(pact, DukeWaterBubbleClass))
|
||||
{
|
||||
j->spr.pos += (pact->spr.Angles.Yaw.ToVector() + DVector2(4 - (global_random & 8), 4 - (global_random & 8))) * 16;
|
||||
j->spr.scale = DVector2(0.046875, 0.03125);
|
||||
j->spr.pos.Z = pact->getOffsetZ() + 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
int operateTripbomb(int snum)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
|
|
|
@ -1327,79 +1327,6 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
static void underwater(int snum, ESyncBits actions, double floorz, double ceilingz)
|
||||
{
|
||||
const auto p = &ps[snum];
|
||||
const auto pact = p->GetActor();
|
||||
|
||||
p->jumping_counter = 0;
|
||||
p->pycount += 32;
|
||||
p->pycount &= 2047;
|
||||
p->pyoff = BobVal(p->pycount);
|
||||
|
||||
if (!S_CheckActorSoundPlaying(pact, DUKE_UNDERWATER))
|
||||
S_PlayActorSound(DUKE_UNDERWATER, pact);
|
||||
|
||||
if ((actions & SB_JUMP) && !p->OnMotorcycle)
|
||||
{
|
||||
if (p->vel.Z > 0) p->vel.Z = 0;
|
||||
p->vel.Z -= (348 / 256.);
|
||||
if (p->vel.Z < -6) p->vel.Z = -6;
|
||||
}
|
||||
else if ((actions & SB_CROUCH) || p->OnMotorcycle)
|
||||
{
|
||||
if (p->vel.Z < 0) p->vel.Z = 0;
|
||||
p->vel.Z += (348 / 256.);
|
||||
if (p->vel.Z > 6) p->vel.Z = 6;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (p->vel.Z < 0)
|
||||
{
|
||||
p->vel.Z += 1;
|
||||
if (p->vel.Z > 0)
|
||||
p->vel.Z = 0;
|
||||
}
|
||||
if (p->vel.Z > 0)
|
||||
{
|
||||
p->vel.Z -= 1;
|
||||
if (p->vel.Z < 0)
|
||||
p->vel.Z = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (p->vel.Z > 8)
|
||||
p->vel.Z *= 0.5;
|
||||
|
||||
pact->spr.pos.Z += p->vel.Z;
|
||||
|
||||
if (pact->getOffsetZ() > floorz - 15)
|
||||
pact->spr.pos.Z += ((floorz - 15) - pact->getOffsetZ()) * 0.5;
|
||||
|
||||
if (pact->getOffsetZ() < ceilingz + 4)
|
||||
{
|
||||
pact->spr.pos.Z = ceilingz + 4 + gs.playerheight;
|
||||
p->vel.Z = 0;
|
||||
}
|
||||
|
||||
if (p->scuba_on && (krand() & 255) < 8)
|
||||
{
|
||||
if (const auto j = spawn(pact, DukeWaterBubbleClass))
|
||||
{
|
||||
j->spr.pos += (pact->spr.Angles.Yaw.ToVector() + DVector2(12 - (global_random & 8), 12 - (global_random & 8))) * 16;
|
||||
j->spr.scale = DVector2(0.046875, 0.03125);
|
||||
j->spr.pos.Z = pact->getOffsetZ() + 8;
|
||||
j->spr.cstat = CSTAT_SPRITE_TRANS_FLIP | CSTAT_SPRITE_TRANSLUCENT;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void onMotorcycleMove(int snum, walltype* wal)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
|
|
Loading…
Reference in a new issue