Attached Files |
xom-chess-piece.patch [^] (15,308 bytes) 2015-10-22 20:27 [Show Content] [Hide Content]From 4f6293aeb432cb525483b701d2a4b3893ca78b4c Mon Sep 17 00:00:00 2001
From: "Edgar A. Bering IV" <trizor@gmail.com>
Date: Tue, 20 Oct 2015 21:00:03 -0500
Subject: [PATCH 1/2] Pieces from Xom's Chessboard.
Create an item that when evoked has Xom Rearrange the Pieces,
with a check against evocations skill to instead just draw a bad
Xom action. Followers of Xom are immune from this check. The effect
is sufficiently double-edged that, with the added chance of a bad
Xom action, spamming this item to confuse everything in sight will
probably get the player killed instead. The severity of the bad
Xom action might need a minimum higher than zero.
As a further protection against spamming it's got a small chance
of disappearing (being taken back by Xom).
Acquires at the same weight as Box of beasts. Has a chance to be
given to a wanderer on game start.
---
crawl-ref/source/acquire.cc | 11 ++++----
crawl-ref/source/dat/descript/items.txt | 6 +++++
crawl-ref/source/evoke.cc | 47 +++++++++++++++++++++++++++++++++
crawl-ref/source/itemname.cc | 10 +++++++
crawl-ref/source/itemprop-enum.h | 3 ++-
crawl-ref/source/items.cc | 2 ++
crawl-ref/source/makeitem.cc | 3 ++-
crawl-ref/source/ng-wanderer.cc | 2 +-
crawl-ref/source/rltiles/dc-item.txt | 1 +
crawl-ref/source/tilepick.cc | 3 +++
crawl-ref/source/xom.cc | 4 +--
crawl-ref/source/xom.h | 1 +
12 files changed, 83 insertions(+), 10 deletions(-)
diff --git a/crawl-ref/source/acquire.cc b/crawl-ref/source/acquire.cc
index ff54755..7a9a693 100644
--- a/crawl-ref/source/acquire.cc
+++ b/crawl-ref/source/acquire.cc
@@ -654,17 +654,18 @@ static int _acquirement_misc_subtype(bool /*divine*/, int & /*quantity*/)
// These have charges, so
// give them a constant
// weight.
- (player_mutation_level(MUT_NO_LOVE) ? 0 : 7), MISC_BOX_OF_BEASTS,
- (player_mutation_level(MUT_NO_LOVE) ? 0 : 7), MISC_SACK_OF_SPIDERS,
- (player_mutation_level(MUT_NO_LOVE) ? 0 : 7), MISC_PHANTOM_MIRROR,
+ (player_mutation_level(MUT_NO_LOVE) ? 0 : 6), MISC_BOX_OF_BEASTS,
+ (player_mutation_level(MUT_NO_LOVE) ? 0 : 6), MISC_SACK_OF_SPIDERS,
+ (player_mutation_level(MUT_NO_LOVE) ? 0 : 6), MISC_PHANTOM_MIRROR,
+ 6, MISC_XOMS_CHESSBOARD,
// The player never needs
// more than one.
- (you.seen_misc[MISC_DISC_OF_STORMS] ? 0 : 7), MISC_DISC_OF_STORMS,
+ (you.seen_misc[MISC_DISC_OF_STORMS] ? 0 : 6), MISC_DISC_OF_STORMS,
(you.seen_misc[MISC_LAMP_OF_FIRE] ? 0 : 15), MISC_LAMP_OF_FIRE,
(you.seen_misc[MISC_PHIAL_OF_FLOODS] ? 0 : 15), MISC_PHIAL_OF_FLOODS,
(you.seen_misc[MISC_FAN_OF_GALES] ? 0 : 15), MISC_FAN_OF_GALES,
(you.seen_misc[MISC_STONE_OF_TREMORS] ? 0 : 15), MISC_STONE_OF_TREMORS,
- (you.seen_misc[MISC_LANTERN_OF_SHADOWS] ? 0 : 7), MISC_LANTERN_OF_SHADOWS,
+ (you.seen_misc[MISC_LANTERN_OF_SHADOWS] ? 0 : 6), MISC_LANTERN_OF_SHADOWS,
0);
// Give a crystal ball based on both evocations and either spellcasting or
diff --git a/crawl-ref/source/dat/descript/items.txt b/crawl-ref/source/dat/descript/items.txt
index f5a20c5..c4b6aef 100644
--- a/crawl-ref/source/dat/descript/items.txt
+++ b/crawl-ref/source/dat/descript/items.txt
@@ -1535,6 +1535,12 @@ A long plaited strip of leather. Originally developed for use in disagreements
with cattle, this simple weapon is now widely used to settle differences
between all sorts of creatures.
%%%%
+piece from Xom's chessboard
+
+A shimmering multi-coloured chesspiece belonging to Xom, god of chaos.
+Moving it will invite Xom to take a turn in some cosmic game, though only
+worshippers know the 'rules'. A bad move could prove quite disaterous.
+%%%%
young poisoner's handbook
A introductory book for the magic arts of poison.
diff --git a/crawl-ref/source/evoke.cc b/crawl-ref/source/evoke.cc
index 7029c85..fc1ebc5 100644
--- a/crawl-ref/source/evoke.cc
+++ b/crawl-ref/source/evoke.cc
@@ -1910,6 +1910,44 @@ static bool _phial_of_floods()
return false;
}
+static bool _xoms_chessboard(item_def &board)
+{
+ if (get_nearby_monsters(false, true).empty())
+ {
+ mpr("Xom won't come play if there aren't more players.");
+ return false;
+ }
+
+ mpr("You make a move on Xom's chessboard...");
+
+ if (one_chance_in(100))
+ {
+ god_speaks(GOD_XOM, "Xom booms, \"MINE!\"");
+ mpr("...but Xom just steals the piece!");
+ ASSERT(in_inventory(board));
+ dec_inv_item_quantity(board.link, 1);
+ return true;
+ }
+
+ // Those who do not follow the mad god have
+ // a chance of a bad Xom action instead if they
+ // break a rule. Who knows how bad it could be, though?
+ // It's Xom.
+ // Those who have abandoned Xom will know only suffering
+ int fail_rate = 30 - you.skill(SK_EVOCATIONS);
+ if (!you_worship(GOD_XOM) &&
+ (x_chance_in_y(fail_rate, 100) || player_under_penance(GOD_XOM)))
+ {
+ god_speaks(GOD_XOM, "Xom laughs nastily.");
+ xom_acts(false, random_range(0, 100));
+ return true;
+ }
+
+ xom_rearrange_pieces(you.skill_rdiv(SK_EVOCATIONS, 100, 27));
+ xom_is_stimulated(10);
+ return true;
+}
+
static void _expend_xp_evoker(item_def &item)
{
evoker_debt(item.sub_type) = XP_EVOKE_DEBT;
@@ -2300,6 +2338,15 @@ bool evoke_item(int slot, bool check_range)
return false;
break;
+ case MISC_XOMS_CHESSBOARD:
+ if (_xoms_chessboard(item))
+ {
+ pract = 1;
+ }
+ else
+ return false;
+ break;
+
case MISC_BOX_OF_BEASTS:
if (_box_of_beasts(item))
pract = 1;
diff --git a/crawl-ref/source/itemname.cc b/crawl-ref/source/itemname.cc
index 703cf93..f9ebd9c 100644
--- a/crawl-ref/source/itemname.cc
+++ b/crawl-ref/source/itemname.cc
@@ -970,6 +970,7 @@ static string misc_type_name(int type, bool known)
case MISC_PHIAL_OF_FLOODS: return "phial of floods";
case MISC_SACK_OF_SPIDERS: return "sack of spiders";
case MISC_PHANTOM_MIRROR: return "phantom mirror";
+ case MISC_XOMS_CHESSBOARD: return "piece from Xom's chessboard";
default:
return "buggy miscellaneous item";
@@ -3395,6 +3396,15 @@ bool is_dangerous_item(const item_def &item, bool temp)
return false;
}
+ case OBJ_MISCELLANY:
+ switch (item.sub_type)
+ {
+ case MISC_XOMS_CHESSBOARD:
+ return !you_worship(GOD_XOM);
+ default:
+ return false;
+ }
+
default:
return false;
}
diff --git a/crawl-ref/source/itemprop-enum.h b/crawl-ref/source/itemprop-enum.h
index 1f00b03..beab3e5 100644
--- a/crawl-ref/source/itemprop-enum.h
+++ b/crawl-ref/source/itemprop-enum.h
@@ -263,6 +263,7 @@ enum misc_item_type
#if TAG_MAJOR_VERSION == 34
MISC_DECK_OF_ODDITIES,
#endif
+ MISC_XOMS_CHESSBOARD,
NUM_MISCELLANY,
MISC_DECK_UNKNOWN = NUM_MISCELLANY,
@@ -286,7 +287,7 @@ const vector<misc_item_type> misc_types =
MISC_LANTERN_OF_SHADOWS, MISC_HORN_OF_GERYON, MISC_BOX_OF_BEASTS,
MISC_CRYSTAL_BALL_OF_ENERGY, MISC_DISC_OF_STORMS, MISC_PHIAL_OF_FLOODS,
MISC_QUAD_DAMAGE, MISC_SACK_OF_SPIDERS,
- MISC_PHANTOM_MIRROR,
+ MISC_PHANTOM_MIRROR, MISC_XOMS_CHESSBOARD,
#if TAG_MAJOR_VERSION == 34
MISC_BOTTLED_EFREET, MISC_BUGGY_EBONY_CASKET,
#endif
diff --git a/crawl-ref/source/items.cc b/crawl-ref/source/items.cc
index f3fd640..9b5e6d9 100644
--- a/crawl-ref/source/items.cc
+++ b/crawl-ref/source/items.cc
@@ -3730,6 +3730,8 @@ colour_t item_def::miscellany_colour() const
case MISC_BUGGY_EBONY_CASKET:
return DARKGREY;
#endif
+ case MISC_XOMS_CHESSBOARD:
+ return ETC_RANDOM;
case MISC_QUAD_DAMAGE:
return ETC_DARK;
default:
diff --git a/crawl-ref/source/makeitem.cc b/crawl-ref/source/makeitem.cc
index d98dd4e..aa53193 100644
--- a/crawl-ref/source/makeitem.cc
+++ b/crawl-ref/source/makeitem.cc
@@ -1798,7 +1798,8 @@ static void _generate_misc_item(item_def& item, int force_type, int force_ego)
MISC_SACK_OF_SPIDERS,
MISC_CRYSTAL_BALL_OF_ENERGY,
MISC_LANTERN_OF_SHADOWS,
- MISC_PHANTOM_MIRROR);
+ MISC_PHANTOM_MIRROR,
+ MISC_XOMS_CHESSBOARD);
}
// set initial charges
diff --git a/crawl-ref/source/ng-wanderer.cc b/crawl-ref/source/ng-wanderer.cc
index 8019aab..3fc540c 100644
--- a/crawl-ref/source/ng-wanderer.cc
+++ b/crawl-ref/source/ng-wanderer.cc
@@ -402,7 +402,7 @@ static void _wanderer_random_evokable()
int selected_evoker =
random_choose(MISC_BOX_OF_BEASTS, MISC_LAMP_OF_FIRE,
MISC_STONE_OF_TREMORS, MISC_FAN_OF_GALES,
- MISC_PHIAL_OF_FLOODS);
+ MISC_PHIAL_OF_FLOODS, MISC_XOMS_CHESSBOARD);
int charges = 0;
if (selected_evoker == MISC_BOX_OF_BEASTS)
charges = random_range(10, 15, 2);
diff --git a/crawl-ref/source/rltiles/dc-item.txt b/crawl-ref/source/rltiles/dc-item.txt
index 40199c6..45b9d95 100644
--- a/crawl-ref/source/rltiles/dc-item.txt
+++ b/crawl-ref/source/rltiles/dc-item.txt
@@ -984,6 +984,7 @@ misc_disc MISC_DISC_OF_STORMS
%rim 0
misc_sack MISC_SACK_OF_SPIDERS
misc_phantom_mirror MISC_PHANTOM_MIRROR
+misc_crystal MISC_XOMS_CHESSBOARD
misc_deck MISC_DECK
%start
%compose misc_deck
diff --git a/crawl-ref/source/tilepick.cc b/crawl-ref/source/tilepick.cc
index 42a3962..db4d689 100644
--- a/crawl-ref/source/tilepick.cc
+++ b/crawl-ref/source/tilepick.cc
@@ -4026,6 +4026,9 @@ static tileidx_t _tileidx_misc(const item_def &item)
return evoker_is_charged(item) ? TILE_MISC_PHIAL_OF_FLOODS
: TILE_MISC_PHIAL_OF_FLOODS_INERT;
+ case MISC_XOMS_CHESSBOARD:
+ return TILE_MISC_XOMS_CHESSBOARD;
+
case MISC_LANTERN_OF_SHADOWS:
return TILE_MISC_LANTERN_OF_SHADOWS;
diff --git a/crawl-ref/source/xom.cc b/crawl-ref/source/xom.cc
index 5454293..3ff255f 100644
--- a/crawl-ref/source/xom.cc
+++ b/crawl-ref/source/xom.cc
@@ -1306,7 +1306,7 @@ bool swap_monsters(monster* m1, monster* m2)
// Swap places with a random monster and, depending on severity, also
// between monsters. This can be pretty bad if there are a lot of
// hostile monsters around.
-static int _xom_rearrange_pieces(int sever, bool debug = false)
+int xom_rearrange_pieces(int sever, bool debug)
{
if (player_stair_delay() || monster_at(you.pos()))
return XOM_DID_NOTHING;
@@ -2068,7 +2068,7 @@ static int _xom_is_good(int sever, int tension, bool debug = false)
else if (tension > 0 && x_chance_in_y(13, sever))
done = _xom_destruction(sever, debug);
else if (tension > 0 && x_chance_in_y(14, sever))
- done = _xom_rearrange_pieces(sever, debug);
+ done = xom_rearrange_pieces(sever, debug);
else if (tension > 0 && x_chance_in_y(15, sever))
{
diff --git a/crawl-ref/source/xom.h b/crawl-ref/source/xom.h
index ef8324b..51b0d10 100644
--- a/crawl-ref/source/xom.h
+++ b/crawl-ref/source/xom.h
@@ -102,6 +102,7 @@ void xom_new_level_noise_or_stealth();
void debug_xom_effects();
#endif
+int xom_rearrange_pieces(int sever, bool debug = false);
bool swap_monsters(monster* m1, monster* m2);
bool move_stair(coord_def stair_pos, bool away, bool allow_under);
--
2.3.2 (Apple Git-55)
From 9fd1fcdddc43b93a7d514d7330cc1613e0e8eeb8 Mon Sep 17 00:00:00 2001
From: "Edgar A. Bering IV" <trizor@gmail.com>
Date: Thu, 22 Oct 2015 12:33:48 -0500
Subject: [PATCH 2/2] Terrible programmer art for a Xom chess piece.
---
crawl-ref/source/rltiles/dc-item.txt | 2 +-
crawl-ref/source/rltiles/item/misc/misc_chesspiece.png | Bin 0 -> 1422 bytes
2 files changed, 1 insertion(+), 1 deletion(-)
create mode 100644 crawl-ref/source/rltiles/item/misc/misc_chesspiece.png
diff --git a/crawl-ref/source/rltiles/dc-item.txt b/crawl-ref/source/rltiles/dc-item.txt
index 45b9d95..02a72e6 100644
--- a/crawl-ref/source/rltiles/dc-item.txt
+++ b/crawl-ref/source/rltiles/dc-item.txt
@@ -984,7 +984,7 @@ misc_disc MISC_DISC_OF_STORMS
%rim 0
misc_sack MISC_SACK_OF_SPIDERS
misc_phantom_mirror MISC_PHANTOM_MIRROR
-misc_crystal MISC_XOMS_CHESSBOARD
+misc_chesspiece MISC_XOMS_CHESSBOARD
misc_deck MISC_DECK
%start
%compose misc_deck
diff --git a/crawl-ref/source/rltiles/item/misc/misc_chesspiece.png b/crawl-ref/source/rltiles/item/misc/misc_chesspiece.png
new file mode 100644
index 0000000000000000000000000000000000000000..c76c6af0140690bb3aafac387e0d25914cecdb15
GIT binary patch
literal 1422
zcmV;91#$X`P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000B<X+uL$Nkc;*
zP;zf(X>4Tx062|}Ro!pfR1`mnZ(O7nKcKOW4i$^9Ra0BJ8yc;~21%2p=|UR0&DbiW
z$#rfTQ`a`O(`{9s_5yDV_yd5l2Of}kLK+Oj_Ok5(v`JGz71bo9J#^YYXp{DWs&KBa
zQ@dTpxRI}aIp=pi@6k0t$5)!;m`NF6-tt{FpOKHBn3g+MAqmexC-gw4rh87hTrL7G
z#)U`L!(So6-Zux@>;H3gR;i~0B%VTSS3P|m@o9jRsXML@Al^p#@G0Lx-0?i(9WEw_
zSYddU<1E8793KxjQ|c&UmW!m<wJPEz#Qifd`D_gH9D=nYPc7;iy3Be}cI}#B(pb7r
zQ2)<0Z#G)-dhzM<<|dEgyN}ggcgNHaf39n}NyINBzUKHDCVv(2y~bQ6jd(9W@|l`@
zq{8{hHx}zt?;zfZxN7)?sZhRX&6Fm%ZE|_eKB|VCYq~dzJ%bk!->TC>k>?{om1c9S
zUx<6_jj_<bFzzi(=30Ih>!T&^M{wWM#><F%5P#^}>IBbOSf*xP<^F{$j$aOQ5Y{cT
zROCL1M7^NKK<?M4#<(px;Nu~3TQXfUjub-vl4Az5h`EvTZbPkvoEw^(%X2^EKD8>L
z&(yA}mSw#iM0^;IB{ZO5!wl{^Sg-*ysE~&Yz8!E;Qv(A`lu*=Clo*MpVGd>OdF6n^
zam1Jntk;<}MrqIC5$=Q>n{*R}?8oOIDUw5En2dl--Xw34!z7E+5pr<Twj7JkV%^#F
z^FB1tE8`u5%(<RMUli}Gd(zOafAsejYx|L$X)B+22f)J)w3q|&`mZkiuq*PhLN2^}
zv+L>-OgyQ-soSab)C%saskMla`aQLVzg0+MZf20tJU&K{hZoBrUc+U4e9&<J19^6g
zw<TiDI@c3vSSRQQrH3Ur+aF1l-;_U<73B-%ymEJ2m)mwp_*D2-_)+*y_+I!KWZ{x<
zS@=n~B77rUjGfiv=VSBigL+%lGEKW)Q!u5Bv|D;f%1SRtuSmtnpVTc4Nn_F;)a>3o
zw|KmGEe4#xz17wBu{f`SS_4i66?j31EjY7n{zGfhONK~c+td!TS#B}JoR}5UAd7p&
z5phTyXSkK0xCeD3xaYP^o&J~#Xp9xFb0C;HHml5fA<%h1eR|qw7wxF+oN<lWx-aij
zl-K1neyXTku=K%xSu;&JP<gUTJ?bvd>L9T1Aits?sKNIwvGaN)^WO$I^cUV)HzL_|
z1K?{9p!>B*)`xfEv!4N6IG{J&h49W#Bz^(#YWw%`e_a{8n{G9m5AeR~_yl0%<7V@p
z<z{o^OZ2}6aLN1^Spac(61Cxm00045Nkl<ZSPAV`Ne;sx41_|@{X@Ty|39gR9(s(Z
z4Z%r>4bCF9kwS&)Sa@bUKon!HadHR3Uj4Tn0K3VN+inyP!a#3%1U}1<ZE=9ejSYtT
z0Z)|Ib<YRGIZLUP4pl^sog=w4>}YP4L+b#75IK<sRI$X5<ftv_lU2eJPhfHo0rH;b
zW#x0u&;FCPrNYUgmIJYC71;!o!h;+jyfVl)K=gR81J1cOl1LK-RqfTBfwHN!&%t{S
zJA^wmP5?=_GathWYQ2L>VIpD7Pxo`IY-~g85RO3e2pgVfxTgj=mTVEABS&<_Em$o8
z_8g&w0WD9BQ8<v62yjBW;s68J5V6_;K@_F^9UMZ^JX=?lD)j-HT$>*~)X7%HuJOfF
zI>6<IHO&^8QzO=BZax(cz)k$a4<RW~2A6=JJ5YPCmb>`!&e^{2@fOg4Zw5AJigi?Q
c1^?#27a3T0tS?chYXATM07*qoM6N<$g6~qUSpWb4
literal 0
HcmV?d00001
--
2.3.2 (Apple Git-55)
|