mirror of
https://github.com/ReactionQuake3/reaction.git
synced 2025-01-22 01:21:12 +00:00
New multiple item code and added PB support to the UI
This commit is contained in:
parent
777b0e8431
commit
ac43ff162f
17 changed files with 244 additions and 76 deletions
Binary file not shown.
|
@ -5,6 +5,9 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.54 2002/10/26 00:37:18 jbravo
|
||||
// New multiple item code and added PB support to the UI
|
||||
//
|
||||
// Revision 1.53 2002/06/23 23:32:29 jbravo
|
||||
// Fixed logging of clients IP addresses.
|
||||
//
|
||||
|
@ -585,7 +588,7 @@ static void CG_IRVision_f(void)
|
|||
status = "disabled";
|
||||
}
|
||||
|
||||
if (bg_itemlist[cg.snap->ps.stats[STAT_HOLDABLE_ITEM]].giTag == HI_BANDOLIER) {
|
||||
if (cg.snap->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_BANDOLIER)) {
|
||||
CG_Printf(va("IR vision %s.\n", status));
|
||||
} else {
|
||||
CG_Printf(va("IR vision will be %s next time you get a bandolier.\n", status));
|
||||
|
@ -757,4 +760,5 @@ void CG_InitConsoleCommands(void)
|
|||
trap_AddCommand("reflogin");
|
||||
trap_AddCommand("ref");
|
||||
trap_AddCommand("refresign");
|
||||
trap_AddCommand("debugshit");
|
||||
}
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.67 2002/10/26 00:37:18 jbravo
|
||||
// New multiple item code and added PB support to the UI
|
||||
//
|
||||
// Revision 1.66 2002/08/30 06:23:57 niceass
|
||||
// disabled wallhack protection #2!!!
|
||||
//
|
||||
|
@ -1359,15 +1362,27 @@ CG_DrawHoldableItem
|
|||
*/
|
||||
static void CG_DrawHoldableItem(void)
|
||||
{
|
||||
int value;
|
||||
int value, item;
|
||||
|
||||
value = cg.snap->ps.stats[STAT_HOLDABLE_ITEM];
|
||||
if (value) {
|
||||
item = 0;
|
||||
// JBravo: new items code. The order here is the same as in g_active so you
|
||||
// drop the same item that you see on your HUD.
|
||||
if (cg.snap->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_BANDOLIER))
|
||||
item = HI_BANDOLIER;
|
||||
else if (cg.snap->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_SLIPPERS))
|
||||
item = HI_SLIPPERS;
|
||||
else if (cg.snap->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_SILENCER))
|
||||
item = HI_SILENCER;
|
||||
else if (cg.snap->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_LASER))
|
||||
item = HI_LASER;
|
||||
else if (cg.snap->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_KEVLAR))
|
||||
item = HI_KEVLAR;
|
||||
|
||||
if (item) {
|
||||
value = BG_FindItemForHoldable(item) - bg_itemlist;
|
||||
CG_RegisterItemVisuals(value);
|
||||
//CG_DrawPic( 640-ICON_SIZE, (SCREEN_HEIGHT-ICON_SIZE)/2, ICON_SIZE, ICON_SIZE, cg_items[ value ].icon );
|
||||
CG_DrawPic(640 - SMICON_SIZE, 440, SMICON_SIZE, SMICON_SIZE, cg_items[value].icon);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.54 2002/10/26 00:37:18 jbravo
|
||||
// New multiple item code and added PB support to the UI
|
||||
//
|
||||
// Revision 1.53 2002/09/29 16:06:44 jbravo
|
||||
// Work done at the HPWorld expo
|
||||
//
|
||||
|
@ -2428,7 +2431,7 @@ void CG_AddRefEntityWithPowerups(refEntity_t * ent, entityState_t * state, int t
|
|||
|
||||
//Elder: IR Vision -- only on players that are alive
|
||||
if (state->eType == ET_PLAYER) {
|
||||
if (bg_itemlist[cg.snap->ps.stats[STAT_HOLDABLE_ITEM]].giTag == HI_BANDOLIER &&
|
||||
if ((cg.snap->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_BANDOLIER)) &&
|
||||
cg.rq3_irvision && !(state->eFlags & EF_DEAD)) {
|
||||
ent->customShader = cgs.media.irPlayerShader;
|
||||
trap_R_AddRefEntityToScene(ent);
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.98 2002/10/26 00:37:18 jbravo
|
||||
// New multiple item code and added PB support to the UI
|
||||
//
|
||||
// Revision 1.97 2002/10/20 21:24:32 blaze
|
||||
// Added cg_rq3_gunname cvars. These can be used to choose weapon replacements. You will need 3 icons that I will upload to the ftp. These should go in the next pk3
|
||||
//
|
||||
|
@ -818,7 +821,7 @@ void CG_RegisterWeapon(int weaponNum)
|
|||
char md3name[MAX_QPATH];
|
||||
char newname[MAX_QPATH];
|
||||
char newicon[MAX_QPATH];
|
||||
char teststuff[MAX_QPATH];
|
||||
// char teststuff[MAX_QPATH];
|
||||
// END
|
||||
|
||||
int i;
|
||||
|
@ -1659,7 +1662,7 @@ void CG_AddPlayerWeapon(refEntity_t * parent, playerState_t * ps, centity_t * ce
|
|||
*/
|
||||
|
||||
//CG_LightningBolt( nonPredictedCent, parent->lightingOrigin );
|
||||
if (ps && bg_itemlist[cg.snap->ps.stats[STAT_HOLDABLE_ITEM]].giTag == HI_SILENCER &&
|
||||
if (ps && (cg.snap->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_SILENCER)) &&
|
||||
(weaponNum == WP_PISTOL || weaponNum == WP_MP5 || weaponNum == WP_SSG3000)) {
|
||||
//Makro - wasn't initialized, caused a warning in MSVC
|
||||
vec3_t silencerEnd;
|
||||
|
@ -1712,7 +1715,7 @@ void CG_AddPlayerWeapon(refEntity_t * parent, playerState_t * ps, centity_t * ce
|
|||
}
|
||||
}
|
||||
|
||||
if (ps && bg_itemlist[cg.snap->ps.stats[STAT_HOLDABLE_ITEM]].giTag == HI_LASER &&
|
||||
if (ps && (cg.snap->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_LASER)) &&
|
||||
(weaponNum == WP_PISTOL || weaponNum == WP_MP5 || weaponNum == WP_M4)) {
|
||||
float scale = 0.0f;
|
||||
vec3_t angles;
|
||||
|
@ -3926,7 +3929,7 @@ void CG_Bullet(vec3_t end, int sourceEntityNum, vec3_t normal,
|
|||
// Elder: only if not using SSG, check if this client is the source
|
||||
if (sourceEntityNum == cg.snap->ps.clientNum) {
|
||||
if (cg.snap->ps.weapon != WP_SSG3000 &&
|
||||
bg_itemlist[cg.snap->ps.stats[STAT_HOLDABLE_ITEM]].giTag != HI_SILENCER) {
|
||||
(cg.snap->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_SILENCER))) {
|
||||
if (random() < chance)
|
||||
CG_CreateTracer(sourceEntityNum, start, end);
|
||||
}
|
||||
|
@ -4023,7 +4026,7 @@ Broken until I find a way to lerp an entity without a cent
|
|||
void CG_CheckLaser()
|
||||
{
|
||||
//Elder: check for local laser
|
||||
if (bg_itemlist[cg.snap->ps.stats[STAT_HOLDABLE_ITEM]].giTag == HI_LASER &&
|
||||
if ((cg.snap->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_LASER)) &&
|
||||
cg_RQ3_laserAssist.integer &&
|
||||
(cg.snap->ps.weapon == WP_PISTOL || cg.snap->ps.weapon == WP_MP5 || cg.snap->ps.weapon == WP_M4)) {
|
||||
CG_LocalLaser();
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.45 2002/10/26 00:37:18 jbravo
|
||||
// New multiple item code and added PB support to the UI
|
||||
//
|
||||
// Revision 1.44 2002/07/22 06:34:13 niceass
|
||||
// cleaned up the powerup code
|
||||
//
|
||||
|
@ -928,9 +931,10 @@ qboolean BG_CanItemBeGrabbed(int gametype, const entityState_t * ent, const play
|
|||
|
||||
case IT_HOLDABLE:
|
||||
// can only hold one item at a time
|
||||
if (ps->stats[STAT_HOLDABLE_ITEM]) {
|
||||
// JBravo: I beg to differ
|
||||
/* if (ps->stats[STAT_HOLDABLE_ITEM]) {
|
||||
return qfalse;
|
||||
}
|
||||
} */
|
||||
return qtrue;
|
||||
|
||||
case IT_BAD:
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.91 2002/10/26 00:37:18 jbravo
|
||||
// New multiple item code and added PB support to the UI
|
||||
//
|
||||
// Revision 1.90 2002/09/08 23:25:09 niceass
|
||||
// made cg_rq3_predictweapons even more like quake 2, and it's simpler
|
||||
//
|
||||
|
@ -1135,7 +1138,8 @@ static void PM_CrashLand(void)
|
|||
//Blaze lots of changes to make it more like aq2
|
||||
// this is a pain grunt, so don't play it if dead
|
||||
if (pm->ps->stats[STAT_HEALTH] > 0 && damage > 0) {
|
||||
if (bg_itemlist[pm->ps->stats[STAT_HOLDABLE_ITEM]].giTag == HI_SLIPPERS)
|
||||
// JBravo: new multiple itemcode
|
||||
if (pm->ps->stats[STAT_HOLDABLE_ITEM] & (1 << HI_SLIPPERS))
|
||||
PM_AddEvent(EV_FALL_FAR_NOSOUND);
|
||||
else
|
||||
PM_AddEvent(EV_FALL_FAR);
|
||||
|
@ -1148,7 +1152,8 @@ static void PM_CrashLand(void)
|
|||
}
|
||||
}
|
||||
} else if (delta > 20) {
|
||||
if (bg_itemlist[pm->ps->stats[STAT_HOLDABLE_ITEM]].giTag == HI_SLIPPERS) {
|
||||
// JBravo: new multiple itemcode
|
||||
if (pm->ps->stats[STAT_HOLDABLE_ITEM] & (1 << HI_SLIPPERS)) {
|
||||
PM_AddEvent(EV_FALL_SHORT_NOSOUND);
|
||||
//Elder: added? useful?
|
||||
pm->ps->stats[STAT_FALLDAMAGE] = 0;
|
||||
|
@ -1157,7 +1162,8 @@ static void PM_CrashLand(void)
|
|||
//Elder: added? useful?
|
||||
pm->ps->stats[STAT_FALLDAMAGE] = 0;
|
||||
}
|
||||
} else if (!(bg_itemlist[pm->ps->stats[STAT_HOLDABLE_ITEM]].giTag == HI_SLIPPERS)) {
|
||||
// JBravo: new multiple itemcode
|
||||
} else if (!(pm->ps->stats[STAT_HOLDABLE_ITEM] & (1 << HI_SLIPPERS))) {
|
||||
// Elder: don't spam sound events going up -- more like Q2 ladders as well
|
||||
if (!pml.ladder || pm->ps->velocity[2] < 0)
|
||||
PM_AddEvent(PM_FootstepForSurface());
|
||||
|
@ -1549,7 +1555,8 @@ static void PM_Footsteps(void)
|
|||
//Elder: we can check for slippers here!
|
||||
// on ground will only play sounds if running
|
||||
if ((footstep && !pm->noFootsteps)
|
||||
&& !(bg_itemlist[pm->ps->stats[STAT_HOLDABLE_ITEM]].giTag == HI_SLIPPERS)) {
|
||||
// JBravo: new multiple itemcode
|
||||
&& !(pm->ps->stats[STAT_HOLDABLE_ITEM] & (1 << HI_SLIPPERS))) {
|
||||
PM_AddEvent(PM_FootstepForSurface());
|
||||
}
|
||||
} else if (pm->waterlevel == 1) {
|
||||
|
@ -2472,7 +2479,8 @@ static void PM_Weapon(void)
|
|||
// NiceAss: Check to see if this is game or cgame
|
||||
//if (pm->predict) {
|
||||
//Elder: check for silencer
|
||||
if (bg_itemlist[pm->ps->stats[STAT_HOLDABLE_ITEM]].giTag == HI_SILENCER &&
|
||||
// JBravo: new multiple itemcode
|
||||
if ((pm->ps->stats[STAT_HOLDABLE_ITEM] & (1 << HI_SILENCER)) &&
|
||||
(pm->ps->weapon == WP_PISTOL || pm->ps->weapon == WP_MP5 || pm->ps->weapon == WP_SSG3000)) {
|
||||
PM_AddEvent2(EV_FIRE_WEAPON, RQ3_WPMOD_SILENCER);
|
||||
} else if (pm->ps->stats[STAT_BURST] > 1 && pm->ps->weapon == WP_KNIFE &&
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.91 2002/10/26 00:37:18 jbravo
|
||||
// New multiple item code and added PB support to the UI
|
||||
//
|
||||
// Revision 1.90 2002/09/29 16:06:44 jbravo
|
||||
// Work done at the HPWorld expo
|
||||
//
|
||||
|
@ -953,14 +956,48 @@ void ThrowItem(gentity_t * ent)
|
|||
//itemonTime > 0 or itemonState == itemon_dropping? Or both?
|
||||
//item = 0;
|
||||
|
||||
// JBravo: New drop item code for multiple items.
|
||||
if (client->uniqueItems > 0) {
|
||||
item = bg_itemlist[client->ps.stats[STAT_HOLDABLE_ITEM]].giTag;
|
||||
xr_item = BG_FindItemForHoldable(item);
|
||||
client->ps.stats[STAT_HOLDABLE_ITEM] = 0;
|
||||
//Elder: Just going to re-use the dropWeapon function
|
||||
xr_drop = dropWeapon(ent, xr_item, 0, FL_DROPPED_ITEM | FL_THROWN_ITEM);
|
||||
xr_drop->count = -1; // XRAY FMJ 0 is already taken, -1 means no ammo
|
||||
client->uniqueItems--;
|
||||
if (g_gametype.integer >= GT_TEAM) {
|
||||
if (client->ps.stats[STAT_HOLDABLE_ITEM] & (1 << client->teamplayItem)) {
|
||||
xr_item = BG_FindItemForHoldable(client->teamplayItem);
|
||||
xr_drop = dropWeapon(ent, xr_item, 0, FL_DROPPED_ITEM | FL_THROWN_ITEM);
|
||||
xr_drop->count = -1;
|
||||
client->ps.stats[STAT_HOLDABLE_ITEM] &= ~(1 << client->teamplayItem);
|
||||
client->uniqueItems--;
|
||||
}
|
||||
}
|
||||
if (client->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_BANDOLIER)) {
|
||||
xr_item = BG_FindItemForHoldable(HI_BANDOLIER);
|
||||
xr_drop = dropWeapon(ent, xr_item, 0, FL_DROPPED_ITEM | FL_THROWN_ITEM);
|
||||
xr_drop->count = -1;
|
||||
client->ps.stats[STAT_HOLDABLE_ITEM] &= ~(1 << HI_BANDOLIER);
|
||||
client->uniqueItems--;
|
||||
} else if (client->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_SLIPPERS)) {
|
||||
xr_item = BG_FindItemForHoldable(HI_SLIPPERS);
|
||||
xr_drop = dropWeapon(ent, xr_item, 0, FL_DROPPED_ITEM | FL_THROWN_ITEM);
|
||||
xr_drop->count = -1;
|
||||
client->ps.stats[STAT_HOLDABLE_ITEM] &= ~(1 << HI_SLIPPERS);
|
||||
client->uniqueItems--;
|
||||
} else if (client->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_SILENCER)) {
|
||||
xr_item = BG_FindItemForHoldable(HI_SILENCER);
|
||||
xr_drop = dropWeapon(ent, xr_item, 0, FL_DROPPED_ITEM | FL_THROWN_ITEM);
|
||||
xr_drop->count = -1;
|
||||
client->ps.stats[STAT_HOLDABLE_ITEM] &= ~(1 << HI_SILENCER);
|
||||
client->uniqueItems--;
|
||||
} else if (client->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_LASER)) {
|
||||
xr_item = BG_FindItemForHoldable(HI_LASER);
|
||||
xr_drop = dropWeapon(ent, xr_item, 0, FL_DROPPED_ITEM | FL_THROWN_ITEM);
|
||||
xr_drop->count = -1;
|
||||
client->ps.stats[STAT_HOLDABLE_ITEM] &= ~(1 << HI_LASER);
|
||||
client->uniqueItems--;
|
||||
} else if (client->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_KEVLAR)) {
|
||||
xr_item = BG_FindItemForHoldable(HI_KEVLAR);
|
||||
xr_drop = dropWeapon(ent, xr_item, 0, FL_DROPPED_ITEM | FL_THROWN_ITEM);
|
||||
xr_drop->count = -1;
|
||||
client->ps.stats[STAT_HOLDABLE_ITEM] &= ~(1 << HI_KEVLAR);
|
||||
client->uniqueItems--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1464,7 +1501,8 @@ void ClientEndFrame(gentity_t * ent)
|
|||
ent->client->openDoorTime = 0;
|
||||
}
|
||||
|
||||
if (bg_itemlist[ent->client->ps.stats[STAT_HOLDABLE_ITEM]].giTag == HI_LASER) {
|
||||
// JBravo: multiple items
|
||||
if (ent->client->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_LASER)) {
|
||||
//Try to turn the laser on if it's off
|
||||
if (ent->client->lasersight == NULL)
|
||||
Laser_Gen(ent, qtrue);
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.172 2002/10/26 00:37:18 jbravo
|
||||
// New multiple item code and added PB support to the UI
|
||||
//
|
||||
// Revision 1.171 2002/10/21 21:00:39 slicer
|
||||
// New MM features and bug fixes
|
||||
//
|
||||
|
@ -722,6 +725,15 @@ void Cmd_Give_f(gentity_t * ent)
|
|||
return;
|
||||
}
|
||||
|
||||
if (give_all || Q_stricmp(name, "items") == 0) {
|
||||
// JBravo: for the new items system
|
||||
ent->client->ps.stats[STAT_HOLDABLE_ITEM] = (1 << HI_KEVLAR);
|
||||
ent->client->ps.stats[STAT_HOLDABLE_ITEM] |= (1 << HI_LASER);
|
||||
ent->client->ps.stats[STAT_HOLDABLE_ITEM] |= (1 << HI_SILENCER);
|
||||
ent->client->ps.stats[STAT_HOLDABLE_ITEM] |= (1 << HI_BANDOLIER);
|
||||
ent->client->ps.stats[STAT_HOLDABLE_ITEM] |= (1 << HI_SLIPPERS);
|
||||
}
|
||||
|
||||
if (give_all || Q_stricmp(name, "ammo") == 0) {
|
||||
for (i = 0; i < MAX_WEAPONS; i++) {
|
||||
//Blaze: Give right amount of shots to each gun
|
||||
|
@ -754,6 +766,10 @@ void Cmd_Give_f(gentity_t * ent)
|
|||
}
|
||||
}
|
||||
|
||||
void RQ3_Cmd_debugshit (gentity_t * ent)
|
||||
{
|
||||
G_Printf("STAT_HOLDABLE_ITEM is %d, uniqueItems is %d\n", ent->client->ps.stats[STAT_HOLDABLE_ITEM], ent->client->uniqueItems);
|
||||
}
|
||||
/*
|
||||
==================
|
||||
Cmd_God_f
|
||||
|
@ -2581,7 +2597,8 @@ void Cmd_DropItem_f(gentity_t * ent)
|
|||
|
||||
if (ent->client->ps.stats[STAT_HOLDABLE_ITEM]) {
|
||||
//Elder: reset item totals if using bandolier
|
||||
if (bg_itemlist[ent->client->ps.stats[STAT_HOLDABLE_ITEM]].giTag == HI_BANDOLIER) {
|
||||
//JBravo: New multiple items code.
|
||||
if (ent->client->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_BANDOLIER)) {
|
||||
if (ent->client->numClips[WP_SSG3000] > RQ3_SSG3000_EXTRA_AMMO)
|
||||
ent->client->numClips[WP_SSG3000] = RQ3_SSG3000_EXTRA_AMMO;
|
||||
if (ent->client->numClips[WP_M3] > RQ3_M3_EXTRA_AMMO)
|
||||
|
@ -2604,7 +2621,7 @@ void Cmd_DropItem_f(gentity_t * ent)
|
|||
}
|
||||
}
|
||||
//Force laser off
|
||||
else if (bg_itemlist[ent->client->ps.stats[STAT_HOLDABLE_ITEM]].giTag == HI_LASER)
|
||||
else if (ent->client->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_LASER))
|
||||
Laser_Gen(ent, qfalse);
|
||||
ThrowItem(ent);
|
||||
}
|
||||
|
@ -2857,6 +2874,8 @@ void ClientCommand(int clientNum)
|
|||
// JBravo: adding tkok
|
||||
else if (Q_stricmp(cmd, "tkok") == 0)
|
||||
RQ3_Cmd_TKOk(ent);
|
||||
else if (Q_stricmp(cmd, "debugshit") == 0)
|
||||
RQ3_Cmd_debugshit(ent);
|
||||
//Elder: stuff for dropping items
|
||||
else if (Q_stricmp(cmd, "dropitem") == 0)
|
||||
Cmd_DropItem_f(ent);
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.129 2002/10/26 00:37:18 jbravo
|
||||
// New multiple item code and added PB support to the UI
|
||||
//
|
||||
// Revision 1.128 2002/10/04 20:52:39 jbravo
|
||||
// Think I finally have the mp5 damage right
|
||||
//
|
||||
|
@ -374,10 +377,9 @@ Toss the weapon and powerups for the killed player
|
|||
*/
|
||||
void TossClientItems(gentity_t * self)
|
||||
{
|
||||
gitem_t *item;
|
||||
int weapon;
|
||||
gitem_t *item, *dropitem;
|
||||
int weapon, i;
|
||||
float angle;
|
||||
int i;
|
||||
gentity_t *drop;
|
||||
|
||||
//Elder: added
|
||||
|
@ -467,10 +469,15 @@ void TossClientItems(gentity_t * self)
|
|||
angle += 30;
|
||||
}
|
||||
|
||||
if (self->client->ps.stats[STAT_HOLDABLE_ITEM]) {
|
||||
Drop_Item(self, &bg_itemlist[self->client->ps.stats[STAT_HOLDABLE_ITEM]], angle);
|
||||
angle += 30;
|
||||
// JBravo: drop all items in the new item system.
|
||||
for (i = HI_NUM_HOLDABLE - 1; i > 0; i--) {
|
||||
if (self->client->ps.stats[STAT_HOLDABLE_ITEM] & (1 << i)) {
|
||||
dropitem = BG_FindItemForHoldable(i);
|
||||
Drop_Item(self, dropitem, angle);
|
||||
angle += 30;
|
||||
}
|
||||
}
|
||||
|
||||
// drop all the powerups if not in teamplay
|
||||
if (g_gametype.integer != GT_TEAM) {
|
||||
angle = 45;
|
||||
|
@ -2212,7 +2219,8 @@ void G_Damage(gentity_t * targ, gentity_t * inflictor, gentity_t * attacker,
|
|||
// Vest stuff - is the knife supposed to be affected?
|
||||
// NiceAss: Added mod != MOD_KNIFE_THROWN so kevlar doesn't help against thrown knives
|
||||
// JBravo: added mod != MOD_KNIFE so kevlar doesn't help against slashing knives either
|
||||
if (bg_itemlist[targ->client->ps.stats[STAT_HOLDABLE_ITEM]].giTag == HI_KEVLAR &&
|
||||
// JBravo: the new itemscode.
|
||||
if ((targ->client->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_KEVLAR)) &&
|
||||
mod != MOD_KNIFE_THROWN && mod != MOD_KNIFE) {
|
||||
targ->client->kevlarHit = qtrue;
|
||||
if (attacker->client->ps.weapon == WP_SSG3000) {
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.50 2002/10/26 00:37:18 jbravo
|
||||
// New multiple item code and added PB support to the UI
|
||||
//
|
||||
// Revision 1.49 2002/09/29 16:06:44 jbravo
|
||||
// Work done at the HPWorld expo
|
||||
//
|
||||
|
@ -177,7 +180,8 @@ int Pickup_Holdable(gentity_t * ent, gentity_t * other)
|
|||
{
|
||||
//Elder: why it's implemented like this I have no idea
|
||||
//JBravo: Neiter do I :( Sucks Monks Nads this way :(
|
||||
other->client->ps.stats[STAT_HOLDABLE_ITEM] = ent->item - bg_itemlist;
|
||||
//JBravo: Monks nads are safe now due to my new items code :)
|
||||
other->client->ps.stats[STAT_HOLDABLE_ITEM] |= (1 << ent->item->giTag);
|
||||
other->client->uniqueItems++;
|
||||
|
||||
//Try to fire up the laser if it's picked up
|
||||
|
@ -517,7 +521,7 @@ void Touch_Item(gentity_t * ent, gentity_t * other, trace_t * trace)
|
|||
|
||||
predict = other->client->pers.predictItemPickup;
|
||||
|
||||
if (bg_itemlist[other->client->ps.stats[STAT_HOLDABLE_ITEM]].giTag == HI_BANDOLIER)
|
||||
if (other->client->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_BANDOLIER))
|
||||
bandolierFactor = 2;
|
||||
else
|
||||
bandolierFactor = 1;
|
||||
|
@ -644,8 +648,7 @@ void Touch_Item(gentity_t * ent, gentity_t * other, trace_t * trace)
|
|||
break;
|
||||
case IT_HOLDABLE:
|
||||
//Elder: check to see if it's in mid-air
|
||||
if (other->client->uniqueItems >= 1 || //g_RQ3_maxWeapons.integer ||
|
||||
ent->s.pos.trDelta[2] != 0)
|
||||
if (other->client->uniqueItems >= g_RQ3_maxItems.integer || ent->s.pos.trDelta[2] != 0)
|
||||
return;
|
||||
respawn = Pickup_Holdable(ent, other);
|
||||
break;
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.127 2002/10/26 00:37:18 jbravo
|
||||
// New multiple item code and added PB support to the UI
|
||||
//
|
||||
// Revision 1.126 2002/10/21 21:00:39 slicer
|
||||
// New MM features and bug fixes
|
||||
//
|
||||
|
@ -1344,6 +1347,7 @@ extern vmCvar_t g_RQ3_mmflags;
|
|||
//Blaze: Reaction cvars
|
||||
extern vmCvar_t g_rxn_knifelimit;
|
||||
extern vmCvar_t g_RQ3_maxWeapons;
|
||||
extern vmCvar_t g_RQ3_maxItems;
|
||||
extern vmCvar_t g_RQ3_statLog;
|
||||
extern vmCvar_t g_RQ3_ejectBlood;
|
||||
extern vmCvar_t g_RQ3_respawnProtectTime;
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.122 2002/10/26 00:37:18 jbravo
|
||||
// New multiple item code and added PB support to the UI
|
||||
//
|
||||
// Revision 1.121 2002/10/21 21:00:39 slicer
|
||||
// New MM features and bug fixes
|
||||
//
|
||||
|
@ -412,6 +415,7 @@ vmCvar_t g_RQ3_mmflags;
|
|||
//Blaze: Reaction cvars
|
||||
vmCvar_t g_rxn_knifelimit;
|
||||
vmCvar_t g_RQ3_maxWeapons;
|
||||
vmCvar_t g_RQ3_maxItems;
|
||||
vmCvar_t g_RQ3_statLog;
|
||||
vmCvar_t g_RQ3_ejectBlood;
|
||||
vmCvar_t g_RQ3_respawnProtectTime;
|
||||
|
@ -557,6 +561,7 @@ static cvarTable_t gameCvarTable[] = {
|
|||
// Elder: these are explicit values set every time the game initializes
|
||||
{&g_RQ3_ejectBlood, "g_RQ3_ejectBlood", "0", CVAR_ARCHIVE | CVAR_NORESTART, 0, qfalse},
|
||||
{&g_RQ3_maxWeapons, "g_RQ3_maxWeapons", "1", 0, 0, qtrue},
|
||||
{&g_RQ3_maxItems, "g_RQ3_maxItems", "1", 0, 0, qtrue},
|
||||
{&g_RQ3_respawnProtectTime, "g_RQ3_respawnProtectTime", "2", CVAR_ARCHIVE | CVAR_NORESTART, 0, qtrue},
|
||||
{&g_RQ3_statLog, "sv_RQ3_statLog", "1", CVAR_ARCHIVE | CVAR_SERVERINFO, 0, qfalse},
|
||||
{&g_RQ3_messageMaxCount, "sv_RQ3_messageMaxCount", SAY_MAX_NUMBER, 0, 0, qfalse},
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.141 2002/10/26 00:37:18 jbravo
|
||||
// New multiple item code and added PB support to the UI
|
||||
//
|
||||
// Revision 1.140 2002/10/21 21:00:39 slicer
|
||||
// New MM features and bug fixes
|
||||
//
|
||||
|
@ -1254,8 +1257,7 @@ void EquipPlayer(gentity_t * ent)
|
|||
ent->client->ps.weaponstate = WEAPON_RAISING;
|
||||
|
||||
if (ent->client->teamplayItem) {
|
||||
ent->client->ps.stats[STAT_HOLDABLE_ITEM] =
|
||||
BG_FindItemForHoldable(ent->client->teamplayItem) - bg_itemlist;
|
||||
ent->client->ps.stats[STAT_HOLDABLE_ITEM] = (1 << ent->client->teamplayItem);
|
||||
ent->client->uniqueItems = 1;
|
||||
} else {
|
||||
G_Printf("%s had an illegal teamplay item [%i]!\n", ent->client->pers.netname,
|
||||
|
@ -1815,19 +1817,19 @@ void GetWeaponName(gentity_t * ent, char *buf)
|
|||
|
||||
void GetItemName(gentity_t * ent, char *buf)
|
||||
{
|
||||
if (bg_itemlist[ent->client->ps.stats[STAT_HOLDABLE_ITEM]].giTag == HI_KEVLAR) {
|
||||
if (ent->client->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_KEVLAR)) {
|
||||
strcpy(buf, RQ3_KEVLAR_NAME);
|
||||
return;
|
||||
} else if (bg_itemlist[ent->client->ps.stats[STAT_HOLDABLE_ITEM]].giTag == HI_SILENCER) {
|
||||
} else if (ent->client->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_SILENCER)) {
|
||||
strcpy(buf, RQ3_SILENCER_NAME);
|
||||
return;
|
||||
} else if (bg_itemlist[ent->client->ps.stats[STAT_HOLDABLE_ITEM]].giTag == HI_SLIPPERS) {
|
||||
} else if (ent->client->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_SLIPPERS)) {
|
||||
strcpy(buf, RQ3_SLIPPERS_NAME);
|
||||
return;
|
||||
} else if (bg_itemlist[ent->client->ps.stats[STAT_HOLDABLE_ITEM]].giTag == HI_BANDOLIER) {
|
||||
} else if (ent->client->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_BANDOLIER)) {
|
||||
strcpy(buf, RQ3_BANDOLIER_NAME);
|
||||
return;
|
||||
} else if (bg_itemlist[ent->client->ps.stats[STAT_HOLDABLE_ITEM]].giTag == HI_LASER) {
|
||||
} else if (ent->client->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_LASER)) {
|
||||
strcpy(buf, RQ3_LASER_NAME);
|
||||
return;
|
||||
} else {
|
||||
|
|
|
@ -5,6 +5,9 @@
|
|||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// $Log$
|
||||
// Revision 1.83 2002/10/26 00:37:18 jbravo
|
||||
// New multiple item code and added PB support to the UI
|
||||
//
|
||||
// Revision 1.82 2002/09/24 05:06:17 blaze
|
||||
// fixed spectating so ref\'s can now use all the chasecam modes.
|
||||
//
|
||||
|
@ -1148,7 +1151,7 @@ int RQ3_Spread(gentity_t * ent, int spread)
|
|||
stage = 1;
|
||||
|
||||
//added laser advantage
|
||||
if (bg_itemlist[ent->client->ps.stats[STAT_HOLDABLE_ITEM]].giTag == HI_LASER &&
|
||||
if ((ent->client->ps.stats[STAT_HOLDABLE_ITEM] & (1 << HI_LASER)) &&
|
||||
(ent->client->ps.weapon == WP_PISTOL ||
|
||||
ent->client->ps.weapon == WP_MP5 || ent->client->ps.weapon == WP_M4)) {
|
||||
//G_Printf("Using laser advantage\n");
|
||||
|
|
|
@ -218,7 +218,7 @@
|
|||
maxChars 32
|
||||
maxPaintChars 8
|
||||
textstyle ITEM_TEXTSTYLE_SHADOWED
|
||||
rect 212 108 168 20
|
||||
rect 212 98 168 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 100
|
||||
textaligny 14
|
||||
|
@ -236,7 +236,7 @@
|
|||
text "Pure Server:"
|
||||
cvar "sv_pure"
|
||||
textstyle ITEM_TEXTSTYLE_SHADOWED
|
||||
rect 212 128 168 20
|
||||
rect 212 118 168 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 100
|
||||
textaligny 14
|
||||
|
@ -254,7 +254,7 @@
|
|||
text "Auto Download:"
|
||||
cvar "sv_allowdownload"
|
||||
textstyle ITEM_TEXTSTYLE_SHADOWED
|
||||
rect 212 148 168 20
|
||||
rect 212 138 168 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 100
|
||||
textaligny 14
|
||||
|
@ -272,7 +272,7 @@
|
|||
text "Enable Voting:"
|
||||
cvar "g_allowvote"
|
||||
textstyle ITEM_TEXTSTYLE_SHADOWED
|
||||
rect 212 168 168 20
|
||||
rect 212 158 168 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 100
|
||||
textaligny 14
|
||||
|
@ -291,7 +291,7 @@
|
|||
cvar "sv_maxclients"
|
||||
maxchars 4
|
||||
textstyle ITEM_TEXTSTYLE_SHADOWED
|
||||
rect 212 188 168 20
|
||||
rect 212 178 168 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 100
|
||||
textaligny 14
|
||||
|
@ -310,7 +310,7 @@
|
|||
cvar "sv_maxping"
|
||||
maxchars 4
|
||||
textstyle ITEM_TEXTSTYLE_SHADOWED
|
||||
rect 212 208 168 20
|
||||
rect 212 198 168 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 100
|
||||
textaligny 14
|
||||
|
@ -329,7 +329,7 @@
|
|||
cvar "sv_minping"
|
||||
maxchars 4
|
||||
textstyle ITEM_TEXTSTYLE_SHADOWED
|
||||
rect 212 228 168 20
|
||||
rect 212 218 168 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 100
|
||||
textaligny 14
|
||||
|
@ -348,7 +348,7 @@
|
|||
cvar "sv_maxrate"
|
||||
maxchars 5
|
||||
textstyle ITEM_TEXTSTYLE_SHADOWED
|
||||
rect 212 248 168 20
|
||||
rect 212 238 168 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 100
|
||||
textaligny 14
|
||||
|
@ -367,7 +367,7 @@
|
|||
cvar "sv_reconnectlimit"
|
||||
maxchars 4
|
||||
textstyle ITEM_TEXTSTYLE_SHADOWED
|
||||
rect 212 268 168 20
|
||||
rect 212 258 168 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 100
|
||||
textaligny 14
|
||||
|
@ -385,7 +385,7 @@
|
|||
text "Synchronous Client:"
|
||||
cvar "g_synchronousclients"
|
||||
textstyle ITEM_TEXTSTYLE_SHADOWED
|
||||
rect 212 288 168 20
|
||||
rect 212 278 168 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 100
|
||||
textaligny 14
|
||||
|
@ -403,7 +403,7 @@
|
|||
text "Require Password:"
|
||||
cvar "g_needpassword"
|
||||
textstyle ITEM_TEXTSTYLE_SHADOWED
|
||||
rect 212 308 168 20
|
||||
rect 212 298 168 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 100
|
||||
textaligny 14
|
||||
|
@ -423,7 +423,7 @@
|
|||
maxChars 32
|
||||
maxPaintChars 8
|
||||
textstyle ITEM_TEXTSTYLE_SHADOWED
|
||||
rect 212 328 168 20
|
||||
rect 212 318 168 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 100
|
||||
textaligny 14
|
||||
|
@ -442,7 +442,7 @@
|
|||
cvar "ui_dedicated"
|
||||
cvarFloatList { "No" 0 "LAN" 1 "Internet" 2 }
|
||||
textstyle ITEM_TEXTSTYLE_SHADOWED
|
||||
rect 212 348 168 20
|
||||
rect 212 338 168 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 100
|
||||
textaligny 14
|
||||
|
@ -455,7 +455,7 @@
|
|||
|
||||
itemdef {
|
||||
name global
|
||||
rect 212 368 168 20
|
||||
rect 212 358 168 20
|
||||
style WINDOW_STYLE_EMPTY
|
||||
ownerdraw UI_NETGAMETYPE
|
||||
text "Game Type:"
|
||||
|
@ -469,6 +469,24 @@
|
|||
action { play "sound/misc/menu1.wav" }
|
||||
}
|
||||
|
||||
// Punkbuster
|
||||
|
||||
itemdef {
|
||||
name global
|
||||
style WINDOW_STYLE_EMPTY
|
||||
type ITEM_TYPE_YESNO
|
||||
text "Punkbuster enabled:"
|
||||
cvar "sv_punkbuster"
|
||||
textstyle ITEM_TEXTSTYLE_SHADOWED
|
||||
rect 212 378 168 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 100
|
||||
textaligny 14
|
||||
textscale .225
|
||||
forecolor 1 1 1 1
|
||||
visible 1
|
||||
}
|
||||
|
||||
//Window
|
||||
|
||||
itemdef {
|
||||
|
|
|
@ -237,7 +237,7 @@
|
|||
type ITEM_TYPE_YESNO
|
||||
text "Low quality sky:"
|
||||
cvar "r_fastsky"
|
||||
rect 56 120 256 20
|
||||
rect 56 118 256 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 144
|
||||
textaligny 20
|
||||
|
@ -271,7 +271,7 @@
|
|||
text "Ejecting Brass:"
|
||||
cvar "cg_brassTime"
|
||||
cvarFloatList { "High" 2500 "Med" 1250 "Off" 0 }
|
||||
rect 56 140 256 20
|
||||
rect 56 136 256 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 144
|
||||
textaligny 20
|
||||
|
@ -304,7 +304,7 @@
|
|||
type ITEM_TYPE_YESNO
|
||||
text "Wall marks:"
|
||||
cvar "cg_marks"
|
||||
rect 56 160 256 20
|
||||
rect 56 154 256 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 144
|
||||
textaligny 20
|
||||
|
@ -337,7 +337,7 @@
|
|||
type ITEM_TYPE_YESNO
|
||||
text "Dynamic lights:"
|
||||
cvar "r_dynamiclight"
|
||||
rect 56 180 256 20
|
||||
rect 56 172 256 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 144
|
||||
textaligny 20
|
||||
|
@ -370,7 +370,7 @@
|
|||
type ITEM_TYPE_YESNO
|
||||
text "Identify Target:"
|
||||
cvar "cg_drawCrosshairNames"
|
||||
rect 56 200 256 20
|
||||
rect 56 190 256 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 144
|
||||
textaligny 20
|
||||
|
@ -403,7 +403,7 @@
|
|||
type ITEM_TYPE_YESNO
|
||||
text "Sync Every Frame:"
|
||||
cvar "r_finish"
|
||||
rect 56 220 256 20
|
||||
rect 56 208 256 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 144
|
||||
textaligny 20
|
||||
|
@ -436,7 +436,7 @@
|
|||
type ITEM_TYPE_YESNO
|
||||
text "Force Player Models:"
|
||||
cvar "cg_forceModel"
|
||||
rect 56 240 256 20
|
||||
rect 56 226 256 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 144
|
||||
textaligny 20
|
||||
|
@ -469,7 +469,7 @@
|
|||
type ITEM_TYPE_YESNO
|
||||
text "Draw Team Overlay:"
|
||||
cvar "cg_drawTeamOverlay"
|
||||
rect 56 260 256 20
|
||||
rect 56 244 256 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 144
|
||||
textaligny 20
|
||||
|
@ -502,7 +502,7 @@
|
|||
type ITEM_TYPE_YESNO
|
||||
text "Allow Download:"
|
||||
cvar "cl_allowDownload"
|
||||
rect 56 280 256 20
|
||||
rect 56 262 256 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 144
|
||||
textaligny 20
|
||||
|
@ -535,7 +535,7 @@
|
|||
type ITEM_TYPE_YESNO
|
||||
text "Muzzle Flash:"
|
||||
cvar "cg_RQ3_flash"
|
||||
rect 56 300 256 20
|
||||
rect 56 280 256 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 144
|
||||
textaligny 20
|
||||
|
@ -568,7 +568,7 @@
|
|||
type ITEM_TYPE_YESNO
|
||||
text "Pain Blends:"
|
||||
cvar "cg_RQ3_painBlend"
|
||||
rect 56 320 256 20
|
||||
rect 56 298 256 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 144
|
||||
textaligny 20
|
||||
|
@ -601,7 +601,7 @@
|
|||
type ITEM_TYPE_YESNO
|
||||
text "Announcer:"
|
||||
cvar "cg_RQ3_announcer"
|
||||
rect 56 340 256 20
|
||||
rect 56 316 256 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 144
|
||||
textaligny 20
|
||||
|
@ -634,7 +634,7 @@
|
|||
type ITEM_TYPE_YESNO
|
||||
text "Impact Effects:"
|
||||
cvar "cg_RQ3_impactEffects"
|
||||
rect 56 360 256 20
|
||||
rect 56 334 256 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 144
|
||||
textaligny 20
|
||||
|
@ -660,6 +660,37 @@
|
|||
decoration
|
||||
}
|
||||
|
||||
itemdef {
|
||||
name opt_punkbuster
|
||||
type ITEM_TYPE_YESNO
|
||||
text "Punkbuster Enabled:"
|
||||
cvar "cl_punkbuster"
|
||||
rect 56 352 256 20
|
||||
textalign ITEM_ALIGN_RIGHT
|
||||
textalignx 144
|
||||
textaligny 20
|
||||
textscale .25
|
||||
forecolor RQ3_Option_Color
|
||||
visible 1
|
||||
onFocus { show hint_punkbuster ; timeFade hint_punkbuster forecolor .9 .9 .9 1 0 250 }
|
||||
leaveFocus { timeFade hint_punkbuster forecolor .9 .9 .9 0 0 250 }
|
||||
}
|
||||
|
||||
itemdef {
|
||||
name hint_punkbuster
|
||||
text "Enable or Disable client side Punkbuster (Restart is needed)"
|
||||
forecolor RQ3_MAIN_HINT_COLOR
|
||||
textalign 1
|
||||
textalignx 240
|
||||
textaligny 20
|
||||
textscale RQ3_MAIN_TEXTSIZE
|
||||
rect 80 420 480 40
|
||||
type 0
|
||||
style 0
|
||||
visible 0
|
||||
decoration
|
||||
}
|
||||
|
||||
//Page 2
|
||||
|
||||
//Crosshair
|
||||
|
@ -941,4 +972,4 @@
|
|||
decoration
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue