(SubgameEntity self, GameExportsImpl gameExports)
| 125 | |
| 126 | // ============================================================================ |
| 127 | public static void monster_start(SubgameEntity self, GameExportsImpl gameExports) { |
| 128 | if (gameExports.gameCvars.deathmatch.value != 0) { |
| 129 | gameExports.freeEntity(self); |
| 130 | return; |
| 131 | } |
| 132 | |
| 133 | if ((self.spawnflags & 4) != 0 |
| 134 | && 0 == (self.monsterinfo.aiflags & GameDefines.AI_GOOD_GUY)) { |
| 135 | self.spawnflags &= ~4; |
| 136 | self.spawnflags |= 1; |
| 137 | // gi.dprintf("fixed spawnflags on %s at %s\n", self.classname, |
| 138 | // vtos(self.s.origin)); |
| 139 | } |
| 140 | |
| 141 | if (0 == (self.monsterinfo.aiflags & GameDefines.AI_GOOD_GUY)) |
| 142 | gameExports.level.total_monsters++; |
| 143 | |
| 144 | self.think.nextTime = gameExports.level.time + Defines.FRAMETIME; |
| 145 | self.svflags |= Defines.SVF_MONSTER; |
| 146 | self.s.renderfx |= Defines.RF_FRAMELERP; |
| 147 | self.takedamage = Defines.DAMAGE_AIM; |
| 148 | self.air_finished = gameExports.level.time + 12; |
| 149 | self.use = GameUtil.monster_use; |
| 150 | self.max_health = self.health; |
| 151 | self.clipmask = Defines.MASK_MONSTERSOLID; |
| 152 | |
| 153 | self.s.skinnum = 0; |
| 154 | self.deadflag = GameDefines.DEAD_NO; |
| 155 | self.svflags &= ~Defines.SVF_DEADMONSTER; |
| 156 | |
| 157 | if (null == self.monsterinfo.checkattack) |
| 158 | self.monsterinfo.checkattack = GameUtil.M_CheckAttack; |
| 159 | Math3D.VectorCopy(self.s.origin, self.s.old_origin); |
| 160 | |
| 161 | if (self.st.item != null && self.st.item.length() > 0) { |
| 162 | self.item = GameItems.FindItemByClassname(self.st.item, gameExports); |
| 163 | if (self.item == null) |
| 164 | gameExports.gameImports.dprintf("monster_start:" + self.classname + " at " |
| 165 | + Lib.vtos(self.s.origin) + " has bad item: " |
| 166 | + self.st.item + "\n"); |
| 167 | } |
| 168 | |
| 169 | // randomize what frame they start on |
| 170 | if (self.monsterinfo.currentmove != null) |
| 171 | self.s.frame = self.monsterinfo.currentmove.firstframe |
| 172 | + (Lib.rand() % (self.monsterinfo.currentmove.lastframe |
| 173 | - self.monsterinfo.currentmove.firstframe + 1)); |
| 174 | |
| 175 | } |
| 176 | |
| 177 | public static void monster_start_go(SubgameEntity self, GameExportsImpl gameExports) { |
| 178 |
no test coverage detected