mirror of
https://github.com/ZDoom/Raze.git
synced 2025-02-17 01:01:09 +00:00
Merge remote-tracking branch 'remotes/origin/playerArray' into blood-script-export
This commit is contained in:
commit
02c6b68581
171 changed files with 4413 additions and 4323 deletions
|
@ -462,7 +462,7 @@ public:
|
|||
if (fb == nullptr)
|
||||
{
|
||||
#ifdef HAVE_GLES2
|
||||
if(V_GetBackend() == 2)
|
||||
if(V_GetBackend() != 0)
|
||||
fb = new OpenGLESRenderer::OpenGLFrameBuffer(0, vid_fullscreen);
|
||||
else
|
||||
#endif
|
||||
|
|
|
@ -315,7 +315,7 @@ DFrameBuffer *SDLVideo::CreateFrameBuffer ()
|
|||
if (fb == nullptr)
|
||||
{
|
||||
#ifdef HAVE_GLES2
|
||||
if (V_GetBackend() == 2)
|
||||
if (V_GetBackend() != 0)
|
||||
fb = new OpenGLESRenderer::OpenGLFrameBuffer(0, vid_fullscreen);
|
||||
else
|
||||
#endif
|
||||
|
|
|
@ -109,7 +109,7 @@ DFrameBuffer *Win32GLVideo::CreateFrameBuffer()
|
|||
SystemGLFrameBuffer *fb;
|
||||
|
||||
#ifdef HAVE_GLES2
|
||||
if (V_GetBackend() == 2)
|
||||
if (V_GetBackend() != 0)
|
||||
fb = new OpenGLESRenderer::OpenGLFrameBuffer(m_hMonitor, vid_fullscreen);
|
||||
else
|
||||
#endif
|
||||
|
|
|
@ -93,7 +93,7 @@ CUSTOM_CVAR(Int, vid_maxfps, 200, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
|||
}
|
||||
}
|
||||
|
||||
CUSTOM_CVAR(Int, vid_preferbackend, 0, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL)
|
||||
CUSTOM_CVAR(Int, vid_preferbackend, 1, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL)
|
||||
{
|
||||
// [SP] This may seem pointless - but I don't want to implement live switching just
|
||||
// yet - I'm pretty sure it's going to require a lot of reinits and destructions to
|
||||
|
|
18
source/core/coreplayer.h
Normal file
18
source/core/coreplayer.h
Normal file
|
@ -0,0 +1,18 @@
|
|||
#pragma once
|
||||
|
||||
#include "d_net.h"
|
||||
#include "packet.h"
|
||||
#include "gameinput.h"
|
||||
|
||||
struct CorePlayer
|
||||
{
|
||||
ticcmd_t lastcmd, cmd;
|
||||
PlayerAngles Angles;
|
||||
DCoreActor* actor;
|
||||
uint8_t pnum;
|
||||
|
||||
virtual ~CorePlayer() { if (actor) actor->Destroy(); };
|
||||
virtual DCoreActor* GetActor() = 0;
|
||||
};
|
||||
|
||||
extern CorePlayer* PlayerArray[MAXPLAYERS];
|
|
@ -84,7 +84,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|||
#include "hw_material.h"
|
||||
#include "tiletexture.h"
|
||||
#include "tilesetbuilder.h"
|
||||
#include "gameinput.h"
|
||||
#include "coreplayer.h"
|
||||
|
||||
#include "buildtiles.h"
|
||||
|
||||
|
@ -632,7 +632,11 @@ int GameMain()
|
|||
r = -1;
|
||||
}
|
||||
//DeleteScreenJob();
|
||||
if (gi) gi->FreeLevelData();
|
||||
if (gi)
|
||||
{
|
||||
gi->FreeLevelData();
|
||||
for (int i = 0; i < MAXPLAYERS; i++) delete PlayerArray[i];
|
||||
}
|
||||
DestroyAltHUD();
|
||||
DeinitMenus();
|
||||
if (StatusBar) StatusBar->Destroy();
|
||||
|
|
|
@ -47,6 +47,8 @@
|
|||
#include "gamestruct.h"
|
||||
#include "statusbar.h"
|
||||
#include "coreactor.h"
|
||||
#include "d_net.h"
|
||||
#include "coreplayer.h"
|
||||
|
||||
CVARD(Bool, cl_crosshair, true, CVAR_ARCHIVE, "enable/disable crosshair");
|
||||
CVARD(Bool, cl_automsg, false, CVAR_ARCHIVE, "enable/disable automatically sending messages to all players") // Not implemented for Blood
|
||||
|
@ -250,7 +252,7 @@ ADD_STAT(fps)
|
|||
ADD_STAT(coord)
|
||||
{
|
||||
FString out;
|
||||
if (const auto pActor = gi->getConsoleActor())
|
||||
if (const auto pActor = PlayerArray[myconnectindex]->GetActor())
|
||||
{
|
||||
out.AppendFormat("X: %.4f ", pActor->spr.pos.X);
|
||||
out.AppendFormat("Y: %.4f ", pActor->spr.pos.Y);
|
||||
|
|
|
@ -24,6 +24,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|||
#include "menu.h"
|
||||
#include "gamestate.h"
|
||||
#include "gameinput.h"
|
||||
#include "coreplayer.h"
|
||||
#include "g_input.h"
|
||||
#include "d_net.h"
|
||||
|
||||
|
@ -276,10 +277,8 @@ void GameInput::processInputBits()
|
|||
}
|
||||
else dpad_lock = 0;
|
||||
|
||||
gi->reapplyInputBits(&inputBuffer);
|
||||
const auto crouchState = gi->getCrouchState();
|
||||
|
||||
inputBuffer.actions |= ActionsToSend;
|
||||
inputBuffer.actions |= ActionsToSend | (PlayerArray[myconnectindex]->cmd.ucmd.actions & SB_CENTERVIEW);
|
||||
ActionsToSend = 0;
|
||||
|
||||
if (buttonMap.ButtonDown(gamefunc_Aim_Up) || (buttonMap.ButtonDown(gamefunc_Dpad_Aiming) && joyAxes[JOYAXIS_Forward] > 0))
|
||||
|
@ -722,7 +721,7 @@ CCMD(warptocoords)
|
|||
return;
|
||||
}
|
||||
|
||||
if (const auto pActor = gi->getConsoleActor())
|
||||
if (const auto pActor = PlayerArray[myconnectindex]->actor)
|
||||
{
|
||||
pActor->spr.pos = DVector3(atof(argv[1]), atof(argv[2]), atof(argv[3]));
|
||||
if (argv.argc() > 4) pActor->spr.Angles.Yaw = DAngle::fromDeg(atof(argv[4]));
|
||||
|
|
|
@ -18,7 +18,6 @@ struct tspritetype;
|
|||
class DCoreActor;
|
||||
struct MapRecord;
|
||||
struct PlayerAngles;
|
||||
struct ticcmd_t;
|
||||
|
||||
struct GameStats
|
||||
{
|
||||
|
@ -90,7 +89,7 @@ struct GameInterface
|
|||
virtual void Startup() = 0;
|
||||
virtual void DrawBackground() = 0;
|
||||
virtual void Render() = 0;
|
||||
virtual void Ticker(const ticcmd_t* playercmds) = 0;
|
||||
virtual void Ticker() = 0;
|
||||
virtual int GetPlayerChecksum(int pnum) { return 0x12345678 + pnum; }
|
||||
virtual const char *CheckCheatMode() { return nullptr; }
|
||||
virtual const char* GenericCheat(int player, int cheat) = 0;
|
||||
|
@ -100,7 +99,6 @@ struct GameInterface
|
|||
virtual bool DrawAutomapPlayer(const DVector2& mxy, const DVector2& cpos, const DAngle cang, const DVector2& xydim, const double czoom, double const interpfrac) { return false; }
|
||||
virtual DAngle playerPitchMin() { return DAngle::fromDeg(57.375); }
|
||||
virtual DAngle playerPitchMax() { return DAngle::fromDeg(-57.375); }
|
||||
virtual DCoreActor* getConsoleActor() = 0;
|
||||
virtual void ToggleThirdPerson() = 0;
|
||||
virtual void SwitchCoopView() { Printf("Unsupported command\n"); }
|
||||
virtual void ToggleShowWeapon() { Printf("Unsupported command\n"); }
|
||||
|
@ -117,7 +115,6 @@ struct GameInterface
|
|||
virtual void RemoveQAVInterpProps(const int res_id) { }
|
||||
virtual bool WantEscape() { return false; }
|
||||
virtual void StartSoundEngine() = 0;
|
||||
virtual void reapplyInputBits(InputPacket* const input) = 0;
|
||||
virtual void doPlayerMovement(const float scaleAdjust) = 0;
|
||||
virtual unsigned getCrouchState() = 0;
|
||||
|
||||
|
|
|
@ -90,19 +90,19 @@
|
|||
#include "i_interface.h"
|
||||
#include "texinfo.h"
|
||||
#include "texturemanager.h"
|
||||
#include "gameinput.h"
|
||||
#include "coreplayer.h"
|
||||
|
||||
CVAR(Bool, vid_activeinbackground, false, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
CVAR(Bool, r_ticstability, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
|
||||
EXTERN_CVAR(Bool, cl_capfps)
|
||||
CVAR(Bool, cl_resumesavegame, true, CVAR_ARCHIVE)
|
||||
|
||||
static ticcmd_t playercmds[MAXPLAYERS];
|
||||
|
||||
static uint64_t stabilityticduration = 0;
|
||||
static uint64_t stabilitystarttime = 0;
|
||||
static double inputScale;
|
||||
|
||||
CorePlayer* PlayerArray[MAXPLAYERS];
|
||||
|
||||
bool r_NoInterpolate;
|
||||
int entertic;
|
||||
int oldentertics;
|
||||
|
@ -166,8 +166,6 @@ void NewGame(MapRecord* map, int skill, bool ns = false)
|
|||
|
||||
static void GameTicker()
|
||||
{
|
||||
int i;
|
||||
|
||||
handleevents();
|
||||
|
||||
// Todo: Migrate state changes to here instead of doing them ad-hoc
|
||||
|
@ -301,12 +299,13 @@ static void GameTicker()
|
|||
// get commands, check consistancy, and build new consistancy check
|
||||
int buf = (gametic / ticdup) % BACKUPTICS;
|
||||
|
||||
for (i = 0; i < MAXPLAYERS; i++)
|
||||
for (int i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
if (playeringame[i])
|
||||
{
|
||||
ticcmd_t* cmd = &playercmds[i];
|
||||
ticcmd_t* cmd = &PlayerArray[i]->cmd;
|
||||
ticcmd_t* newcmd = &netcmds[i][buf];
|
||||
PlayerArray[i]->lastcmd = *cmd;
|
||||
|
||||
if ((gametic % ticdup) == 0)
|
||||
{
|
||||
|
@ -355,7 +354,7 @@ static void GameTicker()
|
|||
case GS_LEVEL:
|
||||
gameupdatetime.Reset();
|
||||
gameupdatetime.Clock();
|
||||
gi->Ticker(playercmds);
|
||||
gi->Ticker();
|
||||
TickStatusBar();
|
||||
levelTextTime--;
|
||||
gameupdatetime.Unclock();
|
||||
|
|
|
@ -3053,7 +3053,7 @@ static void checkAddFrag(DBloodActor* killerActor, DBloodActor* actor)
|
|||
{
|
||||
if (killerActor->IsPlayerActor())
|
||||
{
|
||||
PLAYER* pPlayer = getPlayer(killerActor);
|
||||
auto pPlayer = getPlayer(killerActor);
|
||||
if (gGameOptions.nGameType == 1)
|
||||
pPlayer->fragCount++;
|
||||
}
|
||||
|
@ -3068,7 +3068,7 @@ static void checkAddFrag(DBloodActor* killerActor, DBloodActor* actor)
|
|||
case kDudeBurningInnocent:
|
||||
break;
|
||||
default:
|
||||
PLAYER* pKillerPlayer = getPlayer(killerActor);
|
||||
auto pKillerPlayer = getPlayer(killerActor);
|
||||
pKillerPlayer->fragCount++;
|
||||
break;
|
||||
}
|
||||
|
@ -3381,8 +3381,8 @@ void actKillDude(DBloodActor* killerActor, DBloodActor* actor, DAMAGE_TYPE damag
|
|||
|
||||
for (int p = connecthead; p >= 0; p = connectpoint2[p])
|
||||
{
|
||||
if (gPlayer[p].fragger == actor && gPlayer[p].deathTime > 0)
|
||||
gPlayer[p].fragger = nullptr;
|
||||
if (getPlayer(p)->fragger == actor && getPlayer(p)->deathTime > 0)
|
||||
getPlayer(p)->fragger = nullptr;
|
||||
}
|
||||
if (actor->GetType() != kDudeCultistBeast)
|
||||
trTriggerSprite(actor, kCmdOff, killerActor);
|
||||
|
@ -3615,7 +3615,7 @@ static int actDamageDude(DBloodActor* source, DBloodActor* actor, int damage, DA
|
|||
}
|
||||
else
|
||||
{
|
||||
PLAYER* pPlayer = getPlayer(actor);
|
||||
auto pPlayer = getPlayer(actor);
|
||||
if (actor->xspr.health > 0 || playerSeqPlaying(pPlayer, 16))
|
||||
damage = playerDamageSprite(source, pPlayer, damageType, damage);
|
||||
|
||||
|
@ -3629,7 +3629,7 @@ static int actDamageDude(DBloodActor* source, DBloodActor* actor, int damage, DA
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
static int actDamageThing(DBloodActor* source, DBloodActor* actor, int damage, DAMAGE_TYPE damageType, PLAYER* pSourcePlayer)
|
||||
static int actDamageThing(DBloodActor* source, DBloodActor* actor, int damage, DAMAGE_TYPE damageType, BloodPlayer* pSourcePlayer)
|
||||
{
|
||||
assert(actor->IsThingActor());
|
||||
int nType = actor->GetType() - kThingBase;
|
||||
|
@ -3675,7 +3675,7 @@ static int actDamageThing(DBloodActor* source, DBloodActor* actor, int damage, D
|
|||
case kThingZombieHead:
|
||||
if (damageType == 3 && pSourcePlayer && PlayClock > pSourcePlayer->laughCount && Chance(0x4000))
|
||||
{
|
||||
sfxPlay3DSound(pSourcePlayer->actor, gPlayerGibThingComments[Random(10)], 0, 2);
|
||||
sfxPlay3DSound(pSourcePlayer->GetActor(), gPlayerGibThingComments[Random(10)], 0, 2);
|
||||
pSourcePlayer->laughCount = PlayClock + 3600;
|
||||
}
|
||||
break;
|
||||
|
@ -3738,7 +3738,7 @@ int actDamageSprite(DBloodActor* source, DBloodActor* actor, DAMAGE_TYPE damageT
|
|||
|
||||
if (source == nullptr) source = actor;
|
||||
|
||||
PLAYER* pSourcePlayer = nullptr;
|
||||
BloodPlayer* pSourcePlayer = nullptr;
|
||||
if (source->IsPlayerActor()) pSourcePlayer = getPlayer(source);
|
||||
if (!gGameOptions.bFriendlyFire && IsTargetTeammate(pSourcePlayer, actor)) return 0;
|
||||
|
||||
|
@ -4172,7 +4172,7 @@ static void checkCeilHit(DBloodActor* actor)
|
|||
}
|
||||
}
|
||||
#endif
|
||||
if (!actor->IsPlayerActor() || gPlayer[actor->GetType() - kDudePlayer1].godMode == 0)
|
||||
if (!actor->IsPlayerActor() || getPlayer(actor)->godMode == 0)
|
||||
{
|
||||
switch (actor2->GetType())
|
||||
{
|
||||
|
@ -4333,7 +4333,7 @@ static void checkFloorHit(DBloodActor* actor)
|
|||
}
|
||||
#endif
|
||||
|
||||
PLAYER* pPlayer = nullptr;
|
||||
BloodPlayer* pPlayer = nullptr;
|
||||
if (actor->IsPlayerActor()) pPlayer = getPlayer(actor);
|
||||
|
||||
switch (actor2->GetType())
|
||||
|
@ -4690,7 +4690,7 @@ static Collision MoveThing(DBloodActor* actor)
|
|||
|
||||
void MoveDude(DBloodActor* actor)
|
||||
{
|
||||
PLAYER* pPlayer = nullptr;
|
||||
BloodPlayer* pPlayer = nullptr;
|
||||
if (actor->IsPlayerActor()) pPlayer = getPlayer(actor);
|
||||
if (!(actor->IsDudeActor()))
|
||||
{
|
||||
|
@ -4897,7 +4897,7 @@ void MoveDude(DBloodActor* actor)
|
|||
{
|
||||
pPlayer->posture = 0;
|
||||
pPlayer->bubbleTime = 0;
|
||||
if (!pPlayer->cantJump && (pPlayer->input.actions & SB_JUMP))
|
||||
if (!pPlayer->cantJump && (pPlayer->cmd.ucmd.actions & SB_JUMP))
|
||||
{
|
||||
actor->vel.Z = FixedToFloat(-0x6aaaa);
|
||||
pPlayer->cantJump = 1;
|
||||
|
@ -5542,8 +5542,8 @@ static void actCheckProximity()
|
|||
auto Owner = actor->GetOwner();
|
||||
if (!Owner->IsPlayerActor()) continue;
|
||||
|
||||
PLAYER* pPlayer = getPlayer(Owner);
|
||||
PLAYER* pPlayer2 = dudeactor->IsPlayerActor() ? &gPlayer[dudeactor->GetType() - kDudePlayer1] : nullptr;
|
||||
auto pPlayer = getPlayer(Owner);
|
||||
BloodPlayer* pPlayer2 = dudeactor->IsPlayerActor() ? getPlayer(dudeactor) : nullptr;
|
||||
|
||||
if (dudeactor == Owner || dudeactor->GetType() == kDudeZombieAxeBuried || dudeactor->GetType() == kDudeRat || dudeactor->GetType() == kDudeBat) continue;
|
||||
if (gGameOptions.nGameType == 3 && pPlayer2 && pPlayer->teamId == pPlayer2->teamId) continue;
|
||||
|
@ -5802,11 +5802,11 @@ static void actCheckExplosion()
|
|||
|
||||
for (int p = connecthead; p >= 0; p = connectpoint2[p])
|
||||
{
|
||||
auto dv = apos - gPlayer[p].actor->spr.pos;
|
||||
auto dv = apos - getPlayer(p)->GetActor()->spr.pos;
|
||||
int nDist = int(dv.LengthSquared() + 0x40000);
|
||||
|
||||
int t = DivScale(actor->xspr.data2, nDist, 16);
|
||||
gPlayer[p].flickerEffect += t;
|
||||
getPlayer(p)->flickerEffect += t;
|
||||
}
|
||||
|
||||
#ifdef NOONE_EXTENSIONS
|
||||
|
@ -5974,7 +5974,7 @@ static void actCheckDudes()
|
|||
}
|
||||
if (actor->IsPlayerActor())
|
||||
{
|
||||
PLAYER* pPlayer = getPlayer(actor);
|
||||
auto pPlayer = getPlayer(actor);
|
||||
if (pPlayer->voodooTargets) voodooTarget(pPlayer);
|
||||
if (pPlayer->hand && Chance(0x8000)) actDamageSprite(actor, actor, kDamageDrown, 12);
|
||||
|
||||
|
@ -6004,7 +6004,7 @@ static void actCheckDudes()
|
|||
}
|
||||
else if (gGameOptions.nGameType == 0)
|
||||
{
|
||||
if (pPlayer->actor->xspr.health > 0 && pPlayer->restTime >= 1200 && Chance(0x200))
|
||||
if (pPlayer->GetActor()->xspr.health > 0 && pPlayer->restTime >= 1200 && Chance(0x200))
|
||||
{
|
||||
pPlayer->restTime = -1;
|
||||
sfxPlay3DSound(actor, 3100 + Random(11), 0, 2);
|
||||
|
@ -6048,13 +6048,13 @@ static void actCheckDudes()
|
|||
|
||||
if (actor->IsPlayerActor())
|
||||
{
|
||||
PLAYER* pPlayer = getPlayer(actor);
|
||||
auto pPlayer = getPlayer(actor);
|
||||
double nDrag = FixedToFloat(gDudeDrag);
|
||||
if (actor->xspr.height > 0)
|
||||
nDrag -= Scale(nDrag, (double)actor->xspr.height, 256.);
|
||||
|
||||
constexpr auto maxVel = (36211. / 3000.);
|
||||
pPlayer->Angles.doRollInput(&pPlayer->input, actor->vel.XY(), maxVel, false);
|
||||
pPlayer->Angles.doRollInput(&pPlayer->cmd.ucmd, actor->vel.XY(), maxVel, false);
|
||||
pPlayer->Angles.StrafeVel -= pPlayer->Angles.StrafeVel * nDrag;
|
||||
}
|
||||
|
||||
|
@ -6625,7 +6625,7 @@ void actFireVector(DBloodActor* shooter, double offset, double zoffset, DVector3
|
|||
if (!gGameOptions.bFriendlyFire && IsTargetTeammate(shooter, hitactor)) return;
|
||||
if (hitactor->IsPlayerActor())
|
||||
{
|
||||
PLAYER* pPlayer = getPlayer(hitactor);
|
||||
auto pPlayer = getPlayer(hitactor);
|
||||
if (powerupCheck(pPlayer, kPwUpReflectShots))
|
||||
{
|
||||
gHitInfo.hitActor = shooter;
|
||||
|
|
|
@ -114,7 +114,7 @@ static bool isImmune(DBloodActor* actor, int dmgType, int minScale)
|
|||
return (thingInfo[type - kThingBase].dmgControl[dmgType] <= minScale);
|
||||
else if (actor->IsDudeActor())
|
||||
{
|
||||
if (actor->IsPlayerActor()) return (gPlayer[type - kDudePlayer1].godMode || gPlayer[type - kDudePlayer1].damageControl[dmgType] <= minScale);
|
||||
if (actor->IsPlayerActor()) return (getPlayer(type - kDudePlayer1)->godMode || getPlayer(type - kDudePlayer1)->damageControl[dmgType] <= minScale);
|
||||
else return (dudeInfo[type - kDudeBase].damageVal[dmgType] <= minScale);
|
||||
}
|
||||
}
|
||||
|
@ -971,7 +971,7 @@ int aiDamageSprite(DBloodActor* source, DBloodActor* actor, DAMAGE_TYPE nDmgType
|
|||
{
|
||||
aiPatrolStop(actor, source, actor->xspr.dudeAmbush);
|
||||
|
||||
PLAYER* pPlayer = getPlayerById(source->GetType());
|
||||
auto pPlayer = getPlayer(source->GetType());
|
||||
if (!pPlayer) return nDamage;
|
||||
//if (powerupCheck(pPlayer, kPwUpShadowCloak)) pPlayer->pwUpTime[kPwUpShadowCloak] = 0;
|
||||
if (readyForCrit(source, actor))
|
||||
|
@ -987,7 +987,7 @@ int aiDamageSprite(DBloodActor* source, DBloodActor* actor, DAMAGE_TYPE nDmgType
|
|||
}
|
||||
}
|
||||
|
||||
DPrintf(DMSG_SPAMMY, "Player #%d does the critical damage to patrol dude #%d!", pPlayer->nPlayer + 1, actor->GetIndex());
|
||||
DPrintf(DMSG_SPAMMY, "Player #%d does the critical damage to patrol dude #%d!", pPlayer->pnum + 1, actor->GetIndex());
|
||||
}
|
||||
|
||||
return nDamage;
|
||||
|
@ -1491,12 +1491,12 @@ void aiThinkTarget(DBloodActor* actor)
|
|||
{
|
||||
for (int p = connecthead; p >= 0; p = connectpoint2[p])
|
||||
{
|
||||
PLAYER* pPlayer = &gPlayer[p];
|
||||
if (actor->GetOwner() == pPlayer->actor || pPlayer->actor->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0)
|
||||
BloodPlayer* pPlayer = getPlayer(p);
|
||||
if (actor->GetOwner() == pPlayer->GetActor() || pPlayer->GetActor()->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0)
|
||||
continue;
|
||||
auto ppos = pPlayer->actor->spr.pos;
|
||||
auto ppos = pPlayer->GetActor()->spr.pos;
|
||||
auto dvec = ppos.XY() - actor->spr.pos.XY();
|
||||
auto pSector = pPlayer->actor->sector();
|
||||
auto pSector = pPlayer->GetActor()->sector();
|
||||
|
||||
double nDist = dvec.Length();
|
||||
if (nDist > pDudeInfo->SeeDist() && nDist > pDudeInfo->HearDist())
|
||||
|
@ -1508,7 +1508,7 @@ void aiThinkTarget(DBloodActor* actor)
|
|||
DAngle nDeltaAngle = absangle(actor->spr.Angles.Yaw, dvec.Angle());
|
||||
if (nDist < pDudeInfo->SeeDist() && nDeltaAngle <= pDudeInfo->Periphery())
|
||||
{
|
||||
aiSetTarget(actor, pPlayer->actor);
|
||||
aiSetTarget(actor, pPlayer->GetActor());
|
||||
aiActivateDude(actor);
|
||||
return;
|
||||
}
|
||||
|
@ -1536,12 +1536,12 @@ void aiLookForTarget(DBloodActor* actor)
|
|||
{
|
||||
for (int p = connecthead; p >= 0; p = connectpoint2[p])
|
||||
{
|
||||
PLAYER* pPlayer = &gPlayer[p];
|
||||
if (actor->GetOwner() == pPlayer->actor || pPlayer->actor->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0)
|
||||
BloodPlayer* pPlayer = getPlayer(p);
|
||||
if (actor->GetOwner() == pPlayer->GetActor() || pPlayer->GetActor()->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0)
|
||||
continue;
|
||||
auto ppos = pPlayer->actor->spr.pos;
|
||||
auto ppos = pPlayer->GetActor()->spr.pos;
|
||||
auto dvec = ppos.XY() - actor->spr.pos.XY();
|
||||
auto pSector = pPlayer->actor->sector();
|
||||
auto pSector = pPlayer->GetActor()->sector();
|
||||
|
||||
double nDist = dvec.Length();
|
||||
if (nDist > pDudeInfo->SeeDist() && nDist > pDudeInfo->HearDist())
|
||||
|
@ -1552,7 +1552,7 @@ void aiLookForTarget(DBloodActor* actor)
|
|||
DAngle nDeltaAngle = absangle(actor->spr.Angles.Yaw, dvec.Angle());
|
||||
if (nDist < pDudeInfo->SeeDist() && nDeltaAngle <= pDudeInfo->Periphery())
|
||||
{
|
||||
aiSetTarget(actor, pPlayer->actor);
|
||||
aiSetTarget(actor, pPlayer->GetActor());
|
||||
aiActivateDude(actor);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -94,12 +94,12 @@ static void batThinkTarget(DBloodActor* actor)
|
|||
{
|
||||
for (int p = connecthead; p >= 0; p = connectpoint2[p])
|
||||
{
|
||||
PLAYER* pPlayer = &gPlayer[p];
|
||||
if (pPlayer->actor->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0)
|
||||
BloodPlayer* pPlayer = getPlayer(p);
|
||||
if (pPlayer->GetActor()->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0)
|
||||
continue;
|
||||
auto ppos = pPlayer->actor->spr.pos;
|
||||
auto ppos = pPlayer->GetActor()->spr.pos;
|
||||
auto dvec = ppos.XY() - actor->spr.pos.XY();
|
||||
auto pSector = pPlayer->actor->sector();
|
||||
auto pSector = pPlayer->GetActor()->sector();
|
||||
|
||||
double nDist = dvec.Length();
|
||||
if (nDist > pDudeInfo->SeeDist() && nDist > pDudeInfo->HearDist())
|
||||
|
@ -110,7 +110,7 @@ static void batThinkTarget(DBloodActor* actor)
|
|||
DAngle nDeltaAngle = absangle(actor->spr.Angles.Yaw, dvec.Angle());
|
||||
if (nDist < pDudeInfo->SeeDist() && nDeltaAngle <= pDudeInfo->Periphery())
|
||||
{
|
||||
aiSetTarget(actor, pPlayer->actor);
|
||||
aiSetTarget(actor, pPlayer->GetActor());
|
||||
aiActivateDude(actor);
|
||||
}
|
||||
else if (nDist < pDudeInfo->HearDist())
|
||||
|
@ -251,7 +251,7 @@ static void batThinkChase(DBloodActor* actor)
|
|||
aiNewState(actor, &batSearch);
|
||||
return;
|
||||
}
|
||||
if (pTarget->IsPlayerActor() && powerupCheck(&gPlayer[pTarget->GetType() - kDudePlayer1], kPwUpShadowCloak) > 0)
|
||||
if (pTarget->IsPlayerActor() && powerupCheck(getPlayer(pTarget), kPwUpShadowCloak) > 0)
|
||||
{
|
||||
aiNewState(actor, &batSearch);
|
||||
return;
|
||||
|
|
|
@ -120,7 +120,7 @@ void StompSeqCallback(int, DBloodActor* actor)
|
|||
else
|
||||
nDamage = nBaseDamage + int(nBaseDamage2 * ((nDist - nDist2) / nDist));
|
||||
if (actor2->IsPlayerActor())
|
||||
gPlayer[actor2->GetType() - kDudePlayer1].quakeEffect += nDamage * 4;
|
||||
getPlayer(actor2)->quakeEffect += nDamage * 4;
|
||||
actDamageSprite(actor, actor2, kDamageFall, nDamage << 4);
|
||||
}
|
||||
}
|
||||
|
@ -148,7 +148,7 @@ void StompSeqCallback(int, DBloodActor* actor)
|
|||
nDamage = nBaseDamage + int(nBaseDamage2 * ((nDist - nDist2) / nDist));
|
||||
|
||||
if (actor2->IsPlayerActor())
|
||||
gPlayer[actor2->GetType() - kDudePlayer1].quakeEffect += nDamage * 4;
|
||||
getPlayer(actor2)->quakeEffect += nDamage * 4;
|
||||
actDamageSprite(actor, actor2, kDamageFall, nDamage << 4);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -106,12 +106,12 @@ static void eelThinkTarget(DBloodActor* actor)
|
|||
{
|
||||
for (int p = connecthead; p >= 0; p = connectpoint2[p])
|
||||
{
|
||||
PLAYER* pPlayer = &gPlayer[p];
|
||||
if (pPlayer->actor->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0)
|
||||
BloodPlayer* pPlayer = getPlayer(p);
|
||||
if (pPlayer->GetActor()->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0)
|
||||
continue;
|
||||
auto ppos = pPlayer->actor->spr.pos;
|
||||
auto ppos = pPlayer->GetActor()->spr.pos;
|
||||
auto dvect = ppos.XY() - actor->spr.pos;
|
||||
auto pSector = pPlayer->actor->sector();
|
||||
auto pSector = pPlayer->GetActor()->sector();
|
||||
double nDist = dvect.Length();
|
||||
if (nDist > pDudeInfo->SeeDist() && nDist > pDudeInfo->HearDist())
|
||||
continue;
|
||||
|
@ -122,7 +122,7 @@ static void eelThinkTarget(DBloodActor* actor)
|
|||
if (nDist < pDudeInfo->SeeDist() && nDeltaAngle <= pDudeInfo->Periphery())
|
||||
{
|
||||
actor->dudeExtra.thinkTime = 0;
|
||||
aiSetTarget(actor, pPlayer->actor);
|
||||
aiSetTarget(actor, pPlayer->GetActor());
|
||||
aiActivateDude(actor);
|
||||
}
|
||||
else if (nDist < pDudeInfo->HearDist())
|
||||
|
|
|
@ -237,12 +237,12 @@ static void cerberusThinkTarget(DBloodActor* actor)
|
|||
{
|
||||
for (int p = connecthead; p >= 0; p = connectpoint2[p])
|
||||
{
|
||||
PLAYER* pPlayer = &gPlayer[p];
|
||||
if (pPlayer->actor->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0)
|
||||
BloodPlayer* pPlayer = getPlayer(p);
|
||||
if (pPlayer->GetActor()->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0)
|
||||
continue;
|
||||
auto ppos = pPlayer->actor->spr.pos;
|
||||
auto ppos = pPlayer->GetActor()->spr.pos;
|
||||
auto dvect = ppos.XY() - actor->spr.pos;
|
||||
auto pSector = pPlayer->actor->sector();
|
||||
auto pSector = pPlayer->GetActor()->sector();
|
||||
double nDist = dvect.Length();
|
||||
if (nDist > pDudeInfo->SeeDist() && nDist > pDudeInfo->HearDist())
|
||||
continue;
|
||||
|
@ -253,7 +253,7 @@ static void cerberusThinkTarget(DBloodActor* actor)
|
|||
if (nDist < pDudeInfo->SeeDist() && nDeltaAngle <= pDudeInfo->Periphery())
|
||||
{
|
||||
actor->dudeExtra.thinkTime = 0;
|
||||
aiSetTarget(actor, pPlayer->actor);
|
||||
aiSetTarget(actor, pPlayer->GetActor());
|
||||
aiActivateDude(actor);
|
||||
}
|
||||
else if (nDist < pDudeInfo->HearDist())
|
||||
|
|
|
@ -275,7 +275,7 @@ static void cultThinkChase(DBloodActor* actor)
|
|||
{
|
||||
case kDudeCultistTommy:
|
||||
if (nDist < 0x1e0 && nDist > 0xe0 && nDeltaAngle < DAngle15 && !TargetNearExplosion(target->sector())
|
||||
&& (target->spr.flags & 2) && gGameOptions.nDifficulty > 2 && target->IsPlayerActor() && gPlayer[target->GetType() - kDudePlayer1].isRunning
|
||||
&& (target->spr.flags & 2) && gGameOptions.nDifficulty > 2 && target->IsPlayerActor() && getPlayer(target)->isRunning
|
||||
&& Chance(0x8000))
|
||||
{
|
||||
int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec, 0), CLIPMASK1, 0);
|
||||
|
@ -343,7 +343,7 @@ static void cultThinkChase(DBloodActor* actor)
|
|||
break;
|
||||
case kDudeCultistShotgun:
|
||||
if (nDist < 0x2c0 && nDist > 0x140 && !TargetNearExplosion(target->sector())
|
||||
&& (target->spr.flags & 2) && gGameOptions.nDifficulty >= 2 && target->IsPlayerActor() && !gPlayer[target->GetType() - kDudePlayer1].isRunning
|
||||
&& (target->spr.flags & 2) && gGameOptions.nDifficulty >= 2 && target->IsPlayerActor() && !getPlayer(target)->isRunning
|
||||
&& Chance(0x8000))
|
||||
{
|
||||
int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec, 0), CLIPMASK1, 0);
|
||||
|
@ -411,7 +411,7 @@ static void cultThinkChase(DBloodActor* actor)
|
|||
break;
|
||||
case kDudeCultistTesla:
|
||||
if (nDist < 0x1e0 && nDist > 0xe0 && !TargetNearExplosion(target->sector())
|
||||
&& (target->spr.flags & 2) && gGameOptions.nDifficulty > 2 && target->IsPlayerActor() && gPlayer[target->GetType() - kDudePlayer1].isRunning
|
||||
&& (target->spr.flags & 2) && gGameOptions.nDifficulty > 2 && target->IsPlayerActor() && getPlayer(target)->isRunning
|
||||
&& Chance(0x8000))
|
||||
{
|
||||
int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec, 0), CLIPMASK1, 0);
|
||||
|
@ -522,7 +522,7 @@ static void cultThinkChase(DBloodActor* actor)
|
|||
break;
|
||||
case kDudeCultistBeast:
|
||||
if (nDist < 0x1e0 && nDist > 0xe0 && !TargetNearExplosion(target->sector())
|
||||
&& (target->spr.flags & 2) && gGameOptions.nDifficulty > 2 && target->IsPlayerActor() && gPlayer[target->GetType() - kDudePlayer1].isRunning
|
||||
&& (target->spr.flags & 2) && gGameOptions.nDifficulty > 2 && target->IsPlayerActor() && getPlayer(target)->isRunning
|
||||
&& Chance(0x8000))
|
||||
{
|
||||
int hit = HitScan(actor, actor->spr.pos.Z, DVector3(dvec, 0), CLIPMASK1, 0);
|
||||
|
|
|
@ -193,12 +193,12 @@ static void gargThinkTarget(DBloodActor* actor)
|
|||
{
|
||||
for (int p = connecthead; p >= 0; p = connectpoint2[p])
|
||||
{
|
||||
PLAYER* pPlayer = &gPlayer[p];
|
||||
if (pPlayer->actor->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0)
|
||||
BloodPlayer* pPlayer = getPlayer(p);
|
||||
if (pPlayer->GetActor()->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0)
|
||||
continue;
|
||||
auto ppos = pPlayer->actor->spr.pos;
|
||||
auto ppos = pPlayer->GetActor()->spr.pos;
|
||||
auto dvect = ppos.XY() - actor->spr.pos;
|
||||
auto pSector = pPlayer->actor->sector();
|
||||
auto pSector = pPlayer->GetActor()->sector();
|
||||
double nDist = dvect.Length();
|
||||
if (nDist > pDudeInfo->SeeDist() && nDist > pDudeInfo->HearDist())
|
||||
continue;
|
||||
|
@ -209,7 +209,7 @@ static void gargThinkTarget(DBloodActor* actor)
|
|||
if (nDist < pDudeInfo->SeeDist() && nDeltaAngle <= pDudeInfo->Periphery())
|
||||
{
|
||||
actor->dudeExtra.thinkTime = 0;
|
||||
aiSetTarget(actor, pPlayer->actor);
|
||||
aiSetTarget(actor, pPlayer->GetActor());
|
||||
aiActivateDude(actor);
|
||||
}
|
||||
else if (nDist < pDudeInfo->HearDist())
|
||||
|
|
|
@ -174,12 +174,12 @@ static void ghostThinkTarget(DBloodActor* actor)
|
|||
{
|
||||
for (int p = connecthead; p >= 0; p = connectpoint2[p])
|
||||
{
|
||||
PLAYER* pPlayer = &gPlayer[p];
|
||||
if (pPlayer->actor->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0)
|
||||
BloodPlayer* pPlayer = getPlayer(p);
|
||||
if (pPlayer->GetActor()->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0)
|
||||
continue;
|
||||
auto ppos = pPlayer->actor->spr.pos;
|
||||
auto ppos = pPlayer->GetActor()->spr.pos;
|
||||
auto dvect = ppos.XY() - actor->spr.pos;
|
||||
auto pSector = pPlayer->actor->sector();
|
||||
auto pSector = pPlayer->GetActor()->sector();
|
||||
double nDist = dvect.Length();
|
||||
if (nDist > pDudeInfo->SeeDist() && nDist > pDudeInfo->HearDist())
|
||||
continue;
|
||||
|
@ -190,7 +190,7 @@ static void ghostThinkTarget(DBloodActor* actor)
|
|||
if (nDist < pDudeInfo->SeeDist() && nDeltaAngle <= pDudeInfo->Periphery())
|
||||
{
|
||||
actor->dudeExtra.thinkTime = 0;
|
||||
aiSetTarget(actor, pPlayer->actor);
|
||||
aiSetTarget(actor, pPlayer->GetActor());
|
||||
aiActivateDude(actor);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -47,7 +47,7 @@ void HandJumpSeqCallback(int, DBloodActor* actor)
|
|||
auto target = actor->GetTarget();
|
||||
if (target->IsPlayerActor())
|
||||
{
|
||||
PLAYER* pPlayer = getPlayer(target);
|
||||
auto pPlayer = getPlayer(target);
|
||||
if (!pPlayer->hand)
|
||||
{
|
||||
pPlayer->hand = 1;
|
||||
|
|
|
@ -49,7 +49,7 @@ static void spidBlindEffect(DBloodActor* actor, int nBlind, int max)
|
|||
{
|
||||
nBlind <<= 4;
|
||||
max <<= 4;
|
||||
PLAYER* pPlayer = getPlayer(actor);
|
||||
auto pPlayer = getPlayer(actor);
|
||||
if (pPlayer->blindEffect < max)
|
||||
{
|
||||
pPlayer->blindEffect = ClipHigh(pPlayer->blindEffect + nBlind, max);
|
||||
|
@ -74,7 +74,7 @@ void SpidBiteSeqCallback(int, DBloodActor* actor)
|
|||
if (hit == 3 && gHitInfo.actor()->IsPlayerActor())
|
||||
{
|
||||
vec.Z += target->spr.pos.Z - actor->spr.pos.Z;
|
||||
PLAYER* pPlayer = getPlayer(target);
|
||||
auto pPlayer = getPlayer(target);
|
||||
switch (actor->GetType())
|
||||
{
|
||||
case kDudeSpiderBrown:
|
||||
|
|
|
@ -198,12 +198,12 @@ static void sub_725A4(DBloodActor* actor)
|
|||
{
|
||||
for (int p = connecthead; p >= 0; p = connectpoint2[p])
|
||||
{
|
||||
PLAYER* pPlayer = &gPlayer[p];
|
||||
if (pPlayer->actor->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0)
|
||||
BloodPlayer* pPlayer = getPlayer(p);
|
||||
if (pPlayer->GetActor()->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0)
|
||||
continue;
|
||||
auto ppos = pPlayer->actor->spr.pos;
|
||||
auto ppos = pPlayer->GetActor()->spr.pos;
|
||||
auto dvect = ppos.XY() - actor->spr.pos;
|
||||
auto pSector = pPlayer->actor->sector();
|
||||
auto pSector = pPlayer->GetActor()->sector();
|
||||
DAngle nAngle = dvect.Angle();
|
||||
double nDist = dvect.Length();
|
||||
|
||||
|
@ -216,7 +216,7 @@ static void sub_725A4(DBloodActor* actor)
|
|||
if (nDist < pDudeInfo->SeeDist() && abs(nDeltaAngle) <= pDudeInfo->Periphery())
|
||||
{
|
||||
actor->dudeExtra.thinkTime = 0;
|
||||
aiSetTarget(actor, pPlayer->actor);
|
||||
aiSetTarget(actor, pPlayer->GetActor());
|
||||
aiActivateDude(actor);
|
||||
}
|
||||
else if (nDist < pDudeInfo->HearDist())
|
||||
|
|
|
@ -461,7 +461,7 @@ static void unicultThinkChase(DBloodActor* actor)
|
|||
|
||||
if (target->xspr.health <= 0) // target is dead
|
||||
{
|
||||
PLAYER* pPlayer = NULL;
|
||||
BloodPlayer* pPlayer = NULL;
|
||||
if ((!target->IsPlayerActor()) || ((pPlayer = getPlayerById(target->GetType())) != NULL && pPlayer->fragger == actor))
|
||||
{
|
||||
playGenDudeSound(actor, kGenDudeSndTargetDead);
|
||||
|
@ -498,7 +498,7 @@ static void unicultThinkChase(DBloodActor* actor)
|
|||
}
|
||||
else if (target->IsPlayerActor())
|
||||
{
|
||||
PLAYER* pPlayer = getPlayer(target);
|
||||
auto pPlayer = getPlayer(target);
|
||||
if (powerupCheck(pPlayer, kPwUpShadowCloak) > 0)
|
||||
{
|
||||
if (spriteIsUnderwater(actor, false)) aiGenDudeNewState(actor, &genDudeSearchShortW);
|
||||
|
@ -1758,7 +1758,7 @@ void dudeLeechOperate(DBloodActor* actor, const EVENT& event)
|
|||
{
|
||||
if (actTarget->IsPlayerActor())
|
||||
{
|
||||
PLAYER* pPlayer = getPlayer(actTarget);
|
||||
auto pPlayer = getPlayer(actTarget);
|
||||
if (powerupCheck(pPlayer, kPwUpShadowCloak) > 0) return;
|
||||
}
|
||||
double top, bottom;
|
||||
|
|
|
@ -209,13 +209,13 @@ static void myThinkTarget(DBloodActor* actor)
|
|||
DUDEINFO* pDudeInfo = getDudeInfo(actor);
|
||||
for (int p = connecthead; p >= 0; p = connectpoint2[p])
|
||||
{
|
||||
PLAYER* pPlayer = &gPlayer[p];
|
||||
BloodPlayer* pPlayer = getPlayer(p);
|
||||
auto owneractor = actor->GetOwner();
|
||||
if (owneractor == nullptr || owneractor == pPlayer->actor || pPlayer->actor->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0)
|
||||
if (owneractor == nullptr || owneractor == pPlayer->GetActor() || pPlayer->GetActor()->xspr.health == 0 || powerupCheck(pPlayer, kPwUpShadowCloak) > 0)
|
||||
continue;
|
||||
auto ppos = pPlayer->actor->spr.pos;
|
||||
auto ppos = pPlayer->GetActor()->spr.pos;
|
||||
auto dvect = ppos.XY() - actor->spr.pos;
|
||||
auto pSector = pPlayer->actor->sector();
|
||||
auto pSector = pPlayer->GetActor()->sector();
|
||||
double nDist = dvect.Length();
|
||||
if (nDist > pDudeInfo->SeeDist() && nDist > pDudeInfo->HearDist())
|
||||
continue;
|
||||
|
@ -225,7 +225,7 @@ static void myThinkTarget(DBloodActor* actor)
|
|||
DAngle nDeltaAngle = absangle(actor->spr.Angles.Yaw, dvect.Angle());
|
||||
if (nDist < pDudeInfo->SeeDist() && abs(nDeltaAngle) <= pDudeInfo->Periphery())
|
||||
{
|
||||
aiSetTarget(actor, pPlayer->actor);
|
||||
aiSetTarget(actor, pPlayer->GetActor());
|
||||
aiActivateDude(actor);
|
||||
}
|
||||
else if (nDist < pDudeInfo->HearDist())
|
||||
|
|
|
@ -462,7 +462,7 @@ static tspritetype* viewAddEffect(tspriteArray& tsprites, int nTSprite, VIEW_EFF
|
|||
case kViewEffectShowWeapon:
|
||||
{
|
||||
assert(owneractor->IsPlayerActor());
|
||||
PLAYER* pPlayer = getPlayer(owneractor);
|
||||
auto pPlayer = getPlayer(owneractor);
|
||||
WEAPONICON weaponIcon = gWeaponIcon[pPlayer->curWeapon];
|
||||
auto nTex = weaponIcon.textureID();
|
||||
if (!nTex.isValid()) break;
|
||||
|
@ -477,12 +477,12 @@ static tspritetype* viewAddEffect(tspriteArray& tsprites, int nTSprite, VIEW_EFF
|
|||
int nVoxel = GetExtInfo(nTex).tiletovox;
|
||||
if (cl_showweapon == 2 && r_voxels && nVoxel != -1)
|
||||
{
|
||||
auto gView = &gPlayer[gViewIndex];
|
||||
pNSprite->Angles.Yaw = gView->actor->spr.Angles.Yaw + DAngle90; // always face viewer
|
||||
auto gView = getPlayer(gViewIndex);
|
||||
pNSprite->Angles.Yaw = gView->GetActor()->spr.Angles.Yaw + DAngle90; // always face viewer
|
||||
pNSprite->cstat &= ~CSTAT_SPRITE_YFLIP;
|
||||
if (pPlayer->curWeapon == kWeapLifeLeech) // position lifeleech behind player
|
||||
{
|
||||
pNSprite->pos.XY() += gView->actor->spr.Angles.Yaw.ToVector() * 8;
|
||||
pNSprite->pos.XY() += gView->GetActor()->spr.Angles.Yaw.ToVector() * 8;
|
||||
}
|
||||
if ((pPlayer->curWeapon == kWeapLifeLeech) || (pPlayer->curWeapon == kWeapVoodooDoll)) // make lifeleech/voodoo doll always face viewer like sprite
|
||||
pNSprite->Angles.Yaw += DAngle90;
|
||||
|
@ -527,7 +527,7 @@ static int GetOctant(const DVector2& dPos)
|
|||
|
||||
void viewProcessSprites(tspriteArray& tsprites, const DVector3& cPos, DAngle cA, double interpfrac)
|
||||
{
|
||||
PLAYER* pPlayer = &gPlayer[gViewIndex];
|
||||
BloodPlayer* pPlayer = getPlayer(gViewIndex);
|
||||
int nViewSprites = tsprites.Size();
|
||||
// shift before interpolating to increase precision.
|
||||
DAngle myclock = DAngle::fromBuild((PlayClock << 3) + (4 << 3) * interpfrac);
|
||||
|
@ -775,7 +775,7 @@ void viewProcessSprites(tspriteArray& tsprites, const DVector3& cPos, DAngle cA,
|
|||
case kMissileFlareRegular:
|
||||
case kMissileFlareAlt:
|
||||
if (pTSprite->statnum == kStatFlare) {
|
||||
if (owneractor->GetTarget() == pPlayer->actor)
|
||||
if (owneractor->GetTarget() == pPlayer->GetActor())
|
||||
{
|
||||
pTSprite->scale = DVector2(0, 0);
|
||||
break;
|
||||
|
@ -817,7 +817,7 @@ void viewProcessSprites(tspriteArray& tsprites, const DVector3& cPos, DAngle cA,
|
|||
if (powerupCheck(pPlayer, kPwUpBeastVision) > 0) pTSprite->shade = -128;
|
||||
|
||||
if (owneractor->IsPlayerActor()) {
|
||||
PLAYER* thisPlayer = getPlayer(owneractor);
|
||||
auto thisPlayer = getPlayer(owneractor);
|
||||
if (powerupCheck(thisPlayer, kPwUpShadowCloak) && !powerupCheck(pPlayer, kPwUpBeastVision)) {
|
||||
pTSprite->cstat |= CSTAT_SPRITE_TRANSLUCENT;
|
||||
pTSprite->pal = 5;
|
||||
|
@ -843,7 +843,7 @@ void viewProcessSprites(tspriteArray& tsprites, const DVector3& cPos, DAngle cA,
|
|||
if (pNTSprite) {
|
||||
POSTURE* pPosture = &thisPlayer->pPosture[thisPlayer->lifeMode][thisPlayer->posture];
|
||||
pNTSprite->pos.XY() += pTSprite->Angles.Yaw.ToVector() * pPosture->xOffset;
|
||||
pNTSprite->pos.Z = thisPlayer->actor->spr.pos.Z - pPosture->zOffset;
|
||||
pNTSprite->pos.Z = thisPlayer->GetActor()->spr.pos.Z - pPosture->zOffset;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -867,7 +867,7 @@ void viewProcessSprites(tspriteArray& tsprites, const DVector3& cPos, DAngle cA,
|
|||
}
|
||||
}
|
||||
|
||||
if (pTSprite->ownerActor != pPlayer->actor || gViewPos != viewFirstPerson) {
|
||||
if (pTSprite->ownerActor != pPlayer->GetActor() || gViewPos != viewFirstPerson) {
|
||||
if (getflorzofslopeptr(pTSprite->sectp, pTSprite->pos) >= cPos.Z)
|
||||
{
|
||||
viewAddEffect(tsprites, nTSprite, kViewEffectShadow);
|
||||
|
|
|
@ -43,7 +43,7 @@ int nAmbChannels = 0;
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void ambProcess(PLAYER* pPlayer)
|
||||
void ambProcess(BloodPlayer* pPlayer)
|
||||
{
|
||||
if (!SoundEnabled())
|
||||
return;
|
||||
|
@ -56,7 +56,7 @@ void ambProcess(PLAYER* pPlayer)
|
|||
{
|
||||
if (actor->xspr.state)
|
||||
{
|
||||
int nDist = (int)(actor->spr.pos - pPlayer->actor->spr.pos).Length();
|
||||
int nDist = (int)(actor->spr.pos - pPlayer->GetActor()->spr.pos).Length();
|
||||
int vs = min(MulScale(actor->xspr.data4, actor->xspr.busy, 16), 127);
|
||||
ambChannels[actor->spr.intowner].distance += ClipRange(scale(nDist, actor->xspr.data1, actor->xspr.data2, vs, 0), 0, vs);
|
||||
}
|
||||
|
|
|
@ -96,14 +96,14 @@ static void markgcroots()
|
|||
GC::MarkArray(gPhysSpritesList, gPhysSpritesCount);
|
||||
GC::MarkArray(gImpactSpritesList, gImpactSpritesCount);
|
||||
MarkSprInSect();
|
||||
for (auto& pl : gPlayer)
|
||||
for (int i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
GC::Mark(pl.actor);
|
||||
GC::MarkArray(pl.ctfFlagState, 2);
|
||||
GC::Mark(pl.aimTarget);
|
||||
GC::MarkArray(pl.aimTargets, 16);
|
||||
GC::Mark(pl.fragger);
|
||||
GC::Mark(pl.voodooTarget);
|
||||
GC::Mark(getPlayer(i)->actor);
|
||||
GC::MarkArray(getPlayer(i)->ctfFlagState, 2);
|
||||
GC::Mark(getPlayer(i)->aimTarget);
|
||||
GC::MarkArray(getPlayer(i)->aimTargets, 16);
|
||||
GC::Mark(getPlayer(i)->fragger);
|
||||
GC::Mark(getPlayer(i)->voodooTarget);
|
||||
}
|
||||
for (auto& evobj : rxBucket)
|
||||
{
|
||||
|
@ -123,7 +123,7 @@ bool bNoDemo = false;
|
|||
int gNetPlayers;
|
||||
int gChokeCounter = 0;
|
||||
int blood_globalflags;
|
||||
PLAYER gPlayerTemp[kMaxPlayers];
|
||||
BloodPlayer gPlayerTemp[kMaxPlayers];
|
||||
int gHealthTemp[kMaxPlayers];
|
||||
int16_t startang;
|
||||
sectortype* startsector;
|
||||
|
@ -339,9 +339,9 @@ void StartLevel(MapRecord* level, bool newgame)
|
|||
{
|
||||
for (int i = connecthead; i >= 0; i = connectpoint2[i])
|
||||
{
|
||||
PLAYER* pPlayer = &gPlayer[i];
|
||||
pPlayer->actor->xspr.health &= 0xf000;
|
||||
pPlayer->actor->xspr.health |= gHealthTemp[i];
|
||||
BloodPlayer* pPlayer = getPlayer(i);
|
||||
pPlayer->GetActor()->xspr.health &= 0xf000;
|
||||
pPlayer->GetActor()->xspr.health |= gHealthTemp[i];
|
||||
pPlayer->weaponQav = gPlayerTemp[i].weaponQav;
|
||||
pPlayer->curWeapon = gPlayerTemp[i].curWeapon;
|
||||
pPlayer->weaponState = gPlayerTemp[i].weaponState;
|
||||
|
@ -357,7 +357,7 @@ void StartLevel(MapRecord* level, bool newgame)
|
|||
PreloadCache();
|
||||
InitMirrors();
|
||||
trInit(actorlist);
|
||||
if (!gPlayer[myconnectindex].packSlots[1].isActive) // if diving suit is not active, turn off reverb sound effect
|
||||
if (!getPlayer(myconnectindex)->packSlots[1].isActive) // if diving suit is not active, turn off reverb sound effect
|
||||
sfxSetReverb(0);
|
||||
ambInit();
|
||||
gChokeCounter = 0;
|
||||
|
@ -408,7 +408,7 @@ int GameInterface::GetCurrentSkill()
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void GameInterface::Ticker(const ticcmd_t* playercmds)
|
||||
void GameInterface::Ticker()
|
||||
{
|
||||
BloodSpriteIterator it;
|
||||
while (DBloodActor* act = it.Next()) act->interpolated = false;
|
||||
|
@ -421,17 +421,16 @@ void GameInterface::Ticker(const ticcmd_t* playercmds)
|
|||
thinktime.Reset();
|
||||
thinktime.Clock();
|
||||
|
||||
PLAYER* pPlayer = &gPlayer[myconnectindex];
|
||||
BloodPlayer* pPlayer = getPlayer(myconnectindex);
|
||||
|
||||
// disable synchronised input if set by game.
|
||||
resetForcedSyncInput();
|
||||
|
||||
for (int i = connecthead; i >= 0; i = connectpoint2[i])
|
||||
{
|
||||
gPlayer[i].input = playercmds[i].ucmd;
|
||||
gPlayer[i].Angles.resetCameraAngles();
|
||||
getPlayer(i)->Angles.resetCameraAngles();
|
||||
viewBackupView(i);
|
||||
playerProcess(&gPlayer[i]);
|
||||
playerProcess(getPlayer(i));
|
||||
}
|
||||
|
||||
trProcessBusy();
|
||||
|
@ -463,8 +462,8 @@ void GameInterface::Ticker(const ticcmd_t* playercmds)
|
|||
thinktime.Unclock();
|
||||
|
||||
// update console player's viewzoffset at the end of the tic.
|
||||
pPlayer->actor->oviewzoffset = pPlayer->actor->viewzoffset;
|
||||
pPlayer->actor->viewzoffset = pPlayer->zView - pPlayer->actor->spr.pos.Z;
|
||||
pPlayer->GetActor()->oviewzoffset = pPlayer->GetActor()->viewzoffset;
|
||||
pPlayer->GetActor()->viewzoffset = pPlayer->zView - pPlayer->GetActor()->spr.pos.Z;
|
||||
|
||||
gFrameCount++;
|
||||
PlayClock += kTicsPerFrame;
|
||||
|
@ -586,6 +585,13 @@ void GameInterface::loadPalette(void)
|
|||
|
||||
void GameInterface::app_init()
|
||||
{
|
||||
// Initialise player array.
|
||||
for (unsigned i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
PlayerArray[i] = new BloodPlayer;
|
||||
*getPlayer(i) = {};
|
||||
}
|
||||
|
||||
mirrortile = tileGetTextureID(504);
|
||||
InitTextureIDs();
|
||||
|
||||
|
@ -701,9 +707,9 @@ inline DUDEINFO* getDudeInfo(DBloodActor* actor)
|
|||
return getDudeInfo(actor->GetType());
|
||||
}
|
||||
|
||||
inline PLAYER* getPlayer(DBloodActor* actor)
|
||||
inline BloodPlayer* getPlayer(DBloodActor* actor)
|
||||
{
|
||||
return &gPlayer[actor->GetType() - kDudePlayer1];
|
||||
return getPlayer(actor->GetType() - kDudePlayer1);
|
||||
}
|
||||
|
||||
|
||||
|
@ -767,18 +773,18 @@ DEFINE_ACTION_FUNCTION(_Blood, PowerupIcon)
|
|||
DEFINE_ACTION_FUNCTION(_Blood, GetViewPlayer)
|
||||
{
|
||||
PARAM_PROLOGUE;
|
||||
ACTION_RETURN_POINTER(&gPlayer[gViewIndex]);
|
||||
ACTION_RETURN_POINTER(getPlayer(gViewIndex));
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION(_BloodPlayer, GetHealth)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(PLAYER);
|
||||
ACTION_RETURN_INT(self->actor->xspr.health);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(BloodPlayer);
|
||||
ACTION_RETURN_INT(self->GetActor()->xspr.health);
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_BloodPlayer, powerupCheck, powerupCheck)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(PLAYER);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(BloodPlayer);
|
||||
PARAM_INT(pwup);
|
||||
ACTION_RETURN_INT(powerupCheck(self, pwup));
|
||||
}
|
||||
|
|
|
@ -111,7 +111,7 @@ struct GameInterface : public ::GameInterface
|
|||
void MenuClosed() override;
|
||||
bool CanSave() override;
|
||||
void UpdateSounds() override;
|
||||
void Ticker(const ticcmd_t* playercmds) override;
|
||||
void Ticker() override;
|
||||
void DrawBackground() override;
|
||||
void Startup() override;
|
||||
void Render() override;
|
||||
|
@ -122,7 +122,6 @@ struct GameInterface : public ::GameInterface
|
|||
bool DrawAutomapPlayer(const DVector2& mxy, const DVector2& cpos, const DAngle cang, const DVector2& xydim, const double czoom, double const interpfrac) override;
|
||||
DAngle playerPitchMin() override { return DAngle::fromDeg(54.575); }
|
||||
DAngle playerPitchMax() override { return DAngle::fromDeg(-43.15); }
|
||||
DCoreActor* getConsoleActor() override { return gPlayer[myconnectindex].actor; }
|
||||
void ToggleThirdPerson() override;
|
||||
void SwitchCoopView() override;
|
||||
void ToggleShowWeapon() override;
|
||||
|
@ -136,8 +135,7 @@ struct GameInterface : public ::GameInterface
|
|||
void AddQAVInterpProps(const int res_id, const FString& interptype, const bool loopable, const TMap<int, TArray<int>>&& ignoredata) override;
|
||||
void RemoveQAVInterpProps(const int res_id) override;
|
||||
void StartSoundEngine() override;
|
||||
void reapplyInputBits(InputPacket* const input) override { input->actions |= gPlayer[myconnectindex].input.actions & (~(SB_BUTTON_MASK | SB_RUN | SB_WEAPONMASK_BITS) | SB_CENTERVIEW); }
|
||||
void doPlayerMovement(const float scaleAdjust) override { gameInput.processMovement(&gPlayer[myconnectindex].Angles, scaleAdjust); }
|
||||
void doPlayerMovement(const float scaleAdjust) override { gameInput.processMovement(&getPlayer(myconnectindex)->Angles, scaleAdjust); }
|
||||
unsigned getCrouchState() override;
|
||||
};
|
||||
|
||||
|
|
|
@ -169,6 +169,110 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
struct BloodPlayer final : public CorePlayer
|
||||
{
|
||||
DUDEINFO* pDudeInfo;
|
||||
uint8_t newWeapon;
|
||||
int weaponQav;
|
||||
int qavCallback;
|
||||
bool isRunning;
|
||||
int posture; // stand, crouch, swim
|
||||
int sceneQav; // by NoOne: used to keep qav id
|
||||
double bobPhase;
|
||||
int bobAmp;
|
||||
double bobHeight;
|
||||
double bobWidth;
|
||||
double obobHeight;
|
||||
double obobWidth;
|
||||
int swayAmp;
|
||||
double swayHeight;
|
||||
double swayWidth;
|
||||
double oswayHeight;
|
||||
double oswayWidth;
|
||||
int lifeMode;
|
||||
double zView;
|
||||
double ozView;
|
||||
double zViewVel;
|
||||
double zWeapon;
|
||||
double ozWeapon;
|
||||
double zWeaponVel;
|
||||
double slope;
|
||||
bool isUnderwater;
|
||||
bool hasKey[8];
|
||||
int8_t hasFlag;
|
||||
TObjPtr<DBloodActor*> ctfFlagState[2];
|
||||
int damageControl[7];
|
||||
int8_t curWeapon;
|
||||
int8_t nextWeapon;
|
||||
int weaponTimer;
|
||||
int weaponState;
|
||||
int weaponAmmo; //rename
|
||||
bool hasWeapon[kWeapMax];
|
||||
int weaponMode[kWeapMax];
|
||||
int weaponOrder[2][kWeapMax];
|
||||
//int at149[14];
|
||||
int ammoCount[12];
|
||||
bool qavLoop;
|
||||
int qavLastTick;
|
||||
int qavTimer;
|
||||
int fuseTime;
|
||||
int throwTime;
|
||||
double throwPower;
|
||||
DVector3 aim; // world
|
||||
DVector3 relAim; // relative
|
||||
TObjPtr<DBloodActor*> aimTarget; // aim target sprite
|
||||
int aimTargetsCount;
|
||||
TObjPtr<DBloodActor*> aimTargets[16];
|
||||
int deathTime;
|
||||
int pwUpTime[kMaxPowerUps];
|
||||
int fragCount;
|
||||
int fragInfo[8];
|
||||
int teamId;
|
||||
TObjPtr<DBloodActor*> fragger;
|
||||
int underwaterTime;
|
||||
int bubbleTime;
|
||||
int restTime;
|
||||
int kickPower;
|
||||
int laughCount;
|
||||
bool godMode;
|
||||
bool fallScream;
|
||||
bool cantJump;
|
||||
int packItemTime; // pack timer
|
||||
int packItemId; // pack id 1: diving suit, 2: crystal ball, 3: beast vision 4: jump boots
|
||||
PACKINFO packSlots[5]; // at325 [1]: diving suit, [2]: crystal ball, [3]: beast vision [4]: jump boots
|
||||
int armor[3]; // armor
|
||||
//int at342;
|
||||
//int at346;
|
||||
TObjPtr<DBloodActor*> voodooTarget;
|
||||
int voodooTargets; // --> useless
|
||||
int voodooVar1; // --> useless
|
||||
int vodooVar2; // --> useless
|
||||
int flickerEffect;
|
||||
int tiltEffect;
|
||||
int visibility;
|
||||
int painEffect;
|
||||
int blindEffect;
|
||||
int chokeEffect;
|
||||
int handTime;
|
||||
bool hand; // if true, there is hand start choking the player
|
||||
int pickupEffect;
|
||||
bool flashEffect; // if true, reduce pPlayer->visibility counter
|
||||
int quakeEffect;
|
||||
int player_par;
|
||||
int nWaterPal;
|
||||
POSTURE pPosture[kModeMax][kPostureMax];
|
||||
|
||||
inline DBloodActor* GetActor() override
|
||||
{
|
||||
return static_cast<DBloodActor*>(actor);
|
||||
}
|
||||
};
|
||||
|
||||
inline BloodPlayer* getPlayer(int index)
|
||||
{
|
||||
return static_cast<BloodPlayer*>(PlayerArray[index]);
|
||||
}
|
||||
|
||||
// subclassed to add a game specific actor() method
|
||||
|
||||
extern HitInfo gHitInfo;
|
||||
|
@ -193,7 +297,7 @@ inline bool IsTargetTeammate(DBloodActor* pSource, DBloodActor* pTarget)
|
|||
{
|
||||
if (!pSource->IsPlayerActor())
|
||||
return false;
|
||||
PLAYER* pSourcePlayer = getPlayer(pSource);
|
||||
auto pSourcePlayer = getPlayer(pSource);
|
||||
return IsTargetTeammate(pSourcePlayer, pTarget);
|
||||
}
|
||||
|
||||
|
|
|
@ -337,7 +337,7 @@ void PlayerBubble(DBloodActor* actor, sectortype*) // 10
|
|||
if (!actor) return;
|
||||
if (actor->IsPlayerActor())
|
||||
{
|
||||
PLAYER* pPlayer = getPlayer(actor);
|
||||
auto pPlayer = getPlayer(actor);
|
||||
if (!pPlayer->bubbleTime)
|
||||
return;
|
||||
double top, bottom;
|
||||
|
@ -436,7 +436,7 @@ void CounterCheck(DBloodActor*, sectortype* pSector) // 12
|
|||
void FinishHim(DBloodActor* actor, sectortype*) // 13
|
||||
{
|
||||
if (!actor) return;
|
||||
if (actor->IsPlayerActor() && playerSeqPlaying(getPlayer(actor), 16) && actor == gPlayer[myconnectindex].actor)
|
||||
if (actor->IsPlayerActor() && playerSeqPlaying(getPlayer(actor), 16) && actor == getPlayer(myconnectindex)->GetActor())
|
||||
sndStartSample(3313, -1, 1, 0);
|
||||
}
|
||||
|
||||
|
@ -694,7 +694,7 @@ void LeechStateTimer(DBloodActor* actor, sectortype*) // 20
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void sub_76A08(DBloodActor* actor, DBloodActor* actor2, PLAYER* pPlayer) // ???
|
||||
void sub_76A08(DBloodActor* actor, DBloodActor* actor2, BloodPlayer* pPlayer) // ???
|
||||
{
|
||||
double top, bottom;
|
||||
GetActorExtents(actor, &top, &bottom);
|
||||
|
@ -726,7 +726,7 @@ void DropVoodooCb(DBloodActor* actor, sectortype*) // unused
|
|||
evPostActor(actor, 0, kCallbackRemove);
|
||||
return;
|
||||
}
|
||||
PLAYER* pPlayer;
|
||||
BloodPlayer* pPlayer;
|
||||
if (Owner->IsPlayerActor())
|
||||
pPlayer = getPlayer(Owner);
|
||||
else
|
||||
|
@ -753,7 +753,7 @@ void DropVoodooCb(DBloodActor* actor, sectortype*) // unused
|
|||
continue;
|
||||
if (actor2->hasX())
|
||||
{
|
||||
PLAYER* pPlayer2;
|
||||
BloodPlayer* pPlayer2;
|
||||
if (actor2->IsPlayerActor())
|
||||
pPlayer2 = getPlayer(actor2);
|
||||
else
|
||||
|
|
|
@ -35,7 +35,7 @@ BEGIN_BLD_NS
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void CChoke::init(int a1, void(*a2)(PLAYER*))
|
||||
void CChoke::init(int a1, void(*a2)(BloodPlayer*))
|
||||
{
|
||||
callback = a2;
|
||||
if (!qav && a1 != -1)
|
||||
|
@ -82,7 +82,7 @@ void CChoke::animateChoke(int x, int y, double interpfrac)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void chokeCallback(PLAYER* pPlayer)
|
||||
void chokeCallback(BloodPlayer* pPlayer)
|
||||
{
|
||||
int t = gGameOptions.nDifficulty + 2;
|
||||
if (pPlayer->handTime < 64)
|
||||
|
|
|
@ -40,7 +40,7 @@ public:
|
|||
x = 0;
|
||||
y = 0;
|
||||
};
|
||||
void init(int a1, void(*a2)(PLAYER*));
|
||||
void init(int a1, void(*a2)(BloodPlayer*));
|
||||
void animateChoke(int x, int y, double interpfrac);
|
||||
void reset() { time = 0; }
|
||||
QAV* qav;
|
||||
|
@ -48,10 +48,10 @@ public:
|
|||
int time;
|
||||
int x;
|
||||
int y;
|
||||
void(*callback)(PLAYER*);
|
||||
void(*callback)(BloodPlayer*);
|
||||
};
|
||||
|
||||
void chokeCallback(PLAYER*);
|
||||
void chokeCallback(BloodPlayer*);
|
||||
|
||||
extern CChoke gChoke;
|
||||
|
||||
|
|
|
@ -156,7 +156,7 @@ void GameInterface::MenuClosed()
|
|||
|
||||
bool GameInterface::CanSave()
|
||||
{
|
||||
return gPlayer[myconnectindex].actor && gPlayer[myconnectindex].actor->xspr.health != 0;
|
||||
return getPlayer(myconnectindex)->GetActor() && getPlayer(myconnectindex)->GetActor()->xspr.health != 0;
|
||||
}
|
||||
|
||||
FSavegameInfo GameInterface::GetSaveSig()
|
||||
|
|
|
@ -100,6 +100,6 @@ inline DUDEINFO* getDudeInfo(int const nType)
|
|||
}
|
||||
|
||||
DUDEINFO* getDudeInfo(DBloodActor* actor);
|
||||
PLAYER* getPlayer(DBloodActor* actor);
|
||||
BloodPlayer* getPlayer(DBloodActor* actor);
|
||||
|
||||
END_BLD_NS
|
||||
|
|
|
@ -35,10 +35,10 @@ void GameInterface::LevelCompleted(MapRecord* map, int skill)
|
|||
// Save the player state before taking down anything.
|
||||
for (int i = connecthead; i >= 0; i = connectpoint2[i])
|
||||
{
|
||||
if (gPlayer[i].actor)
|
||||
if (getPlayer(i)->GetActor())
|
||||
{
|
||||
memcpy(&gPlayerTemp[i], &gPlayer[i], sizeof(PLAYER));
|
||||
gHealthTemp[i] = gPlayer[i].actor->xspr.health;
|
||||
memcpy(&gPlayerTemp[i], getPlayer(i), sizeof(BloodPlayer));
|
||||
gHealthTemp[i] = getPlayer(i)->GetActor()->xspr.health;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -311,15 +311,15 @@ void evSend(EventObject& eob, int rxId, COMMAND_ID command, DBloodActor* initiat
|
|||
if (gModernMap)
|
||||
{
|
||||
// allow to send commands on player sprites
|
||||
PLAYER* pPlayer = NULL;
|
||||
BloodPlayer* pPlayer = NULL;
|
||||
if (playerRXRngIsFine(rxId))
|
||||
{
|
||||
if ((pPlayer = getPlayerById((rxId - kChannelPlayer7) + kMaxPlayers)) != nullptr)
|
||||
{
|
||||
if (command == kCmdEventKillFull)
|
||||
evKillActor(pPlayer->actor);
|
||||
evKillActor(pPlayer->GetActor());
|
||||
else
|
||||
trMessageSprite(pPlayer->actor, event);
|
||||
trMessageSprite(pPlayer->GetActor(), event);
|
||||
}
|
||||
}
|
||||
else if (rxId == kChannelAllPlayers)
|
||||
|
@ -329,9 +329,9 @@ void evSend(EventObject& eob, int rxId, COMMAND_ID command, DBloodActor* initiat
|
|||
if ((pPlayer = getPlayerById(i)) != nullptr)
|
||||
{
|
||||
if (command == kCmdEventKillFull)
|
||||
evKillActor(pPlayer->actor);
|
||||
evKillActor(pPlayer->GetActor());
|
||||
else
|
||||
trMessageSprite(pPlayer->actor, event);
|
||||
trMessageSprite(pPlayer->GetActor(), event);
|
||||
}
|
||||
}
|
||||
return;
|
||||
|
|
|
@ -100,7 +100,7 @@ static void viewBurnTime(int gScale)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void hudDraw(PLAYER* pPlayer, sectortype* pSector, double bobx, double boby, double zDelta, DAngle angle, int basepal, double interpfrac)
|
||||
void hudDraw(BloodPlayer* pPlayer, sectortype* pSector, double bobx, double boby, double zDelta, DAngle angle, int basepal, double interpfrac)
|
||||
{
|
||||
if (gViewPos == 0)
|
||||
{
|
||||
|
@ -128,8 +128,8 @@ void hudDraw(PLAYER* pPlayer, sectortype* pSector, double bobx, double boby, dou
|
|||
}
|
||||
int nShade = pSector? pSector->floorshade : 0;
|
||||
int nPalette = 0;
|
||||
if (pPlayer->actor->sector()->hasX()) {
|
||||
sectortype* pViewSect = pPlayer->actor->sector();
|
||||
if (pPlayer->GetActor()->sector()->hasX()) {
|
||||
sectortype* pViewSect = pPlayer->GetActor()->sector();
|
||||
XSECTOR* pXSector = &pViewSect->xs();
|
||||
if (pXSector->color)
|
||||
nPalette = pViewSect->floorpal;
|
||||
|
@ -137,7 +137,7 @@ void hudDraw(PLAYER* pPlayer, sectortype* pSector, double bobx, double boby, dou
|
|||
|
||||
#ifdef NOONE_EXTENSIONS
|
||||
if (pPlayer->sceneQav < 0) WeaponDraw(pPlayer, nShade, cXY.X, cXY.Y, nPalette, angle);
|
||||
else if (pPlayer->actor->xspr.health > 0) playerQavSceneDraw(pPlayer, nShade, cXY.X, cXY.Y, nPalette, angle);
|
||||
else if (pPlayer->GetActor()->xspr.health > 0) playerQavSceneDraw(pPlayer, nShade, cXY.X, cXY.Y, nPalette, angle);
|
||||
else {
|
||||
pPlayer->sceneQav = pPlayer->weaponQav = kQAVNone;
|
||||
pPlayer->qavTimer = pPlayer->weaponTimer = pPlayer->curWeapon = 0;
|
||||
|
@ -146,9 +146,9 @@ void hudDraw(PLAYER* pPlayer, sectortype* pSector, double bobx, double boby, dou
|
|||
WeaponDraw(pPlayer, nShade, cX, cY, nPalette);
|
||||
#endif
|
||||
}
|
||||
if (gViewPos == 0 && pPlayer->actor->xspr.burnTime > 60)
|
||||
if (gViewPos == 0 && pPlayer->GetActor()->xspr.burnTime > 60)
|
||||
{
|
||||
viewBurnTime(pPlayer->actor->xspr.burnTime);
|
||||
viewBurnTime(pPlayer->GetActor()->xspr.burnTime);
|
||||
}
|
||||
if (packItemActive(pPlayer, 1))
|
||||
{
|
||||
|
@ -169,8 +169,8 @@ void hudDraw(PLAYER* pPlayer, sectortype* pSector, double bobx, double boby, dou
|
|||
}
|
||||
|
||||
int zn = int(((pPlayer->zWeapon - pPlayer->zView - 12) * 2.) + 220);
|
||||
PLAYER* pPSprite = getPlayer(pPlayer->actor); // ???
|
||||
if (pPlayer->actor->IsPlayerActor() && pPSprite->hand == 1)
|
||||
auto pPSprite = getPlayer(pPlayer->GetActor()); // ???
|
||||
if (pPlayer->GetActor()->IsPlayerActor() && pPSprite->hand == 1)
|
||||
{
|
||||
gChoke.animateChoke(160, zn, interpfrac);
|
||||
}
|
||||
|
|
|
@ -757,11 +757,11 @@ void GameInterface::SerializeGameState(FSerializer& arc)
|
|||
InitSectorFX();
|
||||
viewInitializePrediction();
|
||||
PreloadCache();
|
||||
if (!gPlayer[myconnectindex].packSlots[1].isActive) // if diving suit is not active, turn off reverb sound effect
|
||||
if (!getPlayer(myconnectindex)->packSlots[1].isActive) // if diving suit is not active, turn off reverb sound effect
|
||||
sfxSetReverb(0);
|
||||
ambInit();
|
||||
for (int i = 0; i < gNetPlayers; i++)
|
||||
playerSetRace(&gPlayer[i], gPlayer[i].lifeMode);
|
||||
playerSetRace(getPlayer(i), getPlayer(i)->lifeMode);
|
||||
viewSetErrorMessage("");
|
||||
paused = 0;
|
||||
Mus_ResumeSaved();
|
||||
|
|
|
@ -46,7 +46,7 @@ void sub_5A928(void)
|
|||
buttonMap.ClearButton(i);
|
||||
}
|
||||
|
||||
const char* SetGodMode(PLAYER* pPlayer, bool god)
|
||||
const char* SetGodMode(BloodPlayer* pPlayer, bool god)
|
||||
{
|
||||
playerSetGodMode(pPlayer, god);
|
||||
bPlayerCheated = true;
|
||||
|
@ -60,13 +60,13 @@ const char* SetClipMode(bool noclip)
|
|||
return gNoClip ? GStrings("TXTB_NOCLIP") : GStrings("TXTB_NOCLIPOFF");
|
||||
}
|
||||
|
||||
void packStuff(PLAYER* pPlayer)
|
||||
void packStuff(BloodPlayer* pPlayer)
|
||||
{
|
||||
for (int i = 0; i < 5; i++)
|
||||
packAddItem(pPlayer, i);
|
||||
}
|
||||
|
||||
void packClear(PLAYER* pPlayer)
|
||||
void packClear(BloodPlayer* pPlayer)
|
||||
{
|
||||
pPlayer->packItemId = 0;
|
||||
for (int i = 0; i < 5; i++)
|
||||
|
@ -76,7 +76,7 @@ void packClear(PLAYER* pPlayer)
|
|||
}
|
||||
}
|
||||
|
||||
void SetAmmo(PLAYER* pPlayer, bool stat)
|
||||
void SetAmmo(BloodPlayer* pPlayer, bool stat)
|
||||
{
|
||||
if (stat)
|
||||
{
|
||||
|
@ -92,7 +92,7 @@ void SetAmmo(PLAYER* pPlayer, bool stat)
|
|||
}
|
||||
}
|
||||
|
||||
void SetWeapons(PLAYER* pPlayer, bool stat)
|
||||
void SetWeapons(BloodPlayer* pPlayer, bool stat)
|
||||
{
|
||||
for (int i = 0; i < 14; i++)
|
||||
{
|
||||
|
@ -114,7 +114,7 @@ void SetWeapons(PLAYER* pPlayer, bool stat)
|
|||
}
|
||||
}
|
||||
|
||||
void SetToys(PLAYER* pPlayer, bool stat)
|
||||
void SetToys(BloodPlayer* pPlayer, bool stat)
|
||||
{
|
||||
if (stat)
|
||||
{
|
||||
|
@ -128,7 +128,7 @@ void SetToys(PLAYER* pPlayer, bool stat)
|
|||
}
|
||||
}
|
||||
|
||||
void SetArmor(PLAYER* pPlayer, bool stat)
|
||||
void SetArmor(BloodPlayer* pPlayer, bool stat)
|
||||
{
|
||||
int nAmount;
|
||||
if (stat)
|
||||
|
@ -145,7 +145,7 @@ void SetArmor(PLAYER* pPlayer, bool stat)
|
|||
pPlayer->armor[i] = nAmount;
|
||||
}
|
||||
|
||||
void SetKeys(PLAYER* pPlayer, bool stat)
|
||||
void SetKeys(BloodPlayer* pPlayer, bool stat)
|
||||
{
|
||||
for (int i = 1; i <= 7; i++)
|
||||
pPlayer->hasKey[i] = stat;
|
||||
|
@ -173,7 +173,7 @@ void SetMap(bool stat)
|
|||
viewSetMessage(GStrings("TXTB_NOALLMAP"));
|
||||
}
|
||||
|
||||
void SetWooMode(PLAYER* pPlayer, bool stat)
|
||||
void SetWooMode(BloodPlayer* pPlayer, bool stat)
|
||||
{
|
||||
if (stat)
|
||||
{
|
||||
|
@ -191,12 +191,12 @@ void SetWooMode(PLAYER* pPlayer, bool stat)
|
|||
}
|
||||
}
|
||||
|
||||
void ToggleWooMode(PLAYER* pPlayer)
|
||||
void ToggleWooMode(BloodPlayer* pPlayer)
|
||||
{
|
||||
SetWooMode(pPlayer, !(powerupCheck(pPlayer, kPwUpTwoGuns) != 0));
|
||||
}
|
||||
|
||||
void ToggleBoots(PLAYER* pPlayer)
|
||||
void ToggleBoots(BloodPlayer* pPlayer)
|
||||
{
|
||||
if (powerupCheck(pPlayer, kPwUpJumpBoots))
|
||||
{
|
||||
|
@ -217,7 +217,7 @@ void ToggleBoots(PLAYER* pPlayer)
|
|||
}
|
||||
}
|
||||
|
||||
void ToggleInvisibility(PLAYER* pPlayer)
|
||||
void ToggleInvisibility(BloodPlayer* pPlayer)
|
||||
{
|
||||
if (powerupCheck(pPlayer, kPwUpShadowCloak))
|
||||
{
|
||||
|
@ -233,7 +233,7 @@ void ToggleInvisibility(PLAYER* pPlayer)
|
|||
}
|
||||
}
|
||||
|
||||
void ToggleInvulnerability(PLAYER* pPlayer)
|
||||
void ToggleInvulnerability(BloodPlayer* pPlayer)
|
||||
{
|
||||
if (powerupCheck(pPlayer, kPwUpDeathMask))
|
||||
{
|
||||
|
@ -249,7 +249,7 @@ void ToggleInvulnerability(PLAYER* pPlayer)
|
|||
}
|
||||
}
|
||||
|
||||
void ToggleDelirium(PLAYER* pPlayer)
|
||||
void ToggleDelirium(BloodPlayer* pPlayer)
|
||||
{
|
||||
if (powerupCheck(pPlayer, kPwUpDeliriumShroom))
|
||||
{
|
||||
|
@ -292,12 +292,12 @@ static int parseArgs(char* pzArgs, int* nArg1, int* nArg2)
|
|||
const char* GameInterface::GenericCheat(int player, int cheat)
|
||||
{
|
||||
// message processing is not perfect because many cheats output multiple messages.
|
||||
PLAYER* pPlayer = &gPlayer[player];
|
||||
BloodPlayer* pPlayer = getPlayer(player);
|
||||
|
||||
if (gGameOptions.nGameType != 0 || numplayers > 1) // sp only for now.
|
||||
return nullptr;
|
||||
|
||||
if (gamestate != GS_LEVEL || pPlayer->actor->xspr.health == 0) // must be alive and in a level to cheat.
|
||||
if (gamestate != GS_LEVEL || pPlayer->GetActor()->xspr.health == 0) // must be alive and in a level to cheat.
|
||||
return nullptr;
|
||||
|
||||
bPlayerCheated = true;
|
||||
|
@ -322,27 +322,27 @@ const char* GameInterface::GenericCheat(int player, int cheat)
|
|||
SetToys(pPlayer, true);
|
||||
break;
|
||||
case kCheatKevorkian:
|
||||
actDamageSprite(pPlayer->actor, pPlayer->actor, kDamageBullet, 8000);
|
||||
actDamageSprite(pPlayer->GetActor(), pPlayer->GetActor(), kDamageBullet, 8000);
|
||||
return GStrings("TXTB_KEVORKIAN");
|
||||
|
||||
case kCheatMcGee:
|
||||
{
|
||||
if (!pPlayer->actor->xspr.burnTime)
|
||||
evPostActor(pPlayer->actor, 0, kCallbackFXFlameLick);
|
||||
actBurnSprite(pPlayer->actor, pPlayer->actor, 2400);
|
||||
if (!pPlayer->GetActor()->xspr.burnTime)
|
||||
evPostActor(pPlayer->GetActor(), 0, kCallbackFXFlameLick);
|
||||
actBurnSprite(pPlayer->GetActor(), pPlayer->GetActor(), 2400);
|
||||
return GStrings("TXTB_FIRED");
|
||||
}
|
||||
case kCheatEdmark:
|
||||
actDamageSprite(pPlayer->actor, pPlayer->actor, kDamageExplode, 8000);
|
||||
actDamageSprite(pPlayer->GetActor(), pPlayer->GetActor(), kDamageExplode, 8000);
|
||||
return GStrings("TXTB_THEDAYS");
|
||||
|
||||
case kCheatKrueger:
|
||||
{
|
||||
actHealDude(pPlayer->actor, 200, 200);
|
||||
actHealDude(pPlayer->GetActor(), 200, 200);
|
||||
pPlayer->armor[1] = VanillaMode() ? 200 : 3200;
|
||||
if (!pPlayer->actor->xspr.burnTime)
|
||||
evPostActor(pPlayer->actor, 0, kCallbackFXFlameLick);
|
||||
actBurnSprite(pPlayer->actor, pPlayer->actor, 2400);
|
||||
if (!pPlayer->GetActor()->xspr.burnTime)
|
||||
evPostActor(pPlayer->GetActor(), 0, kCallbackFXFlameLick);
|
||||
actBurnSprite(pPlayer->GetActor(), pPlayer->GetActor(), 2400);
|
||||
return GStrings("TXTB_RETARD");
|
||||
}
|
||||
case kCheatSterno:
|
||||
|
@ -352,7 +352,7 @@ const char* GameInterface::GenericCheat(int player, int cheat)
|
|||
pPlayer->flickerEffect = 360;
|
||||
break;
|
||||
case kCheatSpork:
|
||||
actHealDude(pPlayer->actor, 200, 200);
|
||||
actHealDude(pPlayer->GetActor(), 200, 200);
|
||||
break;
|
||||
case kCheatClarice:
|
||||
for (int i = 0; i < 3; i++)
|
||||
|
@ -401,7 +401,7 @@ const char* GameInterface::GenericCheat(int player, int cheat)
|
|||
SetWooMode(pPlayer, true);
|
||||
break;
|
||||
case kCheatCousteau:
|
||||
actHealDude(pPlayer->actor, 200, 200);
|
||||
actHealDude(pPlayer->GetActor(), 200, 200);
|
||||
pPlayer->packSlots[1].curAmount = 100;
|
||||
if (!VanillaMode())
|
||||
pPlayer->pwUpTime[kPwUpDivingSuit] = gPowerUpInfo[kPwUpDivingSuit].bonusTime;
|
||||
|
@ -416,7 +416,7 @@ const char* GameInterface::GenericCheat(int player, int cheat)
|
|||
SetKeys(pPlayer, false);
|
||||
SetWooMode(pPlayer, true);
|
||||
powerupActivate(pPlayer, kPwUpDeliriumShroom);
|
||||
pPlayer->actor->xspr.health = 16;
|
||||
pPlayer->GetActor()->xspr.health = 16;
|
||||
pPlayer->hasWeapon[kWeapPitchFork] = 1;
|
||||
pPlayer->curWeapon = kWeapNone;
|
||||
pPlayer->nextWeapon = kWeapPitchFork;
|
||||
|
@ -512,7 +512,7 @@ static cheatseq_t s_CheatInfo[] = {
|
|||
|
||||
void cheatReset(void)
|
||||
{
|
||||
PLAYER* pPlayer = &gPlayer[myconnectindex];
|
||||
BloodPlayer* pPlayer = getPlayer(myconnectindex);
|
||||
bPlayerCheated = 0;
|
||||
playerSetGodMode(pPlayer, 0);
|
||||
gNoClip = 0;
|
||||
|
@ -530,11 +530,11 @@ void cheatReset(void)
|
|||
|
||||
static void cmd_Give(int player, uint8_t** stream, bool skip)
|
||||
{
|
||||
PLAYER* pPlayer = &gPlayer[player];
|
||||
BloodPlayer* pPlayer = getPlayer(player);
|
||||
int type = ReadByte(stream);
|
||||
if (skip) return;
|
||||
|
||||
if (numplayers != 1 || gamestate != GS_LEVEL || pPlayer->actor->xspr.health == 0)
|
||||
if (numplayers != 1 || gamestate != GS_LEVEL || pPlayer->GetActor()->xspr.health == 0)
|
||||
{
|
||||
Printf("give: Cannot give while dead or not in a single-player game.\n");
|
||||
return;
|
||||
|
@ -552,7 +552,7 @@ static void cmd_Give(int player, uint8_t** stream, bool skip)
|
|||
break;
|
||||
|
||||
case GIVE_HEALTH:
|
||||
actHealDude(pPlayer->actor, 200, 200);
|
||||
actHealDude(pPlayer->GetActor(), 200, 200);
|
||||
bPlayerCheated = true;
|
||||
break;
|
||||
|
||||
|
|
|
@ -48,16 +48,16 @@ void processSpritesOnOtherSideOfPortal(int x, int y, int interpolation);
|
|||
void DrawMirrors(int x, int y, int z, fixed_t a, fixed_t horiz, int smooth, int viewPlayer);
|
||||
int qanimateoffs(int a1, int a2);
|
||||
|
||||
struct PLAYER;
|
||||
struct BloodPlayer;
|
||||
|
||||
bool checkLitSprayOrTNT(PLAYER* pPlayer);
|
||||
bool checkLitSprayOrTNT(BloodPlayer* pPlayer);
|
||||
void WeaponInit(void);
|
||||
void WeaponDraw(PLAYER* pPlayer, int shade, double xpos, double ypos, int palnum, DAngle angle);
|
||||
void WeaponRaise(PLAYER* pPlayer);
|
||||
void WeaponLower(PLAYER* pPlayer);
|
||||
int WeaponUpgrade(PLAYER* pPlayer, int newWeapon);
|
||||
void WeaponProcess(PLAYER* pPlayer);
|
||||
void WeaponUpdateState(PLAYER* pPlayer);
|
||||
void WeaponDraw(BloodPlayer* pPlayer, int shade, double xpos, double ypos, int palnum, DAngle angle);
|
||||
void WeaponRaise(BloodPlayer* pPlayer);
|
||||
void WeaponLower(BloodPlayer* pPlayer);
|
||||
int WeaponUpgrade(BloodPlayer* pPlayer, int newWeapon);
|
||||
void WeaponProcess(BloodPlayer* pPlayer);
|
||||
void WeaponUpdateState(BloodPlayer* pPlayer);
|
||||
void teslaHit(DBloodActor* pMissile, int a2);
|
||||
void WeaponPrecache();
|
||||
|
||||
|
|
|
@ -342,7 +342,7 @@ bool nnExtIsImmune(DBloodActor* actor, int dmgType, int minScale)
|
|||
}
|
||||
else if (actor->IsDudeActor())
|
||||
{
|
||||
if (actor->IsPlayerActor()) return (gPlayer[actor->GetType() - kDudePlayer1].damageControl[dmgType]);
|
||||
if (actor->IsPlayerActor()) return (getPlayer(actor)->damageControl[dmgType]);
|
||||
else if (actor->GetType() == kDudeModernCustom) return (actor->genDudeExtra.dmgControl[dmgType] <= minScale);
|
||||
else return (getDudeInfo(actor)->damageVal[dmgType] <= minScale);
|
||||
}
|
||||
|
@ -1179,13 +1179,13 @@ void nnExtProcessSuperSprites()
|
|||
{
|
||||
for (int a = connecthead; a >= 0; a = connectpoint2[a])
|
||||
{
|
||||
PLAYER* pPlayer = &gPlayer[a];
|
||||
if (!pPlayer || !xsprIsFine(pPlayer->actor) || pPlayer->actor->xspr.health <= 0)
|
||||
BloodPlayer* pPlayer = getPlayer(a);
|
||||
if (!pPlayer || !xsprIsFine(pPlayer->GetActor()) || pPlayer->GetActor()->xspr.health <= 0)
|
||||
continue;
|
||||
|
||||
if (pPlayer->actor->xspr.health > 0 && CheckProximity(gPlayer->actor, pos, pSect, okDist))
|
||||
if (pPlayer->GetActor()->xspr.health > 0 && CheckProximity(getPlayer(0)->GetActor(), pos, pSect, okDist))
|
||||
{
|
||||
trTriggerSprite(pProx, kCmdSpriteProximity, pPlayer->actor);
|
||||
trTriggerSprite(pProx, kCmdSpriteProximity, pPlayer->GetActor());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1217,11 +1217,11 @@ void nnExtProcessSuperSprites()
|
|||
|
||||
for (int a = connecthead; a >= 0; a = connectpoint2[a])
|
||||
{
|
||||
PLAYER* pPlayer = &gPlayer[a];
|
||||
if (!pPlayer || !xsprIsFine(pPlayer->actor) || pPlayer->actor->xspr.health <= 0)
|
||||
BloodPlayer* pPlayer = getPlayer(a);
|
||||
if (!pPlayer || !xsprIsFine(pPlayer->GetActor()) || pPlayer->GetActor()->xspr.health <= 0)
|
||||
continue;
|
||||
|
||||
auto plActor = pPlayer->actor;
|
||||
auto plActor = pPlayer->GetActor();
|
||||
GetActorExtents(plActor, &ztop2, &zbot2);
|
||||
if (cansee(pSight->spr.pos, pSightSect, DVector3(plActor->spr.pos.XY(), ztop2), plActor->sector()))
|
||||
{
|
||||
|
@ -1236,7 +1236,7 @@ void nnExtProcessSuperSprites()
|
|||
if (!vector)
|
||||
pSight->spr.cstat |= CSTAT_SPRITE_BLOCK_HITSCAN;
|
||||
|
||||
HitScan(pPlayer->actor, pPlayer->zWeapon, pPlayer->aim, CLIPMASK0 | CLIPMASK1, 0);
|
||||
HitScan(pPlayer->GetActor(), pPlayer->zWeapon, pPlayer->aim, CLIPMASK0 | CLIPMASK1, 0);
|
||||
|
||||
if (!vector)
|
||||
pSight->spr.cstat &= ~CSTAT_SPRITE_BLOCK_HITSCAN;
|
||||
|
@ -1304,19 +1304,19 @@ void nnExtProcessSuperSprites()
|
|||
|
||||
if (debrisactor->xspr.physAttr & kPhysDebrisTouch)
|
||||
{
|
||||
PLAYER* pPlayer = NULL;
|
||||
BloodPlayer* pPlayer = NULL;
|
||||
for (int a = connecthead; a != -1; a = connectpoint2[a])
|
||||
{
|
||||
pPlayer = &gPlayer[a];
|
||||
DBloodActor* pact = pPlayer->actor;
|
||||
pPlayer = getPlayer(a);
|
||||
DBloodActor* pact = pPlayer->GetActor();
|
||||
|
||||
if (pact && pact->hit.hit.type == kHitSprite && pact->hit.hit.actor() == debrisactor)
|
||||
{
|
||||
double nSpeed = pact->vel.XY().Length();
|
||||
nSpeed = max<double>(nSpeed - nSpeed * FixedToFloat<6>(mass), FixedToFloat(0x9000 - (mass << 3))); // very messy math (TM)...
|
||||
|
||||
debrisactor->vel += pPlayer->actor->spr.Angles.Yaw.ToVector() * nSpeed;
|
||||
debrisactor->hit.hit.setSprite(pPlayer->actor);
|
||||
debrisactor->vel += pPlayer->GetActor()->spr.Angles.Yaw.ToVector() * nSpeed;
|
||||
debrisactor->hit.hit.setSprite(pPlayer->GetActor());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1944,9 +1944,9 @@ void windGenStopWindOnSectors(DBloodActor* sourceactor)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void trPlayerCtrlStartScene(DBloodActor* sourceactor, PLAYER* pPlayer, bool force)
|
||||
void trPlayerCtrlStartScene(DBloodActor* sourceactor, BloodPlayer* pPlayer, bool force)
|
||||
{
|
||||
TRPLAYERCTRL* pCtrl = &gPlayerCtrl[pPlayer->nPlayer];
|
||||
TRPLAYERCTRL* pCtrl = &gPlayerCtrl[pPlayer->pnum];
|
||||
|
||||
if (pCtrl->qavScene.initiator != nullptr && !force) return;
|
||||
|
||||
|
@ -1986,9 +1986,9 @@ void trPlayerCtrlStartScene(DBloodActor* sourceactor, PLAYER* pPlayer, bool forc
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void trPlayerCtrlStopScene(PLAYER* pPlayer)
|
||||
void trPlayerCtrlStopScene(BloodPlayer* pPlayer)
|
||||
{
|
||||
TRPLAYERCTRL* pCtrl = &gPlayerCtrl[pPlayer->nPlayer];
|
||||
TRPLAYERCTRL* pCtrl = &gPlayerCtrl[pPlayer->pnum];
|
||||
auto initiator = pCtrl->qavScene.initiator;
|
||||
if (initiator->hasX())
|
||||
{
|
||||
|
@ -2002,7 +2002,7 @@ void trPlayerCtrlStopScene(PLAYER* pPlayer)
|
|||
pPlayer->sceneQav = -1;
|
||||
|
||||
// restore weapon
|
||||
if (pPlayer->actor->xspr.health > 0)
|
||||
if (pPlayer->GetActor()->xspr.health > 0)
|
||||
{
|
||||
int oldWeapon = (initiator->hasX() && initiator->xspr.dropMsg != 0) ? initiator->xspr.dropMsg : 1;
|
||||
pPlayer->newWeapon = pPlayer->curWeapon = oldWeapon;
|
||||
|
@ -2018,10 +2018,10 @@ void trPlayerCtrlStopScene(PLAYER* pPlayer)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void trPlayerCtrlLink(DBloodActor* sourceactor, PLAYER* pPlayer, bool checkCondition)
|
||||
void trPlayerCtrlLink(DBloodActor* sourceactor, BloodPlayer* pPlayer, bool checkCondition)
|
||||
{
|
||||
// save player's sprite index to let the tracking condition know it after savegame loading...
|
||||
auto actor = pPlayer->actor;
|
||||
auto actor = pPlayer->GetActor();
|
||||
sourceactor->prevmarker = actor;
|
||||
|
||||
actor->xspr.txID = sourceactor->xspr.txID;
|
||||
|
@ -2064,8 +2064,8 @@ void trPlayerCtrlLink(DBloodActor* sourceactor, PLAYER* pPlayer, bool checkCondi
|
|||
for (unsigned k = 0; k < pCond->objects.Size(); k++)
|
||||
{
|
||||
if (!pCond->objects[k].obj.isActor() || pCond->objects[k].obj.actor() != sourceactor) continue;
|
||||
pCond->objects[k].obj = EventObject(pPlayer->actor);
|
||||
pCond->objects[k].cmd = (uint8_t)pPlayer->actor->xspr.command;
|
||||
pCond->objects[k].obj = EventObject(pPlayer->GetActor());
|
||||
pCond->objects[k].cmd = (uint8_t)pPlayer->GetActor()->xspr.command;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -2078,7 +2078,7 @@ void trPlayerCtrlLink(DBloodActor* sourceactor, PLAYER* pPlayer, bool checkCondi
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void trPlayerCtrlSetRace(int value, PLAYER* pPlayer)
|
||||
void trPlayerCtrlSetRace(int value, BloodPlayer* pPlayer)
|
||||
{
|
||||
playerSetRace(pPlayer, value);
|
||||
switch (pPlayer->lifeMode)
|
||||
|
@ -2102,7 +2102,7 @@ void trPlayerCtrlSetRace(int value, PLAYER* pPlayer)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void trPlayerCtrlSetMoveSpeed(int value, PLAYER* pPlayer)
|
||||
void trPlayerCtrlSetMoveSpeed(int value, BloodPlayer* pPlayer)
|
||||
{
|
||||
int speed = ClipRange(value, 0, 500);
|
||||
for (int i = 0; i < kModeMax; i++)
|
||||
|
@ -2123,7 +2123,7 @@ void trPlayerCtrlSetMoveSpeed(int value, PLAYER* pPlayer)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void trPlayerCtrlSetJumpHeight(int value, PLAYER* pPlayer)
|
||||
void trPlayerCtrlSetJumpHeight(int value, BloodPlayer* pPlayer)
|
||||
{
|
||||
int jump = ClipRange(value, 0, 500);
|
||||
for (int i = 0; i < kModeMax; i++)
|
||||
|
@ -2140,7 +2140,7 @@ void trPlayerCtrlSetJumpHeight(int value, PLAYER* pPlayer)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void trPlayerCtrlSetScreenEffect(int value, int timeval, PLAYER* pPlayer)
|
||||
void trPlayerCtrlSetScreenEffect(int value, int timeval, BloodPlayer* pPlayer)
|
||||
{
|
||||
int eff = ClipLow(value, 0);
|
||||
int time = (eff > 0) ? timeval : 0;
|
||||
|
@ -2183,7 +2183,7 @@ void trPlayerCtrlSetScreenEffect(int value, int timeval, PLAYER* pPlayer)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void trPlayerCtrlSetLookAngle(int value, PLAYER* pPlayer)
|
||||
void trPlayerCtrlSetLookAngle(int value, BloodPlayer* pPlayer)
|
||||
{
|
||||
static constexpr double upAngle = 289;
|
||||
static constexpr double downAngle = -347;
|
||||
|
@ -2192,8 +2192,8 @@ void trPlayerCtrlSetLookAngle(int value, PLAYER* pPlayer)
|
|||
|
||||
if (const double adjustment = clamp(value * 0.125 * (value > 0 ? lookStepUp : lookStepDown), downAngle, upAngle))
|
||||
{
|
||||
setForcedSyncInput(pPlayer->nPlayer);
|
||||
pPlayer->actor->spr.Angles.Pitch = maphoriz(-100. * tan(adjustment * pi::pi() * (1. / 1024.)));
|
||||
setForcedSyncInput(pPlayer->pnum);
|
||||
pPlayer->GetActor()->spr.Angles.Pitch = maphoriz(-100. * tan(adjustment * pi::pi() * (1. / 1024.)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2203,7 +2203,7 @@ void trPlayerCtrlSetLookAngle(int value, PLAYER* pPlayer)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void trPlayerCtrlEraseStuff(int value, PLAYER* pPlayer)
|
||||
void trPlayerCtrlEraseStuff(int value, BloodPlayer* pPlayer)
|
||||
{
|
||||
|
||||
switch (value)
|
||||
|
@ -2255,7 +2255,7 @@ void trPlayerCtrlEraseStuff(int value, PLAYER* pPlayer)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void trPlayerCtrlGiveStuff(int data2, int weapon, int data4, PLAYER* pPlayer, TRPLAYERCTRL* pCtrl)
|
||||
void trPlayerCtrlGiveStuff(int data2, int weapon, int data4, BloodPlayer* pPlayer, TRPLAYERCTRL* pCtrl)
|
||||
{
|
||||
switch (data2)
|
||||
{
|
||||
|
@ -2325,7 +2325,7 @@ void trPlayerCtrlGiveStuff(int data2, int weapon, int data4, PLAYER* pPlayer, TR
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void trPlayerCtrlUsePackItem(int data2, int data3, int data4, PLAYER* pPlayer, int evCmd)
|
||||
void trPlayerCtrlUsePackItem(int data2, int data3, int data4, BloodPlayer* pPlayer, int evCmd)
|
||||
{
|
||||
unsigned int invItem = data2 - 1;
|
||||
switch (evCmd)
|
||||
|
@ -2361,7 +2361,7 @@ void trPlayerCtrlUsePackItem(int data2, int data3, int data4, PLAYER* pPlayer, i
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void trPlayerCtrlUsePowerup(DBloodActor* sourceactor, PLAYER* pPlayer, int evCmd)
|
||||
void trPlayerCtrlUsePowerup(DBloodActor* sourceactor, BloodPlayer* pPlayer, int evCmd)
|
||||
{
|
||||
|
||||
bool relative = (sourceactor->spr.flags & kModernTypeFlag1);
|
||||
|
@ -2895,7 +2895,7 @@ void usePropertiesChanger(DBloodActor* sourceactor, int objType, sectortype* pSe
|
|||
if (iactor->spr.statnum != kStatDude || !iactor->IsDudeActor() || !iactor->hasX())
|
||||
continue;
|
||||
|
||||
PLAYER* pPlayer = getPlayerById(iactor->GetType());
|
||||
auto pPlayer = getPlayerById(iactor->GetType());
|
||||
if (pXSector->Underwater)
|
||||
{
|
||||
if (aLower)
|
||||
|
@ -2912,7 +2912,7 @@ void usePropertiesChanger(DBloodActor* sourceactor, int objType, sectortype* pSe
|
|||
|
||||
pPlayer->nWaterPal = waterPal;
|
||||
pPlayer->posture = kPostureSwim;
|
||||
pPlayer->actor->xspr.burnTime = 0;
|
||||
pPlayer->GetActor()->xspr.burnTime = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -2921,7 +2921,7 @@ void usePropertiesChanger(DBloodActor* sourceactor, int objType, sectortype* pSe
|
|||
iactor->xspr.medium = kMediumNormal;
|
||||
if (pPlayer)
|
||||
{
|
||||
pPlayer->posture = (!(pPlayer->input.actions & SB_CROUCH)) ? kPostureStand : kPostureCrouch;
|
||||
pPlayer->posture = (!(pPlayer->cmd.ucmd.actions & SB_CROUCH)) ? kPostureStand : kPostureCrouch;
|
||||
pPlayer->nWaterPal = 0;
|
||||
}
|
||||
|
||||
|
@ -3142,7 +3142,7 @@ void useVelocityChanger(DBloodActor* actor, sectortype* sect, DBloodActor* initi
|
|||
|
||||
void useTeleportTarget(DBloodActor* sourceactor, DBloodActor* actor)
|
||||
{
|
||||
PLAYER* pPlayer = getPlayerById(actor->GetType());
|
||||
auto pPlayer = getPlayerById(actor->GetType());
|
||||
XSECTOR* pXSector = (sourceactor->sector()->hasX()) ? &sourceactor->sector()->xs() : nullptr;
|
||||
bool isDude = (!pPlayer && actor->IsDudeActor());
|
||||
|
||||
|
@ -3201,7 +3201,7 @@ void useTeleportTarget(DBloodActor* sourceactor, DBloodActor* actor)
|
|||
|
||||
pPlayer->nWaterPal = waterPal;
|
||||
pPlayer->posture = kPostureSwim;
|
||||
pPlayer->actor->xspr.burnTime = 0;
|
||||
pPlayer->GetActor()->xspr.burnTime = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -3209,7 +3209,7 @@ void useTeleportTarget(DBloodActor* sourceactor, DBloodActor* actor)
|
|||
actor->xspr.medium = kMediumNormal;
|
||||
if (pPlayer)
|
||||
{
|
||||
pPlayer->posture = (!(pPlayer->input.actions & SB_CROUCH)) ? kPostureStand : kPostureCrouch;
|
||||
pPlayer->posture = (!(pPlayer->cmd.ucmd.actions & SB_CROUCH)) ? kPostureStand : kPostureCrouch;
|
||||
pPlayer->nWaterPal = 0;
|
||||
}
|
||||
|
||||
|
@ -3563,7 +3563,7 @@ void damageSprites(DBloodActor* sourceactor, DBloodActor* actor)
|
|||
|
||||
int health = 0;
|
||||
|
||||
PLAYER* pPlayer = getPlayerById(actor->GetType());
|
||||
auto pPlayer = getPlayerById(actor->GetType());
|
||||
int dmgType = (sourceactor->xspr.data2 >= kDmgFall) ? ClipHigh(sourceactor->xspr.data2, kDmgElectric) : -1;
|
||||
int dmg = actor->xspr.health << 4;
|
||||
int armor[3];
|
||||
|
@ -4308,7 +4308,7 @@ bool condCheckWall(DBloodActor* aCond, int cmpOp, bool PUSH)
|
|||
bool condCheckPlayer(DBloodActor* aCond, int cmpOp, bool PUSH)
|
||||
{
|
||||
int var = -1;
|
||||
PLAYER* pPlayer = NULL;
|
||||
BloodPlayer* pPlayer = NULL;
|
||||
int cond = aCond->xspr.data1 - kCondPlayerBase;
|
||||
int arg1 = aCond->xspr.data2;
|
||||
int arg2 = aCond->xspr.data3;
|
||||
|
@ -4322,8 +4322,8 @@ bool condCheckPlayer(DBloodActor* aCond, int cmpOp, bool PUSH)
|
|||
auto objActor = eob.actor();
|
||||
for (int i = 0; i < kMaxPlayers; i++)
|
||||
{
|
||||
if (objActor != gPlayer[i].actor) continue;
|
||||
pPlayer = &gPlayer[i];
|
||||
if (objActor != getPlayer(i)->GetActor()) continue;
|
||||
pPlayer = getPlayer(i);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -4335,9 +4335,9 @@ bool condCheckPlayer(DBloodActor* aCond, int cmpOp, bool PUSH)
|
|||
|
||||
switch (cond) {
|
||||
case 0: // check if this player is connected
|
||||
if (!condCmp(pPlayer->nPlayer + 1, arg1, arg2, cmpOp) || pPlayer->actor == nullptr) return false;
|
||||
else if (PUSH) condPush(aCond, pPlayer->actor);
|
||||
return (pPlayer->nPlayer >= 0);
|
||||
if (!condCmp(pPlayer->pnum + 1, arg1, arg2, cmpOp) || pPlayer->GetActor() == nullptr) return false;
|
||||
else if (PUSH) condPush(aCond, pPlayer->GetActor());
|
||||
return (pPlayer->pnum >= 0);
|
||||
case 1: return condCmp((gGameOptions.nGameType != 3) ? 0 : pPlayer->teamId + 1, arg1, arg2, cmpOp); // compare team
|
||||
case 2: return (arg1 > 0 && arg1 < 8 && pPlayer->hasKey[arg1 - 1]);
|
||||
case 3: return (arg1 > 0 && arg1 < 15 && pPlayer->hasWeapon[arg1 - 1]);
|
||||
|
@ -4358,15 +4358,15 @@ bool condCheckPlayer(DBloodActor* aCond, int cmpOp, bool PUSH)
|
|||
return true;
|
||||
case 10: // check keys pressed
|
||||
switch (arg1) {
|
||||
case 1: return (pPlayer->input.fvel > 0); // forward
|
||||
case 2: return (pPlayer->input.fvel < 0); // backward
|
||||
case 3: return (pPlayer->input.svel < 0); // left
|
||||
case 4: return (pPlayer->input.svel > 0); // right
|
||||
case 5: return !!(pPlayer->input.actions & SB_JUMP); // jump
|
||||
case 6: return !!(pPlayer->input.actions & SB_CROUCH); // crouch
|
||||
case 7: return !!(pPlayer->input.actions & SB_FIRE); // normal fire weapon
|
||||
case 8: return !!(pPlayer->input.actions & SB_ALTFIRE); // alt fire weapon
|
||||
case 9: return !!(pPlayer->input.actions & SB_OPEN); // use
|
||||
case 1: return (pPlayer->cmd.ucmd.fvel > 0); // forward
|
||||
case 2: return (pPlayer->cmd.ucmd.fvel < 0); // backward
|
||||
case 3: return (pPlayer->cmd.ucmd.svel < 0); // left
|
||||
case 4: return (pPlayer->cmd.ucmd.svel > 0); // right
|
||||
case 5: return !!(pPlayer->cmd.ucmd.actions & SB_JUMP); // jump
|
||||
case 6: return !!(pPlayer->cmd.ucmd.actions & SB_CROUCH); // crouch
|
||||
case 7: return !!(pPlayer->cmd.ucmd.actions & SB_FIRE); // normal fire weapon
|
||||
case 8: return !!(pPlayer->cmd.ucmd.actions & SB_ALTFIRE); // alt fire weapon
|
||||
case 9: return !!(pPlayer->cmd.ucmd.actions & SB_OPEN); // use
|
||||
default:
|
||||
condError(aCond, "Specify a correct key!");
|
||||
break;
|
||||
|
@ -4378,8 +4378,8 @@ bool condCheckPlayer(DBloodActor* aCond, int cmpOp, bool PUSH)
|
|||
case 14: return condCmp(pPlayer->posture + 1, arg1, arg2, cmpOp);
|
||||
case 46: return condCmp(pPlayer->sceneQav, arg1, arg2, cmpOp);
|
||||
case 47: return (pPlayer->godMode || powerupCheck(pPlayer, kPwUpDeathMask));
|
||||
case 48: return isShrinked(pPlayer->actor);
|
||||
case 49: return isGrown(pPlayer->actor);
|
||||
case 48: return isShrinked(pPlayer->GetActor());
|
||||
case 49: return isGrown(pPlayer->GetActor());
|
||||
}
|
||||
|
||||
condError(aCond, "Unexpected condition #%d!", cond);
|
||||
|
@ -4554,7 +4554,7 @@ bool condCheckDude(DBloodActor* aCond, int cmpOp, bool PUSH)
|
|||
|
||||
bool condCheckSprite(DBloodActor* aCond, int cmpOp, bool PUSH)
|
||||
{
|
||||
int var = -1, var2 = -1, var3 = -1; PLAYER* pPlayer = NULL; bool retn = false;
|
||||
int var = -1, var2 = -1, var3 = -1; BloodPlayer* pPlayer = NULL; bool retn = false;
|
||||
int cond = aCond->xspr.data1 - kCondSpriteBase; int arg1 = aCond->xspr.data2;
|
||||
int arg2 = aCond->xspr.data3; int arg3 = aCond->xspr.data4;
|
||||
|
||||
|
@ -5731,9 +5731,9 @@ bool modernTypeOperateSprite(DBloodActor* actor, EVENT& event)
|
|||
else if (actor->xspr.data1 >= 666 && actor->xspr.data1 < 669) useSpriteDamager(actor, -1, nullptr, nullptr);
|
||||
else
|
||||
{
|
||||
PLAYER* pPlayer = getPlayerById(actor->xspr.data1);
|
||||
BloodPlayer* pPlayer = getPlayerById(actor->xspr.data1);
|
||||
if (pPlayer != NULL)
|
||||
useSpriteDamager(actor, OBJ_SPRITE, 0, pPlayer->actor);
|
||||
useSpriteDamager(actor, OBJ_SPRITE, 0, pPlayer->GetActor());
|
||||
}
|
||||
|
||||
if (actor->xspr.busyTime > 0)
|
||||
|
@ -5750,9 +5750,9 @@ bool modernTypeOperateSprite(DBloodActor* actor, EVENT& event)
|
|||
case kMarkerWarpDest:
|
||||
if (actor->xspr.txID <= 0)
|
||||
{
|
||||
PLAYER* pPlayer = getPlayerById(actor->xspr.data1);
|
||||
BloodPlayer* pPlayer = getPlayerById(actor->xspr.data1);
|
||||
if (pPlayer != NULL && SetSpriteState(actor, actor->xspr.state ^ 1, initiator) == 1)
|
||||
useTeleportTarget(actor, pPlayer->actor);
|
||||
useTeleportTarget(actor, pPlayer->GetActor());
|
||||
return true;
|
||||
}
|
||||
[[fallthrough]];
|
||||
|
@ -5985,7 +5985,7 @@ bool modernTypeOperateSprite(DBloodActor* actor, EVENT& event)
|
|||
return true;
|
||||
case kModernPlayerControl:
|
||||
{ // WIP
|
||||
PLAYER* pPlayer = NULL;
|
||||
BloodPlayer* pPlayer = NULL;
|
||||
int cmd = (event.cmd >= kCmdNumberic) ? event.cmd : actor->xspr.command;
|
||||
|
||||
|
||||
|
@ -5999,16 +5999,16 @@ bool modernTypeOperateSprite(DBloodActor* actor, EVENT& event)
|
|||
|| ((cmd < 67 || cmd > 68) && !modernTypeSetSpriteState(actor, actor->xspr.state ^ 1, initiator)))
|
||||
return true;
|
||||
|
||||
TRPLAYERCTRL* pCtrl = &gPlayerCtrl[pPlayer->nPlayer];
|
||||
TRPLAYERCTRL* pCtrl = &gPlayerCtrl[pPlayer->pnum];
|
||||
|
||||
/// !!! COMMANDS OF THE CURRENT SPRITE, NOT OF THE EVENT !!! ///
|
||||
if ((cmd -= kCmdNumberic) < 0) return true;
|
||||
else if (pPlayer->actor->xspr.health <= 0)
|
||||
else if (pPlayer->GetActor()->xspr.health <= 0)
|
||||
{
|
||||
|
||||
switch (cmd) {
|
||||
case 36:
|
||||
actHealDude(pPlayer->actor, ((actor->xspr.data2 > 0) ? ClipHigh(actor->xspr.data2, 200) : getDudeInfo(pPlayer->actor)->startHealth), 200);
|
||||
actHealDude(pPlayer->GetActor(), ((actor->xspr.data2 > 0) ? ClipHigh(actor->xspr.data2, 200) : getDudeInfo(pPlayer->GetActor())->startHealth), 200);
|
||||
pPlayer->curWeapon = kWeapPitchFork;
|
||||
break;
|
||||
}
|
||||
|
@ -6064,13 +6064,13 @@ bool modernTypeOperateSprite(DBloodActor* actor, EVENT& event)
|
|||
if (actor->xspr.data4 != 0) break;
|
||||
else if (actor->spr.flags & kModernTypeFlag1)
|
||||
{
|
||||
setForcedSyncInput(pPlayer->nPlayer);
|
||||
pPlayer->actor->spr.Angles.Yaw = actor->spr.Angles.Yaw;
|
||||
setForcedSyncInput(pPlayer->pnum);
|
||||
pPlayer->GetActor()->spr.Angles.Yaw = actor->spr.Angles.Yaw;
|
||||
}
|
||||
else if (valueIsBetween(actor->xspr.data2, -kAng360, kAng360))
|
||||
{
|
||||
setForcedSyncInput(pPlayer->nPlayer);
|
||||
pPlayer->actor->spr.Angles.Yaw = mapangle(actor->xspr.data2);
|
||||
setForcedSyncInput(pPlayer->pnum);
|
||||
pPlayer->GetActor()->spr.Angles.Yaw = mapangle(actor->xspr.data2);
|
||||
}
|
||||
break;
|
||||
case 10: // 74 (de)activate powerup
|
||||
|
@ -7256,7 +7256,7 @@ QAV* playerQavSceneLoad(int qavId)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void playerQavSceneProcess(PLAYER* pPlayer, QAVSCENE* pQavScene)
|
||||
void playerQavSceneProcess(BloodPlayer* pPlayer, QAVSCENE* pQavScene)
|
||||
{
|
||||
auto initiator = pQavScene->initiator;
|
||||
if (initiator->hasX())
|
||||
|
@ -7280,7 +7280,7 @@ void playerQavSceneProcess(PLAYER* pPlayer, QAVSCENE* pQavScene)
|
|||
}
|
||||
|
||||
}
|
||||
nnExtTriggerObject(rxBucket[i], initiator->xspr.command, pPlayer->actor);
|
||||
nnExtTriggerObject(rxBucket[i], initiator->xspr.command, pPlayer->GetActor());
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -7307,11 +7307,11 @@ void playerQavSceneProcess(PLAYER* pPlayer, QAVSCENE* pQavScene)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void playerQavSceneDraw(PLAYER* pPlayer, int shade, double xpos, double ypos, int palnum, DAngle angle)
|
||||
void playerQavSceneDraw(BloodPlayer* pPlayer, int shade, double xpos, double ypos, int palnum, DAngle angle)
|
||||
{
|
||||
if (pPlayer == NULL || pPlayer->sceneQav == -1) return;
|
||||
|
||||
QAVSCENE* pQavScene = &gPlayerCtrl[pPlayer->nPlayer].qavScene;
|
||||
QAVSCENE* pQavScene = &gPlayerCtrl[pPlayer->pnum].qavScene;
|
||||
auto actor = pQavScene->initiator;
|
||||
|
||||
if (pQavScene->qavResrc != NULL)
|
||||
|
@ -7351,11 +7351,11 @@ void playerQavSceneDraw(PLAYER* pPlayer, int shade, double xpos, double ypos, in
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void playerQavScenePlay(PLAYER* pPlayer)
|
||||
void playerQavScenePlay(BloodPlayer* pPlayer)
|
||||
{
|
||||
if (pPlayer == NULL) return;
|
||||
|
||||
QAVSCENE* pQavScene = &gPlayerCtrl[pPlayer->nPlayer].qavScene;
|
||||
QAVSCENE* pQavScene = &gPlayerCtrl[pPlayer->pnum].qavScene;
|
||||
if (pPlayer->sceneQav == -1 && pQavScene->initiator != nullptr)
|
||||
pPlayer->sceneQav = pQavScene->initiator->xspr.data2;
|
||||
|
||||
|
@ -7367,36 +7367,36 @@ void playerQavScenePlay(PLAYER* pPlayer)
|
|||
}
|
||||
}
|
||||
|
||||
void playerQavSceneReset(PLAYER* pPlayer)
|
||||
void playerQavSceneReset(BloodPlayer* pPlayer)
|
||||
{
|
||||
QAVSCENE* pQavScene = &gPlayerCtrl[pPlayer->nPlayer].qavScene;
|
||||
QAVSCENE* pQavScene = &gPlayerCtrl[pPlayer->pnum].qavScene;
|
||||
pQavScene->initiator = nullptr;
|
||||
pQavScene->dummy = pPlayer->sceneQav = -1;
|
||||
pQavScene->qavResrc = NULL;
|
||||
}
|
||||
|
||||
bool playerSizeShrink(PLAYER* pPlayer, int divider)
|
||||
bool playerSizeShrink(BloodPlayer* pPlayer, int divider)
|
||||
{
|
||||
pPlayer->actor->xspr.scale = 256 / divider;
|
||||
pPlayer->GetActor()->xspr.scale = 256 / divider;
|
||||
playerSetRace(pPlayer, kModeHumanShrink);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool playerSizeGrow(PLAYER* pPlayer, int multiplier)
|
||||
bool playerSizeGrow(BloodPlayer* pPlayer, int multiplier)
|
||||
{
|
||||
pPlayer->actor->xspr.scale = 256 * multiplier;
|
||||
pPlayer->GetActor()->xspr.scale = 256 * multiplier;
|
||||
playerSetRace(pPlayer, kModeHumanGrown);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool playerSizeReset(PLAYER* pPlayer)
|
||||
bool playerSizeReset(BloodPlayer* pPlayer)
|
||||
{
|
||||
playerSetRace(pPlayer, kModeHuman);
|
||||
pPlayer->actor->xspr.scale = 0;
|
||||
pPlayer->GetActor()->xspr.scale = 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
void playerDeactivateShrooms(PLAYER* pPlayer)
|
||||
void playerDeactivateShrooms(BloodPlayer* pPlayer)
|
||||
{
|
||||
powerupDeactivate(pPlayer, kPwUpGrowShroom);
|
||||
pPlayer->pwUpTime[kPwUpGrowShroom] = 0;
|
||||
|
@ -7411,7 +7411,7 @@ void playerDeactivateShrooms(PLAYER* pPlayer)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
PLAYER* getPlayerById(int id)
|
||||
BloodPlayer* getPlayerById(int id)
|
||||
{
|
||||
// relative to connected players
|
||||
if (id >= 1 && id <= kMaxPlayers)
|
||||
|
@ -7419,8 +7419,8 @@ PLAYER* getPlayerById(int id)
|
|||
id = id - 1;
|
||||
for (int i = connecthead; i >= 0; i = connectpoint2[i])
|
||||
{
|
||||
if (id == gPlayer[i].nPlayer)
|
||||
return &gPlayer[i];
|
||||
if (id == getPlayer(i)->pnum)
|
||||
return getPlayer(i);
|
||||
}
|
||||
|
||||
// absolute sprite type
|
||||
|
@ -7429,8 +7429,8 @@ PLAYER* getPlayerById(int id)
|
|||
{
|
||||
for (int i = connecthead; i >= 0; i = connectpoint2[i])
|
||||
{
|
||||
if (id == gPlayer[i].actor->GetType())
|
||||
return &gPlayer[i];
|
||||
if (id == getPlayer(i)->GetActor()->GetType())
|
||||
return getPlayer(i);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8385,7 +8385,7 @@ DBloodActor* aiPatrolSearchTargets(DBloodActor* actor)
|
|||
PATROL_FOUND_SOUNDS patrolBonkles[kMaxPatrolFoundSounds];
|
||||
|
||||
assert(actor->IsDudeActor());
|
||||
DUDEINFO* pDudeInfo = getDudeInfo(actor); PLAYER* pPlayer = NULL;
|
||||
DUDEINFO* pDudeInfo = getDudeInfo(actor); BloodPlayer* pPlayer = NULL;
|
||||
|
||||
for (int i = 0; i < kMaxPatrolFoundSounds; i++)
|
||||
{
|
||||
|
@ -8404,10 +8404,10 @@ DBloodActor* aiPatrolSearchTargets(DBloodActor* actor)
|
|||
// search for player targets
|
||||
for (i = connecthead; i != -1; i = connectpoint2[i])
|
||||
{
|
||||
pPlayer = &gPlayer[i];
|
||||
if (!xsprIsFine(pPlayer->actor)) continue;
|
||||
pPlayer = getPlayer(i);
|
||||
if (!xsprIsFine(pPlayer->GetActor())) continue;
|
||||
|
||||
auto plActor = pPlayer->actor;
|
||||
auto plActor = pPlayer->GetActor();
|
||||
if (plActor->xspr.health <= 0)
|
||||
continue;
|
||||
|
||||
|
@ -8427,7 +8427,7 @@ DBloodActor* aiPatrolSearchTargets(DBloodActor* actor)
|
|||
{
|
||||
double scratch;
|
||||
double eyeAboveZ = (pDudeInfo->eyeHeight * actor->spr.scale.Y);
|
||||
if (nDistf < seeDistf / 8) GetActorExtents(pPlayer->actor, &pos.Z, &scratch); //use ztop of the target sprite
|
||||
if (nDistf < seeDistf / 8) GetActorExtents(pPlayer->GetActor(), &pos.Z, &scratch); //use ztop of the target sprite
|
||||
if (!cansee(pos, plActor->sector(), actor->spr.pos - eyeAboveZ, actor->sector()))
|
||||
continue;
|
||||
}
|
||||
|
@ -8435,11 +8435,11 @@ DBloodActor* aiPatrolSearchTargets(DBloodActor* actor)
|
|||
continue;
|
||||
|
||||
bool invisible = (powerupCheck(pPlayer, kPwUpShadowCloak) > 0);
|
||||
if (spritesTouching(actor, pPlayer->actor) || spritesTouching(pPlayer->actor, actor))
|
||||
if (spritesTouching(actor, pPlayer->GetActor()) || spritesTouching(pPlayer->GetActor(), actor))
|
||||
{
|
||||
DPrintf(DMSG_SPAMMY, "Patrol dude #%d spot the Player #%d via touch.", actor->GetIndex(), pPlayer->nPlayer + 1);
|
||||
DPrintf(DMSG_SPAMMY, "Patrol dude #%d spot the Player #%d via touch.", actor->GetIndex(), pPlayer->pnum + 1);
|
||||
if (invisible) pPlayer->pwUpTime[kPwUpShadowCloak] = 0;
|
||||
newtarget = pPlayer->actor;
|
||||
newtarget = pPlayer->GetActor();
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -8457,7 +8457,7 @@ DBloodActor* aiPatrolSearchTargets(DBloodActor* actor)
|
|||
sndv = emitterActor->spr.pos.XY();
|
||||
|
||||
// sound attached to the sprite
|
||||
if (pPlayer->actor != emitterActor && emitterActor->GetOwner() != actor)
|
||||
if (pPlayer->GetActor() != emitterActor && emitterActor->GetOwner() != actor)
|
||||
{
|
||||
|
||||
if (!emitterActor->insector()) return false;
|
||||
|
@ -8492,7 +8492,7 @@ DBloodActor* aiPatrolSearchTargets(DBloodActor* actor)
|
|||
BloodSectIterator it(searchsect);
|
||||
while (auto act = it.Next())
|
||||
{
|
||||
if (act->GetOwner() == pPlayer->actor)
|
||||
if (act->GetOwner() == pPlayer->GetActor())
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
|
@ -8556,7 +8556,7 @@ DBloodActor* aiPatrolSearchTargets(DBloodActor* actor)
|
|||
|
||||
if (hearDistf)
|
||||
{
|
||||
DBloodActor* act = pPlayer->actor;
|
||||
DBloodActor* act = pPlayer->GetActor();
|
||||
itCanHear = (!deaf && (nDistf < hearDistf || hearChance > 0));
|
||||
if (act && itCanHear && nDistf < feelDistf && (!act->vel.isZero()))
|
||||
hearChance += (int)max(((feelDistf - nDistf) + act->vel.Sum() * 64, 0.) / 256, 0.);
|
||||
|
@ -8652,7 +8652,7 @@ DBloodActor* aiPatrolSearchTargets(DBloodActor* actor)
|
|||
|
||||
// trigger this region if target gonna be spot
|
||||
if (steal->xspr.txID && actor->xspr.data3 + hearChance + seeChance >= kMaxPatrolSpotValue)
|
||||
trTriggerSprite(steal, kCmdToggle, pPlayer->actor);
|
||||
trTriggerSprite(steal, kCmdToggle, pPlayer->GetActor());
|
||||
|
||||
// continue search another stealth regions to affect chances
|
||||
}
|
||||
|
@ -8660,11 +8660,11 @@ DBloodActor* aiPatrolSearchTargets(DBloodActor* actor)
|
|||
|
||||
if (itCanHear && hearChance > 0)
|
||||
{
|
||||
DPrintf(DMSG_SPAMMY, "Patrol dude #%d hearing the Player #%d.", actor->GetIndex(), pPlayer->nPlayer + 1);
|
||||
DPrintf(DMSG_SPAMMY, "Patrol dude #%d hearing the Player #%d.", actor->GetIndex(), pPlayer->pnum + 1);
|
||||
actor->xspr.data3 = ClipRange(actor->xspr.data3 + hearChance, -kMaxPatrolSpotValue, kMaxPatrolSpotValue);
|
||||
if (!stealth)
|
||||
{
|
||||
newtarget = pPlayer->actor;
|
||||
newtarget = pPlayer->GetActor();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -8676,7 +8676,7 @@ DBloodActor* aiPatrolSearchTargets(DBloodActor* actor)
|
|||
actor->xspr.data3 = ClipRange(actor->xspr.data3 + seeChance, -kMaxPatrolSpotValue, kMaxPatrolSpotValue);
|
||||
if (!stealth)
|
||||
{
|
||||
newtarget = pPlayer->actor;
|
||||
newtarget = pPlayer->GetActor();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -8686,7 +8686,7 @@ DBloodActor* aiPatrolSearchTargets(DBloodActor* actor)
|
|||
|
||||
if ((actor->xspr.data3 = ClipRange(actor->xspr.data3, 0, kMaxPatrolSpotValue)) == kMaxPatrolSpotValue)
|
||||
{
|
||||
newtarget = pPlayer->actor;
|
||||
newtarget = pPlayer->GetActor();
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -9289,9 +9289,9 @@ void changeSpriteAngle(DBloodActor* pSpr, DAngle nAng)
|
|||
pSpr->spr.Angles.Yaw = nAng;
|
||||
else
|
||||
{
|
||||
PLAYER* pPlayer = getPlayerById(pSpr->GetType());
|
||||
auto pPlayer = getPlayerById(pSpr->GetType());
|
||||
if (pPlayer)
|
||||
pPlayer->actor->spr.Angles.Yaw = nAng;
|
||||
pPlayer->GetActor()->spr.Angles.Yaw = nAng;
|
||||
else
|
||||
{
|
||||
pSpr->spr.Angles.Yaw = nAng;
|
||||
|
@ -9328,8 +9328,8 @@ void killEffectGenCallbacks(DBloodActor* actor)
|
|||
case kChannelAllPlayers: // player sprites
|
||||
for (i = connecthead; i >= 0; i = connectpoint2[i])
|
||||
{
|
||||
if (gPlayer[i].actor != nullptr)
|
||||
dokillEffectGenCallbacks(gPlayer[i].actor);
|
||||
if (getPlayer(i)->GetActor() != nullptr)
|
||||
dokillEffectGenCallbacks(getPlayer(i)->GetActor());
|
||||
}
|
||||
break;
|
||||
case kChannelEventCauser: // worst case...
|
||||
|
@ -9352,9 +9352,9 @@ void killEffectGenCallbacks(DBloodActor* actor)
|
|||
else if (actor->xspr.txID >= kChannelPlayer0 && actor->xspr.txID < kChannelPlayer0 + kMaxPlayers)
|
||||
{
|
||||
// player sprites
|
||||
PLAYER* pPlayer = getPlayerById(actor->xspr.txID - kChannelPlayer0);
|
||||
if (pPlayer && pPlayer->actor != nullptr)
|
||||
dokillEffectGenCallbacks(pPlayer->actor);
|
||||
BloodPlayer* pPlayer = getPlayerById(actor->xspr.txID - kChannelPlayer0);
|
||||
if (pPlayer && pPlayer->GetActor() != nullptr)
|
||||
dokillEffectGenCallbacks(pPlayer->GetActor());
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -331,8 +331,8 @@ void useCustomDudeSpawn(DBloodActor* pXSource, DBloodActor* pSprite);
|
|||
void useVelocityChanger(DBloodActor* pXSource, sectortype* sect, DBloodActor* causerID, DBloodActor* pSprite);
|
||||
void seqTxSendCmdAll(DBloodActor* pXSource, DBloodActor* nIndex, COMMAND_ID cmd, bool modernSend, DBloodActor* initiator);
|
||||
// ------------------------------------------------------------------------- //
|
||||
void trPlayerCtrlLink(DBloodActor* pXSource, PLAYER* pPlayer, bool checkCondition);
|
||||
void trPlayerCtrlStopScene(PLAYER* pPlayer);
|
||||
void trPlayerCtrlLink(DBloodActor* pXSource, BloodPlayer* pPlayer, bool checkCondition);
|
||||
void trPlayerCtrlStopScene(BloodPlayer* pPlayer);
|
||||
// ------------------------------------------------------------------------- //
|
||||
void modernTypeTrigger(int type, sectortype* sect, walltype* wal, DBloodActor* actor, EVENT& event);
|
||||
bool modernTypeOperateSector(sectortype* pSector, const EVENT& event);
|
||||
|
@ -340,22 +340,22 @@ bool modernTypeOperateSprite(DBloodActor*, EVENT& event);
|
|||
bool modernTypeOperateWall(walltype* pWall, const EVENT& event);
|
||||
void modernTypeSendCommand(DBloodActor* nSprite, int channel, COMMAND_ID command, DBloodActor* initiator);
|
||||
// ------------------------------------------------------------------------- //
|
||||
bool playerSizeShrink(PLAYER* pPlayer, int divider);
|
||||
bool playerSizeGrow(PLAYER* pPlayer, int multiplier);
|
||||
bool playerSizeReset(PLAYER* pPlayer);
|
||||
void playerDeactivateShrooms(PLAYER* pPlayer);
|
||||
bool playerSizeShrink(BloodPlayer* pPlayer, int divider);
|
||||
bool playerSizeGrow(BloodPlayer* pPlayer, int multiplier);
|
||||
bool playerSizeReset(BloodPlayer* pPlayer);
|
||||
void playerDeactivateShrooms(BloodPlayer* pPlayer);
|
||||
// ------------------------------------------------------------------------- //
|
||||
QAV* playerQavSceneLoad(int qavId);
|
||||
void playerQavSceneProcess(PLAYER* pPlayer, QAVSCENE* pQavScene);
|
||||
void playerQavScenePlay(PLAYER* pPlayer);
|
||||
void playerQavSceneDraw(PLAYER* pPlayer, int shade, double xpos, double ypos, int palnum, DAngle angle);
|
||||
void playerQavSceneReset(PLAYER* pPlayer);
|
||||
void playerQavSceneProcess(BloodPlayer* pPlayer, QAVSCENE* pQavScene);
|
||||
void playerQavScenePlay(BloodPlayer* pPlayer);
|
||||
void playerQavSceneDraw(BloodPlayer* pPlayer, int shade, double xpos, double ypos, int palnum, DAngle angle);
|
||||
void playerQavSceneReset(BloodPlayer* pPlayer);
|
||||
// ------------------------------------------------------------------------- //
|
||||
void callbackUniMissileBurst(DBloodActor* actor, sectortype* nSprite);
|
||||
void callbackMakeMissileBlocking(DBloodActor* actor, sectortype* nSprite);
|
||||
void callbackGenDudeUpdate(DBloodActor* actor, sectortype* nSprite);
|
||||
// ------------------------------------------------------------------------- //
|
||||
PLAYER* getPlayerById(int id);
|
||||
BloodPlayer* getPlayerById(int id);
|
||||
bool isGrown(DBloodActor* pSprite);
|
||||
bool isShrinked(DBloodActor* pSprite);
|
||||
bool IsBurningDude(DBloodActor* pSprite);
|
||||
|
|
|
@ -63,7 +63,7 @@ void GameInterface::SwitchCoopView()
|
|||
gViewIndex = connectpoint2[gViewIndex];
|
||||
if (gViewIndex == -1)
|
||||
gViewIndex = connecthead;
|
||||
if (oldViewIndex == gViewIndex || gPlayer[myconnectindex].teamId == gPlayer[gViewIndex].teamId)
|
||||
if (oldViewIndex == gViewIndex || getPlayer(myconnectindex)->teamId == getPlayer(gViewIndex)->teamId)
|
||||
break;
|
||||
} while (oldViewIndex != gViewIndex);
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -29,7 +29,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|||
#include "dude.h"
|
||||
#include "levels.h"
|
||||
#include "qav.h"
|
||||
#include "gameinput.h"
|
||||
#include "coreplayer.h"
|
||||
|
||||
BEGIN_BLD_NS
|
||||
|
||||
|
@ -78,103 +78,7 @@ struct POSTURE
|
|||
|
||||
extern POSTURE gPostureDefaults[kModeMax][kPostureMax];
|
||||
|
||||
struct PLAYER
|
||||
{
|
||||
DBloodActor* actor;
|
||||
DUDEINFO* pDudeInfo;
|
||||
InputPacket input;
|
||||
PlayerAngles Angles;
|
||||
uint8_t newWeapon;
|
||||
int weaponQav;
|
||||
int qavCallback;
|
||||
bool isRunning;
|
||||
int posture; // stand, crouch, swim
|
||||
int sceneQav; // by NoOne: used to keep qav id
|
||||
double bobPhase;
|
||||
int bobAmp;
|
||||
double bobHeight;
|
||||
double bobWidth;
|
||||
double obobHeight;
|
||||
double obobWidth;
|
||||
int swayAmp;
|
||||
double swayHeight;
|
||||
double swayWidth;
|
||||
double oswayHeight;
|
||||
double oswayWidth;
|
||||
int nPlayer; // Connect id
|
||||
int lifeMode;
|
||||
double zView;
|
||||
double ozView;
|
||||
double zViewVel;
|
||||
double zWeapon;
|
||||
double ozWeapon;
|
||||
double zWeaponVel;
|
||||
double slope;
|
||||
bool isUnderwater;
|
||||
bool hasKey[8];
|
||||
int8_t hasFlag;
|
||||
TObjPtr<DBloodActor*> ctfFlagState[2];
|
||||
int damageControl[7];
|
||||
int8_t curWeapon;
|
||||
int8_t nextWeapon;
|
||||
int weaponTimer;
|
||||
int weaponState;
|
||||
int weaponAmmo; //rename
|
||||
bool hasWeapon[kWeapMax];
|
||||
int weaponMode[kWeapMax];
|
||||
int weaponOrder[2][kWeapMax];
|
||||
//int at149[14];
|
||||
int ammoCount[12];
|
||||
bool qavLoop;
|
||||
int qavLastTick;
|
||||
int qavTimer;
|
||||
int fuseTime;
|
||||
int throwTime;
|
||||
double throwPower;
|
||||
DVector3 aim; // world
|
||||
DVector3 relAim; // relative
|
||||
TObjPtr<DBloodActor*> aimTarget; // aim target sprite
|
||||
int aimTargetsCount;
|
||||
TObjPtr<DBloodActor*> aimTargets[16];
|
||||
int deathTime;
|
||||
int pwUpTime[kMaxPowerUps];
|
||||
int fragCount;
|
||||
int fragInfo[8];
|
||||
int teamId;
|
||||
TObjPtr<DBloodActor*> fragger;
|
||||
int underwaterTime;
|
||||
int bubbleTime;
|
||||
int restTime;
|
||||
int kickPower;
|
||||
int laughCount;
|
||||
bool godMode;
|
||||
bool fallScream;
|
||||
bool cantJump;
|
||||
int packItemTime; // pack timer
|
||||
int packItemId; // pack id 1: diving suit, 2: crystal ball, 3: beast vision 4: jump boots
|
||||
PACKINFO packSlots[5]; // at325 [1]: diving suit, [2]: crystal ball, [3]: beast vision [4]: jump boots
|
||||
int armor[3]; // armor
|
||||
//int at342;
|
||||
//int at346;
|
||||
TObjPtr<DBloodActor*> voodooTarget;
|
||||
int voodooTargets; // --> useless
|
||||
int voodooVar1; // --> useless
|
||||
int vodooVar2; // --> useless
|
||||
int flickerEffect;
|
||||
int tiltEffect;
|
||||
int visibility;
|
||||
int painEffect;
|
||||
int blindEffect;
|
||||
int chokeEffect;
|
||||
int handTime;
|
||||
bool hand; // if true, there is hand start choking the player
|
||||
int pickupEffect;
|
||||
bool flashEffect; // if true, reduce pPlayer->visibility counter
|
||||
int quakeEffect;
|
||||
int player_par;
|
||||
int nWaterPal;
|
||||
POSTURE pPosture[kModeMax][kPostureMax];
|
||||
};
|
||||
struct BloodPlayer;
|
||||
|
||||
struct AMMOINFO
|
||||
{
|
||||
|
@ -191,9 +95,7 @@ struct POWERUPINFO
|
|||
FTextureID textureID() const { return tileGetTextureID(picno); }
|
||||
};
|
||||
|
||||
void playerResetPosture(PLAYER* pPlayer);
|
||||
|
||||
extern PLAYER gPlayer[kMaxPlayers];
|
||||
void playerResetPosture(BloodPlayer* pPlayer);
|
||||
|
||||
extern bool gBlueFlagDropped;
|
||||
extern bool gRedFlagDropped;
|
||||
|
@ -203,40 +105,40 @@ extern int team_ticker[kMaxPlayers];
|
|||
extern AMMOINFO gAmmoInfo[];
|
||||
extern POWERUPINFO gPowerUpInfo[kMaxPowerUps];
|
||||
|
||||
bool IsTargetTeammate(PLAYER* pSourcePlayer, DBloodActor* target);
|
||||
int powerupCheck(PLAYER* pPlayer, int nPowerUp);
|
||||
bool powerupActivate(PLAYER* pPlayer, int nPowerUp);
|
||||
void powerupDeactivate(PLAYER* pPlayer, int nPowerUp);
|
||||
void powerupSetState(PLAYER* pPlayer, int nPowerUp, bool bState);
|
||||
void powerupProcess(PLAYER* pPlayer);
|
||||
void powerupClear(PLAYER* pPlayer);
|
||||
bool IsTargetTeammate(BloodPlayer* pSourcePlayer, DBloodActor* target);
|
||||
int powerupCheck(BloodPlayer* pPlayer, int nPowerUp);
|
||||
bool powerupActivate(BloodPlayer* pPlayer, int nPowerUp);
|
||||
void powerupDeactivate(BloodPlayer* pPlayer, int nPowerUp);
|
||||
void powerupSetState(BloodPlayer* pPlayer, int nPowerUp, bool bState);
|
||||
void powerupProcess(BloodPlayer* pPlayer);
|
||||
void powerupClear(BloodPlayer* pPlayer);
|
||||
int packItemToPowerup(int nPack);
|
||||
int powerupToPackItem(int nPowerUp);
|
||||
bool packAddItem(PLAYER* pPlayer, unsigned int nPack);
|
||||
int packCheckItem(PLAYER* pPlayer, int nPack);
|
||||
bool packItemActive(PLAYER* pPlayer, int nPack);
|
||||
void packUseItem(PLAYER* pPlayer, int nPack);
|
||||
void packPrevItem(PLAYER* pPlayer);
|
||||
void packNextItem(PLAYER* pPlayer);
|
||||
bool playerSeqPlaying(PLAYER* pPlayer, int nSeq);
|
||||
void playerSetRace(PLAYER* pPlayer, int nLifeMode);
|
||||
void playerSetGodMode(PLAYER* pPlayer, bool bGodMode);
|
||||
void playerResetInertia(PLAYER* pPlayer);
|
||||
void playerCorrectInertia(PLAYER* pPlayer, const DVector3& oldpos);
|
||||
bool packAddItem(BloodPlayer* pPlayer, unsigned int nPack);
|
||||
int packCheckItem(BloodPlayer* pPlayer, int nPack);
|
||||
bool packItemActive(BloodPlayer* pPlayer, int nPack);
|
||||
void packUseItem(BloodPlayer* pPlayer, int nPack);
|
||||
void packPrevItem(BloodPlayer* pPlayer);
|
||||
void packNextItem(BloodPlayer* pPlayer);
|
||||
bool playerSeqPlaying(BloodPlayer* pPlayer, int nSeq);
|
||||
void playerSetRace(BloodPlayer* pPlayer, int nLifeMode);
|
||||
void playerSetGodMode(BloodPlayer* pPlayer, bool bGodMode);
|
||||
void playerResetInertia(BloodPlayer* pPlayer);
|
||||
void playerCorrectInertia(BloodPlayer* pPlayer, const DVector3& oldpos);
|
||||
void playerStart(int nPlayer, int bNewLevel = 0);
|
||||
void playerReset(PLAYER* pPlayer);
|
||||
void playerReset(BloodPlayer* pPlayer);
|
||||
void playerInit(int nPlayer, unsigned int a2);
|
||||
void CheckPickUp(PLAYER* pPlayer);
|
||||
void ProcessInput(PLAYER* pPlayer);
|
||||
void playerProcess(PLAYER* pPlayer);
|
||||
DBloodActor* playerFireMissile(PLAYER* pPlayer, double xyoff, const DVector3& vec, int nType);
|
||||
DBloodActor* playerFireThing(PLAYER* pPlayer, double xyoff, double zvel, int thingType, double nSpeed);
|
||||
void playerFrag(PLAYER* pKiller, PLAYER* pVictim);
|
||||
int playerDamageArmor(PLAYER* pPlayer, DAMAGE_TYPE nType, int nDamage);
|
||||
int playerDamageSprite(DBloodActor* nSource, PLAYER* pPlayer, DAMAGE_TYPE nDamageType, int nDamage);
|
||||
int UseAmmo(PLAYER* pPlayer, int nAmmoType, int nDec);
|
||||
void voodooTarget(PLAYER* pPlayer);
|
||||
void playerLandingSound(PLAYER* pPlayer);
|
||||
void CheckPickUp(BloodPlayer* pPlayer);
|
||||
void ProcessInput(BloodPlayer* pPlayer);
|
||||
void playerProcess(BloodPlayer* pPlayer);
|
||||
DBloodActor* playerFireMissile(BloodPlayer* pPlayer, double xyoff, const DVector3& vec, int nType);
|
||||
DBloodActor* playerFireThing(BloodPlayer* pPlayer, double xyoff, double zvel, int thingType, double nSpeed);
|
||||
void playerFrag(BloodPlayer* pKiller, BloodPlayer* pVictim);
|
||||
int playerDamageArmor(BloodPlayer* pPlayer, DAMAGE_TYPE nType, int nDamage);
|
||||
int playerDamageSprite(DBloodActor* nSource, BloodPlayer* pPlayer, DAMAGE_TYPE nDamageType, int nDamage);
|
||||
int UseAmmo(BloodPlayer* pPlayer, int nAmmoType, int nDec);
|
||||
void voodooTarget(BloodPlayer* pPlayer);
|
||||
void playerLandingSound(BloodPlayer* pPlayer);
|
||||
void PlayerSurvive(int, DBloodActor*);
|
||||
|
||||
END_BLD_NS
|
||||
|
|
|
@ -39,7 +39,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|||
|
||||
BEGIN_BLD_NS
|
||||
|
||||
void fakePlayerProcess(PLAYER* pPlayer, InputPacket* pInput);
|
||||
void fakePlayerProcess(BloodPlayer* pPlayer, InputPacket* pInput);
|
||||
void fakeActProcessSprites(void);
|
||||
|
||||
bool gPrediction = true;
|
||||
|
@ -98,7 +98,7 @@ void viewUpdatePrediction(InputPacket* pInput)
|
|||
#endif
|
||||
}
|
||||
|
||||
static void fakeProcessInput(PLAYER* pPlayer, InputPacket* pInput)
|
||||
static void fakeProcessInput(BloodPlayer* pPlayer, InputPacket* pInput)
|
||||
{
|
||||
#if 0
|
||||
POSTURE* pPosture = &pPlayer->pPosture[pPlayer->lifeMode][predict.posture];
|
||||
|
@ -253,7 +253,7 @@ static void fakeProcessInput(PLAYER* pPlayer, InputPacket* pInput)
|
|||
#endif
|
||||
}
|
||||
|
||||
void fakePlayerProcess(PLAYER* pPlayer, InputPacket* pInput)
|
||||
void fakePlayerProcess(BloodPlayer* pPlayer, InputPacket* pInput)
|
||||
{
|
||||
#if 0
|
||||
auto pSprite = pPlayer->actor;
|
||||
|
|
|
@ -227,9 +227,9 @@ void QAV::Draw(int ticks, int stat, int shade, int palnum, bool to3dview, double
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void QAV::Play(int start, int end, int nCallback, PLAYER* pData)
|
||||
void QAV::Play(int start, int end, int nCallback, BloodPlayer* pData)
|
||||
{
|
||||
auto pActor = pData ? pData->actor : nullptr;
|
||||
auto pActor = pData ? pData->GetActor() : nullptr;
|
||||
assert(ticksPerFrame > 0);
|
||||
int frame;
|
||||
int ticks;
|
||||
|
@ -326,7 +326,7 @@ void qavProcessTicker(QAV* const pQAV, int* duration, int* lastTick)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void qavProcessTimer(PLAYER* const pPlayer, QAV* const pQAV, int* duration, double* interpfrac, bool const fixedduration, bool const ignoreWeaponTimer)
|
||||
void qavProcessTimer(BloodPlayer* const pPlayer, QAV* const pQAV, int* duration, double* interpfrac, bool const fixedduration, bool const ignoreWeaponTimer)
|
||||
{
|
||||
// Process clock based on QAV's ticrate and last tick value.
|
||||
if (!paused)
|
||||
|
|
|
@ -230,13 +230,13 @@ struct QAV
|
|||
uint16_t res_id;
|
||||
FRAMEINFO frames[1]; // 24
|
||||
void Draw(int ticks, int stat, int shade, int palnum, bool to3dview, double const interpfrac, DAngle angle = nullAngle);
|
||||
void Play(int, int, int, PLAYER*);
|
||||
void Play(int, int, int, BloodPlayer*);
|
||||
void Precache(int palette = 0);
|
||||
};
|
||||
|
||||
QAV* getQAV(int res_id);
|
||||
void qavProcessTicker(QAV* const pQAV, int* duration, int* lastTick);
|
||||
void qavProcessTimer(PLAYER* const pPlayer, QAV* const pQAV, int* duration, double* interpfrac, bool const fixedduration = false, bool const ignoreWeaponTimer = false);
|
||||
void qavProcessTimer(BloodPlayer* const pPlayer, QAV* const pQAV, int* duration, double* interpfrac, bool const fixedduration = false, bool const ignoreWeaponTimer = false);
|
||||
|
||||
inline bool qavIsOriginal(const int res_id)
|
||||
{
|
||||
|
|
|
@ -73,7 +73,7 @@ static void UpdateFrame(void)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void UpdateStatusBar(PLAYER* pPlayer)
|
||||
void UpdateStatusBar(BloodPlayer* pPlayer)
|
||||
{
|
||||
if (automapMode == am_off && hud_size <= Hud_Stbar)
|
||||
{
|
||||
|
|
|
@ -63,10 +63,10 @@ void BloodSoundEngine::CalcPosVel(int type, const void* source, const float pt[3
|
|||
{
|
||||
if (pos != nullptr && type != SOURCE_None)
|
||||
{
|
||||
PLAYER* pPlayer = &gPlayer[myconnectindex];
|
||||
BloodPlayer* pPlayer = getPlayer(myconnectindex);
|
||||
FVector3 camera;
|
||||
|
||||
if (pPlayer && pPlayer->actor) camera = GetSoundPos(pPlayer->actor->spr.pos);
|
||||
if (pPlayer && pPlayer->GetActor()) camera = GetSoundPos(pPlayer->GetActor()->spr.pos);
|
||||
else camera = { 0, 0, 0 }; // don't crash if there is no player.
|
||||
|
||||
if (vel) vel->Zero();
|
||||
|
@ -105,14 +105,14 @@ void BloodSoundEngine::CalcPosVel(int type, const void* source, const float pt[3
|
|||
|
||||
void GameInterface::UpdateSounds()
|
||||
{
|
||||
PLAYER* pPlayer = &gPlayer[myconnectindex];
|
||||
BloodPlayer* pPlayer = getPlayer(myconnectindex);
|
||||
SoundListener listener;
|
||||
|
||||
if (pPlayer->actor)
|
||||
if (pPlayer->GetActor())
|
||||
{
|
||||
listener.angle = float(-pPlayer->actor->spr.Angles.Yaw.Radians());
|
||||
listener.angle = float(-pPlayer->GetActor()->spr.Angles.Yaw.Radians());
|
||||
listener.velocity.Zero();
|
||||
listener.position = GetSoundPos(pPlayer->actor->spr.pos);
|
||||
listener.position = GetSoundPos(pPlayer->GetActor()->spr.pos);
|
||||
listener.valid = true;
|
||||
}
|
||||
else
|
||||
|
|
|
@ -36,7 +36,7 @@ void sfxKillAllSounds(void);
|
|||
void sfxSetReverb(bool toggle);
|
||||
void sfxSetReverb2(bool toggle);
|
||||
|
||||
void ambProcess(PLAYER* pPlayer);
|
||||
void ambProcess(BloodPlayer* pPlayer);
|
||||
void ambKillAll(void);
|
||||
void ambInit(void);
|
||||
|
||||
|
|
|
@ -237,8 +237,8 @@ void LifeLeechOperate(DBloodActor* actor, EVENT event)
|
|||
int nPlayer = actor->xspr.data4;
|
||||
if (nPlayer >= 0 && nPlayer < kMaxPlayers && playeringame[nPlayer])
|
||||
{
|
||||
PLAYER* pPlayer = &gPlayer[nPlayer];
|
||||
if (pPlayer->actor->xspr.health > 0)
|
||||
BloodPlayer* pPlayer = getPlayer(nPlayer);
|
||||
if (pPlayer->GetActor()->xspr.health > 0)
|
||||
{
|
||||
evKillActor(actor);
|
||||
pPlayer->ammoCount[8] = ClipHigh(pPlayer->ammoCount[8] + actor->xspr.data3, gAmmoInfo[8].max);
|
||||
|
@ -511,9 +511,9 @@ void OperateSprite(DBloodActor* actor, EVENT event)
|
|||
SetSpriteState(actor, 1, initiator);
|
||||
for (int p = connecthead; p >= 0; p = connectpoint2[p])
|
||||
{
|
||||
auto vec = actor->spr.pos - gPlayer[p].actor->spr.pos;
|
||||
auto vec = actor->spr.pos - getPlayer(p)->GetActor()->spr.pos;
|
||||
int nDist = int(vec.LengthSquared()) + 0x40000;
|
||||
gPlayer[p].quakeEffect = DivScale(actor->xspr.data1, nDist, 16);
|
||||
getPlayer(p)->quakeEffect = DivScale(actor->xspr.data1, nDist, 16);
|
||||
}
|
||||
break;
|
||||
case kThingTNTBarrel:
|
||||
|
@ -598,9 +598,9 @@ void OperateSprite(DBloodActor* actor, EVENT event)
|
|||
case kSoundPlayer:
|
||||
if (gGameOptions.nGameType == 0)
|
||||
{
|
||||
PLAYER* pPlayer = &gPlayer[myconnectindex];
|
||||
BloodPlayer* pPlayer = getPlayer(myconnectindex);
|
||||
|
||||
if (pPlayer->actor->xspr.health <= 0)
|
||||
if (pPlayer->GetActor()->xspr.health <= 0)
|
||||
break;
|
||||
pPlayer->restTime = 0;
|
||||
}
|
||||
|
@ -960,7 +960,7 @@ void TranslateSector(sectortype* pSector, double wave1, double wave2, const DVec
|
|||
viewBackupSpriteLoc(ac);
|
||||
ac->spr.pos.XY() = spot + pt_w2 - pivot;
|
||||
ac->spr.Angles.Yaw += angleofs;
|
||||
if (!VanillaMode() && ac->IsPlayerActor()) gPlayer[ac->GetType() - kDudePlayer1].actor->spr.Angles.Yaw += angleofs;
|
||||
if (!VanillaMode() && ac->IsPlayerActor()) getPlayer(ac)->GetActor()->spr.Angles.Yaw += angleofs;
|
||||
}
|
||||
else if (ac->spr.cstat & CSTAT_SPRITE_MOVE_REVERSE)
|
||||
{
|
||||
|
@ -968,7 +968,7 @@ void TranslateSector(sectortype* pSector, double wave1, double wave2, const DVec
|
|||
viewBackupSpriteLoc(ac);
|
||||
ac->spr.pos.XY() = spot - pt_w2 + pivot;
|
||||
ac->spr.Angles.Yaw += angleofs;
|
||||
if (!VanillaMode() && ac->IsPlayerActor()) gPlayer[ac->GetType() - kDudePlayer1].actor->spr.Angles.Yaw += angleofs;
|
||||
if (!VanillaMode() && ac->IsPlayerActor()) getPlayer(ac)->GetActor()->spr.Angles.Yaw += angleofs;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1596,7 +1596,7 @@ void OperateTeleport(sectortype* pSector)
|
|||
{
|
||||
if (actor->spr.statnum == kStatDude)
|
||||
{
|
||||
PLAYER* pPlayer;
|
||||
BloodPlayer* pPlayer;
|
||||
bool bPlayer = actor->IsPlayerActor();
|
||||
if (bPlayer)
|
||||
pPlayer = getPlayer(actor);
|
||||
|
@ -1620,7 +1620,7 @@ void OperateTeleport(sectortype* pSector)
|
|||
{
|
||||
playerResetInertia(pPlayer);
|
||||
pPlayer->zViewVel = pPlayer->zWeaponVel = 0;
|
||||
pPlayer->actor->PrevAngles.Yaw = pPlayer->actor->spr.Angles.Yaw = actor->spr.Angles.Yaw;
|
||||
pPlayer->GetActor()->PrevAngles.Yaw = pPlayer->GetActor()->spr.Angles.Yaw = actor->spr.Angles.Yaw;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -58,15 +58,15 @@ int gViewIndex;
|
|||
|
||||
void viewBackupView(int nPlayer)
|
||||
{
|
||||
PLAYER* pPlayer = &gPlayer[nPlayer];
|
||||
BloodPlayer* pPlayer = getPlayer(nPlayer);
|
||||
pPlayer->ozView = pPlayer->zView;
|
||||
pPlayer->ozWeapon = pPlayer->zWeapon - pPlayer->zView - 12;
|
||||
pPlayer->obobHeight = pPlayer->bobHeight;
|
||||
pPlayer->obobWidth = pPlayer->bobWidth;
|
||||
pPlayer->oswayHeight = pPlayer->swayHeight;
|
||||
pPlayer->oswayWidth = pPlayer->swayWidth;
|
||||
pPlayer->actor->backuploc();
|
||||
pPlayer->actor->interpolated = true;
|
||||
pPlayer->GetActor()->backuploc();
|
||||
pPlayer->GetActor()->interpolated = true;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
@ -100,12 +100,12 @@ void viewDrawText(FFont* pFont, const char* pString, int x, int y, int nShade, i
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void viewDrawAimedPlayerName(PLAYER* pPlayer)
|
||||
void viewDrawAimedPlayerName(BloodPlayer* pPlayer)
|
||||
{
|
||||
if (!cl_idplayers || (pPlayer->aim.XY().isZero()))
|
||||
return;
|
||||
|
||||
int hit = HitScan(pPlayer->actor, pPlayer->zView, pPlayer->aim, CLIPMASK0, 512);
|
||||
int hit = HitScan(pPlayer->GetActor(), pPlayer->zView, pPlayer->aim, CLIPMASK0, 512);
|
||||
if (hit == 3)
|
||||
{
|
||||
auto actor = gHitInfo.actor();
|
||||
|
@ -113,7 +113,7 @@ void viewDrawAimedPlayerName(PLAYER* pPlayer)
|
|||
{
|
||||
int nPlayer = actor->GetType() - kDudePlayer1;
|
||||
const char* szName = PlayerName(nPlayer);
|
||||
int nPalette = (gPlayer[nPlayer].teamId & 3) + 11;
|
||||
int nPalette = (getPlayer(nPlayer)->teamId & 3) + 11;
|
||||
viewDrawText(DigiFont, szName, 160, 125, -128, nPalette, 1, 1);
|
||||
}
|
||||
}
|
||||
|
@ -280,7 +280,7 @@ void UpdateDacs(int nPalette, bool bNoTint)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void UpdateBlend(PLAYER* pPlayer)
|
||||
void UpdateBlend(BloodPlayer* pPlayer)
|
||||
{
|
||||
int nRed = 0;
|
||||
int nGreen = 0;
|
||||
|
@ -324,7 +324,7 @@ int gShowFrameRate = 1;
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void viewUpdateDelirium(PLAYER* pPlayer)
|
||||
void viewUpdateDelirium(BloodPlayer* pPlayer)
|
||||
{
|
||||
gScreenTiltO = gScreenTilt;
|
||||
deliriumTurnO = deliriumTurn;
|
||||
|
@ -371,7 +371,7 @@ void viewUpdateDelirium(PLAYER* pPlayer)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void viewUpdateShake(PLAYER* pPlayer, DVector3& cPos, DRotator& cAngles, double& pshakeX, double& pshakeY)
|
||||
void viewUpdateShake(BloodPlayer* pPlayer, DVector3& cPos, DRotator& cAngles, double& pshakeX, double& pshakeY)
|
||||
{
|
||||
auto doEffect = [&](const int& effectType)
|
||||
{
|
||||
|
@ -404,7 +404,7 @@ int32_t g_frameRate;
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
static void DrawMap(PLAYER* pPlayer, const double interpfrac)
|
||||
static void DrawMap(BloodPlayer* pPlayer, const double interpfrac)
|
||||
{
|
||||
int tm = 0;
|
||||
if (viewport3d.Left() > 0)
|
||||
|
@ -412,7 +412,7 @@ static void DrawMap(PLAYER* pPlayer, const double interpfrac)
|
|||
setViewport(Hud_Stbar);
|
||||
tm = 1;
|
||||
}
|
||||
DrawOverheadMap(pPlayer->actor->interpolatedpos(interpfrac).XY(), pPlayer->Angles.getRenderAngles(interpfrac).Yaw, interpfrac);
|
||||
DrawOverheadMap(pPlayer->GetActor()->interpolatedpos(interpfrac).XY(), pPlayer->Angles.getRenderAngles(interpfrac).Yaw, interpfrac);
|
||||
if (tm)
|
||||
setViewport(hud_size);
|
||||
}
|
||||
|
@ -423,11 +423,11 @@ static void DrawMap(PLAYER* pPlayer, const double interpfrac)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
static void SetupView(PLAYER* pPlayer, DVector3& cPos, DRotator& cAngles, sectortype*& pSector, double& zDelta, double& shakeX, double& shakeY, const double interpfrac)
|
||||
static void SetupView(BloodPlayer* pPlayer, DVector3& cPos, DRotator& cAngles, sectortype*& pSector, double& zDelta, double& shakeX, double& shakeY, const double interpfrac)
|
||||
{
|
||||
double bobWidth, bobHeight;
|
||||
|
||||
pSector = pPlayer->actor->sector();
|
||||
pSector = pPlayer->GetActor()->sector();
|
||||
#if 0
|
||||
if (numplayers > 1 && pPlayer == gMe && gPrediction && gMe->actor->xspr.health > 0)
|
||||
{
|
||||
|
@ -457,7 +457,7 @@ static void SetupView(PLAYER* pPlayer, DVector3& cPos, DRotator& cAngles, sector
|
|||
else
|
||||
#endif
|
||||
{
|
||||
cPos = pPlayer->actor->getRenderPos(interpfrac);
|
||||
cPos = pPlayer->GetActor()->getRenderPos(interpfrac);
|
||||
cAngles = pPlayer->Angles.getRenderAngles(interpfrac);
|
||||
zDelta = interpolatedvalue(pPlayer->ozWeapon, pPlayer->zWeapon - pPlayer->zView - 12, interpfrac);
|
||||
bobWidth = interpolatedvalue(pPlayer->obobWidth, pPlayer->bobWidth, interpfrac);
|
||||
|
@ -482,7 +482,7 @@ static void SetupView(PLAYER* pPlayer, DVector3& cPos, DRotator& cAngles, sector
|
|||
}
|
||||
else
|
||||
{
|
||||
calcChaseCamPos(cPos, pPlayer->actor, &pSector, cAngles, interpfrac, 80.);
|
||||
calcChaseCamPos(cPos, pPlayer->GetActor(), &pSector, cAngles, interpfrac, 80.);
|
||||
}
|
||||
if (pSector != nullptr)
|
||||
CheckLink(cPos, &pSector);
|
||||
|
@ -558,7 +558,7 @@ void renderCrystalBall()
|
|||
|
||||
void viewDrawScreen(bool sceneonly)
|
||||
{
|
||||
PLAYER* pPlayer = &gPlayer[gViewIndex];
|
||||
BloodPlayer* pPlayer = getPlayer(gViewIndex);
|
||||
|
||||
FireProcess();
|
||||
|
||||
|
@ -590,8 +590,8 @@ void viewDrawScreen(bool sceneonly)
|
|||
else if (pPlayer->isUnderwater) {
|
||||
if (pPlayer->nWaterPal) basepal = pPlayer->nWaterPal;
|
||||
else {
|
||||
if (pPlayer->actor->xspr.medium == kMediumWater) basepal = 1;
|
||||
else if (pPlayer->actor->xspr.medium == kMediumGoo) basepal = 3;
|
||||
if (pPlayer->GetActor()->xspr.medium == kMediumWater) basepal = 1;
|
||||
else if (pPlayer->GetActor()->xspr.medium == kMediumGoo) basepal = 3;
|
||||
else basepal = 2;
|
||||
}
|
||||
}
|
||||
|
@ -684,16 +684,16 @@ void viewDrawScreen(bool sceneonly)
|
|||
|
||||
if (!sceneonly) hudDraw(pPlayer, pSector, shakeX, shakeY, zDelta, cAngles.Roll, basepal, interpfrac);
|
||||
DAngle deliriumPitchI = interpolatedvalue(maphoriz(deliriumPitchO), maphoriz(deliriumPitch), interpfrac);
|
||||
auto bakCstat = pPlayer->actor->spr.cstat;
|
||||
pPlayer->actor->spr.cstat |= (gViewPos == 0) ? CSTAT_SPRITE_INVISIBLE : CSTAT_SPRITE_TRANSLUCENT | CSTAT_SPRITE_TRANS_FLIP;
|
||||
auto bakCstat = pPlayer->GetActor()->spr.cstat;
|
||||
pPlayer->GetActor()->spr.cstat |= (gViewPos == 0) ? CSTAT_SPRITE_INVISIBLE : CSTAT_SPRITE_TRANSLUCENT | CSTAT_SPRITE_TRANS_FLIP;
|
||||
cAngles.Pitch -= deliriumPitchI;
|
||||
render_drawrooms(pPlayer->actor, cPos, pSector, cAngles, interpfrac);
|
||||
pPlayer->actor->spr.cstat = bakCstat;
|
||||
render_drawrooms(pPlayer->GetActor(), cPos, pSector, cAngles, interpfrac);
|
||||
pPlayer->GetActor()->spr.cstat = bakCstat;
|
||||
bDeliriumOld = bDelirium && gDeliriumBlur;
|
||||
|
||||
if (sceneonly) return;
|
||||
auto offsets = pPlayer->Angles.getCrosshairOffsets(interpfrac);
|
||||
DrawCrosshair(pPlayer->actor->xspr.health >> 4, offsets.first.X, offsets.first.Y, 2, offsets.second);
|
||||
DrawCrosshair(pPlayer->GetActor()->xspr.health >> 4, offsets.first.X, offsets.first.Y, 2, offsets.second);
|
||||
#if 0 // This currently does not work. May have to be redone as a hardware effect.
|
||||
if (v4 && gNetPlayers > 1)
|
||||
{
|
||||
|
@ -726,7 +726,7 @@ void viewDrawScreen(bool sceneonly)
|
|||
}
|
||||
UpdateDacs(0, true); // keep the view palette active only for the actual 3D view and its overlays.
|
||||
|
||||
MarkSectorSeen(pPlayer->actor->sector());
|
||||
MarkSectorSeen(pPlayer->GetActor()->sector());
|
||||
|
||||
if (automapMode != am_off)
|
||||
{
|
||||
|
@ -740,9 +740,9 @@ void viewDrawScreen(bool sceneonly)
|
|||
auto text = GStrings("TXTB_PAUSED");
|
||||
viewDrawText(PickBigFont(text), text, 160, 10, 0, 0, 1, 0);
|
||||
}
|
||||
else if (pPlayer->nPlayer != myconnectindex)
|
||||
else if (pPlayer->pnum != myconnectindex)
|
||||
{
|
||||
FStringf gTempStr("] %s [", PlayerName(pPlayer->nPlayer));
|
||||
FStringf gTempStr("] %s [", PlayerName(pPlayer->pnum));
|
||||
viewDrawText(OriginalSmallFont, gTempStr, 160, 10, 0, 0, 1, 0);
|
||||
}
|
||||
if (cl_interpolate)
|
||||
|
@ -778,7 +778,7 @@ bool GameInterface::DrawAutomapPlayer(const DVector2& mxy, const DVector2& cpos,
|
|||
{
|
||||
if (i == gViewIndex || gGameOptions.nGameType == 1)
|
||||
{
|
||||
auto actor = gPlayer[i].actor;
|
||||
auto actor = getPlayer(i)->GetActor();
|
||||
auto vect = OutAutomapVector(mxy - cpos, cangvect, czoom, xydim);
|
||||
|
||||
DrawTexture(twod, TexMan.GetGameTexture(actor->spr.spritetexture(), true), vect.X, vect.Y, DTA_ClipLeft, viewport3d.Left(), DTA_ClipTop, viewport3d.Top(), DTA_ScaleX, czoom * (2. / 3.), DTA_ScaleY, czoom * (2. / 3.), DTA_CenterOffset, true,
|
||||
|
|
|
@ -73,13 +73,13 @@ extern DAngle gScreenTiltO, gScreenTilt;
|
|||
extern int gShowFrameRate;
|
||||
extern int gLastPal;
|
||||
|
||||
void hudDraw(PLAYER* pPlayer, sectortype* pSector, double bobx, double boby, double zDelta, DAngle angle, int basepal, double interpfrac);
|
||||
void hudDraw(BloodPlayer* pPlayer, sectortype* pSector, double bobx, double boby, double zDelta, DAngle angle, int basepal, double interpfrac);
|
||||
void viewInitializePrediction(void);
|
||||
void viewUpdatePrediction(InputPacket* pInput);
|
||||
void viewCorrectPrediction(void);
|
||||
void viewBackupView(int nPlayer);
|
||||
void InitStatusBar(void);
|
||||
void UpdateStatusBar(PLAYER* pPlayer);
|
||||
void UpdateStatusBar(BloodPlayer* pPlayer);
|
||||
void viewInit(void);
|
||||
void viewprocessSprites(tspriteArray& tsprites, int32_t cX, int32_t cY, int32_t cZ, int32_t cA, int32_t smooth);
|
||||
void viewSetMessage(const char* pMessage, const char* color = nullptr, const MESSAGE_PRIORITY priority = MESSAGE_PRIORITY_NORMAL);
|
||||
|
@ -89,7 +89,7 @@ void viewSetErrorMessage(const char* pMessage);
|
|||
void DoLensEffect(void);
|
||||
void UpdateDacs(int nPalette, bool bNoTint = false);
|
||||
void viewDrawScreen(bool sceneonly = false);
|
||||
void viewUpdateDelirium(PLAYER* pPlayer);
|
||||
void viewUpdateDelirium(BloodPlayer* pPlayer);
|
||||
void viewSetSystemMessage(const char* pMessage, ...);
|
||||
|
||||
inline void viewInterpolateSector(sectortype* pSector)
|
||||
|
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -49,9 +49,9 @@ BEGIN_DUKE_NS
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void addweapon_d(player_struct *p, int weapon, bool wswitch)
|
||||
void addweapon_d(DukePlayer *p, int weapon, bool wswitch)
|
||||
{
|
||||
if ( p->gotweapon[weapon] == 0 )
|
||||
if (p->gotweapon[weapon] == 0 )
|
||||
{
|
||||
p->gotweapon[weapon] = true;
|
||||
if (weapon == SHRINKER_WEAPON)
|
||||
|
@ -77,6 +77,7 @@ void addweapon_d(player_struct *p, int weapon, bool wswitch)
|
|||
p->curr_weapon = weapon;
|
||||
p->wantweaponfire = -1;
|
||||
|
||||
const auto pact = p->GetActor();
|
||||
switch (weapon)
|
||||
{
|
||||
case KNEE_WEAPON:
|
||||
|
@ -85,13 +86,13 @@ void addweapon_d(player_struct *p, int weapon, bool wswitch)
|
|||
case HANDBOMB_WEAPON:
|
||||
break;
|
||||
case SHOTGUN_WEAPON:
|
||||
S_PlayActorSound(SHOTGUN_COCK, p->GetActor());
|
||||
S_PlayActorSound(SHOTGUN_COCK, pact);
|
||||
break;
|
||||
case PISTOL_WEAPON:
|
||||
S_PlayActorSound(INSERT_CLIP, p->GetActor());
|
||||
S_PlayActorSound(INSERT_CLIP, pact);
|
||||
break;
|
||||
default:
|
||||
S_PlayActorSound(SELECT_WEAPON, p->GetActor());
|
||||
S_PlayActorSound(SELECT_WEAPON, pact);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -123,7 +124,7 @@ int ifsquished(DDukeActor* actor, int p)
|
|||
|
||||
if (squishme)
|
||||
{
|
||||
FTA(QUOTE_SQUISHED, &ps[p]);
|
||||
FTA(QUOTE_SQUISHED, getPlayer(p));
|
||||
|
||||
if (badguy(actor))
|
||||
actor->vel.X = 0;
|
||||
|
@ -148,7 +149,6 @@ int ifsquished(DDukeActor* actor, int p)
|
|||
|
||||
int ifhitbyweapon_d(DDukeActor *actor)
|
||||
{
|
||||
int p;
|
||||
auto hitowner = actor->GetHitOwner();
|
||||
|
||||
if (actor->hitextra >= 0)
|
||||
|
@ -160,7 +160,7 @@ int ifhitbyweapon_d(DDukeActor *actor)
|
|||
{
|
||||
if (ud.god && !(adef->flags3 & SFLAG3_LIGHTDAMAGE)) return -1;
|
||||
|
||||
p = actor->PlayerIndex();
|
||||
const auto p = getPlayer(actor->PlayerIndex());
|
||||
|
||||
if (hitowner &&
|
||||
hitowner->isPlayer() &&
|
||||
|
@ -176,23 +176,23 @@ int ifhitbyweapon_d(DDukeActor *actor)
|
|||
{
|
||||
actor->spr.extra = 0;
|
||||
|
||||
ps[p].wackedbyactor = hitowner;
|
||||
p->wackedbyactor = hitowner;
|
||||
|
||||
if (hitowner->isPlayer() && p != hitowner->PlayerIndex())
|
||||
if (hitowner->isPlayer() && p != getPlayer(hitowner->PlayerIndex()))
|
||||
{
|
||||
ps[p].frag_ps = hitowner->PlayerIndex();
|
||||
p->frag_ps = hitowner->PlayerIndex();
|
||||
}
|
||||
actor->SetHitOwner(ps[p].GetActor());
|
||||
actor->SetHitOwner(actor);
|
||||
}
|
||||
}
|
||||
|
||||
if (adef->flags2 & SFLAG2_DOUBLEDMGTHRUST)
|
||||
{
|
||||
ps[p].vel.XY() += actor->hitang.ToVector() * actor->hitextra * 0.25;
|
||||
p->vel.XY() += actor->hitang.ToVector() * actor->hitextra * 0.25;
|
||||
}
|
||||
else
|
||||
{
|
||||
ps[p].vel.XY() += actor->hitang.ToVector() * actor->hitextra * 0.125;
|
||||
p->vel.XY() += actor->hitang.ToVector() * actor->hitextra * 0.125;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -228,7 +228,7 @@ int ifhitbyweapon_d(DDukeActor *actor)
|
|||
|| actor->hitextra >= 0
|
||||
|| actor->spr.extra > 0
|
||||
|| !actor->isPlayer()
|
||||
|| ps[actor->PlayerIndex()].numloogs > 0
|
||||
|| getPlayer(actor->PlayerIndex())->numloogs > 0
|
||||
|| hitowner == nullptr)
|
||||
{
|
||||
actor->hitextra = -1;
|
||||
|
@ -236,14 +236,14 @@ int ifhitbyweapon_d(DDukeActor *actor)
|
|||
}
|
||||
else
|
||||
{
|
||||
p = actor->PlayerIndex();
|
||||
const auto p = getPlayer(actor->PlayerIndex());
|
||||
actor->spr.extra = 0;
|
||||
ps[p].wackedbyactor = hitowner;
|
||||
p->wackedbyactor = hitowner;
|
||||
|
||||
if (hitowner->isPlayer() && hitowner != ps[p].GetActor())
|
||||
ps[p].frag_ps = hitowner->PlayerIndex(); // set the proper player index here - this previously set the sprite index...
|
||||
if (hitowner->isPlayer() && hitowner != actor)
|
||||
p->frag_ps = hitowner->PlayerIndex(); // set the proper player index here - this previously set the sprite index...
|
||||
|
||||
actor->SetHitOwner(ps[p].GetActor());
|
||||
actor->SetHitOwner(actor);
|
||||
actor->hitextra = -1;
|
||||
|
||||
return 0;
|
||||
|
@ -285,13 +285,13 @@ void movetransports_d(void)
|
|||
|
||||
if (act2->GetOwner())
|
||||
{
|
||||
int p = act2->PlayerIndex();
|
||||
const auto pnum = act2->PlayerIndex();
|
||||
const auto p = getPlayer(pnum);
|
||||
p->on_warping_sector = 1;
|
||||
|
||||
ps[p].on_warping_sector = 1;
|
||||
|
||||
if (ps[p].transporter_hold == 0 && ps[p].jumping_counter == 0)
|
||||
if (p->transporter_hold == 0 && p->jumping_counter == 0)
|
||||
{
|
||||
if (ps[p].on_ground && sectlotag == ST_0_NO_EFFECT && onfloorz && ps[p].jetpack_on == 0)
|
||||
if (p->on_ground && sectlotag == ST_0_NO_EFFECT && onfloorz && p->jetpack_on == 0)
|
||||
{
|
||||
if (act->spr.pal == 0)
|
||||
{
|
||||
|
@ -299,28 +299,32 @@ void movetransports_d(void)
|
|||
S_PlayActorSound(TELEPORTER, act);
|
||||
}
|
||||
|
||||
for (int k = connecthead; k >= 0; k = connectpoint2[k])
|
||||
if (ps[k].cursector == Owner->sector())
|
||||
for (int i = connecthead; i >= 0; i = connectpoint2[i])
|
||||
{
|
||||
ps[k].frag_ps = p;
|
||||
ps[k].GetActor()->spr.extra = 0;
|
||||
const auto k = getPlayer(i);
|
||||
|
||||
if (k->cursector == Owner->sector())
|
||||
{
|
||||
k->frag_ps = pnum;
|
||||
k->GetActor()->spr.extra = 0;
|
||||
}
|
||||
}
|
||||
|
||||
ps[p].GetActor()->PrevAngles.Yaw = ps[p].GetActor()->spr.Angles.Yaw = Owner->spr.Angles.Yaw;
|
||||
act2->PrevAngles.Yaw = act2->spr.Angles.Yaw = Owner->spr.Angles.Yaw;
|
||||
|
||||
if (Owner->GetOwner() != Owner)
|
||||
{
|
||||
act->counter = 13;
|
||||
Owner->counter = 13;
|
||||
ps[p].transporter_hold = 13;
|
||||
p->transporter_hold = 13;
|
||||
}
|
||||
|
||||
ps[p].GetActor()->spr.pos = Owner->spr.pos;
|
||||
ps[p].GetActor()->backuppos();
|
||||
ps[p].setbobpos();
|
||||
act2->spr.pos = Owner->spr.pos;
|
||||
act2->backuppos();
|
||||
p->setbobpos();
|
||||
|
||||
ChangeActorSect(act2, Owner->sector());
|
||||
ps[p].setCursector(act2->sector());
|
||||
p->setCursector(act2->sector());
|
||||
|
||||
if (act->spr.pal == 0)
|
||||
{
|
||||
|
@ -331,95 +335,94 @@ void movetransports_d(void)
|
|||
break;
|
||||
}
|
||||
}
|
||||
else if (!(sectlotag == ST_1_ABOVE_WATER && ps[p].on_ground == 1)) break;
|
||||
else if (!(sectlotag == ST_1_ABOVE_WATER && p->on_ground == 1)) break;
|
||||
|
||||
if (onfloorz == 0 && fabs(act->spr.pos.Z - ps[p].GetActor()->getOffsetZ()) < 24)
|
||||
if ((ps[p].jetpack_on == 0) || (ps[p].jetpack_on && (PlayerInput(p, SB_JUMP) || ps[p].sync.uvel > 0)) ||
|
||||
(ps[p].jetpack_on && (PlayerInput(p, SB_CROUCH) || ps[p].sync.uvel < 0)))
|
||||
if (onfloorz == 0 && fabs(act->spr.pos.Z - act2->getOffsetZ()) < 24)
|
||||
{
|
||||
if ((p->jetpack_on == 0) || (p->jetpack_on && (PlayerInput(pnum, SB_JUMP) || p->cmd.ucmd.uvel > 0)) ||
|
||||
(p->jetpack_on && (PlayerInput(pnum, SB_CROUCH) || p->cmd.ucmd.uvel < 0)))
|
||||
{
|
||||
ps[p].GetActor()->spr.pos.XY() += Owner->spr.pos.XY() - act->spr.pos.XY();
|
||||
ps[p].GetActor()->backupvec2();
|
||||
act2->spr.pos.XY() += Owner->spr.pos.XY() - act->spr.pos.XY();
|
||||
act2->backupvec2();
|
||||
|
||||
if (ps[p].jetpack_on && (PlayerInput(p, SB_JUMP) || ps[p].jetpack_on < 11))
|
||||
ps[p].GetActor()->spr.pos.Z = Owner->spr.pos.Z - 24 + gs.playerheight;
|
||||
else ps[p].GetActor()->spr.pos.Z = Owner->spr.pos.Z + 24 + gs.playerheight;
|
||||
ps[p].GetActor()->backupz();
|
||||
|
||||
auto pa = ps[p].GetActor();
|
||||
pa->opos = ps[p].GetActor()->getPosWithOffsetZ();
|
||||
if (p->jetpack_on && (PlayerInput(pnum, SB_JUMP) || p->jetpack_on < 11))
|
||||
act2->spr.pos.Z = Owner->spr.pos.Z - 24 + gs.playerheight;
|
||||
else act2->spr.pos.Z = Owner->spr.pos.Z + 24 + gs.playerheight;
|
||||
act2->backuppos();
|
||||
|
||||
ChangeActorSect(act2, Owner->sector());
|
||||
ps[p].setCursector(Owner->sector());
|
||||
p->setCursector(Owner->sector());
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int k = 0;
|
||||
|
||||
if (ud.mapflags & MFLAG_ALLSECTORTYPES)
|
||||
{
|
||||
if (onfloorz && sectlotag == ST_160_FLOOR_TELEPORT && ps[p].GetActor()->getOffsetZ() > sectp->floorz - 48)
|
||||
if (onfloorz && sectlotag == ST_160_FLOOR_TELEPORT && act2->getOffsetZ() > sectp->floorz - 48)
|
||||
{
|
||||
k = 2;
|
||||
ps[p].GetActor()->spr.pos.Z = Owner->sector()->ceilingz + 7 + gs.playerheight;
|
||||
ps[p].GetActor()->backupz();
|
||||
act2->spr.pos.Z = Owner->sector()->ceilingz + 7 + gs.playerheight;
|
||||
act2->backupz();
|
||||
}
|
||||
|
||||
if (onfloorz && sectlotag == ST_161_CEILING_TELEPORT && ps[p].GetActor()->getOffsetZ() < sectp->ceilingz + 6)
|
||||
if (onfloorz && sectlotag == ST_161_CEILING_TELEPORT && act2->getOffsetZ() < sectp->ceilingz + 6)
|
||||
{
|
||||
k = 2;
|
||||
if (ps[p].GetActor()->spr.extra <= 0) break;
|
||||
ps[p].GetActor()->spr.pos.Z = Owner->sector()->floorz - 49 + gs.playerheight;
|
||||
ps[p].GetActor()->backupz();
|
||||
if (act2->spr.extra <= 0) break;
|
||||
act2->spr.pos.Z = Owner->sector()->floorz - 49 + gs.playerheight;
|
||||
act2->backupz();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (onfloorz && sectlotag == ST_1_ABOVE_WATER && ps[p].on_ground && ps[p].GetActor()->getOffsetZ() > (sectp->floorz - 16) && (PlayerInput(p, SB_CROUCH) || ps[p].sync.uvel < 0 || ps[p].vel.Z > 8))
|
||||
if (onfloorz && sectlotag == ST_1_ABOVE_WATER && p->on_ground && act2->getOffsetZ() > (sectp->floorz - 16) && (PlayerInput(pnum, SB_CROUCH) || p->cmd.ucmd.uvel < 0 || p->vel.Z > 8))
|
||||
// if( onfloorz && sectlotag == 1 && ps[p].pos.z > (sectp->floorz-(6<<8)) )
|
||||
{
|
||||
k = 1;
|
||||
if (screenpeek == p)
|
||||
if (getPlayer(screenpeek) == p)
|
||||
{
|
||||
FX_StopAllSounds();
|
||||
}
|
||||
if (ps[p].GetActor()->spr.extra > 0)
|
||||
if (act2->spr.extra > 0)
|
||||
S_PlayActorSound(DUKE_UNDERWATER, act2);
|
||||
ps[p].GetActor()->spr.pos.Z = Owner->sector()->ceilingz + 7 + gs.playerheight;
|
||||
ps[p].GetActor()->backupz();
|
||||
act2->spr.pos.Z = Owner->sector()->ceilingz + 7 + gs.playerheight;
|
||||
act2->backupz();
|
||||
|
||||
// this is actually below the precision óf the original Build coordinate system...
|
||||
ps[p].vel.X = ((krand() & 8192) ? 1 / 64. : -1 / 64.);
|
||||
ps[p].vel.Y = ((krand() & 8192) ? 1 / 64. : -1 / 64.);
|
||||
p->vel.X = ((krand() & 8192) ? 1 / 64. : -1 / 64.);
|
||||
p->vel.Y = ((krand() & 8192) ? 1 / 64. : -1 / 64.);
|
||||
|
||||
}
|
||||
|
||||
if (onfloorz && sectlotag == ST_2_UNDERWATER && ps[p].GetActor()->getOffsetZ() < (sectp->ceilingz + 6))
|
||||
if (onfloorz && sectlotag == ST_2_UNDERWATER && act2->getOffsetZ() < (sectp->ceilingz + 6))
|
||||
{
|
||||
k = 1;
|
||||
// if( act2->spr.extra <= 0) break;
|
||||
if (screenpeek == p)
|
||||
if (getPlayer(screenpeek) == p)
|
||||
{
|
||||
FX_StopAllSounds();
|
||||
}
|
||||
S_PlayActorSound(DUKE_GASP, act2);
|
||||
|
||||
ps[p].GetActor()->spr.pos.Z = Owner->sector()->floorz - 7 + gs.playerheight;
|
||||
ps[p].GetActor()->backupz();
|
||||
act2->spr.pos.Z = Owner->sector()->floorz - 7 + gs.playerheight;
|
||||
act2->backupz();
|
||||
|
||||
ps[p].jumping_toggle = 1;
|
||||
ps[p].jumping_counter = 0;
|
||||
p->jumping_toggle = 1;
|
||||
p->jumping_counter = 0;
|
||||
}
|
||||
|
||||
if (k == 1)
|
||||
{
|
||||
ps[p].GetActor()->spr.pos.XY() += Owner->spr.pos.XY() - act->spr.pos.XY();
|
||||
ps[p].GetActor()->backupvec2();
|
||||
act2->spr.pos.XY() += Owner->spr.pos.XY() - act->spr.pos.XY();
|
||||
act2->backupvec2();
|
||||
|
||||
if (!Owner || Owner->GetOwner() != Owner)
|
||||
ps[p].transporter_hold = -2;
|
||||
ps[p].setCursector(Owner->sector());
|
||||
p->transporter_hold = -2;
|
||||
|
||||
p->setCursector(Owner->sector());
|
||||
ChangeActorSect(act2, Owner->sector());
|
||||
SetActor(act2, act2->spr.pos);
|
||||
|
||||
|
@ -429,19 +432,19 @@ void movetransports_d(void)
|
|||
if (sectlotag == ST_1_ABOVE_WATER)
|
||||
for (int l = 0; l < 9; l++)
|
||||
{
|
||||
auto q = spawn(ps[p].GetActor(), DukeWaterBubbleClass);
|
||||
auto q = spawn(act2, DukeWaterBubbleClass);
|
||||
if (q) q->spr.pos.Z += krandf(64);
|
||||
}
|
||||
}
|
||||
else if (k == 2)
|
||||
{
|
||||
ps[p].GetActor()->spr.pos.XY() += Owner->spr.pos.XY() - act->spr.pos.XY();
|
||||
ps[p].GetActor()->backupvec2();
|
||||
act2->spr.pos.XY() += Owner->spr.pos.XY() - act->spr.pos.XY();
|
||||
act2->backupvec2();
|
||||
|
||||
if (Owner->GetOwner() != Owner)
|
||||
ps[p].transporter_hold = -2;
|
||||
ps[p].setCursector(Owner->sector());
|
||||
p->transporter_hold = -2;
|
||||
|
||||
p->setCursector(Owner->sector());
|
||||
ChangeActorSect(act2, Owner->sector());
|
||||
}
|
||||
}
|
||||
|
@ -541,11 +544,13 @@ static void handle_se28(DDukeActor* actor)
|
|||
}
|
||||
else
|
||||
{
|
||||
const auto spp = getPlayer(screenpeek);
|
||||
actor->temp_data[2]++;
|
||||
|
||||
if (actor->temp_data[2] > actor->temp_data[1])
|
||||
{
|
||||
actor->counter = 0;
|
||||
ps[screenpeek].visibility = ud.const_visibility;
|
||||
spp->visibility = ud.const_visibility;
|
||||
return;
|
||||
}
|
||||
else if (actor->temp_data[2] == (actor->temp_data[1] >> 1))
|
||||
|
@ -563,13 +568,13 @@ static void handle_se28(DDukeActor* actor)
|
|||
}
|
||||
else if (actor->temp_data[2] > (actor->temp_data[1] >> 3) && actor->temp_data[2] < (actor->temp_data[1] >> 2))
|
||||
{
|
||||
int j = !!cansee(actor->spr.pos, actor->sector(), ps[screenpeek].GetActor()->getPosWithOffsetZ(), ps[screenpeek].cursector);
|
||||
int j = !!cansee(actor->spr.pos, actor->sector(), spp->GetActor()->getPosWithOffsetZ(), spp->cursector);
|
||||
|
||||
if (rnd(192) && (actor->temp_data[2] & 1))
|
||||
{
|
||||
if (j) ps[screenpeek].visibility = 0;
|
||||
if (j) spp->visibility = 0;
|
||||
}
|
||||
else if (j) ps[screenpeek].visibility = ud.const_visibility;
|
||||
else if (j) spp->visibility = ud.const_visibility;
|
||||
|
||||
DukeStatIterator it(STAT_DEFAULT);
|
||||
while (auto act2 = it.Next())
|
||||
|
@ -582,16 +587,17 @@ static void handle_se28(DDukeActor* actor)
|
|||
spawn(act2, DukeSmallSmokeClass);
|
||||
|
||||
double x;
|
||||
int p = findplayer(actor, &x);
|
||||
auto psa = ps[p].GetActor();
|
||||
double dist = (psa->spr.pos.XY() - act2->spr.pos.XY()).LengthSquared();
|
||||
if (dist < 49*48)
|
||||
const auto p = getPlayer(findplayer(actor, &x));
|
||||
const auto pact = p->GetActor();
|
||||
double dist = (pact->spr.pos.XY() - act2->spr.pos.XY()).LengthSquared();
|
||||
|
||||
if (dist < 48*48)
|
||||
{
|
||||
if (S_CheckActorSoundPlaying(psa, DUKE_LONGTERM_PAIN) < 1)
|
||||
S_PlayActorSound(DUKE_LONGTERM_PAIN, psa);
|
||||
S_PlayActorSound(SHORT_CIRCUIT, psa);
|
||||
psa->spr.extra -= 8 + (krand() & 7);
|
||||
SetPlayerPal(&ps[p], PalEntry(32, 16, 0, 0));
|
||||
if (S_CheckActorSoundPlaying(pact, DUKE_LONGTERM_PAIN) < 1)
|
||||
S_PlayActorSound(DUKE_LONGTERM_PAIN, pact);
|
||||
S_PlayActorSound(SHORT_CIRCUIT, pact);
|
||||
pact->spr.extra -= 8 + (krand() & 7);
|
||||
SetPlayerPal(p, PalEntry(32, 16, 0, 0));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -349,14 +349,14 @@ void operatejaildoors(int hitag)
|
|||
jd.open = 1;
|
||||
jd.drag = jd.dist;
|
||||
if (!isRRRA() || jd.sound != 0)
|
||||
S_PlayActorSound(jd.sound, ps[screenpeek].GetActor());
|
||||
S_PlayActorSound(jd.sound, getPlayer(screenpeek)->GetActor());
|
||||
}
|
||||
if (jd.open == 2)
|
||||
{
|
||||
jd.open = 3;
|
||||
jd.drag = jd.dist;
|
||||
if (!isRRRA() || jd.sound != 0)
|
||||
S_PlayActorSound(jd.sound, ps[screenpeek].GetActor());
|
||||
S_PlayActorSound(jd.sound, getPlayer(screenpeek)->GetActor());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -453,12 +453,12 @@ void moveminecart(void)
|
|||
|
||||
void thunder(void)
|
||||
{
|
||||
player_struct* p;
|
||||
DukePlayer* p;
|
||||
int r1, r2;
|
||||
int i = 0;
|
||||
uint8_t shade;
|
||||
|
||||
p = &ps[screenpeek];
|
||||
p = getPlayer(screenpeek);
|
||||
|
||||
if (!thunderflash)
|
||||
{
|
||||
|
@ -474,7 +474,7 @@ void thunder(void)
|
|||
|
||||
if (seen)
|
||||
{
|
||||
if (ps[screenpeek].actor->sector()->ceilingstat & CSTAT_SECTOR_SKY)
|
||||
if (getPlayer(screenpeek)->GetActor()->sector()->ceilingstat & CSTAT_SECTOR_SKY)
|
||||
{
|
||||
g_relvisibility = 0;
|
||||
if (krand() > 65000)
|
||||
|
|
|
@ -42,7 +42,7 @@ void moveminecart();
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void addweapon_r(player_struct* p, int weapon, bool wswitch)
|
||||
void addweapon_r(DukePlayer* p, int weapon, bool wswitch)
|
||||
{
|
||||
int cw = p->curr_weapon;
|
||||
if (p->OnMotorcycle || p->OnBoat)
|
||||
|
@ -118,6 +118,7 @@ void addweapon_r(player_struct* p, int weapon, bool wswitch)
|
|||
p->curr_weapon = cw;
|
||||
p->wantweaponfire = -1;
|
||||
|
||||
const auto pact = p->GetActor();
|
||||
switch (weapon)
|
||||
{
|
||||
case SLINGBLADE_WEAPON:
|
||||
|
@ -128,13 +129,13 @@ void addweapon_r(player_struct* p, int weapon, bool wswitch)
|
|||
case THROWINGDYNAMITE_WEAPON:
|
||||
break;
|
||||
case SHOTGUN_WEAPON:
|
||||
S_PlayActorSound(SHOTGUN_COCK, p->GetActor());
|
||||
S_PlayActorSound(SHOTGUN_COCK, pact);
|
||||
break;
|
||||
case PISTOL_WEAPON:
|
||||
S_PlayActorSound(INSERT_CLIP, p->GetActor());
|
||||
S_PlayActorSound(INSERT_CLIP, pact);
|
||||
break;
|
||||
default:
|
||||
S_PlayActorSound(EJECT_CLIP, p->GetActor());
|
||||
S_PlayActorSound(EJECT_CLIP, pact);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -159,7 +160,6 @@ void lotsoffeathers_r(DDukeActor *actor, int n)
|
|||
|
||||
int ifhitbyweapon_r(DDukeActor *actor)
|
||||
{
|
||||
int p;
|
||||
auto hitowner = actor->GetHitOwner();
|
||||
|
||||
if (actor->hitextra >= 0)
|
||||
|
@ -171,7 +171,7 @@ int ifhitbyweapon_r(DDukeActor *actor)
|
|||
{
|
||||
if (ud.god) return -1;
|
||||
|
||||
p = actor->PlayerIndex();
|
||||
const auto p = getPlayer(actor->PlayerIndex());
|
||||
|
||||
if (hitowner &&
|
||||
hitowner->isPlayer() &&
|
||||
|
@ -186,24 +186,23 @@ int ifhitbyweapon_r(DDukeActor *actor)
|
|||
if (actor->spr.extra <= 0 && !(adef->flags2 & SFLAG2_FREEZEDAMAGE))
|
||||
{
|
||||
actor->spr.extra = 0;
|
||||
p->wackedbyactor = hitowner;
|
||||
|
||||
ps[p].wackedbyactor = hitowner;
|
||||
|
||||
if (hitowner->isPlayer() && p != hitowner->PlayerIndex())
|
||||
if (hitowner->isPlayer() && p != getPlayer(hitowner->PlayerIndex()))
|
||||
{
|
||||
ps[p].frag_ps = hitowner->PlayerIndex();
|
||||
p->frag_ps = hitowner->PlayerIndex();
|
||||
}
|
||||
actor->SetHitOwner(ps[p].GetActor());
|
||||
actor->SetHitOwner(actor);
|
||||
}
|
||||
}
|
||||
|
||||
if (adef->flags2 & SFLAG2_DOUBLEDMGTHRUST)
|
||||
{
|
||||
ps[p].vel.XY() += actor->hitang.ToVector() * actor->hitextra * 0.25;
|
||||
p->vel.XY() += actor->hitang.ToVector() * actor->hitextra * 0.25;
|
||||
}
|
||||
else
|
||||
{
|
||||
ps[p].vel.XY() += actor->hitang.ToVector() * actor->hitextra * 0.125;
|
||||
p->vel.XY() += actor->hitang.ToVector() * actor->hitextra * 0.125;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -263,125 +262,129 @@ void movetransports_r(void)
|
|||
|
||||
if (act2->GetOwner())
|
||||
{
|
||||
int p = act2->PlayerIndex();
|
||||
const auto pnum = act2->PlayerIndex();
|
||||
const auto p = getPlayer(pnum);
|
||||
p->on_warping_sector = 1;
|
||||
|
||||
ps[p].on_warping_sector = 1;
|
||||
|
||||
if (ps[p].transporter_hold == 0 && ps[p].jumping_counter == 0)
|
||||
if (p->transporter_hold == 0 && p->jumping_counter == 0)
|
||||
{
|
||||
if (ps[p].on_ground && sectlotag == ST_0_NO_EFFECT && onfloorz && ps[p].jetpack_on == 0)
|
||||
if (p->on_ground && sectlotag == ST_0_NO_EFFECT && onfloorz && p->jetpack_on == 0)
|
||||
{
|
||||
spawn(act, DukeTransporterBeamClass);
|
||||
S_PlayActorSound(TELEPORTER, act);
|
||||
|
||||
for (int k = connecthead; k >= 0; k = connectpoint2[k])
|
||||
if (ps[k].cursector == Owner->sector())
|
||||
for (int i = connecthead; i >= 0; i = connectpoint2[i])
|
||||
{
|
||||
ps[k].frag_ps = p;
|
||||
ps[k].GetActor()->spr.extra = 0;
|
||||
const auto k = getPlayer(i);
|
||||
|
||||
if (k->cursector == Owner->sector())
|
||||
{
|
||||
k->frag_ps = pnum;
|
||||
k->GetActor()->spr.extra = 0;
|
||||
}
|
||||
}
|
||||
|
||||
ps[p].GetActor()->PrevAngles.Yaw = ps[p].GetActor()->spr.Angles.Yaw = Owner->spr.Angles.Yaw;
|
||||
act2->PrevAngles.Yaw = act2->spr.Angles.Yaw = Owner->spr.Angles.Yaw;
|
||||
|
||||
if (Owner->GetOwner() != Owner)
|
||||
{
|
||||
act->counter = 13;
|
||||
Owner->counter = 13;
|
||||
ps[p].transporter_hold = 13;
|
||||
p->transporter_hold = 13;
|
||||
}
|
||||
|
||||
ps[p].GetActor()->spr.pos = Owner->spr.pos.plusZ(4);
|
||||
ps[p].GetActor()->backuppos();
|
||||
ps[p].setbobpos();
|
||||
act2->spr.pos = Owner->spr.pos.plusZ(4);
|
||||
act2->backuppos();
|
||||
p->setbobpos();
|
||||
|
||||
ChangeActorSect(act2, Owner->sector());
|
||||
ps[p].setCursector(act2->sector());
|
||||
p->setCursector(act2->sector());
|
||||
|
||||
auto beam = spawn(Owner, DukeTransporterBeamClass);
|
||||
if (beam) S_PlayActorSound(TELEPORTER, beam);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
else break;
|
||||
|
||||
if (onfloorz == 0 && fabs(act->spr.pos.Z - ps[p].GetActor()->getOffsetZ()) < 24)
|
||||
if ((ps[p].jetpack_on == 0) || (ps[p].jetpack_on && (PlayerInput(p, SB_JUMP) || ps[p].sync.uvel > 0)) ||
|
||||
(ps[p].jetpack_on && (PlayerInput(p, SB_CROUCH) || ps[p].sync.uvel < 0)))
|
||||
if (onfloorz == 0 && fabs(act->spr.pos.Z - act2->getOffsetZ()) < 24)
|
||||
{
|
||||
if ((p->jetpack_on == 0) || (p->jetpack_on && (PlayerInput(pnum, SB_JUMP) || p->cmd.ucmd.uvel > 0)) ||
|
||||
(p->jetpack_on && (PlayerInput(pnum, SB_CROUCH) || p->cmd.ucmd.uvel < 0)))
|
||||
{
|
||||
ps[p].GetActor()->spr.pos.XY() += Owner->spr.pos.XY() - act->spr.pos.XY();
|
||||
ps[p].GetActor()->backupvec2();
|
||||
act2->spr.pos.XY() += Owner->spr.pos.XY() - act->spr.pos.XY();
|
||||
act2->backupvec2();
|
||||
|
||||
if (ps[p].jetpack_on && (PlayerInput(p, SB_JUMP) || ps[p].jetpack_on < 11))
|
||||
ps[p].GetActor()->spr.pos.Z = Owner->spr.pos.Z - 24 + gs.playerheight;
|
||||
else ps[p].GetActor()->spr.pos.Z = Owner->spr.pos.Z + 24 + gs.playerheight;
|
||||
ps[p].GetActor()->backupz();
|
||||
if (p->jetpack_on && (PlayerInput(pnum, SB_JUMP) || p->jetpack_on < 11))
|
||||
act2->spr.pos.Z = Owner->spr.pos.Z - 24 + gs.playerheight;
|
||||
else act2->spr.pos.Z = Owner->spr.pos.Z + 24 + gs.playerheight;
|
||||
act2->backupz();
|
||||
|
||||
ChangeActorSect(act2, Owner->sector());
|
||||
ps[p].setCursector(Owner->sector());
|
||||
|
||||
p->setCursector(Owner->sector());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
int k = 0;
|
||||
|
||||
if (ud.mapflags & MFLAG_ALLSECTORTYPES)
|
||||
{
|
||||
if (onfloorz && sectlotag == ST_160_FLOOR_TELEPORT && ps[p].GetActor()->getOffsetZ() > sectp->floorz - 48)
|
||||
if (onfloorz && sectlotag == ST_160_FLOOR_TELEPORT && act2->getOffsetZ() > sectp->floorz - 48)
|
||||
{
|
||||
k = 2;
|
||||
ps[p].GetActor()->spr.pos.Z = Owner->sector()->ceilingz + 7 + gs.playerheight;
|
||||
ps[p].GetActor()->backupz();
|
||||
act2->spr.pos.Z = Owner->sector()->ceilingz + 7 + gs.playerheight;
|
||||
act2->backupz();
|
||||
}
|
||||
|
||||
if (onfloorz && sectlotag == ST_161_CEILING_TELEPORT && ps[p].GetActor()->getOffsetZ() < sectp->ceilingz + 6)
|
||||
if (onfloorz && sectlotag == ST_161_CEILING_TELEPORT && act2->getOffsetZ() < sectp->ceilingz + 6)
|
||||
{
|
||||
k = 2;
|
||||
if (ps[p].GetActor()->spr.extra <= 0) break;
|
||||
ps[p].GetActor()->spr.pos.Z = Owner->sector()->floorz - 49 + gs.playerheight;
|
||||
ps[p].GetActor()->backupz();
|
||||
if (act2->spr.extra <= 0) break;
|
||||
act2->spr.pos.Z = Owner->sector()->floorz - 49 + gs.playerheight;
|
||||
act2->backupz();
|
||||
}
|
||||
}
|
||||
|
||||
if ((onfloorz && sectlotag == ST_1_ABOVE_WATER && ps[p].GetActor()->getOffsetZ() > sectp->floorz - 6) ||
|
||||
(onfloorz && sectlotag == ST_1_ABOVE_WATER && ps[p].OnMotorcycle))
|
||||
if ((onfloorz && sectlotag == ST_1_ABOVE_WATER && act2->getOffsetZ() > sectp->floorz - 6) ||
|
||||
(onfloorz && sectlotag == ST_1_ABOVE_WATER && p->OnMotorcycle))
|
||||
{
|
||||
if (ps[p].OnBoat) break;
|
||||
if (p->OnBoat) break;
|
||||
k = 1;
|
||||
if (screenpeek == p)
|
||||
if (getPlayer(screenpeek) == p)
|
||||
{
|
||||
FX_StopAllSounds();
|
||||
}
|
||||
S_PlayActorSound(DUKE_UNDERWATER, ps[p].GetActor());
|
||||
ps[p].GetActor()->spr.pos.Z = Owner->sector()->ceilingz + 7 + gs.playerheight;
|
||||
ps[p].GetActor()->backupz();
|
||||
if (ps[p].OnMotorcycle)
|
||||
ps[p].moto_underwater = 1;
|
||||
S_PlayActorSound(DUKE_UNDERWATER, act2);
|
||||
act2->spr.pos.Z = Owner->sector()->ceilingz + 7 + gs.playerheight;
|
||||
act2->backupz();
|
||||
if (p->OnMotorcycle)
|
||||
p->moto_underwater = 1;
|
||||
}
|
||||
|
||||
if (onfloorz && sectlotag == ST_2_UNDERWATER && ps[p].GetActor()->getOffsetZ() < sectp->ceilingz + 6)
|
||||
if (onfloorz && sectlotag == ST_2_UNDERWATER && act2->getOffsetZ() < sectp->ceilingz + 6)
|
||||
{
|
||||
k = 1;
|
||||
if (ps[p].GetActor()->spr.extra <= 0) break;
|
||||
if (screenpeek == p)
|
||||
if (act2->spr.extra <= 0) break;
|
||||
if (getPlayer(screenpeek) == p)
|
||||
{
|
||||
FX_StopAllSounds();
|
||||
}
|
||||
S_PlayActorSound(DUKE_GASP, act2);
|
||||
|
||||
ps[p].GetActor()->spr.pos.Z = Owner->sector()->floorz - 7 + gs.playerheight;
|
||||
ps[p].GetActor()->backupz();
|
||||
act2->spr.pos.Z = Owner->sector()->floorz - 7 + gs.playerheight;
|
||||
act2->backupz();
|
||||
}
|
||||
|
||||
if (k == 1)
|
||||
{
|
||||
ps[p].GetActor()->spr.pos.XY() += Owner->spr.pos.XY() - act->spr.pos.XY();
|
||||
ps[p].GetActor()->backupvec2();
|
||||
act2->spr.pos.XY() += Owner->spr.pos.XY() - act->spr.pos.XY();
|
||||
act2->backupvec2();
|
||||
|
||||
if (!Owner || Owner->GetOwner() != Owner)
|
||||
ps[p].transporter_hold = -2;
|
||||
ps[p].setCursector(Owner->sector());
|
||||
p->transporter_hold = -2;
|
||||
|
||||
p->setCursector(Owner->sector());
|
||||
ChangeActorSect(act2, Owner->sector());
|
||||
|
||||
if ((krand() & 255) < 32)
|
||||
|
@ -389,13 +392,13 @@ void movetransports_r(void)
|
|||
}
|
||||
else if (k == 2)
|
||||
{
|
||||
ps[p].GetActor()->spr.pos.XY() += Owner->spr.pos.XY() - act->spr.pos.XY();
|
||||
ps[p].GetActor()->backupvec2();
|
||||
act2->spr.pos.XY() += Owner->spr.pos.XY() - act->spr.pos.XY();
|
||||
act2->backupvec2();
|
||||
|
||||
if (Owner->GetOwner() != Owner)
|
||||
ps[p].transporter_hold = -2;
|
||||
ps[p].setCursector(Owner->sector());
|
||||
p->transporter_hold = -2;
|
||||
|
||||
p->setCursector(Owner->sector());
|
||||
ChangeActorSect(act2, Owner->sector());
|
||||
}
|
||||
}
|
||||
|
@ -445,10 +448,11 @@ static void rrra_specialstats()
|
|||
movesprite_ex(act, DVector3(0, 0, act->spr.extra / 256.), CLIPMASK0, coll);
|
||||
}
|
||||
|
||||
if (ps[screenpeek].MamaEnd > 0)
|
||||
const auto spp = getPlayer(screenpeek);
|
||||
if (spp->MamaEnd > 0)
|
||||
{
|
||||
ps[screenpeek].MamaEnd--;
|
||||
if (ps[screenpeek].MamaEnd == 0)
|
||||
spp->MamaEnd--;
|
||||
if (spp->MamaEnd == 0)
|
||||
{
|
||||
CompleteLevel(nullptr);
|
||||
}
|
||||
|
@ -815,7 +819,7 @@ void moveeffectors_r(void) //STATNUM 3
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void fakebubbaspawn(DDukeActor *actor, player_struct* p)
|
||||
void fakebubbaspawn(DDukeActor *actor, DukePlayer* p)
|
||||
{
|
||||
fakebubba_spawn++;
|
||||
switch (fakebubba_spawn)
|
||||
|
|
|
@ -49,7 +49,7 @@ void drawshadows(tspriteArray& tsprites, tspritetype* t, DDukeActor* h)
|
|||
floorz = h->floorz;
|
||||
|
||||
|
||||
if (h->spr.pos.Z - floorz < 8 && ps[screenpeek].GetActor()->getOffsetZ() < floorz)
|
||||
if (h->spr.pos.Z - floorz < 8 && getPlayer(screenpeek)->GetActor()->getOffsetZ() < floorz)
|
||||
{
|
||||
auto shadowspr = tsprites.newTSprite();
|
||||
*shadowspr = *t;
|
||||
|
@ -74,7 +74,7 @@ void drawshadows(tspriteArray& tsprites, tspritetype* t, DDukeActor* h)
|
|||
else
|
||||
{
|
||||
// Alter the shadow's position so that it appears behind the sprite itself.
|
||||
auto look = (shadowspr->pos.XY() - ps[screenpeek].GetActor()->spr.pos.XY()).Angle();
|
||||
auto look = (shadowspr->pos.XY() - getPlayer(screenpeek)->GetActor()->spr.pos.XY()).Angle();
|
||||
shadowspr->pos.XY() += look.ToVector() * 2;
|
||||
}
|
||||
}
|
||||
|
@ -219,7 +219,7 @@ void applyanimations(tspritetype* t, DDukeActor* h, const DVector2& viewVec, DAn
|
|||
{
|
||||
if (t->spritetexture() == h->spr.spritetexture())
|
||||
{
|
||||
ps[screenpeek].visibility = -127;
|
||||
getPlayer(screenpeek)->visibility = -127;
|
||||
lastvisinc = PlayClock + 32;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -90,7 +90,7 @@ void animatesprites_d(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
|
|||
}
|
||||
|
||||
if (t->statnum == STAT_TEMP) continue;
|
||||
auto pp = &ps[h->PlayerIndex()];
|
||||
auto pp = getPlayer(h->PlayerIndex());
|
||||
if ((h->spr.statnum != STAT_ACTOR && h->isPlayer() && pp->newOwner == nullptr && h->GetOwner()) || !(h->flags1 & SFLAG_NOINTERPOLATE))
|
||||
{
|
||||
t->pos = h->interpolatedpos(interpfrac);
|
||||
|
@ -121,7 +121,7 @@ void animatesprites_d(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
|
|||
|
||||
if (t->pal == 1) t->pos.Z -= 18;
|
||||
|
||||
if (ps[p].over_shoulder_on > 0 && ps[p].newOwner == nullptr)
|
||||
if (getPlayer(p)->over_shoulder_on > 0 && getPlayer(p)->newOwner == nullptr)
|
||||
{
|
||||
t->cstat |= CSTAT_SPRITE_TRANSLUCENT;
|
||||
#if 0 // multiplayer only
|
||||
|
@ -134,7 +134,7 @@ void animatesprites_d(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
|
|||
#endif
|
||||
}
|
||||
|
||||
if ((display_mirror == 1 || screenpeek != p || !h->GetOwner()) && ud.multimode > 1 && cl_showweapon && ps[p].GetActor()->spr.extra > 0 && ps[p].curr_weapon > 0)
|
||||
if ((display_mirror == 1 || screenpeek != p || !h->GetOwner()) && ud.multimode > 1 && cl_showweapon && getPlayer(p)->GetActor()->spr.extra > 0 && getPlayer(p)->curr_weapon > 0)
|
||||
{
|
||||
auto newtspr = tsprites.newTSprite();
|
||||
*newtspr = *t;
|
||||
|
@ -147,7 +147,7 @@ void animatesprites_d(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
|
|||
newtspr->cstat = 0;
|
||||
|
||||
const char* texname = nullptr;
|
||||
switch (ps[p].curr_weapon)
|
||||
switch (getPlayer(p)->curr_weapon)
|
||||
{
|
||||
case PISTOL_WEAPON: texname = "FIRSTGUNSPRITE"; break;
|
||||
case SHOTGUN_WEAPON: texname = "SHOTGUNSPRITE"; break;
|
||||
|
@ -164,9 +164,9 @@ void animatesprites_d(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
|
|||
}
|
||||
t->setspritetexture(TexMan.CheckForTexture(texname, ETextureType::Any));
|
||||
|
||||
if (h->GetOwner()) newtspr->pos.Z = ps[p].GetActor()->getOffsetZ() - 12;
|
||||
if (h->GetOwner()) newtspr->pos.Z = getPlayer(p)->GetActor()->getOffsetZ() - 12;
|
||||
else newtspr->pos.Z = h->spr.pos.Z - 51;
|
||||
if (ps[p].curr_weapon == HANDBOMB_WEAPON)
|
||||
if (getPlayer(p)->curr_weapon == HANDBOMB_WEAPON)
|
||||
{
|
||||
newtspr->scale = DVector2(0.15625, 0.15625);
|
||||
}
|
||||
|
@ -187,19 +187,19 @@ void animatesprites_d(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
|
|||
applyRotation1(h, t, viewang, base);
|
||||
|
||||
|
||||
t->pal = ps[p].palookup;
|
||||
t->pal = getPlayer(p)->palookup;
|
||||
continue;
|
||||
}
|
||||
if (ps[p].on_crane == nullptr && (h->sector()->lotag & 0x7ff) != 1)
|
||||
if (getPlayer(p)->on_crane == nullptr && (h->sector()->lotag & 0x7ff) != 1)
|
||||
{
|
||||
double v = h->spr.pos.Z - ps[p].GetActor()->floorz + 3;
|
||||
double v = h->spr.pos.Z - getPlayer(p)->GetActor()->floorz + 3;
|
||||
if (v > 4 && h->spr.scale.Y > 0.5 && h->spr.extra > 0)
|
||||
h->spr.yoffset = (int8_t)(v / h->spr.scale.Y);
|
||||
else h->spr.yoffset = 0;
|
||||
}
|
||||
|
||||
if (ud.cameraactor == nullptr && ps[p].newOwner == nullptr)
|
||||
if (h->GetOwner() && display_mirror == 0 && ps[p].over_shoulder_on == 0)
|
||||
if (ud.cameraactor == nullptr && getPlayer(p)->newOwner == nullptr)
|
||||
if (h->GetOwner() && display_mirror == 0 && getPlayer(p)->over_shoulder_on == 0)
|
||||
if (ud.multimode < 2 || (ud.multimode > 1 && p == screenpeek))
|
||||
{
|
||||
t->ownerActor = nullptr;
|
||||
|
@ -221,7 +221,7 @@ void animatesprites_d(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
|
|||
if (h->spr.statnum == STAT_DUMMYPLAYER || badguy(h) || (h->isPlayer() && h->GetOwner()))
|
||||
{
|
||||
drawshadows(tsprites, t, h);
|
||||
if (ps[screenpeek].heat_amount > 0 && ps[screenpeek].heat_on)
|
||||
if (getPlayer(screenpeek)->heat_amount > 0 && getPlayer(screenpeek)->heat_on)
|
||||
{
|
||||
t->pal = 6;
|
||||
t->shade = 0;
|
||||
|
|
|
@ -83,7 +83,7 @@ void animatesprites_r(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
|
|||
}
|
||||
|
||||
if (t->statnum == STAT_TEMP) continue;
|
||||
auto pp = &ps[h->PlayerIndex()];
|
||||
auto pp = getPlayer(h->PlayerIndex());
|
||||
if (h->spr.statnum != STAT_ACTOR && h->isPlayer() && pp->newOwner == nullptr && h->GetOwner())
|
||||
{
|
||||
t->pos = h->interpolatedpos(interpfrac);
|
||||
|
@ -120,7 +120,7 @@ void animatesprites_r(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
|
|||
|
||||
if (t->pal == 1) t->pos.Z -= 18;
|
||||
|
||||
if (ps[p].over_shoulder_on > 0 && ps[p].newOwner == nullptr)
|
||||
if (getPlayer(p)->over_shoulder_on > 0 && getPlayer(p)->newOwner == nullptr)
|
||||
{
|
||||
t->cstat |= CSTAT_SPRITE_TRANSLUCENT;
|
||||
#if 0 // multiplayer only
|
||||
|
@ -133,7 +133,7 @@ void animatesprites_r(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
|
|||
#endif
|
||||
}
|
||||
|
||||
if ((display_mirror == 1 || screenpeek != p || !h->GetOwner()) && ud.multimode > 1 && cl_showweapon && ps[p].GetActor()->spr.extra > 0 && ps[p].curr_weapon > 0)
|
||||
if ((display_mirror == 1 || screenpeek != p || !h->GetOwner()) && ud.multimode > 1 && cl_showweapon && getPlayer(p)->GetActor()->spr.extra > 0 && getPlayer(p)->curr_weapon > 0)
|
||||
{
|
||||
auto newtspr = tsprites.newTSprite();
|
||||
*newtspr = *t;
|
||||
|
@ -146,7 +146,7 @@ void animatesprites_r(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
|
|||
newtspr->cstat = 0;
|
||||
|
||||
const char* texname = nullptr;
|
||||
switch (ps[p].curr_weapon)
|
||||
switch (getPlayer(p)->curr_weapon)
|
||||
{
|
||||
case PISTOL_WEAPON: texname = "FIRSTGUNSPRITE"; break;
|
||||
case SHOTGUN_WEAPON: texname = "SHOTGUNSPRITE"; break;
|
||||
|
@ -164,13 +164,13 @@ void animatesprites_r(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
|
|||
}
|
||||
t->setspritetexture(TexMan.CheckForTexture(texname, ETextureType::Any));
|
||||
|
||||
if (h->GetOwner()) newtspr->pos.Z = ps[p].GetActor()->getOffsetZ() - 12;
|
||||
if (h->GetOwner()) newtspr->pos.Z = getPlayer(p)->GetActor()->getOffsetZ() - 12;
|
||||
else newtspr->pos.Z = h->spr.pos.Z - 51;
|
||||
if (ps[p].curr_weapon == HANDBOMB_WEAPON)
|
||||
if (getPlayer(p)->curr_weapon == HANDBOMB_WEAPON)
|
||||
{
|
||||
newtspr->scale = DVector2(0.15625, 0.15625);
|
||||
}
|
||||
else if (ps[p].OnMotorcycle || ps[p].OnBoat)
|
||||
else if (getPlayer(p)->OnMotorcycle || getPlayer(p)->OnBoat)
|
||||
{
|
||||
newtspr->scale = DVector2(0, 0);
|
||||
}
|
||||
|
@ -181,16 +181,16 @@ void animatesprites_r(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
|
|||
newtspr->pal = 0;
|
||||
}
|
||||
|
||||
if (ps[p].on_crane == nullptr && (h->sector()->lotag & 0x7ff) != 1)
|
||||
if (getPlayer(p)->on_crane == nullptr && (h->sector()->lotag & 0x7ff) != 1)
|
||||
{
|
||||
double v = h->spr.pos.Z - ps[p].GetActor()->floorz + 3;
|
||||
double v = h->spr.pos.Z - getPlayer(p)->GetActor()->floorz + 3;
|
||||
if (v > 4 && h->spr.scale.Y > 0.5 && h->spr.extra > 0)
|
||||
h->spr.yoffset = (int8_t)(v / h->spr.scale.Y);
|
||||
else h->spr.yoffset = 0;
|
||||
}
|
||||
|
||||
if (ud.cameraactor == nullptr && ps[p].newOwner == nullptr)
|
||||
if (h->GetOwner() && display_mirror == 0 && ps[p].over_shoulder_on == 0)
|
||||
if (ud.cameraactor == nullptr && getPlayer(p)->newOwner == nullptr)
|
||||
if (h->GetOwner() && display_mirror == 0 && getPlayer(p)->over_shoulder_on == 0)
|
||||
if (ud.multimode < 2 || (ud.multimode > 1 && p == screenpeek))
|
||||
{
|
||||
t->ownerActor = nullptr;
|
||||
|
@ -201,14 +201,14 @@ void animatesprites_r(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
|
|||
if (t->pos.Z > h->floorz && t->scale.X < 0.5)
|
||||
t->pos.Z = h->floorz;
|
||||
|
||||
if (ps[p].OnMotorcycle && p == screenpeek)
|
||||
if (getPlayer(p)->OnMotorcycle && p == screenpeek)
|
||||
{
|
||||
t->setspritetexture(TexMan.CheckForTexture("PLAYERONBIKEBACK", ETextureType::Any));
|
||||
t->scale = DVector2(0.28125, 0.28125);
|
||||
drawshadows(tsprites, t, h);
|
||||
continue;
|
||||
}
|
||||
else if (ps[p].OnMotorcycle)
|
||||
else if (getPlayer(p)->OnMotorcycle)
|
||||
{
|
||||
t->setspritetexture(TexMan.CheckForTexture("PLAYERONBIKE", ETextureType::Any));
|
||||
applyRotation2(h, t, viewang);
|
||||
|
@ -216,14 +216,14 @@ void animatesprites_r(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
|
|||
drawshadows(tsprites, t, h);
|
||||
continue;
|
||||
}
|
||||
else if (ps[p].OnBoat && p == screenpeek)
|
||||
else if (getPlayer(p)->OnBoat && p == screenpeek)
|
||||
{
|
||||
t->setspritetexture(TexMan.CheckForTexture("PLAYERONBOATBACK", ETextureType::Any));
|
||||
t->scale = DVector2(0.5, 0.5);
|
||||
drawshadows(tsprites, t, h);
|
||||
continue;
|
||||
}
|
||||
else if (ps[p].OnBoat)
|
||||
else if (getPlayer(p)->OnBoat)
|
||||
{
|
||||
t->setspritetexture(TexMan.CheckForTexture("PLAYERONBOAT", ETextureType::Any));
|
||||
k = angletorotation2(h->spr.Angles.Yaw, viewang);
|
||||
|
|
|
@ -108,8 +108,8 @@ static int ccmd_spawn(CCmdFuncPtr parm)
|
|||
}
|
||||
|
||||
DDukeActor* spawned;
|
||||
if (!cls) spawned = spawnsprite(ps[myconnectindex].GetActor(), picno);
|
||||
else spawned = spawn(ps[myconnectindex].GetActor(), cls);
|
||||
if (!cls) spawned = spawnsprite(getPlayer(myconnectindex)->GetActor(), picno);
|
||||
else spawned = spawn(getPlayer(myconnectindex)->GetActor(), cls);
|
||||
if (spawned)
|
||||
{
|
||||
if (set & 1) spawned->spr.pal = (uint8_t)pal;
|
||||
|
@ -131,17 +131,17 @@ static int ccmd_spawn(CCmdFuncPtr parm)
|
|||
void GameInterface::ToggleThirdPerson()
|
||||
{
|
||||
if (gamestate != GS_LEVEL) return;
|
||||
if (!isRRRA() || (!ps[myconnectindex].OnMotorcycle && !ps[myconnectindex].OnBoat))
|
||||
if (!isRRRA() || (!getPlayer(myconnectindex)->OnMotorcycle && !getPlayer(myconnectindex)->OnBoat))
|
||||
{
|
||||
if (ps[myconnectindex].over_shoulder_on)
|
||||
ps[myconnectindex].over_shoulder_on = 0;
|
||||
if (getPlayer(myconnectindex)->over_shoulder_on)
|
||||
getPlayer(myconnectindex)->over_shoulder_on = 0;
|
||||
else
|
||||
{
|
||||
ps[myconnectindex].over_shoulder_on = 1;
|
||||
getPlayer(myconnectindex)->over_shoulder_on = 1;
|
||||
cameradist = 0;
|
||||
cameraclock = INT_MIN;
|
||||
}
|
||||
FTA(QUOTE_VIEW_MODE_OFF + ps[myconnectindex].over_shoulder_on, &ps[myconnectindex]);
|
||||
FTA(QUOTE_VIEW_MODE_OFF + getPlayer(myconnectindex)->over_shoulder_on, getPlayer(myconnectindex));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -159,12 +159,12 @@ void GameInterface::ToggleShowWeapon()
|
|||
{
|
||||
if (gamestate != GS_LEVEL) return;
|
||||
cl_showweapon = cl_showweapon == 0;
|
||||
FTA(QUOTE_WEAPON_MODE_OFF - cl_showweapon, &ps[screenpeek]);
|
||||
FTA(QUOTE_WEAPON_MODE_OFF - cl_showweapon, getPlayer(screenpeek));
|
||||
}
|
||||
|
||||
bool GameInterface::WantEscape()
|
||||
{
|
||||
return ps[myconnectindex].newOwner != nullptr;
|
||||
return getPlayer(myconnectindex)->newOwner != nullptr;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ BEGIN_DUKE_NS
|
|||
|
||||
const char *GameInterface::CheckCheatMode()
|
||||
{
|
||||
if (sv_cheats && (ud.player_skill == 4 || (isRR() && ud.player_skill > 3) || (isRRRA() && ps[myconnectindex].nocheat)))
|
||||
if (sv_cheats && (ud.player_skill == 4 || (isRR() && ud.player_skill > 3) || (isRRRA() && getPlayer(myconnectindex)->nocheat)))
|
||||
{
|
||||
return quoteMgr.GetQuote(QUOTE_CHEATS_DISABLED);
|
||||
}
|
||||
|
@ -63,7 +63,7 @@ static const char *cheatGod(int myconnectindex, int state)
|
|||
if (state == -1) state = !ud.god;
|
||||
ud.god = state;
|
||||
|
||||
auto* p = &ps[myconnectindex];
|
||||
auto* p = getPlayer(myconnectindex);
|
||||
auto act = p->GetActor();
|
||||
|
||||
act->spr.extra = gs.max_player_health;
|
||||
|
@ -83,7 +83,7 @@ static const char *cheatGod(int myconnectindex, int state)
|
|||
act->spr.hitag = 0;
|
||||
act->spr.lotag = 0;
|
||||
act->spr.pal =
|
||||
ps[myconnectindex].palookup;
|
||||
getPlayer(myconnectindex)->palookup;
|
||||
|
||||
return quoteMgr.GetQuote(QUOTE_CHEAT_GODMODE_ON);
|
||||
}
|
||||
|
@ -92,7 +92,7 @@ static const char *cheatGod(int myconnectindex, int state)
|
|||
ud.god = 0;
|
||||
act->spr.extra = gs.max_player_health;
|
||||
act->hitextra = -1;
|
||||
ps[myconnectindex].last_extra = gs.max_player_health;
|
||||
getPlayer(myconnectindex)->last_extra = gs.max_player_health;
|
||||
return quoteMgr.GetQuote(QUOTE_CHEAT_GODMODE_OFF);
|
||||
}
|
||||
}
|
||||
|
@ -108,10 +108,10 @@ static const char* cheatUnlock()
|
|||
{
|
||||
if (j & (0xffff - 16384))
|
||||
sect.lotag &= (0xffff - 16384);
|
||||
operatesectors(§, ps[myconnectindex].GetActor());
|
||||
operatesectors(§, getPlayer(myconnectindex)->GetActor());
|
||||
}
|
||||
}
|
||||
operateforcefields(ps[myconnectindex].GetActor(), -1);
|
||||
operateforcefields(getPlayer(myconnectindex)->GetActor(), -1);
|
||||
return quoteMgr.GetQuote(QUOTE_CHEAT_UNLOCK);
|
||||
}
|
||||
|
||||
|
@ -119,7 +119,7 @@ static const char *cheatKfc(int player)
|
|||
{
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
auto spr = spawn(ps[player].GetActor(), RedneckHenClass);
|
||||
auto spr = spawn(getPlayer(player)->GetActor(), RedneckHenClass);
|
||||
if (spr)
|
||||
{
|
||||
spr->spr.pal = 1;
|
||||
|
@ -165,24 +165,24 @@ const char* GameInterface::GenericCheat(int player, int cheat)
|
|||
return nullptr;
|
||||
|
||||
case CHT_HYPER:
|
||||
ps[player].steroids_amount = 399;
|
||||
getPlayer(player)->steroids_amount = 399;
|
||||
return quoteMgr.GetQuote(QUOTE_CHEAT_STEROIDS);
|
||||
|
||||
case CHT_KILL:
|
||||
quickkill(&ps[player]);
|
||||
quickkill(getPlayer(player));
|
||||
return quoteMgr.GetQuote(QUOTE_CHEAT_KILL);
|
||||
|
||||
case CHT_MONSTERS:
|
||||
return cheatMonsters();
|
||||
|
||||
case CHT_BIKE:
|
||||
OnMotorcycle(&ps[player]);
|
||||
ps[player].ammo_amount[MOTORCYCLE_WEAPON] = gs.max_ammo_amount[MOTORCYCLE_WEAPON];
|
||||
OnMotorcycle(getPlayer(player));
|
||||
getPlayer(player)->ammo_amount[MOTORCYCLE_WEAPON] = gs.max_ammo_amount[MOTORCYCLE_WEAPON];
|
||||
return quoteMgr.GetQuote(QUOTE_ON_BIKE);
|
||||
|
||||
case CHT_BOAT:
|
||||
OnBoat(&ps[player]);
|
||||
ps[player].ammo_amount[BOAT_WEAPON] = gs.max_ammo_amount[BOAT_WEAPON];
|
||||
OnBoat(getPlayer(player));
|
||||
getPlayer(player)->ammo_amount[BOAT_WEAPON] = gs.max_ammo_amount[BOAT_WEAPON];
|
||||
return quoteMgr.GetQuote(QUOTE_ON_BOAT);
|
||||
|
||||
case CHT_TONY:
|
||||
|
@ -195,27 +195,27 @@ const char* GameInterface::GenericCheat(int player, int cheat)
|
|||
|
||||
case CHT_RHETT:
|
||||
ud.god = 0;
|
||||
memset(ps[player].gotweapon, 0, sizeof(ps[player].gotweapon));
|
||||
ps[player].curr_weapon = KNEE_WEAPON;
|
||||
ps[player].nocheat = 1;
|
||||
ps[player].GetActor()->spr.extra = 1;
|
||||
memset(getPlayer(player)->gotweapon, 0, sizeof(getPlayer(player)->gotweapon));
|
||||
getPlayer(player)->curr_weapon = KNEE_WEAPON;
|
||||
getPlayer(player)->nocheat = 1;
|
||||
getPlayer(player)->GetActor()->spr.extra = 1;
|
||||
return quoteMgr.GetQuote(QUOTE_YERFUCKED);
|
||||
|
||||
case CHT_AARON:
|
||||
ps[player].DrugMode = !ps[player].DrugMode;
|
||||
getPlayer(player)->DrugMode = !getPlayer(player)->DrugMode;
|
||||
return nullptr;
|
||||
|
||||
case CHT_NOCHEAT:
|
||||
ps[player].nocheat = 1;
|
||||
getPlayer(player)->nocheat = 1;
|
||||
return quoteMgr.GetQuote(QUOTE_NOCHEATS);
|
||||
|
||||
case CHT_DRINK:
|
||||
ps[player].drink_amt = ps[player].drink_amt ? 0 : 90;
|
||||
return quoteMgr.GetQuote(ps[player].drink_amt ? QUOTE_INSTADRUNK : QUOTE_INSTASOBER);
|
||||
getPlayer(player)->drink_amt = getPlayer(player)->drink_amt ? 0 : 90;
|
||||
return quoteMgr.GetQuote(getPlayer(player)->drink_amt ? QUOTE_INSTADRUNK : QUOTE_INSTASOBER);
|
||||
|
||||
case CHT_SEASICK:
|
||||
ps[player].sea_sick_stat = !ps[player].sea_sick_stat;
|
||||
return quoteMgr.GetQuote(ps[player].sea_sick_stat ? QUOTE_BOATMODEON : QUOTE_BOATMODEOFF);
|
||||
getPlayer(player)->sea_sick_stat = !getPlayer(player)->sea_sick_stat;
|
||||
return quoteMgr.GetQuote(getPlayer(player)->sea_sick_stat ? QUOTE_BOATMODEON : QUOTE_BOATMODEOFF);
|
||||
|
||||
case CHT_KFC:
|
||||
return cheatKfc(player);
|
||||
|
@ -231,11 +231,11 @@ static bool cheatWeapons(int player)
|
|||
|
||||
for (int weapon = PISTOL_WEAPON; weapon < weaponLimit; weapon++ )
|
||||
{
|
||||
addammo( weapon, &ps[player], gs.max_ammo_amount[weapon] );
|
||||
ps[player].gotweapon[weapon] = true;;
|
||||
addammo( weapon, getPlayer(player), gs.max_ammo_amount[weapon] );
|
||||
getPlayer(player)->gotweapon[weapon] = true;;
|
||||
}
|
||||
if (isRRRA())
|
||||
ps[player].ammo_amount[SLINGBLADE_WEAPON] = 1;
|
||||
getPlayer(player)->ammo_amount[SLINGBLADE_WEAPON] = 1;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -252,22 +252,22 @@ static bool cheatInventory(int player)
|
|||
}
|
||||
};
|
||||
|
||||
invGet(400, EVENT_CHEATGETSTEROIDS, ps[player].steroids_amount);
|
||||
if (!isRR()) invGet(1200, EVENT_CHEATGETHEAT, ps[player].heat_amount);
|
||||
invGet(isRR() ? 2000 : 200, EVENT_CHEATGETBOOT, ps[player].boot_amount);
|
||||
invGet(100, EVENT_CHEATGETSHIELD, ps[player].shield_amount);
|
||||
invGet(6400, EVENT_CHEATGETSCUBA, ps[player].scuba_amount);
|
||||
invGet(2400, EVENT_CHEATGETHOLODUKE, ps[player].holoduke_amount);
|
||||
invGet(isRR() ? 600 : 1600, EVENT_CHEATGETJETPACK, ps[player].jetpack_amount);
|
||||
invGet(gs.max_player_health, EVENT_CHEATGETFIRSTAID, ps[player].firstaid_amount);
|
||||
invGet(400, EVENT_CHEATGETSTEROIDS, getPlayer(player)->steroids_amount);
|
||||
if (!isRR()) invGet(1200, EVENT_CHEATGETHEAT, getPlayer(player)->heat_amount);
|
||||
invGet(isRR() ? 2000 : 200, EVENT_CHEATGETBOOT, getPlayer(player)->boot_amount);
|
||||
invGet(100, EVENT_CHEATGETSHIELD, getPlayer(player)->shield_amount);
|
||||
invGet(6400, EVENT_CHEATGETSCUBA, getPlayer(player)->scuba_amount);
|
||||
invGet(2400, EVENT_CHEATGETHOLODUKE, getPlayer(player)->holoduke_amount);
|
||||
invGet(isRR() ? 600 : 1600, EVENT_CHEATGETJETPACK, getPlayer(player)->jetpack_amount);
|
||||
invGet(gs.max_player_health, EVENT_CHEATGETFIRSTAID, getPlayer(player)->firstaid_amount);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool cheatKeys(int player)
|
||||
{
|
||||
ps[player].got_access = 7;
|
||||
getPlayer(player)->got_access = 7;
|
||||
if (isRR()) for (int ikey = 0; ikey < 5; ikey++)
|
||||
ps[player].keys[ikey] = 1;
|
||||
getPlayer(player)->keys[ikey] = 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -325,26 +325,26 @@ static bool cheatDebug(cheatseq_t*)
|
|||
|
||||
static bool cheatAllen(cheatseq_t*)
|
||||
{
|
||||
FTA(79, &ps[myconnectindex]);
|
||||
FTA(79, getPlayer(myconnectindex));
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool cheatBeta(cheatseq_t *)
|
||||
{
|
||||
FTA(105,&ps[myconnectindex]);
|
||||
FTA(105,getPlayer(myconnectindex));
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool cheatTodd(cheatseq_t *)
|
||||
{
|
||||
FTA(99,&ps[myconnectindex]);
|
||||
FTA(99,getPlayer(myconnectindex));
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool cheatMap(cheatseq_t *)
|
||||
{
|
||||
gFullMap = !gFullMap;
|
||||
FTA(gFullMap? 111 : 1, &ps[myconnectindex]);
|
||||
FTA(gFullMap? 111 : 1, getPlayer(myconnectindex));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -474,7 +474,7 @@ static void cmd_Give(int player, uint8_t** stream, bool skip)
|
|||
int type = ReadByte(stream);
|
||||
if (skip) return;
|
||||
|
||||
if (numplayers != 1 || gamestate != GS_LEVEL || ps[player].GetActor()->spr.extra <= 0)
|
||||
if (numplayers != 1 || gamestate != GS_LEVEL || getPlayer(player)->GetActor()->spr.extra <= 0)
|
||||
{
|
||||
Printf("give: Cannot give while dead or not in a single-player game.\n");
|
||||
return;
|
||||
|
@ -484,43 +484,43 @@ static void cmd_Give(int player, uint8_t** stream, bool skip)
|
|||
{
|
||||
case GIVE_ALL:
|
||||
cheatStuff(player);
|
||||
FTA(5, &ps[player]);
|
||||
FTA(5, getPlayer(player));
|
||||
break;
|
||||
|
||||
case GIVE_HEALTH:
|
||||
ps[player].GetActor()->spr.extra = gs.max_player_health << 1;
|
||||
getPlayer(player)->GetActor()->spr.extra = gs.max_player_health << 1;
|
||||
break;
|
||||
|
||||
case GIVE_WEAPONS:
|
||||
cheatWeapons(player);
|
||||
FTA(119, &ps[player]);
|
||||
FTA(119, getPlayer(player));
|
||||
break;
|
||||
|
||||
case GIVE_AMMO:
|
||||
{
|
||||
int maxw = isShareware() ? SHRINKER_WEAPON : MAX_WEAPONS;
|
||||
for (int i = maxw; i >= PISTOL_WEAPON; i--)
|
||||
addammo(i, &ps[player], gs.max_ammo_amount[i]);
|
||||
addammo(i, getPlayer(player), gs.max_ammo_amount[i]);
|
||||
break;
|
||||
}
|
||||
|
||||
case GIVE_ARMOR:
|
||||
ps[player].shield_amount = 100;
|
||||
getPlayer(player)->shield_amount = 100;
|
||||
break;
|
||||
|
||||
case GIVE_KEYS:
|
||||
cheatKeys(player);
|
||||
FTA(121, &ps[player]);
|
||||
FTA(121, getPlayer(player));
|
||||
break;
|
||||
|
||||
case GIVE_INVENTORY:
|
||||
cheatInventory(player);
|
||||
FTA(120, &ps[player]);
|
||||
FTA(120, getPlayer(player));
|
||||
break;
|
||||
|
||||
case GIVE_ITEMS:
|
||||
cheatItems(player);
|
||||
FTA(5, &ps[player]);
|
||||
FTA(5, getPlayer(player));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -91,7 +91,7 @@ void GameInterface::MenuSound(EMenuSounds snd)
|
|||
bool GameInterface::CanSave()
|
||||
{
|
||||
if (ud.recstat == 2) return false;
|
||||
auto pActor = ps[myconnectindex].GetActor();
|
||||
auto pActor = getPlayer(myconnectindex)->GetActor();
|
||||
return (pActor && pActor->spr.extra > 0);
|
||||
}
|
||||
|
||||
|
|
|
@ -39,18 +39,18 @@ void activatebysector_r(sectortype* sect, DDukeActor* j);
|
|||
void checksectors_d(int snum);
|
||||
void checksectors_r(int snum);
|
||||
|
||||
void addweapon_d(player_struct* p, int weapon, bool wswitch);
|
||||
void addweapon_r(player_struct* p, int weapon, bool wswitch);
|
||||
void addweapon_d(DukePlayer* p, int weapon, bool wswitch);
|
||||
void addweapon_r(DukePlayer* p, int weapon, bool wswitch);
|
||||
int ifhitbyweapon_r(DDukeActor* sn);
|
||||
int ifhitbyweapon_d(DDukeActor* sn);
|
||||
void incur_damage_d(player_struct* p);
|
||||
void incur_damage_r(player_struct* p);
|
||||
void incur_damage_d(DukePlayer* p);
|
||||
void incur_damage_r(DukePlayer* p);
|
||||
void selectweapon_d(int snum, int j);
|
||||
void selectweapon_r(int snum, int j);
|
||||
int doincrements_d(player_struct* p);
|
||||
int doincrements_r(player_struct* p);
|
||||
void checkweapons_d(player_struct* p);
|
||||
void checkweapons_r(player_struct* p);
|
||||
int doincrements_d(DukePlayer* p);
|
||||
int doincrements_r(DukePlayer* p);
|
||||
void checkweapons_d(DukePlayer* p);
|
||||
void checkweapons_r(DukePlayer* p);
|
||||
void processinput_d(int snum);
|
||||
void processinput_r(int snum);
|
||||
void displayweapon_d(int snum, double interpfrac);
|
||||
|
|
|
@ -19,8 +19,6 @@
|
|||
|
||||
BEGIN_DUKE_NS
|
||||
|
||||
extern player_struct ps[MAXPLAYERS];
|
||||
|
||||
struct GameInterface : public ::GameInterface
|
||||
{
|
||||
const char* Name() override { return "Duke"; }
|
||||
|
@ -39,21 +37,19 @@ struct GameInterface : public ::GameInterface
|
|||
void SerializeGameState(FSerializer& arc) override;
|
||||
void ExitFromMenu() override;
|
||||
void DrawPlayerSprite(const DVector2& origin, bool onteam) override;
|
||||
void reapplyInputBits(InputPacket* const input) override { input->actions |= ps[myconnectindex].sync.actions & SB_CENTERVIEW; }
|
||||
void doPlayerMovement(const float scaleAdjust) override;
|
||||
unsigned getCrouchState() override;
|
||||
void UpdateSounds() override;
|
||||
void Startup() override;
|
||||
void DrawBackground() override;
|
||||
void Render() override;
|
||||
void Ticker(const ticcmd_t* playercmds) override;
|
||||
void Ticker() override;
|
||||
const char* GenericCheat(int player, int cheat) override;
|
||||
const char* CheckCheatMode() override;
|
||||
void NextLevel(MapRecord* map, int skill) override;
|
||||
void NewGame(MapRecord* map, int skill, bool) override;
|
||||
void LevelCompleted(MapRecord* map, int skill) override;
|
||||
bool DrawAutomapPlayer(const DVector2& mxy, const DVector2& cpos, const DAngle cang, const DVector2& xydim, const double czoom, double const interpfrac) override;
|
||||
DCoreActor* getConsoleActor() override { return ps[myconnectindex].GetActor(); }
|
||||
void ToggleThirdPerson() override;
|
||||
void SwitchCoopView() override;
|
||||
void ToggleShowWeapon() override;
|
||||
|
@ -78,14 +74,14 @@ struct Dispatcher
|
|||
void (*activatebysector)(sectortype* sect, DDukeActor* j);
|
||||
void (*checksectors)(int low);
|
||||
|
||||
void (*addweapon)(player_struct *p, int weapon, bool wswitch);
|
||||
void (*addweapon)(DukePlayer *p, int weapon, bool wswitch);
|
||||
int (*ifhitbyweapon)(DDukeActor* sectnum);
|
||||
|
||||
// player
|
||||
void (*incur_damage)(player_struct* p);
|
||||
void (*incur_damage)(DukePlayer* p);
|
||||
void (*selectweapon)(int snum, int j);
|
||||
int (*doincrements)(player_struct* p);
|
||||
void (*checkweapons)(player_struct* p);
|
||||
int (*doincrements)(DukePlayer* p);
|
||||
void (*checkweapons)(DukePlayer* p);
|
||||
void (*processinput)(int snum);
|
||||
void (*displayweapon)(int snum, double interpfrac);
|
||||
void (*displaymasks)(int snum, int p, double interpfrac);
|
||||
|
@ -102,18 +98,18 @@ void CallTick(DDukeActor* actor);
|
|||
bool CallOperate(DDukeActor* actor, int plnum);
|
||||
void CallAction(DDukeActor* actor);
|
||||
void checkhitsprite(DDukeActor* actor, DDukeActor* hitter);
|
||||
void CallOnHurt(DDukeActor* actor, player_struct* hitter);
|
||||
void CallOnTouch(DDukeActor* actor, player_struct* hitter);
|
||||
bool CallOnUse(DDukeActor* actor, player_struct* user);
|
||||
void CallOnMotoSmash(DDukeActor* actor, player_struct* hitter);
|
||||
void CallOnHurt(DDukeActor* actor, DukePlayer* hitter);
|
||||
void CallOnTouch(DDukeActor* actor, DukePlayer* hitter);
|
||||
bool CallOnUse(DDukeActor* actor, DukePlayer* user);
|
||||
void CallOnMotoSmash(DDukeActor* actor, DukePlayer* hitter);
|
||||
void CallOnRespawn(DDukeActor* actor, int low);
|
||||
bool CallAnimate(DDukeActor* actor, tspritetype* hitter);
|
||||
bool CallShootThis(DDukeActor* clsdef, DDukeActor* actor, int pn, const DVector3& spos, DAngle sang);
|
||||
void CallStaticSetup(DDukeActor* actor);
|
||||
void CallPlayFTASound(DDukeActor* actor, int mode = 0);
|
||||
void CallStandingOn(DDukeActor* actor, player_struct* p);
|
||||
void CallStandingOn(DDukeActor* actor, DukePlayer* p);
|
||||
void CallRunState(DDukeActor* actor);
|
||||
int CallTriggerSwitch(DDukeActor* actor, player_struct* p);
|
||||
int CallTriggerSwitch(DDukeActor* actor, DukePlayer* p);
|
||||
PClassActor* CallGetRadiusDamageType(DDukeActor* actor, int targhealth);
|
||||
|
||||
|
||||
|
|
|
@ -9,14 +9,14 @@ using DukeStatIterator = TStatIterator<DDukeActor>;
|
|||
using DukeSectIterator = TSectIterator<DDukeActor>;
|
||||
using DukeSpriteIterator = TSpriteIterator<DDukeActor>;
|
||||
|
||||
inline DDukeActor* player_struct::GetActor()
|
||||
inline DDukeActor* DukePlayer::GetActor()
|
||||
{
|
||||
return actor;
|
||||
return static_cast<DDukeActor*>(actor);
|
||||
}
|
||||
|
||||
inline int player_struct::GetPlayerNum()
|
||||
inline int DukePlayer::GetPlayerNum()
|
||||
{
|
||||
return actor->PlayerIndex();
|
||||
return GetActor()->PlayerIndex();
|
||||
}
|
||||
|
||||
DDukeActor* spawn(DDukeActor* spawner, PClassActor* pname);
|
||||
|
|
|
@ -39,7 +39,7 @@ void operaterespawns(int low);
|
|||
void moveclouds(double interpfrac);
|
||||
void movefta();
|
||||
|
||||
void clearcameras(player_struct* p);
|
||||
void clearcameras(DukePlayer* p);
|
||||
void RANDOMSCRAP(DDukeActor* i);
|
||||
void detonate(DDukeActor* i, PClassActor* explosion);
|
||||
void hitradius(DDukeActor* i, int r, int hp1, int hp2, int hp3, int hp4);
|
||||
|
@ -88,8 +88,8 @@ void handle_se130(DDukeActor* i, int countmax);
|
|||
|
||||
int dodge(DDukeActor*);
|
||||
void alterang(int ang, DDukeActor* actor, int g_p);
|
||||
void checkavailweapon(player_struct* p);
|
||||
void addammo(int weapon, player_struct* p, int amount);
|
||||
void checkavailweapon(DukePlayer* p);
|
||||
void addammo(int weapon, DukePlayer* p, int amount);
|
||||
|
||||
int ssp(DDukeActor* i, unsigned int cliptype); //The set sprite function
|
||||
void insertspriteq(DDukeActor *i);
|
||||
|
@ -114,35 +114,35 @@ void playerAimDown(int snum, ESyncBits actions);
|
|||
DDukeActor* aim(DDukeActor* s, int aang, bool force = true, bool* b = nullptr);
|
||||
DDukeActor* aim_(DDukeActor* actor, DDukeActor* weapon, double aimangle, bool* b = nullptr);
|
||||
void shoot(DDukeActor* actor, PClass* cls);
|
||||
void checkweapons(player_struct* const p);
|
||||
void checkweapons(DukePlayer* const p);
|
||||
int findotherplayer(int p, double* d);
|
||||
void quickkill(player_struct* p);
|
||||
int setpal(player_struct* p);
|
||||
void quickkill(DukePlayer* p);
|
||||
int setpal(DukePlayer* p);
|
||||
int madenoise(int playerNum);
|
||||
int haslock(sectortype* sect, int snum);
|
||||
void purplelavacheck(player_struct* p);
|
||||
void addphealth(player_struct* p, int amount, bool bigitem);
|
||||
int playereat(player_struct* p, int amount, bool bigitem);
|
||||
void playerdrink(player_struct* p, int amount);
|
||||
int playeraddammo(player_struct* p, int weaponindex, int amount);
|
||||
int playeraddweapon(player_struct* p, int weaponindex, int amount);
|
||||
void playeraddinventory(player_struct* p, DDukeActor* item, int type, int amount);
|
||||
void purplelavacheck(DukePlayer* p);
|
||||
void addphealth(DukePlayer* p, int amount, bool bigitem);
|
||||
int playereat(DukePlayer* p, int amount, bool bigitem);
|
||||
void playerdrink(DukePlayer* p, int amount);
|
||||
int playeraddammo(DukePlayer* p, int weaponindex, int amount);
|
||||
int playeraddweapon(DukePlayer* p, int weaponindex, int amount);
|
||||
void playeraddinventory(DukePlayer* p, DDukeActor* item, int type, int amount);
|
||||
void actorsizeto(DDukeActor* actor, double x, double y);
|
||||
void spawndebris(DDukeActor* g_ac, int dnum, int count);
|
||||
int checkp(DDukeActor* self, player_struct* p, int flags);
|
||||
int playercheckinventory(player_struct* p, DDukeActor* item, int type, int amount);
|
||||
void playerstomp(player_struct* p, DDukeActor* stomped);
|
||||
void playerreset(player_struct* p, DDukeActor* g_ac);
|
||||
void wackplayer(player_struct* p);
|
||||
int checkp(DDukeActor* self, DukePlayer* p, int flags);
|
||||
int playercheckinventory(DukePlayer* p, DDukeActor* item, int type, int amount);
|
||||
void playerstomp(DukePlayer* p, DDukeActor* stomped);
|
||||
void playerreset(DukePlayer* p, DDukeActor* g_ac);
|
||||
void wackplayer(DukePlayer* p);
|
||||
void actoroperate(DDukeActor* g_ac);
|
||||
void playerkick(player_struct* p, DDukeActor* g_ac);
|
||||
void playerkick(DukePlayer* p, DDukeActor* g_ac);
|
||||
void garybanjo(DDukeActor* g_ac);
|
||||
int ifsquished(DDukeActor* i, int p);
|
||||
void fakebubbaspawn(DDukeActor* actor, player_struct* p);
|
||||
void fakebubbaspawn(DDukeActor* actor, DukePlayer* p);
|
||||
void tearitup(sectortype* sect);
|
||||
void destroyit(DDukeActor* actor);
|
||||
void mamaspawn(DDukeActor* actor);
|
||||
void forceplayerangle(player_struct* snum);
|
||||
void forceplayerangle(DukePlayer* snum);
|
||||
|
||||
|
||||
bool checkhitceiling(sectortype* sectp);
|
||||
|
@ -156,7 +156,7 @@ void allignwarpelevators(void);
|
|||
bool isablockdoor(int tileNum);
|
||||
bool activatewarpelevators(DDukeActor* s, int w);
|
||||
int check_activator_motion(int lotag);
|
||||
void operateactivators(int l, player_struct* w);
|
||||
void operateactivators(int l, DukePlayer* w);
|
||||
void operateforcefields(DDukeActor* s, int low);
|
||||
void operatemasterswitches(int lotag);
|
||||
void operatesectors(sectortype* s, DDukeActor* i);
|
||||
|
@ -168,11 +168,11 @@ int setanimation(sectortype* animsect, int animtype, walltype* animtarget, doubl
|
|||
int setanimation(sectortype* animsect, int animtype, sectortype* animtarget, double thegoal, double thevel);
|
||||
void dofurniture(walltype* wallNum, sectortype* sectnum, int playerNum);
|
||||
void dotorch();
|
||||
double hitawall(player_struct* pl, walltype** hitWall);
|
||||
double hitawall(DukePlayer* pl, walltype** hitWall);
|
||||
double hits(DDukeActor* snum);
|
||||
|
||||
DDukeActor* LocateTheLocator(int n, sectortype* sectnum);
|
||||
void clearcamera(player_struct* ps);
|
||||
void clearcamera(DukePlayer* ps);
|
||||
|
||||
void LoadActor(DDukeActor* i, int p, int x);
|
||||
bool execute(DDukeActor* s, int p, double d, int* killit_flag = nullptr);
|
||||
|
@ -189,14 +189,14 @@ void ceilingglass(DDukeActor* snum, sectortype* sectnum, int cnt);
|
|||
void spriteglass(DDukeActor* snum, int cnt);
|
||||
void lotsofcolourglass(DDukeActor* snum, walltype* wallNum, int cnt);
|
||||
void lotsofglass(DDukeActor* snum, walltype* wal, int cnt);
|
||||
void checkplayerhurt_d(player_struct* p, const Collision& coll);
|
||||
void checkplayerhurt_r(player_struct* p, const Collision& coll);
|
||||
void checkplayerhurt_d(DukePlayer* p, const Collision& coll);
|
||||
void checkplayerhurt_r(DukePlayer* p, const Collision& coll);
|
||||
DDukeActor* dospawnsprite(DDukeActor* actj, int pn);
|
||||
|
||||
void spriteinit(DDukeActor*, TArray<DDukeActor*>& actors);
|
||||
DDukeActor* spawninit(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>* actors);
|
||||
|
||||
void checkavailinven(player_struct* p);
|
||||
void checkavailinven(DukePlayer* p);
|
||||
bool initspriteforspawn(DDukeActor* spn);
|
||||
void initshell(DDukeActor* actj, DDukeActor* acti, bool isshell);
|
||||
void spawneffector(DDukeActor* actor, TArray<DDukeActor*>* actors);
|
||||
|
@ -204,18 +204,18 @@ int startrts(int lumpNum, int localPlayer);
|
|||
|
||||
void pickrandomspot(int pn);
|
||||
void premapcontroller(DDukeActor* ac);
|
||||
void resetinventory(player_struct* pn);
|
||||
void resetinventory(DukePlayer* pn);
|
||||
void resetplayerstats(int pn);
|
||||
void resetweapons(player_struct* pn);
|
||||
void resetweapons(DukePlayer* pn);
|
||||
void resetprestat(int snum, int g);
|
||||
void prelevel_common(int g);
|
||||
void cacheit();
|
||||
|
||||
void FTA(int q, player_struct* p);
|
||||
void OnMotorcycle(player_struct *pl);
|
||||
void OffMotorcycle(player_struct *pl);
|
||||
void OnBoat(player_struct *pl);
|
||||
void OffBoat(player_struct *pl);
|
||||
void FTA(int q, DukePlayer* p);
|
||||
void OnMotorcycle(DukePlayer *pl);
|
||||
void OffMotorcycle(DukePlayer *pl);
|
||||
void OnBoat(DukePlayer *pl);
|
||||
void OffBoat(DukePlayer *pl);
|
||||
|
||||
void cameratext(DDukeActor* i);
|
||||
void dobonus(int bonusonly, const CompletionFunc& completion);
|
||||
|
@ -236,7 +236,7 @@ void enterlevel(MapRecord* mi, int gm);
|
|||
void donewgame(MapRecord* map, int sk);
|
||||
int playercolor2lookup(int color);
|
||||
void PlayerColorChanged(void);
|
||||
bool movementBlocked(player_struct *p);
|
||||
bool movementBlocked(DukePlayer *p);
|
||||
void underwater(int snum, ESyncBits actions, double floorz, double ceilingz);
|
||||
void loadcons();
|
||||
void DrawStatusBar();
|
||||
|
|
|
@ -83,18 +83,18 @@ static void markgcroots()
|
|||
GC::MarkArray(spriteq, 1024);
|
||||
GC::Mark(currentCommentarySprite);
|
||||
GC::Mark(ud.cameraactor);
|
||||
for (auto& pl : ps)
|
||||
for (int i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
GC::Mark(pl.actor);
|
||||
GC::Mark(pl.actorsqu);
|
||||
GC::Mark(pl.wackedbyactor);
|
||||
GC::Mark(pl.on_crane);
|
||||
GC::Mark(pl.holoduke_on);
|
||||
GC::Mark(pl.somethingonplayer);
|
||||
GC::Mark(pl.access_spritenum);
|
||||
GC::Mark(pl.dummyplayersprite);
|
||||
GC::Mark(pl.newOwner);
|
||||
for (auto& var : pl.uservars)
|
||||
GC::Mark(getPlayer(i)->actor);
|
||||
GC::Mark(getPlayer(i)->actorsqu);
|
||||
GC::Mark(getPlayer(i)->wackedbyactor);
|
||||
GC::Mark(getPlayer(i)->on_crane);
|
||||
GC::Mark(getPlayer(i)->holoduke_on);
|
||||
GC::Mark(getPlayer(i)->somethingonplayer);
|
||||
GC::Mark(getPlayer(i)->access_spritenum);
|
||||
GC::Mark(getPlayer(i)->dummyplayersprite);
|
||||
GC::Mark(getPlayer(i)->newOwner);
|
||||
for (auto& var : getPlayer(i)->uservars)
|
||||
{
|
||||
var.Mark();
|
||||
}
|
||||
|
@ -386,6 +386,13 @@ void initactorflags()
|
|||
|
||||
void GameInterface::app_init()
|
||||
{
|
||||
// Initialise player array.
|
||||
for (unsigned i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
PlayerArray[i] = new DukePlayer;
|
||||
*getPlayer(i) = {};
|
||||
}
|
||||
|
||||
RegisterClasses();
|
||||
GC::AddMarkerFunc(markgcroots);
|
||||
|
||||
|
@ -408,7 +415,7 @@ void GameInterface::app_init()
|
|||
ud.wchoice[0][9] = 1;
|
||||
ud.multimode = 1;
|
||||
ud.m_monsters_off = userConfig.nomonsters;
|
||||
ps[0].aim_mode = 1;
|
||||
getPlayer(0)->aim_mode = 1;
|
||||
ud.cameraactor = nullptr;
|
||||
|
||||
if (fileSystem.FileExists("DUKESW.BIN"))
|
||||
|
@ -634,7 +641,7 @@ void checkhitsprite(DDukeActor* actor, DDukeActor* hitter)
|
|||
}
|
||||
}
|
||||
|
||||
void CallOnHurt(DDukeActor* actor, player_struct* hitter)
|
||||
void CallOnHurt(DDukeActor* actor, DukePlayer* hitter)
|
||||
{
|
||||
IFVIRTUALPTR(actor, DDukeActor, onHurt)
|
||||
{
|
||||
|
@ -643,7 +650,7 @@ void CallOnHurt(DDukeActor* actor, player_struct* hitter)
|
|||
}
|
||||
}
|
||||
|
||||
void CallOnTouch(DDukeActor* actor, player_struct* hitter)
|
||||
void CallOnTouch(DDukeActor* actor, DukePlayer* hitter)
|
||||
{
|
||||
IFVIRTUALPTR(actor, DDukeActor, onTouch)
|
||||
{
|
||||
|
@ -653,7 +660,7 @@ void CallOnTouch(DDukeActor* actor, player_struct* hitter)
|
|||
}
|
||||
|
||||
|
||||
bool CallOnUse(DDukeActor* actor, player_struct* user)
|
||||
bool CallOnUse(DDukeActor* actor, DukePlayer* user)
|
||||
{
|
||||
int nval = false;
|
||||
IFVIRTUALPTR(actor, DDukeActor, onUse)
|
||||
|
@ -665,7 +672,7 @@ bool CallOnUse(DDukeActor* actor, player_struct* user)
|
|||
return nval;
|
||||
}
|
||||
|
||||
void CallOnMotoSmash(DDukeActor* actor, player_struct* hitter)
|
||||
void CallOnMotoSmash(DDukeActor* actor, DukePlayer* hitter)
|
||||
{
|
||||
IFVIRTUALPTR(actor, DDukeActor, onMotoSmash)
|
||||
{
|
||||
|
@ -711,7 +718,7 @@ bool CallShootThis(DDukeActor* clsdef, DDukeActor* actor, int pn, const DVector3
|
|||
VMReturn ret(&rv);
|
||||
IFVIRTUALPTR(clsdef, DDukeActor, ShootThis)
|
||||
{
|
||||
VMValue val[] = {clsdef, actor, pn >= 0? &ps[pn] : nullptr, spos.X, spos.Y, spos.Z, sang.Degrees()};
|
||||
VMValue val[] = {clsdef, actor, pn >= 0? getPlayer(pn) : nullptr, spos.X, spos.Y, spos.Z, sang.Degrees()};
|
||||
VMCall(func, val, 7, &ret, 1);
|
||||
}
|
||||
return rv;
|
||||
|
@ -726,7 +733,7 @@ void CallPlayFTASound(DDukeActor* actor, int mode)
|
|||
}
|
||||
}
|
||||
|
||||
void CallStandingOn(DDukeActor* actor, player_struct* p)
|
||||
void CallStandingOn(DDukeActor* actor, DukePlayer* p)
|
||||
{
|
||||
IFVIRTUALPTR(actor, DDukeActor, StandingOn)
|
||||
{
|
||||
|
@ -735,7 +742,7 @@ void CallStandingOn(DDukeActor* actor, player_struct* p)
|
|||
}
|
||||
}
|
||||
|
||||
int CallTriggerSwitch(DDukeActor* actor, player_struct* p)
|
||||
int CallTriggerSwitch(DDukeActor* actor, DukePlayer* p)
|
||||
{
|
||||
int nval = false;
|
||||
IFVIRTUALPTR(actor, DDukeActor, TriggerSwitch)
|
||||
|
@ -905,7 +912,7 @@ CCMD(changewalltexture)
|
|||
FTextureID tile = TexMan.CheckForTexture(argv[1], ETextureType::Any);
|
||||
if (!tile.isValid()) tile = tileGetTextureID((int)strtol(argv[1], nullptr, 10));
|
||||
HitInfoBase hit;
|
||||
hitscan(ps[0].actor->spr.pos, ps[0].cursector, DVector3(ps[0].actor->spr.Angles.Yaw.ToVector(), 0) * 1024, hit, CLIPMASK1);
|
||||
hitscan(getPlayer(0)->GetActor()->spr.pos, getPlayer(0)->cursector, DVector3(getPlayer(0)->GetActor()->spr.Angles.Yaw.ToVector(), 0) * 1024, hit, CLIPMASK1);
|
||||
if (hit.hitWall)
|
||||
{
|
||||
hit.hitWall->setwalltexture(tile);
|
||||
|
|
|
@ -96,7 +96,7 @@ void GameInterface::ExitFromMenu()
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void FTA(int q, player_struct* p)
|
||||
void FTA(int q, DukePlayer* p)
|
||||
{
|
||||
if (q < 0 || gamestate != GS_LEVEL)
|
||||
return;
|
||||
|
@ -105,7 +105,7 @@ void FTA(int q, player_struct* p)
|
|||
{
|
||||
p->ftq = q;
|
||||
auto qu = quoteMgr.GetQuote(q);
|
||||
if (p == &ps[screenpeek] && qu[0] != '\0')
|
||||
if (p == getPlayer(screenpeek) && qu[0] != '\0')
|
||||
{
|
||||
#if 0
|
||||
if (q >= 70 && q <= 72)
|
||||
|
@ -191,7 +191,7 @@ void V_AddBlend (float r, float g, float b, float a, float v_blend[4])
|
|||
|
||||
void drawweapon(double interpfrac)
|
||||
{
|
||||
auto pp = &ps[screenpeek];
|
||||
auto pp = getPlayer(screenpeek);
|
||||
if (!isRR() && pp->newOwner != nullptr)
|
||||
cameratext(pp->newOwner);
|
||||
else
|
||||
|
@ -211,11 +211,11 @@ void V_AddBlend (float r, float g, float b, float a, float v_blend[4])
|
|||
|
||||
void drawoverlays(double interpfrac)
|
||||
{
|
||||
player_struct* pp;
|
||||
DukePlayer* pp;
|
||||
DVector2 cposxy;
|
||||
DAngle cang;
|
||||
|
||||
pp = &ps[screenpeek];
|
||||
pp = getPlayer(screenpeek);
|
||||
// set palette here, in case the 3D view is off.
|
||||
setgamepalette(setpal(pp));
|
||||
|
||||
|
@ -270,10 +270,10 @@ void drawoverlays(double interpfrac)
|
|||
|
||||
DrawStatusBar();
|
||||
|
||||
if (ps[myconnectindex].newOwner == nullptr && ud.cameraactor == nullptr)
|
||||
if (getPlayer(myconnectindex)->newOwner == nullptr && ud.cameraactor == nullptr)
|
||||
{
|
||||
auto offsets = pp->Angles.getCrosshairOffsets(interpfrac);
|
||||
DrawCrosshair(ps[screenpeek].last_extra, offsets.first.X, offsets.first.Y + (pp->over_shoulder_on ? 2.5 : 0), isRR() ? 0.5 : 1, offsets.second);
|
||||
DrawCrosshair(getPlayer(screenpeek)->last_extra, offsets.first.X, offsets.first.Y + (pp->over_shoulder_on ? 2.5 : 0), isRR() ? 0.5 : 1, offsets.second);
|
||||
}
|
||||
|
||||
if (paused == 2)
|
||||
|
@ -377,7 +377,7 @@ bool GameInterface::DrawAutomapPlayer(const DVector2& mxy, const DVector2& cpos,
|
|||
DukeSectIterator it(ii);
|
||||
while (auto act = it.Next())
|
||||
{
|
||||
if (act == ps[screenpeek].actor || (act->spr.cstat & CSTAT_SPRITE_INVISIBLE) || act->spr.cstat == CSTAT_SPRITE_BLOCK_ALL || act->spr.scale.X == 0) continue;
|
||||
if (act == getPlayer(screenpeek)->GetActor() || (act->spr.cstat & CSTAT_SPRITE_INVISIBLE) || act->spr.cstat == CSTAT_SPRITE_BLOCK_ALL || act->spr.scale.X == 0) continue;
|
||||
|
||||
if ((act->spr.cstat & CSTAT_SPRITE_BLOCK_ALL) != 0)
|
||||
{
|
||||
|
@ -410,16 +410,16 @@ bool GameInterface::DrawAutomapPlayer(const DVector2& mxy, const DVector2& cpos,
|
|||
{
|
||||
if (p == screenpeek || ud.coop == 1)
|
||||
{
|
||||
auto& pp = ps[p];
|
||||
auto act = pp.GetActor();
|
||||
auto pp = getPlayer(p);
|
||||
auto act = pp->GetActor();
|
||||
|
||||
basetex = basetex + (act->vel.X > 1 && pp.on_ground ? (PlayClock >> 4) & 3 : 0);
|
||||
double j = clamp(czoom * act->spr.scale.Y + abs(pp.truefz - act->getOffsetZ()) * REPEAT_SCALE, (1. / 3.), 2.);
|
||||
basetex = basetex + (act->vel.X > 1 && pp->on_ground ? (PlayClock >> 4) & 3 : 0);
|
||||
double j = clamp(czoom * act->spr.scale.Y + abs(pp->truefz - act->getOffsetZ()) * REPEAT_SCALE, (1. / 3.), 2.);
|
||||
|
||||
auto const vec = OutAutomapVector(mxy - cpos, cangvect, czoom, xydim);
|
||||
auto const daang = -(pp.Angles.getCameraAngles().Yaw - cang).Normalized360().Degrees();
|
||||
auto const daang = -(pp->Angles.getCameraAngles().Yaw - cang).Normalized360().Degrees();
|
||||
|
||||
DrawTexture(twod, basetex, false, vec.X, vec.Y, DTA_TranslationIndex, TRANSLATION(Translation_Remap + setpal(&pp), act->spr.pal), DTA_CenterOffset, true,
|
||||
DrawTexture(twod, basetex, false, vec.X, vec.Y, DTA_TranslationIndex, TRANSLATION(Translation_Remap + setpal(pp), act->spr.pal), DTA_CenterOffset, true,
|
||||
DTA_Rotate, daang, DTA_Color, shadeToLight(act->spr.shade), DTA_ScaleX, j, DTA_ScaleY, j, TAG_DONE);
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -44,7 +44,7 @@ BEGIN_DUKE_NS
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void GameInterface::Ticker(const ticcmd_t* playercmds)
|
||||
void GameInterface::Ticker()
|
||||
{
|
||||
if (rtsplaying > 0) rtsplaying--;
|
||||
|
||||
|
@ -64,8 +64,7 @@ void GameInterface::Ticker(const ticcmd_t* playercmds)
|
|||
// this must be done before the view is backed up.
|
||||
for (int i = connecthead; i >= 0; i = connectpoint2[i])
|
||||
{
|
||||
ps[i].Angles.resetCameraAngles();
|
||||
ps[i].sync = playercmds[i].ucmd;
|
||||
getPlayer(i)->Angles.resetCameraAngles();
|
||||
}
|
||||
|
||||
// disable synchronised input if set by game.
|
||||
|
@ -83,7 +82,7 @@ void GameInterface::Ticker(const ticcmd_t* playercmds)
|
|||
|
||||
for (int i = connecthead; i >= 0; i = connectpoint2[i])
|
||||
{
|
||||
auto p = &ps[i];
|
||||
auto p = getPlayer(i);
|
||||
if (p->pals.a > 0)
|
||||
p->pals.a--;
|
||||
|
||||
|
@ -118,7 +117,7 @@ void GameInterface::Ticker(const ticcmd_t* playercmds)
|
|||
|
||||
void GameInterface::Startup()
|
||||
{
|
||||
ps[myconnectindex].ftq = 0;
|
||||
getPlayer(myconnectindex)->ftq = 0;
|
||||
PlayLogos(ga_mainmenunostopsound, ga_mainmenunostopsound, false);
|
||||
}
|
||||
|
||||
|
|
|
@ -260,17 +260,15 @@ void ClearGameVars(void)
|
|||
|
||||
void ResetGameVars(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i=0;i<iGameVarCount;i++)
|
||||
for (int i = 0; i < iGameVarCount; i++)
|
||||
{
|
||||
if (!(aGameVars[i].dwFlags & (GAMEVAR_FLAG_PLONG | GAMEVAR_FLAG_PFUNC)))
|
||||
{
|
||||
if (aGameVars[i].dwFlags & (GAMEVAR_FLAG_PERPLAYER))
|
||||
{
|
||||
for (auto &pl : ps)
|
||||
for (int j = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
pl.uservars[aGameVars[i].indexValue] = aGameVars[i].defaultValue;
|
||||
getPlayer(j)->uservars[aGameVars[i].indexValue] = aGameVars[i].defaultValue;
|
||||
}
|
||||
}
|
||||
else if (!(aGameVars[i].dwFlags & GAMEVAR_FLAG_PERACTOR))
|
||||
|
@ -307,7 +305,7 @@ GameVarValue GetGameVarID(int id, DDukeActor* sActor, int sPlayer)
|
|||
{
|
||||
// for the current player
|
||||
if (sPlayer >= 0 && sPlayer < MAXPLAYERS)
|
||||
return ps[sPlayer].uservars[aGameVars[id].indexValue];
|
||||
return getPlayer(sPlayer)->uservars[aGameVars[id].indexValue];
|
||||
|
||||
return aGameVars[id].initValue;
|
||||
}
|
||||
|
@ -367,12 +365,12 @@ void SetGameVarID(int id, GameVarValue lValue, DDukeActor* sActor, int sPlayer)
|
|||
if (sPlayer >= 0)
|
||||
{
|
||||
if (sPlayer < MAXPLAYERS)
|
||||
ps[sPlayer].uservars[aGameVars[id].indexValue] = lValue;
|
||||
getPlayer(sPlayer)->uservars[aGameVars[id].indexValue] = lValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = connecthead; i >= 0; i = connectpoint2[i])
|
||||
ps[i].uservars[aGameVars[id].indexValue] = lValue; // set for all players
|
||||
getPlayer(i)->uservars[aGameVars[id].indexValue] = lValue; // set for all players
|
||||
aGameVars[id].initValue = lValue;
|
||||
}
|
||||
}
|
||||
|
@ -520,21 +518,21 @@ static int i_aplWeaponFireSound[MAX_WEAPONS]; // Sound made when firing (each ti
|
|||
static int i_aplWeaponSound2Time[MAX_WEAPONS]; // Alternate sound time
|
||||
static int i_aplWeaponSound2Sound[MAX_WEAPONS]; // Alternate sound sound ID
|
||||
|
||||
int aplWeaponClip(int weapon, int player) { return ps[player].uservars[i_aplWeaponClip[weapon]].safeValue(); }
|
||||
int aplWeaponReload(int weapon, int player) { return ps[player].uservars[i_aplWeaponReload[weapon]].safeValue(); }
|
||||
int aplWeaponFireDelay(int weapon, int player) { return ps[player].uservars[i_aplWeaponFireDelay[weapon]].safeValue(); }
|
||||
int aplWeaponHoldDelay(int weapon, int player) { return ps[player].uservars[i_aplWeaponHoldDelay[weapon]].safeValue(); }
|
||||
int aplWeaponTotalTime(int weapon, int player) { return ps[player].uservars[i_aplWeaponTotalTime[weapon]].safeValue(); }
|
||||
int aplWeaponFlags(int weapon, int player) { return ps[player].uservars[i_aplWeaponFlags[weapon]].safeValue(); }
|
||||
int aplWeaponShoots(int weapon, int player) { return ps[player].uservars[i_aplWeaponShoots[weapon]].safeValue(); }
|
||||
int aplWeaponSpawnTime(int weapon, int player) { return ps[player].uservars[i_aplWeaponSpawnTime[weapon]].safeValue(); }
|
||||
int aplWeaponSpawn(int weapon, int player) { return ps[player].uservars[i_aplWeaponSpawn[weapon]].safeValue(); }
|
||||
int aplWeaponShotsPerBurst(int weapon, int player) { return ps[player].uservars[i_aplWeaponShotsPerBurst[weapon]].safeValue(); }
|
||||
int aplWeaponWorksLike(int weapon, int player) { return ps[player].uservars[i_aplWeaponWorksLike[weapon]].safeValue(); }
|
||||
int aplWeaponInitialSound(int weapon, int player) { return ps[player].uservars[i_aplWeaponInitialSound[weapon]].safeValue(); }
|
||||
int aplWeaponFireSound(int weapon, int player) { return ps[player].uservars[i_aplWeaponFireSound[weapon]].safeValue(); }
|
||||
int aplWeaponSound2Time(int weapon, int player) { return ps[player].uservars[i_aplWeaponSound2Time[weapon]].safeValue(); }
|
||||
int aplWeaponSound2Sound(int weapon, int player) { return ps[player].uservars[i_aplWeaponSound2Sound[weapon]].safeValue(); }
|
||||
int aplWeaponClip(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponClip[weapon]].safeValue(); }
|
||||
int aplWeaponReload(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponReload[weapon]].safeValue(); }
|
||||
int aplWeaponFireDelay(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponFireDelay[weapon]].safeValue(); }
|
||||
int aplWeaponHoldDelay(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponHoldDelay[weapon]].safeValue(); }
|
||||
int aplWeaponTotalTime(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponTotalTime[weapon]].safeValue(); }
|
||||
int aplWeaponFlags(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponFlags[weapon]].safeValue(); }
|
||||
int aplWeaponShoots(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponShoots[weapon]].safeValue(); }
|
||||
int aplWeaponSpawnTime(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponSpawnTime[weapon]].safeValue(); }
|
||||
int aplWeaponSpawn(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponSpawn[weapon]].safeValue(); }
|
||||
int aplWeaponShotsPerBurst(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponShotsPerBurst[weapon]].safeValue(); }
|
||||
int aplWeaponWorksLike(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponWorksLike[weapon]].safeValue(); }
|
||||
int aplWeaponInitialSound(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponInitialSound[weapon]].safeValue(); }
|
||||
int aplWeaponFireSound(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponFireSound[weapon]].safeValue(); }
|
||||
int aplWeaponSound2Time(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponSound2Time[weapon]].safeValue(); }
|
||||
int aplWeaponSound2Sound(int weapon, int player) { return getPlayer(player)->uservars[i_aplWeaponSound2Sound[weapon]].safeValue(); }
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
|
@ -1222,7 +1220,7 @@ void FinalizeGameVars(void)
|
|||
aGameVars[i].indexValue = actorNdx++;
|
||||
}
|
||||
}
|
||||
for (auto& pl : ps) pl.uservars.Resize(weapNdx);
|
||||
for (int i = 0; i < MAXPLAYERS; i++) getPlayer(i)->uservars.Resize(weapNdx);
|
||||
ResetGameVars();
|
||||
|
||||
numActorVars = actorNdx;
|
||||
|
|
|
@ -45,9 +45,6 @@ user_defs ud; // partially serialized
|
|||
DukeGameInfo gs;
|
||||
int screenpeek;
|
||||
|
||||
// serialized
|
||||
player_struct ps[MAXPLAYERS];
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
//
|
||||
// variables that only need an export if the entire game logic gets scriptified.
|
||||
|
|
|
@ -70,7 +70,6 @@ extern int screenpeek;
|
|||
// Variables that must be saved
|
||||
extern int rtsplaying;
|
||||
|
||||
extern player_struct ps[MAXPLAYERS];
|
||||
extern int spriteqamount;
|
||||
extern int lastvisinc;
|
||||
extern animwalltype animwall[MAXANIMWALLS];
|
||||
|
|
|
@ -61,7 +61,7 @@ inline static void hud_drawpal(double x, double y, const char* tilenum, int shad
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
static void displayloogie(player_struct* p, double const interpfrac)
|
||||
static void displayloogie(DukePlayer* p, double const interpfrac)
|
||||
{
|
||||
if (p->loogcnt == 0) return;
|
||||
|
||||
|
@ -84,7 +84,7 @@ static void displayloogie(player_struct* p, double const interpfrac)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
static bool animatefist(int gs, player_struct* p, double xoffset, double yoffset, int fistpal, double const interpfrac)
|
||||
static bool animatefist(int gs, DukePlayer* p, double xoffset, double yoffset, int fistpal, double const interpfrac)
|
||||
{
|
||||
const double fisti = min(interpolatedvalue<double>(p->ofist_incs, p->fist_incs, interpfrac), 32.);
|
||||
if (fisti <= 0) return false;
|
||||
|
@ -103,7 +103,7 @@ static bool animatefist(int gs, player_struct* p, double xoffset, double yoffset
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
static bool animateknee(int gs, player_struct* p, double xoffset, double yoffset, int pal, double const interpfrac, DAngle angle)
|
||||
static bool animateknee(int gs, DukePlayer* p, double xoffset, double yoffset, int pal, double const interpfrac, DAngle angle)
|
||||
{
|
||||
if (p->knee_incs > 11 || p->knee_incs == 0 || p->GetActor()->spr.extra <= 0) return false;
|
||||
|
||||
|
@ -121,7 +121,7 @@ static bool animateknee(int gs, player_struct* p, double xoffset, double yoffset
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
static bool animateknuckles(int gs, player_struct* p, double xoffset, double yoffset, int pal, DAngle angle)
|
||||
static bool animateknuckles(int gs, DukePlayer* p, double xoffset, double yoffset, int pal, DAngle angle)
|
||||
{
|
||||
if (isWW2GI() || p->over_shoulder_on != 0 || p->knuckle_incs == 0 || p->GetActor()->spr.extra <= 0) return false;
|
||||
static const char* const frames[] = { "CRACKKNUCKLES0", "CRACKKNUCKLES1", "CRACKKNUCKLES2", "CRACKKNUCKLES3" };
|
||||
|
@ -141,7 +141,7 @@ static bool animateknuckles(int gs, player_struct* p, double xoffset, double yof
|
|||
|
||||
void displaymasks_d(int snum, int p, double interpfrac)
|
||||
{
|
||||
if (ps[snum].scuba_on)
|
||||
if (getPlayer(snum)->scuba_on)
|
||||
{
|
||||
auto scuba0 = TexMan.CheckForTexture("SCUBAMASK", ETextureType::Any);
|
||||
auto tex0 = TexMan.GetGameTexture(scuba0);
|
||||
|
@ -158,7 +158,7 @@ void displaymasks_d(int snum, int p, double interpfrac)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
static bool animatetip(int gs, player_struct* p, double xoffset, double yoffset, int pal, double const interpfrac, DAngle angle)
|
||||
static bool animatetip(int gs, DukePlayer* p, double xoffset, double yoffset, int pal, double const interpfrac, DAngle angle)
|
||||
{
|
||||
if (p->tipincs == 0) return false;
|
||||
|
||||
|
@ -177,7 +177,7 @@ static bool animatetip(int gs, player_struct* p, double xoffset, double yoffset,
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
static bool animateaccess(int gs, player_struct* p, double xoffset, double yoffset, double const interpfrac, DAngle angle)
|
||||
static bool animateaccess(int gs, DukePlayer* p, double xoffset, double yoffset, double const interpfrac, DAngle angle)
|
||||
{
|
||||
if (p->access_incs == 0 || p->GetActor()->spr.extra <= 0) return false;
|
||||
|
||||
|
@ -201,10 +201,10 @@ static bool animateaccess(int gs, player_struct* p, double xoffset, double yoffs
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void animateshrunken(player_struct* p, double xoffset, double yoffset, int8_t shade, int o, double interpfrac)
|
||||
void animateshrunken(DukePlayer* p, double xoffset, double yoffset, int8_t shade, int o, double interpfrac)
|
||||
{
|
||||
const double fistsign = BobVal(interpolatedvalue<double>(p->ofistsign, p->fistsign, interpfrac)) * 16;
|
||||
int pal = ps[screenpeek].cursector->floorpal;
|
||||
int pal = getPlayer(screenpeek)->cursector->floorpal;
|
||||
if (p->jetpack_on == 0) yoffset += 32 - (p->GetActor()->vel.X * 8);
|
||||
hud_drawpal(250 + fistsign + xoffset, 258 - fabs(fistsign * 4) + yoffset, "FIST", shade, o, pal, nullAngle);
|
||||
hud_drawpal(40 - fistsign + xoffset, 200 + fabs(fistsign * 4) + yoffset, "FIST", shade, o | 4, pal, nullAngle);
|
||||
|
@ -220,7 +220,7 @@ void animateshrunken(player_struct* p, double xoffset, double yoffset, int8_t sh
|
|||
void displayweapon_d(int snum, double interpfrac)
|
||||
{
|
||||
int pal, pal2;
|
||||
player_struct* p = &ps[snum];
|
||||
DukePlayer* p = getPlayer(snum);
|
||||
|
||||
if (p->newOwner != nullptr || ud.cameraactor != nullptr || p->over_shoulder_on > 0 || (p->GetActor()->spr.pal != 1 && p->GetActor()->spr.extra <= 0))
|
||||
return;
|
||||
|
|
|
@ -52,7 +52,7 @@ inline static void hud_drawpal(double x, double y, const char* tilenum, int shad
|
|||
|
||||
void displaymasks_r(int snum, int p, double interpfrac)
|
||||
{
|
||||
if (ps[snum].scuba_on)
|
||||
if (getPlayer(snum)->scuba_on)
|
||||
{
|
||||
auto scuba0 = TexMan.CheckForTexture("SCUBAMASK0", ETextureType::Any);
|
||||
auto scuba3 = TexMan.CheckForTexture("SCUBAMASK3", ETextureType::Any);
|
||||
|
@ -208,14 +208,14 @@ void DrawBoat(int const kb, const DVector2& offsets, DAngle angle, int shade, in
|
|||
//
|
||||
//
|
||||
//---------------------------------------------------------------------------
|
||||
void animateshrunken(player_struct* p, double xoffset, double yoffset, int8_t shade, int o, double interpfrac);
|
||||
void animateshrunken(DukePlayer* p, double xoffset, double yoffset, int8_t shade, int o, double interpfrac);
|
||||
|
||||
void displayweapon_r(int snum, double interpfrac)
|
||||
{
|
||||
double weapon_sway, gun_pos, hard_landing;
|
||||
DAngle TiltStatus;
|
||||
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
auto kb = &p->kickback_pic;
|
||||
|
||||
int o = 0;
|
||||
|
|
|
@ -10,6 +10,11 @@
|
|||
// all inline functions.
|
||||
BEGIN_DUKE_NS
|
||||
|
||||
inline DukePlayer* getPlayer(int index)
|
||||
{
|
||||
return static_cast<DukePlayer*>(PlayerArray[index]);
|
||||
}
|
||||
|
||||
inline int rnd(int X)
|
||||
{
|
||||
return ((krand() >> 8) >= (255 - (X)));
|
||||
|
@ -79,7 +84,7 @@ inline int checkcursectnums(sectortype* se)
|
|||
{
|
||||
int i;
|
||||
for(i=connecthead;i>=0;i=connectpoint2[i])
|
||||
if(ps[i].GetActor() && ps[i].GetActor()->sector() == se ) return i;
|
||||
if(getPlayer(i)->GetActor() && getPlayer(i)->GetActor()->sector() == se ) return i;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -103,64 +108,64 @@ inline bool isIn(int value, const std::initializer_list<int>& list)
|
|||
// these are mainly here to avoid directly accessing the input data so that it can be more easily refactored later.
|
||||
inline bool PlayerInput(int pl, ESyncBits bit)
|
||||
{
|
||||
return (!!((ps[pl].sync.actions) & bit));
|
||||
return (!!((getPlayer(pl)->cmd.ucmd.actions) & bit));
|
||||
}
|
||||
|
||||
inline ESyncBits PlayerInputBits(int pl, ESyncBits bits)
|
||||
{
|
||||
return (ps[pl].sync.actions & bits);
|
||||
return (getPlayer(pl)->cmd.ucmd.actions & bits);
|
||||
}
|
||||
|
||||
inline void PlayerSetInput(int pl, ESyncBits bit)
|
||||
{
|
||||
ps[pl].sync.actions |= bit;
|
||||
getPlayer(pl)->cmd.ucmd.actions |= bit;
|
||||
}
|
||||
|
||||
|
||||
inline int PlayerNewWeapon(int pl)
|
||||
{
|
||||
return ps[pl].sync.getNewWeapon();
|
||||
return getPlayer(pl)->cmd.ucmd.getNewWeapon();
|
||||
}
|
||||
|
||||
inline void PlayerSetItemUsed(int pl, int num)
|
||||
{
|
||||
ps[pl].sync.setItemUsed(num - 1);
|
||||
getPlayer(pl)->cmd.ucmd.setItemUsed(num - 1);
|
||||
}
|
||||
|
||||
inline bool PlayerUseItem(int pl, int num)
|
||||
{
|
||||
return ps[pl].sync.isItemUsed(num - 1);
|
||||
return getPlayer(pl)->cmd.ucmd.isItemUsed(num - 1);
|
||||
}
|
||||
|
||||
inline float PlayerInputSideVel(int pl)
|
||||
{
|
||||
return ps[pl].sync.svel;
|
||||
return getPlayer(pl)->cmd.ucmd.svel;
|
||||
}
|
||||
|
||||
inline float PlayerInputForwardVel(int pl)
|
||||
{
|
||||
return ps[pl].sync.fvel;
|
||||
return getPlayer(pl)->cmd.ucmd.fvel;
|
||||
}
|
||||
|
||||
inline float PlayerInputAngVel(int pl)
|
||||
{
|
||||
return ps[pl].sync.avel;
|
||||
return getPlayer(pl)->cmd.ucmd.avel;
|
||||
}
|
||||
|
||||
inline DAngle GetPlayerHorizon(int pl)
|
||||
{
|
||||
return DAngle::fromDeg(ps[pl].sync.horz);
|
||||
return DAngle::fromDeg(getPlayer(pl)->cmd.ucmd.horz);
|
||||
}
|
||||
|
||||
inline void clearfriction()
|
||||
{
|
||||
for (int i = 0; i != -1; i = connectpoint2[i])
|
||||
{
|
||||
ps[i].fric.X = ps[i].fric.Y = 0;
|
||||
getPlayer(i)->fric.X = getPlayer(i)->fric.Y = 0;
|
||||
}
|
||||
}
|
||||
|
||||
inline void SetPlayerPal(player_struct* p, PalEntry pe)
|
||||
inline void SetPlayerPal(DukePlayer* p, PalEntry pe)
|
||||
{
|
||||
p->pals = pe;
|
||||
}
|
||||
|
@ -170,7 +175,7 @@ inline bool playrunning()
|
|||
return (paused == 0 || (paused == 1 && (ud.recstat == 2 || ud.multimode > 1)));
|
||||
}
|
||||
|
||||
inline void doslopetilting(player_struct* p)
|
||||
inline void doslopetilting(DukePlayer* p)
|
||||
{
|
||||
p->Angles.doViewPitch(p->aim_mode == 0 && p->on_ground && p->cursector->lotag != ST_2_UNDERWATER);
|
||||
}
|
||||
|
@ -273,10 +278,10 @@ inline int monsterCheatCheck(DDukeActor* self)
|
|||
|
||||
inline void processinputvel(int snum)
|
||||
{
|
||||
const auto p = &ps[snum];
|
||||
const auto velvect = DVector2(p->sync.fvel, p->sync.svel).Rotated(p->GetActor()->spr.Angles.Yaw) + p->fric;
|
||||
p->sync.fvel = (float)velvect.X;
|
||||
p->sync.svel = (float)velvect.Y;
|
||||
const auto p = getPlayer(snum);
|
||||
const auto velvect = DVector2(p->cmd.ucmd.fvel, p->cmd.ucmd.svel).Rotated(p->GetActor()->spr.Angles.Yaw) + p->fric;
|
||||
p->cmd.ucmd.fvel = (float)velvect.X;
|
||||
p->cmd.ucmd.svel = (float)velvect.Y;
|
||||
}
|
||||
|
||||
|
||||
|
@ -338,7 +343,7 @@ inline void subkill(DDukeActor* actor)
|
|||
}
|
||||
}
|
||||
|
||||
inline void dokill(player_struct* p, DDukeActor* g_ac, int amount)
|
||||
inline void dokill(DukePlayer* p, DDukeActor* g_ac, int amount)
|
||||
{
|
||||
if (g_ac->spriteextra < 1 || g_ac->spriteextra == 128 || !isRR())
|
||||
{
|
||||
|
|
|
@ -54,25 +54,25 @@ void hud_input(int plnum)
|
|||
{
|
||||
int i, k;
|
||||
uint8_t dainv;
|
||||
player_struct* p;
|
||||
DukePlayer* p;
|
||||
|
||||
p = &ps[plnum];
|
||||
p = getPlayer(plnum);
|
||||
auto pact = p->GetActor();
|
||||
|
||||
i = p->aim_mode;
|
||||
p->aim_mode = !PlayerInput(plnum, SB_AIMMODE);
|
||||
if (p->aim_mode < i)
|
||||
p->sync.actions |= SB_CENTERVIEW;
|
||||
p->cmd.ucmd.actions |= SB_CENTERVIEW;
|
||||
|
||||
// Backup weapon here as hud_input() is the first function where any one of the weapon variables can change.
|
||||
p->backupweapon();
|
||||
|
||||
if (isRR() && (p->sync.actions & SB_CROUCH)) p->sync.actions &= ~SB_JUMP;
|
||||
if (isRR() && (p->cmd.ucmd.actions & SB_CROUCH)) p->cmd.ucmd.actions &= ~SB_JUMP;
|
||||
|
||||
if ((isRR() && p->drink_amt > 88))
|
||||
p->sync.actions |= SB_LOOK_LEFT;
|
||||
p->cmd.ucmd.actions |= SB_LOOK_LEFT;
|
||||
if ((isRR() && p->drink_amt > 99))
|
||||
p->sync.actions |= SB_LOOK_DOWN;
|
||||
p->cmd.ucmd.actions |= SB_LOOK_DOWN;
|
||||
|
||||
if (isRR())
|
||||
{
|
||||
|
@ -482,7 +482,7 @@ void hud_input(int plnum)
|
|||
OnEvent(EVENT_TURNAROUND, plnum, nullptr, -1);
|
||||
if (GetGameVarID(g_iReturnVarID, nullptr, plnum).value() != 0)
|
||||
{
|
||||
p->sync.actions &= ~SB_TURNAROUND;
|
||||
p->cmd.ucmd.actions &= ~SB_TURNAROUND;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -496,7 +496,7 @@ void hud_input(int plnum)
|
|||
|
||||
unsigned GameInterface::getCrouchState()
|
||||
{
|
||||
const auto p = &ps[myconnectindex];
|
||||
const auto p = getPlayer(myconnectindex);
|
||||
const int sectorLotag = p->insector() ? p->cursector->lotag : 0;
|
||||
const int crouchable = sectorLotag != ST_2_UNDERWATER && (sectorLotag != ST_1_ABOVE_WATER || p->spritebridge) && !p->jetpack_on;
|
||||
const int disableToggle = (!crouchable && p->on_ground) || p->jetpack_on || (isRRRA() && (p->OnMotorcycle || p->OnBoat));
|
||||
|
@ -511,7 +511,7 @@ unsigned GameInterface::getCrouchState()
|
|||
|
||||
void GameInterface::doPlayerMovement(const float scaleAdjust)
|
||||
{
|
||||
auto const p = &ps[myconnectindex];
|
||||
auto const p = getPlayer(myconnectindex);
|
||||
|
||||
if (isRRRA() && (p->OnMotorcycle || p->OnBoat))
|
||||
{
|
||||
|
|
|
@ -32,8 +32,8 @@ BEGIN_DUKE_NS
|
|||
|
||||
int madenoise(int snum)
|
||||
{
|
||||
player_struct *p;
|
||||
p = &ps[snum];
|
||||
DukePlayer *p;
|
||||
p = getPlayer(snum);
|
||||
p->donoise = 1;
|
||||
p->noise = p->GetActor()->spr.pos.XY();
|
||||
return 1;
|
||||
|
@ -41,7 +41,7 @@ int madenoise(int snum)
|
|||
|
||||
int wakeup(DDukeActor* actor, int snum)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
if (!p->donoise)
|
||||
return 0;
|
||||
if (actor->spr.pal == 30 || actor->spr.pal == 32 || actor->spr.pal == 33 || (isRRRA() && actor->spr.pal == 8))
|
||||
|
|
|
@ -59,17 +59,17 @@ void PlayerColorChanged(void)
|
|||
if (ud.recstat != 0)
|
||||
return;
|
||||
|
||||
auto& pp = ps[myconnectindex];
|
||||
auto pp = getPlayer(myconnectindex);
|
||||
if (ud.multimode > 1)
|
||||
{
|
||||
//Net_SendClientInfo();
|
||||
}
|
||||
else
|
||||
{
|
||||
pp.palookup = ud.user_pals[myconnectindex] = playercolor2lookup(playercolor);
|
||||
pp->palookup = ud.user_pals[myconnectindex] = playercolor2lookup(playercolor);
|
||||
}
|
||||
if (pp.GetActor()->isPlayer() && pp.GetActor()->spr.pal != 1)
|
||||
pp.GetActor()->spr.pal = ud.user_pals[myconnectindex];
|
||||
if (pp->GetActor()->isPlayer() && pp->GetActor()->spr.pal != 1)
|
||||
pp->GetActor()->spr.pal = ud.user_pals[myconnectindex];
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
@ -78,7 +78,7 @@ void PlayerColorChanged(void)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
int setpal(player_struct* p)
|
||||
int setpal(DukePlayer* p)
|
||||
{
|
||||
int palette;
|
||||
if (p->DrugMode) palette = DRUGPAL;
|
||||
|
@ -96,7 +96,7 @@ int setpal(player_struct* p)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void quickkill(player_struct* p)
|
||||
void quickkill(DukePlayer* p)
|
||||
{
|
||||
SetPlayerPal(p, PalEntry(48, 48, 48, 48));
|
||||
|
||||
|
@ -113,12 +113,12 @@ void quickkill(player_struct* p)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void forceplayerangle(player_struct* p)
|
||||
void forceplayerangle(DukePlayer* p)
|
||||
{
|
||||
const auto ang = (DAngle22_5 - randomAngle(45)) / 2.;
|
||||
|
||||
p->GetActor()->spr.Angles.Pitch -= DAngle::fromDeg(26.566);
|
||||
p->sync.actions |= SB_CENTERVIEW;
|
||||
p->cmd.ucmd.actions |= SB_CENTERVIEW;
|
||||
p->Angles.ViewAngles.Yaw = ang;
|
||||
p->Angles.ViewAngles.Roll = -ang;
|
||||
}
|
||||
|
@ -174,7 +174,7 @@ double hitasprite(DDukeActor* actor, DDukeActor** hitsp)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
double hitawall(player_struct* p, walltype** hitw)
|
||||
double hitawall(DukePlayer* p, walltype** hitw)
|
||||
{
|
||||
HitInfo hit{};
|
||||
|
||||
|
@ -203,7 +203,7 @@ DDukeActor* aim(DDukeActor* actor, int abase, bool force, bool* b)
|
|||
// Autoaim from DukeGDX.
|
||||
if (actor->isPlayer())
|
||||
{
|
||||
auto* plr = &ps[actor->PlayerIndex()];
|
||||
auto* plr = getPlayer(actor->PlayerIndex());
|
||||
int autoaim = force? 1 : Autoaim(actor->PlayerIndex());
|
||||
|
||||
bool ww2gipistol = (plr->curr_weapon == PISTOL_WEAPON && isWW2GI());
|
||||
|
@ -267,13 +267,13 @@ DDukeActor* aim(DDukeActor* actor, int abase, bool force, bool* b)
|
|||
}
|
||||
else if (isWW2GI())
|
||||
{
|
||||
gotshrinker = actor->isPlayer() && aplWeaponWorksLike(ps[actor->PlayerIndex()].curr_weapon, actor->PlayerIndex()) == SHRINKER_WEAPON;
|
||||
gotfreezer = actor->isPlayer() && aplWeaponWorksLike(ps[actor->PlayerIndex()].curr_weapon, actor->PlayerIndex()) == FREEZE_WEAPON;
|
||||
gotshrinker = actor->isPlayer() && aplWeaponWorksLike(getPlayer(actor->PlayerIndex())->curr_weapon, actor->PlayerIndex()) == SHRINKER_WEAPON;
|
||||
gotfreezer = actor->isPlayer() && aplWeaponWorksLike(getPlayer(actor->PlayerIndex())->curr_weapon, actor->PlayerIndex()) == FREEZE_WEAPON;
|
||||
}
|
||||
else
|
||||
{
|
||||
gotshrinker = actor->isPlayer() && ps[actor->PlayerIndex()].curr_weapon == SHRINKER_WEAPON;
|
||||
gotfreezer = actor->isPlayer() && ps[actor->PlayerIndex()].curr_weapon == FREEZE_WEAPON;
|
||||
gotshrinker = actor->isPlayer() && getPlayer(actor->PlayerIndex())->curr_weapon == SHRINKER_WEAPON;
|
||||
gotfreezer = actor->isPlayer() && getPlayer(actor->PlayerIndex())->curr_weapon == FREEZE_WEAPON;
|
||||
}
|
||||
|
||||
double smax = 0x7fffffff;
|
||||
|
@ -318,7 +318,7 @@ DDukeActor* aim(DDukeActor* actor, int abase, bool force, bool* b)
|
|||
if (actor->isPlayer())
|
||||
{
|
||||
double checkval = (act->spr.pos.Z - actor->spr.pos.Z) * 1.25 / sdist;
|
||||
double horiz = ps[actor->PlayerIndex()].Angles.getPitchWithView().Tan();
|
||||
double horiz = getPlayer(actor->PlayerIndex())->Angles.getPitchWithView().Tan();
|
||||
check = abs(checkval - horiz) < 0.78125;
|
||||
}
|
||||
else check = 1;
|
||||
|
@ -354,7 +354,7 @@ DDukeActor* aim_(DDukeActor* actor, DDukeActor* weapon, double aimangle, bool* b
|
|||
|
||||
void dokneeattack(int snum)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
auto pact = p->GetActor();
|
||||
|
||||
if (p->knee_incs > 0)
|
||||
|
@ -362,7 +362,7 @@ void dokneeattack(int snum)
|
|||
p->oknee_incs = p->knee_incs;
|
||||
p->knee_incs++;
|
||||
pact->spr.Angles.Pitch = (pact->getPosWithOffsetZ() - p->actorsqu->spr.pos.plusZ(-4)).Pitch();
|
||||
p->sync.actions |= SB_CENTERVIEW;
|
||||
p->cmd.ucmd.actions |= SB_CENTERVIEW;
|
||||
if (p->knee_incs > 15)
|
||||
{
|
||||
p->oknee_incs = p->knee_incs = 0;
|
||||
|
@ -382,8 +382,8 @@ void dokneeattack(int snum)
|
|||
|
||||
if (p->actorsqu->isPlayer())
|
||||
{
|
||||
quickkill(&ps[p->actorsqu->PlayerIndex()]);
|
||||
ps[p->actorsqu->PlayerIndex()].frag_ps = snum;
|
||||
quickkill(getPlayer(p->actorsqu->PlayerIndex()));
|
||||
getPlayer(p->actorsqu->PlayerIndex())->frag_ps = snum;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -405,7 +405,7 @@ void dokneeattack(int snum)
|
|||
|
||||
int makepainsounds(int snum, int type)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
auto actor = p->GetActor();
|
||||
int k = 0;
|
||||
|
||||
|
@ -478,7 +478,7 @@ int makepainsounds(int snum, int type)
|
|||
|
||||
void footprints(int snum)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
auto actor = p->GetActor();
|
||||
|
||||
if (p->footprintcount > 0 && p->on_ground)
|
||||
|
@ -504,7 +504,7 @@ void footprints(int snum)
|
|||
DDukeActor* fprint = spawn(actor, DukeFootprintsClass);
|
||||
if (fprint)
|
||||
{
|
||||
fprint->spr.Angles.Yaw = p->actor->spr.Angles.Yaw;
|
||||
fprint->spr.Angles.Yaw = p->GetActor()->spr.Angles.Yaw;
|
||||
fprint->spr.pal = p->footprintpal;
|
||||
fprint->spr.shade = (int8_t)p->footprintshade;
|
||||
}
|
||||
|
@ -521,7 +521,7 @@ void footprints(int snum)
|
|||
|
||||
void playerisdead(int snum, int psectlotag, double floorz, double ceilingz)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
auto actor = p->GetActor();
|
||||
|
||||
// lock input when dead.
|
||||
|
@ -555,8 +555,8 @@ void playerisdead(int snum, int psectlotag, double floorz, double ceilingz)
|
|||
{
|
||||
if (p->frag_ps != snum)
|
||||
{
|
||||
ps[p->frag_ps].frag++;
|
||||
ps[p->frag_ps].frags[snum]++;
|
||||
getPlayer(p->frag_ps)->frag++;
|
||||
getPlayer(p->frag_ps)->frags[snum]++;
|
||||
|
||||
auto pname = PlayerName(p->frag_ps);
|
||||
if (snum == screenpeek)
|
||||
|
@ -615,7 +615,7 @@ void playerisdead(int snum, int psectlotag, double floorz, double ceilingz)
|
|||
|
||||
int endoflevel(int snum)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
|
||||
// the fist puching the end-of-level thing...
|
||||
p->ofist_incs = p->fist_incs;
|
||||
|
@ -644,7 +644,7 @@ int endoflevel(int snum)
|
|||
|
||||
int timedexit(int snum)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
p->timebeforeexit--;
|
||||
if (p->timebeforeexit == 26 * 5)
|
||||
{
|
||||
|
@ -671,22 +671,22 @@ int timedexit(int snum)
|
|||
|
||||
void playerCrouch(int snum)
|
||||
{
|
||||
const auto p = &ps[snum];
|
||||
const auto p = getPlayer(snum);
|
||||
const auto pact = p->GetActor();
|
||||
const auto nVelMoveDown = abs(p->sync.uvel * (p->sync.uvel < 0));
|
||||
const auto nVelMoveDown = abs(p->cmd.ucmd.uvel * (p->cmd.ucmd.uvel < 0));
|
||||
constexpr double vel = 8 + 3;
|
||||
SetGameVarID(g_iReturnVarID, 0, pact, snum);
|
||||
OnEvent(EVENT_CROUCH, snum, pact, -1);
|
||||
if (GetGameVarID(g_iReturnVarID, pact, snum).value() == 0)
|
||||
{
|
||||
pact->spr.pos.Z += clamp(vel * !!(p->sync.actions & SB_CROUCH) + vel * nVelMoveDown, -vel, vel);
|
||||
pact->spr.pos.Z += clamp(vel * !!(p->cmd.ucmd.actions & SB_CROUCH) + vel * nVelMoveDown, -vel, vel);
|
||||
p->crack_time = CRACK_TIME;
|
||||
}
|
||||
}
|
||||
|
||||
void playerJump(int snum, double floorz, double ceilingz)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
if (p->jumping_toggle == 0 && p->jumping_counter == 0)
|
||||
{
|
||||
if ((floorz - ceilingz) > 56)
|
||||
|
@ -708,7 +708,7 @@ void playerJump(int snum, double floorz, double ceilingz)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void player_struct::apply_seasick()
|
||||
void DukePlayer::apply_seasick()
|
||||
{
|
||||
if (isRRRA() && SeaSick && (dead_flag == 0))
|
||||
{
|
||||
|
@ -736,7 +736,7 @@ void player_struct::apply_seasick()
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void player_struct::backuppos(bool noclipping)
|
||||
void DukePlayer::backuppos(bool noclipping)
|
||||
{
|
||||
if (!noclipping)
|
||||
{
|
||||
|
@ -758,7 +758,7 @@ void player_struct::backuppos(bool noclipping)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void player_struct::backupweapon()
|
||||
void DukePlayer::backupweapon()
|
||||
{
|
||||
oweapon_sway = weapon_sway;
|
||||
oweapon_pos = weapon_pos;
|
||||
|
@ -779,7 +779,7 @@ void player_struct::backupweapon()
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void player_struct::checkhardlanding()
|
||||
void DukePlayer::checkhardlanding()
|
||||
{
|
||||
if (hard_landing > 0)
|
||||
{
|
||||
|
@ -788,7 +788,7 @@ void player_struct::checkhardlanding()
|
|||
}
|
||||
}
|
||||
|
||||
void player_struct::playerweaponsway(double xvel)
|
||||
void DukePlayer::playerweaponsway(double xvel)
|
||||
{
|
||||
if (cl_weaponsway)
|
||||
{
|
||||
|
@ -820,7 +820,7 @@ void player_struct::playerweaponsway(double xvel)
|
|||
|
||||
void checklook(int snum, ESyncBits actions)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
|
||||
if ((actions & SB_LOOK_LEFT) && !p->OnMotorcycle)
|
||||
{
|
||||
|
@ -851,70 +851,70 @@ void checklook(int snum, ESyncBits actions)
|
|||
|
||||
void playerCenterView(int snum)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
SetGameVarID(g_iReturnVarID, 0, p->GetActor(), snum);
|
||||
OnEvent(EVENT_RETURNTOCENTER, snum, p->GetActor(), -1);
|
||||
if (GetGameVarID(g_iReturnVarID, p->GetActor(), snum).value() == 0)
|
||||
{
|
||||
p->sync.actions |= SB_CENTERVIEW;
|
||||
p->sync.horz = 0;
|
||||
p->cmd.ucmd.actions |= SB_CENTERVIEW;
|
||||
p->cmd.ucmd.horz = 0;
|
||||
setForcedSyncInput(snum);
|
||||
}
|
||||
else
|
||||
{
|
||||
p->sync.actions &= ~SB_CENTERVIEW;
|
||||
p->cmd.ucmd.actions &= ~SB_CENTERVIEW;
|
||||
}
|
||||
}
|
||||
|
||||
void playerLookUp(int snum, ESyncBits actions)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
SetGameVarID(g_iReturnVarID, 0, p->GetActor(), snum);
|
||||
OnEvent(EVENT_LOOKUP, snum, p->GetActor(), -1);
|
||||
if (GetGameVarID(g_iReturnVarID, p->GetActor(), snum).value() == 0)
|
||||
{
|
||||
p->sync.actions |= SB_CENTERVIEW;
|
||||
p->cmd.ucmd.actions |= SB_CENTERVIEW;
|
||||
}
|
||||
else
|
||||
{
|
||||
p->sync.actions &= ~SB_LOOK_UP;
|
||||
p->cmd.ucmd.actions &= ~SB_LOOK_UP;
|
||||
}
|
||||
}
|
||||
|
||||
void playerLookDown(int snum, ESyncBits actions)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
SetGameVarID(g_iReturnVarID, 0, p->GetActor(), snum);
|
||||
OnEvent(EVENT_LOOKDOWN, snum, p->GetActor(), -1);
|
||||
if (GetGameVarID(g_iReturnVarID, p->GetActor(), snum).value() == 0)
|
||||
{
|
||||
p->sync.actions |= SB_CENTERVIEW;
|
||||
p->cmd.ucmd.actions |= SB_CENTERVIEW;
|
||||
}
|
||||
else
|
||||
{
|
||||
p->sync.actions &= ~SB_LOOK_DOWN;
|
||||
p->cmd.ucmd.actions &= ~SB_LOOK_DOWN;
|
||||
}
|
||||
}
|
||||
|
||||
void playerAimUp(int snum, ESyncBits actions)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
SetGameVarID(g_iReturnVarID, 0, p->GetActor(), snum);
|
||||
OnEvent(EVENT_AIMUP, snum, p->GetActor(), -1);
|
||||
if (GetGameVarID(g_iReturnVarID, p->GetActor(), snum).value() != 0)
|
||||
{
|
||||
p->sync.actions &= ~SB_AIM_UP;
|
||||
p->cmd.ucmd.actions &= ~SB_AIM_UP;
|
||||
}
|
||||
}
|
||||
|
||||
void playerAimDown(int snum, ESyncBits actions)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
SetGameVarID(g_iReturnVarID, 0, p->GetActor(), snum);
|
||||
OnEvent(EVENT_AIMDOWN, snum, p->GetActor(), -1); // due to a typo in WW2GI's CON files this is the same as EVENT_AIMUP.
|
||||
if (GetGameVarID(g_iReturnVarID, p->GetActor(), snum).value() != 0)
|
||||
{
|
||||
p->sync.actions &= ~SB_AIM_DOWN;
|
||||
p->cmd.ucmd.actions &= ~SB_AIM_DOWN;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -936,9 +936,9 @@ void shoot(DDukeActor* actor, PClass* cls)
|
|||
if (actor->isPlayer())
|
||||
{
|
||||
p = actor->PlayerIndex();
|
||||
spos = actor->getPosWithOffsetZ().plusZ(ps[p].pyoff + 4);
|
||||
spos = actor->getPosWithOffsetZ().plusZ(getPlayer(p)->pyoff + 4);
|
||||
|
||||
ps[p].crack_time = CRACK_TIME;
|
||||
getPlayer(p)->crack_time = CRACK_TIME;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -966,7 +966,7 @@ void shoot(DDukeActor* actor, PClass* cls)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
bool movementBlocked(player_struct *p)
|
||||
bool movementBlocked(DukePlayer *p)
|
||||
{
|
||||
auto blockingweapon = [=]()
|
||||
{
|
||||
|
@ -1000,7 +1000,7 @@ bool movementBlocked(player_struct *p)
|
|||
|
||||
int haslock(sectortype* sectp, int snum)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
if (!sectp)
|
||||
return 0;
|
||||
if (!sectp->lockinfo)
|
||||
|
@ -1026,9 +1026,9 @@ int haslock(sectortype* sectp, int snum)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void purplelavacheck(player_struct* p)
|
||||
void purplelavacheck(DukePlayer* p)
|
||||
{
|
||||
auto pact = p->actor;
|
||||
auto pact = p->GetActor();
|
||||
if (p->spritebridge == 0 && pact->insector())
|
||||
{
|
||||
auto sect = pact->sector();
|
||||
|
@ -1060,7 +1060,7 @@ void purplelavacheck(player_struct* p)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void addphealth(player_struct* p, int amount, bool bigitem)
|
||||
void addphealth(DukePlayer* p, int amount, bool bigitem)
|
||||
{
|
||||
if (p->newOwner != nullptr)
|
||||
{
|
||||
|
@ -1124,7 +1124,7 @@ void addphealth(player_struct* p, int amount, bool bigitem)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
int playereat(player_struct* p, int amount, bool bigitem)
|
||||
int playereat(DukePlayer* p, int amount, bool bigitem)
|
||||
{
|
||||
p->eat += amount;
|
||||
if (p->eat > 100)
|
||||
|
@ -1181,7 +1181,7 @@ int playereat(player_struct* p, int amount, bool bigitem)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void playerdrink(player_struct* p, int amount)
|
||||
void playerdrink(DukePlayer* p, int amount)
|
||||
{
|
||||
p->drink_amt += amount;
|
||||
int curhealth = p->GetActor()->spr.extra;
|
||||
|
@ -1221,7 +1221,7 @@ void playerdrink(player_struct* p, int amount)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
int playeraddammo(player_struct* p, int weaponindex, int amount)
|
||||
int playeraddammo(DukePlayer* p, int weaponindex, int amount)
|
||||
{
|
||||
if (p->ammo_amount[weaponindex] >= gs.max_ammo_amount[weaponindex])
|
||||
{
|
||||
|
@ -1229,21 +1229,21 @@ int playeraddammo(player_struct* p, int weaponindex, int amount)
|
|||
}
|
||||
addammo(weaponindex, p, amount);
|
||||
if (p->curr_weapon == KNEE_WEAPON)
|
||||
if (p->gotweapon[weaponindex] && (WeaponSwitch(p - ps) & 1))
|
||||
if (p->gotweapon[weaponindex] && (WeaponSwitch(p - (DukePlayer*)PlayerArray) & 1))
|
||||
fi.addweapon(p, weaponindex, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
int playeraddweapon(player_struct* p, int weaponindex, int amount)
|
||||
int playeraddweapon(DukePlayer* p, int weaponindex, int amount)
|
||||
{
|
||||
if (p->gotweapon[weaponindex] == 0) fi.addweapon(p, weaponindex, !!(WeaponSwitch(p- ps) & 1));
|
||||
if (p->gotweapon[weaponindex] == 0) fi.addweapon(p, weaponindex, !!(WeaponSwitch(p - (DukePlayer*)PlayerArray) & 1));
|
||||
else if (p->ammo_amount[weaponindex] >= gs.max_ammo_amount[weaponindex])
|
||||
{
|
||||
return false;
|
||||
}
|
||||
addammo(weaponindex, p, amount);
|
||||
if (p->curr_weapon == KNEE_WEAPON)
|
||||
if (p->gotweapon[weaponindex] && (WeaponSwitch(p - ps) & 1))
|
||||
if (p->gotweapon[weaponindex] && (WeaponSwitch(p - (DukePlayer*)PlayerArray) & 1))
|
||||
fi.addweapon(p, weaponindex, true);
|
||||
|
||||
return true;
|
||||
|
@ -1255,7 +1255,7 @@ int playeraddweapon(player_struct* p, int weaponindex, int amount)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void playeraddinventory(player_struct* p, DDukeActor* item, int type, int amount)
|
||||
void playeraddinventory(DukePlayer* p, DDukeActor* item, int type, int amount)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
|
@ -1322,12 +1322,12 @@ void playeraddinventory(player_struct* p, DDukeActor* item, int type, int amount
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
int checkp(DDukeActor* self, player_struct* p, int flags)
|
||||
int checkp(DDukeActor* self, DukePlayer* p, int flags)
|
||||
{
|
||||
bool j = 0;
|
||||
|
||||
double vel = self->vel.X;
|
||||
unsigned plindex = unsigned(p - ps);
|
||||
unsigned plindex = unsigned(p - (DukePlayer*)PlayerArray);
|
||||
|
||||
// sigh.. this was yet another place where number literals were used as bit masks for every single value, making the code totally unreadable.
|
||||
if ((flags & pducking) && p->on_ground && PlayerInput(plindex, SB_CROUCH))
|
||||
|
@ -1366,7 +1366,7 @@ int checkp(DDukeActor* self, player_struct* p, int flags)
|
|||
{
|
||||
DAngle ang;
|
||||
if (self->isPlayer() && ud.multimode > 1)
|
||||
ang = absangle(ps[otherp].GetActor()->spr.Angles.Yaw, (p->GetActor()->spr.pos.XY() - ps[otherp].GetActor()->spr.pos.XY()).Angle());
|
||||
ang = absangle(getPlayer(otherp)->GetActor()->spr.Angles.Yaw, (p->GetActor()->spr.pos.XY() - getPlayer(otherp)->GetActor()->spr.pos.XY()).Angle());
|
||||
else
|
||||
ang = absangle(p->GetActor()->spr.Angles.Yaw, (self->spr.pos.XY() - p->GetActor()->spr.pos.XY()).Angle());
|
||||
|
||||
|
@ -1381,7 +1381,7 @@ int checkp(DDukeActor* self, player_struct* p, int flags)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
int playercheckinventory(player_struct* p, DDukeActor* item, int type, int amount)
|
||||
int playercheckinventory(DukePlayer* p, DDukeActor* item, int type, int amount)
|
||||
{
|
||||
bool j = 0;
|
||||
switch (type)
|
||||
|
@ -1457,7 +1457,7 @@ int playercheckinventory(player_struct* p, DDukeActor* item, int type, int amoun
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void playerstomp(player_struct* p, DDukeActor* stomped)
|
||||
void playerstomp(DukePlayer* p, DDukeActor* stomped)
|
||||
{
|
||||
if (p->knee_incs == 0 && p->GetActor()->spr.scale.X >= (isRR() ? 0.140625 : 0.625))
|
||||
if (cansee(stomped->spr.pos.plusZ(-4), stomped->sector(), p->GetActor()->getPosWithOffsetZ().plusZ(16), p->GetActor()->sector()))
|
||||
|
@ -1475,7 +1475,7 @@ void playerstomp(player_struct* p, DDukeActor* stomped)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void playerreset(player_struct* p, DDukeActor* g_ac)
|
||||
void playerreset(DukePlayer* p, DDukeActor* g_ac)
|
||||
{
|
||||
if (ud.multimode < 2)
|
||||
{
|
||||
|
@ -1484,7 +1484,7 @@ void playerreset(player_struct* p, DDukeActor* g_ac)
|
|||
else
|
||||
{
|
||||
// I am not convinced this is even remotely smart to be executed from here..
|
||||
pickrandomspot(int(p - ps));
|
||||
pickrandomspot(int(p - (DukePlayer*)PlayerArray));
|
||||
g_ac->spr.pos = p->GetActor()->getPosWithOffsetZ();
|
||||
p->GetActor()->backuppos();
|
||||
p->setbobpos();
|
||||
|
@ -1504,7 +1504,7 @@ void playerreset(player_struct* p, DDukeActor* g_ac)
|
|||
p->wantweaponfire = -1;
|
||||
p->GetActor()->PrevAngles.Pitch = p->GetActor()->spr.Angles.Pitch = nullAngle;
|
||||
p->on_crane = nullptr;
|
||||
p->frag_ps = int(p - ps);
|
||||
p->frag_ps = int(p - (DukePlayer*)PlayerArray);
|
||||
p->Angles.PrevViewAngles.Pitch = p->Angles.ViewAngles.Pitch = nullAngle;
|
||||
p->opyoff = 0;
|
||||
p->wackedbyactor = nullptr;
|
||||
|
@ -1540,7 +1540,7 @@ void playerreset(player_struct* p, DDukeActor* g_ac)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void wackplayer(player_struct* p)
|
||||
void wackplayer(DukePlayer* p)
|
||||
{
|
||||
if (!isRR())
|
||||
forceplayerangle(p);
|
||||
|
@ -1559,12 +1559,12 @@ void wackplayer(player_struct* p)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void playerkick(player_struct* p, DDukeActor* g_ac)
|
||||
void playerkick(DukePlayer* p, DDukeActor* g_ac)
|
||||
{
|
||||
if (ud.multimode > 1 && g_ac->isPlayer())
|
||||
{
|
||||
if (ps[otherp].quick_kick == 0)
|
||||
ps[otherp].quick_kick = 14;
|
||||
if (getPlayer(otherp)->quick_kick == 0)
|
||||
getPlayer(otherp)->quick_kick = 14;
|
||||
}
|
||||
else if (!g_ac->isPlayer() && p->quick_kick == 0)
|
||||
p->quick_kick = 14;
|
||||
|
@ -1578,11 +1578,11 @@ void playerkick(player_struct* p, DDukeActor* g_ac)
|
|||
|
||||
void underwater(int snum, ESyncBits actions, double floorz, double ceilingz)
|
||||
{
|
||||
const auto p = &ps[snum];
|
||||
const auto p = getPlayer(snum);
|
||||
const auto pact = p->GetActor();
|
||||
constexpr double dist = (348. / 256.);
|
||||
const auto kbdDir = ((actions & SB_JUMP) && !p->OnMotorcycle) - ((actions & SB_CROUCH) || p->OnMotorcycle);
|
||||
const auto velZ = clamp(dist * kbdDir + dist * p->sync.uvel, -dist, dist);
|
||||
const auto velZ = clamp(dist * kbdDir + dist * p->cmd.ucmd.uvel, -dist, dist);
|
||||
|
||||
p->jumping_counter = 0;
|
||||
p->pycount += 32;
|
||||
|
|
|
@ -49,7 +49,7 @@ void operateweapon_ww(int snum, ESyncBits actions);
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void incur_damage_d(player_struct* p)
|
||||
void incur_damage_d(DukePlayer* p)
|
||||
{
|
||||
int damage = 0L, shield_damage = 0L;
|
||||
|
||||
|
@ -89,7 +89,7 @@ void incur_damage_d(player_struct* p)
|
|||
void selectweapon_d(int snum, int weap) // playernum, weaponnum
|
||||
{
|
||||
int i, j, k;
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
if (p->last_pissed_time <= (26 * 218) && p->show_empty_weapon == 0 && p->kickback_pic == 0 && p->quick_kick == 0 && p->GetActor()->spr.scale.X > 0.5 && p->access_incs == 0 && p->knee_incs == 0)
|
||||
{
|
||||
if ((p->weapon_pos == 0 || (p->holster_weapon && p->weapon_pos == -9)))
|
||||
|
@ -337,7 +337,7 @@ void selectweapon_d(int snum, int weap) // playernum, weaponnum
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
int doincrements_d(player_struct* p)
|
||||
int doincrements_d(DukePlayer* p)
|
||||
{
|
||||
int snum;
|
||||
|
||||
|
@ -536,7 +536,7 @@ int doincrements_d(player_struct* p)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void checkweapons_d(player_struct* p)
|
||||
void checkweapons_d(DukePlayer* p)
|
||||
{
|
||||
static PClassActor* const * const weapon_sprites[MAX_WEAPONS] = { &DukeMeleeAttackClass, &DukeFirstgunSpriteClass, &DukeShotgunSpriteClass,
|
||||
&DukeChaingunSpriteClass, &DukeRPGSpriteClass, &DukePipeBombClass, &DukeShrinkerSpriteClass, &DukeDevastatorSpriteClass,
|
||||
|
@ -577,11 +577,11 @@ void checkweapons_d(player_struct* p)
|
|||
|
||||
static void operateJetpack(int snum, ESyncBits actions, int psectlotag, double floorz, double ceilingz, int shrunk)
|
||||
{
|
||||
const auto p = &ps[snum];
|
||||
const auto p = getPlayer(snum);
|
||||
const auto pact = p->GetActor();
|
||||
const auto kbdDir = !!(actions & SB_JUMP) - !!(actions & SB_CROUCH);
|
||||
const double dist = shrunk ? 2 : 8;
|
||||
const double velZ = clamp(dist * kbdDir + dist * p->sync.uvel, -dist, dist);
|
||||
const double velZ = clamp(dist * kbdDir + dist * p->cmd.ucmd.uvel, -dist, dist);
|
||||
|
||||
p->on_ground = 0;
|
||||
p->jumping_counter = 0;
|
||||
|
@ -646,7 +646,7 @@ static void operateJetpack(int snum, ESyncBits actions, int psectlotag, double f
|
|||
static void movement(int snum, ESyncBits actions, sectortype* psect, double floorz, double ceilingz, int shrunk, double truefdist, int psectlotag)
|
||||
{
|
||||
int j;
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
auto pact = p->GetActor();
|
||||
|
||||
if (p->airleft != 15 * 26)
|
||||
|
@ -766,7 +766,7 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo
|
|||
|
||||
p->on_warping_sector = 0;
|
||||
|
||||
if ((actions & SB_CROUCH) || p->sync.uvel < 0)
|
||||
if ((actions & SB_CROUCH) || p->cmd.ucmd.uvel < 0)
|
||||
{
|
||||
playerCrouch(snum);
|
||||
}
|
||||
|
@ -830,7 +830,7 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo
|
|||
|
||||
int operateTripbomb(int snum)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
HitInfo hit{};
|
||||
double vel = 1024, zvel = 0;
|
||||
setFreeAimVelocity(vel, zvel, p->Angles.getPitchWithView(), 16.);
|
||||
|
@ -882,7 +882,7 @@ int operateTripbomb(int snum)
|
|||
|
||||
static void fireweapon(int snum)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
auto pact = p->GetActor();
|
||||
|
||||
p->crack_time = CRACK_TIME;
|
||||
|
@ -1000,7 +1000,7 @@ static void fireweapon(int snum)
|
|||
|
||||
static void operateweapon(int snum, ESyncBits actions)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
auto pact = p->GetActor();
|
||||
|
||||
// already firing...
|
||||
|
@ -1453,7 +1453,7 @@ static void operateweapon(int snum, ESyncBits actions)
|
|||
|
||||
static void processweapon(int snum, ESyncBits actions)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
auto pact = p->GetActor();
|
||||
int shrunk = (pact->spr.scale.Y < 0.5);
|
||||
|
||||
|
@ -1536,12 +1536,12 @@ void processinput_d(int snum)
|
|||
Collision chz, clz;
|
||||
bool shrunk;
|
||||
int psectlotag;
|
||||
player_struct* p;
|
||||
DukePlayer* p;
|
||||
|
||||
p = &ps[snum];
|
||||
p = getPlayer(snum);
|
||||
auto pact = p->GetActor();
|
||||
|
||||
ESyncBits& actions = p->sync.actions;
|
||||
ESyncBits& actions = p->cmd.ucmd.actions;
|
||||
|
||||
// Get strafe value before it's rotated by the angle.
|
||||
const auto strafeVel = PlayerInputSideVel(snum);
|
||||
|
@ -1675,7 +1675,7 @@ void processinput_d(int snum)
|
|||
doubvel = TICSPERFRAME;
|
||||
|
||||
checklook(snum,actions);
|
||||
p->Angles.doViewYaw(&p->sync);
|
||||
p->Angles.doViewYaw(&p->cmd.ucmd);
|
||||
|
||||
p->updatecentering(snum);
|
||||
|
||||
|
@ -1714,15 +1714,15 @@ void processinput_d(int snum)
|
|||
doubvel = 0;
|
||||
p->vel.X = 0;
|
||||
p->vel.Y = 0;
|
||||
p->sync.avel = 0;
|
||||
p->cmd.ucmd.avel = 0;
|
||||
setForcedSyncInput(snum);
|
||||
}
|
||||
else
|
||||
{
|
||||
p->sync.avel = p->adjustavel(PlayerInputAngVel(snum));
|
||||
p->cmd.ucmd.avel = p->adjustavel(PlayerInputAngVel(snum));
|
||||
}
|
||||
|
||||
p->Angles.doYawInput(&p->sync);
|
||||
p->Angles.doYawInput(&p->cmd.ucmd);
|
||||
|
||||
purplelavacheck(p);
|
||||
|
||||
|
@ -1827,7 +1827,7 @@ void processinput_d(int snum)
|
|||
}
|
||||
}
|
||||
|
||||
p->Angles.doRollInput(&p->sync, p->vel.XY(), maxVel, (psectlotag == 1) || (psectlotag == 2));
|
||||
p->Angles.doRollInput(&p->cmd.ucmd, p->vel.XY(), maxVel, (psectlotag == 1) || (psectlotag == 2));
|
||||
|
||||
HORIZONLY:
|
||||
|
||||
|
@ -1943,7 +1943,7 @@ HORIZONLY:
|
|||
playerAimDown(snum, actions);
|
||||
}
|
||||
|
||||
p->Angles.doPitchInput(&p->sync);
|
||||
p->Angles.doPitchInput(&p->cmd.ucmd);
|
||||
|
||||
p->checkhardlanding();
|
||||
|
||||
|
@ -1952,7 +1952,7 @@ HORIZONLY:
|
|||
if (p->show_empty_weapon > 0)
|
||||
{
|
||||
p->show_empty_weapon--;
|
||||
if (p->show_empty_weapon == 0 && (WeaponSwitch(p - ps) & 2))
|
||||
if (p->show_empty_weapon == 0 && (WeaponSwitch(p - (DukePlayer*)PlayerArray) & 2))
|
||||
{
|
||||
if (p->last_full_weapon == GROW_WEAPON)
|
||||
p->subweapon |= (1 << GROW_WEAPON);
|
||||
|
|
|
@ -43,7 +43,7 @@ BEGIN_DUKE_NS
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void incur_damage_r(player_struct* p)
|
||||
void incur_damage_r(DukePlayer* p)
|
||||
{
|
||||
int damage = 0, shield_damage = 0;
|
||||
int gut = 0;
|
||||
|
@ -88,7 +88,7 @@ void incur_damage_r(player_struct* p)
|
|||
void selectweapon_r(int snum, int weap)
|
||||
{
|
||||
int i, j, k;
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
if (p->last_pissed_time <= (26 * 218) && p->show_empty_weapon == 0 && p->kickback_pic == 0 && p->quick_kick == 0 && p->GetActor()->spr.scale.X > 0.125 && p->access_incs == 0 && p->knee_incs == 0)
|
||||
{
|
||||
if ((p->weapon_pos == 0 || (p->holster_weapon && p->weapon_pos == -9)))
|
||||
|
@ -273,7 +273,7 @@ void selectweapon_r(int snum, int weap)
|
|||
case SLINGBLADE_WEAPON:
|
||||
if (isRRRA())
|
||||
{
|
||||
S_PlayActorSound(496, ps[screenpeek].GetActor());
|
||||
S_PlayActorSound(496, getPlayer(screenpeek)->GetActor());
|
||||
fi.addweapon(p, j, true);
|
||||
}
|
||||
break;
|
||||
|
@ -343,7 +343,7 @@ void selectweapon_r(int snum, int weap)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
int doincrements_r(player_struct* p)
|
||||
int doincrements_r(DukePlayer* p)
|
||||
{
|
||||
int snum;
|
||||
auto pact = p->GetActor();
|
||||
|
@ -600,7 +600,7 @@ int doincrements_r(player_struct* p)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void checkweapons_r(player_struct* p)
|
||||
void checkweapons_r(DukePlayer* p)
|
||||
{
|
||||
static PClassActor* const* const weapon_sprites[MAX_WEAPONS] = { &DukeMeleeAttackClass, &RedneckRevolverClass, &RedneckShotgunClass,
|
||||
&RedneckRiflegunClass, &RedneckDynamiteClass, &RedneckCrossbowClass, &RedneckRipsawClass, &RedneckBlasterClass,
|
||||
|
@ -709,14 +709,14 @@ enum : unsigned
|
|||
VEH_FWDBRAKING = VEH_FORWARD|VEH_BRAKING,
|
||||
};
|
||||
|
||||
static unsigned outVehicleFlags(player_struct* p, ESyncBits& actions)
|
||||
static unsigned outVehicleFlags(DukePlayer* p, ESyncBits& actions)
|
||||
{
|
||||
unsigned flags = 0;
|
||||
flags += VEH_FORWARD * (p->sync.fvel > 0);
|
||||
flags += VEH_REVERSE * (p->sync.fvel < 0);
|
||||
flags += VEH_TURNLEFT * (p->sync.avel < 0);
|
||||
flags += VEH_TURNRIGHT * (p->sync.avel > 0);
|
||||
flags += VEH_BRAKING * (!!(actions & SB_CROUCH) || (p->sync.fvel < 0 && p->MotoSpeed > 0));
|
||||
flags += VEH_FORWARD * (p->cmd.ucmd.fvel > 0);
|
||||
flags += VEH_REVERSE * (p->cmd.ucmd.fvel < 0);
|
||||
flags += VEH_TURNLEFT * (p->cmd.ucmd.avel < 0);
|
||||
flags += VEH_TURNRIGHT * (p->cmd.ucmd.avel > 0);
|
||||
flags += VEH_BRAKING * (!!(actions & SB_CROUCH) || (p->cmd.ucmd.fvel < 0 && p->MotoSpeed > 0));
|
||||
actions &= ~SB_CROUCH;
|
||||
return flags;
|
||||
}
|
||||
|
@ -727,9 +727,9 @@ static unsigned outVehicleFlags(player_struct* p, ESyncBits& actions)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
static void doVehicleTilting(player_struct* const p, const bool canTilt)
|
||||
static void doVehicleTilting(DukePlayer* const p, const bool canTilt)
|
||||
{
|
||||
auto adj = DAngle::fromDeg(p->sync.avel * (545943. / 3200000.) * canTilt);
|
||||
auto adj = DAngle::fromDeg(p->cmd.ucmd.avel * (545943. / 3200000.) * canTilt);
|
||||
if (p->OnMotorcycle) adj *= 5 * Sgn(p->MotoSpeed);
|
||||
if (cl_rrvehicletilting) adj *= cl_viewtiltscale;
|
||||
p->oTiltStatus = p->TiltStatus;
|
||||
|
@ -744,7 +744,7 @@ static void doVehicleTilting(player_struct* const p, const bool canTilt)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
static void doVehicleBumping(player_struct* p, DDukeActor* pact, unsigned flags, bool bumptest, int bumpscale)
|
||||
static void doVehicleBumping(DukePlayer* p, DDukeActor* pact, unsigned flags, bool bumptest, int bumpscale)
|
||||
{
|
||||
if (p->MotoSpeed != 0 && p->on_ground == 1)
|
||||
{
|
||||
|
@ -805,7 +805,7 @@ static void doVehicleBumping(player_struct* p, DDukeActor* pact, unsigned flags,
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
static void doVehicleDrunk(player_struct* const p)
|
||||
static void doVehicleDrunk(DukePlayer* const p)
|
||||
{
|
||||
if (p->drink_amt > 88 && p->moto_drink == 0)
|
||||
{
|
||||
|
@ -831,7 +831,7 @@ static void doVehicleDrunk(player_struct* const p)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
static void doVehicleSounds(player_struct* p, DDukeActor* pact, unsigned flags, unsigned sound1, unsigned sound2, unsigned sound3, unsigned sound4)
|
||||
static void doVehicleSounds(DukePlayer* p, DDukeActor* pact, unsigned flags, unsigned sound1, unsigned sound2, unsigned sound3, unsigned sound4)
|
||||
{
|
||||
if ((p->OnBoat && (flags & VEH_FWDBRAKING) == VEH_FORWARD) || flags & VEH_FORWARD)
|
||||
{
|
||||
|
@ -883,7 +883,7 @@ static void doVehicleSounds(player_struct* p, DDukeActor* pact, unsigned flags,
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
static void doVehicleThrottling(player_struct* p, DDukeActor* pact, unsigned& flags, int fwdSpeed, int revSpeed, int brakeSpeed, int vBmpFwd, int vBmpBrake)
|
||||
static void doVehicleThrottling(DukePlayer* p, DDukeActor* pact, unsigned& flags, int fwdSpeed, int revSpeed, int brakeSpeed, int vBmpFwd, int vBmpBrake)
|
||||
{
|
||||
if (p->on_ground == 1)
|
||||
{
|
||||
|
@ -907,7 +907,7 @@ static void doVehicleThrottling(player_struct* p, DDukeActor* pact, unsigned& fl
|
|||
else if ((flags & VEH_BRAKING) && p->MotoSpeed > 0)
|
||||
{
|
||||
const auto kbdBraking = brakeSpeed * !!(flags & VEH_BRAKING);
|
||||
const auto hidBraking = brakeSpeed * p->sync.fvel * (p->sync.fvel < 0);
|
||||
const auto hidBraking = brakeSpeed * p->cmd.ucmd.fvel * (p->cmd.ucmd.fvel < 0);
|
||||
p->MotoSpeed -= clamp<double>(kbdBraking - hidBraking, -brakeSpeed, brakeSpeed);
|
||||
if (p->MotoSpeed < 0)
|
||||
p->MotoSpeed = 0;
|
||||
|
@ -922,7 +922,7 @@ static void doVehicleThrottling(player_struct* p, DDukeActor* pact, unsigned& fl
|
|||
p->moto_bump_fast = 1;
|
||||
}
|
||||
|
||||
p->MotoSpeed += fwdSpeed * p->sync.fvel;
|
||||
p->MotoSpeed += fwdSpeed * p->cmd.ucmd.fvel;
|
||||
flags &= ~VEH_FORWARD;
|
||||
|
||||
if (p->MotoSpeed > 120)
|
||||
|
@ -952,7 +952,7 @@ static void doVehicleThrottling(player_struct* p, DDukeActor* pact, unsigned& fl
|
|||
flags &= ~VEH_TURNRIGHT;
|
||||
flags |= VEH_TURNLEFT;
|
||||
}
|
||||
p->MotoSpeed = revSpeed * p->sync.fvel;
|
||||
p->MotoSpeed = revSpeed * p->cmd.ucmd.fvel;
|
||||
flags &= ~VEH_REVERSE;
|
||||
}
|
||||
}
|
||||
|
@ -966,11 +966,11 @@ static void doVehicleThrottling(player_struct* p, DDukeActor* pact, unsigned& fl
|
|||
|
||||
static void onMotorcycle(int snum, ESyncBits &actions)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
auto pact = p->GetActor();
|
||||
|
||||
unsigned flags = outVehicleFlags(p, actions);
|
||||
doVehicleTilting(p, !p->on_ground || p->sync.avel);
|
||||
doVehicleTilting(p, !p->on_ground || p->cmd.ucmd.avel);
|
||||
|
||||
if (p->MotoSpeed < 0 || p->moto_underwater)
|
||||
p->MotoSpeed = 0;
|
||||
|
@ -1034,7 +1034,7 @@ static void onMotorcycle(int snum, ESyncBits &actions)
|
|||
}
|
||||
|
||||
p->moto_on_mud = p->moto_on_oil = 0;
|
||||
p->sync.fvel = clamp<float>((float)p->MotoSpeed, -15.f, 120.f) * (1.f / 40.f);
|
||||
p->cmd.ucmd.fvel = clamp<float>((float)p->MotoSpeed, -15.f, 120.f) * (1.f / 40.f);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
@ -1045,7 +1045,7 @@ static void onMotorcycle(int snum, ESyncBits &actions)
|
|||
|
||||
static void onBoat(int snum, ESyncBits &actions)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
auto pact = p->GetActor();
|
||||
|
||||
if (p->NotOnWater)
|
||||
|
@ -1066,7 +1066,7 @@ static void onBoat(int snum, ESyncBits &actions)
|
|||
p->MotoSpeed = 0;
|
||||
|
||||
unsigned flags = outVehicleFlags(p, actions);
|
||||
doVehicleTilting(p, (p->MotoSpeed != 0 && (p->sync.avel || p->moto_drink)) || !p->NotOnWater);
|
||||
doVehicleTilting(p, (p->MotoSpeed != 0 && (p->cmd.ucmd.avel || p->moto_drink)) || !p->NotOnWater);
|
||||
doVehicleSounds(p, pact, flags, 87, 88, 89, 90);
|
||||
|
||||
if (!p->NotOnWater)
|
||||
|
@ -1104,7 +1104,7 @@ static void onBoat(int snum, ESyncBits &actions)
|
|||
if (p->NotOnWater && p->MotoSpeed > 50)
|
||||
p->MotoSpeed *= 0.5;
|
||||
|
||||
p->sync.fvel = clamp<float>((float)p->MotoSpeed, -15.f, 120.f) * (1.f / 40.f);
|
||||
p->cmd.ucmd.fvel = clamp<float>((float)p->MotoSpeed, -15.f, 120.f) * (1.f / 40.f);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
@ -1115,7 +1115,7 @@ static void onBoat(int snum, ESyncBits &actions)
|
|||
|
||||
static void movement(int snum, ESyncBits actions, sectortype* psect, double floorz, double ceilingz, int shrunk, double truefdist, int psectlotag)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
auto pact = p->GetActor();
|
||||
|
||||
if (p->airleft != 15 * 26)
|
||||
|
@ -1282,7 +1282,7 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo
|
|||
|
||||
p->on_warping_sector = 0;
|
||||
|
||||
if (((actions & SB_CROUCH) || p->sync.uvel < 0) && !p->OnMotorcycle)
|
||||
if (((actions & SB_CROUCH) || p->cmd.ucmd.uvel < 0) && !p->OnMotorcycle)
|
||||
{
|
||||
playerCrouch(snum);
|
||||
}
|
||||
|
@ -1342,7 +1342,7 @@ static void movement(int snum, ESyncBits actions, sectortype* psect, double floo
|
|||
|
||||
void onMotorcycleMove(int snum, walltype* wal)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
auto pact = p->GetActor();
|
||||
double angleDelta = absangle(p->GetActor()->spr.Angles.Yaw, wal->delta().Angle()).Degrees();
|
||||
double damageAmount = p->MotoSpeed * p->MotoSpeed;
|
||||
|
@ -1398,7 +1398,7 @@ void onMotorcycleMove(int snum, walltype* wal)
|
|||
|
||||
void onBoatMove(int snum, int psectlotag, walltype* wal)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
auto pact = p->GetActor();
|
||||
double angleDelta = absangle(p->GetActor()->spr.Angles.Yaw, wal->delta().Angle()).Degrees();
|
||||
|
||||
|
@ -1440,7 +1440,7 @@ void onBoatMove(int snum, int psectlotag, walltype* wal)
|
|||
|
||||
void onMotorcycleHit(int snum, DDukeActor* victim)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
if (badguy(victim) || victim->isPlayer())
|
||||
{
|
||||
if (!victim->isPlayer())
|
||||
|
@ -1473,7 +1473,7 @@ void onMotorcycleHit(int snum, DDukeActor* victim)
|
|||
|
||||
void onBoatHit(int snum, DDukeActor* victim)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
|
||||
if (badguy(victim) || victim->isPlayer())
|
||||
{
|
||||
|
@ -1503,7 +1503,7 @@ void onBoatHit(int snum, DDukeActor* victim)
|
|||
|
||||
static void fireweapon(int snum)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
|
||||
p->crack_time = CRACK_TIME;
|
||||
|
||||
|
@ -1635,7 +1635,7 @@ static void fireweapon(int snum)
|
|||
|
||||
static void operateweapon(int snum, ESyncBits actions, sectortype* psectp)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
auto pact = p->GetActor();
|
||||
int psectlotag = psectp ? psectp->lotag : 857;
|
||||
|
||||
|
@ -2207,7 +2207,7 @@ static void operateweapon(int snum, ESyncBits actions, sectortype* psectp)
|
|||
|
||||
static void processweapon(int snum, ESyncBits actions, sectortype* psectp)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
auto pact = p->GetActor();
|
||||
int shrunk = (pact->spr.scale.Y < 0.125);
|
||||
|
||||
|
@ -2268,10 +2268,10 @@ void processinput_r(int snum)
|
|||
int psectlotag;
|
||||
double floorz = 0, ceilingz = 0;
|
||||
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
auto pact = p->GetActor();
|
||||
|
||||
ESyncBits& actions = p->sync.actions;
|
||||
ESyncBits& actions = p->cmd.ucmd.actions;
|
||||
|
||||
// Get strafe value before it's rotated by the angle.
|
||||
const auto strafeVel = PlayerInputSideVel(snum);
|
||||
|
@ -2486,7 +2486,7 @@ void processinput_r(int snum)
|
|||
doubvel = TICSPERFRAME;
|
||||
|
||||
checklook(snum, actions);
|
||||
p->Angles.doViewYaw(&p->sync);
|
||||
p->Angles.doViewYaw(&p->cmd.ucmd);
|
||||
p->apply_seasick();
|
||||
|
||||
p->updatecentering(snum);
|
||||
|
@ -2541,15 +2541,15 @@ void processinput_r(int snum)
|
|||
doubvel = 0;
|
||||
p->vel.X = 0;
|
||||
p->vel.Y = 0;
|
||||
p->sync.avel = 0;
|
||||
p->cmd.ucmd.avel = 0;
|
||||
setForcedSyncInput(snum);
|
||||
}
|
||||
else
|
||||
{
|
||||
p->sync.avel = p->adjustavel(PlayerInputAngVel(snum));
|
||||
p->cmd.ucmd.avel = p->adjustavel(PlayerInputAngVel(snum));
|
||||
}
|
||||
|
||||
p->Angles.doYawInput(&p->sync);
|
||||
p->Angles.doYawInput(&p->cmd.ucmd);
|
||||
|
||||
purplelavacheck(p);
|
||||
|
||||
|
@ -2708,7 +2708,7 @@ void processinput_r(int snum)
|
|||
|
||||
if (!p->OnMotorcycle && !p->OnBoat)
|
||||
{
|
||||
p->Angles.doRollInput(&p->sync, p->vel.XY(), maxVel, (psectlotag == 1) || (psectlotag == 2));
|
||||
p->Angles.doRollInput(&p->cmd.ucmd, p->vel.XY(), maxVel, (psectlotag == 1) || (psectlotag == 2));
|
||||
}
|
||||
|
||||
HORIZONLY:
|
||||
|
@ -2900,7 +2900,7 @@ HORIZONLY:
|
|||
p->GetActor()->spr.Angles.Pitch += maphoriz(d);
|
||||
}
|
||||
|
||||
p->Angles.doPitchInput(&p->sync);
|
||||
p->Angles.doPitchInput(&p->cmd.ucmd);
|
||||
|
||||
p->checkhardlanding();
|
||||
|
||||
|
@ -2910,7 +2910,7 @@ HORIZONLY:
|
|||
{
|
||||
p->show_empty_weapon--;
|
||||
|
||||
if (p->show_empty_weapon == 0 && (WeaponSwitch(p - ps) & 2))
|
||||
if (p->show_empty_weapon == 0 && (WeaponSwitch(p - (DukePlayer*)PlayerArray) & 2))
|
||||
{
|
||||
fi.addweapon(p, p->last_full_weapon, true);
|
||||
return;
|
||||
|
@ -2946,7 +2946,7 @@ HORIZONLY:
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void OnMotorcycle(player_struct *p)
|
||||
void OnMotorcycle(DukePlayer *p)
|
||||
{
|
||||
if (!p->OnMotorcycle && p->cursector->lotag != ST_2_UNDERWATER)
|
||||
{
|
||||
|
@ -2969,7 +2969,7 @@ void OnMotorcycle(player_struct *p)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void OffMotorcycle(player_struct *p)
|
||||
void OffMotorcycle(DukePlayer *p)
|
||||
{
|
||||
auto pact = p->GetActor();
|
||||
if (p->OnMotorcycle)
|
||||
|
@ -3013,7 +3013,7 @@ void OffMotorcycle(player_struct *p)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void OnBoat(player_struct *p)
|
||||
void OnBoat(DukePlayer *p)
|
||||
{
|
||||
if (!p->OnBoat)
|
||||
{
|
||||
|
@ -3034,7 +3034,7 @@ void OnBoat(player_struct *p)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void OffBoat(player_struct *p)
|
||||
void OffBoat(DukePlayer *p)
|
||||
{
|
||||
if (p->OnBoat)
|
||||
{
|
||||
|
|
|
@ -48,7 +48,7 @@ int operateTripbomb(int snum);
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void DoFire(player_struct* p, int snum)
|
||||
void DoFire(DukePlayer* p, int snum)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -105,7 +105,7 @@ void DoFire(player_struct* p, int snum)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void DoSpawn(player_struct *p, int snum)
|
||||
void DoSpawn(DukePlayer *p, int snum)
|
||||
{
|
||||
if(!aplWeaponSpawn(p->curr_weapon, snum))
|
||||
return;
|
||||
|
@ -140,7 +140,7 @@ void DoSpawn(player_struct *p, int snum)
|
|||
|
||||
void fireweapon_ww(int snum)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
auto pact = p->GetActor();
|
||||
|
||||
p->crack_time = CRACK_TIME;
|
||||
|
@ -307,7 +307,7 @@ void fireweapon_ww(int snum)
|
|||
|
||||
void operateweapon_ww(int snum, ESyncBits actions)
|
||||
{
|
||||
auto p = &ps[snum];
|
||||
auto p = getPlayer(snum);
|
||||
auto pact = p->GetActor();
|
||||
|
||||
// already firing...
|
||||
|
|
|
@ -51,16 +51,16 @@ short myangbak[MOVEFIFOSIZ];
|
|||
|
||||
void resetmys()
|
||||
{
|
||||
mypos = omypos = ps[myconnectindex].GetActor()->getPosWithOffsetZ();
|
||||
mypos = omypos = getPlayer(myconnectindex)->GetActor()->getPosWithOffsetZ();
|
||||
myxvel = myyvel = myzvel = 0;
|
||||
myang = ps[myconnectindex].GetActor()->spr.Angles.Yaw;
|
||||
myhoriz = omyhoriz = ps[myconnectindex].GetActor()->spr.Angles.Pitch;
|
||||
myhorizoff = omyhorizoff = ps[myconnectindex].Angles.ViewAngles.Pitch;
|
||||
mycursectnum = sectindex(ps[myconnectindex].cursector);
|
||||
myjumpingcounter = ps[myconnectindex].jumping_counter;
|
||||
myjumpingtoggle = ps[myconnectindex].jumping_toggle;
|
||||
myonground = ps[myconnectindex].on_ground;
|
||||
myhardlanding = ps[myconnectindex].hard_landing;
|
||||
myang = getPlayer(myconnectindex)->GetActor()->spr.Angles.Yaw;
|
||||
myhoriz = omyhoriz = getPlayer(myconnectindex)->GetActor()->spr.Angles.Pitch;
|
||||
myhorizoff = omyhorizoff = getPlayer(myconnectindex)->Angles.ViewAngles.Pitch;
|
||||
mycursectnum = sectindex(getPlayer(myconnectindex)->cursector);
|
||||
myjumpingcounter = getPlayer(myconnectindex)->jumping_counter;
|
||||
myjumpingtoggle = getPlayer(myconnectindex)->jumping_toggle;
|
||||
myonground = getPlayer(myconnectindex)->on_ground;
|
||||
myhardlanding = getPlayer(myconnectindex)->hard_landing;
|
||||
}
|
||||
|
||||
#if 0 // todo: fix this when networking works again
|
||||
|
|
|
@ -60,10 +60,10 @@ void premapcontroller(DDukeActor* ac)
|
|||
|
||||
void pickrandomspot(int snum)
|
||||
{
|
||||
player_struct* p;
|
||||
DukePlayer* p;
|
||||
int i;
|
||||
|
||||
p = &ps[snum];
|
||||
p = getPlayer(snum);
|
||||
|
||||
if( ud.multimode > 1 && ud.coop != 1)
|
||||
i = krand()%numplayersprites;
|
||||
|
@ -85,9 +85,9 @@ void pickrandomspot(int snum)
|
|||
|
||||
void resetplayerstats(int snum)
|
||||
{
|
||||
player_struct* p;
|
||||
DukePlayer* p;
|
||||
|
||||
p = &ps[snum];
|
||||
p = getPlayer(snum);
|
||||
|
||||
gFullMap = 0;
|
||||
p->dead_flag = 0;
|
||||
|
@ -127,7 +127,7 @@ void resetplayerstats(int snum)
|
|||
p->bobcounter = 0;
|
||||
p->on_ground = 0;
|
||||
p->player_par = 0;
|
||||
p->sync.actions |= SB_CENTERVIEW;
|
||||
p->cmd.ucmd.actions |= SB_CENTERVIEW;
|
||||
p->airleft = 15*26;
|
||||
p->rapid_fire_hold = 0;
|
||||
p->toggle_key_flag = 0;
|
||||
|
@ -259,7 +259,7 @@ void resetplayerstats(int snum)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void resetweapons(player_struct* p)
|
||||
void resetweapons(DukePlayer* p)
|
||||
{
|
||||
for (int weapon = PISTOL_WEAPON; weapon < MAX_WEAPONS; weapon++)
|
||||
{
|
||||
|
@ -293,7 +293,7 @@ void resetweapons(player_struct* p)
|
|||
p->gotweapon[SLINGBLADE_WEAPON] = true;
|
||||
p->ammo_amount[SLINGBLADE_WEAPON] = 1;
|
||||
}
|
||||
OnEvent(EVENT_RESETWEAPONS, int(p - ps), nullptr, -1);
|
||||
OnEvent(EVENT_RESETWEAPONS, int(p - (DukePlayer*)PlayerArray), nullptr, -1);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
|
@ -302,7 +302,7 @@ void resetweapons(player_struct* p)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void resetinventory(player_struct* p)
|
||||
void resetinventory(DukePlayer* p)
|
||||
{
|
||||
p->inven_icon = 0;
|
||||
p->boot_amount = 0;
|
||||
|
@ -362,7 +362,7 @@ void resetinventory(player_struct* p)
|
|||
ufocnt = 0;
|
||||
hulkspawn = 2;
|
||||
}
|
||||
OnEvent(EVENT_RESETINVENTORY, int(p - ps), p->GetActor());
|
||||
OnEvent(EVENT_RESETINVENTORY, int(p - (DukePlayer*)PlayerArray), p->GetActor());
|
||||
}
|
||||
|
||||
|
||||
|
@ -374,9 +374,9 @@ void resetinventory(player_struct* p)
|
|||
|
||||
void resetprestat(int snum,int g)
|
||||
{
|
||||
player_struct* p;
|
||||
DukePlayer* p;
|
||||
|
||||
p = &ps[snum];
|
||||
p = getPlayer(snum);
|
||||
|
||||
spriteqloc = 0;
|
||||
for(auto& p : spriteq) p = nullptr;
|
||||
|
@ -489,7 +489,7 @@ void resetpspritevars(int g, const DVector3& startpos, const DAngle startang)
|
|||
int aimmode[MAXPLAYERS];
|
||||
STATUSBARTYPE tsbar[MAXPLAYERS];
|
||||
|
||||
auto newActor = CreateActor(ps[0].cursector, startpos,
|
||||
auto newActor = CreateActor(getPlayer(0)->cursector, startpos,
|
||||
DukePlayerPawnClass /*fixme for RR later!*/, 0, DVector2(0, 0), startang, 0., 0., nullptr, 10);
|
||||
|
||||
newActor->spr.Angles.Pitch = DAngle::fromDeg(-17.354);
|
||||
|
@ -497,55 +497,55 @@ void resetpspritevars(int g, const DVector3& startpos, const DAngle startang)
|
|||
|
||||
if (ud.recstat != 2) for (i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
aimmode[i] = ps[i].aim_mode;
|
||||
aimmode[i] = getPlayer(i)->aim_mode;
|
||||
if (ud.multimode > 1 && ud.coop == 1 && ud.last_level >= 0)
|
||||
{
|
||||
for (j = 0; j < MAX_WEAPONS; j++)
|
||||
{
|
||||
tsbar[i].ammo_amount[j] = ps[i].ammo_amount[j];
|
||||
tsbar[i].gotweapon[j] = ps[i].gotweapon[j];
|
||||
tsbar[i].ammo_amount[j] = getPlayer(i)->ammo_amount[j];
|
||||
tsbar[i].gotweapon[j] = getPlayer(i)->gotweapon[j];
|
||||
}
|
||||
|
||||
tsbar[i].shield_amount = ps[i].shield_amount;
|
||||
tsbar[i].curr_weapon = ps[i].curr_weapon;
|
||||
tsbar[i].inven_icon = ps[i].inven_icon;
|
||||
tsbar[i].shield_amount = getPlayer(i)->shield_amount;
|
||||
tsbar[i].curr_weapon = getPlayer(i)->curr_weapon;
|
||||
tsbar[i].inven_icon = getPlayer(i)->inven_icon;
|
||||
|
||||
tsbar[i].firstaid_amount = ps[i].firstaid_amount;
|
||||
tsbar[i].steroids_amount = ps[i].steroids_amount;
|
||||
tsbar[i].holoduke_amount = ps[i].holoduke_amount;
|
||||
tsbar[i].jetpack_amount = ps[i].jetpack_amount;
|
||||
tsbar[i].heat_amount = ps[i].heat_amount;
|
||||
tsbar[i].scuba_amount = ps[i].scuba_amount;
|
||||
tsbar[i].boot_amount = ps[i].boot_amount;
|
||||
tsbar[i].firstaid_amount = getPlayer(i)->firstaid_amount;
|
||||
tsbar[i].steroids_amount = getPlayer(i)->steroids_amount;
|
||||
tsbar[i].holoduke_amount = getPlayer(i)->holoduke_amount;
|
||||
tsbar[i].jetpack_amount = getPlayer(i)->jetpack_amount;
|
||||
tsbar[i].heat_amount = getPlayer(i)->heat_amount;
|
||||
tsbar[i].scuba_amount = getPlayer(i)->scuba_amount;
|
||||
tsbar[i].boot_amount = getPlayer(i)->boot_amount;
|
||||
}
|
||||
}
|
||||
|
||||
resetplayerstats(0);
|
||||
|
||||
for (i = 1; i < MAXPLAYERS; i++)
|
||||
ps[i] = ps[0];
|
||||
*getPlayer(i) = *getPlayer(0);
|
||||
|
||||
if (ud.recstat != 2) for (i = 0; i < MAXPLAYERS; i++)
|
||||
{
|
||||
ps[i].aim_mode = aimmode[i];
|
||||
getPlayer(i)->aim_mode = aimmode[i];
|
||||
if (ud.multimode > 1 && ud.coop == 1 && ud.last_level >= 0)
|
||||
{
|
||||
for (j = 0; j < MAX_WEAPONS; j++)
|
||||
{
|
||||
ps[i].ammo_amount[j] = tsbar[i].ammo_amount[j];
|
||||
ps[i].gotweapon[j] = tsbar[i].gotweapon[j];
|
||||
getPlayer(i)->ammo_amount[j] = tsbar[i].ammo_amount[j];
|
||||
getPlayer(i)->gotweapon[j] = tsbar[i].gotweapon[j];
|
||||
}
|
||||
ps[i].shield_amount = tsbar[i].shield_amount;
|
||||
ps[i].curr_weapon = tsbar[i].curr_weapon;
|
||||
ps[i].inven_icon = tsbar[i].inven_icon;
|
||||
getPlayer(i)->shield_amount = tsbar[i].shield_amount;
|
||||
getPlayer(i)->curr_weapon = tsbar[i].curr_weapon;
|
||||
getPlayer(i)->inven_icon = tsbar[i].inven_icon;
|
||||
|
||||
ps[i].firstaid_amount = tsbar[i].firstaid_amount;
|
||||
ps[i].steroids_amount = tsbar[i].steroids_amount;
|
||||
ps[i].holoduke_amount = tsbar[i].holoduke_amount;
|
||||
ps[i].jetpack_amount = tsbar[i].jetpack_amount;
|
||||
ps[i].heat_amount = tsbar[i].heat_amount;
|
||||
ps[i].scuba_amount = tsbar[i].scuba_amount;
|
||||
ps[i].boot_amount = tsbar[i].boot_amount;
|
||||
getPlayer(i)->firstaid_amount = tsbar[i].firstaid_amount;
|
||||
getPlayer(i)->steroids_amount = tsbar[i].steroids_amount;
|
||||
getPlayer(i)->holoduke_amount = tsbar[i].holoduke_amount;
|
||||
getPlayer(i)->jetpack_amount = tsbar[i].jetpack_amount;
|
||||
getPlayer(i)->heat_amount = tsbar[i].heat_amount;
|
||||
getPlayer(i)->scuba_amount = tsbar[i].scuba_amount;
|
||||
getPlayer(i)->boot_amount = tsbar[i].boot_amount;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -575,12 +575,12 @@ void resetpspritevars(int g, const DVector3& startpos, const DAngle startang)
|
|||
act->spr.xoffset = 0;
|
||||
act->clipdist = 16;
|
||||
|
||||
if (ps[j].last_extra == 0)
|
||||
if (getPlayer(j)->last_extra == 0)
|
||||
{
|
||||
ps[j].last_extra = gs.max_player_health;
|
||||
getPlayer(j)->last_extra = gs.max_player_health;
|
||||
act->spr.extra = gs.max_player_health;
|
||||
}
|
||||
else act->spr.extra = ps[j].last_extra;
|
||||
else act->spr.extra = getPlayer(j)->last_extra;
|
||||
|
||||
act->spr.yint = j;
|
||||
|
||||
|
@ -588,24 +588,24 @@ void resetpspritevars(int g, const DVector3& startpos, const DAngle startang)
|
|||
{
|
||||
if (act->spr.pal == 0)
|
||||
{
|
||||
act->spr.pal = ps[j].palookup = which_palookup;
|
||||
act->spr.pal = getPlayer(j)->palookup = which_palookup;
|
||||
ud.user_pals[j] = which_palookup;
|
||||
which_palookup++;
|
||||
if (which_palookup == 17) which_palookup = 9;
|
||||
}
|
||||
else ud.user_pals[j] = ps[j].palookup = act->spr.pal;
|
||||
else ud.user_pals[j] = getPlayer(j)->palookup = act->spr.pal;
|
||||
}
|
||||
else
|
||||
act->spr.pal = ps[j].palookup = ud.user_pals[j];
|
||||
act->spr.pal = getPlayer(j)->palookup = ud.user_pals[j];
|
||||
|
||||
ps[j].actor = act;
|
||||
ps[j].Angles.initialize(ps[j].actor, (currentLevel->levelNumber & 1)? DAngle90 : -DAngle90);
|
||||
ps[j].frag_ps = j;
|
||||
getPlayer(j)->actor = act;
|
||||
getPlayer(j)->Angles.initialize(getPlayer(j)->GetActor(), (currentLevel->levelNumber & 1)? DAngle90 : -DAngle90);
|
||||
getPlayer(j)->frag_ps = j;
|
||||
act->SetOwner(act);
|
||||
|
||||
ps[j].setbobpos();
|
||||
getPlayer(j)->setbobpos();
|
||||
|
||||
updatesector(act->spr.pos, &ps[j].cursector);
|
||||
updatesector(act->spr.pos, &getPlayer(j)->cursector);
|
||||
|
||||
j = connectpoint2[j];
|
||||
|
||||
|
@ -626,7 +626,7 @@ void prelevel_common(int g)
|
|||
Level.clearStats();
|
||||
if (isRRRA()) ud.mapflags = MFLAG_ALLSECTORTYPES;
|
||||
else if (isRR()) ud.mapflags = MFLAG_SECTORTYPE800;
|
||||
auto p = &ps[screenpeek];
|
||||
auto p = getPlayer(screenpeek);
|
||||
p->sea_sick_stat = 0;
|
||||
ud.ufospawnsminion = 0;
|
||||
ud.pistonsound = 0;
|
||||
|
@ -675,8 +675,8 @@ void prelevel_common(int g)
|
|||
if (tilesurface(sectp->ceilingtexture) == TSURF_SCROLLSKY && numclouds < 127)
|
||||
clouds[numclouds++] = sectp;
|
||||
|
||||
if (ps[0].one_parallax_sectnum == nullptr)
|
||||
ps[0].one_parallax_sectnum = sectp;
|
||||
if (getPlayer(0)->one_parallax_sectnum == nullptr)
|
||||
getPlayer(0)->one_parallax_sectnum = sectp;
|
||||
}
|
||||
|
||||
if (sectp->lotag == 32767) //Found a secret room
|
||||
|
@ -687,7 +687,7 @@ void prelevel_common(int g)
|
|||
|
||||
if (sectp->lotag == -1)
|
||||
{
|
||||
ps[0].Exit = sectp->walls[0].pos;
|
||||
getPlayer(0)->Exit = sectp->walls[0].pos;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
@ -778,7 +778,7 @@ void resettimevars(void)
|
|||
|
||||
void donewgame(MapRecord* map, int sk)
|
||||
{
|
||||
auto p = &ps[0];
|
||||
auto p = getPlayer(0);
|
||||
show_shareware = 26 * 34;
|
||||
|
||||
ud.player_skill = sk;
|
||||
|
@ -1058,7 +1058,7 @@ void cacheit(void)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
static int LoadTheMap(MapRecord *mi, player_struct*p, int gamemode)
|
||||
static int LoadTheMap(MapRecord *mi, DukePlayer*p, int gamemode)
|
||||
{
|
||||
int16_t lbang;
|
||||
if (isShareware() && (mi->flags & MI_USERMAP))
|
||||
|
@ -1116,8 +1116,8 @@ static void clearfrags(void)
|
|||
{
|
||||
for (int i = 0; i < ud.multimode; i++)
|
||||
{
|
||||
ps[i].frag = ps[i].fraggedself = 0;
|
||||
memset(ps[i].frags, 0, sizeof(ps[i].frags));
|
||||
getPlayer(i)->frag = getPlayer(i)->fraggedself = 0;
|
||||
memset(getPlayer(i)->frags, 0, sizeof(getPlayer(i)->frags));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1146,7 +1146,7 @@ void enterlevel(MapRecord *mi, int gamemode)
|
|||
FX_StopAllSounds();
|
||||
S_SetReverb(0);
|
||||
|
||||
auto p = &ps[0];
|
||||
auto p = getPlayer(0);
|
||||
|
||||
LoadTheMap(mi, p, gamemode);
|
||||
|
||||
|
@ -1162,29 +1162,29 @@ void enterlevel(MapRecord *mi, int gamemode)
|
|||
for (int i = connecthead; i >= 0; i = connectpoint2[i])
|
||||
{
|
||||
bool clearweapon = !!(currentLevel->flags & LEVEL_CLEARWEAPONS);
|
||||
auto pn = ps[i].GetActor()->sector()->floortexture;
|
||||
auto pn = getPlayer(i)->GetActor()->sector()->floortexture;
|
||||
if (tileflags(pn) & TFLAG_CLEARINVENTORY)
|
||||
{
|
||||
resetinventory(&ps[i]);
|
||||
resetinventory(getPlayer(i));
|
||||
clearweapon = true;
|
||||
}
|
||||
if (clearweapon)
|
||||
{
|
||||
resetweapons(&ps[i]);
|
||||
ps[i].gotweapon[PISTOL_WEAPON] = false;
|
||||
ps[i].ammo_amount[PISTOL_WEAPON] = 0;
|
||||
ps[i].curr_weapon = KNEE_WEAPON;
|
||||
ps[i].kickback_pic = 0;
|
||||
ps[i].okickback_pic = ps[i].kickback_pic = 0;
|
||||
resetweapons(getPlayer(i));
|
||||
getPlayer(i)->gotweapon[PISTOL_WEAPON] = false;
|
||||
getPlayer(i)->ammo_amount[PISTOL_WEAPON] = 0;
|
||||
getPlayer(i)->curr_weapon = KNEE_WEAPON;
|
||||
getPlayer(i)->kickback_pic = 0;
|
||||
getPlayer(i)->okickback_pic = getPlayer(i)->kickback_pic = 0;
|
||||
}
|
||||
if (currentLevel->flags & LEVEL_CLEARINVENTORY) resetinventory(&ps[i]);
|
||||
if (currentLevel->flags & LEVEL_CLEARINVENTORY) resetinventory(getPlayer(i));
|
||||
}
|
||||
resetmys();
|
||||
|
||||
global_random = 0;
|
||||
|
||||
ud.last_level = 1;
|
||||
ps[myconnectindex].over_shoulder_on = 0;
|
||||
getPlayer(myconnectindex)->over_shoulder_on = 0;
|
||||
clearfrags();
|
||||
resettimevars(); // Here we go
|
||||
setLevelStarted(mi);
|
||||
|
@ -1205,11 +1205,11 @@ void GameInterface::NewGame(MapRecord* map, int skill, bool)
|
|||
{
|
||||
for (int i = 0; i != -1; i = connectpoint2[i])
|
||||
{
|
||||
resetweapons(&ps[i]);
|
||||
resetinventory(&ps[i]);
|
||||
resetweapons(getPlayer(i));
|
||||
resetinventory(getPlayer(i));
|
||||
}
|
||||
|
||||
ps[0].last_extra = gs.max_player_health;
|
||||
getPlayer(0)->last_extra = gs.max_player_health;
|
||||
|
||||
|
||||
if (skill == -1) skill = ud.player_skill;
|
||||
|
@ -1223,7 +1223,7 @@ void GameInterface::NewGame(MapRecord* map, int skill, bool)
|
|||
|
||||
donewgame(map, skill);
|
||||
enterlevel(map, 0);
|
||||
if (isShareware() && ud.recstat != 2) FTA(QUOTE_F1HELP, &ps[myconnectindex]);
|
||||
if (isShareware() && ud.recstat != 2) FTA(QUOTE_F1HELP, getPlayer(myconnectindex));
|
||||
|
||||
PlayerColorChanged();
|
||||
}
|
||||
|
|
|
@ -60,7 +60,7 @@ void prelevel_d(int g, TArray<DDukeActor*>& actors)
|
|||
|
||||
if (ac->spr.lotag == -1 && (ac->spr.cstat & CSTAT_SPRITE_ALIGNMENT_WALL))
|
||||
{
|
||||
ps[0].Exit = ac->spr.pos.XY();
|
||||
getPlayer(0)->Exit = ac->spr.pos.XY();
|
||||
}
|
||||
else
|
||||
premapcontroller(ac);
|
||||
|
|
|
@ -42,7 +42,7 @@ BEGIN_DUKE_NS
|
|||
|
||||
void prelevel_r(int g, TArray<DDukeActor*>& actors)
|
||||
{
|
||||
player_struct* p;
|
||||
DukePlayer* p;
|
||||
int j;
|
||||
int lotaglist;
|
||||
TArray<short> lotags;
|
||||
|
@ -52,10 +52,10 @@ void prelevel_r(int g, TArray<DDukeActor*>& actors)
|
|||
sound = 0;
|
||||
|
||||
prelevel_common(g);
|
||||
p = &ps[screenpeek];
|
||||
p = getPlayer(screenpeek);
|
||||
|
||||
if (currentLevel->gameflags & LEVEL_RR_CLEARMOONSHINE)
|
||||
ps[myconnectindex].steroids_amount = 0;
|
||||
getPlayer(myconnectindex)->steroids_amount = 0;
|
||||
|
||||
if (isRRRA())
|
||||
{
|
||||
|
@ -166,7 +166,7 @@ void prelevel_r(int g, TArray<DDukeActor*>& actors)
|
|||
|
||||
if (ac->spr.lotag == -1 && (ac->spr.cstat & CSTAT_SPRITE_ALIGNMENT_WALL))
|
||||
{
|
||||
ps[0].Exit = ac->spr.pos.XY();
|
||||
getPlayer(0)->Exit = ac->spr.pos.XY();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -72,7 +72,7 @@ void GameInterface::UpdateCameras(double smoothratio)
|
|||
if (camsprite == nullptr)
|
||||
return;
|
||||
|
||||
auto p = &ps[screenpeek];
|
||||
auto p = getPlayer(screenpeek);
|
||||
if (p->newOwner != nullptr) camsprite->SetOwner(p->newOwner);
|
||||
|
||||
if (camsprite->GetOwner() && (p->GetActor()->spr.pos - camsprite->spr.pos).Length() < VIEWSCREEN_ACTIVE_DISTANCE)
|
||||
|
@ -129,7 +129,7 @@ bool GameInterface::GetGeoEffect(GeoEffect* eff, sectortype* viewsector)
|
|||
//---------------------------------------------------------------------------
|
||||
int DrugTimer;
|
||||
|
||||
static int getdrugmode(player_struct *p, int oyrepeat)
|
||||
static int getdrugmode(DukePlayer *p, int oyrepeat)
|
||||
{
|
||||
int now = I_GetBuildTime() >> 1; // this function works on a 60 fps setup.
|
||||
if (playrunning() && p->DrugMode > 0)
|
||||
|
@ -218,7 +218,7 @@ void displayrooms(int snum, double interpfrac, bool sceneonly)
|
|||
DVector3 cpos;
|
||||
DRotator cangles;
|
||||
|
||||
player_struct* p = &ps[snum];
|
||||
DukePlayer* p = getPlayer(snum);
|
||||
|
||||
// update render angles.
|
||||
p->Angles.updateCameraAngles(interpfrac);
|
||||
|
|
|
@ -103,7 +103,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, player_orig& w, pl
|
|||
return arc;
|
||||
}
|
||||
|
||||
FSerializer& Serialize(FSerializer& arc, const char* keyname, player_struct& w, player_struct* def)
|
||||
FSerializer& Serialize(FSerializer& arc, const char* keyname, DukePlayer& w, DukePlayer* def)
|
||||
{
|
||||
if (arc.BeginObject(keyname))
|
||||
{
|
||||
|
@ -261,7 +261,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, player_struct& w,
|
|||
("moto_on_oil", w.moto_on_oil)
|
||||
("moto_on_mud", w.moto_on_mud)
|
||||
// new stuff
|
||||
("actions", w.sync.actions)
|
||||
("actions", w.cmd.ucmd.actions)
|
||||
.Array("frags", w.frags, MAXPLAYERS)
|
||||
("uservars", w.uservars)
|
||||
("fistsign", w.fistsign)
|
||||
|
@ -273,7 +273,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, player_struct& w,
|
|||
w.GetActor()->backuploc();
|
||||
w.opyoff = w.pyoff;
|
||||
w.backupweapon();
|
||||
w.sync.actions &= SB_CENTERVIEW|SB_CROUCH; // these are the only bits we need to preserve.
|
||||
w.cmd.ucmd.actions &= SB_CENTERVIEW|SB_CROUCH; // these are the only bits we need to preserve.
|
||||
}
|
||||
}
|
||||
return arc;
|
||||
|
@ -415,7 +415,8 @@ void GameInterface::SerializeGameState(FSerializer& arc)
|
|||
("rtsplaying", rtsplaying)
|
||||
//("tempwallptr", tempwallptr)
|
||||
("joe9000", ud.joe9000)
|
||||
.Array("players", ps, ud.multimode)
|
||||
#pragma message("Duke: Fix saving!")
|
||||
//.Array("players", PlayerArray, ud.multimode)
|
||||
("spriteqamount", spriteqamount)
|
||||
("lastvisinc", lastvisinc)
|
||||
("numanimwalls", numanimwalls)
|
||||
|
@ -487,11 +488,11 @@ void GameInterface::SerializeGameState(FSerializer& arc)
|
|||
ud.m_monsters_off = ud.monsters_off;
|
||||
ud.m_coop = ud.coop;
|
||||
ud.m_ffire = ud.ffire;
|
||||
if (ps[myconnectindex].over_shoulder_on != 0)
|
||||
if (getPlayer(myconnectindex)->over_shoulder_on != 0)
|
||||
{
|
||||
cameradist = 0;
|
||||
cameraclock = 0;
|
||||
ps[myconnectindex].over_shoulder_on = 1;
|
||||
getPlayer(myconnectindex)->over_shoulder_on = 1;
|
||||
}
|
||||
|
||||
cacheit();
|
||||
|
|
|
@ -250,7 +250,7 @@ int findplayer(const DDukeActor* actor, double* d)
|
|||
|
||||
if (ud.multimode < 2)
|
||||
{
|
||||
if (d) *d = (ps[myconnectindex].GetActor()->getPrevPosWithOffsetZ() - s).plusZ(28).Sum();
|
||||
if (d) *d = (getPlayer(myconnectindex)->GetActor()->getPrevPosWithOffsetZ() - s).plusZ(28).Sum();
|
||||
return myconnectindex;
|
||||
}
|
||||
|
||||
|
@ -259,8 +259,8 @@ int findplayer(const DDukeActor* actor, double* d)
|
|||
|
||||
for (j = connecthead; j >= 0; j = connectpoint2[j])
|
||||
{
|
||||
double x = (ps[j].GetActor()->getPrevPosWithOffsetZ() - s).plusZ(28).Sum();
|
||||
if (x < closest && ps[j].GetActor()->spr.extra > 0)
|
||||
double x = (getPlayer(j)->GetActor()->getPrevPosWithOffsetZ() - s).plusZ(28).Sum();
|
||||
if (x < closest && getPlayer(j)->GetActor()->spr.extra > 0)
|
||||
{
|
||||
closest_player = j;
|
||||
closest = x;
|
||||
|
@ -285,9 +285,9 @@ int findotherplayer(int p, double* d)
|
|||
closest_player = p;
|
||||
|
||||
for (j = connecthead; j >= 0; j = connectpoint2[j])
|
||||
if (p != j && ps[j].GetActor()->spr.extra > 0)
|
||||
if (p != j && getPlayer(j)->GetActor()->spr.extra > 0)
|
||||
{
|
||||
double x = (ps[j].GetActor()->getPrevPosWithOffsetZ() - ps[p].GetActor()->getPosWithOffsetZ()).Sum();
|
||||
double x = (getPlayer(j)->GetActor()->getPrevPosWithOffsetZ() - getPlayer(p)->GetActor()->getPosWithOffsetZ()).Sum();
|
||||
|
||||
if (x < closest)
|
||||
{
|
||||
|
@ -403,12 +403,12 @@ void doanimations(void)
|
|||
if (type == anim_floorz)
|
||||
{
|
||||
for (auto p = connecthead; p >= 0; p = connectpoint2[p])
|
||||
if (ps[p].cursector == dasectp)
|
||||
if ((dasectp->floorz - ps[p].GetActor()->getOffsetZ()) < 64)
|
||||
if (ps[p].GetActor()->GetOwner() != nullptr)
|
||||
if (getPlayer(p)->cursector == dasectp)
|
||||
if ((dasectp->floorz - getPlayer(p)->GetActor()->getOffsetZ()) < 64)
|
||||
if (getPlayer(p)->GetActor()->GetOwner() != nullptr)
|
||||
{
|
||||
ps[p].GetActor()->spr.pos.Z += v;
|
||||
ps[p].vel.Z = 0;
|
||||
getPlayer(p)->GetActor()->spr.pos.Z += v;
|
||||
getPlayer(p)->vel.Z = 0;
|
||||
}
|
||||
|
||||
DukeSectIterator it(dasectp);
|
||||
|
@ -1126,7 +1126,7 @@ void operatesectors(sectortype* sptr, DDukeActor *actor)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void operateactivators(int low, player_struct* plr)
|
||||
void operateactivators(int low, DukePlayer* plr)
|
||||
{
|
||||
int i, j, k;
|
||||
Cycler * p;
|
||||
|
@ -1329,7 +1329,7 @@ bool checkhitceiling(sectortype* sectp)
|
|||
if (!data->handler)
|
||||
{
|
||||
sectp->setceilingtexture(data->brokentex);
|
||||
S_PlayActorSound(data->breaksound, ps[screenpeek].GetActor()); // this is nonsense but what the original code did.
|
||||
S_PlayActorSound(data->breaksound, getPlayer(screenpeek)->GetActor()); // this is nonsense but what the original code did.
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1369,7 +1369,7 @@ bool checkhitceiling(sectortype* sectp)
|
|||
}
|
||||
if (data->flags & 2)
|
||||
{
|
||||
ceilingglass(ps[myconnectindex].GetActor(), sectp, 10);
|
||||
ceilingglass(getPlayer(myconnectindex)->GetActor(), sectp, 10);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -1413,7 +1413,7 @@ void checkhitdefault(DDukeActor* targ, DDukeActor* proj)
|
|||
auto Owner = proj->GetOwner();
|
||||
|
||||
if (Owner && Owner->isPlayer() && !(targ->flags3 & SFLAG3_NOSHOTGUNBLOOD))
|
||||
if (ps[Owner->PlayerIndex()].curr_weapon == SHOTGUN_WEAPON)
|
||||
if (getPlayer(Owner->PlayerIndex())->curr_weapon == SHOTGUN_WEAPON)
|
||||
{
|
||||
shoot(targ, DukeBloodSplat3Class);
|
||||
shoot(targ, DukeBloodSplat1Class);
|
||||
|
@ -1468,12 +1468,12 @@ void checkhitdefault(DDukeActor* targ, DDukeActor* proj)
|
|||
if (targ->spr.statnum == STAT_PLAYER)
|
||||
{
|
||||
auto p = targ->PlayerIndex();
|
||||
if (ps[p].newOwner != nullptr)
|
||||
if (getPlayer(p)->newOwner != nullptr)
|
||||
{
|
||||
ps[p].newOwner = nullptr;
|
||||
ps[p].GetActor()->restoreloc();
|
||||
getPlayer(p)->newOwner = nullptr;
|
||||
getPlayer(p)->GetActor()->restoreloc();
|
||||
|
||||
updatesector(ps[p].GetActor()->getPosWithOffsetZ(), &ps[p].cursector);
|
||||
updatesector(getPlayer(p)->GetActor()->getPosWithOffsetZ(), &getPlayer(p)->cursector);
|
||||
|
||||
DukeStatIterator it(STAT_ACTOR);
|
||||
while (auto itActor = it.Next())
|
||||
|
@ -1536,8 +1536,8 @@ void moveclouds(double interpfrac)
|
|||
cloudclock = myclock + 6;
|
||||
|
||||
// cloudx/y were an array, but all entries were always having the same value so a single pair is enough.
|
||||
cloudx += (float)ps[screenpeek].GetActor()->spr.Angles.Yaw.Cos() * 0.5f;
|
||||
cloudy += (float)ps[screenpeek].GetActor()->spr.Angles.Yaw.Sin() * 0.5f;
|
||||
cloudx += (float)getPlayer(screenpeek)->GetActor()->spr.Angles.Yaw.Cos() * 0.5f;
|
||||
cloudy += (float)getPlayer(screenpeek)->GetActor()->spr.Angles.Yaw.Sin() * 0.5f;
|
||||
for (int i = 0; i < numclouds; i++)
|
||||
{
|
||||
// no clamping here!
|
||||
|
@ -1745,7 +1745,7 @@ bool checkhitswitch(int snum, walltype* wwal, DDukeActor* act)
|
|||
switchpal = act->spr.pal;
|
||||
|
||||
// custom switches that maintain themselves can immediately abort.
|
||||
swresult = CallTriggerSwitch(act, &ps[snum]);
|
||||
swresult = CallTriggerSwitch(act, getPlayer(snum));
|
||||
if (swresult == 1) return true;
|
||||
}
|
||||
else
|
||||
|
@ -1796,15 +1796,15 @@ bool checkhitswitch(int snum, walltype* wwal, DDukeActor* act)
|
|||
if (hitag == 10001 && swdef.flags & SwitchDef::oneway && isRRRA())
|
||||
{
|
||||
act->spr.setspritetexture(swdef.states[1]);
|
||||
if (ps[snum].SeaSick == 0)
|
||||
ps[snum].SeaSick = 350;
|
||||
operateactivators(668, &ps[snum]);
|
||||
if (getPlayer(snum)->SeaSick == 0)
|
||||
getPlayer(snum)->SeaSick = 350;
|
||||
operateactivators(668, getPlayer(snum));
|
||||
operatemasterswitches(668);
|
||||
S_PlayActorSound(328, ps[snum].GetActor());
|
||||
S_PlayActorSound(328, getPlayer(snum)->GetActor());
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
DVector3 v(spos, ps[snum].GetActor()->getOffsetZ());
|
||||
DVector3 v(spos, getPlayer(snum)->GetActor()->getOffsetZ());
|
||||
|
||||
if (swdef.type != SwitchDef::None || isadoorwall(texid))
|
||||
{
|
||||
|
@ -1814,9 +1814,9 @@ bool checkhitswitch(int snum, walltype* wwal, DDukeActor* act)
|
|||
{
|
||||
FSoundID sound = swdef.soundid != NO_SOUND ? swdef.soundid : S_FindSoundByResID(SWITCH_ON);
|
||||
if (act) S_PlaySound3D(sound, act, v);
|
||||
else S_PlaySound3D(sound, ps[snum].GetActor(), v);
|
||||
else S_PlaySound3D(sound, getPlayer(snum)->GetActor(), v);
|
||||
if (numdips != correctdips) return 0;
|
||||
S_PlaySound3D(END_OF_LEVEL_WARN, ps[snum].GetActor(), v);
|
||||
S_PlaySound3D(END_OF_LEVEL_WARN, getPlayer(snum)->GetActor(), v);
|
||||
}
|
||||
if (swdef.type == SwitchDef::Multi)
|
||||
{
|
||||
|
@ -1854,18 +1854,18 @@ bool checkhitswitch(int snum, walltype* wwal, DDukeActor* act)
|
|||
case SE_25_PISTON:
|
||||
other->temp_data[4] = !other->temp_data[4];
|
||||
if (other->temp_data[4])
|
||||
FTA(15, &ps[snum]);
|
||||
else FTA(2, &ps[snum]);
|
||||
FTA(15, getPlayer(snum));
|
||||
else FTA(2, getPlayer(snum));
|
||||
break;
|
||||
case SE_21_DROP_FLOOR:
|
||||
FTA(2, &ps[screenpeek]);
|
||||
FTA(2, getPlayer(screenpeek));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
operateactivators(lotag, &ps[snum]);
|
||||
operateforcefields(ps[snum].GetActor(), lotag);
|
||||
operateactivators(lotag, getPlayer(snum));
|
||||
operateforcefields(getPlayer(snum)->GetActor(), lotag);
|
||||
operatemasterswitches(lotag);
|
||||
|
||||
if (swdef.type == SwitchDef::Combo) return 1;
|
||||
|
@ -1874,7 +1874,7 @@ bool checkhitswitch(int snum, walltype* wwal, DDukeActor* act)
|
|||
{
|
||||
FSoundID sound = swdef.soundid != NO_SOUND ? swdef.soundid : S_FindSoundByResID(SWITCH_ON);
|
||||
if (act) S_PlaySound3D(sound, act, v);
|
||||
else S_PlaySound3D(sound, ps[snum].GetActor(), v);
|
||||
else S_PlaySound3D(sound, getPlayer(snum)->GetActor(), v);
|
||||
}
|
||||
else if (hitag != 0)
|
||||
{
|
||||
|
@ -1883,7 +1883,7 @@ bool checkhitswitch(int snum, walltype* wwal, DDukeActor* act)
|
|||
if (act && (flags & SF_TALK) == 0)
|
||||
S_PlaySound3D(hitag, act, v);
|
||||
else
|
||||
S_PlayActorSound(hitag, ps[snum].GetActor());
|
||||
S_PlayActorSound(hitag, getPlayer(snum)->GetActor());
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
@ -1907,7 +1907,7 @@ void animatewalls(void)
|
|||
if (!ff1.isValid()) ff1 = TexMan.CheckForTexture("W_FORCEFIELD", ETextureType::Any);
|
||||
if (!ff2.isValid()) ff2 = TexMan.CheckForTexture("W_FORCEFIELD2", ETextureType::Any);
|
||||
|
||||
if (ps[screenpeek].sea_sick_stat == 1)
|
||||
if (getPlayer(screenpeek)->sea_sick_stat == 1)
|
||||
{
|
||||
for (auto& wal : wall)
|
||||
{
|
||||
|
|
|
@ -50,35 +50,35 @@ BEGIN_DUKE_NS
|
|||
|
||||
bool checkaccessswitch_d(int snum, int switchpal, DDukeActor* act, walltype* wwal)
|
||||
{
|
||||
if (ps[snum].access_incs == 0)
|
||||
if (getPlayer(snum)->access_incs == 0)
|
||||
{
|
||||
if (switchpal == 0)
|
||||
{
|
||||
if ((ps[snum].got_access & 1))
|
||||
ps[snum].access_incs = 1;
|
||||
else FTA(70, &ps[snum]);
|
||||
if ((getPlayer(snum)->got_access & 1))
|
||||
getPlayer(snum)->access_incs = 1;
|
||||
else FTA(70, getPlayer(snum));
|
||||
}
|
||||
|
||||
else if (switchpal == 21)
|
||||
{
|
||||
if (ps[snum].got_access & 2)
|
||||
ps[snum].access_incs = 1;
|
||||
else FTA(71, &ps[snum]);
|
||||
if (getPlayer(snum)->got_access & 2)
|
||||
getPlayer(snum)->access_incs = 1;
|
||||
else FTA(71, getPlayer(snum));
|
||||
}
|
||||
|
||||
else if (switchpal == 23)
|
||||
{
|
||||
if (ps[snum].got_access & 4)
|
||||
ps[snum].access_incs = 1;
|
||||
else FTA(72, &ps[snum]);
|
||||
if (getPlayer(snum)->got_access & 4)
|
||||
getPlayer(snum)->access_incs = 1;
|
||||
else FTA(72, getPlayer(snum));
|
||||
}
|
||||
|
||||
if (ps[snum].access_incs == 1)
|
||||
if (getPlayer(snum)->access_incs == 1)
|
||||
{
|
||||
if (!act)
|
||||
ps[snum].access_wall = wwal;
|
||||
getPlayer(snum)->access_wall = wwal;
|
||||
else
|
||||
ps[snum].access_spritenum = act;
|
||||
getPlayer(snum)->access_spritenum = act;
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
@ -117,7 +117,7 @@ void activatebysector_d(sectortype* sect, DDukeActor* activator)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void checkplayerhurt_d(player_struct* p, const Collision& coll)
|
||||
void checkplayerhurt_d(DukePlayer* p, const Collision& coll)
|
||||
{
|
||||
if (coll.type == kHitSprite)
|
||||
{
|
||||
|
@ -158,7 +158,7 @@ void checkplayerhurt_d(player_struct* p, const Collision& coll)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void clearcameras(player_struct* p)
|
||||
void clearcameras(DukePlayer* p)
|
||||
{
|
||||
p->GetActor()->restorepos();
|
||||
p->newOwner = nullptr;
|
||||
|
@ -181,11 +181,11 @@ void clearcameras(player_struct* p)
|
|||
void checksectors_d(int snum)
|
||||
{
|
||||
int i = -1;
|
||||
player_struct* p;
|
||||
DukePlayer* p;
|
||||
walltype* hitscanwall;
|
||||
HitInfo near;
|
||||
|
||||
p = &ps[snum];
|
||||
p = getPlayer(snum);
|
||||
auto pact = p->GetActor();
|
||||
|
||||
if (!p->insector()) return;
|
||||
|
|
|
@ -51,47 +51,47 @@ BEGIN_DUKE_NS
|
|||
|
||||
bool checkaccessswitch_r(int snum, int switchpal, DDukeActor* act, walltype* wwal)
|
||||
{
|
||||
if (ps[snum].access_incs == 0)
|
||||
if (getPlayer(snum)->access_incs == 0)
|
||||
{
|
||||
if (switchpal == 0)
|
||||
{
|
||||
if (ps[snum].keys[1])
|
||||
ps[snum].access_incs = 1;
|
||||
if (getPlayer(snum)->keys[1])
|
||||
getPlayer(snum)->access_incs = 1;
|
||||
else
|
||||
{
|
||||
FTA(70, &ps[snum]);
|
||||
if (isRRRA()) S_PlayActorSound(99, act ? act : ps[snum].GetActor());
|
||||
FTA(70, getPlayer(snum));
|
||||
if (isRRRA()) S_PlayActorSound(99, act ? act : getPlayer(snum)->GetActor());
|
||||
}
|
||||
}
|
||||
|
||||
else if (switchpal == 21)
|
||||
{
|
||||
if (ps[snum].keys[2])
|
||||
ps[snum].access_incs = 1;
|
||||
if (getPlayer(snum)->keys[2])
|
||||
getPlayer(snum)->access_incs = 1;
|
||||
else
|
||||
{
|
||||
FTA(71, &ps[snum]);
|
||||
if (isRRRA()) S_PlayActorSound(99, act ? act : ps[snum].GetActor());
|
||||
FTA(71, getPlayer(snum));
|
||||
if (isRRRA()) S_PlayActorSound(99, act ? act : getPlayer(snum)->GetActor());
|
||||
}
|
||||
}
|
||||
|
||||
else if (switchpal == 23)
|
||||
{
|
||||
if (ps[snum].keys[3])
|
||||
ps[snum].access_incs = 1;
|
||||
if (getPlayer(snum)->keys[3])
|
||||
getPlayer(snum)->access_incs = 1;
|
||||
else
|
||||
{
|
||||
FTA(72, &ps[snum]);
|
||||
if (isRRRA()) S_PlayActorSound(99, act ? act : ps[snum].GetActor());
|
||||
FTA(72, getPlayer(snum));
|
||||
if (isRRRA()) S_PlayActorSound(99, act ? act : getPlayer(snum)->GetActor());
|
||||
}
|
||||
}
|
||||
|
||||
if (ps[snum].access_incs == 1)
|
||||
if (getPlayer(snum)->access_incs == 1)
|
||||
{
|
||||
if (!act)
|
||||
ps[snum].access_wall = wwal;
|
||||
getPlayer(snum)->access_wall = wwal;
|
||||
else
|
||||
ps[snum].access_spritenum = act;
|
||||
getPlayer(snum)->access_spritenum = act;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
@ -127,7 +127,7 @@ void activatebysector_r(sectortype* sect, DDukeActor* activator)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void checkplayerhurt_r(player_struct* p, const Collision &coll)
|
||||
void checkplayerhurt_r(DukePlayer* p, const Collision &coll)
|
||||
{
|
||||
if (coll.type == kHitSprite)
|
||||
{
|
||||
|
@ -160,11 +160,11 @@ void checkplayerhurt_r(player_struct* p, const Collision &coll)
|
|||
|
||||
void checksectors_r(int snum)
|
||||
{
|
||||
player_struct* p;
|
||||
DukePlayer* p;
|
||||
walltype* hitscanwall;
|
||||
HitInfo near;
|
||||
|
||||
p = &ps[snum];
|
||||
p = getPlayer(snum);
|
||||
auto pact = p->GetActor();
|
||||
|
||||
if (!p->insector()) return;
|
||||
|
@ -464,8 +464,8 @@ void dofurniture(walltype* wlwal, sectortype* sectp, int snum)
|
|||
|
||||
if (pos_ok)
|
||||
{
|
||||
if (S_CheckActorSoundPlaying(ps[snum].GetActor(), 389) == 0)
|
||||
S_PlayActorSound(389, ps[snum].GetActor());
|
||||
if (S_CheckActorSoundPlaying(getPlayer(snum)->GetActor(), 389) == 0)
|
||||
S_PlayActorSound(389, getPlayer(snum)->GetActor());
|
||||
for(auto& wal : nextsect->walls)
|
||||
{
|
||||
auto vec = wal.pos;
|
||||
|
|
|
@ -311,7 +311,7 @@ void S_GetCamera(DVector3* c, DAngle* ca, sectortype** cs)
|
|||
{
|
||||
if (ud.cameraactor == nullptr)
|
||||
{
|
||||
auto p = &ps[screenpeek];
|
||||
auto p = getPlayer(screenpeek);
|
||||
auto pact = p->GetActor();
|
||||
if (c)
|
||||
{
|
||||
|
@ -422,11 +422,11 @@ void GameInterface::UpdateSounds(void)
|
|||
|
||||
int S_PlaySound3D(FSoundID soundid, DDukeActor* actor, const DVector3& pos, int channel, EChanFlags flags)
|
||||
{
|
||||
auto const pl = &ps[myconnectindex];
|
||||
auto const pl = getPlayer(myconnectindex);
|
||||
if (!soundEngine->isValidSoundId(soundid) || !SoundEnabled() || actor == nullptr || !playrunning() ||
|
||||
(pl->timebeforeexit > 0 && pl->timebeforeexit <= REALGAMETICSPERSEC * 3)) return -1;
|
||||
|
||||
if (flags & CHANF_LOCAL && actor != ps[screenpeek].actor && !ud.coop) return -1; // makes no sense...
|
||||
if (flags & CHANF_LOCAL && actor != getPlayer(screenpeek)->GetActor() && !ud.coop) return -1; // makes no sense...
|
||||
|
||||
soundid = GetReplacementSound(soundid);
|
||||
int userflags = S_GetUserFlags(soundid);
|
||||
|
@ -470,7 +470,7 @@ int S_PlaySound3D(FSoundID soundid, DDukeActor* actor, const DVector3& pos, int
|
|||
bool explosion = ((userflags & (SF_GLOBAL | SF_DTAG)) == (SF_GLOBAL | SF_DTAG)) ||
|
||||
((sfx->ResourceId == PIPEBOMB_EXPLODE || sfx->ResourceId == LASERTRIP_EXPLODE || sfx->ResourceId == RPG_EXPLODE));
|
||||
|
||||
bool underwater = ps[screenpeek].insector() && ps[screenpeek].cursector->lotag == ST_2_UNDERWATER;
|
||||
bool underwater = getPlayer(screenpeek)->insector() && getPlayer(screenpeek)->cursector->lotag == ST_2_UNDERWATER;
|
||||
float pitch = 0;
|
||||
if (!explosion)
|
||||
{
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#include "names.h"
|
||||
#include "packet.h"
|
||||
#include "d_net.h"
|
||||
#include "gameinput.h"
|
||||
#include "coreplayer.h"
|
||||
#include "texturemanager.h"
|
||||
|
||||
BEGIN_DUKE_NS
|
||||
|
@ -224,16 +224,13 @@ struct player_orig
|
|||
sectortype* os;
|
||||
};
|
||||
|
||||
struct player_struct
|
||||
struct DukePlayer final : public CorePlayer
|
||||
{
|
||||
DVector3 vel;
|
||||
DVector2 bobpos;
|
||||
DVector2 fric;
|
||||
DVector2 Exit;
|
||||
|
||||
// player's horizon and angle structs.
|
||||
PlayerAngles Angles;
|
||||
|
||||
uint16_t frags[MAXPLAYERS];
|
||||
|
||||
bool gotweapon[MAX_WEAPONS];
|
||||
|
@ -271,7 +268,7 @@ struct player_struct
|
|||
sectortype* cursector;
|
||||
sectortype* one_parallax_sectnum; // wall + sector references.
|
||||
walltype* access_wall;
|
||||
DDukeActor* actor;
|
||||
DDukeActor* GetActor() override;
|
||||
TObjPtr<DDukeActor*> actorsqu, wackedbyactor, on_crane, holoduke_on, somethingonplayer, access_spritenum, dummyplayersprite, newOwner;
|
||||
|
||||
short last_extra, subweapon;
|
||||
|
@ -348,10 +345,6 @@ struct player_struct
|
|||
|
||||
TArray<GameVarValue> uservars;
|
||||
|
||||
// input stuff.
|
||||
InputPacket sync;
|
||||
|
||||
DDukeActor* GetActor();
|
||||
int GetPlayerNum();
|
||||
|
||||
void apply_seasick();
|
||||
|
@ -382,20 +375,20 @@ struct player_struct
|
|||
|
||||
void updatecentering(const int snum)
|
||||
{
|
||||
if (!(sync.actions & SB_CENTERVIEW))
|
||||
if (!(cmd.ucmd.actions & SB_CENTERVIEW))
|
||||
return;
|
||||
|
||||
const bool returnlock = cl_dukepitchmode & kDukePitchLockReturn;
|
||||
const bool centertest = abs(GetActor()->spr.Angles.Pitch.Degrees()) > 2.2370; // Build horizon value of 5.
|
||||
|
||||
if ((centertest && returnlock) || !sync.horz)
|
||||
if ((centertest && returnlock) || !cmd.ucmd.horz)
|
||||
{
|
||||
setForcedSyncInput(snum);
|
||||
sync.horz = 0;
|
||||
cmd.ucmd.horz = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
sync.actions &= ~SB_CENTERVIEW;
|
||||
cmd.ucmd.actions &= ~SB_CENTERVIEW;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -33,9 +33,9 @@ void resetswitch(int tag);
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
player_struct* duke_getviewplayer()
|
||||
DukePlayer* duke_getviewplayer()
|
||||
{
|
||||
return &ps[screenpeek];
|
||||
return getPlayer(screenpeek);
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_Duke, getviewplayer, duke_getviewplayer)
|
||||
|
@ -44,9 +44,9 @@ DEFINE_ACTION_FUNCTION_NATIVE(_Duke, getviewplayer, duke_getviewplayer)
|
|||
ACTION_RETURN_POINTER(duke_getviewplayer());
|
||||
}
|
||||
|
||||
player_struct* duke_getlocalplayer()
|
||||
DukePlayer* duke_getlocalplayer()
|
||||
{
|
||||
return &ps[myconnectindex];
|
||||
return getPlayer(myconnectindex);
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_Duke, getlocalplayer, duke_getlocalplayer)
|
||||
|
@ -117,11 +117,11 @@ DEFINE_ACTION_FUNCTION_NATIVE(_Duke, CheckSoundPlaying, duke_CheckSoundPlaying)
|
|||
ACTION_RETURN_INT(duke_CheckSoundPlaying(snd));
|
||||
}
|
||||
|
||||
player_struct* duke_checkcursectnums(sectortype* sector)
|
||||
DukePlayer* duke_checkcursectnums(sectortype* sector)
|
||||
{
|
||||
if (!sector) return nullptr;
|
||||
int pp = checkcursectnums(sector);
|
||||
return pp >= 0 ? &ps[pp] : nullptr;
|
||||
return pp >= 0 ? getPlayer(pp) : nullptr;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_Duke, checkcursectnums, duke_checkcursectnums)
|
||||
|
@ -196,16 +196,16 @@ DEFINE_ACTION_FUNCTION_NATIVE(_Duke, StopCommentary, StopCommentary)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int getPlayerIndex(player_struct* p)
|
||||
int getPlayerIndex(DukePlayer* p)
|
||||
{
|
||||
if (!p) return -1;
|
||||
return int(p - ps);
|
||||
return int(p - (DukePlayer*)PlayerArray);
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_Duke, getPlayerIndex, getPlayerIndex)
|
||||
{
|
||||
PARAM_PROLOGUE;
|
||||
PARAM_POINTER(p, player_struct);
|
||||
PARAM_POINTER(p, DukePlayer);
|
||||
ACTION_RETURN_INT(getPlayerIndex(p));
|
||||
}
|
||||
|
||||
|
@ -355,10 +355,10 @@ DEFINE_ACTION_FUNCTION_NATIVE(DDukeActor, getglobalz, getglobalz)
|
|||
return 0;
|
||||
}
|
||||
|
||||
player_struct* DukeActor_findplayer(DDukeActor* self, double* dist)
|
||||
DukePlayer* DukeActor_findplayer(DDukeActor* self, double* dist)
|
||||
{
|
||||
double a;
|
||||
return &ps[findplayer(self, dist? dist : &a)];
|
||||
return getPlayer(findplayer(self, dist? dist : &a));
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(DDukeActor, findplayer, DukeActor_findplayer)
|
||||
|
@ -371,9 +371,9 @@ DEFINE_ACTION_FUNCTION_NATIVE(DDukeActor, findplayer, DukeActor_findplayer)
|
|||
return min(numret, 2);
|
||||
}
|
||||
|
||||
player_struct* DukeActor_getplayer(DDukeActor* self)
|
||||
DukePlayer* DukeActor_getplayer(DDukeActor* self)
|
||||
{
|
||||
return self->isPlayer() ? &ps[self->PlayerIndex()] : nullptr;
|
||||
return self->isPlayer() ? getPlayer(self->PlayerIndex()) : nullptr;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(DDukeActor, getplayer, DukeActor_getplayer)
|
||||
|
@ -713,7 +713,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(DDukeActor, restoreloc, DukeActor_restoreloc)
|
|||
DEFINE_ACTION_FUNCTION_NATIVE(DDukeActor, fakebubbaspawn, fakebubbaspawn)
|
||||
{
|
||||
PARAM_SELF_PROLOGUE(DDukeActor);
|
||||
PARAM_POINTER(p, player_struct);
|
||||
PARAM_POINTER(p, DukePlayer);
|
||||
fakebubbaspawn(self, p);
|
||||
return 0;
|
||||
}
|
||||
|
@ -790,7 +790,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(DDukeActor, SetAI, Duke_SetAI)
|
|||
DEFINE_ACTION_FUNCTION_NATIVE(DDukeActor, checkp, checkp)
|
||||
{
|
||||
PARAM_SELF_PROLOGUE(DDukeActor);
|
||||
PARAM_POINTER(p, player_struct);
|
||||
PARAM_POINTER(p, DukePlayer);
|
||||
PARAM_INT(n);
|
||||
ACTION_RETURN_INT(checkp(self, p, n));
|
||||
}
|
||||
|
@ -798,7 +798,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(DDukeActor, checkp, checkp)
|
|||
DEFINE_ACTION_FUNCTION_NATIVE(DDukeActor, cansee, ifcansee)
|
||||
{
|
||||
PARAM_SELF_PROLOGUE(DDukeActor);
|
||||
PARAM_POINTER(p, player_struct);
|
||||
PARAM_POINTER(p, DukePlayer);
|
||||
PARAM_INT(n);
|
||||
ACTION_RETURN_INT(ifcansee(self, p));
|
||||
}
|
||||
|
@ -813,7 +813,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(DDukeActor, actoroperate, actoroperate)
|
|||
DEFINE_ACTION_FUNCTION_NATIVE(DDukeActor, ifsquished, ifsquished)
|
||||
{
|
||||
PARAM_SELF_PROLOGUE(DDukeActor);
|
||||
PARAM_POINTER(p, player_struct);
|
||||
PARAM_POINTER(p, DukePlayer);
|
||||
ACTION_RETURN_INT(ifcansee(self, p));
|
||||
}
|
||||
|
||||
|
@ -830,7 +830,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(DDukeActor, ChangeType, Duke_ChangeType)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void Duke_fall(DDukeActor* self, player_struct* p)
|
||||
void Duke_fall(DDukeActor* self, DukePlayer* p)
|
||||
{
|
||||
fall(self, p->GetPlayerNum());
|
||||
}
|
||||
|
@ -838,7 +838,7 @@ void Duke_fall(DDukeActor* self, player_struct* p)
|
|||
DEFINE_ACTION_FUNCTION_NATIVE(DDukeActor, fall, Duke_fall)
|
||||
{
|
||||
PARAM_SELF_PROLOGUE(DDukeActor);
|
||||
PARAM_POINTER(p, player_struct);
|
||||
PARAM_POINTER(p, DukePlayer);
|
||||
Duke_fall(self, p);
|
||||
return 0;
|
||||
}
|
||||
|
@ -858,14 +858,14 @@ DEFINE_ACTION_FUNCTION_NATIVE(DDukeActor, dodge, dodge)
|
|||
ACTION_RETURN_INT(dodge(self));
|
||||
}
|
||||
|
||||
int Duke_ifcanshoottarget(DDukeActor* self, player_struct* p, double dist)
|
||||
int Duke_ifcanshoottarget(DDukeActor* self, DukePlayer* p, double dist)
|
||||
{
|
||||
return ifcanshoottarget(self, p->GetPlayerNum(), int(dist * worldtoint));
|
||||
}
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(DDukeActor, ifcanshoottarget, Duke_ifcanshoottarget)
|
||||
{
|
||||
PARAM_SELF_PROLOGUE(DDukeActor);
|
||||
PARAM_POINTER(p, player_struct);
|
||||
PARAM_POINTER(p, DukePlayer);
|
||||
PARAM_FLOAT(x);
|
||||
ACTION_RETURN_INT(Duke_ifcanshoottarget(self, p, x));
|
||||
}
|
||||
|
@ -972,208 +972,208 @@ DEFINE_ACTION_FUNCTION(DDukeActor, killit)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, gotweapon)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, pals)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, weapon_sway)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, oweapon_sway)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, weapon_pos)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, kickback_pic)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, random_club_frame)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, oweapon_pos)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, okickback_pic)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, orandom_club_frame)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, hard_landing)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, ohard_landing)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, psectlotag)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, gotweapon)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, pals)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, weapon_sway)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, oweapon_sway)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, weapon_pos)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, kickback_pic)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, random_club_frame)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, oweapon_pos)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, okickback_pic)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, orandom_club_frame)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, hard_landing)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, ohard_landing)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, psectlotag)
|
||||
//DEFINE_FIELD_X(DukePlayer, player_struct, exitx)
|
||||
//DEFINE_FIELD_X(DukePlayer, player_struct, exity)
|
||||
DEFINE_FIELD_UNSIZED(DukePlayer, player_struct, loogie)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, numloogs)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, loogcnt)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, invdisptime)
|
||||
DEFINE_FIELD_UNSIZED(DukePlayer, DukePlayer, loogie)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, numloogs)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, loogcnt)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, invdisptime)
|
||||
//DEFINE_FIELD_X(DukePlayer, player_struct, bobposx)
|
||||
//DEFINE_FIELD_X(DukePlayer, player_struct, bobposy)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, pyoff)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, opyoff)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, vel)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, last_pissed_time)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, truefz)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, truecz)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, player_par)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, visibility)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, bobcounter)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, randomflamex)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, crack_time)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, aim_mode)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, ftt)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, cursector)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, last_extra)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, subweapon)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, ammo_amount)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, frag)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, fraggedself)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, curr_weapon)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, last_weapon)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, tipincs)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, wantweaponfire)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, holoduke_amount)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, hurt_delay)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, hbomb_hold_delay)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, jumping_counter)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, airleft)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, knee_incs)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, access_incs)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, ftq)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, access_wall)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, got_access)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, weapon_ang)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, firstaid_amount)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, actor)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, one_parallax_sectnum)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, over_shoulder_on)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, fist_incs)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, cheat_phase)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, extra_extra8)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, quick_kick)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, last_quick_kick)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, heat_amount)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, timebeforeexit)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, customexitsound)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, interface_toggle_flag)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, dead_flag)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, show_empty_weapon)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, scuba_amount)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, jetpack_amount)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, steroids_amount)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, shield_amount)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, pycount)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, frag_ps)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, transporter_hold)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, last_full_weapon)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, footprintshade)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, boot_amount)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, on_warping_sector)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, footprintcount)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, hbomb_on)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, jumping_toggle)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, rapid_fire_hold)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, on_ground)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, inven_icon)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, buttonpalette)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, jetpack_on)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, spritebridge)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, lastrandomspot)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, scuba_on)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, footprintpal)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, heat_on)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, holster_weapon)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, falling_counter)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, refresh_inventory)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, toggle_key_flag)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, knuckle_incs)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, walking_snd_toggle)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, palookup)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, quick_kick_msg)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, stairs)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, detonate_count)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, pyoff)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, opyoff)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, vel)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, last_pissed_time)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, truefz)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, truecz)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, player_par)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, visibility)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, bobcounter)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, randomflamex)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, crack_time)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, aim_mode)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, ftt)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, cursector)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, last_extra)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, subweapon)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, ammo_amount)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, frag)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, fraggedself)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, curr_weapon)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, last_weapon)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, tipincs)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, wantweaponfire)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, holoduke_amount)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, hurt_delay)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, hbomb_hold_delay)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, jumping_counter)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, airleft)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, knee_incs)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, access_incs)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, ftq)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, access_wall)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, got_access)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, weapon_ang)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, firstaid_amount)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, actor)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, one_parallax_sectnum)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, over_shoulder_on)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, fist_incs)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, cheat_phase)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, extra_extra8)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, quick_kick)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, last_quick_kick)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, heat_amount)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, timebeforeexit)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, customexitsound)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, interface_toggle_flag)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, dead_flag)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, show_empty_weapon)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, scuba_amount)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, jetpack_amount)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, steroids_amount)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, shield_amount)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, pycount)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, frag_ps)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, transporter_hold)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, last_full_weapon)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, footprintshade)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, boot_amount)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, on_warping_sector)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, footprintcount)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, hbomb_on)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, jumping_toggle)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, rapid_fire_hold)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, on_ground)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, inven_icon)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, buttonpalette)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, jetpack_on)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, spritebridge)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, lastrandomspot)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, scuba_on)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, footprintpal)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, heat_on)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, holster_weapon)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, falling_counter)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, refresh_inventory)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, toggle_key_flag)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, knuckle_incs)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, walking_snd_toggle)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, palookup)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, quick_kick_msg)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, stairs)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, detonate_count)
|
||||
//DEFINE_FIELD_X(DukePlayer, player_struct, noise.X)
|
||||
//DEFINE_FIELD_X(DukePlayer, player_struct, noise.Y)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, noise_radius)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, drink_timer)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, eat_timer)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, SlotWin)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, recoil)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, detonate_time)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, yehaa_timer)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, drink_amt)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, eat)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, drunkang)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, eatang)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, shotgun_state)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, donoise)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, keys)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, drug_aspect)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, drug_timer)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, SeaSick)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, MamaEnd)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, moto_drink)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, TiltStatus)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, oTiltStatus)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, VBumpNow)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, VBumpTarget)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, TurbCount)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, drug_stat)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, DrugMode)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, lotag800kill)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, sea_sick_stat)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, hurt_delay2)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, nocheat)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, OnMotorcycle)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, OnBoat)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, moto_underwater)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, NotOnWater)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, MotoOnGround)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, moto_do_bump)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, moto_bump_fast)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, moto_on_oil)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, moto_on_mud)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, MotoSpeed)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, holoduke_on)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, actorsqu)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, wackedbyactor)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, on_crane)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, somethingonplayer)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, access_spritenum)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, dummyplayersprite)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, newOwner)
|
||||
DEFINE_FIELD_X(DukePlayer, player_struct, fric)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, noise_radius)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, drink_timer)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, eat_timer)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, SlotWin)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, recoil)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, detonate_time)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, yehaa_timer)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, drink_amt)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, eat)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, drunkang)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, eatang)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, shotgun_state)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, donoise)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, keys)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, drug_aspect)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, drug_timer)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, SeaSick)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, MamaEnd)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, moto_drink)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, TiltStatus)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, oTiltStatus)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, VBumpNow)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, VBumpTarget)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, TurbCount)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, drug_stat)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, DrugMode)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, lotag800kill)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, sea_sick_stat)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, hurt_delay2)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, nocheat)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, OnMotorcycle)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, OnBoat)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, moto_underwater)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, NotOnWater)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, MotoOnGround)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, moto_do_bump)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, moto_bump_fast)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, moto_on_oil)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, moto_on_mud)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, MotoSpeed)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, holoduke_on)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, actorsqu)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, wackedbyactor)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, on_crane)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, somethingonplayer)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, access_spritenum)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, dummyplayersprite)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, newOwner)
|
||||
DEFINE_FIELD_X(DukePlayer, DukePlayer, fric)
|
||||
|
||||
DEFINE_ACTION_FUNCTION(_DukePlayer, IsFrozen)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
ACTION_RETURN_BOOL(self->GetActor()->spr.pal == 1 && self->last_extra < 2);
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION(_DukePlayer, GetGameVar)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
PARAM_STRING(name);
|
||||
PARAM_INT(def);
|
||||
ACTION_RETURN_INT(GetGameVar(name, def, self->GetActor(), self->GetPlayerNum()).safeValue());
|
||||
}
|
||||
|
||||
void dukeplayer_backuppos(player_struct* self)
|
||||
void dukeplayer_backuppos(DukePlayer* self)
|
||||
{
|
||||
self->backuppos();
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, backuppos, dukeplayer_backuppos)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
dukeplayer_backuppos(self);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void dukeplayer_backupxyz(player_struct* self)
|
||||
void dukeplayer_backupxyz(DukePlayer* self)
|
||||
{
|
||||
self->GetActor()->backuppos();
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, backupxyz, dukeplayer_backupxyz)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
dukeplayer_backupxyz(self);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void dukeplayer_setpos(player_struct* self, double x, double y, double z)
|
||||
void dukeplayer_setpos(DukePlayer* self, double x, double y, double z)
|
||||
{
|
||||
self->GetActor()->spr.pos = { x, y, z + self->GetActor()->viewzoffset };
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, setpos, dukeplayer_setpos)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
PARAM_FLOAT(x);
|
||||
PARAM_FLOAT(y);
|
||||
PARAM_FLOAT(z);
|
||||
|
@ -1181,14 +1181,14 @@ DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, setpos, dukeplayer_setpos)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void dukeplayer_addpos(player_struct* self, double x, double y, double z)
|
||||
void dukeplayer_addpos(DukePlayer* self, double x, double y, double z)
|
||||
{
|
||||
self->GetActor()->spr.pos += { x, y, z };
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, addpos, dukeplayer_addpos)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
PARAM_FLOAT(x);
|
||||
PARAM_FLOAT(y);
|
||||
PARAM_FLOAT(z);
|
||||
|
@ -1196,31 +1196,31 @@ DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, addpos, dukeplayer_addpos)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void dukeplayer_centerview(player_struct* self)
|
||||
void dukeplayer_centerview(DukePlayer* self)
|
||||
{
|
||||
self->sync.actions |= SB_CENTERVIEW;
|
||||
self->cmd.ucmd.actions |= SB_CENTERVIEW;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, centerview, dukeplayer_centerview)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
self->sync.actions |= SB_CENTERVIEW;
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
self->cmd.ucmd.actions |= SB_CENTERVIEW;
|
||||
return 0;
|
||||
}
|
||||
|
||||
inline int DukePlayer_PlayerInput(player_struct* pl, int bit)
|
||||
inline int DukePlayer_PlayerInput(DukePlayer* pl, int bit)
|
||||
{
|
||||
return (!!((pl->sync.actions) & ESyncBits::FromInt(bit)));
|
||||
return (!!((pl->cmd.ucmd.actions) & ESyncBits::FromInt(bit)));
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, playerinput, DukePlayer_PlayerInput)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
PARAM_INT(bit);
|
||||
ACTION_RETURN_INT(DukePlayer_PlayerInput(self, bit));
|
||||
}
|
||||
|
||||
void dukeplayer_settargetangle(player_struct* self, double a, int backup)
|
||||
void dukeplayer_settargetangle(DukePlayer* self, double a, int backup)
|
||||
{
|
||||
self->GetActor()->spr.Angles.Yaw = DAngle::fromDeg(a);
|
||||
if (backup) self->GetActor()->PrevAngles.Yaw = self->GetActor()->spr.Angles.Yaw;
|
||||
|
@ -1228,32 +1228,32 @@ void dukeplayer_settargetangle(player_struct* self, double a, int backup)
|
|||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, settargetangle, dukeplayer_settargetangle)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
PARAM_FLOAT(a);
|
||||
PARAM_BOOL(bak);
|
||||
dukeplayer_settargetangle(self, a, bak);
|
||||
return 0;
|
||||
}
|
||||
|
||||
double dukeplayer_angle(player_struct* self)
|
||||
double dukeplayer_angle(DukePlayer* self)
|
||||
{
|
||||
return self->GetActor()->spr.Angles.Yaw.Degrees();
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, angle, dukeplayer_angle)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
ACTION_RETURN_FLOAT(dukeplayer_angle(self));
|
||||
}
|
||||
|
||||
void dukeplayer_addpitch(player_struct* self, double a)
|
||||
void dukeplayer_addpitch(DukePlayer* self, double a)
|
||||
{
|
||||
self->GetActor()->spr.Angles.Pitch += DAngle::fromDeg(a);
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, addpitch, dukeplayer_addpitch)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
PARAM_FLOAT(a);
|
||||
dukeplayer_addpitch(self, a);
|
||||
return 0;
|
||||
|
@ -1261,27 +1261,27 @@ DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, addpitch, dukeplayer_addpitch)
|
|||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, clearcameras, clearcameras)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
clearcameras(self);
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, quickkill, quickkill)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
quickkill(self);
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, CheckWeapRec, CheckWeapRec)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
PARAM_POINTER(ac, DDukeActor);
|
||||
PARAM_BOOL(test);
|
||||
ACTION_RETURN_INT(CheckWeapRec(self, ac, test));
|
||||
}
|
||||
|
||||
void DukePlayer_addammo(player_struct* p, int ammo, int amount)
|
||||
void DukePlayer_addammo(DukePlayer* p, int ammo, int amount)
|
||||
{
|
||||
if ((unsigned)ammo >= MAX_WEAPONS) ThrowAbortException(X_ARRAY_OUT_OF_BOUNDS, "Ammo number out of range");
|
||||
addammo(ammo, p, amount);
|
||||
|
@ -1289,14 +1289,14 @@ void DukePlayer_addammo(player_struct* p, int ammo, int amount)
|
|||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, addammo, DukePlayer_addammo)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
PARAM_INT(type);
|
||||
PARAM_INT(amount);
|
||||
DukePlayer_addammo(self, type, amount);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void DukePlayer_addweapon(player_struct* p, int wpn, int switchit)
|
||||
void DukePlayer_addweapon(DukePlayer* p, int wpn, int switchit)
|
||||
{
|
||||
if ((unsigned)wpn >= MAX_WEAPONS) ThrowAbortException(X_ARRAY_OUT_OF_BOUNDS, "Weapon number out of range");
|
||||
fi.addweapon(p, wpn, switchit);
|
||||
|
@ -1304,7 +1304,7 @@ void DukePlayer_addweapon(player_struct* p, int wpn, int switchit)
|
|||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, addweapon, DukePlayer_addweapon)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
PARAM_INT(type);
|
||||
PARAM_INT(switchit);
|
||||
DukePlayer_addweapon(self, type, switchit);
|
||||
|
@ -1314,57 +1314,57 @@ DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, addweapon, DukePlayer_addweapon)
|
|||
|
||||
DEFINE_ACTION_FUNCTION(_DukePlayer, hitablockingwall)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
walltype* pwal;
|
||||
hitawall(self, &pwal);
|
||||
ACTION_RETURN_BOOL(pwal && pwal->overtexture.isValid());
|
||||
}
|
||||
|
||||
inline double DukePlayer_GetPitchwithView(player_struct* pl)
|
||||
inline double DukePlayer_GetPitchwithView(DukePlayer* pl)
|
||||
{
|
||||
return pl->Angles.getPitchWithView().Degrees();
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, GetPitchwithView, DukePlayer_GetPitchwithView)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
ACTION_RETURN_FLOAT(DukePlayer_GetPitchwithView(self));
|
||||
}
|
||||
|
||||
inline void DukePlayer_setbobpos(player_struct* pl)
|
||||
inline void DukePlayer_setbobpos(DukePlayer* pl)
|
||||
{
|
||||
return pl->setbobpos();
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, setbobpos, DukePlayer_setbobpos)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
self->setbobpos();
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, StartMotorcycle, OnMotorcycle)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
OnMotorcycle(self);
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, StartBoat, OnBoat)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
OnBoat(self);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void pl_checkhitswitch(player_struct* p, walltype* wal, DDukeActor* act)
|
||||
void pl_checkhitswitch(DukePlayer* p, walltype* wal, DDukeActor* act)
|
||||
{
|
||||
checkhitswitch(p->GetPlayerNum(), wal, act);
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, checkhitswitch, pl_checkhitswitch)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
PARAM_POINTER(wal, walltype);
|
||||
PARAM_POINTER(act, DDukeActor);
|
||||
pl_checkhitswitch(self, wal, act);
|
||||
|
@ -1373,7 +1373,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, checkhitswitch, pl_checkhitswitch)
|
|||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, playerkick, playerkick)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
PARAM_POINTER(act, DDukeActor);
|
||||
playerkick(self, act);
|
||||
return 0;
|
||||
|
@ -1381,7 +1381,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, playerkick, playerkick)
|
|||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, playerstomp, playerstomp)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
PARAM_POINTER(act, DDukeActor);
|
||||
playerstomp(self, act);
|
||||
return 0;
|
||||
|
@ -1389,7 +1389,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, playerstomp, playerstomp)
|
|||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, playerreset, playerreset)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
PARAM_POINTER(act, DDukeActor);
|
||||
playerreset(self, act);
|
||||
return 0;
|
||||
|
@ -1397,7 +1397,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, playerreset, playerreset)
|
|||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, addphealth, addphealth)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
PARAM_INT(amt);
|
||||
PARAM_INT(big);
|
||||
addphealth(self, amt, big);
|
||||
|
@ -1406,30 +1406,30 @@ DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, addphealth, addphealth)
|
|||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, wackplayer, wackplayer)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
wackplayer(self);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void duke_checkweapons(player_struct* p)
|
||||
static void duke_checkweapons(DukePlayer* p)
|
||||
{
|
||||
fi.checkweapons(p);
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, checkweapons, duke_checkweapons)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
duke_checkweapons(self);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void msg(player_struct* p, int num)
|
||||
static void msg(DukePlayer* p, int num)
|
||||
{
|
||||
FTA(num, p);
|
||||
}
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, FTA, msg)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
PARAM_INT(num);
|
||||
FTA(num, self);
|
||||
return 0;
|
||||
|
@ -1437,7 +1437,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, FTA, msg)
|
|||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, playercheckinventory, playercheckinventory)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
PARAM_POINTER(act, DDukeActor);
|
||||
PARAM_INT(num);
|
||||
PARAM_INT(amt);
|
||||
|
@ -1446,7 +1446,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, playercheckinventory, playercheckinve
|
|||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, playeraddinventory, playeraddinventory)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
PARAM_POINTER(act, DDukeActor);
|
||||
PARAM_INT(num);
|
||||
PARAM_INT(amt);
|
||||
|
@ -1456,7 +1456,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, playeraddinventory, playeraddinventor
|
|||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, playeraddweapon, playeraddweapon)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
PARAM_INT(num);
|
||||
PARAM_INT(amt);
|
||||
ACTION_RETURN_BOOL(playeraddweapon(self, num, amt));
|
||||
|
@ -1464,7 +1464,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, playeraddweapon, playeraddweapon)
|
|||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, playeraddammo, playeraddammo)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
PARAM_INT(num);
|
||||
PARAM_INT(amt);
|
||||
ACTION_RETURN_BOOL(playeraddammo(self, num, amt));
|
||||
|
@ -1472,14 +1472,14 @@ DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, playeraddammo, playeraddammo)
|
|||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, forceplayerangle, forceplayerangle)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
forceplayerangle(self);
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, playereat, playereat)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
PARAM_INT(amt);
|
||||
PARAM_BOOL(big);
|
||||
ACTION_RETURN_BOOL(playereat(self, amt, big));
|
||||
|
@ -1487,7 +1487,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, playereat, playereat)
|
|||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, playerdrink, playerdrink)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
PARAM_SELF_STRUCT_PROLOGUE(DukePlayer);
|
||||
PARAM_INT(amt);
|
||||
playerdrink(self, amt);
|
||||
return 0;
|
||||
|
@ -1609,7 +1609,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(_DukeLevel, operateactivators, operateactivators)
|
|||
{
|
||||
PARAM_PROLOGUE;
|
||||
PARAM_INT(lotag);
|
||||
PARAM_POINTER(p, player_struct);
|
||||
PARAM_POINTER(p, DukePlayer);
|
||||
operateactivators(lotag, p);
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -138,7 +138,7 @@ void SetNewWeaponIfBetter(int nPlayer, int nWeapon);
|
|||
void SelectNewWeapon(int nPlayer);
|
||||
void CheckClip(int nPlayer);
|
||||
void MoveWeapons(int nPlayer);
|
||||
void DrawWeapons(Player* const pPlayer, double interpfrac);
|
||||
void DrawWeapons(ExhumedPlayer* const pPlayer, double interpfrac);
|
||||
|
||||
// items
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@ static DExhumedActor* BuildBubble(const DVector3& pos, sectortype* pSector, cons
|
|||
nSize -= 4;
|
||||
|
||||
// Was inita global previously.
|
||||
const auto nAngle = PlayerList[nPlayer].pActor->spr.Angles.Yaw;
|
||||
const auto nAngle = getPlayer(nPlayer)->GetActor()->spr.Angles.Yaw;
|
||||
const auto pActor = insertActor(pSector, 402);
|
||||
|
||||
pActor->spr.pos = pos;
|
||||
|
|
|
@ -449,9 +449,9 @@ HITSPRITE:
|
|||
if (pActor->spr.pal == 5 && hitactor->spr.statnum == 100)
|
||||
{
|
||||
int nPlayer = GetPlayerFromActor(hitactor);
|
||||
if (!PlayerList[nPlayer].bIsMummified)
|
||||
if (!getPlayer(nPlayer)->bIsMummified)
|
||||
{
|
||||
PlayerList[nPlayer].bIsMummified = true;
|
||||
getPlayer(nPlayer)->bIsMummified = true;
|
||||
SetNewWeapon(nPlayer, kWeaponMummified);
|
||||
}
|
||||
}
|
||||
|
@ -598,7 +598,7 @@ DExhumedActor* BuildBullet(DExhumedActor* pActor, int nType, double fZOffset, DA
|
|||
|
||||
if (pActor->spr.statnum == 100)
|
||||
{
|
||||
pSector = PlayerList[GetPlayerFromActor(pActor)].pPlayerViewSect;
|
||||
pSector = getPlayer(GetPlayerFromActor(pActor))->pPlayerViewSect;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue