mirror of
https://codeberg.org/noisytoot/notnotdnethack.git
synced 2025-08-07 21:25:26 +01:00
Merge pull request #1834 from NeroOneTrueKing/patch-returning-artis
Make 'returns when thrown' an ARTA property
This commit is contained in:
commit
6eb7cef805
6 changed files with 33 additions and 20 deletions
|
@ -54,6 +54,7 @@
|
|||
#define ARTA_EXPLCOLDX 0x01000000L /* cold explosion; 100% chance*/
|
||||
#define ARTA_EXPLELECX 0x02000000L /* elec explosion; 100% chance*/
|
||||
#define ARTA_KNOCKBACKX 0x04000000L /* knockback; 100% chance*/
|
||||
#define ARTA_RETURNING 0x08000000L /* returns to the hand when thrown */
|
||||
|
||||
#define ARTP_SEEK 0x0001L /* helps you search, ie, adds enhancement bonus to attempts -- only coded for mainhand weapons */
|
||||
#define ARTP_NOCALL 0x0002L /* prevents demons from being gated in */
|
||||
|
|
|
@ -618,7 +618,7 @@ A("Windrider", BOOMERANG, "winged %s",
|
|||
4000L, MT_DEFAULT, MZ_DEFAULT, WT_DEFAULT,
|
||||
A_NONE, NON_PM, NON_PM, TIER_C, NOFLAG,
|
||||
NO_MONS(),
|
||||
ATTK(AD_PHYS, 1, 0), NOFLAG,
|
||||
ATTK(AD_PHYS, 1, 0), ARTA_RETURNING,
|
||||
PROPS(), NOFLAG,
|
||||
PROPS(), NOFLAG,
|
||||
NOINVOKE, NOFLAG
|
||||
|
@ -1746,7 +1746,7 @@ A("Amhimitl", JAVELIN, (const char *)0,
|
|||
3000L, BONE, MZ_DEFAULT, WT_DEFAULT,
|
||||
A_NEUTRAL, PM_ARCHEOLOGIST, NON_PM, TIER_D, (ARTG_NOGEN|ARTG_NOWISH|ARTG_FXALGN),
|
||||
NO_MONS(),
|
||||
ATTK(AD_FIRE, 5, 8), NOFLAG,
|
||||
ATTK(AD_FIRE, 5, 8), ARTA_RETURNING,
|
||||
PROPS(), NOFLAG,
|
||||
PROPS(), NOFLAG,
|
||||
NOINVOKE, NOFLAG
|
||||
|
@ -1788,7 +1788,7 @@ A("The Annulus", CHAKRAM, "intricately-featured %s",
|
|||
3000L, SILVER, MZ_DEFAULT, WT_SPECIAL,
|
||||
A_CHAOTIC, PM_ANACHRONONAUT, NON_PM, TIER_S, (ARTG_NOGEN|ARTG_NOWISH|ARTG_MAJOR),
|
||||
NO_MONS(),
|
||||
ATTK(AD_PHYS, 5, 1), NOFLAG, /*Actually Phys(5,0) if not a lightsaber*/
|
||||
ATTK(AD_PHYS, 5, 1), ARTA_RETURNING, /*Actually Phys(5,0) if not a lightsaber*/
|
||||
PROPS(), NOFLAG,
|
||||
PROPS(ANTIMAGIC, HALF_SPDAM), NOFLAG,
|
||||
ANNUL, NOFLAG
|
||||
|
@ -2005,7 +2005,7 @@ A("Sickle Moon", ELVEN_SICKLE, (const char *)0,
|
|||
4000L, SILVER, MZ_DEFAULT, WT_DEFAULT,
|
||||
A_LAWFUL, NON_PM, NON_PM, TIER_B, (ARTG_NOWISH|ARTG_FXALGN), /* may randomly generate */
|
||||
NO_MONS(),
|
||||
ATTK(AD_PHYS, 1, 0), NOFLAG,
|
||||
ATTK(AD_PHYS, 1, 0), ARTA_RETURNING,
|
||||
PROPS(), NOFLAG,
|
||||
PROPS(), NOFLAG,
|
||||
NOINVOKE, NOFLAG
|
||||
|
@ -3218,7 +3218,7 @@ A("The Khakkhara of the Monkey", KHAKKHARA, (const char *)0,
|
|||
0L, MT_DEFAULT, MZ_DEFAULT, WT_DEFAULT,
|
||||
A_NONE, PM_MONK, NON_PM, NO_TIER, (ARTG_NOGEN|ARTG_NOWISH),
|
||||
NO_MONS(),
|
||||
NO_ATTK(), NOFLAG,
|
||||
NO_ATTK(), ARTA_RETURNING,
|
||||
PROPS(), NOFLAG,
|
||||
PROPS(), NOFLAG,
|
||||
NOINVOKE, NOFLAG
|
||||
|
@ -3287,7 +3287,7 @@ A("The Dart of the Assassin", DART, (const char *)0,
|
|||
0L, MT_DEFAULT, MZ_DEFAULT, WT_DEFAULT,
|
||||
A_NONE, PM_ROGUE, NON_PM, NO_TIER, (ARTG_NOGEN|ARTG_NOWISH),
|
||||
NO_MONS(),
|
||||
NO_ATTK(), NOFLAG,
|
||||
NO_ATTK(), ARTA_RETURNING,
|
||||
PROPS(), NOFLAG,
|
||||
PROPS(), NOFLAG,
|
||||
SELF_POISON, NOFLAG
|
||||
|
|
|
@ -126,6 +126,7 @@ E boolean FDECL(arti_blindres, (struct obj *, boolean));
|
|||
E boolean FDECL(arti_plussev, (struct obj *));
|
||||
E boolean FDECL(arti_plusten, (struct obj *));
|
||||
E boolean FDECL(arti_silvered, (struct obj *));
|
||||
E boolean FDECL(arti_returning, (struct obj *));
|
||||
E boolean FDECL(arti_reflects, (struct obj *));
|
||||
E int FDECL(artifact_weight, (struct obj *));
|
||||
E boolean FDECL(arti_light, (struct obj *));
|
||||
|
|
|
@ -1845,6 +1845,14 @@ struct obj *obj;
|
|||
);
|
||||
}
|
||||
|
||||
/* used so that callers don't need to known about SPFX_ codes */
|
||||
boolean
|
||||
arti_returning(obj)
|
||||
struct obj *obj;
|
||||
{
|
||||
return (obj && obj->oartifact && (arti_attack_prop(obj, ARTA_RETURNING)));
|
||||
}
|
||||
|
||||
/* used so that callers don't need to known about SPFX_ codes */
|
||||
boolean
|
||||
arti_bright(obj)
|
||||
|
|
16
src/invent.c
16
src/invent.c
|
@ -3010,9 +3010,11 @@ winid *datawin;
|
|||
ADDCLASSPROP((check_oprop(obj, OPROP_VORPW)), "is vorpal");
|
||||
ADDCLASSPROP((check_oprop(obj, OPROP_MORGW)), "inflicts unhealing wounds while cursed");
|
||||
ADDCLASSPROP((check_oprop(obj, OPROP_FLAYW)), "destroys armor");
|
||||
ADDCLASSPROP((check_oprop(obj, OPROP_RETRW)), "returns when thrown");
|
||||
if (buf[0] != '\0')
|
||||
{
|
||||
Sprintf(buf2, "It %s.", buf);
|
||||
buf[0] = buf[0] + 'A' - 'a';
|
||||
Sprintf(buf2, "%s.", buf);
|
||||
OBJPUTSTR(buf2);
|
||||
}
|
||||
}
|
||||
|
@ -3034,7 +3036,6 @@ winid *datawin;
|
|||
ADDCLASSPROP((oart->aflags&ARTA_SHATTER), "shattering");
|
||||
ADDCLASSPROP((oart->aflags&ARTA_DISARM), "disarming");
|
||||
ADDCLASSPROP((oart->aflags&ARTA_STEAL), "theiving");
|
||||
//ADDCLASSPROP((oart->aflags&ARTA_HASTE), " /* hitting defender grants movement to attacker */");
|
||||
ADDCLASSPROP((oart->aflags&(ARTA_EXPLFIRE|ARTA_EXPLFIREX)), " fire exploding");
|
||||
ADDCLASSPROP((oart->aflags&(ARTA_EXPLCOLD|ARTA_EXPLCOLDX)), " cold exploding");
|
||||
ADDCLASSPROP((oart->aflags&(ARTA_EXPLELEC|ARTA_EXPLELECX)), " shock exploding");
|
||||
|
@ -3044,6 +3045,17 @@ winid *datawin;
|
|||
Sprintf(buf2, "Attacks are %s.", buf);
|
||||
OBJPUTSTR(buf2);
|
||||
}
|
||||
/* other stuff
|
||||
*/
|
||||
buf[0] = '\0';
|
||||
ADDCLASSPROP((oart->aflags&ARTA_RETURNING), "returns when thrown");
|
||||
ADDCLASSPROP((oart->aflags&ARTA_HASTE), "hastens the wielder's attacks");
|
||||
if (buf[0] != '\0')
|
||||
{
|
||||
buf[0] = buf[0] + 'A' - 'a';
|
||||
Sprintf(buf2, "%s.", buf);
|
||||
OBJPUTSTR(buf2);
|
||||
}
|
||||
}
|
||||
/* other weapon special effects */
|
||||
if(obj){
|
||||
|
|
|
@ -195,13 +195,8 @@ boolean impaired; /* TRUE if throwing/firing slipped OR magr is confused/stun
|
|||
if(magr && !(hmoncode & HMON_KICKED)){
|
||||
if ((thrownobj->oartifact == ART_MJOLLNIR && (youagr ? (Role_if(PM_VALKYRIE)) : magr ? (magr->mtyp == PM_VALKYRIE) : FALSE)) ||
|
||||
(thrownobj->oartifact == ART_AXE_OF_THE_DWARVISH_LORDS && (youagr ? (Race_if(PM_DWARF)) : magr ? (is_dwarf(magr->data)) : FALSE)) ||
|
||||
thrownobj->oartifact == ART_SICKLE_MOON ||
|
||||
thrownobj->oartifact == ART_ANNULUS ||
|
||||
thrownobj->oartifact == ART_KHAKKHARA_OF_THE_MONKEY ||
|
||||
thrownobj->oartifact == ART_DART_OF_THE_ASSASSIN ||
|
||||
thrownobj->oartifact == ART_WINDRIDER ||
|
||||
check_oprop(thrownobj, OPROP_RETRW) ||
|
||||
thrownobj->oartifact == ART_AMHIMITL
|
||||
arti_returning(thrownobj) ||
|
||||
check_oprop(thrownobj, OPROP_RETRW)
|
||||
) {
|
||||
returning = TRUE;
|
||||
if(uandroid && youagr && impaired){
|
||||
|
@ -1828,12 +1823,8 @@ int shotlimit;
|
|||
|
||||
/* For most things, limit multishot to ammo supply */
|
||||
if ((long)multishot > ammo->quan && !(
|
||||
ammo->oartifact == ART_WINDRIDER ||
|
||||
check_oprop(ammo, OPROP_RETRW) ||
|
||||
ammo->oartifact == ART_SICKLE_MOON ||
|
||||
ammo->oartifact == ART_ANNULUS ||
|
||||
ammo->oartifact == ART_AMHIMITL ||
|
||||
ammo->oartifact == ART_DART_OF_THE_ASSASSIN ||
|
||||
(arti_returning(ammo) && objects[ammo->otyp].oc_merge) ||
|
||||
(launcher && is_blaster(launcher))
|
||||
))
|
||||
multishot = (int)ammo->quan;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue