[nexuiz-commits] r6359 - in trunk/data: . qcsrc/client qcsrc/common qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Mon Mar 30 04:39:32 EDT 2009
Author: div0
Date: 2009-03-30 04:39:32 -0400 (Mon, 30 Mar 2009)
New Revision: 6359
Modified:
trunk/data/defaultNexuiz.cfg
trunk/data/qcsrc/client/sbar.qc
trunk/data/qcsrc/common/constants.qh
trunk/data/qcsrc/common/items.qh
trunk/data/qcsrc/server/cl_client.qc
trunk/data/qcsrc/server/cl_physics.qc
trunk/data/qcsrc/server/defs.qh
trunk/data/qcsrc/server/g_hook.qc
trunk/data/qcsrc/server/miscfunctions.qc
trunk/data/qcsrc/server/w_hook.qc
Log:
jetpack: add a "fuel" ammo type, and use that - and let it have regeneration
Modified: trunk/data/defaultNexuiz.cfg
===================================================================
--- trunk/data/defaultNexuiz.cfg 2009-03-30 07:41:39 UTC (rev 6358)
+++ trunk/data/defaultNexuiz.cfg 2009-03-30 08:39:32 UTC (rev 6359)
@@ -1423,8 +1423,16 @@
set g_jetpack_acceleration_up 600 "acceleration of the jetpack in z direction (note: you have to factor in gravity here, if antigravity is not 1)"
set g_jetpack_maxspeed_side 1500 "max speed of the jetpack in xy direction"
set g_jetpack_maxspeed_up 600 "max speed of the jetpack in z direction"
-set g_jetpack_ammo 3 "cells per second for jetpack"
+set g_jetpack_fuel 3 "fuel per second for jetpack"
+set g_balance_fuel_regen 0.1 "fuel regeneration (only applies if the player owns IT_FUEL_REGEN)"
+set g_balance_fuel_rot 0.1
+set g_balance_fuel_regenlinear 0
+set g_balance_fuel_rotlinear 0
+set g_balance_fuel_stable 100
+set g_balance_fuel_limit 999
+set g_balance_fuel_start 100
+
set cl_effects_lightningarc_simple 0
set cl_effects_lightningarc_segmentlength 64
set cl_effects_lightningarc_drift_start 0.45
Modified: trunk/data/qcsrc/client/sbar.qc
===================================================================
--- trunk/data/qcsrc/client/sbar.qc 2009-03-30 07:41:39 UTC (rev 6358)
+++ trunk/data/qcsrc/client/sbar.qc 2009-03-30 08:39:32 UTC (rev 6359)
@@ -1722,12 +1722,52 @@
drawpic(pos + ' 65 32 0', "gfx/keys/key_right.tga", ' 32 32 0', '1 1 1', .5 * ((pressedkeys & KEY_RIGHT) + 1), DRAWFLAG_NORMAL);
}
+float GetAmmoStat(float i)
+{
+ switch(i)
+ {
+ case 0: return STAT_SHELLS;
+ case 1: return STAT_NAILS;
+ case 2: return STAT_ROCKETS;
+ case 3: return STAT_CELLS;
+ case 4: return STAT_FUEL;
+ default: return -1;
+ }
+}
+
+float GetAmmoItemCode(float i)
+{
+ switch(i)
+ {
+ case 0: return IT_SHELLS;
+ case 1: return IT_NAILS;
+ case 2: return IT_ROCKETS;
+ case 3: return IT_CELLS;
+ case 4: return IT_FUEL;
+ default: return -1;
+ }
+}
+
+string GetAmmoPicture(float i)
+{
+ switch(i)
+ {
+ case 0: return "gfx/sb_shells";
+ case 1: return "gfx/sb_bullets";
+ case 2: return "gfx/sb_rockets";
+ case 3: return "gfx/sb_cells";
+ case 4: return "gfx/sb_fuel";
+ default: return "";
+ }
+}
+
void Sbar_Draw (void)
{
float i;
float x, fade;
float stat_items, stat_weapons;
vector o; o = '1 0 0' * vid_conwidth;
+ vector v;
string s;
sbar_fontsize = Sbar_GetFontsize("sbar_fontsize");
@@ -1967,44 +2007,18 @@
}
// ammo
- if (stat_items & IT_SHELLS)
- x = getstati(STAT_SHELLS);
- else if (stat_items & IT_NAILS)
- x = getstati(STAT_NAILS);
- else if (stat_items & IT_ROCKETS)
- x = getstati(STAT_ROCKETS);
- else if (stat_items & IT_CELLS)
- x = getstati(STAT_CELLS);
- else
- x = 0;
- if ((stat_items & IT_AMMO) || x != 0)
- {
- if (stat_items & IT_SHELLS)
- drawpic(sbar + '296 0 0', "gfx/sb_shells", '24 24 0', '1 1 1', sbar_alpha_fg, 0);
- else if (stat_items & IT_NAILS)
- drawpic(sbar + '296 0 0', "gfx/sb_bullets", '24 24 0', '1 1 1', sbar_alpha_fg, 0);
- else if (stat_items & IT_ROCKETS)
- drawpic(sbar + '296 0 0', "gfx/sb_rocket", '24 24 0', '1 1 1', sbar_alpha_fg, 0);
- else if (stat_items & IT_CELLS)
- drawpic(sbar + '296 0 0', "gfx/sb_cells", '24 24 0', '1 1 1', sbar_alpha_fg, 0);
- if(x > 10)
- Sbar_DrawXNum('224 0 0', x, 3, 24, '0.6 0.7 0.8', 1, 0);
- else
- Sbar_DrawXNum('224 0 0', x, 3, 24, '0.7 0 0', 1, 0);
- }
+ for(i = 0, v = '0 0 0'; (x = GetAmmoStat(i)) >= 0; ++i)
+ if(stat_items & GetAmmoItemCode(i))
+ {
+ x = getstati(x);
+ drawpic(sbar + '296 0 0' + v, GetAmmoPicture(i), '24 24 0', '1 1 1', sbar_alpha_fg, 0);
+ if(x > 10)
+ Sbar_DrawXNum('224 0 0' + v, x, 3, 24, '0.6 0.7 0.8', 1, 0);
+ else
+ Sbar_DrawXNum('224 0 0' + v, x, 3, 24, '0.7 0 0', 1, 0);
+ v_y -= 30;
+ }
- // jetpack cells
- if(stat_items & IT_USING_JETPACK)
- if not(stat_items & IT_CELLS)
- {
- x = getstati(STAT_CELLS);
- drawpic(sbar + '296 -30 0', "gfx/sb_cells", '24 24 0', '1 1 1', sbar_alpha_fg, 0);
- if(x > 10)
- Sbar_DrawXNum('224 -30 0', x, 3, 24, '0.6 0.7 0.8', 1, 0);
- else
- Sbar_DrawXNum('224 -30 0', x, 3, 24, '0.7 0 0', 1, 0);
- }
-
if (sbar_x + 320 + 160 <= vid_conwidth)
Sbar_MiniDeathmatchOverlay(sbar + '320 0 0');
if (sbar_x > 0)
@@ -2055,45 +2069,19 @@
else
Sbar_DrawXNum('81 12 0', x, 3, 24, '0.6 0.7 0.8', 1, 0);
- if (stat_items & IT_SHELLS)
- x = getstati(STAT_SHELLS);
- else if (stat_items & IT_NAILS)
- x = getstati(STAT_NAILS);
- else if (stat_items & IT_ROCKETS)
- x = getstati(STAT_ROCKETS);
- else if (stat_items & IT_CELLS)
- x = getstati(STAT_CELLS);
- else
- x = 0;
- if ((stat_items & IT_AMMO) || x != 0)
- {
- // (519-3*24) = 447
- if (stat_items & IT_SHELLS)
- drawpic(sbar + '519 0 0', "gfx/sb_shells", '0 0 0', '1 1 1', sbar_alpha_fg, 0);
- else if (stat_items & IT_NAILS)
- drawpic(sbar + '519 0 0', "gfx/sb_bullets", '0 0 0', '1 1 1', sbar_alpha_fg, 0);
- else if (stat_items & IT_ROCKETS)
- drawpic(sbar + '519 0 0', "gfx/sb_rocket", '0 0 0', '1 1 1', sbar_alpha_fg, 0);
- else if (stat_items & IT_CELLS)
- drawpic(sbar + '519 0 0', "gfx/sb_cells", '0 0 0', '1 1 1', sbar_alpha_fg, 0);
- if(x > 10)
- Sbar_DrawXNum('447 12 0', x, 3, 24, '0.6 0.7 0.8', 1, 0);
- else
- Sbar_DrawXNum('447 12 0', x, 3, 24, '0.7 0 0', 1, 0);
- }
+ // ammo
+ for(i = 0, v = '0 0 0'; (x = GetAmmoStat(i)) >= 0; ++i)
+ if(stat_items & GetAmmoItemCode(i))
+ {
+ x = getstati(x);
+ drawpic(sbar + '519 0 0' + v, GetAmmoPicture(i), '24 24 0', '1 1 1', sbar_alpha_fg, 0);
+ if(x > 10)
+ Sbar_DrawXNum('447 12 0' + v, x, 3, 24, '0.6 0.7 0.8', 1, 0);
+ else
+ Sbar_DrawXNum('447 12 0' + v, x, 3, 24, '0.7 0 0', 1, 0);
+ v_y -= 40;
+ }
- // jetpack cells
- if(stat_items & IT_USING_JETPACK)
- if not(stat_items & IT_CELLS)
- {
- x = getstati(STAT_CELLS);
- drawpic(sbar + '519 -40 0', "gfx/sb_cells", '0 0 0', '1 1 1', sbar_alpha_fg, 0);
- if(x > 10)
- Sbar_DrawXNum('447 -28 0', x, 3, 24, '0.6 0.7 0.8', 1, 0);
- else
- Sbar_DrawXNum('447 -28 0', x, 3, 24, '0.7 0 0', 1, 0);
- }
-
if (sb_lines > 24)
drawpic(sbar, "gfx/sbar_overlay", '0 0 0', '1 1 1', 1, DRAWFLAG_MODULATE);
Modified: trunk/data/qcsrc/common/constants.qh
===================================================================
--- trunk/data/qcsrc/common/constants.qh 2009-03-30 07:41:39 UTC (rev 6358)
+++ trunk/data/qcsrc/common/constants.qh 2009-03-30 08:39:32 UTC (rev 6359)
@@ -246,6 +246,7 @@
const float STAT_INVINCIBLE_FINISHED = 39;
const float STAT_PRESSED_KEYS = 42;
const float STAT_ALLOW_OLDNEXBEAM = 43; // this stat could later contain some other bits of info, like, more server-side particle config
+const float STAT_FUEL = 44;
const float CTF_STATE_ATTACK = 1;
const float CTF_STATE_DEFEND = 2;
const float CTF_STATE_COMMANDER = 3;
Modified: trunk/data/qcsrc/common/items.qh
===================================================================
--- trunk/data/qcsrc/common/items.qh 2009-03-30 07:41:39 UTC (rev 6358)
+++ trunk/data/qcsrc/common/items.qh 2009-03-30 08:39:32 UTC (rev 6359)
@@ -31,13 +31,16 @@
// both of these combined
float IT_CTF_SHIELDED = 4; // set for the flag shield
// using jetpack
-float IT_USING_JETPACK = 8;
+float IT_USING_JETPACK = 8; // confirmation that button is pressed
+float IT_JETPACK = 16; // actual item
+float IT_FUEL_REGEN = 32; // fuel regeneration trigger
float IT_SHELLS = 256;
float IT_NAILS = 512;
float IT_ROCKETS = 1024;
float IT_CELLS = 2048;
float IT_SUPERWEAPON = 4096;
-float IT_AMMO = 7936;
+float IT_FUEL = 128;
+float IT_AMMO = 8064;
float IT_STRENGTH = 8192;
float IT_INVINCIBLE = 16384;
float IT_HEALTH = 32768;
Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc 2009-03-30 07:41:39 UTC (rev 6358)
+++ trunk/data/qcsrc/server/cl_client.qc 2009-03-30 08:39:32 UTC (rev 6359)
@@ -1700,11 +1700,13 @@
void player_regen (void)
{
- float maxh, maxa, limith, limita, max_mod, regen_mod, rot_mod, limit_mod;
+ float maxh, maxa, maxf, limith, limita, limitf, max_mod, regen_mod, rot_mod, limit_mod;
maxh = cvar("g_balance_health_stable");
maxa = cvar("g_balance_armor_stable");
+ maxf = cvar("g_balance_fuel_stable");
limith = cvar("g_balance_health_limit");
limita = cvar("g_balance_armor_limit");
+ limitf = cvar("g_balance_fuel_limit");
if (g_minstagib || (g_lms && !cvar("g_lms_regenerate")))
return;
@@ -1739,8 +1741,10 @@
}
maxh = maxh * max_mod;
//maxa = maxa * max_mod;
+ //maxf = maxf * max_mod;
limith = limith * limit_mod;
limita = limita * limit_mod;
+ //limitf = limitf * limit_mod;
if (self.armorvalue > maxa)
{
@@ -1774,11 +1778,32 @@
self.health = min(maxh, self.health + regen_mod*cvar("g_balance_health_regenlinear") * frametime);
}
}
+ if (self.ammo_fuel > maxf)
+ {
+ if (time > self.pauserotfuel_finished)
+ {
+ self.ammo_fuel = max(maxf, self.ammo_fuel + (maxf - self.ammo_fuel) * rot_mod*cvar("g_balance_fuel_rot") * frametime);
+ self.ammo_fuel = max(maxf, self.ammo_fuel - rot_mod*cvar("g_balance_fuel_rotlinear") * frametime);
+ }
+ }
+ else if (self.ammo_fuel < maxf)
+ {
+ if(self.items & IT_FUEL_REGEN)
+ {
+ if (time > self.pauseregen_finished)
+ {
+ self.ammo_fuel = CalcRegen(self.ammo_fuel, maxf, regen_mod * cvar("g_balance_fuel_regen"));
+ self.ammo_fuel = min(maxf, self.ammo_fuel + regen_mod*cvar("g_balance_fuel_regenlinear") * frametime);
+ }
+ }
+ }
if (self.health > limith)
self.health = limith;
if (self.armorvalue > limita)
self.armorvalue = limita;
+ if (self.ammo_fuel > limitf)
+ self.ammo_fuel = limitf;
// if player rotted to death... die!
if(self.health < 1)
@@ -1848,6 +1873,7 @@
self.ammo_shells = spectatee.ammo_shells;
self.ammo_nails = spectatee.ammo_nails;
self.ammo_rockets = spectatee.ammo_rockets;
+ self.ammo_fuel = spectatee.ammo_fuel;
self.effects = spectatee.effects & EFMASK_CHEAP; // eat performance
self.health = spectatee.health;
self.impulse = 0;
@@ -2337,7 +2363,11 @@
GrapplingHookFrame();
if(frametime)
+ {
W_WeaponFrame();
+ if(self.items & IT_JETPACK)
+ self.items |= IT_FUEL;
+ }
player_regen();
if(frametime)
Modified: trunk/data/qcsrc/server/cl_physics.qc
===================================================================
--- trunk/data/qcsrc/server/cl_physics.qc 2009-03-30 07:41:39 UTC (rev 6358)
+++ trunk/data/qcsrc/server/cl_physics.qc 2009-03-30 08:39:32 UTC (rev 6359)
@@ -638,7 +638,7 @@
self.velocity = self.velocity + wishdir * min(f, sv_accelerate*maxspd_mod * frametime * wishspeed);
}
}
- else if (g_jetpack && self.BUTTON_HOOK && (!cvar("g_jetpack_ammo") || self.ammo_cells >= 0.01 || self.items & IT_UNLIMITED_WEAPON_AMMO))
+ else if ((self.items & IT_JETPACK) && self.BUTTON_HOOK && (!cvar("g_jetpack_fuel") || self.ammo_fuel >= 0.01 || self.items & IT_UNLIMITED_WEAPON_AMMO))
{
//makevectors(self.v_angle_y * '0 1 0');
makevectors(self.v_angle);
@@ -670,13 +670,8 @@
wishvel_z = (wishvel_z - sv_gravity) * fz + sv_gravity;
fvel = min(1, vlen(wishvel) / fvel);
- if(cvar("g_jetpack_ammo") && !(self.items & IT_UNLIMITED_WEAPON_AMMO))
- {
- if(self.ammo_cells < 0.01)
- f = 0;
- else
- f = min(1, self.ammo_cells / (cvar("g_jetpack_ammo") * frametime * fvel));
- }
+ if(cvar("g_jetpack_fuel") && !(self.items & IT_UNLIMITED_WEAPON_AMMO))
+ f = min(1, self.ammo_fuel / (cvar("g_jetpack_fuel") * frametime * fvel));
else
f = 1;
@@ -684,15 +679,18 @@
{
self.velocity = self.velocity + wishvel * f * frametime;
if not(self.items & IT_UNLIMITED_WEAPON_AMMO)
- self.ammo_cells -= cvar("g_jetpack_ammo") * frametime * fvel * f;
+ self.ammo_fuel -= cvar("g_jetpack_fuel") * frametime * fvel * f;
self.flags &~= FL_ONGROUND;
self.items |= IT_USING_JETPACK;
+
+ // jetpack also inhibits health regeneration!
+ self.pauseregen_finished = max(self.pauseregen_finished, time + cvar("g_balance_pause_health_regen"));
}
}
else if (self.flags & FL_ONGROUND)
{
// we get here if we ran out of ammo
- if(g_jetpack && self.BUTTON_HOOK && !(buttons_prev & 32))
+ if((self.items & IT_JETPACK) && self.BUTTON_HOOK && !(buttons_prev & 32))
sprint(self, "You don't have any fuel for the ^2Jetpack\n");
// walking
@@ -742,7 +740,7 @@
else
{
// we get here if we ran out of ammo
- if(g_jetpack && self.BUTTON_HOOK && !(buttons_prev & 32))
+ if((self.items & IT_JETPACK) && self.BUTTON_HOOK && !(buttons_prev & 32))
sprint(self, "You don't have any fuel for the ^2Jetpack\n");
if(maxspd_mod < 1)
Modified: trunk/data/qcsrc/server/defs.qh
===================================================================
--- trunk/data/qcsrc/server/defs.qh 2009-03-30 07:41:39 UTC (rev 6358)
+++ trunk/data/qcsrc/server/defs.qh 2009-03-30 08:39:32 UTC (rev 6359)
@@ -190,6 +190,7 @@
.float pauseregen_finished;
.float pauserothealth_finished;
.float pauserotarmor_finished;
+.float pauserotfuel_finished;
.string item_pickupsound;
// definitions for weaponsystem
@@ -557,3 +558,5 @@
void Drag_MoveDrag(entity from, entity to);
.entity soundentity;
+
+.float ammo_fuel;
Modified: trunk/data/qcsrc/server/g_hook.qc
===================================================================
--- trunk/data/qcsrc/server/g_hook.qc 2009-03-30 07:41:39 UTC (rev 6358)
+++ trunk/data/qcsrc/server/g_hook.qc 2009-03-30 08:39:32 UTC (rev 6359)
@@ -408,7 +408,7 @@
//self.hook_state &~= HOOK_RELEASING;
}
}
- else if(!g_jetpack && !g_grappling_hook && self.switchweapon != WEP_HOOK)
+ else if(!(self.items & IT_JETPACK) && !g_grappling_hook && self.switchweapon != WEP_HOOK)
{
if(self.BUTTON_HOOK && !self.hook_switchweapon)
W_SwitchWeapon(WEP_HOOK);
Modified: trunk/data/qcsrc/server/miscfunctions.qc
===================================================================
--- trunk/data/qcsrc/server/miscfunctions.qc 2009-03-30 07:41:39 UTC (rev 6358)
+++ trunk/data/qcsrc/server/miscfunctions.qc 2009-03-30 08:39:32 UTC (rev 6359)
@@ -949,12 +949,9 @@
if(g_jetpack)
{
- if(!start_ammo_cells)
- start_ammo_cells = g_pickup_cells;
- if(!warmup_start_ammo_cells)
- warmup_start_ammo_cells = g_pickup_cells;
-
g_grappling_hook = 0; // these two can't coexist, as they use the same button
+ start_items |= IT_JETPACK;
+ start_items |= IT_FUEL_REGEN;
}
if(g_weapon_stay == 2)
Modified: trunk/data/qcsrc/server/w_hook.qc
===================================================================
--- trunk/data/qcsrc/server/w_hook.qc 2009-03-30 07:41:39 UTC (rev 6358)
+++ trunk/data/qcsrc/server/w_hook.qc 2009-03-30 08:39:32 UTC (rev 6359)
@@ -111,7 +111,7 @@
}
else if (req == WR_THINK)
{
- if (self.BUTTON_ATCK || (!g_jetpack && self.BUTTON_HOOK))
+ if (self.BUTTON_ATCK || (!(self.items & IT_JETPACK) && self.BUTTON_HOOK))
{
if(!self.hook)
if not(self.hook_state & HOOK_WAITING_FOR_RELEASE)
@@ -179,7 +179,7 @@
if (self.BUTTON_CROUCH)
{
self.hook_state &~= HOOK_PULLING;
- if (self.BUTTON_ATCK || (!g_jetpack && self.BUTTON_HOOK))
+ if (self.BUTTON_ATCK || (!(self.items & IT_JETPACK) && self.BUTTON_HOOK))
self.hook_state &~= HOOK_RELEASING;
else
self.hook_state |= HOOK_RELEASING;
@@ -189,7 +189,7 @@
self.hook_state |= HOOK_PULLING;
self.hook_state &~= HOOK_RELEASING;
- if (self.BUTTON_ATCK || (!g_jetpack && self.BUTTON_HOOK))
+ if (self.BUTTON_ATCK || (!(self.items & IT_JETPACK) && self.BUTTON_HOOK))
{
// already fired
if(self.hook)
More information about the nexuiz-commits
mailing list