qboolean stalker_blocked (edict_t *self, float dist) { qboolean onCeiling; if(!has_valid_enemy(self)) return false; onCeiling = false; if(self->gravityVector[2] > 0) onCeiling = true; if(!onCeiling) { if(blocked_checkshot(self, 0.25 + (0.05 * skill->value) )) { return true; } if(visible (self, self->enemy)) { stalker_do_pounce(self, self->enemy->s.origin); return true; } if(blocked_checkjump (self, dist, 256, 68)) { stalker_jump (self); return true; } if(blocked_checkplat (self, dist)) return true; } else { if(blocked_checkshot(self, 0.25 + (0.05 * skill->value) )) { return true; } else if(stalker_ok_to_transition(self)) { self->gravityVector[2] = -1; self->s.angles[2] += 180.0; if(self->s.angles[2] > 360.0) self->s.angles[2] -= 360.0; self->groundentity = NULL; return true; } } return false; }
// PMM - kamikaze code .. blow up if blocked int flyer_blocked (edict_t *self, float dist) { vec3_t origin; // kamikaze = 100, normal = 50 if (self->mass == 100) { flyer_kamikaze_check(self); // if the above didn't blow us up (i.e. I got blocked by the player) if (self->inuse) { if (self->monsterinfo.commander && self->monsterinfo.commander->inuse && !strcmp(self->monsterinfo.commander->classname, "monster_carrier")) { self->monsterinfo.commander->monsterinfo.monster_slots++; } VectorMA (self->s.origin, -0.02, self->velocity, origin); gi.WriteByte (svc_temp_entity); gi.WriteByte (TE_ROCKET_EXPLOSION); gi.WritePosition (origin); gi.multicast (self->s.origin, MULTICAST_PHS); G_FreeEdict (self); } return true; } // we're a normal flyer if(blocked_checkshot (self, 0.25 + (0.05 * skill->value) )) return true; return false; }
qboolean gunner_blocked(edict_t *self, float dist) { if (!self) { return false; } if (blocked_checkshot(self, 0.25 + (0.05 * skill->value))) { return true; } if (blocked_checkplat(self, dist)) { return true; } if (blocked_checkjump(self, dist, 192, 40)) { gunner_jump(self); return true; } return false; }
qboolean widow_blocked(edict_t *self, float dist) { if (!self) { return false; } if (self->monsterinfo.currentmove == &widow_move_run_attack) { self->monsterinfo.aiflags |= AI_TARGET_ANGER; if (self->monsterinfo.checkattack(self)) { self->monsterinfo.attack(self); } else { self->monsterinfo.run(self); } return true; } if (blocked_checkshot(self, 0.25 + (0.05 * skill->value))) { return true; } return false; }
qboolean widow_blocked (edict_t *self, float dist) { // if we get blocked while we're in our run/attack mode, turn on a meaningless (in this context)AI flag, // and call attack to get a new attack sequence. make sure to turn it off when we're done. // // I'm using AI_TARGET_ANGER for this purpose if (self->monsterinfo.currentmove == &widow_move_run_attack) { self->monsterinfo.aiflags |= AI_TARGET_ANGER; if (self->monsterinfo.checkattack(self)) self->monsterinfo.attack(self); else self->monsterinfo.run(self); return true; } if(blocked_checkshot (self, 0.25 + (0.05 * skill->value) )) return true; /* if(blocked_checkjump (self, dist, 192, 40)) { infantry_jump(self); return true; } if(blocked_checkplat (self, dist)) return true; */ return false; }
//=========== //PGM qboolean Makron_blocked (edict_t *self, float dist) { if(blocked_checkshot (self, 0.25 + (0.05 * skill->value) )) return true; if(blocked_checkplat (self, dist)) return true; return false; }
/* === Blocked === */ qboolean parasite_blocked (edict_t *self, float dist) { if(blocked_checkshot (self, 0.25 + (0.05 * skill->value) )) return true; if(blocked_checkjump (self, dist, 256, 68)) { parasite_jump (self); return true; } if(blocked_checkplat (self, dist)) return true; return false; // Knightmare- warning fix }
qboolean infantry_blocked (edict_t *self, float dist) { if(blocked_checkshot (self, 0.25 + (0.05 * skill->value) )) return true; if(blocked_checkjump (self, dist, 192, 40)) { infantry_jump(self); return true; } if(blocked_checkplat (self, dist)) return true; return false; }
qboolean soldier_blocked (edict_t *self, float dist) { // don't do anything if you're dodging if ((self->monsterinfo.aiflags & AI_DODGING) || (self->monsterinfo.aiflags & AI_DUCKED)) return false; if(blocked_checkshot (self, 0.25 + (0.05 * skill->value) )) return true; // if(blocked_checkjump (self, dist, 192, 40)) // { // soldier_jump(self); // return true; // } if(blocked_checkplat (self, dist)) return true; return false; }
qboolean stalker_blocked (edict_t *self, float dist) { qboolean onCeiling; // gi.dprintf("stalker_blocked\n"); if(!has_valid_enemy(self)) return false; onCeiling = false; if(self->gravityVector[2] > 0) onCeiling = true; if(!onCeiling) { if(blocked_checkshot(self, 0.25 + (0.05 * skill->value) )) { // gi.dprintf("blocked: shooting\n"); return true; } if(visible (self, self->enemy)) { // gi.dprintf("blocked: jumping at player!\n"); stalker_do_pounce(self, self->enemy->s.origin); return true; } if(blocked_checkjump (self, dist, 256, 68)) { // gi.dprintf("blocked: jumping up/down\n"); stalker_jump (self); return true; } if(blocked_checkplat (self, dist)) return true; } else { if(blocked_checkshot(self, 0.25 + (0.05 * skill->value) )) { // gi.dprintf("blocked: shooting\n"); return true; } else if(stalker_ok_to_transition(self)) { self->gravityVector[2] = -1; self->s.angles[2] += 180.0; if(self->s.angles[2] > 360.0) self->s.angles[2] -= 360.0; self->groundentity = NULL; // gi.dprintf("falling off ceiling\n"); return true; } // else // gi.dprintf("Not OK to fall!\n"); } return false; }