djcev.com

//

Git Repos / fte_dogmode / qc / triggers / usekey.qc

Last update to this file was on 2025-03-30 at 19:29.

Show usekey.qc

//==============================================================================
// trigger_usekey
//==============================================================================

/*
Trigger QuickC program
By Jim Dose' 12/2/96
Copyright (c)1996 Hipnotic Interactive, Inc.
All rights reserved.
Distributed (unsupported) on 3.12.97
*/

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

#ifdef SSQC
//----------------------------------------------------------------------
// trigger_usekey spawnflags -- CEV
//----------------------------------------------------------------------
typedef enumflags
{
SPAWNFLAG_TRIGGER_USEKEY_SILV_KEY = 8,
SPAWNFLAG_TRIGGER_USEKEY_GOLD_KEY = 16
// SPAWNFLAG_NOT_ON_EASY = 256, // see base_entities.qc -- CEV
// SPAWNFLAG_NOT_ON_NORMAL = 512,
// SPAWNFLAG_NOT_ON_HARD_OR_NIGHTMARE = 1024,
// SPAWNFLAG_NOT_IN_DEATHMATCH = 2048,
// SPAWNFLAG_NOT_IN_COOP = 4096,
// SPAWNFLAG_NOT_IN_SP = 8192,
// SPAWNFLAG_NOT_ON_SKILL2 = 32768, // see base_entities.qc -- CEV
// SPAWNFLAG_NOT_ON_SKILL3 = 65536, // see base_entities.qc -- CEV
// SPAWNFLAG_CENTERPRINTALL = 131072 // see base_entities.qc -- CEV
} trigger_usekey_spawnflags;
#endif

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

#ifdef SSQC
// trigger_usekey
void() trigger_usekey_unlock;
void() trigger_usekey_use;
void() trigger_usekey_touch;
void(entity e) trigger_usekey_init;
void() trigger_usekey;
#endif

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

#ifdef SSQC
/* QUAKED trigger_usekey (0 .5 0) ? X X X SILV_KEY GOLD_KEY 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

Variable sized single use trigger that requires a key to trigger
targets. Must be targeted at one or more entities.

"cnt" if 1, leave a used key in the player's inventory (0 default).
"keyname" if set, this is the keyname of the item_key_custom which unlocks
this entity.
"message" is printed when the trigger is touched without having the right key.
"noise1" sound file for the "key required" sound (default is per worldtype).
"noise2" sound file for the "key used" sound (default is per worldtype).
*/
//----------------------------------------------------------------------
// class trigger_usekey: base_trigger
// {
//--------------------------------------------------------------
// trigger_usekey_unlock
//
// Perform the actions which should be performed when self is
// successfully unlocked with a key.
//
// This function exists so that it can be passed as an argument
// to the new keylock_try_to_unlock function. This code was
// previously part of the trigger_usekey_use function. -- iw
//--------------------------------------------------------------
void() trigger_usekey_unlock =
{
// message has already been printed keylock_try_to_unlock -- CEV
self.message = "";

sub_usetargets ();

// we can't just remove (self) here, because this is a
// touch function called while C code is looping through
// area links...
self.think = sub_remove;
self.touch = sub_null;
self.use = sub_null;
self.nextthink = time + 0.1;
};

//--------------------------------------------------------------
void() trigger_usekey_use =
{
// from Copper -- dumptruck_ds
if (sub_checkvalidtouch(other) == FALSE)
return;

if (self.attack_finished > time)
return;

self.attack_finished = time + 2;
keylock_try_to_unlock (other, self.message,
trigger_usekey_unlock);
};

//--------------------------------------------------------------
void() trigger_usekey_touch =
{
trigger_usekey_use ();
};

//--------------------------------------------------------------
void(entity e) trigger_usekey_init =
{
e.classname = "trigger_usekey";
e.classtype = CT_TRIGGER_USEKEY;

// the keylock_* functions use self.noise3 and self.noise4
// internally, but trigger_usekey doesn't use the self.noise1
// or self.noise2 fields for anything, so we allow the mapper
// to specify custom sound files by setting self.noise1 and
// self.noise2, but we move those values into self.noise3 and
// self.noise4 -- iw
e.noise3 = e.noise1;
e.noise4 = e.noise2;
e.noise1 = "";
e.noise2 = "";

keylock_init (e);

if (e.spawnflags & SPAWNFLAG_TRIGGER_USEKEY_SILV_KEY)
{
// dumptruck_ds
keylock_set_silver_key (e);

if (e.keyname != "")
{
e.netname = e.keyname;
e.keyname = "";
}
}

if (e.spawnflags & SPAWNFLAG_TRIGGER_USEKEY_GOLD_KEY)
{
// dumptruck_ds
keylock_set_gold_key (e);

if (e.keyname != "")
{
e.netname = e.keyname;
e.keyname = "";
}
}

// support for item_key_custom -- iw
if (e.keyname != "")
{
keylock_set_custom_key (e, e.keyname);
// this should not be referenced again
e.keyname = "";
}

if (!keylock_has_key_set(e))
{
objerror ("no key specified!");
return;
}

e.touch = trigger_usekey_touch;
e.use = trigger_usekey_use;

base_trigger_init (e);
sub_checkwaiting (e);
};

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

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

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

Log usekey.qc

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