r4298 - in trunk/data: models/weapons qcsrc/server textures
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Tue Sep 2 16:01:37 EDT 2008
Author: div0
Date: 2008-09-02 16:01:37 -0400 (Tue, 02 Sep 2008)
New Revision: 4298
Added:
trunk/data/models/weapons/g_porto.md3
trunk/data/models/weapons/v_porto.md3
trunk/data/models/weapons/w_porto.zym
trunk/data/qcsrc/server/w_porto.qc
trunk/data/textures/portalgun.tga
trunk/data/textures/portalgun_gloss.tga
trunk/data/textures/portalgun_glow.tga
trunk/data/textures/portalgun_norm.tga
Modified:
trunk/data/qcsrc/server/portals.qc
Log:
fix Port-O-Launch
Added: trunk/data/models/weapons/g_porto.md3
===================================================================
(Binary files differ)
Property changes on: trunk/data/models/weapons/g_porto.md3
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/data/models/weapons/v_porto.md3
===================================================================
(Binary files differ)
Property changes on: trunk/data/models/weapons/v_porto.md3
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/data/models/weapons/w_porto.zym
===================================================================
(Binary files differ)
Property changes on: trunk/data/models/weapons/w_porto.zym
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: trunk/data/qcsrc/server/portals.qc
===================================================================
--- trunk/data/qcsrc/server/portals.qc 2008-09-02 19:06:56 UTC (rev 4297)
+++ trunk/data/qcsrc/server/portals.qc 2008-09-02 20:01:37 UTC (rev 4298)
@@ -17,14 +17,20 @@
vector fixedvectoangles2(vector v, vector w)
{
vector a;
- a = vectoangles(v, w);
+ a = vectoangles2(v, w);
a_x = -a_x;
return a;
}
+void fixedmakevectors(vector a)
+{
+ //a_x = -a_x;
+ makevectors(a);
+}
+
vector Portal_Transform_Apply(vector transform, vector v)
{
- makevectors(transform);
+ fixedmakevectors(transform);
return v_forward * v_x
+ v_right * (-v_y)
+ v_up * v_z;
@@ -33,7 +39,7 @@
vector Portal_Transform_Multiply(vector t1, vector t2)
{
vector m_forward, m_up;
- makevectors(t2); m_forward = v_forward; m_up = v_up;
+ fixedmakevectors(t2); m_forward = v_forward; m_up = v_up;
m_forward = Portal_Transform_Apply(t1, m_forward);
m_up = Portal_Transform_Apply(t1, m_up);
return fixedvectoangles2(m_forward, m_up);
@@ -42,7 +48,7 @@
vector Portal_Transform_Invert(vector transform)
{
vector i_forward, i_up;
- makevectors(transform);
+ fixedmakevectors(transform);
// we want angles that turn v_forward into '1 0 0', v_right into '0 1 0' and v_up into '0 0 1'
// but these are orthogonal unit vectors!
// so to invert, we can simply vectoangles the TRANSPOSED matrix
@@ -59,7 +65,7 @@
print("Transform: ", vtos(transform), "\n");
print("Inverted: ", vtos(v), "\n");
print("Verify: ", vtos(Portal_Transform_Multiply(v, transform)), "\n");
- makevectors(Portal_Transform_Multiply(v, transform));
+ fixedmakevectors(Portal_Transform_Multiply(v, transform));
print("Verify: ", vtos(v_forward), "\n");
print("Verify: ", vtos(v_right), "\n");
print("Verify: ", vtos(v_up), "\n");
@@ -92,7 +98,7 @@
// this now is INSIDE the plane... can't use that
// shift it out
- makevectors(teleporter.enemy.angles);
+ fixedmakevectors(teleporter.enemy.mangle);
safe = teleporter.enemy.portal_safe_origin; // a valid player origin
step = to + ((safe - to) * v_forward) * v_forward;
tracebox(safe, PL_MIN, PL_MAX, step, MOVE_WORLDONLY, player);
@@ -115,7 +121,7 @@
}
else
{
- ang = Portal_Transform_Multiply(transform, player.angles);
+ ang = Portal_Transform_Multiply(transform, player.mangle);
}
print("previous velocity: ", vtos(player.velocity), "\n");
@@ -147,7 +153,7 @@
return;
if(time < self.portal_activatetime)
return;
- makevectors(self.angles);
+ fixedmakevectors(self.mangle);
if((other.origin - self.origin) * v_forward < 0)
return;
if(other.mins_x < PL_MIN_x || other.mins_y < PL_MIN_y || other.mins_z < PL_MIN_z
@@ -197,7 +203,7 @@
void Portal_Connect(entity teleporter, entity destination)
{
- teleporter.portal_transform = Portal_Transform_Divide(Portal_Transform_TurnDirection(destination.angles), teleporter.angles);
+ teleporter.portal_transform = Portal_Transform_Divide(Portal_Transform_TurnDirection(destination.mangle), teleporter.mangle);
teleporter.enemy = destination;
destination.enemy = teleporter;
Portal_MakeInPortal(teleporter);
@@ -235,18 +241,41 @@
self = oldself;
}
+float CheckWireframeBox(vector v0, vector dvx, vector dvy, vector dvz)
+{
+ traceline(v0, v0 + dvx, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
+ traceline(v0, v0 + dvy, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
+ traceline(v0, v0 + dvz, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
+ traceline(v0 + dvx, v0 + dvx + dvy, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
+ traceline(v0 + dvx, v0 + dvx + dvz, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
+ traceline(v0 + dvy, v0 + dvy + dvx, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
+ traceline(v0 + dvy, v0 + dvy + dvz, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
+ traceline(v0 + dvz, v0 + dvz + dvx, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
+ traceline(v0 + dvz, v0 + dvz + dvy, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
+ traceline(v0 + dvx + dvy, v0 + dvx + dvy + dvz, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
+ traceline(v0 + dvx + dvz, v0 + dvx + dvy + dvz, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
+ traceline(v0 + dvy + dvz, v0 + dvx + dvy + dvz, MOVE_NORMAL, world); if(trace_fraction < 1) return 0;
+ return 1;
+}
+
entity Portal_Spawn(entity own, vector org, vector ang)
{
+ fixedmakevectors(ang);
+ if(!CheckWireframeBox(org - 64 * v_right - 64 * v_up, 128 * v_right, 128 * v_up, 32 * v_forward))
+ return world;
+
entity portal;
portal = spawn();
portal.classname = "portal";
portal.owner = own;
portal.origin = org;
+ portal.mangle = ang;
+ ang_x = -ang_x;
portal.angles = ang;
portal.think = Portal_Vanish;
portal.nextthink = time + 60;
portal.portal_activatetime = time + 0.1;
- setmodel(portal, "models/items/g_h100.md3");
+ setmodel(portal, "models/portal.md3");
if(!Portal_FindSafeOrigin(portal))
{
@@ -287,7 +316,7 @@
}
print("Plane normal: ", vtos(trace_plane_normal), "\n");
- print("Portal angles: ", vtos(fixedvectoangles(trace_plane_normal)), "\n");
+ print("Portal angles: ", vtos(vectoangles(trace_plane_normal)), "\n");
own.portal_in = Portal_Spawn(own, trace_endpos + trace_plane_normal, fixedvectoangles2(trace_plane_normal, dir));
if(!own.portal_in)
return 0;
@@ -322,8 +351,8 @@
}
print("Plane normal: ", vtos(trace_plane_normal), "\n");
- print("Portal angles: ", vtos(fixedvectoangles(trace_plane_normal)), "\n");
- own.portal_out = Portal_Spawn(own, trace_endpos + trace_plane_normal, fixedvectoangles2(trace_plane_normal, dir));
+ print("Portal angles: ", vtos(vectoangles(trace_plane_normal)), "\n");
+ own.portal_out = Portal_Spawn(own, trace_endpos + trace_plane_normal, fixedvectoangles2(trace_plane_normal, -1 * dir));
if(!own.portal_out)
return 0;
own.portal_out.portal_id = portal_id_val;
Added: trunk/data/qcsrc/server/w_porto.qc
===================================================================
--- trunk/data/qcsrc/server/w_porto.qc (rev 0)
+++ trunk/data/qcsrc/server/w_porto.qc 2008-09-02 20:01:37 UTC (rev 4298)
@@ -0,0 +1,106 @@
+.float porto_grenade_id;
+
+void W_Porto_Explode (void)
+{
+ remove(self);
+}
+
+void W_Porto_Touch1 (void)
+{
+ print(vtos(trace_plane_normal), "\n");
+ if(self.porto_grenade_id == 0)
+ {
+ self.porto_grenade_id = time;
+ if(!Portal_SpawnInPortalAtTrace(self.owner, self.velocity, self.porto_grenade_id))
+ remove(self);
+ }
+ else
+ {
+ Portal_SpawnOutPortalAtTrace(self.owner, self.velocity, self.porto_grenade_id);
+ remove(self);
+ }
+}
+
+void W_Porto_Attack (void)
+{
+ local entity gren;
+
+ if (cvar("g_use_ammunition"))
+ self.ammo_rockets = self.ammo_rockets - cvar("g_balance_porto_primary_ammo");
+ W_SetupShot (self, '0 0 0', FALSE, 4, "weapons/grenade_fire.wav");
+
+ //pointparticles(particleeffectnum("grenadelauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1);
+
+ gren = spawn ();
+ gren.owner = self;
+ gren.classname = "porto";
+ gren.bot_dodge = TRUE;
+ gren.bot_dodgerating = 200;
+ gren.movetype = MOVETYPE_BOUNCEMISSILE;
+ gren.solid = SOLID_BBOX;
+ gren.effects = EF_LOWPRECISION;
+ gren.modelflags = MF_GRENADE;
+ setmodel(gren, "models/grenademodel.md3"); // precision set above
+ setsize(gren, '0 0 0', '0 0 0');
+ setorigin(gren, w_shotorg);
+
+ gren.nextthink = time + cvar("g_balance_porto_primary_lifetime");
+ gren.think = W_Porto_Explode;
+ gren.touch = W_Porto_Touch1;
+ gren.velocity = w_shotdir * cvar("g_balance_porto_primary_speed");
+ W_SetupProjectileVelocity(gren);
+
+ gren.angles = vectoangles (gren.velocity);
+ gren.flags = FL_PROJECTILE;
+}
+
+void W_Porto_Attack2 (void)
+{
+ // nothing yet (maybe find the last one and detonate it?)
+}
+
+void spawnfunc_weapon_porto (void)
+{
+ weapon_defaultspawnfunc(WEP_PORTO, 5000);
+}
+
+float w_porto(float req)
+{
+ if (req == WR_AIM)
+ {
+ self.BUTTON_ATCK = FALSE;
+ self.BUTTON_ATCK2 = FALSE;
+ if(bot_aim(cvar("g_balance_porto_primary_speed"), 0, cvar("g_balance_grenadelauncher_primary_lifetime"), FALSE))
+ self.BUTTON_ATCK = TRUE;
+ }
+ else if (req == WR_THINK)
+ {
+ if (self.BUTTON_ATCK)
+ if (weapon_prepareattack(0, cvar("g_balance_porto_primary_refire")))
+ {
+ W_Porto_Attack();
+ weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_porto_primary_animtime"), w_ready);
+ }
+ }
+ else if (req == WR_PRECACHE)
+ {
+ precache_model ("models/grenademodel.md3");
+ precache_model ("models/weapons/g_porto.md3");
+ precache_model ("models/weapons/v_porto.md3");
+ precache_model ("models/weapons/w_porto.zym");
+ precache_sound ("weapons/grenade_fire.wav");
+ }
+ else if (req == WR_SETUP)
+ weapon_setup(WEP_PORTO);
+ else if (req == WR_CHECKAMMO1)
+ return self.ammo_cells >= cvar("g_balance_porto_primary_ammo");
+ else if (req == WR_CHECKAMMO2)
+ return FALSE;
+ else if (req == WR_SUICIDEMESSAGE)
+ w_deathtypestring = "did the impossible";
+ else if (req == WR_KILLMESSAGE)
+ w_deathtypestring = "felt # doing the impossible";
+ else if (req == WR_SPAWNFUNC)
+ spawnfunc_weapon_porto();
+ return TRUE;
+};
Added: trunk/data/textures/portalgun.tga
===================================================================
(Binary files differ)
Property changes on: trunk/data/textures/portalgun.tga
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/data/textures/portalgun_gloss.tga
===================================================================
(Binary files differ)
Property changes on: trunk/data/textures/portalgun_gloss.tga
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/data/textures/portalgun_glow.tga
===================================================================
(Binary files differ)
Property changes on: trunk/data/textures/portalgun_glow.tga
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/data/textures/portalgun_norm.tga
===================================================================
(Binary files differ)
Property changes on: trunk/data/textures/portalgun_norm.tga
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
More information about the nexuiz-commits
mailing list