From 6067c7eef8cbe208c39b5450563e43ce4bcdd4f3 Mon Sep 17 00:00:00 2001 From: Marco Cawthorne Date: Thu, 27 Jul 2023 23:27:23 -0700 Subject: [PATCH] Rebuild against FreeHL Develop --- src/client/init.qc | 5 - src/client/progs.src | 1 + src/server/gamerules_multiplayer.qc | 20 +- src/server/gamerules_singleplayer.qc | 20 +- src/server/sphere_explosion.qc | 2 +- src/shared/include.src | 5 - src/shared/player.qc | 536 +++++++++++++++------------ zpak001.pk3dir/scripts/constants.txt | 11 + 8 files changed, 332 insertions(+), 268 deletions(-) create mode 100644 zpak001.pk3dir/scripts/constants.txt diff --git a/src/client/init.qc b/src/client/init.qc index 0392de2..fdd6284 100644 --- a/src/client/init.qc +++ b/src/client/init.qc @@ -39,11 +39,6 @@ ClientGame_RendererRestart(string rstr) Damage_Precache(); FX_Blood_Init(); - FX_BreakModel_Init(); - FX_Explosion_Init(); - FX_GibHuman_Init(); - FX_Spark_Init(); - FX_Impact_Init(); FX_GaussBeam_Init(); BEAM_TRIPMINE = particleeffectnum("weapon_tripmine.beam"); diff --git a/src/client/progs.src b/src/client/progs.src index 1171551..ebdf8ce 100644 --- a/src/client/progs.src +++ b/src/client/progs.src @@ -33,6 +33,7 @@ entities.qc ../../../valve/src/client/hud_dmgnotify.qc hud.qc hud_weaponselect.qc +../../../valve/src/client/hud_sprite.qc ../../../valve/src/client/scoreboard.qc ../../../valve/src/client/modelevent.qc diff --git a/src/server/gamerules_multiplayer.qc b/src/server/gamerules_multiplayer.qc index 804d7d4..12898b0 100644 --- a/src/server/gamerules_multiplayer.qc +++ b/src/server/gamerules_multiplayer.qc @@ -100,7 +100,9 @@ HLMultiplayerRules::PlayerDeath(NSClientPlayer pl) /* either gib, or make a corpse */ if (pl.health < -50) { - FX_GibHuman(pl.origin, vectoangles(pl.origin - g_dmg_eAttacker.origin), g_dmg_iDamage * 2.0f); + vector gibDir = vectoangles(pl.origin - g_dmg_eAttacker.origin); + float gibStrength = g_dmg_iDamage * 2.0f; + BreakModel_Entity(pl, gibDir, gibStrength); } else { FX_Corpse_Spawn((player)pl, ANIM_DIESIMPLE); } @@ -150,16 +152,16 @@ HLMultiplayerRules::PlayerSpawn(NSClientPlayer pp) } setmodel(pl, pl.model); - setsize(pl, VEC_HULL_MIN, VEC_HULL_MAX); - pl.velocity = [0,0,0]; + pl.SetSize(VEC_HULL_MIN, VEC_HULL_MAX); + pl.ClearVelocity(); pl.gravity = __NULL__; - pl.frame = 1; - //pl.SendEntity = Player_SendEntity; + pl.SetFrame(1); pl.SendFlags = UPDATE_ALL; - pl.customphysics = Empty; - pl.iBleeds = TRUE; - forceinfokey(pl, "*spec", "0"); - forceinfokey(pl, "*deaths", ftos(pl.deaths)); + pl.SetInfoKey("*spec", "0"); + pl.SetInfoKey("*dead", "0"); + pl.SetInfoKey("*deaths", ftos(pl.deaths)); + pl.SetPropData("actor_human"); + pl.SetCanBleed(true); LevelNewParms(); LevelDecodeParms(pl); diff --git a/src/server/gamerules_singleplayer.qc b/src/server/gamerules_singleplayer.qc index a1179a2..3cfb86e 100644 --- a/src/server/gamerules_singleplayer.qc +++ b/src/server/gamerules_singleplayer.qc @@ -37,7 +37,9 @@ HLSingleplayerRules::PlayerDeath(NSClientPlayer pl) } if (pl.health < -50) { - FX_GibHuman(pl.origin, vectoangles(pl.origin - g_dmg_eAttacker.origin), g_dmg_iDamage * 2.0f); + vector gibDir = vectoangles(pl.origin - g_dmg_eAttacker.origin); + float gibStrength = g_dmg_iDamage * 2.0f; + BreakModel_Entity(pl, gibDir, gibStrength); } /* Let's handle corpses on the clientside */ @@ -78,16 +80,16 @@ HLSingleplayerRules::PlayerSpawn(NSClientPlayer pl) setmodel(pl, pl.model); - setsize(pl, VEC_HULL_MIN, VEC_HULL_MAX); - pl.velocity = [0,0,0]; + pl.SetSize(VEC_HULL_MIN, VEC_HULL_MAX); + pl.ClearVelocity(); pl.gravity = __NULL__; - pl.frame = 1; - //pl.SendEntity = Player_SendEntity; + pl.SetFrame(1); pl.SendFlags = UPDATE_ALL; - pl.customphysics = Empty; - pl.iBleeds = TRUE; - forceinfokey(pl, "*spec", "0"); - forceinfokey(pl, "*deaths", ftos(pl.deaths)); + pl.SetInfoKey("*spec", "0"); + pl.SetInfoKey("*dead", "0"); + pl.SetInfoKey("*deaths", ftos(pl.deaths)); + pl.SetPropData("actor_human"); + pl.SetCanBleed(true); /* this is where the mods want to deviate */ entity spot; diff --git a/src/server/sphere_explosion.qc b/src/server/sphere_explosion.qc index 6f99404..5297582 100644 --- a/src/server/sphere_explosion.qc +++ b/src/server/sphere_explosion.qc @@ -61,7 +61,7 @@ sphere_explosion:NSPointTrigger void sphere_explosion::Trigger(entity eAct, triggermode_t iState) { - FX_Explosion(origin); + pointparticles(particleeffectnum("fx_explosion.main"), origin, [0,0,0], 1); } void diff --git a/src/shared/include.src b/src/shared/include.src index 4721f07..1efa699 100644 --- a/src/shared/include.src +++ b/src/shared/include.src @@ -9,11 +9,6 @@ player.qc ../../../valve/src/shared/fx_blood.qc fx_gaussbeam.qc -../../../valve/src/shared/fx_breakmodel.qc -../../../valve/src/shared/fx_explosion.qc -../../../valve/src/shared/fx_gibhuman.qc -../../../valve/src/shared/fx_spark.qc -../../../valve/src/shared/fx_impact.qc ../../../valve/src/shared/fx_corpse.qc items.h diff --git a/src/shared/player.qc b/src/shared/player.qc index e309bd7..d638671 100644 --- a/src/shared/player.qc +++ b/src/shared/player.qc @@ -14,6 +14,8 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include "../../../valve/src/shared/skeleton.h" + /* all potential SendFlags bits we can possibly send */ enumflags { @@ -65,74 +67,198 @@ class player:NSClientPlayer PREDICTED_INT(menu_active) PREDICTED_INT(dml_state) + virtual void UpdatePlayerAnimation(float); + #ifdef CLIENT - virtual void(float,float) ReceiveEntity; - virtual void(void) PredictPreFrame; - virtual void(void) PredictPostFrame; -#else + virtual void UpdatePlayerAttachments(bool); + virtual void ReceiveEntity(float,float); + virtual void PredictPreFrame(void); + virtual void PredictPostFrame(void); + virtual void UpdateAliveCam(void); +#endif + +#ifdef SERVER virtual void(void) EvaluateEntity; virtual float(entity, float) SendEntity; #endif }; +void Animation_PlayerUpdate(player); +void Animation_TimerUpdate(player, float); + +void +player::UpdatePlayerAnimation(float timelength) +{ + /* calculate our skeletal progression */ + Animation_PlayerUpdate(this); + /* advance animation timers */ + Animation_TimerUpdate(this, timelength); +} + #ifdef CLIENT +void Camera_RunPosBob(vector angles, __inout vector camera_pos); +void Camera_StrafeRoll(__inout vector camera_angle); +void Shake_Update(NSClientPlayer); + +void +player::UpdateAliveCam(void) +{ + vector cam_pos = GetEyePos(); + Camera_RunPosBob(view_angles, cam_pos); + + g_view.SetCameraOrigin(cam_pos); + Camera_StrafeRoll(view_angles); + g_view.SetCameraAngle(view_angles); + + if (vehicle) { + NSVehicle veh = (NSVehicle)vehicle; + + if (veh.UpdateView) + veh.UpdateView(); + } else if (health) { + if (autocvar_pm_thirdPerson == TRUE) { + makevectors(view_angles); + vector vStart = [pSeat->m_vecPredictedOrigin[0], pSeat->m_vecPredictedOrigin[1], pSeat->m_vecPredictedOrigin[2] + 16] + (v_right * 4); + vector vEnd = vStart + (v_forward * -48) + [0,0,16] + (v_right * 4); + traceline(vStart, vEnd, FALSE, this); + g_view.SetCameraOrigin(trace_endpos + (v_forward * 5)); + } + } + + Shake_Update(this); + g_view.AddPunchAngle(punchangle); +} + +.string oldmodel; +string Weapons_GetPlayermodel(player, int); + +void +player::UpdatePlayerAttachments(bool visible) +{ + /* draw the flashlight */ + if (gflags & GF_FLASHLIGHT) { + vector src; + vector ang; + + if (entnum != player_localentnum) { + src = origin + view_ofs; + ang = v_angle; + } else { + src = pSeat->m_vecPredictedOrigin + [0,0,-8]; + ang = view_angles; + } + + makevectors(ang); + traceline(src, src + (v_forward * 8096), MOVE_NORMAL, this); + + if (serverkeyfloat("*bspversion") == BSPVER_HL) { + dynamiclight_add(trace_endpos + (v_forward * -2), 128, [1,1,1]); + } else { + float p = dynamiclight_add(src, 512, [1,1,1], 0, "textures/flashlight"); + dynamiclight_set(p, LFIELD_ANGLES, ang); + dynamiclight_set(p, LFIELD_FLAGS, 3); + } + } + + /* FIXME: this needs to be incorporated and simplified, now that we can handle it all in-class */ + if (!visible) + return; + + /* what's the current weapon model supposed to be anyway? */ + p_model.oldmodel = Weapons_GetPlayermodel(this, activeweapon); + + /* we changed weapons, update skeletonindex */ + if (p_model.model != p_model.oldmodel) { + /* free memory */ + if (p_model.skeletonindex) + skel_delete(p_model.skeletonindex); + + /* set the new model and mark us updated */ + setmodel(p_model, p_model.oldmodel); + p_model.model = p_model.oldmodel; + + /* set the new skeletonindex */ + p_model.skeletonindex = skel_create(p_model.modelindex); + + /* hack this thing in here FIXME: this should be done when popping in/out of a pvs */ + if (autocvar(cl_himodels, 1, "Use high-quality thisayer models over lower-definition ones")) + setcustomskin(this, "", "geomset 0 2\n"); + else + setcustomskin(this, "", "geomset 0 1\n"); + } + + /* follow thisayer at all times */ + setorigin(p_model, origin); + p_model.angles = angles; + skel_build(p_model.skeletonindex, p_model, p_model.modelindex,0, 0, -1); + + /* we have to loop through all valid bones of the weapon model and match them + * to the thisayer one */ + for (float i = 0; i < g_pbones.length; i++) { + vector bpos; + float pbone = gettagindex(this, g_pbones[i]); + float wbone = gettagindex(p_model, g_pbones[i]); + + /* if the bone doesn't ignore in either skeletal mesh, ignore */ + if (wbone <= 0 || pbone <= 0) + continue; + + bpos = gettaginfo(this, pbone); + + /* the most expensive bit */ + skel_set_bone_world(p_model, wbone, bpos, v_forward, v_right, v_up); + } +} + void Weapons_AmmoUpdate(entity); + /* ================= player::ReceiveEntity ================= */ void -player::ReceiveEntity(float new, float fl) +player::ReceiveEntity(float new, float flChanged) { - NSClientPlayer::ReceiveEntity(new, fl); + NSClientPlayer::ReceiveEntity(new, flChanged); /* animation */ - if (fl & PLAYER_TOPFRAME) { - anim_top = readbyte(); - anim_top_time = readfloat(); - anim_top_delay = readfloat(); - } - if (fl & PLAYER_BOTTOMFRAME) { - anim_bottom = readbyte(); - anim_bottom_time = readfloat(); - } + READENTITY_BYTE(anim_top, PLAYER_TOPFRAME); + READENTITY_FLOAT(anim_top_time, PLAYER_TOPFRAME); + READENTITY_FLOAT(anim_top_delay, PLAYER_TOPFRAME); - if (fl & PLAYER_AMMO1) { - ammo_battery = readbyte(); - ammo_chem = readbyte(); - ammo_rocket = readbyte(); - ammo_gauss = readbyte(); - ammo_minigun = readbyte(); - ammo_buckshot = readbyte(); - fist_mode = readbyte(); - gauss_mode = readbyte(); - shotgun_shells = readbyte(); - shotgun_spread = readbyte(); - } - - if (fl & PLAYER_AMMO2) { - dml_launch = readbyte(); - dml_flightpath = readbyte(); - dml_detonate = readbyte(); - dml_payload = readbyte(); - chem_acid = readbyte(); - chem_neutral = readbyte(); - chem_base = readbyte(); - chem_pressure = readbyte(); - } + READENTITY_BYTE(anim_bottom, PLAYER_BOTTOMFRAME); + READENTITY_FLOAT(anim_bottom_time, PLAYER_BOTTOMFRAME); - if (fl & PLAYER_AMMO3) { - beam_range = readbyte(); - beam_poweracc = readbyte(); - beam_lightning = readbyte(); - gren_detonate = readbyte(); - gren_payload = readbyte(); - menu_active = readbyte(); - dml_state = readbyte(); - } + READENTITY_BYTE(ammo_battery, PLAYER_AMMO1); + READENTITY_BYTE(ammo_chem, PLAYER_AMMO1); + READENTITY_BYTE(ammo_rocket, PLAYER_AMMO1); + READENTITY_BYTE(ammo_gauss, PLAYER_AMMO1); + READENTITY_BYTE(ammo_minigun, PLAYER_AMMO1); + READENTITY_BYTE(ammo_buckshot, PLAYER_AMMO1); + READENTITY_BYTE(fist_mode, PLAYER_AMMO1); + READENTITY_BYTE(gauss_mode, PLAYER_AMMO1); + READENTITY_BYTE(shotgun_shells, PLAYER_AMMO1); + READENTITY_BYTE(shotgun_spread, PLAYER_AMMO1); - if (fl & PLAYER_AMMO1 || fl & PLAYER_AMMO2 || fl & PLAYER_AMMO3) + READENTITY_BYTE(dml_launch, PLAYER_AMMO2); + READENTITY_BYTE(dml_flightpath, PLAYER_AMMO2); + READENTITY_BYTE(dml_detonate, PLAYER_AMMO2); + READENTITY_BYTE(dml_payload, PLAYER_AMMO2); + READENTITY_BYTE(chem_acid, PLAYER_AMMO2); + READENTITY_BYTE(chem_neutral, PLAYER_AMMO2); + READENTITY_BYTE(chem_base, PLAYER_AMMO2); + READENTITY_BYTE(chem_pressure, PLAYER_AMMO2); + + READENTITY_BYTE(beam_range, PLAYER_AMMO3); + READENTITY_BYTE(beam_poweracc, PLAYER_AMMO3); + READENTITY_BYTE(beam_lightning, PLAYER_AMMO3); + READENTITY_BYTE(gren_detonate, PLAYER_AMMO3); + READENTITY_BYTE(gren_payload, PLAYER_AMMO3); + READENTITY_BYTE(menu_active, PLAYER_AMMO3); + READENTITY_BYTE(dml_state, PLAYER_AMMO3); + + if (flChanged & PLAYER_AMMO1 || flChanged & PLAYER_AMMO2 || flChanged & PLAYER_AMMO3) Weapons_AmmoUpdate(this); setorigin(this, origin); @@ -151,40 +277,40 @@ player::PredictPreFrame(void) { NSClientPlayer::PredictPreFrame(); - SAVE_STATE(anim_top); - SAVE_STATE(anim_top_time); - SAVE_STATE(anim_top_delay); - SAVE_STATE(anim_bottom); - SAVE_STATE(anim_bottom_time); + SAVE_STATE(anim_top) + SAVE_STATE(anim_top_time) + SAVE_STATE(anim_top_delay) + SAVE_STATE(anim_bottom) + SAVE_STATE(anim_bottom_time) - SAVE_STATE(ammo_battery); - SAVE_STATE(ammo_chem); - SAVE_STATE(ammo_rocket); - SAVE_STATE(ammo_gauss); - SAVE_STATE(ammo_minigun); - SAVE_STATE(ammo_buckshot); - SAVE_STATE(fist_mode); - SAVE_STATE(gauss_mode); - SAVE_STATE(shotgun_shells); - SAVE_STATE(shotgun_spread); + SAVE_STATE(ammo_battery) + SAVE_STATE(ammo_chem) + SAVE_STATE(ammo_rocket) + SAVE_STATE(ammo_gauss) + SAVE_STATE(ammo_minigun) + SAVE_STATE(ammo_buckshot) + SAVE_STATE(fist_mode) + SAVE_STATE(gauss_mode) + SAVE_STATE(shotgun_shells) + SAVE_STATE(shotgun_spread) - SAVE_STATE(dml_launch); - SAVE_STATE(dml_flightpath); - SAVE_STATE(dml_detonate); - SAVE_STATE(dml_payload); - SAVE_STATE(chem_acid); - SAVE_STATE(chem_neutral); - SAVE_STATE(chem_base); - SAVE_STATE(chem_pressure); + SAVE_STATE(dml_launch) + SAVE_STATE(dml_flightpath) + SAVE_STATE(dml_detonate) + SAVE_STATE(dml_payload) + SAVE_STATE(chem_acid) + SAVE_STATE(chem_neutral) + SAVE_STATE(chem_base) + SAVE_STATE(chem_pressure) - SAVE_STATE(beam_range); - SAVE_STATE(beam_poweracc); - SAVE_STATE(beam_lightning); - SAVE_STATE(gren_detonate); - SAVE_STATE(gren_payload); + SAVE_STATE(beam_range) + SAVE_STATE(beam_poweracc) + SAVE_STATE(beam_lightning) + SAVE_STATE(gren_detonate) + SAVE_STATE(gren_payload) - SAVE_STATE(menu_active); - SAVE_STATE(dml_state); + SAVE_STATE(menu_active) + SAVE_STATE(dml_state) } /* @@ -199,40 +325,40 @@ player::PredictPostFrame(void) { NSClientPlayer::PredictPostFrame(); - ROLL_BACK(anim_top); - ROLL_BACK(anim_top_time); - ROLL_BACK(anim_top_delay); - ROLL_BACK(anim_bottom); - ROLL_BACK(anim_bottom_time); + ROLL_BACK(anim_top) + ROLL_BACK(anim_top_time) + ROLL_BACK(anim_top_delay) + ROLL_BACK(anim_bottom) + ROLL_BACK(anim_bottom_time) - ROLL_BACK(ammo_battery); - ROLL_BACK(ammo_chem); - ROLL_BACK(ammo_rocket); - ROLL_BACK(ammo_gauss); - ROLL_BACK(ammo_minigun); - ROLL_BACK(ammo_buckshot); - ROLL_BACK(fist_mode); - ROLL_BACK(gauss_mode); - ROLL_BACK(shotgun_shells); - ROLL_BACK(shotgun_spread); + ROLL_BACK(ammo_battery) + ROLL_BACK(ammo_chem) + ROLL_BACK(ammo_rocket) + ROLL_BACK(ammo_gauss) + ROLL_BACK(ammo_minigun) + ROLL_BACK(ammo_buckshot) + ROLL_BACK(fist_mode) + ROLL_BACK(gauss_mode) + ROLL_BACK(shotgun_shells) + ROLL_BACK(shotgun_spread) - ROLL_BACK(dml_launch); - ROLL_BACK(dml_flightpath); - ROLL_BACK(dml_detonate); - ROLL_BACK(dml_payload); - ROLL_BACK(chem_acid); - ROLL_BACK(chem_neutral); - ROLL_BACK(chem_base); - ROLL_BACK(chem_pressure); + ROLL_BACK(dml_launch) + ROLL_BACK(dml_flightpath) + ROLL_BACK(dml_detonate) + ROLL_BACK(dml_payload) + ROLL_BACK(chem_acid) + ROLL_BACK(chem_neutral) + ROLL_BACK(chem_base) + ROLL_BACK(chem_pressure) - ROLL_BACK(beam_range); - ROLL_BACK(beam_poweracc); - ROLL_BACK(beam_lightning); - ROLL_BACK(gren_detonate); - ROLL_BACK(gren_payload); + ROLL_BACK(beam_range) + ROLL_BACK(beam_poweracc) + ROLL_BACK(beam_lightning) + ROLL_BACK(gren_detonate) + ROLL_BACK(gren_payload) - ROLL_BACK(menu_active); - ROLL_BACK(dml_state); + ROLL_BACK(menu_active) + ROLL_BACK(dml_state) } #else @@ -241,100 +367,40 @@ player::EvaluateEntity(void) { NSClientPlayer::EvaluateEntity(); - /* animation */ - if (ATTR_CHANGED(anim_bottom) || ATTR_CHANGED(anim_bottom_time)) - SendFlags |= PLAYER_BOTTOMFRAME; - if (ATTR_CHANGED(anim_top) || ATTR_CHANGED(anim_top_time) || ATTR_CHANGED(anim_top_delay)) - SendFlags |= PLAYER_TOPFRAME; + EVALUATE_FIELD(anim_top, PLAYER_TOPFRAME); + EVALUATE_FIELD(anim_top_time, PLAYER_TOPFRAME); + EVALUATE_FIELD(anim_top_delay, PLAYER_TOPFRAME); - /* ammo 1 type updates */ - if (ATTR_CHANGED(ammo_battery)) - SendFlags |= PLAYER_AMMO1; - if (ATTR_CHANGED(ammo_chem)) - SendFlags |= PLAYER_AMMO1; - if (ATTR_CHANGED(ammo_rocket)) - SendFlags |= PLAYER_AMMO1; - if (ATTR_CHANGED(ammo_gauss)) - SendFlags |= PLAYER_AMMO1; - if (ATTR_CHANGED(ammo_minigun)) - SendFlags |= PLAYER_AMMO1; - if (ATTR_CHANGED(ammo_buckshot)) - SendFlags |= PLAYER_AMMO1; - if (ATTR_CHANGED(fist_mode)) - SendFlags |= PLAYER_AMMO1; - if (ATTR_CHANGED(gauss_mode)) - SendFlags |= PLAYER_AMMO1; - if (ATTR_CHANGED(shotgun_shells)) - SendFlags |= PLAYER_AMMO1; - if (ATTR_CHANGED(shotgun_spread)) - SendFlags |= PLAYER_AMMO1; + EVALUATE_FIELD(anim_bottom, PLAYER_BOTTOMFRAME); + EVALUATE_FIELD(anim_bottom_time, PLAYER_BOTTOMFRAME); - if (ATTR_CHANGED(dml_launch)) - SendFlags |= PLAYER_AMMO2; - if (ATTR_CHANGED(dml_flightpath)) - SendFlags |= PLAYER_AMMO2; - if (ATTR_CHANGED(dml_detonate)) - SendFlags |= PLAYER_AMMO2; - if (ATTR_CHANGED(dml_payload)) - SendFlags |= PLAYER_AMMO2; - if (ATTR_CHANGED(chem_acid)) - SendFlags |= PLAYER_AMMO2; - if (ATTR_CHANGED(chem_neutral)) - SendFlags |= PLAYER_AMMO2; - if (ATTR_CHANGED(chem_base)) - SendFlags |= PLAYER_AMMO2; - if (ATTR_CHANGED(chem_pressure)) - SendFlags |= PLAYER_AMMO2; + EVALUATE_FIELD(ammo_battery, PLAYER_AMMO1); + EVALUATE_FIELD(ammo_chem, PLAYER_AMMO1); + EVALUATE_FIELD(ammo_rocket, PLAYER_AMMO1); + EVALUATE_FIELD(ammo_gauss, PLAYER_AMMO1); + EVALUATE_FIELD(ammo_minigun, PLAYER_AMMO1); + EVALUATE_FIELD(ammo_buckshot, PLAYER_AMMO1); + EVALUATE_FIELD(fist_mode, PLAYER_AMMO1); + EVALUATE_FIELD(gauss_mode, PLAYER_AMMO1); + EVALUATE_FIELD(shotgun_shells, PLAYER_AMMO1); + EVALUATE_FIELD(shotgun_spread, PLAYER_AMMO1); - if (ATTR_CHANGED(beam_range)) - SendFlags |= PLAYER_AMMO3; - if (ATTR_CHANGED(beam_poweracc)) - SendFlags |= PLAYER_AMMO3; - if (ATTR_CHANGED(beam_lightning)) - SendFlags |= PLAYER_AMMO3; - if (ATTR_CHANGED(gren_detonate)) - SendFlags |= PLAYER_AMMO3; - if (ATTR_CHANGED(gren_payload)) - SendFlags |= PLAYER_AMMO3; - if (ATTR_CHANGED(menu_active)) - SendFlags |= PLAYER_AMMO3; - if (ATTR_CHANGED(dml_state)) - SendFlags |= PLAYER_AMMO3; + EVALUATE_FIELD(dml_launch, PLAYER_AMMO2); + EVALUATE_FIELD(dml_flightpath, PLAYER_AMMO2); + EVALUATE_FIELD(dml_detonate, PLAYER_AMMO2); + EVALUATE_FIELD(dml_payload, PLAYER_AMMO2); + EVALUATE_FIELD(chem_acid, PLAYER_AMMO2); + EVALUATE_FIELD(chem_neutral, PLAYER_AMMO2); + EVALUATE_FIELD(chem_base, PLAYER_AMMO2); + EVALUATE_FIELD(chem_pressure, PLAYER_AMMO2); - SAVE_STATE(anim_top); - SAVE_STATE(anim_top_time); - SAVE_STATE(anim_top_delay); - SAVE_STATE(anim_bottom); - SAVE_STATE(anim_bottom_time); - - SAVE_STATE(ammo_battery); - SAVE_STATE(ammo_chem); - SAVE_STATE(ammo_rocket); - SAVE_STATE(ammo_gauss); - SAVE_STATE(ammo_minigun); - SAVE_STATE(ammo_buckshot); - SAVE_STATE(fist_mode); - SAVE_STATE(gauss_mode); - SAVE_STATE(shotgun_shells); - SAVE_STATE(shotgun_spread); - - SAVE_STATE(dml_launch); - SAVE_STATE(dml_flightpath); - SAVE_STATE(dml_detonate); - SAVE_STATE(dml_payload); - SAVE_STATE(chem_acid); - SAVE_STATE(chem_neutral); - SAVE_STATE(chem_base); - SAVE_STATE(chem_pressure); - - SAVE_STATE(beam_range); - SAVE_STATE(beam_poweracc); - SAVE_STATE(beam_lightning); - SAVE_STATE(gren_detonate); - SAVE_STATE(gren_payload); - - SAVE_STATE(menu_active); - SAVE_STATE(dml_state); + EVALUATE_FIELD(beam_range, PLAYER_AMMO3); + EVALUATE_FIELD(beam_poweracc, PLAYER_AMMO3); + EVALUATE_FIELD(beam_lightning, PLAYER_AMMO3); + EVALUATE_FIELD(gren_detonate, PLAYER_AMMO3); + EVALUATE_FIELD(gren_payload, PLAYER_AMMO3); + EVALUATE_FIELD(menu_active, PLAYER_AMMO3); + EVALUATE_FIELD(dml_state, PLAYER_AMMO3); } /* @@ -356,51 +422,43 @@ player::SendEntity(entity ePEnt, float flChanged) WriteByte(MSG_ENTITY, ENT_PLAYER); WriteFloat(MSG_ENTITY, flChanged); + /* the generic client attributes */ NSClientPlayer::SendEntity(ePEnt, flChanged); - if (flChanged & PLAYER_TOPFRAME) { - WriteByte(MSG_ENTITY, anim_top); - WriteFloat(MSG_ENTITY, anim_top_time); - WriteFloat(MSG_ENTITY, anim_top_delay); - } - if (flChanged & PLAYER_BOTTOMFRAME) { - WriteByte(MSG_ENTITY, anim_bottom); - WriteFloat(MSG_ENTITY, anim_bottom_time); - } + SENDENTITY_BYTE(anim_top, PLAYER_TOPFRAME); + SENDENTITY_FLOAT(anim_top_time, PLAYER_TOPFRAME); + SENDENTITY_FLOAT(anim_top_delay, PLAYER_TOPFRAME); - if (flChanged & PLAYER_AMMO1) { - WriteByte(MSG_ENTITY, ammo_battery); - WriteByte(MSG_ENTITY, ammo_chem); - WriteByte(MSG_ENTITY, ammo_rocket); - WriteByte(MSG_ENTITY, ammo_gauss); - WriteByte(MSG_ENTITY, ammo_minigun); - WriteByte(MSG_ENTITY, ammo_buckshot); - WriteByte(MSG_ENTITY, fist_mode); - WriteByte(MSG_ENTITY, gauss_mode); - WriteByte(MSG_ENTITY, shotgun_shells); - WriteByte(MSG_ENTITY, shotgun_spread); - } - - if (flChanged & PLAYER_AMMO2) { - WriteByte(MSG_ENTITY, dml_launch); - WriteByte(MSG_ENTITY, dml_flightpath); - WriteByte(MSG_ENTITY, dml_detonate); - WriteByte(MSG_ENTITY, dml_payload); - WriteByte(MSG_ENTITY, chem_acid); - WriteByte(MSG_ENTITY, chem_neutral); - WriteByte(MSG_ENTITY, chem_base); - WriteByte(MSG_ENTITY, chem_pressure); - } + SENDENTITY_BYTE(anim_bottom, PLAYER_BOTTOMFRAME); + SENDENTITY_FLOAT(anim_bottom_time, PLAYER_BOTTOMFRAME); - if (flChanged & PLAYER_AMMO3) { - WriteByte(MSG_ENTITY, beam_range); - WriteByte(MSG_ENTITY, beam_poweracc); - WriteByte(MSG_ENTITY, beam_lightning); - WriteByte(MSG_ENTITY, gren_detonate); - WriteByte(MSG_ENTITY, gren_payload); - WriteByte(MSG_ENTITY, menu_active); - WriteByte(MSG_ENTITY, dml_state); - } + SENDENTITY_BYTE(ammo_battery, PLAYER_AMMO1); + SENDENTITY_BYTE(ammo_chem, PLAYER_AMMO1); + SENDENTITY_BYTE(ammo_rocket, PLAYER_AMMO1); + SENDENTITY_BYTE(ammo_gauss, PLAYER_AMMO1); + SENDENTITY_BYTE(ammo_minigun, PLAYER_AMMO1); + SENDENTITY_BYTE(ammo_buckshot, PLAYER_AMMO1); + SENDENTITY_BYTE(fist_mode, PLAYER_AMMO1); + SENDENTITY_BYTE(gauss_mode, PLAYER_AMMO1); + SENDENTITY_BYTE(shotgun_shells, PLAYER_AMMO1); + SENDENTITY_BYTE(shotgun_spread, PLAYER_AMMO1); + + SENDENTITY_BYTE(dml_launch, PLAYER_AMMO2); + SENDENTITY_BYTE(dml_flightpath, PLAYER_AMMO2); + SENDENTITY_BYTE(dml_detonate, PLAYER_AMMO2); + SENDENTITY_BYTE(dml_payload, PLAYER_AMMO2); + SENDENTITY_BYTE(chem_acid, PLAYER_AMMO2); + SENDENTITY_BYTE(chem_neutral, PLAYER_AMMO2); + SENDENTITY_BYTE(chem_base, PLAYER_AMMO2); + SENDENTITY_BYTE(chem_pressure, PLAYER_AMMO2); + + SENDENTITY_BYTE(beam_range, PLAYER_AMMO3); + SENDENTITY_BYTE(beam_poweracc, PLAYER_AMMO3); + SENDENTITY_BYTE(beam_lightning, PLAYER_AMMO3); + SENDENTITY_BYTE(gren_detonate, PLAYER_AMMO3); + SENDENTITY_BYTE(gren_payload, PLAYER_AMMO3); + SENDENTITY_BYTE(menu_active, PLAYER_AMMO3); + SENDENTITY_BYTE(dml_state, PLAYER_AMMO3); return (1); } diff --git a/zpak001.pk3dir/scripts/constants.txt b/zpak001.pk3dir/scripts/constants.txt new file mode 100644 index 0000000..b8bd2a0 --- /dev/null +++ b/zpak001.pk3dir/scripts/constants.txt @@ -0,0 +1,11 @@ +// weapon constants +WEAPON_NONE 0 +WEAPON_FISTS 1 +WEAPON_AICORE 2 +WEAPON_GAUSSPISTOL 3 +WEAPON_SHOTGUN 4 +WEAPON_MINIGUN 5 +WEAPON_BEAMGUN 6 +WEAPON_DML 7 +WEAPON_GRENADE 8 +WEAPON_CHEMICALGUN 9 \ No newline at end of file