r80 - trunk/basezym/progsqc

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Mon Nov 12 21:50:25 EST 2007


Author: vermeulen
Date: 2007-11-12 21:50:25 -0500 (Mon, 12 Nov 2007)
New Revision: 80

Added:
   trunk/basezym/progsqc/structures.qc
Modified:
   trunk/basezym/progsqc/actor.qc
   trunk/basezym/progsqc/bots.qc
   trunk/basezym/progsqc/damage.qc
   trunk/basezym/progsqc/inventory.qc
   trunk/basezym/progsqc/jumppads.qc
   trunk/basezym/progsqc/player.qc
   trunk/basezym/progsqc/progs.src
   trunk/basezym/progsqc/server.qc
Log:
Added 'structures.qc' for the barrels and spawner
Changed weapons/classes/items around while updating the first mission

Modified: trunk/basezym/progsqc/actor.qc
===================================================================
--- trunk/basezym/progsqc/actor.qc	2007-11-09 18:53:21 UTC (rev 79)
+++ trunk/basezym/progsqc/actor.qc	2007-11-13 02:50:25 UTC (rev 80)
@@ -32,6 +32,7 @@
 .vector actoranim_TORSO_ATTACK2;
 .vector actoranim_TORSO_DROP;
 .vector actoranim_TORSO_RAISE;
+.vector actoranim_TORSO_RELOAD;
 .vector actoranim_TORSO_STAND;
 .vector actoranim_TORSO_STAND2;
 .vector actoranim_LEGS_WALKCR;
@@ -131,12 +132,6 @@
 	self.scale = self.scaleratio;
 	setsize(self, self.boxmin, self.boxmax);
 	
-	// FIXME: add a hands viewmodel for each player model (animated to match the torso) and attach the weapon to it, until this is done this setorigin is necessary to put it in roughly the right place on the screen
-	v = self.weapon_ofs - self.view_ofs + '10 4 -10'; // front side up
-	v_y = v_y * -1;
-	//setorigin(self.actorpart_hand, v);
-	//setattachment(self.actorpart_hand, self.actorpart_viewweapon, "tag_weapon");
-	setorigin(self.actorpart_viewweapon, v);
 
 	// it's ok if this bone is missing as long as the torso model is made
 	// relative to the legs origin, but that prevents any chance of leaning
@@ -175,10 +170,14 @@
 	// FIXME: turn self into a gib using decor_spawn
 };
 
-void(string weapmodel, string viewweapmodel) actor_setweaponmodel =
+void(string weapmodel, string viewweapmodel, vector offset) actor_setweaponmodel =
 {
 	setmodel(self.actorpart_weapon, weapmodel);
 	setmodel(self.actorpart_viewweapon, viewweapmodel);
+	
+	offset = self.weapon_ofs - self.view_ofs + offset; // default '10 4 -10'
+	offset_y = offset_y * -1;
+	setorigin(self.actorpart_viewweapon, offset);
 };
 
 void(float force) player_selectlegsanim;
@@ -243,7 +242,7 @@
 				//bprint("raising\n");
 				self.weaponitem = self.switchweaponitem;
 				Inventory_GetItemInfo(self, self.weaponitem);
-				actor_setweaponmodel(iteminfo_model, iteminfo_weapon_viewmodel);
+				actor_setweaponmodel(iteminfo_model, iteminfo_weapon_viewmodel, iteminfo_viewmodeloffset);
 				weapon_state(WS_RAISE);
 			}
 		}
@@ -287,6 +286,8 @@
 			//bprint("lowering\n");
 			weapon_state(WS_LOWER);
 		}
+		else if ((iteminfo_ammo <= iteminfo_ammo1minimumtofire) && (cvar("g_autoreload")) && (iteminfo_ammoinventory >= 1))
+			weapon_state(WS_RELOAD);
 		else if (self.button4 && ((iteminfo_ammo < iteminfo_ammomax && iteminfo_ammoinventory >= 1)))
 			weapon_state(WS_RELOAD);
 		else if (self.button0 && iteminfo_weapon_canfire1 && (!self.weapon_oldbutton0 || !(iteminfo_ammo1flags & PROJECTILEFLAG_SEMIAUTOMATIC)))
@@ -345,7 +346,7 @@
 	else if (newstate == WS_RELOAD)
 	{
 		anim_start(self.actorpart_viewweapon, iteminfo_weapon_viewmodelanim_reload, ANIMTYPE_IDLE, viewweapon_animframefunc);
-		//anim_start(self.actorpart_torso, self.playerclass.actoranim_TORSO_RELOAD, ANIMTYPE_IDLE, torso_animframefunc);
+		anim_start(self.actorpart_torso, self.playerclass.actoranim_TORSO_RELOAD, ANIMTYPE_IDLE, torso_animframefunc);
 	}
 	else if (newstate == WS_LOWER)
 	{
@@ -470,7 +471,7 @@
 	Inventory_GetItemInfo(character, weaponitemtype);
 	self.weaponitem = weaponitemtype;
 	self.switchweaponitem = self.weaponitem;
-	actor_setweaponmodel(iteminfo_model, iteminfo_weapon_viewmodel);
+	actor_setweaponmodel(iteminfo_model, iteminfo_weapon_viewmodel, iteminfo_viewmodeloffset);
 	weapon_state(WS_IDLE);
 };
 

Modified: trunk/basezym/progsqc/bots.qc
===================================================================
--- trunk/basezym/progsqc/bots.qc	2007-11-09 18:53:21 UTC (rev 79)
+++ trunk/basezym/progsqc/bots.qc	2007-11-13 02:50:25 UTC (rev 80)
@@ -80,14 +80,32 @@
 {
 	if (time >= self.ai_strafetime)
 	{
-		self.ai_strafetime = time + 0.4 + random() * 0.6;
-		self.ai_strafemove_x = (random() - 0.5) * cvar("sv_maxspeed");
-		self.ai_strafemove_y = (random() - 0.5) * cvar("sv_maxspeed");
+		self.ai_strafetime = time + 2 + random() * 0.6;
+		self.ai_strafemove_x = (random() - 0.5) * (cvar("sv_maxspeed") * self.speedratio);
+		self.ai_strafemove_y = (random() - 0.5) * (cvar("sv_maxspeed") * self.speedratio);
 		self.ai_strafemove_z = 0;
 	}
 	self.movement = self.ai_strafemove;
 };
 
+.float ai_walktime;
+.vector ai_walkmove;
+void() ai_walk =
+{
+ 	if (self.ai_walkmove_x > 0)
+	    self.ai_walkmove_x = self.ai_walkmove_x - 0.2;
+	makevectors(self.v_angle);
+	if (time >= self.ai_walktime)
+	{
+	    self.v_angle_y = self.v_angle_y + (100 * random());
+		self.ai_walktime = time + 15 + random() * 0.6;
+		self.ai_walkmove_x = 100; // random() * (cvar("sv_maxspeed") * self.speedratio);
+		self.ai_walkmove_y = 0;
+		self.ai_walkmove_z = 0;
+	}
+	self.movement = self.ai_walkmove;
+};
+
 void() ai_findenemy =
 {
 	local vector v1, v2;
@@ -121,15 +139,18 @@
 		self.movement = '0 0 0';
 		self.button0 = self.button2 = self.button3 = self.button4 = 0;
 		if (!self.enemy)
+		{
+			ai_walk();
 			ai_findenemy();
+		}
 		else
 		{
+		 	//ai_strafe();
 			if (self.enemy.deadflag || !self.enemy.takedamage)
 			{
 				self.enemy = world;
 				return;
 			}
-			//ai_strafe();
 			Inventory_GetItemInfo(self, self.weaponitem);
 			if (!iteminfo_weapon_canfire1)
 			if (!iteminfo_weapon_canfire2)
@@ -160,10 +181,7 @@
 				else if (iteminfo_weapon_canfire2)
 					self.button3 = 1;
 			}
-			else
-			{
-				   MoveToGoal(); // a tad different
-			}
+			MoveToGoal();
 		}
 	}
 };
@@ -177,6 +195,7 @@
 	PlayerPostThink();
 };
 
+
 void() bot_serverframe =
 {
  	   // keep spawning new bots
@@ -192,6 +211,7 @@
 		self.team = cvar("g_defaultenemyteam");
 		self.unlimitedinventory = 1;
 		player_spawn(ACTORTYPE_CLASS2);
+		total_monsters = total_monsters + 1;
 	}
 };
 
@@ -205,6 +225,7 @@
 		self.team = cvar("g_defaultenemyteam");
 		self.unlimitedinventory = 1;
 		player_spawn(ACTORTYPE_CLASS3);
+		total_monsters = total_monsters + 1;
 	}
 };
 
@@ -218,6 +239,7 @@
 		self.team = cvar("g_defaultenemyteam");
 		self.unlimitedinventory = 1;
 		player_spawn(ACTORTYPE_CLASS4);
+		total_monsters = total_monsters + 1;
 	}
 };
 
@@ -259,4 +281,4 @@
 		self.unlimitedinventory = 1;
 		player_spawn(ACTORTYPE_CLASS7);
 	}
-};
+};
\ No newline at end of file

Modified: trunk/basezym/progsqc/damage.qc
===================================================================
--- trunk/basezym/progsqc/damage.qc	2007-11-09 18:53:21 UTC (rev 79)
+++ trunk/basezym/progsqc/damage.qc	2007-11-13 02:50:25 UTC (rev 80)
@@ -508,7 +508,8 @@
 	    float velspeed,turnrate;
 		vector desireddir, olddir, newdir;
 		
-		traceline(self.origin, self.realowner.origin + self.view_ofs + v_forward * 1000, FALSE, self);
+		makevectors(self.realowner.v_angle);
+		traceline(self.origin, self.realowner.origin + self.view_ofs + v_forward * 5000, FALSE, self);
 		
 		velspeed = vlen(self.velocity);
 		turnrate = 0.65; //cvar("g_balance_rocketlauncher_laserguided_turnrate");//0.65;						// how fast to turn
@@ -520,7 +521,7 @@
 	}
 	if (self.lefty & PROJECTILEFLAG_REMOTEDETONATE)
 	{
-	    if (self.realowner.button4)
+	    if (self.realowner.button3)
 		{
 		   self.th_die();
 		}

Modified: trunk/basezym/progsqc/inventory.qc
===================================================================
--- trunk/basezym/progsqc/inventory.qc	2007-11-09 18:53:21 UTC (rev 79)
+++ trunk/basezym/progsqc/inventory.qc	2007-11-13 02:50:25 UTC (rev 80)
@@ -51,6 +51,7 @@
 string iteminfo_model;
 string iteminfo_pickupsound;
 string iteminfo_pickupmodel;
+vector iteminfo_viewmodeloffset;
 string iteminfo_name;
 float iteminfo_itemtype;
 float iteminfo_quantitymax;
@@ -145,6 +146,7 @@
 	
 	iteminfo_model = "";
 	iteminfo_pickupmodel = "";
+	iteminfo_viewmodeloffset = '0 0 0';
 	iteminfo_name = "unknown";
 	iteminfo_pickupsound = "";
 	iteminfo_quantitymax = 0;
@@ -192,7 +194,7 @@
 	iteminfo_weapon_viewmodelanim_idle = '0 0 1';
 	iteminfo_weapon_viewmodelanim_fire1 = '0 0 2';
 	iteminfo_weapon_viewmodelanim_fire2 = '0 0 2';
-	iteminfo_weapon_viewmodelanim_reload = '0 0 0.1';
+	iteminfo_weapon_viewmodelanim_reload = '0 0 0';
 	iteminfo_weapon_viewmodelanim_lower = '0 0 2';
 	iteminfo_weapon_viewmodelanim_raise = '0 0 2';
 	iteminfo_weapon_viewmodelanim_turnon = '0 0 2';
@@ -210,7 +212,6 @@
 		iteminfo_quantitymax = 1;
 		iteminfo_pickupsound = "items/pickupweapon.wav";
 		iteminfo_weapon_viewmodelanim_idle = '0 0 30';
-		iteminfo_weapon_viewmodelanim_reload = '0 0 1';
 		iteminfo_weapon_viewmodelanim_lower = '0 0 2';
 		iteminfo_weapon_viewmodelanim_raise = '0 0 2';
 		
@@ -227,6 +228,7 @@
 		iteminfo_model = cvar_string(wname,"_model");
 		iteminfo_weapon_viewmodel = cvar_string(wname,"_viewmodel");
 		iteminfo_pickupmodel = cvar_string(wname,"_pickupmodel");
+		iteminfo_viewmodeloffset = stov(cvar_string(wname,"_viewmodeloffset"));
 		
 		iteminfo_ammotype = cvar(wname,"_ammotype") + ITEMTYPE_AMMO1 - 1;
 		iteminfo_ammomax = cvar(wname,"_ammomax");
@@ -550,6 +552,8 @@
 {
 	if (other.classname != "player")
 		return;
+	if (other.team != 1)
+	   	return;
 	sound(other, CHAN_AUTO, self.noise, 1, ATTN_NORM);
 	bprint(self.netname,"\n");
 	
@@ -558,7 +562,10 @@
 	else if (self.armorvalue)
 	   other.armorvalue = other.armorvalue + self.armorvalue;
 	else
+	{
 		Inventory_AddFromInventory(other, self);
+		other.switchweaponitem = Inventory_GetBestWeapon(other);
+	}
 	
 	if (self.respawntime > 0)
 	{
@@ -587,7 +594,7 @@
 	newmis.solid = SOLID_BBOX;
 	newmis.movetype = MOVETYPE_BOUNCE;
 	newmis.velocity = vel;
-	//newmis.angles = '25 0 0';
+	newmis.angles = '25 0 0';
 	newmis.nextthink = time + 10;
 	newmis.think = Item_EnableOwner;
 	newmis.use = Item_Pickup;
@@ -601,10 +608,11 @@
 	newmis.noise = iteminfo_pickupsound;
 	setorigin(newmis, org);
 	setmodel(newmis, iteminfo_pickupmodel);
-	//setsize(newmis, '-25 -25 -25', '8 8 8');
+	setsize(newmis, '-25 -25 -25', '8 8 8');
 	Inventory_ModifyItem(newmis, itemtype, quantity, ammo1);
 	
-	newmis.effects = newmis.effects | EF_ADDITIVE | EF_FULLBRIGHT;
+	newmis.effects = newmis.effects | EF_FULLBRIGHT;
+	newmis.scale = 1.5;
 };
 
 void() weapon_weap1 =
@@ -662,8 +670,9 @@
 void() item_health1 =
 {
 	newmis = spawn();
-	newmis.health = 5;
+	newmis.health = 10;
 	newmis.owner = world;
+	newmis.respawntime = 5;
 	newmis.classname = "Health";
 	newmis.netname = "Health";
 	newmis.ispointable = TRUE;
@@ -681,7 +690,7 @@
 	setmodel(newmis, "models/items/health1.md3");
 	setsize(newmis, '-8 -8 -8', '8 8 8');
 	
-	newmis.effects = newmis.effects | EF_ADDITIVE | EF_FULLBRIGHT;
+	newmis.effects = newmis.effects | EF_FULLBRIGHT;
 }
 
 void() item_armor1 =

Modified: trunk/basezym/progsqc/jumppads.qc
===================================================================
--- trunk/basezym/progsqc/jumppads.qc	2007-11-09 18:53:21 UTC (rev 79)
+++ trunk/basezym/progsqc/jumppads.qc	2007-11-13 02:50:25 UTC (rev 80)
@@ -136,7 +136,7 @@
 
 	// first calculate a typical start point for the jump
 	org = (self.absmin + self.absmax) * 0.5;
-	org_z = self.absmax_z - self.boxmin;
+	org_z = self.absmax_z - self.boxmin_z;
 
 	if (self.target)
 	{

Modified: trunk/basezym/progsqc/player.qc
===================================================================
--- trunk/basezym/progsqc/player.qc	2007-11-09 18:53:21 UTC (rev 79)
+++ trunk/basezym/progsqc/player.qc	2007-11-13 02:50:25 UTC (rev 80)
@@ -97,6 +97,7 @@
 		  		pc.actoranim_TORSO_ATTACK2 = '141 6 15';
 		 		pc.actoranim_TORSO_DROP    = '147 5 20';
 		  		pc.actoranim_TORSO_RAISE   = '151 5 20';
+		  		pc.actoranim_TORSO_RELOAD  = '156 1 15';
 		  		pc.actoranim_TORSO_STAND   = '156 1 15';
 		  		pc.actoranim_TORSO_STAND2  = '157 1 15';
 		  		legsframesoffset = '-1 0 0' * (pc.actoranim_TORSO_STAND2_x + pc.actoranim_TORSO_STAND2_y - pc.actoranim_TORSO_GESTURE_x);

Modified: trunk/basezym/progsqc/progs.src
===================================================================
--- trunk/basezym/progsqc/progs.src	2007-11-09 18:53:21 UTC (rev 79)
+++ trunk/basezym/progsqc/progs.src	2007-11-13 02:50:25 UTC (rev 80)
@@ -12,6 +12,7 @@
 actor.qc
 player.qc
 bots.qc
+structures.qc
 server.qc
 mapentities.qc
 jumppads.qc

Modified: trunk/basezym/progsqc/server.qc
===================================================================
--- trunk/basezym/progsqc/server.qc	2007-11-09 18:53:21 UTC (rev 79)
+++ trunk/basezym/progsqc/server.qc	2007-11-13 02:50:25 UTC (rev 80)
@@ -11,7 +11,41 @@
 	Inventory_Precache();
 	playerclass_spawndefaultclasses();
 
-	lightstyle(1, "nnnnnmnnnnolnnnnmnnnnnmnnnonnnnnnkqmnnn");
+		// 0 normal
+	lightstyle(0, "m");
+
+	// 1 FLICKER (first variety)
+	lightstyle(1, "mmnmmommommnonmmonqnmmo");
+
+	// 2 SLOW STRONG PULSE
+	lightstyle(2, "abcdefghijklmnopqrstuvwxyzyxwvutsrqponmlkjihgfedcba");
+
+	// 3 CANDLE (first variety)
+	lightstyle(3, "mmmmmaaaaammmmmaaaaaabcdefgabcdefg");
+
+	// 4 FAST STROBE
+	lightstyle(4, "mamamamamama");
+
+	// 5 GENTLE PULSE 1
+	lightstyle(5,"jklmnopqrstuvwxyzyxwvutsrqponmlkj");
+
+	// 6 FLICKER (second variety)
+	lightstyle(6, "nmonqnmomnmomomno");
+
+	// 7 CANDLE (second variety)
+	lightstyle(7, "mmmaaaabcdefgmmmmaaaammmaamm");
+
+	// 8 CANDLE (third variety)
+	lightstyle(8, "mmmaaammmaaammmabcdefaaaammmmabcdefmmmaaaa");
+
+	// 9 SLOW STROBE (fourth variety)
+	lightstyle(9, "aaaaaaaazzzzzzzz");
+
+	// 10 FLUORESCENT FLICKER
+	lightstyle(10, "mmamammmmammamamaaamammma");
+
+	// 11 SLOW PULSE NOT FADE TO BLACK
+	lightstyle(11, "abcdefghijklmnopqrrqponmlkjihgfedcba");
 };
 
 // this is called when a savegame is loaded

Added: trunk/basezym/progsqc/structures.qc
===================================================================
--- trunk/basezym/progsqc/structures.qc	                        (rev 0)
+++ trunk/basezym/progsqc/structures.qc	2007-11-13 02:50:25 UTC (rev 80)
@@ -0,0 +1,100 @@
+void() spawner_think =
+{
+ 	if (total_monsters < 150)
+	{
+	   	local entity oldself;
+		newmis = spawn();
+		setorigin(newmis, self.origin + v_up * 60);
+		newmis.angles = '0 1 0' * self.v_angle_y;
+		newmis.think = bot_npcthink;
+		newmis.nextthink = time;
+		oldself = self;
+		self = newmis;
+		self.team = cvar("g_defaultenemyteam");
+		self.unlimitedinventory = 1;
+		player_spawn(ACTORTYPE_CLASS2);
+		self = oldself;
+		self.nextthink = time + 10;
+	}
+}
+
+void() structure_die =
+{
+ 	te_explosion(self.origin);
+	TossGib (world, "models/gibs/m_gib1.md3", self.origin, self.velocity,0);
+	TossGib (world, "models/gibs/m_gib2.md3", self.origin, self.velocity,0);
+	TossGib (world, "models/gibs/m_gib3.md3", self.origin, self.velocity,0);
+	TossGib (world, "models/gibs/m_gib4.md3", self.origin, self.velocity,0);
+	TossGib (world, "models/gibs/m_gib5.md3", self.origin, self.velocity,0);
+	TossGib (world, "models/gibs/m_gib6.md3", self.origin, self.velocity,0);
+	remove(self);
+}
+
+
+void(entity attacker, float damage)  structure_pain =
+{
+
+}
+
+void() structure_spawner
+{
+ 	if (cvar("g_gametype") == 1)
+	{
+		setorigin(self, self.origin + '0 0 1');
+		self.team = cvar("g_defaultenemyteam");
+		self.unlimitedinventory = 1;
+		self.solid = SOLID_BBOX;
+		self.movetype = MOVETYPE_TOSS;
+		setmodel(self, "models/structures/telenode/telenode.md3");
+		
+	   	self.takedamage = DAMAGE_YES;
+		self.health = 100;
+		self.mass = 500;
+		self.th_die = structure_die;
+		self.th_pain = structure_pain;
+		
+		self.think = spawner_think;
+		self.nextthink = time + 10;
+	}
+};
+
+
+void() structure_power
+{
+ 	if (cvar("g_gametype") == 1)
+	{
+		setorigin(self, self.origin + '0 0 1');
+		self.team = cvar("g_defaultenemyteam");
+		self.unlimitedinventory = 1;
+		self.solid = SOLID_BBOX;
+		self.movetype = MOVETYPE_TOSS;
+		setmodel(self, "models/structures/reactor/reactor.md3");
+		
+	   	self.takedamage = DAMAGE_YES;
+		self.health = 500;
+		self.mass = 1000;
+		self.th_die = structure_die;
+		self.th_pain = structure_pain;
+	}
+};
+
+
+void() structure_barrel
+{
+ 	if (cvar("g_gametype") == 1)
+	{
+		setorigin(self, self.origin + '0 0 1');
+		self.team = cvar("g_defaultenemyteam");
+		self.unlimitedinventory = 1;
+		self.solid = SOLID_BBOX;
+		self.movetype = MOVETYPE_TOSS;
+		setmodel(self, "models/structures/barrels/barrel.md2");
+		setsize(self, '-26 -26 -5', '26 26 40');
+		
+	   	self.takedamage = DAMAGE_YES;
+		self.health = 1000;
+		self.mass = 100;
+		self.th_die = structure_die;
+		self.th_pain = structure_pain;
+	}
+};
\ No newline at end of file




More information about the zymotic-commits mailing list