WepSet warmup_start_weapons;
WepSet warmup_start_weapons_default;
WepSet warmup_start_weapons_defaultmask;
+#define WARMUP_START_WEAPONS ((g_warmup_allguns == 1) ? (warmup_start_weapons & (weaponsInMap | start_weapons)) : warmup_start_weapons)
float warmup_start_ammo_shells;
float warmup_start_ammo_nails;
float warmup_start_ammo_rockets;
for (i = WEP_FIRST; i <= WEP_LAST; ++i)
{
e = get_weaponinfo(i);
- float w = want_weapon("g_start_weapon_", e, cvar("g_warmup_allguns"));
+ float w = want_weapon("g_start_weapon_", e, g_warmup_allguns);
if(w & 1)
warmup_start_weapons |= WepSet_FromWeapon(i);
if(w & 2)
warmup_start_ammo_fuel = max(warmup_start_ammo_fuel, cvar("g_balance_fuel_rotstable"));
}
+ WepSet precache_weapons = start_weapons;
+ if (g_warmup_allguns != 1)
+ precache_weapons |= warmup_start_weapons;
for (i = WEP_FIRST; i <= WEP_LAST; ++i)
{
e = get_weaponinfo(i);
- if((start_weapons | warmup_start_weapons) & WepSet_FromWeapon(i))
+ if(precache_weapons & WepSet_FromWeapon(i))
weapon_action(i, WR_PRECACHE);
}
// 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;
}