boolean valallowed;
};
-/* instance_variables holds engine state that does not need to be
+/* instance_globals holds engine state that does not need to be
* persisted upon game exit. The initialization state is well defined
* an set in decl.c during early early engine initialization.
*
- * unlike instance_flags, variables can be of any type. */
+ * unlike instance_flags, values in the structure can be of any type. */
-struct instance_variables {
+struct instance_globals {
/* apply.c */
int jumping_is_magic; /* current jump result of magic */
int polearm_range_min;
unsigned long magic; /* validate that structure layout is preserved */
};
-E struct instance_variables iv;
+E struct instance_globals g;
-E void instance_variable_init();
+E void instance_globals_init();
#undef E
/*
* The dungeon presentation graphics code and data structures were rewritten
* and generalized for NetHack's release 2 by Eric S. Raymond (eric@snark)
- * building on Don G. Kneller's MS-DOS implementation. See drawing.c for
+ * building on Don G Kneller's MS-DOS implementation. See drawing.c for
* the code that permits the user to set the contents of the symbol structure.
*
* The door representation was changed by Ari
{
return (isok(x, y)
&& (ACCESSIBLE(levl[x][y].typ) || Passes_walls)
- && is_valid_jump_pos(x, y, iv.jumping_is_magic, FALSE));
+ && is_valid_jump_pos(x, y, g.jumping_is_magic, FALSE));
}
void
pline("Where do you want to jump?");
cc.x = u.ux;
cc.y = u.uy;
- iv.jumping_is_magic = magic;
+ g.jumping_is_magic = magic;
getpos_sethilite(display_jump_positions, get_valid_jump_position);
if (getpos(&cc, TRUE, "the desired position") < 0)
return 0; /* user pressed ESC */
int x, y;
{
return (isok(x, y) && ACCESSIBLE(levl[x][y].typ)
- && distu(x, y) >= iv.polearm_range_min
- && distu(x, y) <= iv.polearm_range_max);
+ && distu(x, y) >= g.polearm_range_min
+ && distu(x, y) <= g.polearm_range_max);
}
void
else
max_range = 8; /* (P_SKILL(typ) >= P_EXPERT) */
- iv.polearm_range_min = min_range;
- iv.polearm_range_max = max_range;
+ g.polearm_range_min = min_range;
+ g.polearm_range_max = max_range;
/* Prompt for a location */
pline(where_to_hit);
if (!weap || (weap->attk.adtyp == AD_PHYS /* check for `NO_ATTK' */
&& weap->attk.damn == 0 && weap->attk.damd == 0))
- iv.spec_dbon_applies = FALSE;
+ g.spec_dbon_applies = FALSE;
else if (otmp->oartifact == ART_GRIMTOOTH)
/* Grimtooth has SPFX settings to warn against elves but we want its
damage bonus to apply to all targets, so bypass spec_applies() */
- iv.spec_dbon_applies = TRUE;
+ g.spec_dbon_applies = TRUE;
else
- iv.spec_dbon_applies = spec_applies(weap, mon);
+ g.spec_dbon_applies = spec_applies(weap, mon);
- if (iv.spec_dbon_applies)
+ if (g.spec_dbon_applies)
return weap->attk.damd ? rnd((int) weap->attk.damd) : max(tmp, 1);
return 0;
}
scare_dieroll /= (1 << (mb->spe / 3));
/* if target successfully resisted the artifact damage bonus,
reduce overall likelihood of the assorted special effects */
- if (!iv.spec_dbon_applies)
+ if (!g.spec_dbon_applies)
dieroll += 1;
/* might stun even when attempting a more severe effect, but
in that case it will only happen if the other effect fails;
extra damage will apply regardless; 3.4.1: sometimes might
just probe even when it hasn't been enchanted */
- do_stun = (max(mb->spe, 0) < rn2(iv.spec_dbon_applies ? 11 : 7));
+ do_stun = (max(mb->spe, 0) < rn2(g.spec_dbon_applies ? 11 : 7));
/* the special effects also boost physical damage; increments are
generally cumulative, but since the stun effect is based on a
if (attacks(AD_FIRE, otmp)) {
if (realizes_damage)
pline_The("fiery blade %s %s%c",
- !iv.spec_dbon_applies
+ !g.spec_dbon_applies
? "hits"
: (mdef->data == &mons[PM_WATER_ELEMENTAL])
? "vaporizes part of"
: "burns",
- hittee, !iv.spec_dbon_applies ? '.' : '!');
+ hittee, !g.spec_dbon_applies ? '.' : '!');
if (!rn2(4))
(void) destroy_mitem(mdef, POTION_CLASS, AD_FIRE);
if (!rn2(4))
if (attacks(AD_COLD, otmp)) {
if (realizes_damage)
pline_The("ice-cold blade %s %s%c",
- !iv.spec_dbon_applies ? "hits" : "freezes", hittee,
- !iv.spec_dbon_applies ? '.' : '!');
+ !g.spec_dbon_applies ? "hits" : "freezes", hittee,
+ !g.spec_dbon_applies ? '.' : '!');
if (!rn2(4))
(void) destroy_mitem(mdef, POTION_CLASS, AD_COLD);
return realizes_damage;
if (attacks(AD_ELEC, otmp)) {
if (realizes_damage)
pline_The("massive hammer hits%s %s%c",
- !iv.spec_dbon_applies ? "" : "! Lightning strikes",
- hittee, !iv.spec_dbon_applies ? '.' : '!');
- if (iv.spec_dbon_applies)
+ !g.spec_dbon_applies ? "" : "! Lightning strikes",
+ hittee, !g.spec_dbon_applies ? '.' : '!');
+ if (g.spec_dbon_applies)
wake_nearto(mdef->mx, mdef->my, 4 * 4);
if (!rn2(5))
(void) destroy_mitem(mdef, RING_CLASS, AD_ELEC);
if (attacks(AD_MAGM, otmp)) {
if (realizes_damage)
pline_The("imaginary widget hits%s %s%c",
- !iv.spec_dbon_applies
+ !g.spec_dbon_applies
? ""
: "! A hail of magic missiles strikes",
- hittee, !iv.spec_dbon_applies ? '.' : '!');
+ hittee, !g.spec_dbon_applies ? '.' : '!');
return realizes_damage;
}
return Mb_hit(magr, mdef, otmp, dmgptr, dieroll, vis, hittee);
}
- if (!iv.spec_dbon_applies) {
+ if (!g.spec_dbon_applies) {
/* since damage bonus didn't apply, nothing more to do;
no further attacks have side-effects on inventory */
return FALSE;
Strcpy(nb = eos(nb), rank());
Sprintf(nb = eos(nb), " ");
- i = iv.mrank_sz + 15;
+ i = g.mrank_sz + 15;
j = (int) ((nb + 2) - newbot1); /* strlen(newbot1) but less computation */
if ((i - j) > 0)
Sprintf(nb = eos(nb), "%*s", i - j, " "); /* pad with spaces */
if (urole.rank[i].f && (r = strlen(urole.rank[i].f)) > maxr)
maxr = r;
}
- iv.mrank_sz = maxr;
+ g.mrank_sz = maxr;
return;
}
#define UNDEFINED_PTR NULL /* move to hack.h if we are keeping */
#define IVMAGIC 0xdeadbeef
-const struct instance_variables iv_init = {
+const struct instance_globals g_init = {
/* apply.c */
0, /* jumping_is_magic */
-1, /* polearm_range_min */
IVMAGIC /* used to validate that structure layout has been preserved */
};
-struct instance_variables iv;
+struct instance_globals g;
void
-instance_variable_init()
+instance_globals_init()
{
- iv = iv_init;
+ g = g_init;
- nhassert(iv_init.magic == IVMAGIC);
- nhassert(iv.havestate == TRUE);
+ nhassert(g_init.magic == IVMAGIC);
+ nhassert(g_init.havestate == TRUE);
sfcap = default_sfinfo;
sfrestinfo = default_sfinfo;
put_saddle_on_mon(otmp, mtmp);
}
- if (!iv.petname_used++ && *petname)
+ if (!g.petname_used++ && *petname)
mtmp = christen_monst(mtmp, petname);
initedog(mtmp);
|| (obj->otyp == EGG));
if (u.umonnum == PM_GELATINOUS_CUBE && is_organic(obj)
- /* [g.cubes can eat containers and retain all contents
+ /* [g-cubes can eat containers and retain all contents
as engulfed items, but poly'd player can't do that] */
&& !Has_contents(obj))
return TRUE;
/* eat organic objects, including cloth and wood, if present;
engulf others, except huge rocks and metal attached to player
- [despite comment at top, doesn't assume that eater is a g.cube] */
+ [despite comment at top, doesn't assume that eater is a g-cube] */
for (otmp = level.objects[mtmp->mx][mtmp->my]; otmp; otmp = otmp2) {
otmp2 = otmp->nexthere;
register struct obj *otmp3;
/* contents of eaten containers become engulfed; this
- is arbitrary, but otherwise g.cubes are too powerful */
+ is arbitrary, but otherwise g-cubes are too powerful */
while ((otmp3 = otmp->cobj) != 0) {
obj_extract_self(otmp3);
if (otmp->otyp == ICE_BOX && otmp3->otyp == CORPSE) {
zap_oseen = oseen;
mzapmsg(mtmp, otmp, FALSE);
otmp->spe--;
- iv.m_using = TRUE;
+ g.m_using = TRUE;
mbhit(mtmp, rn1(8, 6), mbhitm, bhito, otmp);
/* monster learns that teleportation isn't useful here */
if (level.flags.noteleport)
mtmp->mtrapseen |= (1 << (TELEP_TRAP - 1));
- iv.m_using = FALSE;
+ g.m_using = FALSE;
return 2;
case MUSE_SCR_TELEPORTATION: {
int obj_is_cursed = otmp->cursed;
otmp->spe--;
if (oseen)
makeknown(otmp->otyp);
- iv.m_using = TRUE;
+ g.m_using = TRUE;
buzz((int) (-30 - (otmp->otyp - WAN_MAGIC_MISSILE)),
(otmp->otyp == WAN_MAGIC_MISSILE) ? 2 : 6, mtmp->mx, mtmp->my,
sgn(mtmp->mux - mtmp->mx), sgn(mtmp->muy - mtmp->my));
- iv.m_using = FALSE;
+ g.m_using = FALSE;
return (DEADMONSTER(mtmp)) ? 1 : 2;
case MUSE_FIRE_HORN:
case MUSE_FROST_HORN:
} else
You_hear("a horn being played.");
otmp->spe--;
- iv.m_using = TRUE;
+ g.m_using = TRUE;
buzz(-30 - ((otmp->otyp == FROST_HORN) ? AD_COLD - 1 : AD_FIRE - 1),
rn1(6, 6), mtmp->mx, mtmp->my, sgn(mtmp->mux - mtmp->mx),
sgn(mtmp->muy - mtmp->my));
- iv.m_using = FALSE;
+ g.m_using = FALSE;
return (DEADMONSTER(mtmp)) ? 1 : 2;
case MUSE_WAN_TELEPORTATION:
case MUSE_WAN_STRIKING:
zap_oseen = oseen;
mzapmsg(mtmp, otmp, FALSE);
otmp->spe--;
- iv.m_using = TRUE;
+ g.m_using = TRUE;
mbhit(mtmp, rn1(8, 6), mbhitm, bhito, otmp);
- iv.m_using = FALSE;
+ g.m_using = FALSE;
return 2;
case MUSE_SCR_EARTH: {
/* TODO: handle steeds */
{
int newcap = near_capacity();
- if (iv.oldcap < newcap) {
+ if (g.oldcap < newcap) {
switch (newcap) {
case 1:
Your("movements are slowed slightly because of your load.");
break;
}
context.botl = 1;
- } else if (iv.oldcap > newcap) {
+ } else if (g.oldcap > newcap) {
switch (newcap) {
case 0:
Your("movements are now unencumbered.");
context.botl = 1;
}
- iv.oldcap = newcap;
+ g.oldcap = newcap;
return newcap;
}
#ifdef MFLOPPY
gameDiskPrompt();
#endif
- max_rank_sz(); /* to recompute iv.mrank_sz (botl.c) */
+ max_rank_sz(); /* to recompute g.mrank_sz (botl.c) */
/* take care of iron ball & chain */
for (otmp = fobj; otmp; otmp = otmp->nobj)
if (otmp->owornmask)
store_version(fd);
store_savefileinfo(fd);
store_plname_in_file(fd);
- iv.ustuck_id = (u.ustuck ? u.ustuck->m_id : 0);
- iv.usteed_id = (u.usteed ? u.usteed->m_id : 0);
+ g.ustuck_id = (u.ustuck ? u.ustuck->m_id : 0);
+ g.usteed_id = (u.usteed ? u.usteed->m_id : 0);
savelev(fd, ledger_no(&u.uz), WRITE_SAVE | FREE_SAVE);
savegamestate(fd, WRITE_SAVE | FREE_SAVE);
sizeof(struct spell) * (MAXSPELL + 1));
save_artifacts(fd);
save_oracles(fd, mode);
- if (iv.ustuck_id)
- bwrite(fd, (genericptr_t) &iv.ustuck_id, sizeof iv.ustuck_id);
- if (iv.usteed_id)
- bwrite(fd, (genericptr_t) &iv.usteed_id, sizeof iv.usteed_id);
+ if (g.ustuck_id)
+ bwrite(fd, (genericptr_t) &g.ustuck_id, sizeof g.ustuck_id);
+ if (g.usteed_id)
+ bwrite(fd, (genericptr_t) &g.usteed_id, sizeof g.usteed_id);
bwrite(fd, (genericptr_t) pl_character, sizeof pl_character);
bwrite(fd, (genericptr_t) pl_fruit, sizeof pl_fruit);
savefruitchn(fd, mode);
* noop pid rewriting will take place on the first "checkpoint" after
* the game is started or restored, if checkpointing is off.
*/
- if (flags.ins_chkpt || iv.havestate) {
+ if (flags.ins_chkpt || g.havestate) {
/* save the rest of the current game state in the lock file,
* following the original int pid, the current level number,
* and the current savefile name, which should not be subject
store_savefileinfo(fd);
store_plname_in_file(fd);
- iv.ustuck_id = (u.ustuck ? u.ustuck->m_id : 0);
- iv.usteed_id = (u.usteed ? u.usteed->m_id : 0);
+ g.ustuck_id = (u.ustuck ? u.ustuck->m_id : 0);
+ g.usteed_id = (u.usteed ? u.usteed->m_id : 0);
savegamestate(fd, WRITE_SAVE);
}
bclose(fd);
}
- iv.havestate = flags.ins_chkpt;
+ g.havestate = flags.ins_chkpt;
}
#endif
} else {
register int tt = trap->ttyp;
boolean in_sight, tear_web, see_it,
- inescapable = iv.force_mintrap || ((tt == HOLE || tt == PIT)
+ inescapable = g.force_mintrap || ((tt == HOLE || tt == PIT)
&& Sokoban && !trap->madeby_u);
const char *fallverb;
|| mptr == &mons[PM_BUGBEAR])
You_hear("the roaring of an angry bear!");
}
- } else if (iv.force_mintrap) {
+ } else if (g.force_mintrap) {
if (in_sight) {
pline("%s evades %s bear trap!", Monnam(mtmp),
a_your[trap->madeby_u]);
if (is_flyer(mptr) || is_floater(mptr)
|| (mtmp->wormno && count_wsegs(mtmp) > 5)
|| is_clinger(mptr)) {
- if (iv.force_mintrap && !Sokoban) {
+ if (g.force_mintrap && !Sokoban) {
/* openfallingtrap; not inescapable here */
if (in_sight) {
seetrap(trap);
if (is_flyer(mptr) || is_floater(mptr) || mptr == &mons[PM_WUMPUS]
|| (mtmp->wormno && count_wsegs(mtmp) > 5)
|| mptr->msize >= MZ_HUGE) {
- if (iv.force_mintrap && !Sokoban) {
+ if (g.force_mintrap && !Sokoban) {
/* openfallingtrap; not inescapable here */
if (in_sight) {
seetrap(trap);
a_your[trap->madeby_u]);
deltrap(trap);
newsym(mtmp->mx, mtmp->my);
- } else if (iv.force_mintrap && !mtmp->mtrapped) {
+ } else if (g.force_mintrap && !mtmp->mtrapped) {
if (in_sight) {
pline("%s avoids %s spider web!", Monnam(mtmp),
a_your[trap->madeby_u]);
/* dotrap calls mintrap when mounted hero encounters a web */
if (u.usteed)
dotrapflags |= NOWEBMSG;
- ++iv.force_mintrap;
+ ++g.force_mintrap;
dotrap(t, dotrapflags);
- --iv.force_mintrap;
+ --g.force_mintrap;
result = (u.utrap != 0);
} else {
if (mon->mtrapped)
/* you notice it if you see the trap close/tremble/whatever
or if you sense the monster who becomes trapped */
*noticed = cansee(t->tx, t->ty) || canspotmon(mon);
- ++iv.force_mintrap;
+ ++g.force_mintrap;
result = (mintrap(mon) != 0);
- --iv.force_mintrap;
+ --g.force_mintrap;
}
return result;
}
*noticed = cansee(t->tx, t->ty) || canspotmon(mon);
/* monster will be angered; mintrap doesn't handle that */
wakeup(mon, TRUE);
- ++iv.force_mintrap;
+ ++g.force_mintrap;
result = (mintrap(mon) != 0);
- --iv.force_mintrap;
+ --g.force_mintrap;
/* mon might now be on the migrating monsters list */
}
return result;
*/
obj = mkobj(trop->trclass, FALSE);
otyp = obj->otyp;
- while (otyp == WAN_WISHING || otyp == iv.nocreate
- || otyp == iv.nocreate2 || otyp == iv.nocreate3
- || otyp == iv.nocreate4 || otyp == RIN_LEVITATION
+ while (otyp == WAN_WISHING || otyp == g.nocreate
+ || otyp == g.nocreate2 || otyp == g.nocreate3
+ || otyp == g.nocreate4 || otyp == RIN_LEVITATION
/* 'useless' items */
|| otyp == POT_HALLUCINATION
|| otyp == POT_ACID
case WAN_POLYMORPH:
case RIN_POLYMORPH:
case POT_POLYMORPH:
- iv.nocreate = RIN_POLYMORPH_CONTROL;
+ g.nocreate = RIN_POLYMORPH_CONTROL;
break;
case RIN_POLYMORPH_CONTROL:
- iv.nocreate = RIN_POLYMORPH;
- iv.nocreate2 = SPE_POLYMORPH;
- iv.nocreate3 = POT_POLYMORPH;
+ g.nocreate = RIN_POLYMORPH;
+ g.nocreate2 = SPE_POLYMORPH;
+ g.nocreate3 = POT_POLYMORPH;
}
/* Don't have 2 of the same ring or spellbook */
if (obj->oclass == RING_CLASS || obj->oclass == SPBOOK_CLASS)
- iv.nocreate4 = otyp;
+ g.nocreate4 = otyp;
}
if (urace.malenum != PM_HUMAN) {
&& !Stunned) {
/* Intelligent chaotic weapons (Stormbringer) want blood */
if (wep && wep->oartifact == ART_STORMBRINGER) {
- iv.override_confirmation = TRUE;
+ g.override_confirmation = TRUE;
return FALSE;
}
if (canspotmon(mtmp)) {
/* possibly set in attack_checks;
examined in known_hitum, called via hitum or hmonas below */
- iv.override_confirmation = FALSE;
+ g.override_confirmation = FALSE;
/* attack_checks() used to use <u.ux+u.dx,u.uy+u.dy> directly, now
it uses bhitpos instead; it might map an invisible monster there */
bhitpos.x = u.ux + u.dx;
{
register boolean malive = TRUE;
- if (iv.override_confirmation) {
+ if (g.override_confirmation) {
/* this may need to be generalized if weapons other than
Stormbringer acquire similar anti-social behavior... */
if (flags.verbose)
/* second attack for two-weapon combat; won't occur if Stormbringer
overrode confirmation (assumes Stormbringer is primary weapon)
or if the monster was killed or knocked to different location */
- if (u.twoweap && !iv.override_confirmation && malive && m_at(x, y) == mon) {
+ if (u.twoweap && !g.override_confirmation && malive && m_at(x, y) == mon) {
tmp = find_roll_to_hit(mon, uattk->aatyp, uswapwep, &attknum,
&armorpenalty);
dieroll = rnd(20);
char mlet = mtmp->data->mlet;
- iv.propellor = &zeroobj;
+ g.propellor = &zeroobj;
Oselect(EGG); /* cockatrice egg */
if (mlet == S_KOP) /* pies are first choice for Kops */
Oselect(CREAM_PIE);
|| !mon_hates_silver(mtmp))) {
if ((otmp = oselect(mtmp, pwep[i])) != 0
&& (otmp == mwep || !mweponly)) {
- iv.propellor = otmp; /* force the monster to wield it */
+ g.propellor = otmp; /* force the monster to wield it */
return otmp;
}
}
for (otmp = mtmp->minvent; otmp; otmp = otmp->nobj)
if (otmp->oclass == GEM_CLASS
&& (otmp->otyp != LOADSTONE || !otmp->cursed)) {
- iv.propellor = m_carrying(mtmp, SLING);
+ g.propellor = m_carrying(mtmp, SLING);
return otmp;
}
}
/* KMH -- This belongs here so darts will work */
- iv.propellor = &zeroobj;
+ g.propellor = &zeroobj;
prop = (objects[rwep[i]]).oc_skill;
if (prop < 0) {
switch (-prop) {
case P_BOW:
- iv.propellor = (oselect(mtmp, YUMI));
- if (!iv.propellor)
- iv.propellor = (oselect(mtmp, ELVEN_BOW));
- if (!iv.propellor)
- iv.propellor = (oselect(mtmp, BOW));
- if (!iv.propellor)
- iv.propellor = (oselect(mtmp, ORCISH_BOW));
+ g.propellor = (oselect(mtmp, YUMI));
+ if (!g.propellor)
+ g.propellor = (oselect(mtmp, ELVEN_BOW));
+ if (!g.propellor)
+ g.propellor = (oselect(mtmp, BOW));
+ if (!g.propellor)
+ g.propellor = (oselect(mtmp, ORCISH_BOW));
break;
case P_SLING:
- iv.propellor = (oselect(mtmp, SLING));
+ g.propellor = (oselect(mtmp, SLING));
break;
case P_CROSSBOW:
- iv.propellor = (oselect(mtmp, CROSSBOW));
+ g.propellor = (oselect(mtmp, CROSSBOW));
}
- if ((otmp = MON_WEP(mtmp)) && mwelded(otmp) && otmp != iv.propellor
+ if ((otmp = MON_WEP(mtmp)) && mwelded(otmp) && otmp != g.propellor
&& mtmp->weapon_check == NO_WEAPON_WANTED)
- iv.propellor = 0;
+ g.propellor = 0;
}
/* propellor = obj, propellor to use
* propellor = &zeroobj, doesn't need a propellor
* propellor = 0, needed one and didn't have one
*/
- if (iv.propellor != 0) {
+ if (g.propellor != 0) {
/* Note: cannot use m_carrying for loadstones, since it will
* always select the first object of a type, and maybe the
* monster is carrying two but only the first is unthrowable.
break;
case NEED_RANGED_WEAPON:
(void) select_rwep(mon);
- obj = iv.propellor;
+ obj = g.propellor;
break;
case NEED_PICK_AXE:
obj = m_carrying(mon, PICK_AXE);
if (obj->otyp == SCR_MAIL)
return;
#endif
- iv.obj_zapped = TRUE;
+ g.obj_zapped = TRUE;
- if (iv.poly_zapped < 0) {
+ if (g.poly_zapped < 0) {
/* some may metamorphosize */
for (i = obj->quan; i; i--)
if (!rn2(Luck + 45)) {
- iv.poly_zapped = objects[obj->otyp].oc_material;
+ g.poly_zapped = objects[obj->otyp].oc_material;
break;
}
}
learnwand(obj);
}
- iv.poly_zapped = -1;
+ g.poly_zapped = -1;
for (otmp = level.objects[tx][ty]; otmp; otmp = next_obj) {
next_obj = otmp->nexthere;
/* for zap downwards, don't hit object poly'd hero is hiding under */
hitanything += (*fhito)(otmp, obj);
}
- if (iv.poly_zapped >= 0)
- create_polymon(level.objects[tx][ty], iv.poly_zapped);
+ if (g.poly_zapped >= 0)
+ create_polymon(level.objects[tx][ty], g.poly_zapped);
return hitanything;
}
void
zapsetup()
{
- iv.obj_zapped = FALSE;
+ g.obj_zapped = FALSE;
}
void
zapwrapup()
{
/* if do_osshock() set obj_zapped while polying, give a message now */
- if (iv.obj_zapped)
+ if (g.obj_zapped)
You_feel("shuddering vibrations.");
- iv.obj_zapped = FALSE;
+ g.obj_zapped = FALSE;
}
/* called for various wand and spell effects - M. Stephenson */
if (damage) {
mtmp->mhp -= damage;
if (DEADMONSTER(mtmp)) {
- if (iv.m_using)
+ if (g.m_using)
monkilled(mtmp, "", AD_RBRE);
else
killed(mtmp);
nethack_enter(argc, argv);
- instance_variable_init();
+ instance_globals_init();
sys_early_init();
#if defined(WIN32) && defined(TTY_GRAPHICS)
char *
initstate(seed, arg_state, n)
-unsigned seed; /* seed for R. N. G. */
+unsigned seed; /* seed for RNG */
char *arg_state; /* pointer to state array */
int n; /* # bytes of state info */
{
win10_init();
- instance_variable_init();
+ instance_globals_init();
sys_early_init();
/* init applicatio structure */