From 028ffd280b49942a81ee7617c54c7154954185b5 Mon Sep 17 00:00:00 2001 From: div0 Date: Thu, 3 May 2007 06:59:05 +0000 Subject: [PATCH] keyhunt: ifdeffed out attachment code git-svn-id: svn://svn.icculus.org/nexuiz/trunk@2457 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/models/keyhunt/key-carried.md3 | Bin 0 -> 15300 bytes data/qcsrc/server/keyhunt.qc | 129 ++++++++++++++++++++++++---- 2 files changed, 114 insertions(+), 15 deletions(-) create mode 100644 data/models/keyhunt/key-carried.md3 diff --git a/data/models/keyhunt/key-carried.md3 b/data/models/keyhunt/key-carried.md3 new file mode 100644 index 0000000000000000000000000000000000000000..c3e55cfbd0ca4e8ba7b1c5095af77080298c6aa9 GIT binary patch literal 15300 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 l->o<9eaWp)&i~)*k9%)(KtI{SWzG&8`3d literal 0 HcmV?d00001 diff --git a/data/qcsrc/server/keyhunt.qc b/data/qcsrc/server/keyhunt.qc index 6b2e7cfd8..1930c86ef 100644 --- a/data/qcsrc/server/keyhunt.qc +++ b/data/qcsrc/server/keyhunt.qc @@ -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_drop = "sound/misc/mouseclick.wav"; 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) { @@ -106,35 +126,88 @@ void kh_Scores_Event(entity player, entity key, string what, float frags_player, 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 -15'); // 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 @@ void kh_Key_Detach(entity key) 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 @@ void kh_Key_Spawn(entity initial_owner, float angle) 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 @@ void kh_Key_Think() { 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")) @@ -582,6 +668,8 @@ void kh_StartRound() 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 +760,9 @@ void kh_init() 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 +776,14 @@ void kh_init() 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"); -- 2.39.2