PMove: Added macros to let mods override a bunch of physics variables so
they keep their fingers out of pmove.c
This commit is contained in:
parent
8fc5ac9b17
commit
c130ab2c38
16 changed files with 180 additions and 98 deletions
|
@ -166,6 +166,22 @@ CSQC_UpdateView(float w, float h, float focus)
|
|||
setproperty(VF_ENVMAP, "$whiteimage");
|
||||
setproperty(VF_ORIGIN, g_vecCubePos);
|
||||
setproperty(VF_AFOV, 90);
|
||||
if (g_skyscale != 0 && g_skypos) {
|
||||
vector porg;
|
||||
vector realpos;
|
||||
|
||||
if (autocvar_dev_skyscale) {
|
||||
realpos[0] = g_vecCubePos[0] / autocvar_dev_skyscale;
|
||||
realpos[1] = g_vecCubePos[1] / autocvar_dev_skyscale;
|
||||
realpos[2] = g_vecCubePos[2] / autocvar_dev_skyscale;
|
||||
} else {
|
||||
realpos[0] = g_vecCubePos[0] / g_skyscale;
|
||||
realpos[1] = g_vecCubePos[1] / g_skyscale;
|
||||
realpos[2] = g_vecCubePos[2] / g_skyscale;
|
||||
}
|
||||
setproperty(VF_SKYROOM_CAMERA, g_skypos + realpos);
|
||||
}
|
||||
|
||||
renderscene();
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -80,7 +80,7 @@ trigger_gravity::trigger_gravity(void)
|
|||
|
||||
#ifdef CLIENT
|
||||
void
|
||||
trigger_gravity::Initialized (void)
|
||||
trigger_gravity::Initialized(void)
|
||||
{
|
||||
setmodel(this, model);
|
||||
movetype = MOVETYPE_NONE;
|
||||
|
|
|
@ -48,5 +48,6 @@
|
|||
../../shared/cstrike/weapons.c
|
||||
../../shared/valve/weapon_common.c
|
||||
../../shared/cstrike/pmove.c
|
||||
../../shared/valve/pmove_water.c
|
||||
../../shared/cstrike/item_c4bomb.cpp
|
||||
#endlist
|
||||
|
|
|
@ -14,6 +14,17 @@
|
|||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#define PMOVE_STEPHEIGHT 18
|
||||
#define PMOVE_AIRSTEPHEIGHT 18
|
||||
#define PMOVE_FRICTION 4
|
||||
#define PMOVE_EDGEFRICTION 1
|
||||
#define PMOVE_STOPSPEED 75
|
||||
#define PMOVE_GRAVITY 800
|
||||
#define PMOVE_AIRACCELERATE 10
|
||||
#define PMOVE_WATERACCELERATE 8
|
||||
#define PMOVE_ACCELERATE 4
|
||||
#define PMOVE_MAXSPEED 250
|
||||
|
||||
.float waterlevel;
|
||||
.float watertype;
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
#define BSPVER_Q1 29
|
||||
#define BSPVER_HL 30
|
||||
#define BSPVER_Q2 38
|
||||
#define BSPVER_Q2W 69
|
||||
#define BSPVER_Q2W 69
|
||||
#define BSPVER_Q3 46
|
||||
#define BSPVER_RTCW 47
|
||||
#define BSPVER_RBSP 1
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
../../shared/valve/animations.h
|
||||
../../shared/valve/animations.c
|
||||
../../shared/valve/pmove.c
|
||||
../../shared/valve/pmove_water.c
|
||||
|
||||
../../shared/valve/fx_blood.c
|
||||
../../shared/valve/fx_breakmodel.c
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
../../shared/valve/animations.h
|
||||
../../shared/valve/animations.c
|
||||
../../shared/valve/pmove.c
|
||||
../../shared/valve/pmove_water.c
|
||||
|
||||
../../shared/valve/fx_blood.c
|
||||
../../shared/valve/fx_breakmodel.c
|
||||
|
|
|
@ -78,5 +78,9 @@ class base_player
|
|||
int voted;
|
||||
int step;
|
||||
float step_time;
|
||||
|
||||
float underwater_time;
|
||||
float underwater_dmg;
|
||||
float pain_time;
|
||||
#endif
|
||||
};
|
||||
|
|
|
@ -14,6 +14,54 @@
|
|||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#ifndef PMOVE_STEPHEIGHT
|
||||
#define PMOVE_STEPHEIGHT 18
|
||||
#endif
|
||||
|
||||
#ifndef PMOVE_AIRSTEPHEIGHT
|
||||
#define PMOVE_AIRSTEPHEIGHT 18
|
||||
#endif
|
||||
|
||||
#ifndef PMOVE_FRICTION
|
||||
#define PMOVE_FRICTION 4
|
||||
#endif
|
||||
|
||||
#ifndef PMOVE_EDGEFRICTION
|
||||
#define PMOVE_EDGEFRICTION 1
|
||||
#endif
|
||||
|
||||
#ifndef PMOVE_STOPSPEED
|
||||
#define PMOVE_STOPSPEED 75
|
||||
#endif
|
||||
|
||||
#ifndef PMOVE_GRAVITY
|
||||
#define PMOVE_GRAVITY 800
|
||||
#endif
|
||||
|
||||
#ifndef PMOVE_AIRACCELERATE
|
||||
#define PMOVE_AIRACCELERATE 10
|
||||
#endif
|
||||
|
||||
#ifndef PMOVE_WATERACCELERATE
|
||||
#define PMOVE_WATERACCELERATE 8
|
||||
#endif
|
||||
|
||||
#ifndef PMOVE_ACCELERATE
|
||||
#define PMOVE_ACCELERATE 8
|
||||
#endif
|
||||
|
||||
#ifndef PMOVE_MAXSPEED
|
||||
#define PMOVE_MAXSPEED 270
|
||||
#endif
|
||||
|
||||
#ifndef PMOVE_STEP_WALKSPEED
|
||||
#define PMOVE_STEP_WALKSPEED 135
|
||||
#endif
|
||||
|
||||
#ifndef PMOVE_STEP_RUNSPEED
|
||||
#define PMOVE_STEP_RUNSPEED 220
|
||||
#endif
|
||||
|
||||
/* FIXME: jumptime should use the time global, as time intervals are not
|
||||
* predictable - decrement it based upon input_timelength */
|
||||
|
||||
|
@ -25,26 +73,16 @@ void
|
|||
PMove_Init(void)
|
||||
{
|
||||
#ifdef SERVER
|
||||
localcmd("serverinfo phy_stepheight 18\n");
|
||||
localcmd("serverinfo phy_airstepheight 18\n");
|
||||
localcmd("serverinfo phy_friction 4\n");
|
||||
localcmd("serverinfo phy_edgefriction 1\n");
|
||||
localcmd("serverinfo phy_stopspeed 75\n");
|
||||
localcmd("serverinfo phy_gravity 800\n");
|
||||
localcmd("serverinfo phy_airaccelerate 10\n");
|
||||
localcmd("serverinfo phy_wateraccelerate 8\n");
|
||||
|
||||
#ifdef VALVE
|
||||
localcmd("serverinfo phy_accelerate 8\n");
|
||||
localcmd("serverinfo phy_maxspeed 270\n");
|
||||
#elif CSTRIKE
|
||||
localcmd("serverinfo phy_accelerate 4\n");
|
||||
localcmd("serverinfo phy_maxspeed 250\n");
|
||||
#else
|
||||
localcmd("serverinfo phy_accelerate 8\n");
|
||||
localcmd("serverinfo phy_maxspeed 270\n");
|
||||
#endif
|
||||
|
||||
readcmd(sprintf("serverinfo phy_stepheight %d\n", PMOVE_STEPHEIGHT));
|
||||
readcmd(sprintf("serverinfo phy_airstepheight %d\n", PMOVE_AIRSTEPHEIGHT));
|
||||
readcmd(sprintf("serverinfo phy_friction %d\n", PMOVE_FRICTION));
|
||||
readcmd(sprintf("serverinfo phy_edgefriction %d\n", PMOVE_EDGEFRICTION));
|
||||
readcmd(sprintf("serverinfo phy_stopspeed %d\n", PMOVE_STOPSPEED));
|
||||
readcmd(sprintf("serverinfo phy_gravity %d\n", PMOVE_GRAVITY));
|
||||
readcmd(sprintf("serverinfo phy_airaccelerate %d\n", PMOVE_AIRACCELERATE));
|
||||
readcmd(sprintf("serverinfo phy_wateraccelerate %d\n", PMOVE_WATERACCELERATE));
|
||||
readcmd(sprintf("serverinfo phy_accelerate %d\n", PMOVE_ACCELERATE));
|
||||
readcmd(sprintf("serverinfo phy_maxspeed %d\n", PMOVE_MAXSPEED));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -152,76 +190,6 @@ PMove_Categorize(void)
|
|||
}
|
||||
}
|
||||
|
||||
/* this is technically run every frame, not just when we're in water */
|
||||
void
|
||||
PMove_WaterMove(void)
|
||||
{
|
||||
if (self.movetype == MOVETYPE_NOCLIP) {
|
||||
return;
|
||||
}
|
||||
|
||||
/*if (self.health < 0) {
|
||||
return;
|
||||
}*/
|
||||
|
||||
#if 0
|
||||
CPlayer plPlayer = (CPlayer)self;
|
||||
if (plPlayer.waterlevel != 3) {
|
||||
if (plPlayer.m_flAirFinished < time) {
|
||||
//sound (plPlayer, CHAN_VOICE, "player/gasp2.wav", 1, ATTN_NORM);
|
||||
} else if (plPlayer.m_flAirFinished < time + 9) {
|
||||
//sound (plPlayer, CHAN_VOICE, "player/gasp1.wav", 1, ATTN_NORM);
|
||||
}
|
||||
plPlayer.m_flAirFinished = time + 12;
|
||||
plPlayer.dmg = 2;
|
||||
} else if (plPlayer.m_flAirFinished < time) {
|
||||
if (plPlayer.m_flPainFinished < time) {
|
||||
plPlayer.dmg = plPlayer.dmg + 2;
|
||||
if (plPlayer.dmg > 15) {
|
||||
plPlayer.dmg = 10;
|
||||
}
|
||||
|
||||
Damage_Apply(plPlayer, world, plPlayer.dmg, DAMAGE_DROWNING, WEAPON_NONE);
|
||||
plPlayer.m_flPainFinished = time + 1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!self.waterlevel){
|
||||
if (self.flags & FL_INWATER) {
|
||||
#if 0
|
||||
//sound (self, CHAN_BODY, "misc/outwater.wav", 1, ATTN_NORM);
|
||||
#endif
|
||||
self.flags &= ~FL_INWATER;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (plPlayer.watertype == CONTENT_LAVA) {
|
||||
if (plPlayer.m_flDamageTime < time) {
|
||||
plPlayer.m_flDamageTime = time + 0.2;
|
||||
Damage_Apply(plPlayer, world, 10*plPlayer.waterlevel, DAMAGE_BURN, WEAPON_NONE);
|
||||
}
|
||||
} else if (plPlayer.watertype == CONTENT_SLIME) {
|
||||
if (plPlayer.m_flDamageTime < time) {
|
||||
plPlayer.m_flDamageTime = time + 1;
|
||||
Damage_Apply(plPlayer, world, 4*plPlayer.waterlevel, DAMAGE_ACID, WEAPON_NONE);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
if (!(self.flags & FL_INWATER)) {
|
||||
#if 0
|
||||
sound (self, CHAN_BODY, "player/land/slosh.wav", 1, ATTN_NORM);
|
||||
plPlayer.m_flDamageTime = 0;
|
||||
#endif
|
||||
self.flags |= FL_INWATER;
|
||||
}
|
||||
|
||||
if (!(self.flags & FL_WATERJUMP)) {
|
||||
self.velocity = self.velocity - 0.8 * self.waterlevel * input_timelength * self.velocity;
|
||||
}
|
||||
}
|
||||
|
||||
/* spammed whenever we're near a ledge, getting out of a pool or something */
|
||||
void
|
||||
|
@ -734,7 +702,7 @@ PMove_Run(void)
|
|||
}
|
||||
|
||||
/* establish which water elements we're dealing in */
|
||||
PMove_WaterMove();
|
||||
GamePMove_WaterMove(pl);
|
||||
|
||||
/* we might need to apply extra-velocity to get out of water-volumes */
|
||||
if (self.waterlevel >= 2) {
|
||||
|
|
|
@ -26,7 +26,6 @@ void PMove_Init(void);
|
|||
int PMove_Contents(vector org);
|
||||
float PMove_Gravity(entity ent);
|
||||
void PMove_Categorize(void);
|
||||
void PMove_WaterMove(void);
|
||||
void PMove_CheckWaterJump(void);
|
||||
int QPMove_IsStuck(entity eTarget, vector vOffset, vector vecMins, vector vecMaxs);
|
||||
void PMove_AccelToss(float move_time, float premove);
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
../../shared/valve/animations.h
|
||||
../../shared/valve/animations.c
|
||||
../../shared/valve/pmove.c
|
||||
../../shared/valve/pmove_water.c
|
||||
|
||||
../../shared/valve/fx_blood.c
|
||||
../../shared/valve/fx_breakmodel.c
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
../../shared/valve/animations.h
|
||||
../../shared/valve/animations.c
|
||||
../../shared/valve/pmove.c
|
||||
../../shared/valve/pmove_water.c
|
||||
|
||||
../../shared/valve/fx_blood.c
|
||||
../../shared/valve/fx_breakmodel.c
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
../../shared/valve/animations.h
|
||||
../../shared/valve/animations.c
|
||||
../../shared/scihunt/pmove.c
|
||||
../../shared/valve/pmove_water.c
|
||||
|
||||
../../shared/valve/fx_blood.c
|
||||
../../shared/valve/fx_breakmodel.c
|
||||
|
|
|
@ -315,14 +315,13 @@ Sound_Play(entity target, int chan, string shader)
|
|||
}
|
||||
if (g_sounds[sample].flags & SNDFL_STEP) {
|
||||
float s = vlen(target.velocity);
|
||||
float m = target.maxspeed;
|
||||
|
||||
if (target.flags & FL_CROUCHING)
|
||||
m *= 2.0f;
|
||||
s *= 2.0f;
|
||||
|
||||
if (s <= (m * 0.5f)) {
|
||||
if (s < PMOVE_STEP_WALKSPEED) {
|
||||
return;
|
||||
} else if (s < (m * 0.8f)) {
|
||||
} else if (s < PMOVE_STEP_RUNSPEED) {
|
||||
volume = 0.35f;
|
||||
} else {
|
||||
volume = 0.75;
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
../../shared/valve/animations.h
|
||||
../../shared/valve/animations.c
|
||||
../../shared/valve/pmove.c
|
||||
../../shared/valve/pmove_water.c
|
||||
|
||||
../../shared/valve/fx_blood.c
|
||||
../../shared/valve/fx_breakmodel.c
|
||||
|
|
78
src/shared/valve/pmove_water.c
Normal file
78
src/shared/valve/pmove_water.c
Normal file
|
@ -0,0 +1,78 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2020 Marco Hladik <marco@icculus.org>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
|
||||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
|
||||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
void
|
||||
GamePMove_WaterMove(player target)
|
||||
{
|
||||
if (target.movetype == MOVETYPE_NOCLIP) {
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef SERVER
|
||||
if (target.health < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* we've just exited water */
|
||||
if (target.waterlevel != 3) {
|
||||
if (target.underwater_time < time) {
|
||||
Sound_Play(target, CHAN_BODY, "player.gasplight");
|
||||
} else if (target.underwater_time < time + 9) {
|
||||
Sound_Play(target, CHAN_BODY, "player.gaspheavy");
|
||||
}
|
||||
target.underwater_time = time + 12;
|
||||
} else if (target.underwater_time < time) {
|
||||
/* we've been underwater... for too long. */
|
||||
if (target.pain_time < time) {
|
||||
Damage_Apply(target, world, 5, DMG_DROWN, 0);
|
||||
target.pain_time = time + 1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!target.waterlevel){
|
||||
if (target.flags & FL_INWATER) {
|
||||
#ifdef SERVER
|
||||
Sound_Play(target, CHAN_BODY, "player.waterexit");
|
||||
#endif
|
||||
target.flags &= ~FL_INWATER;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef SERVER
|
||||
if (target.watertype == CONTENT_LAVA) {
|
||||
if (target.pain_time < time) {
|
||||
target.pain_time = time + 0.2;
|
||||
Damage_Apply(target, world, 10*target.waterlevel, DMG_BURN, 0);
|
||||
}
|
||||
} else if (target.watertype == CONTENT_SLIME) {
|
||||
if (target.pain_time < time) {
|
||||
target.pain_time = time + 1;
|
||||
Damage_Apply(target, world, 4*target.waterlevel, DMG_ACID, 0);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!(target.flags & FL_INWATER)) {
|
||||
#ifdef SERVER
|
||||
Sound_Play(target, CHAN_BODY, "player.waterenter");
|
||||
target.pain_time = 0;
|
||||
#endif
|
||||
target.flags |= FL_INWATER;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in a new issue