djcev.com

//

Git Repos / fte_dogmode / qc / func / fall.qc

Last update to this file was on 2024-06-15 at 19:50.

Show fall.qc

//==============================================================================
// func_fall from RennyC
//
// A brush that drops and fades away when touched or triggered.
//
// dumptruck_ds
// noise = sound to play when triggered
// wait = wait this long before falling
//==============================================================================

//======================================================================
// constants
//======================================================================

#ifdef SSQC
const float FUNCFADE_DONT_FADE = 1;
const float FUNCFADE_SILENT = 2;
#endif

//======================================================================
// forward declarations
//======================================================================

// func_fall
#ifdef SSQC
void() func_fall_think;
void() func_fall_touch;
void() func_fall_use;
void(entity e) func_fall_init;
void() func_fall;
#endif

//------------------------------------------------------------------------------

/*QUAKED func_fall (0 .5 .8) ? DONT_FADE X X X X X X X NOT_ON_EASY NOT_ON_NORMAL NOT_ON_HARD_OR_NIGHTMARE NOT_IN_DEATHMATCH NOT_IN_COOP NOT_IN_SINGLEPLAYER X NOT_ON_HARD_ONLY NOT_ON_NIGHTMARE_ONLY
A brush that drops and fades away when touched and/or triggered.
Add some spice to your jumping puzzles or other scripted sequences!
Monsters will not trigger func_fall but will be gibbed if one falls on them.
NOTE: When a func_fall brush touches another brush or entity it will stop, which can look odd in certain situations.
noise = sound to play when triggered, the default is a switch sound.
wait = wait this long before falling.
Use the DONT_FADE spawnflag if desired.

Falling brush upon touch
*/
//----------------------------------------------------------------------
// class func_fall: base_func
// {
#ifdef SSQC
//--------------------------------------------------------------
void() func_fall_think =
{
if (self.cnt == TRUE && self.attack_finished < time)
{
self.solid = SOLID_BBOX;
self.movetype = MOVETYPE_TOSS;

if (!(self.spawnflags & FUNCFADE_DONT_FADE))
{
if (self.alpha > 0.1)
{
self.alpha = self.alpha - 0.03;
}
else
{
remove (self);
return;
}
}
}
self.nextthink = time + 0.1;
};

//--------------------------------------------------------------
void() func_fall_touch =
{
if (other.classtype == CT_PLAYER)
{
if (!(other.flags & FL_ONGROUND))
other.flags = other.flags | FL_ONGROUND;
}
else if (other.flags & FL_MONSTER)
{
t_damage2 (other, self, other, 50000);
}
else
{
return;
}

if (self.cnt == TRUE)
return;

self.attack_finished = time + self.wait;
self.cnt = TRUE;

if (!(self.spawnflags & FUNCFADE_SILENT))
{
if (self.noise != "")
sound (self, CHAN_AUTO, self.noise,
VOL_HIGH, ATTN_NORM);
else
sound (self, CHAN_AUTO, "buttons/switch21.wav",
VOL_HIGH, ATTN_NORM);
}
};

//--------------------------------------------------------------
void() func_fall_use =
{
// thanks again RennyC for help on revisions --dumptruck_ds
self.attack_finished = time + self.wait;
self.cnt = TRUE;

if (self.noise != "")
sound (self, CHAN_AUTO, self.noise, 1, ATTN_NORM);
else
sound (self, CHAN_AUTO, "buttons/switch21.wav",
VOL_HIGH, ATTN_NORM);
};

//--------------------------------------------------------------
void(entity e) func_fall_init =
{
e.classname = "func_fall";
e.classtype = CT_FUNC_FALL;
base_func_init (e);

precache_sound ("buttons/switch21.wav");
if (e.noise != "")
precache_sound (e.noise);

e.alpha = 1;
e.cnt = FALSE;
e.solid = SOLID_BSP;
e.movetype = MOVETYPE_PUSH;
e.use = func_fall_use;
e.touch = func_fall_touch;
e.think = func_fall_think;
e.nextthink = time;
setmodel (e, e.model);
};

//--------------------------------------------------------------
void() func_fall =
{
// new spawnflags for all entities -- iw
if (SUB_Inhibit())
return;

func_fall_init (self);
};
#endif
// };

Return to the top of this page or return to the overview of this repo.

Log fall.qc

Return to the top of this page or return to the overview of this repo.