From 3398c946566eefc487b60435cb61f1442d0fa0cc Mon Sep 17 00:00:00 2001 From: div0 Date: Sun, 24 Aug 2008 13:27:17 +0000 Subject: [PATCH] hook: new "tarzan" mode that can pull players "symmetrically" git-svn-id: svn://svn.icculus.org/nexuiz/trunk@4168 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/newhook.cfg | 2 +- data/qcsrc/server/g_hook.qc | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/data/newhook.cfg b/data/newhook.cfg index d08a6a2e1..38826a52a 100644 --- a/data/newhook.cfg +++ b/data/newhook.cfg @@ -1,4 +1,4 @@ -set g_grappling_hook_tarzan 1 +set g_grappling_hook_tarzan 2 // 2: can also pull players set g_balance_grapplehook_speed_fly 1800 set g_balance_grapplehook_speed_pull 2000 set g_balance_grapplehook_force_rubber 2000 diff --git a/data/qcsrc/server/g_hook.qc b/data/qcsrc/server/g_hook.qc index 44a532fa5..59d0481e7 100644 --- a/data/qcsrc/server/g_hook.qc +++ b/data/qcsrc/server/g_hook.qc @@ -92,7 +92,7 @@ void RemoveGrapplingHook(entity pl) void GrapplingHookThink() { float spd, dist, minlength, pullspeed, ropestretch, ropeairfriction, rubberforce, newlength, rubberforce_overstretch; - vector dir, org, end; + vector dir, org, end, v0, dv; if(self.owner.health <= 0 || self.owner.hook != self) // how did that happen? { // well, better fix it anyway remove(self); @@ -142,6 +142,7 @@ void GrapplingHookThink() if(cvar("g_grappling_hook_tarzan")) { newlength = self.rope_length; + v0 = self.owner.velocity; // first pull the rope... newlength = max(newlength - pullspeed * frametime, minlength); @@ -160,6 +161,17 @@ void GrapplingHookThink() 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; + + dv = ((self.owner.velocity - v0) * dir) * dir; + if(cvar("g_grappling_hook_tarzan") >= 2) + { + if(self.aiment.movetype == MOVETYPE_WALK || self.aiment.movetype == MOVETYPE_TOSS) + { + self.owner.velocity = self.owner.velocity - dv * 0.5; + self.aiment.velocity = self.aiment.velocity - dv * 0.5; + self.aiment.flags = self.aiment.flags - (self.aiment.flags & FL_ONGROUND); + } + } } else { -- 2.39.2