r89 - trunk/basezym/progsqc
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Mon Dec 10 13:22:40 EST 2007
Author: vermeulen
Date: 2007-12-10 13:22:40 -0500 (Mon, 10 Dec 2007)
New Revision: 89
Modified:
trunk/basezym/progsqc/actor.qc
trunk/basezym/progsqc/damage.qc
trunk/basezym/progsqc/gamedefs.qc
trunk/basezym/progsqc/inventory.qc
trunk/basezym/progsqc/player.qc
trunk/basezym/progsqc/server.qc
Log:
Class selection
Made the Jetpack an item
Modified: trunk/basezym/progsqc/actor.qc
===================================================================
--- trunk/basezym/progsqc/actor.qc 2007-12-09 00:00:09 UTC (rev 88)
+++ trunk/basezym/progsqc/actor.qc 2007-12-10 18:22:40 UTC (rev 89)
@@ -311,8 +311,20 @@
else if (self.button7)
{
Inventory_GetItemInfo(self, self.itemselected);
- if (iteminfo_weapon_canfire1 && iteminfo_weapon_canfire2 && (!self.weapon_oldbutton7 || !(iteminfo_ammo1fireflags & FIREFLAG_SEMIAUTOMATIC)))
- weapon_state(WS_FIRE3);
+ if ((!iteminfo_ammo1noprojectile) && iteminfo_weapon_canfire1 && iteminfo_weapon_canfire2 && (!self.weapon_oldbutton7 || !(iteminfo_ammo1fireflags & FIREFLAG_SEMIAUTOMATIC)))
+ {
+ weapon_state(WS_FIRE3);
+ }
+ else if (iteminfo_ammo1fireflags & FIREFLAG_JETPACK)
+ {
+ Inventory_ModifyItem(self, self.itemselected, 0 - iteminfo_ammo1minimumtofire, 0);
+ self.jetpack_fuel = iteminfo_quantity;
+ if (!self.jetpackactive)
+ {
+ sound(self, CHAN_BODY, strcat(self.playerclass.sounddir, "/jetpack.wav"), 1, ATTN_NORM);
+ self.jetpackactive = TRUE;
+ }
+ }
}
}
self.weapon_oldbutton0 = self.button0;
Modified: trunk/basezym/progsqc/damage.qc
===================================================================
--- trunk/basezym/progsqc/damage.qc 2007-12-09 00:00:09 UTC (rev 88)
+++ trunk/basezym/progsqc/damage.qc 2007-12-10 18:22:40 UTC (rev 89)
@@ -551,27 +551,36 @@
if(self.state == 1)
{
- pullspeed = 2000;
- rubberforce = 2000;
- rubberforce_overstretch = 1000;
- minlength = 100;
- ropestretch = 400;
- ropeairfriction = 0.2;
+ pullspeed = cvar("g_grapplehook_speed_pull");
+ rubberforce = cvar("g_grapplehook_force_rubber");
+ rubberforce_overstretch = cvar("g_grapplehook_force_rubber_overstretch");
+ minlength = cvar("g_grapplehook_length_min");
+ ropestretch = cvar("g_grapplehook_stretch");
+ ropeairfriction = cvar("g_grapplehook_airfriction");
dir = self.origin - org;
dist = vlen(dir);
dir = normalize(dir);
- end = self.origin - dir*50;
- dist = vlen(end - org);
- if(dist < 200)
- spd = dist * (pullspeed / 200);
- else
- spd = pullspeed;
- if(spd < 50)
- spd = 0;
- self.owner.velocity = dir*spd;
- self.owner.movetype = MOVETYPE_FLY;
+ newlength = self.rope_length;
+
+ // first pull the rope...
+ newlength = max(newlength - pullspeed * frametime, minlength);
+
+ if(newlength < dist - ropestretch) // overstretched?
+ {
+ newlength = dist - ropestretch;
+ if(self.owner.velocity * dir < 0) // only if not already moving in hook direction
+ self.owner.velocity = self.owner.velocity + frametime * dir * rubberforce_overstretch;
+ }
+
+ if(!self.owner.button5) // crouch key = don't pull
+ self.rope_length = newlength;
+
+ // then pull the player
+ spd = bound(0, (dist - self.rope_length) / ropestretch, 1);
+ self.owner.velocity = self.owner.velocity * (1 - frametime * ropeairfriction);
+ self.owner.velocity = self.owner.velocity + frametime * dir * spd * rubberforce;
}
makevectors(self.angles_x * '-1 0 0' + self.angles_y * '0 1 0');
Modified: trunk/basezym/progsqc/gamedefs.qc
===================================================================
--- trunk/basezym/progsqc/gamedefs.qc 2007-12-09 00:00:09 UTC (rev 88)
+++ trunk/basezym/progsqc/gamedefs.qc 2007-12-10 18:22:40 UTC (rev 89)
@@ -13,6 +13,8 @@
.float itemselected;
+.float spawned;
+
.vector viewmodelchange;
.vector viewmodeldiff;
@@ -57,6 +59,7 @@
.float aitype;
.float animationtype;
.float team;
+.float classnum;
float AITYPE_NONE = 0;
float AITYPE_1 = 1;
Modified: trunk/basezym/progsqc/inventory.qc
===================================================================
--- trunk/basezym/progsqc/inventory.qc 2007-12-09 00:00:09 UTC (rev 88)
+++ trunk/basezym/progsqc/inventory.qc 2007-12-10 18:22:40 UTC (rev 89)
@@ -11,23 +11,33 @@
float ITEMTYPE_WEAP5 = 4;
float ITEMTYPE_WEAP6 = 5;
float ITEMTYPE_WEAP7 = 6;
+float ITEMTYPE_WEAP8 = 7;
+float ITEMTYPE_WEAP9 = 8;
+float ITEMTYPE_WEAP10 = 9;
+float ITEMTYPE_WEAP11 = 10;
+float ITEMTYPE_WEAP12 = 11;
+float ITEMTYPE_WEAP13 = 12;
+float ITEMTYPE_WEAP14 = 13;
+float ITEMTYPE_WEAP15 = 14;
+float ITEMTYPE_WEAP16 = 15;
-float ITEMTYPE_AI_WEAP1 = 7;
-float ITEMTYPE_AI_WEAP2 = 8;
-float ITEMTYPE_AI_WEAP3 = 9;
-float ITEMTYPE_AI_WEAP4 = 10;
-float ITEMTYPE_AI_WEAP5 = 11;
-float ITEMTYPE_AI_WEAP6 = 12;
+float ITEMTYPE_AI_WEAP1 = 16;
+float ITEMTYPE_AI_WEAP2 = 17;
+float ITEMTYPE_AI_WEAP3 = 18;
+float ITEMTYPE_AI_WEAP4 = 19;
+float ITEMTYPE_AI_WEAP5 = 20;
+float ITEMTYPE_AI_WEAP6 = 21;
-float ITEMTYPE_ITEM1 = 13;
-float ITEMTYPE_ITEM2 = 14;
+float ITEMTYPE_ITEM1 = 22;
+float ITEMTYPE_ITEM2 = 23;
+float ITEMTYPE_ITEM3 = 24;
-float ITEMTYPE_AMMO1 = 15;
-float ITEMTYPE_AMMO2 = 16;
-float ITEMTYPE_AMMO3 = 17;
-float ITEMTYPE_AMMO4 = 18;
+float ITEMTYPE_AMMO1 = 25;
+float ITEMTYPE_AMMO2 = 26;
+float ITEMTYPE_AMMO3 = 27;
+float ITEMTYPE_AMMO4 = 28;
-float ITEMTYPE_TOTAL = 19;
+float ITEMTYPE_TOTAL = 29;
float WS_IDLE = 0;
float WS_FIRE1 = 1;
@@ -56,6 +66,7 @@
string iteminfo_name;
float iteminfo_itemtype;
float iteminfo_quantitymax;
+float iteminfo_rechargerate;
float iteminfo_ammomax;
float iteminfo_ammoinventorymax;
float iteminfo_ammotype;
@@ -102,6 +113,8 @@
vector iteminfo_ammo2colormod;
vector iteminfo_ammo1viewmodelpush;
vector iteminfo_ammo2viewmodelpush;
+float iteminfo_ammo1noprojectile;
+float iteminfo_ammo2noprojectile;
// special information specific to weapon items
string iteminfo_weapon_viewmodel;
@@ -144,7 +157,7 @@
//error("itemtype = ",ftos(itemtype),"\n");
}
if (itemtype >= ITEMTYPE_TOTAL)
- error("itemtype >= ITEMTYPE_TOTAL\n");
+ bprint(ftos(itemtype)," ", ftos(ITEMTYPE_TOTAL), " : itemtype >= ITEMTYPE_TOTAL\n");
iteminfo_itemtype = itemtype;
item = Inventory_GetItem(character, itemtype);
iteminfo_quantity = item_x;
@@ -157,6 +170,7 @@
iteminfo_name = "unknown";
iteminfo_pickupsound = "";
iteminfo_quantitymax = 0;
+ iteminfo_rechargerate = 0;
iteminfo_ammomax = 0;
iteminfo_ammoinventorymax = 0;
iteminfo_ammotype = ITEMTYPE_NONE;
@@ -182,6 +196,7 @@
iteminfo_ammo1mass = 0;
iteminfo_ammo1colormod = '0 0 0';
iteminfo_ammo1viewmodelpush = '0 0 0';
+ iteminfo_ammo1noprojectile = 0;
iteminfo_ammo2minimumtofire = 0;
iteminfo_ammo2damagetype = DAMAGETYPE_UNKNOWN;
iteminfo_ammo2damage = '0 0 0';
@@ -203,6 +218,7 @@
iteminfo_ammo2mass = 0;
iteminfo_ammo2colormod = '0 0 0';
iteminfo_ammo2viewmodelpush = '0 0 0';
+ iteminfo_ammo2noprojectile = 0;
iteminfo_weapon_viewmodel = "";
iteminfo_weapon_viewmodelanim_idle = '0 0 1';
iteminfo_weapon_viewmodelanim_fire1 = '0 0 2';
@@ -255,6 +271,8 @@
iteminfo_pickupmodel = cvar_string(wname,"_pickupmodel");
iteminfo_viewmodeloffset = stov(cvar_string(wname,"_viewmodeloffset"));
+ iteminfo_rechargerate = cvar(wname,"_rechargerate");
+
iteminfo_ammomax = cvar(wname,"_ammomax");
iteminfo_ammoinventorymax = cvar(wname,"_ammoinventorymax");
@@ -268,6 +286,8 @@
iteminfo_ammo1explflags = cvar(wname,"_ammo1explflags");
iteminfo_ammo1fireflags = cvar(wname,"_ammo1fireflags");
+ iteminfo_ammo1noprojectile = cvar(wname,"_ammo1noprojectile");
+
iteminfo_ammo1numberof = cvar(wname,"_ammo1numberof");
iteminfo_ammo1recoil = cvar(wname,"_ammo1recoil");
iteminfo_ammo1minimumtofire = cvar(wname,"_ammo1mintofire");
@@ -291,6 +311,8 @@
iteminfo_ammo2explflags = cvar(wname,"_ammo2explflags");
iteminfo_ammo2fireflags = cvar(wname,"_ammo2fireflags");
+ iteminfo_ammo2noprojectile = cvar(wname,"_ammo2noprojectile");
+
iteminfo_ammo2numberof = cvar(wname,"_ammo2numberof");
iteminfo_ammo2recoil = cvar(wname,"_ammo2recoil");
iteminfo_ammo2minimumtofire = cvar(wname,"_ammo2mintofire");
@@ -313,7 +335,7 @@
iteminfo_quantitymax = cvar(wname,"_quantitymax");
}
else
- error(ftos(itemtype)," Inventory_GetItemInfo: unknown itemtype\n");
+ bprint(ftos(itemtype)," Inventory_GetItemInfo: unknown itemtype\n");
if (iteminfo_quantity >= 1)
{
@@ -445,6 +467,24 @@
return best;
};
+float(entity character) Inventory_GetBestItem =
+{
+ local float best;
+ local float rank;
+ local float c;
+ best = -1;
+ rank = 0;
+ c = ITEMTYPE_ITEM1;
+ while (c < ITEMTYPE_AMMO1)
+ {
+ Inventory_GetItemInfo(character, c);
+ if (iteminfo_weapon_canraise)
+ best = c;
+ c = c + 1;
+ }
+ return best;
+};
+
vector(entity character, float itemtype, float adjustquantity, float adjustammo) Inventory_ModifyItem =
{
local float olditemtype;
Modified: trunk/basezym/progsqc/player.qc
===================================================================
--- trunk/basezym/progsqc/player.qc 2007-12-09 00:00:09 UTC (rev 88)
+++ trunk/basezym/progsqc/player.qc 2007-12-10 18:22:40 UTC (rev 89)
@@ -34,13 +34,14 @@
string cname;
- local float startingweapon;
- local float classnum;
- for (classnum = 1;classnum < ACTORTYPE_TOTAL;classnum++)
+ local float newweapon;
+ local float classnumber;
+ local float i;
+ for (classnumber = 1;classnumber < ACTORTYPE_TOTAL;classnumber++)
{
- cname = strcat("g_class",ftos(classnum));
+ cname = strcat("g_class",ftos(classnumber));
- pc = playerclass_spawn(classnum, cvar(cname,"_aitype"), strzone(cvar_string(cname,"_model")), ".md3", strzone(cvar_string(cname,"_name")));
+ pc = playerclass_spawn(classnumber, cvar(cname,"_aitype"), strzone(cvar_string(cname,"_model")), ".md3", strzone(cvar_string(cname,"_name")));
pc.health = cvar(cname,"_healthstart");
pc.max_health = cvar(cname,"_healthmax");
@@ -175,21 +176,26 @@
Inventory_Clear(pc);
- if (cvar(cname,"_startinguserweapon") != 0) // User weapons
+ for (i=1; i < ITEMTYPE_AI_WEAP1; i++)
{
- startingweapon = cvar(cname,"_startinguserweapon") - 1;
- Inventory_GetItemInfo(pc, startingweapon);
- Inventory_ModifyItem(pc, startingweapon, 1, iteminfo_ammomax);
- Inventory_ModifyItem(pc, ITEMTYPE_AMMO1 + startingweapon, iteminfo_ammoinventorymax * 2, 0);
+ if (cvar(cname,"_weapon",ftos(i)) != 0)
+ {
+ newweapon = cvar(cname,"_weapon",ftos(i)) - 1;
+ Inventory_GetItemInfo(pc, newweapon);
+ Inventory_ModifyItem(pc, newweapon, 1, iteminfo_ammomax);
+ Inventory_ModifyItem(pc, ITEMTYPE_AMMO1 + newweapon, iteminfo_ammoinventorymax * 2, 0);
+ }
}
- else if (cvar(cname,"_startingaiweapon") != 0) // AI weapons
+
+ for (i=1; i <= (ITEMTYPE_AMMO1 - ITEMTYPE_ITEM1); i++)
{
- startingweapon = cvar(cname,"_startingaiweapon") + ITEMTYPE_AI_WEAP1 - 1;
- Inventory_GetItemInfo(pc, startingweapon);
- Inventory_ModifyItem(pc, startingweapon, 1, iteminfo_ammomax);
+ if (cvar(cname,"_item",ftos(i)) != 0)
+ {
+ newweapon = cvar(cname,"_item",ftos(i)) - 1;
+ Inventory_GetItemInfo(pc, newweapon + ITEMTYPE_ITEM1);
+ Inventory_ModifyItem(pc, newweapon + ITEMTYPE_ITEM1, iteminfo_quantitymax, 0);
+ }
}
- Inventory_GetItemInfo(pc, ITEMTYPE_ITEM1);
- Inventory_ModifyItem(pc, ITEMTYPE_ITEM1, 10, 0);
}
};
@@ -268,8 +274,6 @@
self.jumpspeed = pc.jumpspeed;
self.speedratio = pc.speedratio;
- self.itemselected = ITEMTYPE_ITEM1;
-
setsize (self, pc.mins, pc.maxs);
Inventory_CloneFromInventory(self, pc);
@@ -277,6 +281,7 @@
player_selectlegsanim(TRUE);
anim_start(self.actorpart_torso, self.playerclass.actoranim_TORSO_STAND, ANIMTYPE_IDLE, torso_animframefunc);
+ self.itemselected = Inventory_GetBestItem(self);
weapon_setup(self, Inventory_GetBestWeapon(self));
};
@@ -350,6 +355,7 @@
return spot;
};
+
/*
=============
PutClientInServer
@@ -360,7 +366,6 @@
void() PutClientInServer =
{
local entity spot;
- local float classnum;
self.flags = FL_CLIENT;
@@ -371,9 +376,19 @@
self.fixangle = TRUE;
self.v_angle = self.angles_x * '-1 0 0' + self.angles_y * '0 1 0';
self.nextthink = 0;
+
self.team = cvar("g_playerteam");
- classnum = cvar("g_startclass");
- player_spawn(classnum);
+ //self.classnum = cvar("g_startclass");
+
+ if (!self.spawned)
+ {
+ self.health = 1;
+ stuffcmd(self,"menu_showteamselect\n");
+ }
+ else
+ {
+ player_spawn(self.classnum);
+ }
};
/*
@@ -466,11 +481,10 @@
.float deadtime;
void() PlayerPreThink =
{
- if ((self.jetpack_fuel < self.jetpack_fuelmax) && (!(self.jetpackactive)))
+ if (!self.spawned)
{
- self.jetpack_fuel = self.jetpack_fuel + self.jetpack_fuelregenair;
+ return;
}
-
if (self.flags & FL_CLIENT) // should really be client side
{
self.viewmodelchange_x = self.viewmodelchange_x - (self.movement_x / 1000);
@@ -489,6 +503,11 @@
remove(self.hook);
}
+ Inventory_GetItemInfo(self, self.itemselected);
+ Inventory_ModifyItem(self, self.itemselected, 0 + iteminfo_rechargerate, 0);
+ Inventory_GetItemInfo(self, self.weaponitem);
+ Inventory_ModifyItem(self, self.weaponitem, 0, 0 + iteminfo_rechargerate);
+
local float im;
if (self.flags & FL_CLIENT) // only real players can respawn, not NPCs
if (self.deadflag)
@@ -507,12 +526,7 @@
}
if (!self.deadflag)
if (self.flags & FL_ONGROUND)
- {
- if ((self.jetpack_fuel < self.jetpack_fuelmax) && (!(self.jetpackactive)))
- {
- self.jetpack_fuel = self.jetpack_fuel + self.jetpack_fuelregenground;
- }
-
+ {
if (self.jumpflag || self.oldvelocity_z < -200)
{
if (self.oldvelocity_z < -500)
@@ -546,19 +560,12 @@
}
else
self.viewzoom = 1;
- if (self.button5)
+ if (self.button7 & self.jetpackactive)
{
if ((self.jetpack_fuel > 10) && (self.actorpart_jetpacktrail.effects & EF_NODRAW))
- self.actorpart_jetpacktrail.effects = self.actorpart_jetpacktrail.effects - EF_NODRAW;
+ self.actorpart_jetpacktrail.effects = self.actorpart_jetpacktrail.effects - EF_NODRAW;
else if (self.jetpack_fuel < 10)
- self.actorpart_jetpacktrail.effects = self.actorpart_jetpacktrail.effects | EF_NODRAW;
-
- self.jetpack_fuel = max(0, self.jetpack_fuel - self.jetpack_use * frametime);
- if (!self.jetpackactive)
- {
- sound(self, CHAN_BODY, strcat(self.playerclass.sounddir, "/jetpack.wav"), 1, ATTN_NORM);
- self.jetpackactive = TRUE;
- }
+ self.actorpart_jetpacktrail.effects = self.actorpart_jetpacktrail.effects | EF_NODRAW;
}
else
{
@@ -595,7 +602,11 @@
.float oldbutton3;
.float pointitemannouncetime;
void() PlayerPostThink =
-{
+{
+ if (!self.spawned)
+ {
+ return;
+ }
local entity oldself;
player_regen();
@@ -853,20 +864,21 @@
wishdir = normalize(wishvel);
wishspeed = wishspeed + vlen(wishvel);
- if (self.button5 && self.jetpack_fuel > 5)
+ if (self.jetpackactive && self.jetpack_fuel > 5)
{
- self.movetype = MOVETYPE_FLY;
+ self.movetype = MOVETYPE_FLY;
if (self.velocity_z < self.jetpack_maxupspeed)
{
- self.jetpack_acc = self.jetpack_acc + self.jetpack_acc;
- self.velocity_z = self.velocity_z + self.jetpackacc;
+ self.jetpack_acc = self.jetpack_acc + self.jetpack_acc;
+ self.velocity_z = self.velocity_z + self.jetpackacc;
}
if (wishspeed > self.jetpack_maxmovespeed)
wishspeed = self.jetpack_maxmovespeed;
}
else
{
+ self.jetpackactive = FALSE;
self.movetype = MOVETYPE_WALK;
if (wishspeed > sv_maxairspeed)
wishspeed = sv_maxairspeed;
@@ -1183,6 +1195,7 @@
if (select == 0)
{
self.switchweaponitem = w;
+ bprint(iteminfo_name,"\n");
break;
}
}
@@ -1203,6 +1216,7 @@
if (iteminfo_weapon_canraise)
{
self.switchweaponitem = w;
+ bprint(iteminfo_name,"\n");
break;
}
}
@@ -1221,6 +1235,7 @@
if (iteminfo_weapon_canraise)
{
self.switchweaponitem = w;
+ bprint(iteminfo_name,"\n");
break;
}
}
@@ -1238,8 +1253,8 @@
Inventory_GetItemInfo(self, w);
if (iteminfo_weapon_canraise)
{
+ bprint(iteminfo_name,"\n");
self.itemselected = w;
- Inventory_GetItemInfo(self, w);
break;
}
}
Modified: trunk/basezym/progsqc/server.qc
===================================================================
--- trunk/basezym/progsqc/server.qc 2007-12-09 00:00:09 UTC (rev 88)
+++ trunk/basezym/progsqc/server.qc 2007-12-10 18:22:40 UTC (rev 89)
@@ -100,3 +100,24 @@
bot_serverframe();
};
+
+void SV_ParseClientCommand(string s)
+{
+ tokenize(s);
+ if(argv(0) == "join")
+ {
+ bprint ("^4", self.netname, "^4 is playing now\n");
+ if (!self.spawned)
+ {
+ self.spawned = TRUE;
+ self.frags = 0;
+ PutClientInServer();
+ }
+ }
+ else if( argv(0) == "selectclass" )
+ {
+ self.classnum = stof(argv(1));
+ if ((self.classnum > ACTORTYPE_TOTAL) || (self.classnum <= ACTORTYPE_INVALID))
+ self.classnum = 1;
+ }
+}
\ No newline at end of file
More information about the zymotic-commits
mailing list