// common.qc: common functions float() crandom = { return 2 * (random() - 0.5); }; /* ============= range returns the range catagorization of an entity reletive to self 0 melee range, will become hostile even if back is turned 1 visibility and infront, or visibility and show hostile 2 infront and show hostile 3 only triggered by damage ============= */ float(entity targ) range = { vector spot1, spot2; float r; spot1 = self.origin + self.view_ofs; spot2 = targ.origin + targ.view_ofs; r = vlen(spot1 - spot2); if(r < 120) { return RANGE_MELEE; } if(r < 500) { return RANGE_NEAR; } if(r < 1000) { return RANGE_MID; } return RANGE_FAR; }; /* ============= visible returns 1 if the entity is visible to self, even if not infront() ============= */ float(entity targ) visible = { vector spot1, spot2; spot1 = self.origin + self.view_ofs; spot2 = targ.origin + targ.view_ofs; traceline(spot1, spot2, TRUE, self); // see through other monsters if(trace_inopen && trace_inwater) { return FALSE; // sight line crossed contents } if(trace_fraction == 1) { return TRUE; } return FALSE; }; /* ============= infront returns 1 if the entity is in front(in sight) of self ============= */ float(entity targ) infront = { vector vec; float dot; makevectors(self.angles); vec = normalize(targ.origin - self.origin); dot = vec * v_forward; if(dot > 0.3) { return TRUE; } return FALSE; }; // EOF