📄 bg_misc.c
字号:
},
/*QUAKED item_enviro (.3 .3 1) (-16 -16 -16) (16 16 16) suspended
*/
{
"item_enviro",
"sound/items/protect.wav",
{ "models/powerups/instant/enviro.md3",
"models/powerups/instant/enviro_ring.md3",
0, 0 },
/* icon */ "icons/envirosuit",
/* pickup */ "Battle Suit",
30,
IT_POWERUP,
PW_BATTLESUIT,
/* precache */ "",
/* sounds */ "sound/items/airout.wav sound/items/protect3.wav"
},
/*QUAKED item_haste (.3 .3 1) (-16 -16 -16) (16 16 16) suspended
*/
{
"item_haste",
"sound/items/haste.wav",
{ "models/powerups/instant/haste.md3",
"models/powerups/instant/haste_ring.md3",
0, 0 },
/* icon */ "icons/haste",
/* pickup */ "Speed",
30,
IT_POWERUP,
PW_HASTE,
/* precache */ "",
/* sounds */ ""
},
/*QUAKED item_invis (.3 .3 1) (-16 -16 -16) (16 16 16) suspended
*/
{
"item_invis",
"sound/items/invisibility.wav",
{ "models/powerups/instant/invis.md3",
"models/powerups/instant/invis_ring.md3",
0, 0 },
/* icon */ "icons/invis",
/* pickup */ "Invisibility",
30,
IT_POWERUP,
PW_INVIS,
/* precache */ "",
/* sounds */ ""
},
/*QUAKED item_regen (.3 .3 1) (-16 -16 -16) (16 16 16) suspended
*/
{
"item_regen",
"sound/items/regeneration.wav",
{ "models/powerups/instant/regen.md3",
"models/powerups/instant/regen_ring.md3",
0, 0 },
/* icon */ "icons/regen",
/* pickup */ "Regeneration",
30,
IT_POWERUP,
PW_REGEN,
/* precache */ "",
/* sounds */ "sound/items/regen.wav"
},
/*QUAKED item_flight (.3 .3 1) (-16 -16 -16) (16 16 16) suspended
*/
{
"item_flight",
"sound/items/flight.wav",
{ "models/powerups/instant/flight.md3",
"models/powerups/instant/flight_ring.md3",
0, 0 },
/* icon */ "icons/flight",
/* pickup */ "Flight",
60,
IT_POWERUP,
PW_FLIGHT,
/* precache */ "",
/* sounds */ "sound/items/flight.wav"
},
/*QUAKED team_CTF_redflag (1 0 0) (-16 -16 -16) (16 16 16)
Only in CTF games
*/
{
"team_CTF_redflag",
NULL,
{ "models/flags/r_flag.md3",
0, 0, 0 },
/* icon */ "icons/iconf_red1",
/* pickup */ "Red Flag",
0,
IT_TEAM,
PW_REDFLAG,
/* precache */ "",
/* sounds */ ""
},
/*QUAKED team_CTF_blueflag (0 0 1) (-16 -16 -16) (16 16 16)
Only in CTF games
*/
{
"team_CTF_blueflag",
NULL,
{ "models/flags/b_flag.md3",
0, 0, 0 },
/* icon */ "icons/iconf_blu1",
/* pickup */ "Blue Flag",
0,
IT_TEAM,
PW_BLUEFLAG,
/* precache */ "",
/* sounds */ ""
},
#ifdef MISSIONPACK
/*QUAKED holdable_kamikaze (.3 .3 1) (-16 -16 -16) (16 16 16) suspended
*/
{
"holdable_kamikaze",
"sound/items/holdable.wav",
{ "models/powerups/kamikazi.md3",
0, 0, 0},
/* icon */ "icons/kamikaze",
/* pickup */ "Kamikaze",
60,
IT_HOLDABLE,
HI_KAMIKAZE,
/* precache */ "",
/* sounds */ "sound/items/kamikazerespawn.wav"
},
/*QUAKED holdable_portal (.3 .3 1) (-16 -16 -16) (16 16 16) suspended
*/
{
"holdable_portal",
"sound/items/holdable.wav",
{ "models/powerups/holdable/porter.md3",
0, 0, 0},
/* icon */ "icons/portal",
/* pickup */ "Portal",
60,
IT_HOLDABLE,
HI_PORTAL,
/* precache */ "",
/* sounds */ ""
},
/*QUAKED holdable_invulnerability (.3 .3 1) (-16 -16 -16) (16 16 16) suspended
*/
{
"holdable_invulnerability",
"sound/items/holdable.wav",
{ "models/powerups/holdable/invulnerability.md3",
0, 0, 0},
/* icon */ "icons/invulnerability",
/* pickup */ "Invulnerability",
60,
IT_HOLDABLE,
HI_INVULNERABILITY,
/* precache */ "",
/* sounds */ ""
},
/*QUAKED ammo_nails (.3 .3 1) (-16 -16 -16) (16 16 16) suspended
*/
{
"ammo_nails",
"sound/misc/am_pkup.wav",
{ "models/powerups/ammo/nailgunam.md3",
0, 0, 0},
/* icon */ "icons/icona_nailgun",
/* pickup */ "Nails",
20,
IT_AMMO,
WP_NAILGUN,
/* precache */ "",
/* sounds */ ""
},
/*QUAKED ammo_mines (.3 .3 1) (-16 -16 -16) (16 16 16) suspended
*/
{
"ammo_mines",
"sound/misc/am_pkup.wav",
{ "models/powerups/ammo/proxmineam.md3",
0, 0, 0},
/* icon */ "icons/icona_proxlauncher",
/* pickup */ "Proximity Mines",
10,
IT_AMMO,
WP_PROX_LAUNCHER,
/* precache */ "",
/* sounds */ ""
},
/*QUAKED ammo_belt (.3 .3 1) (-16 -16 -16) (16 16 16) suspended
*/
{
"ammo_belt",
"sound/misc/am_pkup.wav",
{ "models/powerups/ammo/chaingunam.md3",
0, 0, 0},
/* icon */ "icons/icona_chaingun",
/* pickup */ "Chaingun Belt",
100,
IT_AMMO,
WP_CHAINGUN,
/* precache */ "",
/* sounds */ ""
},
//
// PERSISTANT POWERUP ITEMS
//
/*QUAKED item_scout (.3 .3 1) (-16 -16 -16) (16 16 16) suspended redTeam blueTeam
*/
{
"item_scout",
"sound/items/scout.wav",
{ "models/powerups/scout.md3",
0, 0, 0 },
/* icon */ "icons/scout",
/* pickup */ "Scout",
30,
IT_PERSISTANT_POWERUP,
PW_SCOUT,
/* precache */ "",
/* sounds */ ""
},
/*QUAKED item_guard (.3 .3 1) (-16 -16 -16) (16 16 16) suspended redTeam blueTeam
*/
{
"item_guard",
"sound/items/guard.wav",
{ "models/powerups/guard.md3",
0, 0, 0 },
/* icon */ "icons/guard",
/* pickup */ "Guard",
30,
IT_PERSISTANT_POWERUP,
PW_GUARD,
/* precache */ "",
/* sounds */ ""
},
/*QUAKED item_doubler (.3 .3 1) (-16 -16 -16) (16 16 16) suspended redTeam blueTeam
*/
{
"item_doubler",
"sound/items/doubler.wav",
{ "models/powerups/doubler.md3",
0, 0, 0 },
/* icon */ "icons/doubler",
/* pickup */ "Doubler",
30,
IT_PERSISTANT_POWERUP,
PW_DOUBLER,
/* precache */ "",
/* sounds */ ""
},
/*QUAKED item_doubler (.3 .3 1) (-16 -16 -16) (16 16 16) suspended redTeam blueTeam
*/
{
"item_ammoregen",
"sound/items/ammoregen.wav",
{ "models/powerups/ammo.md3",
0, 0, 0 },
/* icon */ "icons/ammo_regen",
/* pickup */ "Ammo Regen",
30,
IT_PERSISTANT_POWERUP,
PW_AMMOREGEN,
/* precache */ "",
/* sounds */ ""
},
/*QUAKED team_CTF_neutralflag (0 0 1) (-16 -16 -16) (16 16 16)
Only in One Flag CTF games
*/
{
"team_CTF_neutralflag",
NULL,
{ "models/flags/n_flag.md3",
0, 0, 0 },
/* icon */ "icons/iconf_neutral1",
/* pickup */ "Neutral Flag",
0,
IT_TEAM,
PW_NEUTRALFLAG,
/* precache */ "",
/* sounds */ ""
},
{
"item_redcube",
"sound/misc/am_pkup.wav",
{ "models/powerups/orb/r_orb.md3",
0, 0, 0 },
/* icon */ "icons/iconh_rorb",
/* pickup */ "Red Cube",
0,
IT_TEAM,
0,
/* precache */ "",
/* sounds */ ""
},
{
"item_bluecube",
"sound/misc/am_pkup.wav",
{ "models/powerups/orb/b_orb.md3",
0, 0, 0 },
/* icon */ "icons/iconh_borb",
/* pickup */ "Blue Cube",
0,
IT_TEAM,
0,
/* precache */ "",
/* sounds */ ""
},
/*QUAKED weapon_nailgun (.3 .3 1) (-16 -16 -16) (16 16 16) suspended
*/
{
"weapon_nailgun",
"sound/misc/w_pkup.wav",
{ "models/weapons/nailgun/nailgun.md3",
0, 0, 0},
/* icon */ "icons/iconw_nailgun",
/* pickup */ "Nailgun",
10,
IT_WEAPON,
WP_NAILGUN,
/* precache */ "",
/* sounds */ ""
},
/*QUAKED weapon_prox_launcher (.3 .3 1) (-16 -16 -16) (16 16 16) suspended
*/
{
"weapon_prox_launcher",
"sound/misc/w_pkup.wav",
{ "models/weapons/proxmine/proxmine.md3",
0, 0, 0},
/* icon */ "icons/iconw_proxlauncher",
/* pickup */ "Prox Launcher",
5,
IT_WEAPON,
WP_PROX_LAUNCHER,
/* precache */ "",
/* sounds */ "sound/weapons/proxmine/wstbtick.wav "
"sound/weapons/proxmine/wstbactv.wav "
"sound/weapons/proxmine/wstbimpl.wav "
"sound/weapons/proxmine/wstbimpm.wav "
"sound/weapons/proxmine/wstbimpd.wav "
"sound/weapons/proxmine/wstbactv.wav"
},
/*QUAKED weapon_chaingun (.3 .3 1) (-16 -16 -16) (16 16 16) suspended
*/
{
"weapon_chaingun",
"sound/misc/w_pkup.wav",
{ "models/weapons/vulcan/vulcan.md3",
0, 0, 0},
/* icon */ "icons/iconw_chaingun",
/* pickup */ "Chaingun",
80,
IT_WEAPON,
WP_CHAINGUN,
/* precache */ "",
/* sounds */ "sound/weapons/vulcan/wvulwind.wav"
},
#endif
// end of list marker
{NULL}
};
int bg_numItems = sizeof(bg_itemlist) / sizeof(bg_itemlist[0]) - 1;
/*
==============
BG_FindItemForPowerup
==============
*/
gitem_t *BG_FindItemForPowerup( powerup_t pw ) {
int i;
for ( i = 0 ; i < bg_numItems ; i++ ) {
if ( (bg_itemlist[i].giType == IT_POWERUP ||
bg_itemlist[i].giType == IT_TEAM ||
bg_itemlist[i].giType == IT_PERSISTANT_POWERUP) &&
bg_itemlist[i].giTag == pw ) {
return &bg_itemlist[i];
}
}
return NULL;
}
/*
==============
BG_FindItemForHoldable
==============
*/
gitem_t *BG_FindItemForHoldable( holdable_t pw ) {
int i;
for ( i = 0 ; i < bg_numItems ; i++ ) {
if ( bg_itemlist[i].giType == IT_HOLDABLE && bg_itemlist[i].giTag == pw ) {
return &bg_itemlist[i];
}
}
Com_Error( ERR_DROP, "HoldableItem not found" );
return NULL;
}
/*
===============
BG_FindItemForWeapon
===============
*/
gitem_t *BG_FindItemForWeapon( weapon_t weapon ) {
gitem_t *it;
for ( it = bg_itemlist + 1 ; it->classname ; it++) {
if ( it->giType == IT_WEAPON && it->giTag == weapon ) {
return it;
}
}
Com_Error( ERR_DROP, "Couldn't find item for weapon %i", weapon);
return NULL;
}
/*
===============
BG_FindItem
===============
*/
gitem_t *BG_FindItem( const char *pickupName ) {
gitem_t *it;
for ( it = bg_itemlist + 1 ; it->classname ; it++ ) {
if ( !Q_stricmp( it->pickup_name, pickupName ) )
return it;
}
return NULL;
}
/*
============
BG_PlayerTouchesItem
Items can be picked up without actually touching their physical bounds to make
grabbing them easier
============
*/
qboolean BG_PlayerTouchesItem( playerState_t *ps, entityState_t *item, int atTime ) {
vec3_t origin;
BG_EvaluateTrajectory( &item->pos, atTime, origin );
// we are ignoring ducked differences here
if ( ps->origin[0] - origin[0] > 44
|| ps->origin[0] - origin[0] < -50
|| ps->origin[1] - origin[1] > 36
|| ps->origin[1] - origin[1] < -36
|| ps->origin[2] - origin[2] > 36
|| ps->origin[2] - origin[2] < -36 ) {
return qfalse;
}
return qtrue;
}
/*
================
BG_CanItemBeGrabbed
Returns false if the item should not be picked up.
This needs to be the same for client side prediction and server use.
================
*/
qboolean BG_CanItemBeGrabbed( int gametype, const entityState_t *ent, const playerState_t *ps ) {
gitem_t *item;
#ifdef MISSIONPACK
int upperBound;
#endif
if ( ent->modelindex < 1 || ent->modelindex >= bg_numItems ) {
Com_Error( ERR_DROP, "BG_CanItemBeGrabbed: index out of range" );
}
item = &bg_itemlist[ent->modelindex];
switch( item->giType ) {
case IT_WEAPON:
return qtrue; // weapons are always picked up
case IT_AMMO:
if ( ps->ammo[ item->giTag ] >= 200 ) {
return qfalse; // can't hold any more
}
return qtrue;
case IT_ARMOR:
#ifdef MISSIONPACK
if( bg_itemlist[ps->stats[STAT_PERSISTANT_POWERUP]].giTag == PW_SCOUT ) {
return qfalse;
}
// we also clamp armor to the maxhealth for handicapping
if( bg_itemlist[ps->stats[STAT_PERSISTANT_POWERUP]].giTag == PW_GUARD ) {
upperBound = ps->stats[STAT_MAX_HEALTH];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -