r2462 - in branches/nexuiz-2.0/data: models/keyhunt qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Thu May 3 12:34:48 EDT 2007
Author: div0
Date: 2007-05-03 12:34:48 -0400 (Thu, 03 May 2007)
New Revision: 2462
Added:
branches/nexuiz-2.0/data/models/keyhunt/key-carried.md3
Modified:
branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
branches/nexuiz-2.0/data/qcsrc/server/keyhunt.qc
branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc
Log:
don't try to open defaultmodel every frame; keyhunt fixes
Copied: branches/nexuiz-2.0/data/models/keyhunt/key-carried.md3 (from rev 2457, trunk/data/models/keyhunt/key-carried.md3)
===================================================================
(Binary files differ)
Modified: branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc 2007-05-03 13:31:15 UTC (rev 2461)
+++ branches/nexuiz-2.0/data/qcsrc/server/cl_client.qc 2007-05-03 16:34:48 UTC (rev 2462)
@@ -466,7 +466,7 @@
if(cvar("sv_defaultcharacter") == 1 && !teams_matter) {
local string defaultmodel;
- defaultmodel = CheckPlayerModel(cvar_string("sv_defaultplayermodel"));
+ defaultmodel = cvar_string("sv_defaultplayermodel");
setmodel_lod (self, defaultmodel);
self.skin = stof(cvar_string("sv_defaultplayerskin"));
} else {
@@ -1417,7 +1417,7 @@
if(cvar("sv_defaultcharacter") == 1 && !teams_matter) {
local string defaultmodel;
- defaultmodel = CheckPlayerModel(cvar_string("sv_defaultplayermodel"));
+ defaultmodel = cvar_string("sv_defaultplayermodel");
if (defaultmodel != self.model)
{
Modified: branches/nexuiz-2.0/data/qcsrc/server/keyhunt.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/keyhunt.qc 2007-05-03 13:31:15 UTC (rev 2461)
+++ branches/nexuiz-2.0/data/qcsrc/server/keyhunt.qc 2007-05-03 16:34:48 UTC (rev 2462)
@@ -1,6 +1,25 @@
string STR_ITEM_KH_KEY = "item_kh_key";
#define FOR_EACH_KH_KEY(v) for(v = world; (v = find(v, classname, STR_ITEM_KH_KEY)); )
+// #define KH_PLAYER_USE_ATTACHMENT
+// #define KH_PLAYER_USE_CARRIEDMODEL
+// #define KH_KEY_ATTACHMENT_DEBUG
+
+#ifdef KH_PLAYER_USE_ATTACHMENT
+vector KH_PLAYER_ATTACHMENT_DIST_ROTATED = '0 -4 0';
+vector KH_PLAYER_ATTACHMENT_DIST = '4 0 0';
+vector KH_PLAYER_ATTACHMENT = '0 0 0';
+vector KH_PLAYER_ATTACHMENT_ANGLES = '0 0 0';
+string KH_PLAYER_ATTACHMENT_BONE = "";
+#else
+float KH_KEY_ZSHIFT = -15;
+float KH_KEY_XYDIST = 24;
+float KH_KEY_XYSPEED = 45;
+#endif
+
+vector KH_KEY_MIN = '-8 -8 -8';
+vector KH_KEY_MAX = '8 8 40';
+
typedef void(void) kh_Think_t;
var kh_Think_t kh_Controller_Thinkfunc;
string kh_Controller_Waitmsg;
@@ -27,6 +46,7 @@
string kh_sound_collect = "sound/ctf/take.wav";
float kh_sprite_dropped, kh_sprite_finish, kh_sprite_red, kh_sprite_blue, kh_sprite_pink, kh_sprite_yellow, kh_sprite_friend;
+float kh_key_dropped, kh_key_carried;
float kh_GetCarrierSprite(float t, float e)
{
@@ -67,7 +87,7 @@
else
s = kh_Controller_Waitmsg;
- dprint(s, "\n");
+ //dprint(s, "\n");
FOR_EACH_PLAYER(e)
if(clienttype(e) == CLIENTTYPE_REAL)
@@ -106,35 +126,88 @@
GameLogEcho(s, FALSE);
}
+vector kh_AttachedOrigin(entity e)
+{
+ if(e.tag_entity)
+ {
+ makevectors(e.tag_entity.angles);
+ return e.tag_entity.origin + e.origin_x * v_forward - e.origin_y * v_right + e.origin_z * v_up;
+ }
+ else
+ return e.origin;
+}
+
void kh_Key_Attach(entity key)
{
+#ifdef KH_PLAYER_USE_ATTACHMENT
+ entity first;
+ first = key.owner.kh_next;
+ if(key == first)
+ {
+ setattachment(key, key.owner, KH_PLAYER_ATTACHMENT_BONE);
+ if(key.kh_next)
+ {
+ setattachment(key.kh_next, key, "");
+ setorigin(key, key.kh_next.origin - 0.5 * KH_PLAYER_ATTACHMENT_DIST);
+ setorigin(key.kh_next, KH_PLAYER_ATTACHMENT_DIST_ROTATED);
+ key.kh_next.angles = '0 0 0';
+ }
+ else
+ setorigin(key, KH_PLAYER_ATTACHMENT);
+ key.angles = KH_PLAYER_ATTACHMENT_ANGLES;
+ }
+ else
+ {
+ setattachment(key, key.kh_prev, "");
+ if(key.kh_next)
+ setattachment(key.kh_next, key, "");
+ setorigin(key, KH_PLAYER_ATTACHMENT_DIST_ROTATED);
+ setorigin(first, first.origin - 0.5 * KH_PLAYER_ATTACHMENT_DIST);
+ key.angles = '0 0 0';
+ }
+#else
setattachment(key, key.owner, "");
- setorigin(key, '0 0 -15'); // x/y fixed later in think, z has to be -15 to make the key fit even in the crouchbox
+ setorigin(key, '0 0 1' * KH_KEY_ZSHIFT); // fixing x, y in think
key.angles_y -= key.owner.angles_y;
+#endif
key.flags = 0;
key.solid = SOLID_NOT;
key.movetype = MOVETYPE_NONE;
key.team = key.owner.team;
key.nextthink = time;
key.damageforcescale = 0;
+ key.modelindex = kh_key_carried;
}
-vector kh_AttachedOrigin(entity e)
+void kh_Key_Detach(entity key)
{
- if(e.tag_entity)
+#ifdef KH_PLAYER_USE_ATTACHMENT
+ entity first;
+ first = key.owner.kh_next;
+ if(key == first)
{
- makevectors(e.tag_entity.angles);
- return e.tag_entity.origin + e.origin_x * v_forward - e.origin_y * v_right + e.origin_z * v_up;
+ if(key.kh_next)
+ {
+ setattachment(key.kh_next, key.owner, KH_PLAYER_ATTACHMENT_BONE);
+ setorigin(key.kh_next, key.origin + 0.5 * KH_PLAYER_ATTACHMENT_DIST);
+ key.kh_next.angles = KH_PLAYER_ATTACHMENT_ANGLES;
+ }
}
else
- return e.origin;
-}
-
-void kh_Key_Detach(entity key)
-{
+ {
+ if(key.kh_next)
+ setattachment(key.kh_next, key.kh_prev, "");
+ setorigin(first, first.origin + 0.5 * KH_PLAYER_ATTACHMENT_DIST);
+ }
+ // in any case:
+ setattachment(key, world, "");
+ setorigin(key, key.owner.origin + '0 0 1' * (PL_MIN_z - KH_KEY_MIN_z));
+ key.angles = key.owner.angles;
+#else
setorigin(key, key.owner.origin + key.origin_z * '0 0 1');
setattachment(key, world, "");
key.angles_y += key.owner.angles_y;
+#endif
key.aiment = world;
key.flags = FL_ITEM;
key.solid = SOLID_TRIGGER;
@@ -142,6 +215,7 @@
key.pain_finished = time + cvar("g_balance_keyhunt_delay_return");
key.damageforcescale = cvar("g_balance_keyhunt_damageforcescale");
// let key.team stay
+ key.modelindex = kh_key_dropped;
}
void kh_Key_AssignTo(entity key, entity player)
@@ -215,8 +289,10 @@
key.cnt = angle;
key.angles = '0 360 0' * random();
key.event_damage = kh_Key_Damage;
- setmodel(key, "models/keyhunt/key.md3");
+ key.modelindex = kh_key_dropped;
+ key.model = "key";
setsize(key, '-8 -8 -8', '8 8 40');
+ setsize(key, KH_KEY_MIN, KH_KEY_MAX);
switch(initial_owner.team)
{
@@ -339,13 +415,23 @@
{
entity head;
- //self.angles_y = math_mod(self.angles_y + 0.05 * 135, 360);
- // model is EF_ROTATING now
+#ifdef KH_KEY_ATTACHMENT_DEBUG
+ if(self.kh_prev == self.owner)
+ {
+ if(cvar_string("_angles") != "")
+ {
+ self.angles = stov(cvar_string("_angles"));
+ self.origin = stov(cvar_string("_origin"));
+ }
+ }
+#endif
if(self.owner)
{
- makevectors('0 1 0' * (self.cnt + math_mod(time, 360) * 45));
- setorigin(self, v_forward * 24 + '0 0 1' * self.origin_z);
+#ifndef KH_PLAYER_USE_ATTACHMENT
+ makevectors('0 1 0' * (self.cnt + math_mod(time, 360) * KH_KEY_XYSPEED));
+ setorigin(self, v_forward * KH_KEY_XYDIST + '0 0 1' * self.origin_z);
+#endif
if(self.owner.buttonuse)
if(time >= self.owner.kh_droptime + cvar("g_balance_keyhunt_delay_drop"))
@@ -537,8 +623,9 @@
players = 0;
FOR_EACH_PLAYER(player)
if(player.deadflag == DEAD_NO)
- if(player.team == teem)
- ++players;
+ if(!player.buttonchat)
+ if(player.team == teem)
+ ++players;
if(players == 0)
return FALSE;
}
@@ -575,13 +662,16 @@
entity my_player;
FOR_EACH_PLAYER(player)
if(player.deadflag == DEAD_NO)
- if(player.team == teem)
- {
- ++players;
- if(random() * players <= 1)
- my_player = player;
- }
+ if(!player.buttonchat)
+ if(player.team == teem)
+ {
+ ++players;
+ if(random() * players <= 1)
+ my_player = player;
+ }
kh_Key_Spawn(my_player, 360 * i / kh_teams);
+ //kh_Key_Spawn(my_player, 360 * i / kh_teams);
+ //kh_Key_Spawn(my_player, 360 * i / kh_teams);
}
kh_tracking_enabled = FALSE;
@@ -672,6 +762,9 @@
precache_model("models/sprites/keycarrier-blue.sp2");
precache_model("models/sprites/keycarrier-yellow.sp2");
precache_model("models/sprites/keycarrier-pink.sp2");
+#ifdef KH_PLAYER_USE_CARRIEDMODEL
+ precache_model("models/keyhunt/key-carried.md3");
+#endif
precache_model("models/keyhunt/key.md3");
// setup variables
@@ -685,6 +778,14 @@
kh_controller.think = kh_Controller_Think;
kh_Controller_SetThink(0, "", kh_WaitForPlayers);
+ setmodel(kh_controller, "models/keyhunt/key.md3");
+ kh_key_dropped = kh_controller.modelindex;
+#ifdef KH_PLAYER_USE_CARRIEDMODEL
+ setmodel(kh_controller, "models/keyhunt/key-carried.md3");
+ kh_key_carried = kh_controller.modelindex;
+#else
+ kh_key_carried = kh_key_dropped;
+#endif
setmodel(kh_controller, "models/sprites/key-dropped.sp2");
kh_sprite_dropped = kh_controller.modelindex;
setmodel(kh_controller, "models/sprites/keycarrier-finish.sp2");
Modified: branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc
===================================================================
--- branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc 2007-05-03 13:31:15 UTC (rev 2461)
+++ branches/nexuiz-2.0/data/qcsrc/server/miscfunctions.qc 2007-05-03 16:34:48 UTC (rev 2462)
@@ -8,9 +8,12 @@
if(DistributeEvenly_amount)
{
dprint("DistributeEvenly_Init: UNFINISHED DISTRIBUTION (", ftos(DistributeEvenly_amount), " for ");
- dprint(ftos(DistributeEvenly_totalweight), "left!\n");
+ dprint(ftos(DistributeEvenly_totalweight), " left!)\n");
}
- DistributeEvenly_amount = amount;
+ if(totalweight == 0)
+ DistributeEvenly_amount = 0;
+ else
+ DistributeEvenly_amount = amount;
DistributeEvenly_totalweight = totalweight;
}
float DistributeEvenly_Get(float weight)
More information about the nexuiz-commits
mailing list