Ely now has "Destroy Weapon" ability, and Trog "Burn Books". The latter is very powerful as it explicitly allows burning monsters, which is cool but might be too strong. I couldn't think of a rationale for Trog not to allow this, though.
Also, all killings are now accepted without prayer, and sacrifice-loving gods won't acccept rotten corpses anymore.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@1959 c06c8d41-db1a-0410-9941-cceddc491573
WZNB427K3EUNV3FMVXLQTM4UIHER4FIKQXWLUUXRNQC3OQ33VQYAC
4O3VTUJT5T7NBNF3Q45XO2WHS6TCJXVLH6CKX4K36WUBDRT5F6KAC
XMX2Y7QSEXGV2SPDOFDNM2BQJH3S3WTMYLJYUREYV72NWTURHMSQC
KFULGQQOHWUTXOM3BXCCYPGGVGGY4Z6265XUFRCBPNLTZAEHJZSQC
K2CS6TCX2NDVL2ASEHGP4J4K4IJ6FP3ANNKTSIWVG43HPYSBX6ZQC
TR4NPGNO5QNNRJNVMNSUEO5QLT37HCXXDOBKXCB5XWXRQNAJ5SHAC
RPOZZWKG5GLPHVZZ7ZKMKS64ZMV2LDCQSARBJFJ6FZOTOKCQO7FAC
CQ24AVAI6SW3AHTIDMLPSTRRBEU6FHRF5I5FD6G5QIYE6PO4BQMQC
NVD2HSEW2ONWNYDDCTOMZZOUP6NG4DCXI4LNYYIY4BQEBDMJQK5AC
IC6N445KSNOOEJNPWBGEWYMGOLNLJ2QGZWS2R3K6EQSCEQXDUFTQC
MBBPLL4SZUB3JUUYQYLZW7S5OXRCEGJX3WWADOQXGHWQ7BIKCY5QC
264FLET5STFALEWUDOEFCR273Y5CY2WZDHL56WHZUAQ635RUN6MAC
JW2KRJHES33W7UTWZ6NDO4TLMK4EFU4HKZXBWR2UJOMPCCOTR4CQC
KW43PGXTTM57DXUGGBQXJ5G5OYYIY3WB76TXIKL2ZCIJGH7GH4LAC
WXSNNK2RXP3DQFAEQGQUZJHFWXJC7ZKG2WURZGL566UDM4YXFSWQC
P2ZCF3BBG523ZEOD6XQA4X5YEHBTWH3IM33YVHXP2SQ5POXZIH4QC
simple_god_message(" did not appreciate that!");
ret = true;
piety_change = -level;
penance = level * 2;
// killing only disapproved during prayer
if (you.duration[DUR_PRAYER])
{
simple_god_message(" did not appreciate that!");
ret = true;
piety_change = -level;
penance = level * 2;
}
}
void ely_destroy_weapons()
{
if (you.religion != GOD_ELYVILON)
return;
bool success;
int i = igrd[you.x_pos][you.y_pos];
while (i != NON_ITEM)
{
const int next = mitm[i].link; // in case we can't get it later.
if (mitm[i].base_type != OBJ_WEAPONS
&& mitm[i].base_type != OBJ_MISSILES)
{
i = next;
continue;
}
const char *ssuffix = mitm[i].quantity == 1? "s" : "";
std::string text = mitm[i].name(DESC_CAP_THE);
text += " shimmer"; text += ssuffix;
text += " and break"; text += ssuffix;
text += " into pieces.";
mpr(text.c_str());
const int value = item_value( mitm[i], true );
#ifdef DEBUG_DIAGNOSTICS
mprf(MSGCH_DIAGNOSTICS, "Destroyed weapon value: %d", value);
#endif
if (random2(value) >= random2(50)
|| (mitm[i].base_type == OBJ_WEAPONS
&& (you.piety < 30 || player_under_penance())))
{
gain_piety(1);
}
destroy_item(i);
success = true;
i = next;
}
if (!success)
{
mpr("There are no weapons here to destroy!");
}
}
void trog_burn_books()
{
if (you.religion != GOD_TROG)
return;
int i = igrd[you.x_pos][you.y_pos];
while (i != NON_ITEM)
{
const int next = mitm[i].link; // in case we can't get it later.
if (mitm[i].base_type == OBJ_BOOKS
&& mitm[i].sub_type != BOOK_MANUAL)
{
mpr("Burning your own feet might not be such a smart idea!");
return;
}
i = next;
}
int totalcount = 0;
for (int xpos = you.x_pos - 8; xpos < you.x_pos + 8; xpos++)
for (int ypos = you.y_pos - 8; ypos < you.y_pos + 8; ypos++)
{
// checked above
if (xpos == you.x_pos && ypos == you.y_pos)
{
continue;
}
// burn only squares in sight
if (!see_grid(xpos, ypos))
{
continue;
}
// if a grid is blocked, books lying there will be ignored
// allow bombing of monsters
const int cloud = env.cgrid[xpos][ypos];
if (grid_is_solid(grd[ xpos ][ ypos ]) ||
// mgrd[ xpos ][ ypos ] != NON_MONSTER ||
(cloud != EMPTY_CLOUD && env.cloud[cloud].type != CLOUD_FIRE))
{
continue;
}
int count = 0;
int rarity = 0;
i = igrd[xpos][ypos];
while (i != NON_ITEM)
{
const int next = mitm[i].link; // in case we can't get it later.
if (mitm[i].base_type != OBJ_BOOKS
|| mitm[i].sub_type == BOOK_MANUAL)
{
i = next;
continue;
}
rarity += book_rarity(mitm[i].sub_type);
#ifdef DEBUG_DIAGNOSTICS
mprf(MSGCH_DIAGNOSTICS, "Burned book rarity: %d", rarity);
#endif
destroy_item(i);
count++;
i = next;
}
if (count)
{
totalcount += count;
if ( cloud != EMPTY_CLOUD )
{
// reinforce the cloud
mpr( "The fire roars with new energy!" );
const int extra_dur = count + random2(rarity/2);
env.cloud[cloud].decay += extra_dur * 5;
env.cloud[cloud].whose = KC_YOU;
continue;
}
int durat = 4 + count + random2(rarity/2);
if (durat > 23)
durat = 23;
place_cloud( CLOUD_FIRE, xpos, ypos, durat, KC_YOU );
const char *plural = count == 1? "" : "s";
const char *ssuffix = count == 1? "s" : "";
std::string text = "The book"; text += plural;
text += " burst"; text += ssuffix;
text += " into flames.";
mpr(text.c_str());
}
}
if (!totalcount)
{
mpr("There are no books in sight to burn!");
}
else
{
simple_god_message(" is delighted!", GOD_TROG);
gain_piety(totalcount*5);
}
if (you.duration[DUR_PRAYER])
{
if (mons_holiness(monster) == MH_NATURAL)
did_god_conduct(DID_DEDICATED_KILL_LIVING,
monster->hit_dice);
if (mons_holiness(monster) == MH_NATURAL)
did_god_conduct(DID_KILL_LIVING,
monster->hit_dice);
//jmf: Trog hates wizards
if (mons_is_magic_user(monster))
did_god_conduct(DID_DEDICATED_KILL_WIZARD,
monster->hit_dice);
//jmf: Trog hates wizards
if (mons_is_magic_user(monster))
did_god_conduct(DID_KILL_WIZARD,
monster->hit_dice);
//jmf: maybe someone hates priests?
if (mons_class_flag(monster->type, M_PRIEST))
did_god_conduct(DID_DEDICATED_KILL_PRIEST,
monster->hit_dice);
}
//Beogh hates priests
if (mons_class_flag(monster->type, M_PRIEST))
did_god_conduct(DID_KILL_PRIEST,
monster->hit_dice);
DID_DEDICATED_KILL_LIVING,
DID_DEDICATED_KILL_UNDEAD,
DID_DEDICATED_KILL_DEMON,
DID_DEDICATED_KILL_NATURAL_EVIL, // unused
DID_DEDICATED_KILL_WIZARD,
DID_DEDICATED_KILL_PRIEST,
// [dshaligram] No distinction between killing Angels during prayer or
// otherwise, borrowed from bwr 4.1.
// killings need no longer be dedicated (JPEG)
DID_KILL_LIVING,
DID_KILL_UNDEAD,
DID_KILL_DEMON,
DID_KILL_NATURAL_EVIL, // unused
DID_KILL_WIZARD,
DID_KILL_PRIEST,