git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@2926 c06c8d41-db1a-0410-9941-cceddc491573
6PAG7GHXHIYXJPPTEK4KZQZT4CL2SJDAGTVIUDB4KK66PVSTWUMAC
3NRASCNNNVJPCVJTAEEWAFEQVHDWR7BKQNS3CGMR5J4TFEJIFD6AC
GCDBSJXJCPEK4NCX5CVGDBK3432PFCU5OCO2F3DA32332ALI2ZYQC
BPUGGHPCAEHMTBKRHBXGMTXC7UF5A6TUWTUUYXBO35EILBTIP6YAC
3IJHKZOTXLU7B6F4UIKXCQCPXEVLKRX2M3VWAAPGRLL24IIP2T2QC
RRNEVUYOK5S4M4QH77N34IXSSNUXVQAIZQLXAQKQCRITMPUKGP6AC
NC7EZH4YRVHK635D4KT6JAQWPQH4DUSXZTBR7NDLAMFFDIQSU3ZAC
PIGVTTBAQGNHOCX6IXJLGVVURBAT77SD6FQUVTTI5SFTV563GMZQC
P2YNOE2TUTZFAOBTHJOIVD6TCV7J7D2UKUX67LHZUL6QY44ZMENQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
2H32CFFM2FNS63JJPNM2S6HMO543EX72GMPOU5GI6HTMQYPL6I3AC
ENN23K4IMPAAICA5IXCZBOMWAUXGXWR46AIEWUEDVSHSSJNQB63QC
E42EFZ3RINKLTGOJJZAH2N5QF3P4S5NCO5T52HLXJRMBPP463HTAC
KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC
NLQNXH3SVJ52CWXEV35FSSZP32VHC4QFGN3HINF4KO5GZHZMOBKQC
SS6MUIJYTGIVBYU356Z563QJWLJ47QNHSJWS7GJTS7EATZH2ESJQC
WHY6LRRJ5T2NSBE3IUCR4X3TOAH7TTK5NPUPUIFT7TPNJ6J4HBDAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
4HATGRJJE7Q6LXHJ3ZGYTNBLG542KAUEK6ERKARIYRKRWY6VTDKQC
YATODO2EN3AW7IXW5PL25HHK34YHF6Y32QBMOUZXEATZZ4YQQWZQC
CQ24AVAI6SW3AHTIDMLPSTRRBEU6FHRF5I5FD6G5QIYE6PO4BQMQC
6L4EP4ZRWWYLT55PD5KTTJON5J2JB5VV5MWNHF5VPZQZ5BKEYZ4QC
LOJYD6QZRNLNDDZJKVBMKQIBPTKSRN2ETCYGNVV47M7L3QLUJUJAC
WZNB427K3EUNV3FMVXLQTM4UIHER4FIKQXWLUUXRNQC3OQ33VQYAC
XKAJWK6MPHS3ZCZIPPLTIMOPF6AROGLRDDCS6EFE3IGE4AHT7MYQC
4O3VTUJT5T7NBNF3Q45XO2WHS6TCJXVLH6CKX4K36WUBDRT5F6KAC
VBG2GGMVC66LQM4OSI67VKXGAQK4GVOEHX3OL6V3IFOO52MQL72QC
X5WLJCJVW55SXZVP7IKP7ADCJIGNKN4PKAXFECVR6TNK7XSMZR7QC
3GSAVTNKEG45AT2U734R5STSRP22WJZL3H6KUFRUWCIA6A4CZE5QC
5BJPWUPLJFS34FUTFJVKA4A52YMIGV6EWDXLNSDCWBJWBGVSQFGQC
YIIILIV4ZPRIPWWT4GL7YWSJCUVH6RJJLXV4XIHY6SF3H7Y3EAYAC
case GOD_ZIN:
case GOD_SHINING_ONE:
case GOD_ELYVILON:
case GOD_OKAWARU:
case GOD_BEOGH: // added penance to avoid killings for loot
// deliberately no extra punishment for killing
if (you.religion != GOD_BEOGH ||
(victim && mons_species(victim->id()) == MONS_ORC))
{
piety_change = -level;
if (known)
penance = level * 3;
ret = true;
}
break;
default:
break;
piety_change = -level;
if (known)
penance = level * 3;
ret = true;
{
const int piety_loss = -piety_change;
if (piety_loss)
{
// output guilt message:
mprf( "You feel%sguilty.",
(piety_loss == 1) ? " a little " :
(piety_loss < 5) ? " " :
(piety_loss < 10) ? " very "
: " extremely " );
lose_piety( piety_loss );
}
dock_piety(-piety_change, penance);
}
static void dock_piety(int piety_loss, int penance)
{
static long last_piety_lecture = -1L;
static long last_penance_lecture = -1L;
if (piety_loss <= 0 && penance <= 0)
return;
if (piety_loss)
{
if (last_piety_lecture != you.num_turns)
{
// output guilt message:
mprf( "You feel%sguilty.",
(piety_loss == 1) ? " a little " :
(piety_loss < 5) ? " " :
(piety_loss < 10) ? " very "
: " extremely " );
}
last_piety_lecture = you.num_turns;
lose_piety( piety_loss );
}
if (you.piety < 1)
excommunication();
else if (penance) // only if still in religion
{
if (last_penance_lecture != you.num_turns)
god_speaks( you.religion,
"\"You will pay for your transgression, mortal!\"" );
last_penance_lecture = you.num_turns;
inc_penance( penance );
}
bool god_hates_attacking_friend(god_type god, const actor *fr)
{
if (!fr || fr->kill_alignment() != KC_FRIENDLY)
return (false);
switch (god)
{
case GOD_ZIN:
case GOD_SHINING_ONE:
case GOD_ELYVILON:
case GOD_OKAWARU:
return (true);
case GOD_BEOGH: // added penance to avoid killings for loot
return (fr && mons_species(fr->id()) == MONS_ORC);
default:
return (false);
}
}
}
/////////////////////////////////////////////////////////////////////
// god_conduct_trigger
god_conduct_trigger::god_conduct_trigger(
conduct_type c, int pg, bool kn, const monsters *vict)
: conduct(c), pgain(pg), known(kn), enabled(true), victim(NULL)
{
if (vict)
{
victim.reset(new monsters);
*(victim.get()) = *vict;
}
void god_conduct_trigger::set(conduct_type c, int pg, bool kn,
const monsters *vict)
{
conduct = c;
pgain = pg;
known = kn;
victim.reset(NULL);
if (vict)
{
victim.reset(new monsters);
*victim.get() = *vict;
}
}
god_conduct_trigger::~god_conduct_trigger()
{
if (enabled && conduct != NUM_CONDUCTS)
did_god_conduct(conduct, pgain, known, victim.get());
}