From: Mario Date: Sat, 13 Apr 2013 12:29:39 +0000 (+1000) Subject: Move monster model precaching/loading to the client X-Git-Tag: xonotic-v0.8.0~241^2^2~416 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=45a8e48e48b38b656df29bb4646ac2815780c293;p=xonotic%2Fxonotic-data.pk3dir.git Move monster model precaching/loading to the client --- diff --git a/qcsrc/client/Main.qc b/qcsrc/client/Main.qc index 630e34fe2..e0d063c8f 100644 --- a/qcsrc/client/Main.qc +++ b/qcsrc/client/Main.qc @@ -172,6 +172,7 @@ void CSQC_Init(void) precache_all_playermodels("models/player/*.iqm"); } + Monsters_Precache(); Projectile_Precache(); Hook_Precache(); GibSplash_Precache(); diff --git a/qcsrc/client/monsters.qc b/qcsrc/client/monsters.qc index 257b27f54..93c094345 100644 --- a/qcsrc/client/monsters.qc +++ b/qcsrc/client/monsters.qc @@ -9,7 +9,7 @@ void monster_mid2info(float _mid); void monster_precache(float _mid) { monster_mid2info(_mid); - if(turret_is_precache[_mid]) + if(monster_precached[_mid]) return; switch(_mid) @@ -89,6 +89,13 @@ void monster_precache(float _mid) monster_precached[_mid] = TRUE; } +void Monsters_Precache() +{ + float i; + for(i = MONSTER_FIRST; i <= MONSTER_LAST; ++i) + monster_precache(i); +} + void monster_mid2info(float _mid) { switch(_mid) diff --git a/qcsrc/client/monsters.qh b/qcsrc/client/monsters.qh index aa6fb4126..83dac2956 100644 --- a/qcsrc/client/monsters.qh +++ b/qcsrc/client/monsters.qh @@ -1 +1,2 @@ void ent_monster(); +void Monsters_Precache(); diff --git a/qcsrc/server/monsters/lib/monsters.qc b/qcsrc/server/monsters/lib/monsters.qc index 34928345f..4af941e5c 100644 --- a/qcsrc/server/monsters/lib/monsters.qc +++ b/qcsrc/server/monsters/lib/monsters.qc @@ -927,7 +927,6 @@ void monster_hook_spawn() } float monster_initialize(string net_name, float mon_id, - string bodymodel, vector min_s, vector max_s, float nodrop, @@ -944,10 +943,6 @@ float monster_initialize(string net_name, float mon_id, if(monster_skill == autocvar_g_monsters_skill_insane && (self.spawnflags & MONSTERSKILL_NOTINSANE)) { return FALSE; } if(monster_skill >= autocvar_g_monsters_skill_nightmare && (self.spawnflags & MONSTERSKILL_NOTNIGHTMARE)) { return FALSE; } - if(self.model == "" || self.model == "null") - if(bodymodel == "") - error("monsters: missing bodymodel!"); - if(self.netname == "") { if(net_name != "" && IS_PLAYER(self.realowner)) @@ -966,22 +961,15 @@ float monster_initialize(string net_name, float mon_id, if(self.spawnflags & MONSTERFLAG_GIANT && !autocvar_g_monsters_nogiants) self.scale = 5; - if(self.team && !teamplay) self.team = 0; self.flags = FL_MONSTER; - - if(self.model && self.model != "null") - bodymodel = self.model; // TODO: find out why monsters can become invisible if not(self.spawnflags & MONSTERFLAG_SPAWNED) // naturally spawned monster if not(self.monster_respawned) monsters_total += 1; - - precache_model(bodymodel); - setmodel(self, bodymodel); ScaleMonster(self.scale, min_s, max_s); self.takedamage = DAMAGE_AIM; diff --git a/qcsrc/server/monsters/monster/demon.qc b/qcsrc/server/monsters/monster/demon.qc index 3e52b8cc2..a417dd8b2 100644 --- a/qcsrc/server/monsters/monster/demon.qc +++ b/qcsrc/server/monsters/monster/demon.qc @@ -114,7 +114,6 @@ void spawnfunc_monster_demon () if not (monster_initialize( "Fiend", MONSTER_DEMON, - DEMON_MODEL, DEMON_MIN, DEMON_MAX, FALSE, demon_die, demon_spawn)) diff --git a/qcsrc/server/monsters/monster/dog.qc b/qcsrc/server/monsters/monster/dog.qc index 0095a905b..66385e4ae 100644 --- a/qcsrc/server/monsters/monster/dog.qc +++ b/qcsrc/server/monsters/monster/dog.qc @@ -106,7 +106,6 @@ void spawnfunc_monster_dog () if not (monster_initialize( "Cerberus", MONSTER_DOG, - DOG_MODEL, DOG_MIN, DOG_MAX, FALSE, dog_die, dog_spawn)) diff --git a/qcsrc/server/monsters/monster/enforcer.qc b/qcsrc/server/monsters/monster/enforcer.qc index 88af41902..d9720258c 100644 --- a/qcsrc/server/monsters/monster/enforcer.qc +++ b/qcsrc/server/monsters/monster/enforcer.qc @@ -119,6 +119,10 @@ void enforcer_spawn () self.attack_ranged = enforcer_attack; self.view_ofs *= 0.5; + monsters_setframe(enforcer_anim_stop); + + setmodel(self, ENFORCER_MODEL); // for weapon entity + self.weaponentity = spawn(); self.weaponentity.owner = self; self.weaponentity.team = self.team; @@ -148,10 +152,12 @@ void spawnfunc_monster_enforcer () if(Monster_CheckAppearFlags(self)) return; + + precache_model("models/turrets/ewheel-gun1.md3"); + precache_model(ENFORCER_MODEL); if not (monster_initialize( "Enforcer", MONSTER_ENFORCER, - ENFORCER_MODEL, ENFORCER_MIN, ENFORCER_MAX, FALSE, enforcer_die, enforcer_spawn)) diff --git a/qcsrc/server/monsters/monster/fish.qc b/qcsrc/server/monsters/monster/fish.qc index 677a496f8..afbb13baa 100644 --- a/qcsrc/server/monsters/monster/fish.qc +++ b/qcsrc/server/monsters/monster/fish.qc @@ -79,7 +79,6 @@ void spawnfunc_monster_fish () if not (monster_initialize( "Rotfish", MONSTER_FISH, - FISH_MODEL, FISH_MIN, FISH_MAX, TRUE, fish_die, fish_spawn)) diff --git a/qcsrc/server/monsters/monster/hknight.qc b/qcsrc/server/monsters/monster/hknight.qc index fca42d953..f231b0c06 100644 --- a/qcsrc/server/monsters/monster/hknight.qc +++ b/qcsrc/server/monsters/monster/hknight.qc @@ -450,7 +450,6 @@ void spawnfunc_monster_hell_knight () if not (monster_initialize( "Hell-knight", MONSTER_HELLKNIGHT, - HELLKNIGHT_MODEL, HELLKNIGHT_MIN, HELLKNIGHT_MAX, FALSE, hellknight_die, hellknight_spawn)) diff --git a/qcsrc/server/monsters/monster/knight.qc b/qcsrc/server/monsters/monster/knight.qc index 17ade040a..07701b659 100644 --- a/qcsrc/server/monsters/monster/knight.qc +++ b/qcsrc/server/monsters/monster/knight.qc @@ -93,7 +93,6 @@ void spawnfunc_monster_knight () if not (monster_initialize( "Knight", MONSTER_KNIGHT, - KNIGHT_MODEL, KNIGHT_MIN, KNIGHT_MAX, FALSE, knight_die, knight_spawn)) diff --git a/qcsrc/server/monsters/monster/ogre.qc b/qcsrc/server/monsters/monster/ogre.qc index 653fcb619..2710d5855 100644 --- a/qcsrc/server/monsters/monster/ogre.qc +++ b/qcsrc/server/monsters/monster/ogre.qc @@ -162,7 +162,6 @@ void spawnfunc_monster_ogre () if not (monster_initialize( "Ogre", MONSTER_OGRE, - OGRE_MODEL, OGRE_MIN, OGRE_MAX, FALSE, ogre_die, ogre_spawn)) diff --git a/qcsrc/server/monsters/monster/shalrath.qc b/qcsrc/server/monsters/monster/shalrath.qc index 40d30979e..2d481ac4f 100644 --- a/qcsrc/server/monsters/monster/shalrath.qc +++ b/qcsrc/server/monsters/monster/shalrath.qc @@ -288,7 +288,6 @@ void spawnfunc_monster_shalrath () if not (monster_initialize( "Mage", MONSTER_MAGE, - SHALRATH_MODEL, SHALRATH_MIN, SHALRATH_MAX, FALSE, shalrath_die, shalrath_spawn)) diff --git a/qcsrc/server/monsters/monster/shambler.qc b/qcsrc/server/monsters/monster/shambler.qc index afa983d22..cea6f94be 100644 --- a/qcsrc/server/monsters/monster/shambler.qc +++ b/qcsrc/server/monsters/monster/shambler.qc @@ -183,7 +183,6 @@ void spawnfunc_monster_shambler () if not (monster_initialize( "Shambler", MONSTER_SHAMBLER, - SHAMBLER_MODEL, SHAMBLER_MIN, SHAMBLER_MAX, FALSE, shambler_die, shambler_spawn)) diff --git a/qcsrc/server/monsters/monster/soldier.qc b/qcsrc/server/monsters/monster/soldier.qc index 11c3663b1..8b5c20fd5 100644 --- a/qcsrc/server/monsters/monster/soldier.qc +++ b/qcsrc/server/monsters/monster/soldier.qc @@ -177,6 +177,8 @@ void soldier_spawn () monsters_setframe(soldier_anim_draw); + setmodel(self, SOLDIER_MODEL); + RandomSelection_Init(); RandomSelection_Add(world, WEP_LASER, string_null, autocvar_g_monster_soldier_weapon_laser_chance, 1); RandomSelection_Add(world, WEP_SHOTGUN, string_null, autocvar_g_monster_soldier_weapon_shotgun_chance, 1); @@ -205,10 +207,12 @@ void spawnfunc_monster_soldier () if(Monster_CheckAppearFlags(self)) return; + + precache_model("models/weapons/v_seeker.md3"); + precache_model(SOLDIER_MODEL); if not (monster_initialize( - "Grunt", MONSTER_MARINE, - SOLDIER_MODEL, + "Marine", MONSTER_MARINE, SOLDIER_MIN, SOLDIER_MAX, FALSE, soldier_die, soldier_spawn)) diff --git a/qcsrc/server/monsters/monster/spider.qc b/qcsrc/server/monsters/monster/spider.qc index 63da385fc..cb22046c7 100644 --- a/qcsrc/server/monsters/monster/spider.qc +++ b/qcsrc/server/monsters/monster/spider.qc @@ -191,7 +191,6 @@ void spawnfunc_monster_spider() if not (monster_initialize( "Spider", MONSTER_SPIDER, - SPIDER_MODEL, SPIDER_MIN, SPIDER_MAX, FALSE, spider_die, spider_spawn)) diff --git a/qcsrc/server/monsters/monster/tarbaby.qc b/qcsrc/server/monsters/monster/tarbaby.qc index 0ad255346..be67702a0 100644 --- a/qcsrc/server/monsters/monster/tarbaby.qc +++ b/qcsrc/server/monsters/monster/tarbaby.qc @@ -145,7 +145,6 @@ void spawnfunc_monster_tarbaby () if not (monster_initialize( "Spawn", MONSTER_TARBABY, - TARBABY_MODEL, TARBABY_MIN, TARBABY_MAX, FALSE, tarbaby_die, tarbaby_spawn)) diff --git a/qcsrc/server/monsters/monster/wizard.qc b/qcsrc/server/monsters/monster/wizard.qc index 58c0fe0ed..301f91e7c 100644 --- a/qcsrc/server/monsters/monster/wizard.qc +++ b/qcsrc/server/monsters/monster/wizard.qc @@ -164,7 +164,6 @@ void spawnfunc_monster_wizard () if not (monster_initialize( "Scrag", MONSTER_SCRAG, - WIZARD_MODEL, WIZARD_MIN, WIZARD_MAX, TRUE, wizard_die, wizard_spawn)) diff --git a/qcsrc/server/monsters/monster/zombie.qc b/qcsrc/server/monsters/monster/zombie.qc index 225ede8a4..48ab86c16 100644 --- a/qcsrc/server/monsters/monster/zombie.qc +++ b/qcsrc/server/monsters/monster/zombie.qc @@ -163,7 +163,6 @@ void spawnfunc_monster_zombie() if not (monster_initialize( "Zombie", MONSTER_ZOMBIE, - ZOMBIE_MODEL, ZOMBIE_MIN, ZOMBIE_MAX, FALSE, zombie_die, zombie_spawn))