void nh_describe_pos(int x, int y, struct nh_desc_buf *bufs) { int monid = dbuf_get_mon(x, y); bufs->bgdesc[0] = '\0'; bufs->trapdesc[0] = '\0'; bufs->objdesc[0] = '\0'; bufs->mondesc[0] = '\0'; bufs->invisdesc[0] = '\0'; bufs->effectdesc[0] = '\0'; bufs->objcount = -1; if (!program_state.game_running || !api_entry_checkpoint()) return; describe_bg(x, y, level->locations[x][y].mem_bg, bufs->bgdesc); if (level->locations[x][y].mem_trap) strcpy(bufs->trapdesc, trapexplain[level->locations[x][y].mem_trap - 1]); bufs->objcount = describe_object(x, y, level->locations[x][y].mem_obj - 1, bufs->objdesc); describe_mon(x, y, monid - 1, bufs->mondesc); if (level->locations[x][y].mem_invis) strcpy(bufs->invisdesc, invisexplain); if (u.uswallow && (x != u.ux || y != u.uy)) { /* all locations when swallowed other than the hero are the monster */ sprintf(bufs->effectdesc, "interior of %s", Blind ? "a monster" : a_monnam(u.ustuck)); } api_exit(); }
/* Charm snakes in range. Note that the snakes are NOT tamed. */ static void charm_snakes(int distance) { struct monst *mtmp = level->monlist; int could_see_mon, was_peaceful; while (mtmp) { if (!DEADMONSTER(mtmp) && mtmp->data->mlet == S_SNAKE && mtmp->mcanmove && distu(mtmp->mx, mtmp->my) < distance) { was_peaceful = mtmp->mpeaceful; mtmp->mavenge = 0; could_see_mon = canspotmon(mtmp); mtmp->mundetected = 0; msethostility(mtmp, FALSE, FALSE); /* does a newsym() */ if (canseemon(mtmp)) { if (!could_see_mon) pline(msgc_youdiscover, "You notice %s, swaying with the music.", a_monnam(mtmp)); else pline(msgc_actionok, "%s freezes, then sways with the music%s.", Monnam(mtmp), was_peaceful ? "" : ", and now seems quieter"); } } mtmp = mtmp->nmon; } }
char *Amonnam(const struct monst *mtmp) { char *bp = a_monnam(mtmp); *bp = highc(*bp); return bp; }
void nh_describe_pos(int x, int y, struct nh_desc_buf *bufs, int *is_in) { bufs->bgdesc[0] = '\0'; bufs->trapdesc[0] = '\0'; bufs->objdesc[0] = '\0'; bufs->mondesc[0] = '\0'; bufs->invisdesc[0] = '\0'; bufs->effectdesc[0] = '\0'; bufs->feature_described = FALSE; bufs->objcount = -1; if (is_in) *is_in = 0; if (!program_state.game_running || !isok(x, y)) return; API_ENTRY_CHECKPOINT_RETURN_VOID_ON_ERROR(); if (is_in) { if (IS_ROCK(level->locations[x][y].typ) || closed_door(level, x, y)) *is_in = 1; else *is_in = 0; } int monid = dbuf_get_mon(x, y); int mem_bg = level->locations[x][y].mem_bg; describe_bg(x, y, mem_bg, bufs->bgdesc); int tt = level->locations[x][y].mem_trap; if (tt) { strcpy(bufs->trapdesc, trapexplain[level->locations[x][y].mem_trap - 1]); if (tt != BEAR_TRAP && tt != WEB && tt != STATUE_TRAP && mem_bg && is_in) *is_in = 1; } bufs->objcount = describe_object(x, y, level->locations[x][y].mem_obj - 1, bufs->objdesc, mem_bg && is_in, &bufs->feature_described); describe_mon(x, y, monid - 1, bufs->mondesc); if (level->locations[x][y].mem_invis) strcpy(bufs->invisdesc, invisexplain); if (Engulfed && (x != u.ux || y != u.uy)) { /* all locations when swallowed other than the hero are the monster */ snprintf(bufs->effectdesc, SIZE(bufs->effectdesc), "interior of %s", Blind ? "a monster" : a_monnam(u.ustuck)); } API_EXIT(); }
static void dowaternymph() /* Water Nymph */ { register struct monst *mtmp; if(mons[PM_WATER_NYMPH].geno & (G_GENOD | G_EXTINCT)) return; if((mtmp = makemon(&mons[PM_WATER_NYMPH],u.ux,u.uy))) { if (!Blind) You("attract %s!", a_monnam(mtmp)); else You("hear a seductive voice."); mtmp->msleep = 0; if (t_at(mtmp->mx, mtmp->my)) (void) mintrap(mtmp); } else if (!Blind) pline("A large bubble rises to the surface and pops."); else You("hear a loud pop."); }
static void dowaterdemon() /* Water demon */ { register struct monst *mtmp; if(mons[PM_WATER_DEMON].geno & (G_GENOD | G_EXTINCT)) return; if((mtmp = makemon(&mons[PM_WATER_DEMON],u.ux,u.uy))) { if (!Blind) You("unleash %s!", a_monnam(mtmp)); else You("feel the presence of evil."); /* Give those on low levels a (slightly) better chance of survival */ if (rnd(100) > (80 + level_difficulty())) { pline("Grateful for %s release, %s grants you a wish!", his[pronoun_gender(mtmp)], he[pronoun_gender(mtmp)]); makewish(); mongone(mtmp); } else if (t_at(mtmp->mx, mtmp->my)) (void) mintrap(mtmp); } }