Module dpmod: Change committed

havoc at icculus.org havoc at icculus.org
Sun Jun 8 03:54:26 EDT 2003


Commiter   : havoc
CVSROOT    : /cvs/cvsroot/twilight
Module     : dpmod
Commit time: 2003-06-08 07:54:26 UTC

Log message:

added support for swimming in halflife water entities

Modified files:
     qc/halflife.qc qc/playermovement.qc

------=MIME.48a95662b6a25ded14d882d290755b40
Content-Type: text/plain; name="dpmod.20030608.075426.havoc.diff"
Content-Disposition: attachment; filename="dpmod.20030608.075426.havoc.diff"
Content-Transfer-Encoding: 8bit

Index: dpmod/qc/halflife.qc
diff -u dpmod/qc/halflife.qc:1.1.1.1 dpmod/qc/halflife.qc:1.2
--- dpmod/qc/halflife.qc:1.1.1.1	Thu Sep 19 15:08:21 2002
+++ dpmod/qc/halflife.qc	Sun Jun  8 03:54:16 2003
@@ -4,6 +4,7 @@
 .float  pitch;
 .float  renderamt;
 .float  rendermode;
+.vector rendercolor;
 
 void() info_node = {};
 void() env_sound = {};
@@ -35,14 +36,42 @@
 
 void() func_ladder_touch =
 {
-        if (other.classname != "player")
-                return;
-        other.ladder_time = time + 0.1;
+	if (other.classname != "player")
+		return;
+	other.ladder_time = time + 0.1;
+	other.ladder_entity = self;
 };
 
 void() func_ladder =
 {
 	InitTrigger ();
-        self.touch = func_ladder_touch;
+	self.touch = func_ladder_touch;
+};
+
+void() func_water =
+{
+	self.solid = SOLID_TRIGGER;
+	setmodel (self, self.model);	// set size and link into world
+	self.touch = func_ladder_touch;
+};
+
+void() light_use;
+void() light_environment =
+{
+	if (!self.targetname)
+	{
+		// inert light
+		remove(self);
+		return;
+	}
+
+	if (self.style >= 32)
+	{
+		self.use = light_use;
+		if (self.spawnflags & 1)
+			lightstyle(self.style, "a");
+		else
+			lightstyle(self.style, "m");
+	}
 };
 
Index: dpmod/qc/playermovement.qc
diff -u dpmod/qc/playermovement.qc:1.3 dpmod/qc/playermovement.qc:1.4
--- dpmod/qc/playermovement.qc:1.3	Sat Sep 28 02:23:01 2002
+++ dpmod/qc/playermovement.qc	Sun Jun  8 03:54:16 2003
@@ -1,5 +1,6 @@
-float lastclientthink, sv_maxspeed, sv_friction, sv_accelerate, sv_stopspeed, sv_edgefriction;
+float lastclientthink, sv_maxspeed, sv_friction, sv_accelerate, sv_stopspeed, sv_edgefriction, sv_gravity;
 .float ladder_time;
+.entity ladder_entity;
 
 void() SV_PlayerPhysics =
 {
@@ -16,6 +17,7 @@
 		sv_friction = cvar("sv_friction");
 		sv_accelerate = cvar("sv_accelerate");
 		sv_stopspeed = cvar("sv_stopspeed");
+		sv_gravity = cvar("sv_gravity");
 	}
 
 	if (self.punchangle != '0 0 0')
@@ -95,13 +97,45 @@
 		return;
 	}
 
-	if (self.movetype == MOVETYPE_NOCLIP || self.movetype == MOVETYPE_FLY || time < self.ladder_time)
+	if (self.movetype == MOVETYPE_NOCLIP || self.movetype == MOVETYPE_FLY)
 	{
-		// noclipping, flying, or on a ladder
+		// noclipping or flying
 		self.velocity = self.velocity * (1 - frametime * sv_friction);
 		makevectors(self.v_angle);
 		//wishvel = v_forward * self.movement_x + v_right * self.movement_y + v_up * self.movement_z;
 		wishvel = v_forward * self.movement_x + v_right * self.movement_y + '0 0 1' * self.movement_z;
+	}
+	else if (time < self.ladder_time)
+	{
+		// on a func_ladder or swimming in func_water
+		self.velocity = self.velocity * (1 - frametime * sv_friction);
+		makevectors(self.v_angle);
+		//wishvel = v_forward * self.movement_x + v_right * self.movement_y + v_up * self.movement_z;
+		wishvel = v_forward * self.movement_x + v_right * self.movement_y + '0 0 1' * self.movement_z;
+		if (self.gravity)
+			self.velocity_z += self.gravity * sv_gravity * frametime;
+		else
+			self.velocity_z += sv_gravity * frametime;
+		if (self.ladder_entity.classname == "func_water")
+		{
+			f = vlen(wishvel);
+			if (f > self.ladder_entity.speed)
+				wishvel = wishvel * (self.ladder_entity.speed / f);
+
+			self.watertype = self.ladder_entity.skin;
+			f = self.ladder_entity.origin_z + self.ladder_entity.maxs_z;
+			if ((self.origin_z + self.view_ofs_z) < f)
+				self.waterlevel = 3;
+			else if ((self.origin_z + (self.mins_z + self.maxs_z) * 0.5) < f)
+				self.waterlevel = 2;
+			else if ((self.origin_z + self.mins_z + 1) < f)
+				self.waterlevel = 1;
+			else
+			{
+				self.waterlevel = 0;
+				self.watertype = CONTENT_EMPTY;
+			}
+		}
 	}
 	else if (self.flags & FL_ONGROUND)
 	{


More information about the twilight-commits mailing list