time there. Needs more tuning.
[1773000] Fixed tracer crash, mea culpa.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1995 c06c8d41-db1a-0410-9941-cceddc491573
ID373JATLMWAY526Q6Q5FXHRNFWMEOFXPHGPAUUY5OAMPFDN5SJAC
3C2VE43SHCSBY4LTRTFYFLIPRWFUN6DXU6D34QVWDQTSNRBUFG7AC
UZ6N6HOUPGVSPC5NQROEEDWMEGJA5XUWUY2AKH5QG65AZ25PVXDAC
GVCGKTH5IJ4VSQEIN4CRC7ZFVZW26JPIYNCPTO7GY66CSZZEW3ZQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
DTO3EUKWHZ5RJNGNCFYXSOVTIPVXPP637F2W7WFGYKJ7JK7VNKNQC
L5CVPV5IUBSO4EE3WK4O6SQGIMIEPSMQONFBWEVGJBR2HATLPZIAC
GQL5SIGBHLU3FMCE54XVGLRY5AZHRM6DUEB722REA2DPLGJSN6EQC
6GSPAIEMWJXYSCR5EC2WBOGYDEDR6ESIZC6TKN2FVE2CVPSHUHXAC
I7NXCEKCEBDWOGO7EDNRZ36GELP3P5GTOOXQG2YS5TXZTCNN7CDQC
Y3JUMLOAM4C4NFHTXM2I6ECUFNDCFJOTNOA2RDE7PZMFVVJYWHPQC
TV3ZC6WOZKSQQJQN26JIVKCHK6UK7WMDBYZDUYRWEAZ4JB4YVNAAC
}
static void hell_spawn_random_monsters()
{
const int speedup_turn = 1339;
// Monster generation in the Vestibule starts ratcheting up quickly
// after speedup_turn turns spent in the Vestibule.
int genodds = (you.char_direction == GDT_DESCENDING) ? 240 : 8;
if (env.turns_on_level > speedup_turn)
{
genodds -= (env.turns_on_level - speedup_turn) / 12;
if (genodds < 3)
genodds = 3;
}
if (one_chance_in(genodds))
{
int distance_odds = 10;
if (env.turns_on_level > speedup_turn)
distance_odds -= (env.turns_on_level - speedup_turn) / 100;
if (distance_odds < 2)
distance_odds = 2;
proximity_type prox =
(one_chance_in(distance_odds) ? PROX_NEAR_STAIRS
: PROX_AWAY_FROM_PLAYER);
mons_place( WANDERING_MONSTER, BEH_HOSTILE, MHITNOT, false,
50, 50, LEVEL_DUNGEON, prox );
viewwindow(true, false);
}
}
void spawn_random_monsters()
{
if (player_in_branch(BRANCH_VESTIBULE_OF_HELL))
{
hell_spawn_random_monsters();
return;
}
// place normal dungeon monsters, but not in player LOS
if (you.level_type == LEVEL_DUNGEON
&& !player_in_branch( BRANCH_ECUMENICAL_TEMPLE )
&& one_chance_in((you.char_direction == GDT_DESCENDING) ? 240 : 8))
{
proximity_type prox = (one_chance_in(10) ? PROX_NEAR_STAIRS
: PROX_AWAY_FROM_PLAYER);
// The rules change once the player has picked up the Orb...
if (you.char_direction == GDT_ASCENDING)
prox = (one_chance_in(6) ? PROX_CLOSE_TO_PLAYER : PROX_ANYWHERE);
mons_place( WANDERING_MONSTER, BEH_HOSTILE, MHITNOT, false,
50, 50, LEVEL_DUNGEON, prox );
viewwindow(true, false);
}
// place Abyss monsters.
if (you.level_type == LEVEL_ABYSS && one_chance_in(5))
{
mons_place( WANDERING_MONSTER, BEH_HOSTILE, MHITNOT, false,
50, 50, LEVEL_ABYSS, PROX_ANYWHERE );
viewwindow(true, false);
}
// place Pandemonium monsters
if (you.level_type == LEVEL_PANDEMONIUM && one_chance_in(50))
{
pandemonium_mons();
viewwindow(true, false);
}
// No monsters in the Labyrinth, or the Ecumenical Temple, or in Bazaars.
// place normal dungeon monsters, but not in player LOS
if (you.level_type == LEVEL_DUNGEON
&& !player_in_branch( BRANCH_ECUMENICAL_TEMPLE )
&& one_chance_in((you.char_direction == GDT_DESCENDING) ? 240 : 8))
{
proximity_type prox = (one_chance_in(10) ? PROX_NEAR_STAIRS
: PROX_AWAY_FROM_PLAYER);
// The rules change once the player has picked up the Orb...
if (you.char_direction == GDT_ASCENDING)
prox = (one_chance_in(6) ? PROX_CLOSE_TO_PLAYER : PROX_ANYWHERE);
mons_place( WANDERING_MONSTER, BEH_HOSTILE, MHITNOT, false,
50, 50, LEVEL_DUNGEON, prox );
viewwindow(true, false);
}
// place Abyss monsters.
if (you.level_type == LEVEL_ABYSS && one_chance_in(5))
{
mons_place( WANDERING_MONSTER, BEH_HOSTILE, MHITNOT, false,
50, 50, LEVEL_ABYSS, PROX_ANYWHERE );
viewwindow(true, false);
}
// place Pandemonium monsters
if (you.level_type == LEVEL_PANDEMONIUM && one_chance_in(50))
{
pandemonium_mons();
viewwindow(true, false);
}
// No monsters in the Labyrinth, or the Ecumenical Temple, or in Bazaars.
return;
spawn_random_monsters();