#define FOR_EACH_SPEC(v) FOR_EACH_CLIENT(v) if not(IS_PLAYER(v)) // Samual: shouldn't this be IS_SPEC(v)? and rather create a separate macro to include observers too
#define FOR_EACH_REALPLAYER(v) FOR_EACH_REALCLIENT(v) if(IS_PLAYER(v))
+#define FOR_EACH_MONSTER(v) for(v = world; (v = findflags(v, flags, FL_MONSTER)) != world; )
+
#define CENTER_OR_VIEWOFS(ent) (ent.origin + (IS_PLAYER(ent) ? ent.view_ofs : ((ent.mins + ent.maxs) * 0.5)))
// copies a string to a tempstring (so one can strunzone it)
g_bugrigs_speed_pow = cvar("g_bugrigs_speed_pow");
g_bugrigs_steer = cvar("g_bugrigs_steer");
+ monster_skill = cvar("g_monsters_skill");
+
g_minstagib = cvar("g_minstagib");
sv_clones = cvar("sv_clones");
// these can be traceLINES as we already verified the starting box
mstart = start + 0.5 * (e.mins + e.maxs);
traceline(mstart, mstart + '1 0 0' * delta_x, MOVE_NORMAL, e);
- if (trace_fraction >= 1)
+ if (trace_fraction >= 1 || trace_dphittexturename == "common/caulk")
continue;
traceline(mstart, mstart - '1 0 0' * delta_x, MOVE_NORMAL, e);
- if (trace_fraction >= 1)
+ if (trace_fraction >= 1 || trace_dphittexturename == "common/caulk")
continue;
traceline(mstart, mstart + '0 1 0' * delta_y, MOVE_NORMAL, e);
- if (trace_fraction >= 1)
+ if (trace_fraction >= 1 || trace_dphittexturename == "common/caulk")
continue;
traceline(mstart, mstart - '0 1 0' * delta_y, MOVE_NORMAL, e);
- if (trace_fraction >= 1)
+ if (trace_fraction >= 1 || trace_dphittexturename == "common/caulk")
continue;
traceline(mstart, mstart + '0 0 1' * delta_z, MOVE_NORMAL, e);
- if (trace_fraction >= 1)
+ if (trace_fraction >= 1 || trace_dphittexturename == "common/caulk")
continue;
- // rule 4: we must "see" some spawnpoint
+ // rule 4: we must "see" some spawnpoint or item
for(sp = world; (sp = find(sp, classname, "info_player_deathmatch")); )
if(checkpvs(mstart, sp))
- break;
+ if((traceline(mstart, sp.origin, MOVE_NORMAL, e), trace_fraction) >= 1)
+ break;
if(!sp)
{
for(sp = world; (sp = findflags(sp, flags, FL_ITEM)); )
if(checkpvs(mstart, sp))
- break;
+ if((traceline(mstart, sp.origin + (sp.mins + sp.maxs) * 0.5, MOVE_NORMAL, e), trace_fraction) >= 1)
+ break;
if(!sp)
continue;
}