Commit Graph

274 Commits

Author SHA1 Message Date
Pasi Kallinen
542d1db5f4 Another fix for #K4317 - monster grudge
Undead monsters created by the level creation routine do not grudge
other (zombifiable) monsters created during the level creation.

This of course doesn't prevent the grudge happening with monsters
created during gameplay.

Invalidates saves and bones.
2026-04-01 19:24:43 +03:00
Alex Smith
4d043a6f9c Monsters require experience using wands before they can hit with them
It takes time for an early-game monster to acclimatize itself to the
power of an attack wand: in much the same way as a nervous human may
quite possibly miss with their first attempt to use a gun in combat,
an early-game monster will always miss on its first use of an attack
wand (but from then on will understand how they work and get over
their nerves, and will hit as normal).

This is a balance change based on observed results from tournaments:
guarding against deaths to early-game attack wands requires an
unusually cautious playstyle which isn't much fun (and might not
always be possible even for the best players), so it is quite common
for them to be the cause of random deaths that it wasn't worth trying
to avoid. Although trying to dodge a monster who found an attack wand
is fun, you only actually get that fun if something makes you aware
of the danger: the monster missing with the wand is a clear way to
demonstrate the danger and let the player know that now is the right
time to take precautions.

This change could theoretically have broken saves, but probably
doesn't due to there having been a spare bit in struct monst.  Just
in case, it is being pushed together with other save-breaking changes
to avoid the need for multiple bumps to EDITLEVEL.
2026-03-19 03:55:10 +00:00
PatR
a561538c2a cursed potions of invisibility for monsters
Extend the recently changed behavior for cursed potion of invisibility.

Monsters won't drink potions of invisibility if already invisible so
can't accidentally or voluntarily make themselves visible again, but
let player make them become visible by hitting them with thrown or
wielded cursed potion of invisibility.

They don't have any concept of temporary invisibility that might let
them remain invisible while losing permanent invisibility, so they
just lose the latter and immediately become visible.
2026-02-12 10:33:09 -08:00
PatR
2d6f0d74f2 fix pull request #1433 - silver mace
Pull request from Umbire:  starting gear for angelic beings should
use recently added silver mace instead of old ordinary mace.

It's simpler to just type in the change than to merge the commit.

Fixes #1433
2025-08-06 15:33:57 -07:00
PatR
d2810a4bcd fix github issue #1413 - mimic feedback for gold
Issue reported by ars3niy:  if a mimic was given the shape of a
gold piece it gets reported as 2 gold pieces but the message was
|A gold pieces appears next to you.

Avoid article "A" prefix, and use plural verb "appear" instead of
singular "appears", yielding
|Gold pieces appear next to you.

Fixes #1413
2025-05-30 22:20:21 -07:00
nhmall
ce7b7710d8 a fix for issue #1386 - impossible to gen ';' mon
Bug description of #1386 by @copperwater on GitHub:

  "When generating a random monster from a class using des.monster(),
  the G_NOGEN in their statblock is suppressed, but because every monster
  of this class has frequency 0, none of them are actually eligible to get
  picked. mkclass ends up returning a null pointer and create_monster has
  to pick a random monster instead.

  This affects the following levels (all the ones that use random sea monsters):

  Healer quest start
  Healer quest locate
  Plane of Water (difficult to notice, since it has lots of specific sea monsters and only 5 random ones)

  This can be pretty easily viewed by going to the Healer quest start and
  detecting monsters: there is a shark and a giant eel, which are
  specifically defined, but the remaining random sea monster that should
  be there is absent."

Add a tracking array mclass_maxf[MAXMCLASSES] (about 61 entries, the
first not being used), and fill it one time in init_mongen_order() with
the maximum frequency value seen of any monster in that class.

Any mclass_maxf[] entry of zero represents that entire class of monsters
having no positive frequency value.

Detect that in mkclass_aligned(), and use it to work around the situation
to produce the monster being sought by the Lua level description file.
2025-02-28 12:40:34 -05:00
nhmall
6b2f24a443 Fix out-of-bounds
makemon.c: In function 'init_mongen_order':
makemon.c:1806:25: warning: iteration 383 invokes undefined behavior [-Waggressive-loop-optimizations]
 1806 |         mongen_order[i] = i;
      |         ~~~~~~~~~~~~~~~~^~~
makemon.c:1805:24: note: within this loop
 1805 |     for (i = LOW_PM; i <= NUMMONS; i++)
      |                      ~~^~~~~~~~~~
2025-02-17 07:24:32 -05:00
nhmall
1da02b1025 remove a cast that isn't doing anything now 2025-02-16 06:57:53 -05:00
Pasi Kallinen
495a7e7898 Silence a suggested parenthesis warning 2025-02-16 10:50:04 +02:00
nhmall
8672807a5e cmp_init_mongen_order() qsort comparison function tweaks
The array was ending up ordered the same on different qsort
implementations.

This incorporates the mlet value into the sort value for comparison.
That guarantees that everything stays ordered by mlet, followed by
difficulty (and would even if something ever got misplaced in
monsters.h). It means the "they are equal" zero return for differing
mlet values is not required, and has been removed.

This removes the "they are equal" zero returns for G_NOGEN | G_UNIQ
monsters, so they will still get sorted rather than left at the
whatever array element they happened to be at (which I don't think
should be an issue?).
2025-02-14 19:30:34 -05:00
nhmall
f1be2eaffa add --dumpmongen to view mongen_order[] array 2025-02-14 09:38:29 -05:00
Pasi Kallinen
027bf78f28 Sort monsters for mkclass
An assumption of monster generating code is that monsters within a class
appear in increasing order of difficulty.  This wasn't the case with
some monsters, but swapping the monsters around is rather intrusive,
and doesn't really lend to changing monster difficulties when needed.

As a result, for example ghouls would not randomly generate when they
should have at certain level difficulties (where a ghoul is weak enough
to generate but an ettin zombie would be too strong).

Keep a separate array of monster indexes sorted correctly, generate it
when required by mkclass()

Description of this bug via copperwater <aosdict@gmail.com>
2025-02-13 17:17:00 +02:00
nhmall
c24786430f 'struct former' -> 'struct ebones'
Some variants were already using a similar approach
using a struct called 'ebones', so adopt the same naming
so NetHack-3.7, hardfought, and some variants are using
the same name.

As before there are fields in the struct that are not
currently used by NetHack-3.7, but the intent is that
hardfought save and bones files can be loaded by
NetHack-3.7 without code modification, for debugging
bug reports.

This invalidates existing save and bones files.
2025-02-04 15:16:42 -05:00
nhmall
d331029b03 more clobber-detection 2025-02-02 09:08:48 -05:00
nhmall
d785f7a649 add two unused fields for hardfought save compatability
There are two hardfought code additions that render save and bones files incompatible
with the upstream NetHack-3.7, and that makes testing with hardfought
save and bones files more challenging than it needs to be, when
investigating and troubleshooting bug reports.

Add some unused fields to advance towards achieving save file parity with
hardfought, which is a significant source of play-testing for NetHack-3.7.

1) the elbereth field addition to u_conduct

This adds an unused placeholder field named 'hf_reserved1', at the appropriate
place in u_conduct to achieve struct field parity with the one in use on
hardfought.

2) hardfought adds a field to struct monst:
    char former_rank[25]; /* for bones' ghost rank in their former life */

Instead of adding that to every monst, this adds a new mextra struct
named 'former', which currently contains the equivalent 25-character
field called 'rank' which can hold the content that was in the
former_rank[25] field. That way, the field will only be added when it
is needed.

A pull request https://github.com/k21971/NetHack37/pull/2 has been
done on hardfought to do it the same way (untested there as of yet).

Even though NetHack-3.7 does not utilize that information presently,
this will be a further step toward allowing hardfought-generated save
and bones files to be used for troubleshooting, without modification,
on a similar architecture running stock NetHack-3.7 code.

That savefile parity won't be achieved until the after the
hardfought pull-request mentioned above (or equivalent) is merged.

As this change will not be compatible with existing save and bones
files, it will be accompanied with an EDITLEVEL increment.
2025-02-02 09:00:05 -05:00
nhmall
61f969e88b follow-up for put_saddle_on_mon()
Commit 1acc2727 helped ensure that the which_armor(mtmp, W_SADDLE)
test at the top of put_saddle_on_mon() wouldn't lead to an obj
leak.

This commit covers off the adjacent can_saddle() test in
put_saddle_on_mon(), because if that failed, it could also lead
to a memory leak of the saddle obj passed by the caller.

- have put_saddle_on_mon() create and use its own saddle obj
  if a NULL saddle obj is passed, instead of having to do that
  in the caller.
- where an existing saddle obj needs to be passed from the caller,
  ensure that the caller has done its own can_saddle(mon) check prior
  to calling put_saddle_on_mon(), so that the can_saddle() test
  in put_saddle_on_mon() won't fail.
- lastly, add an impossible() to put_saddle_on_mon() to catch
  a failure when a saddle obj is passed from the caller and either
  test has failed, just in case. That should not happen with any of
  the existing cases now, but it will provide some bullet-proofing
  for new code, new callers.
2025-01-20 14:37:46 -05:00
nhmall
45b2a6c49a more C standard progress
There was a transcription error in the comments in cstd.h for
the standard list of header files, where only the description
remained for <stdlib.h>, not the name of the file itself.

Remove several extraneous inclusions of the standard C99 headers.

Tested on the following afterwards:
Linux (using hints/linux.370) including tty, curses, qt6, and X11
macOS (using hints/macOS.370) including tty, curses, qt5, and X11
Windows MSYS2 using sys/windows/GNUmakefile
Windows Visual Studio using sys/windows/Makefile.nmake
msdos cross-compile on Ubuntu using djgpp cross-compiler
2024-12-20 10:32:38 -05:00
nhmall
0792e5fe9e expand implicit fallthrough detection to non-gcc compilers
gcc has recognized various "magic comments" for white-listing
occurrences of implicit fallthrough in switch statements for
a long time:

    The range and shape of "falls through" comments accepted are
    contingent upon the level of the warning. (The default level is =3.)

    -Wimplicit-fallthrough=0 disables the warning altogether.
    -Wimplicit-fallthrough=1 treats any kind of comment as a "falls through" comment.
    -Wimplicit-fallthrough=2 essentially accepts any comment that contains something
     that matches (case insensitively) "falls?[ \t-]*thr(ough|u)" regular expression.
    -Wimplicit-fallthrough=3 case sensitively matches a wide range of regular
     expressions, listed in the GCC manual. E.g., all of these are accepted:
        /* Falls through. */
        /* fall-thru */
        /* Else falls through. */
        /* FALLTHRU */
        /* ... falls through ... */
       etc.
    -Wimplicit-fallthrough=4 also, case sensitively matches a range of regular
     expressions but is much more strict than level =3.
    -Wimplicit-fallthrough=5 doesn't recognize any comments.

Plenty of other compilers did not recognize the gcc comment convention,
and up until now the compiler warning for detecting unintended
fallthrough had to be suppressed on other compilers. That's because the code
in NetHack has been relying on the gcc approach, and only the gcc approach.

The C23 standard introduces an attribute [[fallthrough]] for the
functionality, when implicit fallthrough warnings have been enabled.

Several popular compilers already support that, or a very similar attribute
style approach, today, even ahead of their C23 support:

       C compiler                       whitelist approach
       ---------------------------   -------------------------------------
       C23 conforming compilers         [[fallthrough]]

       clang versions supporting
       standards prior to
       C23                              __attribute__((__fallthrough__))

       Microsoft Visual Studio
       since VS 2022 17.4.
       The warning C5262 controls
       whether the implict
       fallthrough is detected and
       warned about with
       /std:clatest.                    [[fallthrough]]

This adds support to NetHack for the attribute approach by inserting a
macro FALLTHROUGH to the existing cases that require white-listing, so
other compilers can analyze things too.

The definition of the FALLTHROUGH macro is controlled in include/tradstdc.h.

The gcc comment approach has also been left in place at this time.
2024-11-30 14:16:27 -05:00
PatR
1d0b8dfca0 Demonbane revisited
Commit c4a1f298e8 two and a half
months ago gave lawful Angels and Archons a chance to start with
a mace instead of a long sword so that they might get Demonbane.
It was a bit convulted; this redoes it to be more straightforward.
2024-11-26 21:40:19 -08:00
Pasi Kallinen
f12635ccd9 Prevent monster generation in the sokoban trap hallway
Makes Sokoban far less tedious when you don't have to worry about
monsters randomly popping up in the trap hallway while you're pushing
the boulder.

Adds a new exclusion zone for monster generation, and the goodpos
routine avoids the zones when GP_AVOID_MONPOS is used.
2024-10-18 13:30:51 +03:00
PatR
c4a1f298e8 lawful minions vs Demonbane
Back then Demonbane was a long sword, lawful Angels and Archons
could get either it or Sunsword as part of their starting equipment.
After it got changed into a mace instead, they could only get
Sunsword.  Rather than always giving them a long sword, sometimes
give them a mace so that they get back the chance to start with
Demonbane.

Since mace is quite a bit weaker that long sword against large
opponents, provide a better enchantment for maces given to lawful
minions.
2024-10-11 23:34:26 -07:00
PatR
fe91590d17 a couple of comments 2024-09-10 23:16:55 -07:00
PatR
cc1066b1ff some reformatting (3 of 4) 2024-09-05 15:55:24 -07:00
nhmall
6c0ae092c6 distinguish global variables that get written to savefile
The g? structs had a mix of variables that were written to
the savefile, and those that were not.

For better clarity and to distinguish those that end up in
the savefile, relocate some g? variables that get written
directly to the savefile into different structs.

This updates EDITLEVEL, although technically it probably
didn't need to, since savefile contents are not changing.

Details:

    gb.bases            -> svb.bases
    gb.bbubbles         -> svb.bbubbles
    gb.branches         -> svb.branches
    gc.context          -> svc.context
    gd.disco            -> svd.disco
    gd.dndest           -> svd.dndest
    gd.doors            -> svd.doors
    gd.doors_alloc      -> svd.doors_alloc
    gd.dungeon_topology -> svd.dungeon_topology
    gd.dungeons         -> svd.dungeons
    ge.exclusion_zones  -> sve.exclusion_zones
    gh.hackpid          -> svh.hackpid
    gi.inv_pos          -> svi.inv_pos
    gk.killer           -> svk.killer
    gl.lastseentyp      -> svl.lastseentyp
    gl.level            -> svl.level
    gl.level_info       -> svl.level_info
    gm.mapseenchn       -> svm.mapseenchn
    gm.moves            -> svm.moves
    gm.mvitals          -> svm.mvitals
    gn.n_dgns           -> svn.n_dgns
    gn.n_regions        -> svn.n_regions
    gn.nroom            -> svn.nroom
    go.oracle_cnt       -> svo.oracle_cnt
    gp.pl_character     -> svp.pl_character
    gp.pl_fruit         -> svp.pl_fruit
    gp.plname           -> svp.plname
    gp.program_state    -> svp.program_state
    gq.quest_status     -> svq.quest_status
    gr.rooms            -> svr.rooms
    gs.sp_levchn        -> svs.sp_levchn
    gs.spl_book         -> svs.spl_book
    gt.timer_id         -> svt.timer_id
    gt.tune             -> svt.tune
    gu.updest           -> svu.updest
    gx.xmax             -> svx.xmax
    gx.xmin             -> svx.xmin
    gy.ymax             -> svy.ymax
    gy.ymin             -> svy.ymin

Related note:
There are some pointer variables that are heads of chains that were not
moved from 'g?' to 'sv?', because they are not actually written to the
savefile directly, but the objects/monst/trap/lightsource/timer in the
chains they point to are. That can be changed, if desired.
Examples: gi.invent, gm.migrating_objs, gb.billobjs, gm.migrating_mons,
          gf.ftrap, gl.light_base, gt.timer_base
2024-07-13 14:57:50 -04:00
PatR
a33f1edd24 YMonnam(monst)
Replace several upstart(y_monnam(mon)) with new YMonnam(mon) to
produce "Your little dog" and such.

Also change one or two Monnam(mon) to YMonnam(mon) and one pline(...)
to pline_mon(mon, ...).
2024-07-04 14:27:28 -07:00
nhmall
d04c0f00ed follow-up bit (from leading tab replacements) 2024-06-10 11:02:52 -04:00
nhmall
588b3ae92f replace some leading tabs that had crept in 2024-06-10 10:57:59 -04:00
PatR
537fd6dd74 fix gremlin cloning fix
The revised code returned an uninitialized variable if the new test
failed.

The cloneu() case was ok but this changes it to keep parallel to the
clone_mon() case.
2024-05-25 13:49:12 -07:00
PatR
29b4c47bdf fix #K4142 - camera flash vs mimic
When a camera flash hit a mimic which was posing as something, the
feedback mentioned the mimic but didn't bring it out of hiding.

Change to make light pass over a mimic impersonating an object but
unhide one impersonating furniture.  Ones impersonating some other
monster are woken up but wakeup doesn't force it back to mimic shape.

Trying to get the messages right brought on more code changes than
antipated.  I changed one of the arguments to mhidden_description()
so had to change its callers; fortunately there aren't very many.
2024-04-16 23:34:26 -07:00
Pasi Kallinen
f131942dd2 Another tamedog message
Give a different message when a peaceful creature was tamed.
Allow suppressing this and the previous message, when the caller
handles messaging.
2024-03-24 10:48:29 +02:00
nhkeni
9c0ed8ae63 NOSTATICFN for src/* 2024-03-14 17:41:51 -04:00
nhkeni
acf60063d5 Add missing prototypes for static functions to avoid warnings. 2024-02-29 10:49:53 -05:00
RainRat
a3658f85ac fix typos 2024-02-28 20:15:56 -08:00
nhmall
334535e7b0 Fix makemon() trying to generate a monster on top of another monster
When makemon was called with all-zero arguments (e.g. for random
monster generation over time), ptr==NULL means "a random monster".
This was being forwarded to mon==NULL in makemon_rnd_goodpos, and
then mtmp==NULL in goodpos, which means "an object, not a monster".
Because objects can be generated under monsters, this meant that an
attempt to create a random monster could end up choosing a location
that already had a monster, which would then cause the monster
generation to fail.

This mostly wasn't noticeable in normal play: it effectively
reduced the monster generation rate depending on how many locations
outside LOS happened to contain a monster. Normally that's a very
small proportion, so the bug had no obvious effects: but when there
are very few locations outside LOS (i.e. the player can see almost
every location on the level), the bug effectively caused monster
generation to stop once those locations became occupied by
non-moving (e.g. hiding) monsters, something that became observable
in games where the player decided to dig out and light almost an
entire level.

This commit fixes the problem by adding a new flag to goodpos that
requests that it not choose a position that already has a monster.

This bug was diagnosed, and this fix committed, by ais523; but
nhmall wrote almost all of the code implementing the fix.
2024-02-27 19:04:35 +00:00
nhmall
688ac6ffbe remove register from variable declarations 2024-02-19 16:30:07 -05:00
Michael Meyer
0c9e34832c Make HoOA confuse the hero, summon erinyes
A helmet psychically reaching inside your head and twiddling knobs in
your brain must be a confusing experience.  And the instant rejection of
your god (not to mention the vow that you made to find the amulet for
them), perhaps on the very cusp of their ascendance over the other gods,
is sort of the ultimate oathbreaking, so it interests the erinyes.
2024-01-10 22:57:10 -08:00
Michael Meyer
f930a12fba Make erinyes scale with alignment abuse
Consistent with their mythological role of punishing those who had
violated societal taboos -- oathbreakers, hosts who attacked their
guests, etc -- erinyes scale with the cumulative amount of alignment
abuse the hero has committed over the course of the game.  This is
tracked separately from the alignment record, and cannot be cleared by
the hero improving her favor with her god via "good deeds" as the normal
alignment record can.  Erinyes will gain abilities, levels, and attacks
as the hero's alignment abuse worsens.  They will also aggravate
monsters when near the hero.
2024-01-10 22:57:10 -08:00
Pasi Kallinen
db4a44735e Message locations for Monster creation and teleporting 2024-01-03 10:28:16 +02:00
nhmall
5e6d2cd6b5 static analyzer bit for makemon.c
src/makemon.c(907): warning: Dereferencing NULL pointer '((mon))->mextra'.
2023-12-27 09:04:33 -05:00
nhmall
a30c5ceba2 static analyzer bit for makemon.c
src/makemon.c(918): warning: Dereferencing NULL pointer '((mon))->mextra'.
2023-12-24 00:40:48 -05:00
Pasi Kallinen
c0fdb2e8c4 Level temperature affects monster generation
Hot levels generate more fire-resistant monsters, cold
levels cold-resistant ones.
2023-12-18 13:43:41 +02:00
nhmall
ee3ebcc10d fix bug in mon.c reported by paxed
Also adds a shorthand macro
    monsym(&mons[n])
for getting the default symbol, used in the bugfix.
2023-12-06 22:18:11 -05:00
Pasi Kallinen
5dc94f3d83 Macro for picking random entry from array 2023-12-05 10:06:27 +02:00
nhmall
5af8b46f79 follow-up to pmidx, quiet a set of unexpected warnings in makemon
An interesting side effect of the monsndx change that wasn't expected
was a series of warnings on a switch statement in makemon.c. The compiler
is now able to evaluate the switch coverage at compile time.

While the number of warnings was daunting, the fix was simple.

makemon.c: In function ‘is_home_elemental’:
makemon.c:34:9: warning: enumeration value ‘PM_GIANT_ANT’ not handled in switch
[-Wswitch]
    34 |         switch (monsndx(ptr)) {
       |         ^~~~~~
makemon.c:34:9: warning: enumeration value ‘PM_KILLER_BEE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_SOLDIER_ANT’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_FIRE_ANT’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GIANT_BEETLE’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_QUEEN_BEE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ACID_BLOB’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_QUIVERING_BLOB’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GELATINOUS_CUBE’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_CHICKATRICE’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_COCKATRICE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_PYROLISK’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_JACKAL’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_FOX’ not handled in switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_COYOTE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WEREJACKAL’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_LITTLE_DOG’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_DINGO’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_DOG’ not handled in switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_LARGE_DOG’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WOLF’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WEREWOLF’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WINTER_WOLF_CUB’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WARG’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WINTER_WOLF’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_HELL_HOUND_PUP’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_HELL_HOUND’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GAS_SPORE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_FLOATING_EYE’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_FREEZING_SPHERE’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_FLAMING_SPHERE’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_SHOCKING_SPHERE’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_KITTEN’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_HOUSECAT’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_JAGUAR’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_LYNX’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_PANTHER’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_LARGE_CAT’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_TIGER’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_DISPLACER_BEAST’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GREMLIN’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GARGOYLE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WINGED_GARGOYLE’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_HOBBIT’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_DWARF’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BUGBEAR’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_DWARF_LEADER’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_DWARF_RULER’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_MIND_FLAYER’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_MASTER_MIND_FLAYER’ not handled
in switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_MANES’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_HOMUNCULUS’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_IMP’ not handled in switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_LEMURE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_QUASIT’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_TENGU’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BLUE_JELLY’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_SPOTTED_JELLY’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_OCHRE_JELLY’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_KOBOLD’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_LARGE_KOBOLD’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_KOBOLD_LEADER’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_KOBOLD_SHAMAN’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_LEPRECHAUN’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_SMALL_MIMIC’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_LARGE_MIMIC’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GIANT_MIMIC’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WOOD_NYMPH’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WATER_NYMPH’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_MOUNTAIN_NYMPH’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GOBLIN’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_HOBGOBLIN’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ORC’ not handled in switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_HILL_ORC’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_MORDOR_ORC’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_URUK_HAI’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ORC_SHAMAN’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ORC_CAPTAIN’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ROCK_PIERCER’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_IRON_PIERCER’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GLASS_PIERCER’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ROTHE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_MUMAK’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_LEOCROTTA’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WUMPUS’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_TITANOTHERE’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BALUCHITHERIUM’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_MASTODON’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_SEWER_RAT’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GIANT_RAT’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_RABID_RAT’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WERERAT’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ROCK_MOLE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WOODCHUCK’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_CAVE_SPIDER’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_CENTIPEDE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GIANT_SPIDER’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_SCORPION’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_LURKER_ABOVE’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_TRAPPER’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_PONY’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WHITE_UNICORN’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GRAY_UNICORN’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BLACK_UNICORN’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_HORSE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WARHORSE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_FOG_CLOUD’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_DUST_VORTEX’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ICE_VORTEX’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ENERGY_VORTEX’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_STEAM_VORTEX’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_FIRE_VORTEX’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BABY_LONG_WORM’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BABY_PURPLE_WORM’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_LONG_WORM’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_PURPLE_WORM’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GRID_BUG’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_XAN’ not handled in switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_YELLOW_LIGHT’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BLACK_LIGHT’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ZRUTY’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_COUATL’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ALEAX’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ANGEL’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_KI_RIN’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ARCHON’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BAT’ not handled in switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GIANT_BAT’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_RAVEN’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_VAMPIRE_BAT’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_PLAINS_CENTAUR’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_FOREST_CENTAUR’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_MOUNTAIN_CENTAUR’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BABY_GRAY_DRAGON’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BABY_GOLD_DRAGON’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BABY_SILVER_DRAGON’ not handled
in switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BABY_RED_DRAGON’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BABY_WHITE_DRAGON’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BABY_ORANGE_DRAGON’ not handled
in switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BABY_BLACK_DRAGON’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BABY_BLUE_DRAGON’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BABY_GREEN_DRAGON’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BABY_YELLOW_DRAGON’ not handled
in switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GRAY_DRAGON’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GOLD_DRAGON’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_SILVER_DRAGON’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_RED_DRAGON’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WHITE_DRAGON’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ORANGE_DRAGON’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BLACK_DRAGON’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BLUE_DRAGON’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GREEN_DRAGON’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_YELLOW_DRAGON’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_STALKER’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_LICHEN’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BROWN_MOLD’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_YELLOW_MOLD’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GREEN_MOLD’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_RED_MOLD’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_SHRIEKER’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_VIOLET_FUNGUS’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GNOME’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GNOME_LEADER’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GNOMISH_WIZARD’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GNOME_RULER’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GIANT’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_STONE_GIANT’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_HILL_GIANT’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_FIRE_GIANT’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_FROST_GIANT’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ETTIN’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_STORM_GIANT’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_TITAN’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_MINOTAUR’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_JABBERWOCK’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_KEYSTONE_KOP’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_KOP_SERGEANT’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_KOP_LIEUTENANT’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_KOP_KAPTAIN’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_LICH’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_DEMILICH’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_MASTER_LICH’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ARCH_LICH’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_KOBOLD_MUMMY’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GNOME_MUMMY’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ORC_MUMMY’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_DWARF_MUMMY’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ELF_MUMMY’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_HUMAN_MUMMY’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ETTIN_MUMMY’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GIANT_MUMMY’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_RED_NAGA_HATCHLING’ not handled
in switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BLACK_NAGA_HATCHLING’ not handled
in switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GOLDEN_NAGA_HATCHLING’ not
handled in switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GUARDIAN_NAGA_HATCHLING’ not
handled in switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_RED_NAGA’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BLACK_NAGA’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GOLDEN_NAGA’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GUARDIAN_NAGA’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_OGRE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_OGRE_LEADER’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_OGRE_TYRANT’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GRAY_OOZE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BROWN_PUDDING’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GREEN_SLIME’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BLACK_PUDDING’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_QUANTUM_MECHANIC’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GENETIC_ENGINEER’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_RUST_MONSTER’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_DISENCHANTER’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GARTER_SNAKE’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_SNAKE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WATER_MOCCASIN’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_PYTHON’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_PIT_VIPER’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_COBRA’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_TROLL’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ICE_TROLL’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ROCK_TROLL’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WATER_TROLL’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_OLOG_HAI’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_UMBER_HULK’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_VAMPIRE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_VAMPIRE_LEADER’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_VLAD_THE_IMPALER’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BARROW_WIGHT’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WRAITH’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_NAZGUL’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_XORN’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_MONKEY’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_APE’ not handled in switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_OWLBEAR’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_YETI’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_CARNIVOROUS_APE’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_SASQUATCH’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_KOBOLD_ZOMBIE’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GNOME_ZOMBIE’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ORC_ZOMBIE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_DWARF_ZOMBIE’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ELF_ZOMBIE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_HUMAN_ZOMBIE’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ETTIN_ZOMBIE’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GHOUL’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GIANT_ZOMBIE’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_SKELETON’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_STRAW_GOLEM’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_PAPER_GOLEM’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ROPE_GOLEM’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GOLD_GOLEM’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_LEATHER_GOLEM’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WOOD_GOLEM’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_FLESH_GOLEM’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_CLAY_GOLEM’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_STONE_GOLEM’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GLASS_GOLEM’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_IRON_GOLEM’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_HUMAN’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_HUMAN_WERERAT’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_HUMAN_WEREJACKAL’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_HUMAN_WEREWOLF’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ELF’ not handled in switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WOODLAND_ELF’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GREEN_ELF’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GREY_ELF’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ELF_NOBLE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ELVEN_MONARCH’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_DOPPELGANGER’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_SHOPKEEPER’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GUARD’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_PRISONER’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ORACLE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ALIGNED_CLERIC’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_HIGH_CLERIC’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_SOLDIER’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_SERGEANT’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_NURSE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_LIEUTENANT’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_CAPTAIN’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WATCHMAN’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WATCH_CAPTAIN’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_MEDUSA’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WIZARD_OF_YENDOR’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_CROESUS’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GHOST’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_SHADE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WATER_DEMON’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_AMOROUS_DEMON’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_HORNED_DEVIL’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ERINYS’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BARBED_DEVIL’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_MARILITH’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_VROCK’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_HEZROU’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BONE_DEVIL’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ICE_DEVIL’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_NALFESHNEE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_PIT_FIEND’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_SANDESTIN’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BALROG’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_JUIBLEX’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_YEENOGHU’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ORCUS’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GERYON’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_DISPATER’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BAALZEBUB’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ASMODEUS’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_DEMOGORGON’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_DEATH’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_PESTILENCE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_FAMINE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_MAIL_DAEMON’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_DJINNI’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_JELLYFISH’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_PIRANHA’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_SHARK’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GIANT_EEL’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ELECTRIC_EEL’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_KRAKEN’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_NEWT’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GECKO’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_IGUANA’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BABY_CROCODILE’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_LIZARD’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_CHAMELEON’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_CROCODILE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_SALAMANDER’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_LONG_WORM_TAIL’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ARCHEOLOGIST’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_BARBARIAN’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_CAVE_DWELLER’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_HEALER’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_KNIGHT’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_MONK’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_CLERIC’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_RANGER’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ROGUE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_SAMURAI’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_TOURIST’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_VALKYRIE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WIZARD’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_LORD_CARNARVON’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_PELIAS’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_SHAMAN_KARNOV’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_HIPPOCRATES’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_KING_ARTHUR’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GRAND_MASTER’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ARCH_PRIEST’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ORION’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_MASTER_OF_THIEVES’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_LORD_SATO’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_TWOFLOWER’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_NORN’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_NEFERET_THE_GREEN’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_MINION_OF_HUHETOTL’ not handled
in switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_THOTH_AMON’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_CHROMATIC_DRAGON’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_CYCLOPS’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_IXOTH’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_MASTER_KAEN’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_NALZOK’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_SCORPIUS’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_MASTER_ASSASSIN’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ASHIKAGA_TAKAUJI’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_LORD_SURTUR’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_DARK_ONE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_STUDENT’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_CHIEFTAIN’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_NEANDERTHAL’ not handled in
switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ATTENDANT’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_PAGE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ABBOT’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ACOLYTE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_HUNTER’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_THUG’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_NINJA’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_ROSHI’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_GUIDE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_WARRIOR’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘PM_APPRENTICE’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘NUMMONS’ not handled in switch
[-Wswitch]
makemon.c:34:9: warning: enumeration value ‘NON_PM’ not handled in switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘LOW_PM’ not handled in switch [-Wswitch]
makemon.c:34:9: warning: enumeration value ‘SPECIAL_PM’ not handled in switch
[-Wswitch]
2023-11-23 12:23:09 -05:00
PatR
b03e5c1ad7 ^G of unseen monster
I used ^G to create a monster and specified "invisible owlbear".  I
then got "An owlbear appears next to you."  Except it didn't; it was
invisible and I lacked see-invisible.  I imagine that newsym() was
called for the new-yet-invisible monster, but that remained buffered
and was gone overridden by the time pending map update got flushed
at some point after the monster was made invisible.

Add a new makemon() flag to turn a newly created monster invisible
during its creation, before "monster appears" message is delivered.
Since that message will now be suppressed in this situation, use the
cursor-flash hack that indicates where the new, unseen monster got
placed.  Creating "1000 invisible <mon>" is something you probably
won't do twice.
2023-11-10 15:43:02 -08:00
Michael Meyer
674b8c6b07 Add additional sink potion #dipping effects
Also put "Nothing seems to happen." into c_common_strings, since it's
used all over several files.
2023-11-09 16:41:05 -08:00
PatR
b6c942d062 inappropriate 'object 0' in makemon() 2023-09-21 13:23:15 -07:00
PatR
bbba8b82d2 fix issue #1062 - monster hiding messages
Reported by Umbire:  if a statue of a hider-under was activated by
a statue trap, it would hide underneath its own statue.  Also, the
hero saw a snake hide under unseen submerged kelp.

Both of those things were exposed by new "you see <monster> hide"
message rather than caused by it.  It also led to the [re-]discovery
that an existing monster hiding under a statue that was a not-yet-
triggered trap prevented the trap from producing a monster.

This redoes yesterday's can't-hide-under-statue change:  hiders can
hide under statues again, but they can't hide under anything at trap
locations.  [Pits containing one or more objects are an exception,
although it seems silly that a hero is prevented from falling into
one by the presence of a tiny creepy-crawly hiding under a ring or
dart in there.]  So, hider-underers won't be able to interfere with
statue traps by being present at the trap location.  [Trappers and
lurkers-above probably need a similar restriction; I didn't look.
They avoid trap spots rather than get lured to such by objects.]

It also prevents newly created hider-underers from becoming hidden
as part of the their creation (except when that creation is part
of level creation) whether their creation uses up an object (statue
activation, egg hatching) or there are simply other items present.
That will prevent statue of a hider producing a monster that hides
under the activated statue (which was happening due to the sequence
create monster, transfer any statue contents to monster inventory,
destroy statue).

The can't-hide-under-statues code has been repurposed to prevent
hiding under gold pieces unless there are at least 10 (arbitrary
threshold) of those or they're in a pile with some other object(s).

Sea monsters hide in water regardless of the presence of objects.
Prevent other swimmers from hiding under objects at water locations.
Such creatures don't have gills and shouldn't be able to stay
submerged in hiding for an arbitrary length of time.  [No exception
is made for non-breathers.  The overlap between swimmers and hider-
underers is limited to small snakes, even though it is feasible for
a creature wearing an amulet of magical breathing to polymorph into
one.  Heros don't spend enough time underwater to worry about snakes
hiding under kelp or thrown junk.]

Lastly, alter the "suddenly, you notice a <monster>" message if
monster-vs-monster activity causes one you've just seen going into
hiding comes back out again without any intervening messages.  [I'm
not sure whether something similar is needed for the "Wait.  There's
something there" message in the you-vs-monster case.]

Fixes #1062
2023-06-16 21:19:43 -07:00
PatR
e9c58c2fe4 breaking crystal armor
Instead of a 5% chance for crystal plate mail or crystal helmet to
break each time it's subjected to breakage, switch to a 10% chance
but the damage is treated as erosion rather than break/don't-break.
'crystal foo' will need to go through four stages of damage before
breaking:  cracked crystal foo, very cracked crystal foo, thoroughly
cracked crystal foo, then gone.  Crackproof handling is included,
described as tempered crystal foo.

It mostly still applies to throwing and kicking the item.  Having
some hits trigger damage might be worthwhile but isn't implemented.

Object creation within lua code probably needs to be updated, and
when the Mitre of Holiness is created in the priest/priestess quest
it should start out as tempered (erodeproof).  Perhaps it ought to
be erodeproof regardless of where/how it's created.
2023-06-14 15:54:04 -07:00
PatR
70949a787e mplayer creation bestowing 0 gold pieces
Reported directly to devteam:  a fake player monster was petrified
and when creating its statue yielded "Calculating weight of 0 gold
pieces?".

Fake player monsters on the Astral Plane level were being created
with rn2(1000) gold pieces so had a 1 in 1000 chance of that being 0.
Gold gets created with a non-zero amount but the routine that gives
it to a monster sets the amount to the requested value.  That didn't
update the weight so didn't notice the 0.  Putting it into a container
(the statue) did recalculate the weight and did notice.

There was a choice between forcing a non-zero amount or allowing 0
and bypassing its creation and placement in monster's inventory.
I went with the latter.
2023-04-29 05:30:14 -07:00