GS-EntBase: Cleanup and fixes regarding which func_ entities support the
'angles' key for visuals. trigger_hurt damagetype tweaks (needs more tests) as well as monstermaker fixes and SF_ROT_TOGGLE func_door_rotatings no longer auto-return...
This commit is contained in:
parent
758b28346d
commit
d3dcb3a12b
22 changed files with 89 additions and 56 deletions
|
@ -305,6 +305,7 @@ func_breakable::Respawn(void)
|
|||
|
||||
SetModel(GetSpawnModel());
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
ClearAngles();
|
||||
touch = PlayerTouch;
|
||||
think = __NULL__;
|
||||
|
||||
|
@ -375,9 +376,6 @@ func_breakable::func_breakable(void)
|
|||
/* proper init */
|
||||
super::NSSurfacePropEntity();
|
||||
|
||||
/* contrary to what some map designers think, angles are not supported */
|
||||
GetSpawnAngles() = angles = [0,0,0];
|
||||
|
||||
/* precache impact sound */
|
||||
Sound_Precache(GetSurfaceData(SURFDATA_SND_BULLETIMPACT));
|
||||
}
|
||||
|
|
|
@ -318,7 +318,9 @@ func_button::MoveToDestination(vector vecDest, void(void) func)
|
|||
void
|
||||
func_button::Respawn(void)
|
||||
{
|
||||
RestoreAngles();
|
||||
SetMovementDirection();
|
||||
ClearAngles();
|
||||
|
||||
SetSolid(SOLID_BSP);
|
||||
SetMovetype(MOVETYPE_PUSH);
|
||||
|
@ -356,7 +358,6 @@ func_button::Respawn(void)
|
|||
}
|
||||
|
||||
m_iState = STATE_LOWERED;
|
||||
SetAngles([0,0,0]);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -118,10 +118,9 @@ func_conveyor::Respawn(void)
|
|||
if (!m_flSpeed)
|
||||
m_flSpeed = 100;
|
||||
|
||||
m_vecMoveDir = [0,0,0];
|
||||
angles = GetSpawnAngles();
|
||||
|
||||
RestoreAngles();
|
||||
SetMovementDirection();
|
||||
ClearAngles();
|
||||
SetModel(GetSpawnModel());
|
||||
SetMovetype(MOVETYPE_NONE);
|
||||
SetSolid(SOLID_BSP);
|
||||
|
@ -133,7 +132,6 @@ func_conveyor::Respawn(void)
|
|||
SetSkin(0);
|
||||
}
|
||||
|
||||
SetAngles([0,0,0]);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -372,8 +372,9 @@ func_door::Respawn(void)
|
|||
if (m_flWait == 0)
|
||||
m_flWait = 0.01f;
|
||||
|
||||
/* angles to vecMoveDir */
|
||||
RestoreAngles();
|
||||
SetMovementDirection();
|
||||
ClearAngles();
|
||||
|
||||
if (spawnflags & SF_MOV_PASSABLE)
|
||||
SetSolid(SOLID_NOT);
|
||||
|
@ -428,8 +429,6 @@ func_door::Respawn(void)
|
|||
if (targetname) {
|
||||
m_iLocked = TRUE;
|
||||
}
|
||||
|
||||
SetAngles([0,0,0]);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -165,9 +165,9 @@ func_door_rotating::Arrived(void)
|
|||
if (!(spawnflags & SF_ROT_USE)) {
|
||||
touch = Touch;
|
||||
}
|
||||
if (m_flWait < 0) {
|
||||
|
||||
if ((spawnflags & SF_ROT_TOGGLE) || m_flWait < 0)
|
||||
return;
|
||||
}
|
||||
|
||||
think = Back;
|
||||
nextthink = (ltime + m_flWait);
|
||||
|
@ -385,7 +385,9 @@ func_door_rotating::RotToDest(vector vDestAngle, void(void) func)
|
|||
void
|
||||
func_door_rotating::Respawn(void)
|
||||
{
|
||||
func_door_rotating::SetMovementDirection();
|
||||
RestoreAngles();
|
||||
SetMovementDirection();
|
||||
ClearAngles();
|
||||
|
||||
#ifdef GS_PHYSICS
|
||||
takedamage = DAMAGE_YES;
|
||||
|
@ -433,6 +435,8 @@ func_door_rotating::Respawn(void)
|
|||
PortalClose();
|
||||
}
|
||||
|
||||
m_iState = STATE_LOWERED;
|
||||
|
||||
if (spawnflags & SF_ROT_PASSABLE) {
|
||||
SetSolid(SOLID_NOT);
|
||||
}
|
||||
|
|
|
@ -173,6 +173,7 @@ void
|
|||
func_mortar_field::Respawn(void)
|
||||
{
|
||||
InitBrushTrigger();
|
||||
ClearAngles();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -138,6 +138,7 @@ func_plat::Respawn(void)
|
|||
SetSolid(SOLID_BSP);
|
||||
SetModel(GetSpawnModel());
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
ClearAngles();
|
||||
|
||||
m_iState = PLATSTATE_RAISED;
|
||||
think = __NULL__;
|
||||
|
|
|
@ -182,7 +182,10 @@ func_rotating::Respawn(void)
|
|||
SetMovetype(MOVETYPE_PUSH);
|
||||
SetSolid((spawnflags & FR_NOTSOLID) ? SOLID_NOT : SOLID_BSP);
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
|
||||
RestoreAngles();
|
||||
SetMovementDirection();
|
||||
ClearAngles();
|
||||
|
||||
if (spawnflags & FR_STARTON) {
|
||||
avelocity = m_vecMoveDir * m_flSpeed;
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
/*QUAKED func_tracktraincontrols (0 .5 .8) ?
|
||||
/*QUAKED func_traincontrols (0 .5 .8) ?
|
||||
Brush that marks the usable region of a func_tracktrain, in order
|
||||
to gain control.
|
||||
|
||||
|
@ -26,21 +26,22 @@ to gain control.
|
|||
This entity was introduced in Half-Life (1998).
|
||||
*/
|
||||
|
||||
class func_tracktraincontrols:NSBrushTrigger
|
||||
class func_traincontrols:NSBrushTrigger
|
||||
{
|
||||
void(void) func_tracktraincontrols;
|
||||
void(void) func_traincontrols;
|
||||
|
||||
virtual void(void) Respawn;
|
||||
};
|
||||
|
||||
void
|
||||
func_tracktraincontrols::Respawn(void)
|
||||
func_traincontrols::Respawn(void)
|
||||
{
|
||||
InitBrushTrigger();
|
||||
ClearAngles();
|
||||
}
|
||||
|
||||
void
|
||||
func_tracktraincontrols::func_tracktraincontrols(void)
|
||||
func_traincontrols::func_traincontrols(void)
|
||||
{
|
||||
super::NSBrushTrigger();
|
||||
}
|
||||
|
|
|
@ -33,6 +33,6 @@ This entity was introduced in Counter-Strike (2000).
|
|||
void
|
||||
func_vehiclecontrols(void)
|
||||
{
|
||||
spawnfunc_func_tracktraincontrols();
|
||||
spawnfunc_func_traincontrols();
|
||||
self.classname = "func_vehiclecontrols";
|
||||
}
|
||||
|
|
|
@ -99,6 +99,8 @@ func_wall_toggle::Respawn(void)
|
|||
SetSolid(SOLID_BSP);
|
||||
SetModel(GetSpawnModel());
|
||||
SetOrigin(origin);
|
||||
ClearAngles();
|
||||
|
||||
m_iVisible = 1;
|
||||
m_oldmodelindex = modelindex;
|
||||
|
||||
|
|
|
@ -98,8 +98,10 @@ momentary_door::Respawn(void)
|
|||
SetSolid(SOLID_BSP);
|
||||
SetModel(GetSpawnModel());
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
|
||||
RestoreAngles();
|
||||
SetMovementDirection();
|
||||
SetAngles([0,0,0]);
|
||||
ClearAngles();
|
||||
|
||||
m_vecPos1 = GetSpawnOrigin();
|
||||
m_vecPos2 = (m_vecPos1 + m_vecMoveDir * (fabs(m_vecMoveDir * size) - m_flDistance));
|
||||
|
|
|
@ -129,8 +129,11 @@ momentary_rot_button::Respawn(void)
|
|||
SetSolid(SOLID_BSP);
|
||||
SetModel(GetSpawnModel());
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
|
||||
RestoreAngles();
|
||||
SetMovementDirection();
|
||||
SetAngles([0,0,0]);
|
||||
ClearAngles();
|
||||
|
||||
PlayerUse = OnPlayerUse;
|
||||
|
||||
m_vecPos1 = [0,0,0];
|
||||
|
|
|
@ -132,15 +132,17 @@ monstermaker::Spawner(void)
|
|||
vector newang = self.angles;
|
||||
string tname = self.netname;
|
||||
|
||||
/* prevent us from being deleted by callfunction() */
|
||||
self.spawnflags |= MSF_MULTIPLAYER;
|
||||
|
||||
/* become the classname assigned */
|
||||
NSMonster t = (NSMonster)self;
|
||||
callfunction(self.classname);
|
||||
|
||||
/* apply the saved values back */
|
||||
t.origin = t.GetSpawnOrigin() = neworg;
|
||||
t.angles = t.GetSpawnAngles() = newang;
|
||||
t.origin = t.m_oldOrigin = neworg;
|
||||
t.angles = t.m_oldAngle = newang;
|
||||
t.targetname = tname;
|
||||
t.spawnflags |= MSF_MULTIPLAYER;
|
||||
|
||||
/* spawn anew */
|
||||
t.Respawn();
|
||||
|
|
|
@ -37,30 +37,27 @@ This entity was introduced in Quake (1996).
|
|||
|
||||
.float hurt_next;
|
||||
|
||||
typedef enumflags
|
||||
{
|
||||
HURTTYPE_GENERIC,
|
||||
HURTTYPE_CRUSH,
|
||||
HURTTYPE_BULLET,
|
||||
HURTTYPE_SLASH,
|
||||
HURTTYPE_BURN,
|
||||
HURTTYPE_FREEZE,
|
||||
HURTTYPE_FALL,
|
||||
HURTTYPE_BLAST,
|
||||
HURTTYPE_CLUB,
|
||||
HURTTYPE_SHOCK,
|
||||
HURTTYPE_SONIC,
|
||||
HURTTYPE_ENERGYBEAM,
|
||||
HURTTYPE_DROWN,
|
||||
HURTTYPE_PARALYSE,
|
||||
HURTTYPE_NERVEGAS,
|
||||
HURTTYPE_POISON,
|
||||
HURTTYPE_RADIATION,
|
||||
HURTTYPE_DROWNRECOVER,
|
||||
HURTTYPE_CHEMICAL,
|
||||
HURTTYPE_SLOWBURN,
|
||||
HURTTYPE_SLOWFREEZE,
|
||||
} hurttype_e;
|
||||
#define HURTTYPE_GENERIC 0
|
||||
#define HURTTYPE_CRUSH 1
|
||||
#define HURTTYPE_BULLET 2
|
||||
#define HURTTYPE_SLASH 4
|
||||
#define HURTTYPE_BURN 8
|
||||
#define HURTTYPE_FREEZE 16
|
||||
#define HURTTYPE_FALL 32
|
||||
#define HURTTYPE_BLAST 64
|
||||
#define HURTTYPE_CLUB 128
|
||||
#define HURTTYPE_SHOCK 256
|
||||
#define HURTTYPE_SONIC 512
|
||||
#define HURTTYPE_ENERGYBEAM 1024
|
||||
#define HURTTYPE_DROWN 16384
|
||||
#define HURTTYPE_PARALYSE 32768
|
||||
#define HURTTYPE_NERVEGAS 65536
|
||||
#define HURTTYPE_POISON 131072
|
||||
#define HURTTYPE_RADIATION 262144
|
||||
#define HURTTYPE_DROWNRECOVER 524288
|
||||
#define HURTTYPE_CHEMICAL 1048576
|
||||
#define HURTTYPE_SLOWBURN 2097152
|
||||
#define HURTTYPE_SLOWFREEZE 4194304
|
||||
|
||||
#define SF_HURT_ONCE 1 // Turn off once it fired the first time
|
||||
#define SF_HURT_OFF 2 // Needs to be triggered in order to work again
|
||||
|
@ -249,7 +246,7 @@ trigger_hurt::SpawnKey(string strKey, string strValue)
|
|||
m_iDamage = stoi(strValue);
|
||||
break;
|
||||
case "damagetype":
|
||||
m_iDamageType = stoi(strValue);
|
||||
m_iDamageType = (int)stoi(strValue);
|
||||
break;
|
||||
case "wait":
|
||||
m_flNextDmg = stof(strValue);
|
||||
|
|
|
@ -86,8 +86,6 @@ trigger_push::SetMovementDirection(void)
|
|||
makevectors(GetSpawnAngles());
|
||||
m_vecMoveDir = v_forward;
|
||||
}
|
||||
|
||||
angles = [0,0,0];
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -142,7 +140,10 @@ void
|
|||
trigger_push::Respawn(void)
|
||||
{
|
||||
InitBrushTrigger();
|
||||
|
||||
RestoreAngles();
|
||||
SetMovementDirection();
|
||||
ClearAngles();
|
||||
|
||||
if (spawnflags & TP_STARTOFF) {
|
||||
SetSolid(SOLID_NOT);
|
||||
|
|
|
@ -63,6 +63,10 @@ class NSEntity:NSTrigger
|
|||
nonvirtual void(void) ClearParent;
|
||||
virtual void(void) ParentUpdate;
|
||||
|
||||
/* some ents need this */
|
||||
nonvirtual void(void) RestoreAngles;
|
||||
nonvirtual void(void) ClearAngles;
|
||||
|
||||
nonvirtual vector(void) GetSpawnOrigin;
|
||||
nonvirtual vector(void) GetSpawnAngles;
|
||||
nonvirtual string(void) GetSpawnModel;
|
||||
|
|
|
@ -240,6 +240,17 @@ NSEntity::ClearParent(void)
|
|||
{
|
||||
m_parent = __NULL__;
|
||||
}
|
||||
|
||||
void
|
||||
NSEntity::RestoreAngles(void)
|
||||
{
|
||||
angles = GetSpawnAngles();
|
||||
}
|
||||
void
|
||||
NSEntity::ClearAngles(void)
|
||||
{
|
||||
angles = [0,0,0];
|
||||
}
|
||||
#endif
|
||||
|
||||
/* we want to really use those set functions because they'll notify of any
|
||||
|
|
|
@ -77,12 +77,12 @@ func_illusionary::Respawn(void)
|
|||
super::Respawn();
|
||||
|
||||
/* func_illusionary specifics */
|
||||
SetAngles([0,0,0]);
|
||||
SetMovetype(MOVETYPE_NONE);
|
||||
SetSolid(SOLID_NOT);
|
||||
SetModel(GetSpawnModel());
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
SetSkin(0);
|
||||
ClearAngles();
|
||||
|
||||
// TODO: Add support for (skin) -1 = Empty, -7 = Volumetric light
|
||||
if (skin < 0) {
|
||||
|
@ -126,6 +126,7 @@ func_illusionary::Init(void)
|
|||
SetAngles([0,0,0]);
|
||||
SetMovetype(MOVETYPE_NONE);
|
||||
SetSolid(SOLID_NOT);
|
||||
angles = [0,0,0];
|
||||
|
||||
if (skin == -1 && m_iRenderMode == RM_TEXTURE)
|
||||
SetRenderMode(RM_TRIGGER);
|
||||
|
|
|
@ -74,13 +74,14 @@ func_ladder::Respawn(void)
|
|||
super::Respawn();
|
||||
|
||||
/* func_ladder specifics */
|
||||
SetAngles([0,0,0]);
|
||||
SetMovetype(MOVETYPE_NONE);
|
||||
SetSolid(SOLID_BSP);
|
||||
SetSkin(CONTENT_LADDER);
|
||||
SetModel(GetSpawnModel());
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
SetFrame(0);
|
||||
ClearAngles();
|
||||
|
||||
#ifdef GS_RENDERFX
|
||||
SetRenderMode(RM_TRIGGER);
|
||||
#endif
|
||||
|
@ -122,6 +123,7 @@ func_ladder::Init(void)
|
|||
movetype = MOVETYPE_NONE;
|
||||
solid = SOLID_BSP;
|
||||
skin = CONTENT_LADDER;
|
||||
angles = [0,0,0];
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -77,12 +77,12 @@ func_wall::Respawn(void)
|
|||
super::Respawn();
|
||||
|
||||
/* func_wall specifics */
|
||||
SetAngles([0,0,0]);
|
||||
SetMovetype(MOVETYPE_PUSH);
|
||||
SetSolid(SOLID_BSP);
|
||||
SetModel(GetSpawnModel());
|
||||
SetOrigin(GetSpawnOrigin());
|
||||
SetFrame(0);
|
||||
ClearAngles();
|
||||
}
|
||||
#else
|
||||
float
|
||||
|
@ -120,6 +120,7 @@ func_wall::Init(void)
|
|||
setorigin(this, origin);
|
||||
movetype = MOVETYPE_PUSH;
|
||||
solid = SOLID_BSP;
|
||||
angles = [0,0,0];
|
||||
|
||||
MakeStatic();
|
||||
}
|
||||
|
|
|
@ -83,7 +83,8 @@ worldspawn::SpawnKey(string strField, string strKey)
|
|||
{
|
||||
switch (strField) {
|
||||
case "startdark":
|
||||
Fade_StartDark();
|
||||
if (stof(strKey) == 1)
|
||||
Fade_StartDark();
|
||||
break;
|
||||
case "chaptertitle":
|
||||
GameMessage_Setup(strKey, 0);
|
||||
|
|
Loading…
Reference in a new issue