probably done in a needlessly redundant way, but I'm tired and cranky, so please do forgive me. Might be buggy, thus won't apply to 0.4 yet.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@6467 c06c8d41-db1a-0410-9941-cceddc491573
HCQBAKIE4MXJ3XID6CECTZGNWYC33C3642KOKNKO37VVRDMJ2T4QC
PTEXB5VKN7K5AZA2WPZMTWVKGVQ6PEQINSDCJIJHGJJ5NS3S4AQQC
ORZ37JMK7WY6FLTYZGC75D3POVCAZMZ7RCZIY4ZL2EGPXBMBCKJQC
4C6O4H7IO3LDZPBDGRST3QUFKMNQRB4Y6JXUV3NKIJVVPLAA2AWQC
YXWZYOBUFR4EHBSKXCFGZNK7NIM7IPE2GMZYIXEJTUPDDC3BIEDAC
ZHFUXYUHS6V47WK2NRH7OU6RX77NRKTXOZC3MND2GG7PEEWSGFTAC
SDLKLUNFGVKDS55DDJZCBAVIB7NL3RRYPTACAY65SCUQKV6APFSAC
5UVDIVD4NSXA52U4QMQIVST3GSZJ2A2YZK3RUEXKPM43YVQ7LI5AC
XHNJ2W4AQHIF32P2ENIMMDLWAIFWP442KJIZC6RKS4HBJNZIHHBAC
PO3IATZV4JX3I3522UAGF53ZLZ4FW7C2J32Z23PEWQVHGGEUO7SAC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
JPGW2YFZDRPAWPG4VAKOOB5SCJA2QSSLR5JJP7ULRBX3LLGI7PUAC
C2PRXJYHDRF2642VDAUY76HJKCPQFGWDI6AM3SMCMYCHGWYDQXQQC
S4BRP4VHB23F2FCC6BXNAN2MZRVUGW7QMXUEOAVZVGFXKXJPVLLQC
VXSORUQOM2VZA4CAZDC6KPAY373NQIN3UT7CXQXTRCYXO2WM62DAC
T6HIHZTSKZ2W2P5ADH37CFU6REFSO53OVGMPMMH3PBVZHKTK5H7QC
JDM5R3HYGXKQKZWY35QZ2KOB24TFZ3FW2PCNXCRCMWG72AZC5ZXQC
RWSXCNYUGDSMP2GKN22HROC5Q2GHSAVJJUDRT3Z53WU2DAI4IZOQC
3U54KX4JPCEBGC3USUQJVX35HBEWV6DX6ZZ4RV7GT3HBX7LMLKPAC
57E4T664CXRFPVW2BZBYI33UIHFS4PSEZURZYPSYSZK5DRLJJ5CQC
OFH2B2UZBK43QLFQBZ54FOCFLFNE54BZVDNCEUGDTBCUGNVZULIQC
QGVAXJZXG2HUCLELWAN6LJJOBSP2BS6TIZMPJTDOAGI2E2SUCOCQC
UET576SVCGS2TXEDRTO7BUTOTLJ77MYHIVZJCDWGH2BAXYMKG6DAC
return (false);
return (CC_BANNED);
switch (god)
{
case GOD_BEOGH:
if (you.species == SP_HILL_ORC)
return (CC_UNRESTRICTED);
return (CC_BANNED);
case GOD_ZIN:
switch (you.species)
{
case SP_DEMONSPAWN:
case SP_MUMMY:
case SP_GHOUL:
case SP_VAMPIRE:
return (CC_BANNED);
case SP_HIGH_ELF:
case SP_MOUNTAIN_DWARF:
return (CC_UNRESTRICTED);
default:
return (CC_RESTRICTED);
}
case GOD_YREDELEMNUL:
switch (you.species)
{
case SP_HILL_ORC:
// Restrict in favour of Beogh, else unrestricted.
if (you.char_class == JOB_PRIEST)
return (CC_RESTRICTED);
// intentional fall-through
case SP_HUMAN:
case SP_HIGH_ELF:
case SP_SLUDGE_ELF:
case SP_MOUNTAIN_DWARF:
case SP_MERFOLK:
case SP_HALFLING:
case SP_KOBOLD:
case SP_CENTAUR:
case SP_OGRE:
case SP_TROLL:
case SP_MINOTAUR:
case SP_DEMONSPAWN:
case SP_MUMMY:
case SP_GHOUL:
case SP_VAMPIRE:
return (CC_UNRESTRICTED);
default:
if (player_genus(GENPC_DRACONIAN))
return (CC_UNRESTRICTED);
return (CC_RESTRICTED);
}
if (god == GOD_BEOGH)
return (you.species == SP_HILL_ORC);
case GOD_XOM:
switch (you.species)
{
case SP_HUMAN:
case SP_MOUNTAIN_DWARF:
case SP_HILL_ORC:
case SP_MERFOLK:
case SP_CENTAUR:
case SP_OGRE:
case SP_TROLL:
case SP_MINOTAUR:
case SP_KENKU:
case SP_DEMONSPAWN:
case SP_VAMPIRE:
return (CC_UNRESTRICTED);
default:
if (player_genus(GENPC_DRACONIAN))
return (CC_UNRESTRICTED);
return (CC_RESTRICTED);
}
case GOD_MAKHLEB:
switch (you.species)
{
case SP_HUMAN:
case SP_HIGH_ELF:
case SP_SLUDGE_ELF:
case SP_MOUNTAIN_DWARF:
case SP_MERFOLK:
case SP_HALFLING:
case SP_GNOME:
case SP_KOBOLD:
case SP_CENTAUR:
case SP_OGRE:
case SP_TROLL:
case SP_MINOTAUR:
case SP_DEMONSPAWN:
case SP_MUMMY:
case SP_GHOUL:
case SP_VAMPIRE:
return (CC_UNRESTRICTED);
default:
if (player_genus(GENPC_DRACONIAN))
return (CC_UNRESTRICTED);
return (CC_RESTRICTED);
}
switch (you.species)
{
case SP_DEMONSPAWN:
case SP_MUMMY:
case SP_GHOUL:
case SP_VAMPIRE:
return (!is_good_god(god));
case GOD_LUGONU:
switch (you.species)
{
case SP_HUMAN:
case SP_MOUNTAIN_DWARF:
case SP_HILL_ORC:
case SP_MERFOLK:
case SP_SPRIGGAN:
case SP_CENTAUR:
case SP_OGRE:
case SP_TROLL:
case SP_MINOTAUR:
case SP_DEMONSPAWN:
case SP_VAMPIRE:
return (CC_UNRESTRICTED);
default:
if (player_genus(GENPC_DRACONIAN))
return (CC_UNRESTRICTED);
return (CC_RESTRICTED);
}
// For orcs 50% chance of Beogh instead.
if (you.species == SP_HILL_ORC && coinflip())
you.religion = GOD_BEOGH;
if (_religion_restriction(gods[i]) == CC_UNRESTRICTED
&& one_chance_in(++count))
{
you.religion = gods[i];
did_chose = true;
}
}
}
// Zin and Yredelemnul are valid for everyone.
// (The undead have been handled above.)
textcolor(LIGHTGREY);
cprintf("a - Zin (for traditional priests)" EOL);
cprintf("b - Yredelemnul (for priests of death)" EOL);
const char* god_name[3] = {"Zin (for traditional priests)",
"Yredelemnul (for priests of death)",
"Beogh (for priests of Orcs)"};
textcolor(LIGHTGREY);
cprintf("c - Beogh (priest of Orcs)" EOL);
if (_religion_restriction(gods[i]) == CC_BANNED)
continue;
if (_religion_restriction(gods[i]) == CC_UNRESTRICTED)
textcolor(LIGHTGREY);
else
textcolor(DARKGREY);
const char letter = 'a' + i;
cprintf("%c - %s" EOL, letter, god_name[i]);
if (keyn == '+')
{
int count = 0;
for (int i = 0; i < 3; i++)
{
if (_religion_restriction(gods[i]) == CC_BANNED)
continue;
if (_religion_restriction(gods[i])
== CC_UNRESTRICTED
&& one_chance_in(++count))
{
you.religion = gods[i];
}
}
if (count > 0)
break;
}
// intentional fall-through
case '*':
you.religion = (one_chance_in(3) ? GOD_XOM :
coinflip() ? GOD_MAKHLEB
: GOD_LUGONU);
bool did_chose = false;
if (Options.good_random)
{
int count = 0;
for (int i = 0; i < 3; i++)
{
if (_religion_restriction(gods[i]) == CC_BANNED)
continue;
if (_religion_restriction(gods[i]) == CC_UNRESTRICTED
&& one_chance_in(++count))
{
you.religion = gods[i];
did_chose = true;
}
}
}
if (!did_chose)
{
you.religion = (one_chance_in(3) ? GOD_XOM :
coinflip() ? GOD_MAKHLEB
: GOD_LUGONU);
}
// Xom, Makhleb, and Lugonu are okay choices for everyone.
textcolor( LIGHTGREY );
cprintf("a - Xom of Chaos" EOL);
cprintf("b - Makhleb the Destroyer" EOL);
cprintf("c - Lugonu the Unformed" EOL);
for (int i = 0; i < 3; i++)
{
if (_religion_restriction(gods[i]) == CC_BANNED)
continue;
if (_religion_restriction(gods[i]) == CC_UNRESTRICTED)
textcolor(LIGHTGREY);
else
textcolor(DARKGREY);
const char letter = 'a' + i;
cprintf("%c - %s" EOL, letter, god_name[i]);
}
case '+':
if (keyn == '+')
{
int count = 0;
for (int i = 0; i < 3; i++)
{
if (_religion_restriction(gods[i]) == CC_BANNED)
continue;
if (_religion_restriction(gods[i])
== CC_UNRESTRICTED
&& one_chance_in(++count))
{
you.religion = gods[i];
}
}
if (count > 0)
break;
}
// intentional fall-through
if (Options.good_random && !_necromancy_okay())
choice = DK_YREDELEMNUL;
else
bool did_chose = false;
if (Options.good_random)
{
if (_necromancy_okay())
{
choice = DK_NECROMANCY;
did_chose = true;
}
if (_religion_restriction(GOD_YREDELEMNUL) == CC_UNRESTRICTED)
{
if (!did_chose || coinflip())
choice = DK_YREDELEMNUL;
did_chose = true;
}
}
if (!did_chose)
choice = DK_YREDELEMNUL;
break;
bool did_chose = false;
if (_necromancy_okay())
{
choice = DK_NECROMANCY;
did_chose = true;
}
if (_religion_restriction(GOD_YREDELEMNUL)
== CC_UNRESTRICTED)
{
if (!did_chose || coinflip())
choice = DK_YREDELEMNUL;
did_chose = true;
}
if (did_chose)
break;