]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Adjust new monster models animations in the code LegendaryGuard/update_monsters
authorLegendaryGuard <rootuser999@gmail.com>
Mon, 13 Dec 2021 23:10:09 +0000 (00:10 +0100)
committerLegendaryGuard <rootuser999@gmail.com>
Mon, 13 Dec 2021 23:10:09 +0000 (00:10 +0100)
qcsrc/common/monsters/monster/mage.qc
qcsrc/common/monsters/monster/shambler.qc
qcsrc/common/monsters/monster/spider.qc
qcsrc/common/monsters/monster/wyvern.qc

index 74a041b156c26784041019f6ee126c21658f920e..b0636795bee2dee18338ce5cb232377c9b0a455b 100644 (file)
@@ -69,13 +69,20 @@ float autocvar_g_monster_mage_speed_stop;
 float autocvar_g_monster_mage_speed_run;
 float autocvar_g_monster_mage_speed_walk;
 
+//For a new model, it will work wrong with old model, there are more animations for it. Probably, the unused animations will be used in the future
 /*
 const float mage_anim_idle             = 0;
 const float mage_anim_walk             = 1;
-const float mage_anim_attack   = 2;
-const float mage_anim_pain             = 3;
-const float mage_anim_death            = 4;
-const float mage_anim_run              = 5;
+const float mage_anim_attack1  = 2;
+const float mage_anim_spawn    = 3; // Or attack4
+const float mage_anim_attack2  = 4;
+const float mage_anim_attack3  = 5;
+const float mage_anim_pain             = 6;
+const float mage_anim_pain             = 7;
+const float mage_anim_pain             = 8;
+const float mage_anim_death            = 9;
+const float mage_anim_death2           = 10;
+const float mage_anim_run              = 1;
 */
 
 void M_Mage_Defend_Heal(entity this);
@@ -428,13 +435,15 @@ METHOD(Mage, mr_think, bool(Mage thismon, entity actor))
 METHOD(Mage, mr_pain, float(Mage this, entity actor, float damage_take, entity attacker, float deathtype))
 {
     TC(Mage, this);
+    actor.pain_finished = time + 0.34;
+    setanim(actor, ((random() > 0.5) ? actor.anim_pain1 : actor.anim_pain2), true, true, false);
     return damage_take;
 }
 
 METHOD(Mage, mr_death, bool(Mage this, entity actor))
 {
     TC(Mage, this);
-    setanim(actor, actor.anim_die1, false, true, true);
+    setanim(actor, ((random() > 0.5) ? actor.anim_die1 : actor.anim_die2), false, true, true);
     return true;
 }
 
@@ -444,12 +453,16 @@ METHOD(Mage, mr_anim, bool(Mage this, entity actor))
 {
     TC(Mage, this);
     vector none = '0 0 0';
-    actor.anim_die1 = animfixfps(actor, '4 1 0.5', none); // 2 seconds
+    actor.anim_die1 = animfixfps(actor, '9 1 0.5', none); // 2 seconds
+    actor.anim_die2 = animfixfps(actor, '10 1 0.5', none); // 2 seconds
     actor.anim_walk = animfixfps(actor, '1 1 1', none);
     actor.anim_idle = animfixfps(actor, '0 1 1', none);
-    actor.anim_pain1 = animfixfps(actor, '3 1 2', none); // 0.5 seconds
+    actor.anim_spawn = animfixfps(actor, '3 1 2', none); // 0.5 seconds
+    actor.anim_pain1 = animfixfps(actor, '6 1 2', none); // 0.5 seconds
+    actor.anim_pain2 = animfixfps(actor, '7 1 2', none); // 0.5 seconds
+    //actor.anim_pain3 = animfixfps(actor, '8 1 2', none); // 0.5 seconds, removed to make it compilable
     actor.anim_shoot = animfixfps(actor, '2 1 5', none); // analyze models and set framerate
-    actor.anim_run = animfixfps(actor, '5 1 1', none);
+    actor.anim_run = animfixfps(actor, '1 1 1', none);
     return true;
 }
 #endif
@@ -467,6 +480,9 @@ METHOD(Mage, mr_setup, bool(Mage this, entity actor))
     actor.monster_loot = ITEM_HealthBig;
     actor.monster_attackfunc = M_Mage_Attack;
 
+    setanim(actor, actor.anim_spawn, false, true, true);
+    actor.spawn_time = actor.animstate_endtime;
+    
     return true;
 }
 #endif
index 789b7afe496a1a148f2894b80c1c5a1e7cbb22be..2ed78496981816b0d8a8442ff0a3c03ff167ce64 100644 (file)
@@ -17,16 +17,25 @@ float autocvar_g_monster_shambler_speed_stop;
 float autocvar_g_monster_shambler_speed_run;
 float autocvar_g_monster_shambler_speed_walk;
 
+//For a new model
 /*
 const float shambler_anim_stand                = 0;
 const float shambler_anim_walk         = 1;
 const float shambler_anim_run          = 2;
-const float shambler_anim_smash                = 3;
+const float shambler_anim_smash                = 6;
+const float shambler_anim_smash2               = 5;
 const float shambler_anim_swingr       = 4;
-const float shambler_anim_swingl       = 5;
-const float shambler_anim_magic                = 6;
+const float shambler_anim_swingl       = 3;
+const float shambler_anim_magic                = 4;
 const float shambler_anim_pain         = 7;
-const float shambler_anim_death                = 8;
+const float shambler_anim_pain2                = 8;
+const float shambler_anim_pain3                = 9;
+const float shambler_anim_pain4                = 10;
+const float shambler_anim_pain5                = 11;
+const float shambler_anim_spawn                = 12;
+const float shambler_anim_death                = 13;
+const float shambler_anim_death2               = 15;
+const float shambler_anim_death3               = 17;
 */
 
 .float shambler_lastattack; // delay attacks separately
@@ -211,14 +220,16 @@ METHOD(Shambler, mr_pain, float(Shambler this, entity actor, float damage_take,
 {
     TC(Shambler, this);
     actor.pain_finished = time + 0.5;
-    setanim(actor, actor.anim_pain1, true, true, false);
+    setanim(actor, ((random() > 0.5) ? actor.anim_pain1 : actor.anim_pain2), true, true, false);
+    //setanim(actor, ((random() > 0.5) ? actor.anim_pain1 : actor.anim_pain2 : actor.anim_pain3 : actor.anim_pain4 : actor.anim_pain5), true, true, false);
     return damage_take;
 }
 
 METHOD(Shambler, mr_death, bool(Shambler this, entity actor))
 {
     TC(Shambler, this);
-    setanim(actor, actor.anim_die1, false, true, true);
+    setanim(actor, ((random() > 0.5) ? actor.anim_die1 : actor.anim_die2), false, true, true);
+    //setanim(actor, ((random() > 0.5) ? actor.anim_die1 : actor.anim_die2 : actor.anim_die3), false, true, true);
     return true;
 }
 #endif
@@ -227,14 +238,21 @@ METHOD(Shambler, mr_anim, bool(Shambler this, entity actor))
 {
     TC(Shambler, this);
     vector none = '0 0 0';
-    actor.anim_die1 = animfixfps(actor, '8 1 0.5', none); // 2 seconds
+    actor.anim_die1 = animfixfps(actor, '13 1 0.5', none); // 2 seconds
+    actor.anim_die2 = animfixfps(actor, '15 1 0.5', none); // 2 seconds
+    //actor.anim_die3 = animfixfps(actor, '17 1 0.5', none); // 2 seconds, brokes compiling
     actor.anim_walk = animfixfps(actor, '1 1 1', none);
     actor.anim_idle = animfixfps(actor, '0 1 1', none);
     actor.anim_pain1 = animfixfps(actor, '7 1 2', none); // 0.5 seconds
-    actor.anim_melee1 = animfixfps(actor, '3 1 5', none); // analyze models and set framerate
+    actor.anim_pain2 = animfixfps(actor, '8 1 2', none); // 0.5 seconds
+    //actor.anim_pain3 = animfixfps(actor, '9 1 2', none); // 0.5 seconds, brokes compiling
+    //actor.anim_pain4 = animfixfps(actor, '10 1 2', none); // 0.5 seconds, brokes compiling
+    //actor.anim_pain5 = animfixfps(actor, '11 1 2', none); // 0.5 seconds, brokes compiling
+    actor.anim_spawn = animfixfps(actor, '12 1 0.5', none); // 2 seconds, brokes compiling
+    actor.anim_melee1 = animfixfps(actor, '6 1 5', none); // analyze models and set framerate
     actor.anim_melee2 = animfixfps(actor, '4 1 5', none); // analyze models and set framerate
-    actor.anim_melee3 = animfixfps(actor, '5 1 5', none); // analyze models and set framerate
-    actor.anim_shoot = animfixfps(actor, '6 1 5', none); // analyze models and set framerate
+    actor.anim_melee3 = animfixfps(actor, '3 1 5', none); // analyze models and set framerate
+    actor.anim_shoot = animfixfps(actor, '4 1 5', none); // analyze models and set framerate
     actor.anim_run = animfixfps(actor, '2 1 1', none);
     return true;
 }
@@ -254,7 +272,7 @@ METHOD(Shambler, mr_setup, bool(Shambler this, entity actor))
     actor.monster_loot = ITEM_HealthMega;
     actor.weapon = WEP_ELECTRO.m_id; // matches attacks better than WEP_VORTEX
 
-    setanim(actor, actor.anim_shoot, false, true, true);
+    setanim(actor, actor.anim_spawn, false, true, true);
     actor.spawn_time = actor.animstate_endtime;
     StatusEffects_apply(STATUSEFFECT_SpawnShield, actor, actor.spawn_time, 0);
     actor.monster_attackfunc = M_Shambler_Attack;
index 3f3e65d4a3dee63da2cb3d91bdf08871a7146552..4a31a904e798c73a1217615386927cb9713a6253 100644 (file)
@@ -77,11 +77,26 @@ float autocvar_g_monster_spider_speed_stop;
 float autocvar_g_monster_spider_speed_run;
 float autocvar_g_monster_spider_speed_walk;
 
+//For a new model
 /*
-const float spider_anim_idle           = 0;
-const float spider_anim_walk           = 1;
-const float spider_anim_attack         = 2;
-const float spider_anim_attack2                = 3;
+const float spider_anim_melee          = 0;
+const float spider_anim_death          = 1;
+const float spider_anim_death2         = 2;
+const float spider_anim_shoot1         = 3;
+const float spider_anim_ultrashoot             = 4;
+const float spider_anim_idle           = 5;
+const float spider_anim_spawn          = 6;
+const float spider_anim_pain           = 7;
+const float spider_anim_pain2          = 8;
+const float spider_anim_pain3          = 9;
+const float spider_anim_moveforward            = 10;
+const float spider_anim_moveforwardright               = 11;
+const float spider_anim_movebackright          = 12;
+const float spider_anim_movebackward           = 13;
+const float spider_anim_movebackleft           = 14;
+const float spider_anim_moveleft               = 15;
+const float spider_anim_moveforwardleft                = 16;
+const float spider_anim_movebackleft           = 17;
 */
 
 void M_Spider_Attack_Web_Explode(entity this)
@@ -183,14 +198,17 @@ METHOD(Spider, mr_think, bool(Spider this, entity actor))
 METHOD(Spider, mr_pain, float(Spider this, entity actor, float damage_take, entity attacker, float deathtype))
 {
     TC(Spider, this);
+    actor.pain_finished = time + 0.34;
+    setanim(actor, ((random() > 0.5) ? actor.anim_pain1 : actor.anim_pain2), true, true, false);
+    //setanim(actor, ((random() > 0.5) ? actor.anim_pain1 : actor.anim_pain2 : actor.anim_pain3), true, true, false);
     return damage_take;
 }
 
 METHOD(Spider, mr_death, bool(Spider this, entity actor))
 {
     TC(Spider, this);
-    setanim(actor, actor.anim_melee, false, true, true);
-    actor.angles_x = 180;
+    setanim(actor, ((random() > 0.5) ? actor.anim_die1 : actor.anim_die2), false, true, true);
+    actor.angles_x = 0;
     return true;
 }
 #endif
@@ -199,11 +217,17 @@ METHOD(Spider, mr_anim, bool(Spider this, entity actor))
 {
     TC(Spider, this);
     vector none = '0 0 0';
-    actor.anim_walk = animfixfps(actor, '1 1 1', none);
-    actor.anim_idle = animfixfps(actor, '0 1 1', none);
-    actor.anim_melee = animfixfps(actor, '2 1 5', none); // analyze models and set framerate
-    actor.anim_shoot = animfixfps(actor, '3 1 5', none); // analyze models and set framerate
-    actor.anim_run = animfixfps(actor, '1 1 1', none);
+    actor.anim_walk = animfixfps(actor, '10 1 1', none);
+    actor.anim_die1 = animfixfps(actor, '1 1 1', none);
+    actor.anim_die2 = animfixfps(actor, '2 1 1', none);
+    actor.anim_pain1 = animfixfps(actor, '7 1 1', none);
+    //actor.anim_pain3 = animfixfps(actor, '8 1 1', none); //brokes compiling
+    actor.anim_pain2 = animfixfps(actor, '9 1 1', none); 
+    actor.anim_idle = animfixfps(actor, '5 1 1', none); 
+    actor.anim_spawn = animfixfps(actor, '6 1 1', none);
+    actor.anim_melee = animfixfps(actor, '0 1 5', none); // analyze models and set framerate
+    actor.anim_shoot = animfixfps(actor, '4 1 5', none); // analyze models and set framerate
+    actor.anim_run = animfixfps(actor, '10 1 1', none);
     return true;
 }
 #endif
@@ -219,6 +243,9 @@ METHOD(Spider, mr_setup, bool(Spider this, entity actor))
 
     actor.monster_loot = ITEM_HealthMedium;
     actor.monster_attackfunc = M_Spider_Attack;
+    
+    setanim(actor, actor.anim_spawn, false, true, true);
+    actor.spawn_time = actor.animstate_endtime;
 
     return true;
 }
index 6b1965b542cdd4aad816a88a206f92f3f4be75a9..57135f687d7fdc86dc3b7c69d32954678d128f6c 100644 (file)
@@ -59,10 +59,14 @@ float autocvar_g_monster_wyvern_speed_walk;
 
 /*
 const float wyvern_anim_hover  = 0;
-const float wyvern_anim_fly            = 1;
-const float wyvern_anim_magic  = 2;
+const float wyvern_anim_flyrun         = 1;
+const float wyvern_anim_fly            = 2;
 const float wyvern_anim_pain   = 3;
-const float wyvern_anim_death  = 4;
+const float wyvern_anim_pain2  = 4;
+const float wyvern_anim_melee  = 5;
+const float wyvern_anim_magic  = 6;
+const float wyvern_anim_flyfast        = 7;
+const float wyvern_anim_death  = 8;
 */
 
 void M_Wyvern_Attack_Fireball_Explode(entity this)
@@ -120,7 +124,7 @@ METHOD(Wyvern, mr_pain, float(Wyvern this, entity actor, float damage_take, enti
 {
     TC(Wyvern, this);
     actor.pain_finished = time + 0.5;
-    setanim(actor, actor.anim_pain1, true, true, false);
+    setanim(actor, ((random() > 0.5) ? actor.anim_pain1 : actor.anim_pain2), true, true, false);
     return damage_take;
 }
 
@@ -139,12 +143,13 @@ METHOD(Wyvern, mr_anim, bool(Wyvern this, entity actor))
 {
     TC(Wyvern, this);
     vector none = '0 0 0';
-    actor.anim_die1 = animfixfps(actor, '4 1 0.5', none); // 2 seconds
-    actor.anim_walk = animfixfps(actor, '1 1 1', none);
+    actor.anim_die1 = animfixfps(actor, '8 1 0.5', none); // 2 seconds
+    actor.anim_walk = animfixfps(actor, '2 1 1', none);
     actor.anim_idle = animfixfps(actor, '0 1 1', none);
     actor.anim_pain1 = animfixfps(actor, '3 1 2', none); // 0.5 seconds
-    actor.anim_shoot = animfixfps(actor, '2 1 5', none); // analyze models and set framerate
-    actor.anim_run = animfixfps(actor, '1 1 1', none);
+    actor.anim_pain2 = animfixfps(actor, '4 1 2', none); // 0.5 seconds
+    actor.anim_shoot = animfixfps(actor, '6 1 5', none); // analyze models and set framerate
+    actor.anim_run = animfixfps(actor, '1 1 1', none); // or 7? They just look with the same process
     return true;
 }
 #endif