1
0
Fork 0
mirror of https://codeberg.org/noisytoot/notnotdnethack.git synced 2025-07-31 09:52:25 +01:00

Get monsters and items falling off of the spire and fell spawning in. Also get fell an invent and special names for spire levels.

This commit is contained in:
demogorgon22 2021-09-19 16:06:07 -04:00
parent 9b54151dd2
commit e6a5413f33
8 changed files with 48 additions and 2 deletions

View file

@ -47,7 +47,7 @@ MONSTER:'@',"peasant",random,peaceful
MONSTER:'@',"peasant",random,peaceful
MONSTER:'@',"peasant",random,peaceful
MONSTER:'@',"Lady of Pain",random,peaceful
#MONSTER:'@',"Fell",random,peaceful
MONSTER:'"',"Fell",random,peaceful
REGION:(49,18,53,19),lit,"book shop"
MAZE: "stairs2",' '

View file

@ -2846,6 +2846,7 @@ E struct monst *FDECL(activate_statue_trap,
(struct trap *,XCHAR_P,XCHAR_P,BOOLEAN_P));
E void FDECL(dotrap, (struct trap *, unsigned));
E void FDECL(seetrap, (struct trap *));
E boolean FDECL(spire_fall_mon, (struct monst *));
E int FDECL(mintrap, (struct monst *));
E void FDECL(reward_untrap, (struct trap *, struct monst *));
E void FDECL(rloc_trap, (struct trap *));

View file

@ -2259,6 +2259,22 @@ karemade:
dodestruction();
if(Mindblasting)
domindblast_strong();
/* Sigil item gravity */
if(Is_sigil(&u.uz)){
struct obj *obj, *nobj;
for (obj = fobj; obj; obj = obj->nobj) {
if(levl[obj->ox][obj->oy].typ == AIR){
if(obj->otyp == AMULET_OF_YENDOR) continue;
if(cansee(obj->ox,obj->oy)) pline("%s falls from the spire.",The(xname(obj)));
obj_extract_self(obj);
add_to_migration(obj);
newsym(obj->ox,obj->oy);
obj->ox = spire_level.dnum;
obj->oy = spire_level.dlevel;
obj->owornmask = (long)MIGR_RANDOM;
}
}
}
/* Clouds on Lolth's level deal damage */
if(Is_lolth_level(&u.uz) && levl[u.ux][u.uy].typ == CLOUD){
if (!(nonliving(youracedata) || Breathless)){

View file

@ -466,6 +466,10 @@ char *buf;
else if (In_neu(&u.uz)){
if(In_depths(&u.uz)) Sprintf(buf, "Depths %d ", dunlev(&u.uz)+dungeons[neutral_dnum].num_dunlevs-1);
else Sprintf(buf, "Outlands %d ", dunlev(&u.uz));
} else if(In_spire(&u.uz)){
if(Is_sigil(&u.uz)) Sprintf(buf, "Sigil ");
else Sprintf(buf, "Endless Spire ");
} else if (In_cha(&u.uz)){
if(In_FF_quest(&u.uz)){
if(dungeons[chaos_dnum].entry_lev == u.uz.dlevel) Sprintf(buf, "Ruined Temple ");

View file

@ -3136,6 +3136,16 @@ int faction;
fix_object(otmp);
(void) mpickobj(mtmp, otmp);
}
if(ptr->mtyp == PM_FELL){
(void) mongets(mtmp, WAR_HAMMER, mkobjflags);
(void) mongets(mtmp, CHAIN_MAIL, mkobjflags);
(void) mongets(mtmp, HELMET, mkobjflags);
(void) mongets(mtmp, GLOVES, mkobjflags);
(void) mongets(mtmp, HIGH_BOOTS, mkobjflags);
(void) mongets(mtmp, CLOAK, mkobjflags);
(void) mongets(mtmp, SCRAP, mkobjflags);
(void) mongets(mtmp, POTION_VAPORIZER, mkobjflags);
}
break;}
case S_LAW_ANGEL:
case S_NEU_ANGEL:

View file

@ -1628,6 +1628,7 @@ mcalcdistress()
if (mtmp->data->mmove == 0) {
if (vision_full_recalc) vision_recalc(0);
if (minliquid(mtmp)) continue;
if (spire_fall_mon(mtmp)) continue;
}
if(mtmp->mtyp == PM_HEZROU && !(mtmp->mtrapped && t_at(mtmp->mx, mtmp->my) && t_at(mtmp->mx, mtmp->my)->ttyp == VIVI_TRAP)){
@ -1947,6 +1948,7 @@ movemon()
}
if (minliquid(mtmp)) continue;
if (spire_fall_mon(mtmp)) continue;
/* continue if the monster died fighting */
if (!mtmp->iswiz && !is_blind(mtmp)) {

View file

@ -5446,7 +5446,7 @@ struct permonst _mons2[] = {
A(ATTK(AT_WEAP, AD_PHYS, 2, 8)),
SIZ(WT_HUMAN, 0, MS_TATTOO, MZ_HUMAN), 0, 0,
MM_BREATHLESS /*MM*/, MT_PEACEFUL|MT_COLLECT|MT_MAGIC /*MT*/, MF_MARTIAL_B /*MF*/,
MB_STRONG|MB_HUMANOID /*MB*/, MG_NOWISH|MG_NOPOLY|MG_HATESHOLY|MG_HATESUNHOLY|MG_PNAME /*MG*/,
MB_STRONG|MB_HUMANOID|MB_MALE /*MB*/, MG_NOWISH|MG_NOPOLY|MG_HATESHOLY|MG_HATESUNHOLY|MG_PNAME /*MG*/,
MA_MINION|MA_PRIMORDIAL /*MA*/, MV_EXTRAMISSION /*MV*/, CLR_WHITE),
MON("Adamach", S_NEU_OUTSIDER,// /* Needs encyc entry */
LVL(100, 15, 125, 0), (G_UNIQ|G_NOCORPSE|G_NOGEN),

View file

@ -2040,6 +2040,19 @@ schar dx,dy;
#endif /* OVL3 */
#ifdef OVL1
boolean
spire_fall_mon(mtmp)
register struct monst *mtmp;
{
if(Is_sigil(&u.uz) && levl[mtmp->mx][mtmp->my].typ == AIR && (!mon_resistance(mtmp, FLYING) && !mon_resistance(mtmp, LEVITATION))){
if(canseemon(mtmp)) pline("%s falls from the spire!",Monnam(mtmp));
migrate_to_level(mtmp, ledger_no(&spire_level),
MIGR_RANDOM, (coord *)0);
return TRUE;
}
return FALSE;
}
int
mintrap(mtmp)
struct monst *mtmp;