]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' into mario/monsters
authorMario <mario.mario@y7mail.com>
Mon, 25 Feb 2013 19:21:59 +0000 (06:21 +1100)
committerMario <mario.mario@y7mail.com>
Mon, 25 Feb 2013 19:21:59 +0000 (06:21 +1100)
qcsrc/client/csqcmodel_hooks.qc
qcsrc/client/player_skeleton.qc
qcsrc/client/player_skeleton.qh
qcsrc/menu/xonotic/maplist.c
qcsrc/server/cl_client.qc
qcsrc/server/g_damage.qc
qcsrc/server/g_world.qc

index 9caf9419f11f82170c54b47c6c90c9fe4d345da8..1f8306e7675f4609b13f75777821ff12ad27902f 100644 (file)
@@ -652,7 +652,7 @@ void CSQCModel_Hook_PreDraw(float isplayer)
                        CSQCModel_InterpolateAnimation_2To4_Do();
                        if(doblend)
                        {
-                               skeleton_from_frames(self);
+                               skeleton_from_frames(self, self.csqcmodel_isdead);
                        }
                        else
                        {
index 3ea3b280d2bd09c499b6b42ac5c0ec35d031a63d..7784fc1f693fe2bb54674220bb47c4ace5f57162 100644 (file)
@@ -98,7 +98,7 @@ void free_skeleton_from_frames(entity e)
        }
 }
 
-void skeleton_from_frames(entity e)
+void skeleton_from_frames(entity e, float is_dead)
 {
        float i;
        float m = e.modelindex;
@@ -166,16 +166,19 @@ void skeleton_from_frames(entity e)
                skel_set_boneabs(s, e.bone_upperbody, org);
        }
 
-       for(i = 0; i < MAX_AIM_BONES; ++i)
+       if(!is_dead)
        {
-               if(e.(bone_aim[i]))
+               for(i = 0; i < MAX_AIM_BONES; ++i)
                {
-                       vector aim = '1 0 0' * bound(-90, self.v_angle_x, 90) * e.(bone_aimweight[i]);
-                       vector org = skel_get_boneabs(s, e.(bone_aim[i]));
-                       vector ang_cur = fixedvectoangles2(v_forward, v_up);
-                       vector ang = AnglesTransform_Multiply(aim, ang_cur);
-                       fixedmakevectors(ang);
-                       skel_set_boneabs(s, e.(bone_aim[i]), org);
+                       if(e.(bone_aim[i]))
+                       {
+                               vector aim = '1 0 0' * bound(-90, self.v_angle_x, 90) * e.(bone_aimweight[i]);
+                               vector org = skel_get_boneabs(s, e.(bone_aim[i]));
+                               vector ang_cur = fixedvectoangles2(v_forward, v_up);
+                               vector ang = AnglesTransform_Multiply(aim, ang_cur);
+                               fixedmakevectors(ang);
+                               skel_set_boneabs(s, e.(bone_aim[i]), org);
+                       }
                }
        }
 }
index 047a15671f1e29e51417ee4cb3be37de5d1fa86f..d369bac4ec192db99f04978d17c38c28128015b4 100644 (file)
@@ -1,5 +1,5 @@
 void free_skeleton_from_frames(entity e);
-void skeleton_from_frames(entity e);
+void skeleton_from_frames(entity e, float is_dead);
 void skeleton_loadinfo(entity e);
 
 .float bone_upperbody;
index c37481b9763763ea066f942639a01604a7f0e050..b5af66126f7fbec2e6b6d3b93c77077eaa678cbf 100644 (file)
@@ -244,7 +244,7 @@ void MapList_All(entity btn, entity me)
 {
        float i;
        string s;
-       MapInfo_FilterGametype(MAPINFO_TYPE_ALL, 0, 0, MAPINFO_FLAG_FORBIDDEN | MAPINFO_FLAG_HIDDEN, 0); // all
+       MapInfo_FilterGametype(MAPINFO_TYPE_ALL, 0, 0, MapInfo_ForbiddenFlags(), 0); // all
        s = "";
        for(i = 0; i < MapInfo_count; ++i)
                s = strcat(s, " ", MapInfo_BSPName_ByID(i));
index 4118b5ea08ba670795bed6f79785f27a6342150b..cdebc8c7b2a8a978a23f9b3f08a1cb7a1c87e2ed 100644 (file)
@@ -618,8 +618,11 @@ void FixPlayermodel()
                self.skin = stof(self.playerskin);
        }
 
-       if(chmdl || oldskin != self.skin)
-               self.species = player_getspecies(); // model or skin has changed
+       if(chmdl || oldskin != self.skin) // model or skin has changed
+       {
+               self.species = player_getspecies(); // update species
+               UpdatePlayerSounds(); // update skin sounds
+       }
 
        if(!teamplay)
                if(strlen(autocvar_sv_defaultplayercolors))
index 27293f7ba21c7d533133bc43c35dce9067bce7f3..efa6c0ad5c36d56e324e44054bf3be7d33161f82 100644 (file)
@@ -588,7 +588,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
 {
        float mirrordamage;
        float mirrorforce;
-       float teamdamage0;
+       float complainteamdamage = 0; 
        entity attacker_save;
        mirrordamage = 0;
        mirrorforce = 0;
@@ -668,10 +668,10 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
                                        {
                                                if(targ.classname == "player" && targ.deadflag == DEAD_NO)
                                                {
-                                                       teamdamage0 = max(attacker.dmg_team, autocvar_g_teamdamage_threshold);
                                                        attacker.dmg_team = attacker.dmg_team + damage;
-                                                       if(attacker.dmg_team > teamdamage0 && !g_ca)
-                                                               mirrordamage = autocvar_g_mirrordamage * (attacker.dmg_team - teamdamage0);
+                                                       complainteamdamage = attacker.dmg_team - autocvar_g_teamdamage_threshold;
+                                                       if(complainteamdamage > 0 && !g_ca) // FIXME why is g_ca ruled out here? Why not just g_mirrordamage 0 on CA servers?
+                                                               mirrordamage = autocvar_g_mirrordamage * complainteamdamage;
                                                        mirrorforce = autocvar_g_mirrordamage * vlen(force);
                                                        if(g_minstagib)
                                                        {
@@ -746,6 +746,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
                        {
                                damage = 0;
                                mirrordamage = 0;
+                               complainteamdamage = 0;
                                if (targ != attacker)
                                {
                                        if ((targ.health >= 1) && (targ.classname == "player"))
@@ -761,6 +762,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
                {
                        damage *= g_weapondamagefactor;
                        mirrordamage *= g_weapondamagefactor;
+                       complainteamdamage *= g_weapondamagefactor;
                        force = force * g_weaponforcefactor;
                        mirrorforce *= g_weaponforcefactor;
                }
@@ -890,7 +892,7 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float
                                        {
                                                attacker.typehitsound += 1;
                                        }
-                                       if(mirrordamage > 0)
+                                       if(complainteamdamage > 0)
                                                if(time > attacker.teamkill_complain)
                                                {
                                                        attacker.teamkill_complain = time + 5;
index f7a7122aa673feb06a3c4111ce2b847bb8fdf5c3..8649c07a6b25d4a8449aef37e8794cd67f89bb13 100644 (file)
@@ -853,7 +853,7 @@ void spawnfunc_worldspawn (void)
        for(i = 0, j = 0; i < MapInfo_count; ++i)
        {
                if(MapInfo_Get_ByID(i))
-                       if not(MapInfo_Map_flags & (MAPINFO_FLAG_HIDDEN | MAPINFO_FLAG_FORBIDDEN))
+                       if not(MapInfo_Map_flags & MapInfo_ForbiddenFlags())
                        {
                                if(mod(i, 2))
                                        col = "^2";