1
0
Fork 0
mirror of https://codeberg.org/noisytoot/notnotdnethack.git synced 2025-08-04 03:44:04 +01:00

Add several of the ACU artifacts up to flickering outline.

This commit is contained in:
demogorgon22 2020-12-29 20:36:09 -05:00
parent 58df2275e9
commit 370ff0eff6
9 changed files with 175 additions and 4 deletions

View file

@ -679,6 +679,7 @@ struct obj {
|| ((otmp)->oartifact == ART_BLADE_DANCER_S_DAGGER && uwep && uwep->oartifact==ART_SODE_NO_SHIRAYUKI)\
|| ((otmp)->oartifact == ART_FRIEDE_S_SCYTHE && uwep && uwep->oartifact==ART_PROFANED_GREATSCYTHE)\
|| ((otmp)->oartifact == ART_FRIEDE_S_SCYTHE && uwep && uwep->oartifact==ART_LIFEHUNT_SCYTHE)\
|| ((otmp)->oartifact == ART_MEMORY && uwep && uwep->oartifact==ART_THOUGHT)\
|| ((otmp)->oartifact == ART_MJOLLNIR && Role_if(PM_VALKYRIE))\
|| ((otmp)->oartifact == ART_CLEAVER && Role_if(PM_BARBARIAN))\
|| ((otmp)->oartifact == ART_TECPATL_OF_HUHETOTL && Role_if(PM_ARCHEOLOGIST))\

View file

@ -3938,6 +3938,7 @@ use_grapple (obj)
if (typ == P_NONE || P_SKILL(typ) <= P_BASIC) max_range = 4;
else if (P_SKILL(typ) == P_SKILLED) max_range = 5;
else max_range = 8;
if(obj->oartifact == ART_PUPPET_WIRE) max_range = 8;
if (distu(cc.x, cc.y) > max_range) {
pline("Too far!");
return (res);
@ -3951,7 +3952,8 @@ use_grapple (obj)
/* What do you want to hit? */
tohit = rn2(5);
if (typ != P_NONE && P_SKILL(typ) >= P_SKILLED) {
if(obj->oartifact == ART_PUPPET_WIRE) tohit = 2;
else if (typ != P_NONE && P_SKILL(typ) >= P_SKILLED) {
winid tmpwin = create_nhwindow(NHW_MENU);
anything any;
char buf[BUFSZ];
@ -3996,7 +3998,7 @@ use_grapple (obj)
break;
case 2: /* Monster */
if ((mtmp = m_at(cc.x, cc.y)) == (struct monst *)0) break;
if (verysmall(mtmp->data) && !rn2(4) &&
if ((obj->oartifact == ART_PUPPET_WIRE || (verysmall(mtmp->data) && !rn2(4))) &&
enexto(&cc, u.ux, u.uy, (struct permonst *)0)) {
You("pull in %s!", mon_nam(mtmp));
mtmp->mundetected = 0;

View file

@ -1782,6 +1782,9 @@ boolean narrow_only;
case AD_BLUD:
if (!has_blood_mon(mdef))
return FALSE;
case AD_DRIN:
if (mindless_mon(mdef))
return FALSE;
break;
default:
impossible("Weird weapon special attack: (%d).", weap->adtyp);
@ -3698,6 +3701,18 @@ boolean * messaged;
}
if (!rn2(4)) (void) destroy_item(mdef, POTION_CLASS, AD_COLD);
}
if(attacks(AD_DRIN, otmp)){
if (vis&VIS_MAGR)
pline_The("%s %s %s %s%c", otmp->oartifact == ART_ILLITHID_STAFF?"tentacled":"sparkling",
otmp->oartifact == ART_ILLITHID_STAFF?"staff":otmp->oartifact == ART_ELDER_CEREBRAL_FLUID?"crystal":"blade",
!spec_dbon_applies ? "hits" : otmp->oartifact == ART_ILLITHID_STAFF?"brain sucks":"mentally drains",
hittee, !spec_dbon_applies ? '.' : '!');
if(spec_dbon_applies && vis&VIS_MAGR && otmp->oartifact != ART_ILLITHID_STAFF)
if(cancel_monst(mdef, otmp, youagr, FALSE, FALSE,0)) pline_The("%s %s %s %s%c", "sparkling", otmp->oartifact==ART_ELDER_CEREBRAL_FLUID?"crystal":"blade",
"cancels",
hittee, '!');
*messaged = vis&VIS_MAGR;
}
if (oartifact == ART_SHADOWLOCK) {
if (!Cold_res(mdef)) {
if (vis&VIS_MAGR) {

View file

@ -2601,6 +2601,147 @@ A("The Hand of Vecna", SEVERED_HAND, (const char *)0,
SUMMON_UNDEAD, NOFLAG
),
/*Spirit weapons*/
A("The Crown of Berith", HELMET, (const char *)0,
9999L, GOLD, MZ_DEFAULT, WT_DEFAULT,
A_NONE, NON_PM, NON_PM, TIER_B, (ARTG_NOGEN|ARTG_NOWISH|ARTG_NOCNT),
NO_MONS(),
NO_ATTK(), (NOFLAG),
PROPS(), NOFLAG,
PROPS(), NOFLAG,
NOINVOKE, (ARTI_PLUSSEV)
),
A("The Talisman of Buer", AMULET_OF_LIFE_SAVING, (const char *)0,
9999L, MZ_DEFAULT, MZ_DEFAULT, WT_DEFAULT,
A_LAWFUL, NON_PM, NON_PM, TIER_B, (ARTG_NOGEN|ARTG_NOWISH|ARTG_NOCNT),
NO_MONS(),
NO_ATTK(), NOFLAG,
PROPS(REGENERATION, FIXED_ABIL), NOFLAG,
PROPS(), NOFLAG,
HEALING, NOFLAG
),
A("The Dread of Dantalion", TWO_HANDED_SWORD, (const char *)0,
9999L, MT_DEFAULT, MZ_DEFAULT, WT_DEFAULT,
A_LAWFUL, NON_PM, NON_PM, TIER_B, (ARTG_NOGEN|ARTG_NOWISH|ARTG_MAJOR|ARTG_NOCNT),
NO_MONS(),
ATTK(AD_PHYS, 1, 10), NOFLAG,
PROPS(), NOFLAG,
PROPS(), NOFLAG,
NOINVOKE, (ARTI_FEAR)
),
A("The Stone Mask", MASK, (const char *)0,
9999L, MINERAL, MZ_DEFAULT, 10,
A_NONE, NON_PM, NON_PM, TIER_A, (ARTG_NOGEN|ARTG_NOWISH|ARTG_NOCNT),
NO_MONS(),
NO_ATTK(), NOFLAG,
PROPS(STONE_RES, INVIS, STEALTH), NOFLAG,
PROPS(), NOFLAG,
NOINVOKE, NOFLAG
),
A("Eden's Scales", SILVER_DRAGON_SCALES, (const char *)0,
9999L, MT_DEFAULT, MZ_DEFAULT, WT_DEFAULT,
A_NONE, NON_PM, NON_PM, TIER_S, (ARTG_NOGEN|ARTG_NOWISH|ARTG_NOCNT),
NO_MONS(),
NO_ATTK(), NOFLAG,
PROPS(), NOFLAG,
PROPS(), NOFLAG,
CREATE_PORTAL, (ARTI_PLUSSEV)
),
A("Eurynome's Dancing Shoes", SPEED_BOOTS, (const char *)0,
9999L, MT_DEFAULT, MZ_DEFAULT, WT_DEFAULT,
A_NONE, NON_PM, NON_PM, TIER_S, (ARTG_NOGEN|ARTG_NOWISH|ARTG_NOCNT),
NO_MONS(),
NO_ATTK(), NOFLAG,
PROPS(STEALTH, FREE_ACTION), NOFLAG,
PROPS(), NOFLAG,
NOINVOKE, (ARTI_PLUSSEV)
),
A("Ruinous Strike", PICK_AXE, (const char *)0,
9999L, DRAGON_HIDE, MZ_DEFAULT, WT_DEFAULT,
A_NONE, NON_PM, NON_PM, TIER_B, (ARTG_NOGEN|ARTG_NOWISH|ARTG_NOCNT),
NO_MONS(),
ATTK(AD_FIRE, 1, 0), NOFLAG,
PROPS(FIRE_RES), NOFLAG,
PROPS(), NOFLAG,
SMOKE_CLOUD, NOFLAG
),
A("Thought", DAGGER, (const char *)0,
9999L, MT_DEFAULT, MZ_DEFAULT, WT_DEFAULT,
A_NONE, NON_PM, NON_PM, TIER_A, (ARTG_NOGEN|ARTG_NOWISH|ARTG_NOCNT),
NO_MONS(),
ATTK(AD_DRIN, 2, 0), NOFLAG,
PROPS(), NOFLAG,
PROPS(), NOFLAG,
NOINVOKE, NOFLAG
),
A("Memory", DAGGER, (const char *)0,
9999L, MT_DEFAULT, MZ_DEFAULT, WT_DEFAULT,
A_NONE, NON_PM, NON_PM, TIER_A, (ARTG_NOGEN|ARTG_NOWISH|ARTG_NOCNT),
NO_MONS(),
ATTK(AD_DRIN, 2, 0), NOFLAG,
PROPS(), NOFLAG,
PROPS(), NOFLAG,
NOINVOKE, NOFLAG
),
A("Jack's Torch", CLUB, (const char *)0,
9999L, MT_DEFAULT, MZ_DEFAULT, WT_DEFAULT,
A_NONE, NON_PM, NON_PM, TIER_B, (ARTG_NOGEN|ARTG_NOWISH|ARTG_NOCNT),
NO_MONS(),
ATTK(AD_FIRE, 4, 8), (ARTA_EXPLFIREX),
PROPS(), NOFLAG,
PROPS(FIRE_RES), NOFLAG,
NOINVOKE, NOFLAG
),
A("The Puppet Wire", GRAPPLING_HOOK, (const char *)0,
9999L, MT_DEFAULT, MZ_DEFAULT, WT_DEFAULT,
A_NONE, NON_PM, NON_PM, TIER_D, (ARTG_NOGEN|ARTG_NOWISH|ARTG_NOCNT),
NO_MONS(),
ATTK(AD_PHYS, 4, 0), NOFLAG,
PROPS(), NOFLAG,
PROPS(), NOFLAG,
NOINVOKE, NOFLAG
),
A("Flickering Outline", CLOAK_OF_DISPLACEMENT, (const char *)0,
9999L, MT_DEFAULT, MZ_DEFAULT, WT_DEFAULT,
A_NONE, NON_PM, NON_PM, TIER_A, (ARTG_NOGEN|ARTG_NOWISH|ARTG_NOCNT),
NO_MONS(),
NO_ATTK(), NOFLAG,
PROPS(COLD_RES), NOFLAG,
PROPS(), NOFLAG,
SHADOW_FLARE, (ARTI_PLUSSEV)
),
A("The Elder Cerebral Fluid", DAGGER, (const char *)0,
9999L, MT_DEFAULT, MZ_DEFAULT, WT_DEFAULT,
A_NONE, NON_PM, NON_PM, TIER_A, (ARTG_NOGEN|ARTG_NOWISH|ARTG_NOCNT),
NO_MONS(),
ATTK(AD_DRIN, 2, 0), NOFLAG,
PROPS(), NOFLAG,
PROPS(), NOFLAG,
NOINVOKE, NOFLAG
),
A("The Illithid Staff", DAGGER, (const char *)0,
9999L, MT_DEFAULT, MZ_DEFAULT, WT_DEFAULT,
A_NONE, NON_PM, NON_PM, TIER_A, (ARTG_NOGEN|ARTG_NOWISH|ARTG_NOCNT),
NO_MONS(),
ATTK(AD_DRIN, 2, 0), NOFLAG,
PROPS(), NOFLAG,
PROPS(), NOFLAG,
NOINVOKE, NOFLAG
),
/*Needs encyc entry, somehow*/
A("Genocide", TWO_HANDED_SWORD, (const char *)0,
9999L, MT_DEFAULT, MZ_LARGE, WT_DEFAULT,

View file

@ -558,6 +558,8 @@ const char *name;
obj->corpsenm = PM_DWARF;
if (obj->oartifact == ART_MASK_OF_TLALOC)
obj->corpsenm = PM_GOD;
if (obj->oartifact == ART_STONE_MASK)
obj->corpsenm = PM_SHIRO;
/* weight */
if (obj->oartifact == ART_GREEN_DRAGON_CRESCENT_BLAD)

View file

@ -7839,7 +7839,7 @@ register struct monst *mtmp;
(void)mongets(mtmp, PLATE_MAIL);
(void)mongets(mtmp, LONG_SWORD);
struct obj *otmp = mksobj(HELMET, TRUE, FALSE); //make articrown (ok made crown of antisucc)
//otmp = oname(otmp, artiname(ART_CROWN_OF_BERITH));
otmp = oname(otmp, artiname(ART_CROWN_OF_BERITH));
otmp->blessed = FALSE;
otmp->cursed = FALSE;
(void) mpickobj(mtmp,otmp);

View file

@ -3904,6 +3904,7 @@ int wishflags;
mat = GEMSTONE;
} else if ((!strncmpi(bp, "stone ", l=6) || !strncmpi(bp, "ceramic ", l=8))
&& strncmpi(bp, "stone to flesh", 14) && strncmpi(bp, "stone dragon shield", 19)
&& strncmpi(bp, "stone mask", 10)
) {
mat = MINERAL;
} else if (!strncmpi(bp, "salt ", l=5)) {
@ -4253,6 +4254,9 @@ int wishflags;
&& !strstri(bp, "lump ")
&& !strstri(bp, "rod ")
&& !strstri(bp, "finger ")
&& !strstri(bp, "crown of ")
&& !strstri(bp, "talisman of ")
&& !strstri(bp, "dread of ")
&& !strstri(bp, "set of ")) {
if ((p = strstri(bp, " of ")) != 0
&& (mntmp = name_to_mon(p+4)) >= LOW_PM)
@ -4284,6 +4288,9 @@ int wishflags;
if (strncmpi(bp, "frosted lake", 12)) /* not a "frosted lake" */
if (strncmpi(bp, "chromatic dragon scales", 23)) /* not a "dragon" */
if (strncmpi(bp, "platinum dragon plate", 22)) /* not a "dragon" */
if (strncmpi(bp, "eden's scales", 12)) /* not a something bad */
if (strncmpi(bp, "eurynome's dancing shoes", 24)) /* not a something bad */
if (strncmpi(bp, "jack's torch", 12)) /* not jack*/
if (mntmp < LOW_PM && strlen(bp) > 2 &&
(mntmp = name_to_mon(bp)) >= LOW_PM) {
int mntmptoo, mntmplen; /* double check for rank title */

View file

@ -3130,6 +3130,7 @@ int wep_type;
if (uswapwep && uswapwep->owt > maxweight && !(
(uwep && (uwep->otyp == STILETTOS)) ||
(uswapwep->oartifact == ART_BLADE_DANCER_S_DAGGER) ||
(uswapwep->oartifact == ART_MEMORY) ||
(uswapwep->oartifact == ART_FRIEDE_S_SCYTHE)
))
{
@ -3426,6 +3427,7 @@ int wep_type;
if (uswapwep && uswapwep->owt > maxweight && !(
(uwep && (uwep->otyp == STILETTOS)) ||
(uswapwep->oartifact == ART_BLADE_DANCER_S_DAGGER) ||
(uswapwep->oartifact == ART_MEMORY) ||
(uswapwep->oartifact == ART_FRIEDE_S_SCYTHE)
))
{

View file

@ -2490,6 +2490,7 @@ int vis;
if (obj && (
(obj->greased || obj->otyp == OILSKIN_CLOAK) || /* greased (or oilskin) armor */
(obj->oartifact == ART_CROWN_OF_BERITH) ||
(attk->adtyp == AD_WRAP && obj->otyp == find_mboots()) /* mud boots vs wrap attacks */
)
&&
@ -2503,7 +2504,7 @@ int vis;
(youagr ? "" : "s"),
(attk->adtyp == AD_WRAP ? " off of" : ", but cannot hold onto"),
(youdef ? "your" : s_suffix(mon_nam(mdef))),
(obj->greased ? "greased" : "slippery"),
(obj->greased ? "greased" : (obj->oartifact == ART_CROWN_OF_BERITH) ? "blood dripping" : "slippery"),
((obj->otyp == OILSKIN_CLOAK && !objects[obj->otyp].oc_name_known)
? cloak_simple_name(obj) : obj->otyp == find_mboots() ? "mud boots" : xname(obj))
);