mirror of
https://codeberg.org/noisytoot/notnotdnethack.git
synced 2025-07-26 23:32:25 +01:00
Star spawn (including Great Cthulhu) are multidimensional
DR does not apply to their attacks. -Armor and natural DR are both bypassed (reaches past your outer surface entirely). -Spec DR does apply. Helmets do not block star spawn brain eating attacks (Cthulhu does not have a brain drain attack). -Star spawn int drain damage lowered from 2d4 to 1d4 in light of this. -Apotheosis Veil still works vs. star spawn brain drain attacks.
This commit is contained in:
parent
b5481d8da6
commit
ae7d4137e5
4 changed files with 33 additions and 6 deletions
|
@ -2584,10 +2584,16 @@ struct monst *magr;
|
|||
/* Having the Deep Sea glyph increase magical DR by 3 */
|
||||
if (active_glyph(DEEP_SEA))
|
||||
bas_udr += 3;
|
||||
|
||||
|
||||
//Star spawn reach extra-dimensionally past all armor, even bypassing natural armor.
|
||||
if(magr && (magr->mtyp == PM_STAR_SPAWN || magr->mtyp == PM_GREAT_CTHULHU)){
|
||||
arm_udr = 0;
|
||||
nat_udr = 0;
|
||||
}
|
||||
|
||||
/* Combine into total */
|
||||
int total_dr = bas_udr;
|
||||
if(arm_udr >= 0 && nat_udr >= 0) {
|
||||
if(arm_udr > 0 && nat_udr > 0) {
|
||||
total_dr += (int)sqrt(nat_udr*nat_udr + arm_udr*arm_udr);
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -905,7 +905,7 @@ NEARDATA struct permonst mons[] = {
|
|||
MON("star spawn", S_HUMANOID,//17
|
||||
LVL_NDR(26, 12, -5, 10, 90, 0), (G_NOGEN),
|
||||
A(ATTK(AT_WEAP, AD_PHYS, 4, 4), ATTK(AT_XWEP, AD_PHYS, 4, 4),
|
||||
ATTK(AT_TENT, AD_DRIN, 2, 4),
|
||||
ATTK(AT_TENT, AD_DRIN, 1, 4),
|
||||
ATTK(AT_MAGC, AD_PSON, 0, 0),
|
||||
NO_ATTK, NO_ATTK),
|
||||
SIZ(WT_LARGE, CN_LARGE, MS_HISS, MZ_LARGE), MR_POISON, 0,
|
||||
|
|
|
@ -1036,6 +1036,12 @@ struct monst *magr;
|
|||
|
||||
mon_slot_dr(mon, magr, slot, &base, &armac, &nat_dr);
|
||||
|
||||
//Star spawn reach extra-dimensionally past all armor, even bypassing natural armor.
|
||||
if(magr && (magr->mtyp == PM_STAR_SPAWN || magr->mtyp == PM_GREAT_CTHULHU)){
|
||||
armac = 0;
|
||||
nat_dr = 0;
|
||||
}
|
||||
|
||||
if(armac > 11) armac = rnd(armac-10) + 10; /* high armor dr values act like player ac values */
|
||||
|
||||
if(nat_dr && armac){
|
||||
|
|
21
src/xhity.c
21
src/xhity.c
|
@ -2459,7 +2459,7 @@ int vis;
|
|||
|
||||
if (vis == -1)
|
||||
vis = getvis(magr, mdef, 0, 0);
|
||||
|
||||
|
||||
switch (attk->adtyp) {
|
||||
/* INT attacks always target heads */
|
||||
case AD_DRIN:
|
||||
|
@ -2487,6 +2487,10 @@ int vis;
|
|||
if (!obj) obj = (youdef ? uarm : which_armor(mdef, W_ARM));
|
||||
if (!obj) obj = (youdef ? uarmu : which_armor(mdef, W_ARMU));
|
||||
}
|
||||
|
||||
//Star spawn bypass most helmets.
|
||||
if(magr && magr->mtyp == PM_STAR_SPAWN && obj && obj->oartifact != ART_APOTHEOSIS_VEIL)
|
||||
return FALSE;
|
||||
|
||||
if (obj && (
|
||||
(obj->greased || obj->otyp == OILSKIN_CLOAK) || /* greased (or oilskin) armor */
|
||||
|
@ -6792,13 +6796,24 @@ boolean ranged;
|
|||
|
||||
/* protected by helmets */
|
||||
otmp = (youdef ? uarmh : which_armor(mdef, W_ARMH));
|
||||
if (otmp && ((
|
||||
if(pa->mtyp == PM_STAR_SPAWN && otmp && is_hard(otmp) && otmp->oartifact != ART_APOTHEOSIS_VEIL){
|
||||
if (youdef) {
|
||||
pline("%s somehow reaches right past your helmet!", Monnam(magr));
|
||||
}
|
||||
else if (vis) {
|
||||
pline("%s somehow reach right past %s helmet!",
|
||||
(youagr ? "You" : s_suffix(Monnam(magr))),
|
||||
s_suffix(mon_nam(mdef))
|
||||
);
|
||||
}
|
||||
} else if (otmp && is_hard(otmp) && ((
|
||||
otmp->otyp == PLASTEEL_HELM ||
|
||||
otmp->otyp == CRYSTAL_HELM ||
|
||||
otmp->otyp == PONTIFF_S_CROWN
|
||||
) || (
|
||||
rn2(8)
|
||||
))) {
|
||||
))
|
||||
){
|
||||
if (youdef) {
|
||||
/* not body_part(HEAD) */
|
||||
Your("helmet blocks the attack to your head.");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue