1
0
Fork 0
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:
ChrisANG 2021-01-06 10:18:32 -05:00
parent b5481d8da6
commit ae7d4137e5
4 changed files with 33 additions and 6 deletions

View file

@ -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 {

View file

@ -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,

View file

@ -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){

View file

@ -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.");