Talk:Shambling horror
Jump to navigation
Jump to search
UnNetHack details found here:
http://sourceforge.net/p/unnethack/code/1588/
you are on your own for the Sporkhack details.
--Ozymandias (talk) 20:58, 11 August 2013 (UTC)
EDIT: 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) 22:12, 11 August 2013 (UTC)