Talk:Shambling horror (Sporkhack)
Jump to navigation
Jump to search
Here are *some* of the Sporkhack details
/* what a horrible night to have a curse */
shambler->mlevel += rnd(6)-3; /* shuffle level */
shambler->mmove = rn2(10)+9; /* slow to very fast */
shambler->ac = rn2(21)-10; /* any AC */
shambler->mr = rn2(5)*25; /* varying amounts of MR */
shambler->maligntyp = rn2(21)-10; /* any alignment */
/* attacks...? */
for (i = 0; i < rnd(4); i++) {
attkptr = &shambler->mattk[i];
attkptr->aatyp = rn2(AT_GAZE); /* limit it to semi-normal attacks for now */
/* theoretically rnd(AT_GAZE)-3 should work since these are uchar, but
* let's not totally confuse the poor people browsing... */
if (attkptr->aatyp == AT_BOOM) {
attkptr->aatyp = AT_MAGC;
}
if (attkptr->aatyp == AT_EXPL) {
attkptr->aatyp = AT_WEAP;
}
attkptr->adtyp = 0;
/* Don't let the special Rider attacks be used here
* ...everything else is fair game :D */
while (attkptr->adtyp == 0 || attkptr->adtyp == AD_DETH ||
attkptr->adtyp == AD_PEST || attkptr->adtyp == AD_FAMN ||
attkptr->adtyp == AD_SPC1 || attkptr->adtyp == AD_SPC2) {
attkptr->adtyp = rnd(AD_CORR);
}
if (attkptr->aatyp == AT_MAGC) {
attkptr->adtyp = AD_CLRC + rn2(2); /* AT_MAGC must correspond to a spell type */
}
if (attkptr->aatyp == AT_BREA) {
attkptr->adtyp == AD_RBRE; /* Tiamat's breath weapon if you're a breather at all :) */
}
attkptr->damn = 2; /* we're almost sure to get this wrong first time */
attkptr->damd = 10; /* either too high or too low */
}
shambler->msize = rn2(MZ_GIGANTIC+1); /* any size */
shambler->cwt = 20; /* fortunately moot as it's flagged NOCORPSE */
shambler->cnutrit = 20; /* see above */
shambler->msound = rn2(MS_HUMANOID); /* any but the specials */
shambler->mresists = 0;
for (i = 0; i < rnd(6); i++) {
shambler->mresists |= (1 << rn2(8)); /* physical resistances... */
}
for (i = 0; i < rnd(5); i++) {
shambler->mresists |= (0x100 << rn2(7)); /* 'different' resistances, even clumsy */
}
shambler->mconveys = 0; /* flagged NOCORPSE */
/*
* now time for the random flags. this will likely produce
* a number of complete trainwreck monsters at first, but
* every so often something will dial up nasty stuff
*/
shambler->mflags1 = 0;
for (i = 0; i < rnd(17); i++) {
shambler->mflags1 |= (1 << rn2(33)); /* trainwreck this way :D */
}
shambler->mflags1 &= ~M1_UNSOLID; /* no ghosts */
shambler->mflags1 &= ~M1_WALLWALK; /* no wall-walkers */
shambler->mflags2 = M2_NOPOLY | M2_HOSTILE; /* Don't let the player be one of these yet. */
for (i = 0; i < rnd(17); i++) {
shambler->mflags2 |= (1 << rn2(33));
}
shambler->mflags2 &= ~M2_MERC; /* no guards */
shambler->mflags2 &= ~M2_PEACEFUL; /* no peacefuls */
shambler->mflags2 &= ~M2_WERE; /* no lycanthropes */
shambler->mflags2 &= ~M2_PNAME; /* not a proper name */
for (i = 0; i < rnd(5); i++) {
shambler->mflags3 |= (0x100 << rn2(6)); /* no covetous, but any of the middle M3_ flags are OK */
}
if (rn2(2)) {
shambler->mflags4 |= (1 << rn2(4)); /* don't overload it with vulnerabilities */
}
return;
--Ozymandias (talk) 14:20, 12 August 2013 (UTC)