Commit Graph

16373 Commits

Author SHA1 Message Date
Pasi Kallinen
96902f4ff0 Split populating a random maze 2024-01-21 22:48:41 +02:00
PatR
13ff565a67 github issue #1201 - Forcefighting webs
Issue reported by Umbire:  suggestion to always destroy adjacent webs
via 'F'<dir> if wielding Sting or Fire Brand.

Sting already did that; this adds Fire Brand.

This also augments the #untrap command when wielding either of those,
or any other blade.  And rephrases successful untrap message
"You remove {the or your} {bear trap or webbing} from Fido." to
"You extract Fido from {the or your} {bear trap or web}." since the
trap remains intact.

Forcefight and #untrap against webs ought to be reconciled to remove
[some of] their differences and/or share code.  But not by me...

Closes #1201
2024-01-21 11:58:44 -08:00
nhmall
81b45f92c8 static analyzer bit in sounds.c 2024-01-21 14:09:46 -05:00
PatR
9e640fb14e gcc warning fix
Avoid two new warnings in xname_flags() about strncpy() not supplying
a terminating '\0'.  That's exactly why strncpy() was being used.

The gcc manual lists -Wno-stringop-truncation to suppress the warning
but not -Wstringup-truncation to voluntarily enable it, so the pragma
stuff in warnings.h probably won't work for this.  Just switch from
strncpy() to memcpy() instead even though it seems like obfuscation.
2024-01-21 11:01:45 -08:00
nhmall
d4f04fbdc8 static analyzer bit in options.c
Analyzer didn't like the use of strchr on an incomplete type.
Move the guts into a function in o_init.c.
2024-01-21 13:38:25 -05:00
nhkeni
6f47094b8d Add a sanity check to nhl_init() 2024-01-21 12:44:05 -05:00
nhmall
0b684339ef more vestiges of C(color) 2024-01-21 11:12:13 -05:00
PatR
1a2b2a8cae object formatting fix for charged rings
The bounds checking code for object formatting had a typo that left
out the space between +N and <ring of type>.
2024-01-21 07:58:25 -08:00
nhmall
8f35e33a2e follow-up nonnull in u_init.c
u_init.c had had assessments for nonnull arguments on
its local functions carried out already.

A couple of new static functions added earlier today immediately
dereference their args, so declare those as nonnull.

This also gives a more self-describing name to one arg.
2024-01-21 09:48:36 -05:00
Pasi Kallinen
f889478262 Split ini_inv obj wear/wield/learn 2024-01-21 14:34:21 +02:00
Pasi Kallinen
2f5851e394 Split ini_inv object field adjustments 2024-01-21 14:16:06 +02:00
Pasi Kallinen
f1bf2418ff Split ini_inv obj race substitutions 2024-01-21 14:02:09 +02:00
Pasi Kallinen
d2e7bfa6cd Split out ini_inv filtered mkobj 2024-01-21 13:46:20 +02:00
Pasi Kallinen
8615401278 Split out initial STR and CON boost if inventory too heavy 2024-01-21 12:51:46 +02:00
Pasi Kallinen
311e82a9cc Split init attr minor variation 2024-01-21 12:45:13 +02:00
Pasi Kallinen
1d4cdf09f6 Split u_init race specific stuff 2024-01-21 12:38:06 +02:00
Pasi Kallinen
2e56598779 Split u_init role specific stuff 2024-01-21 12:34:43 +02:00
Pasi Kallinen
a46e41816b Split freeing proto_dungeon data 2024-01-21 12:17:06 +02:00
Pasi Kallinen
0eb96d7ed6 Split special level location fixup 2024-01-21 12:11:22 +02:00
Pasi Kallinen
f34a07a3d2 Split out castle tune init 2024-01-21 11:55:29 +02:00
Pasi Kallinen
0e64fddec1 Split out dungeon parsing 2024-01-21 11:51:15 +02:00
PatR
593a93d254 obj->how_lost fix
PR #1140 added checking the thrown, stolen, and dropped flags of an
item when testing whether it would merge (at my suggestion...) with
a stack in the target list (hero's invent).  That interferred with
picking it back up--whether via autopickup or explicit pickup--while
inventory was full even when the item would otherwise be mergable.

There was some trial and error involved when trying to figure where
to put the fix but things seem to be working.

This replaces a static analyzer workaround and could possibly bring
its unwarranted complaint back.
2024-01-21 01:17:18 -08:00
Pasi Kallinen
5bf258629a Split up hero attribute init 2024-01-21 10:41:57 +02:00
PatR
7b1ec30d0d bounds checking by doname() and xname()
Try harder to prevent buffer overflow when formatting objects.
I don't have any test cases where overflow has been happening so
don't really know whether this works reliably.  And it doesn't try
to check prefix construction by doname().  [Yet?]
2024-01-20 17:53:44 -08:00
Pasi Kallinen
414ee6eba7 Split setting up dungeon depth 2024-01-20 16:25:13 +02:00
Pasi Kallinen
1c0662ddd7 Split setting up dungeon entry level 2024-01-20 16:18:06 +02:00
Pasi Kallinen
d5fba06837 Split dungeon branch parsing 2024-01-20 16:00:02 +02:00
Pasi Kallinen
57747535af Add m_next2u, analogous to m_next2m and next2u 2024-01-19 21:53:25 +02:00
PatR
b6bc3ef698 more Guidebook for containers
"blue potion" wasn't a very good example for an item in a container;
plain "blue" isn't a potion description.

Add an extra sentence to make the association between a container's
"item count" that's really a stack count and the fact that inventory
slots are for stacks rather than for individual items too.

Style/usage bit: avoid using "another" twice in the same sentence.

Fix a typo in the spelling of "contents".
2024-01-19 10:44:39 -08:00
Pasi Kallinen
ce34239885 Zero init the NhRect 2024-01-19 18:19:56 +02:00
Pasi Kallinen
2212cf27ec Lua: Allow creating gas clouds
Use the gas clouds in the Clouds themeroom.
Use the existing visible_region_at() in the vision code.
2024-01-19 17:59:43 +02:00
nhmall
da4bf5a87e updated Guidebook.txt 2024-01-19 09:31:29 -05:00
nhmall
5ab9904b8f fix Guidebook.tex processing 2024-01-19 08:36:12 -05:00
PatR
b156912c46 Guidebook tweaks for "containers" sub-section 2024-01-18 23:58:53 -08:00
nhkeni
bacfa6ef40 More lua setup cleanup
Stop (poorly) tracking the amount of memory in use and get
 it from Lua instead.
Simplify nhl_alloc.
2024-01-17 15:04:40 -05:00
nhmall
a82317e364 update tested versions of Visual Studio 2024-01-17 2024-01-17 12:28:33 -05:00
Pasi Kallinen
5d28e24477 Some lua state allocator fixes
Run GC on the themeroom lua states, as they're not freed
until end of game.

Allocate the exact amount of data we use instead of padding it.

Free our state data after closing the lua state; doing it
the other way is the way to madness, which was kept at bay
by the padded allocation amount.
2024-01-17 17:41:44 +02:00
PatR
6b8079a16f secondary damage for monster spell attacks
Have monster spells
| "shower of missiles" (AT_MAGC+AD_MAGM: Angels, Yeenoghu)
scuff an engraving at the hero's spot if there is one,
| "frost" (AT_MAGC+AD_COLD: only Asmodeus)
freeze water and lava terrain,
| "flames" (AT_MAGC+AD_FIRE: moot, no monster has this attack)
burn items on the floor at the hero's spot and melt ice terrain,
| "pillar of flame" (AT_MAGC+AD_CLRC+randomly chosen clerical spell)
which already burns floor items, melt ice too, and
| "lightning" (same casters as pillar of flame)
give a tiny chance of destroying iron bars.  The chance to hit bars
is low and the hero has to be targeted while located on an iron bars
spot so probably won't happen before the sun burns out, but only
needed one extra line of code.

Only the first two have been thoroughly tested.
2024-01-16 14:01:38 -08:00
PatR
a5c7fede99 mcastu()'s monst->mspec_used usage
Replace some suspicious mixing of signed and unsigned.
2024-01-16 10:19:00 -08:00
nhmall
c134a128ac rephrase rotten metal
Resolves #1202
2024-01-15 17:58:11 -05:00
PatR
8111a7aff2 covetous monster tactics on completely full level
If a covetous monster tried to teleport adjacent to the hero but the
level was too full to move it from its current spot, it would be
sent off level to wait for the hero to leave and return instead just
staying put.
2024-01-15 14:25:06 -08:00
Pasi Kallinen
1c16ef68eb Fix spot_monsters giving a segfault in some cases 2024-01-15 20:53:24 +02:00
PatR
40e919dbf9 github issue #1200 - erronenous engraving feedback
Issue reported by chappg:  if a monster or object covered an engraving,
examining that monster or object with farlook would include the text
of the engraving even though it wasn't the thing being examined.

The report was for a bones level but that only mattered because it was
a ghost on top of a grave (and the engraving on its headstone) that was
being examined; bones data itself wasn't pertinent.  It would happen
with any engraving once the spot was mapped as an engraving or a grave
provided that something else was currently displayed at the location.

Bug was introduced by commit 389f03e90e
two months ago.  Mea culpa.

Closes #1200
2024-01-15 02:56:26 -08:00
Pasi Kallinen
9745121137 fixes entry for the accessibility options 2024-01-15 11:00:21 +02:00
PatR
e4534d60e3 more Forcefighting webs
Hero attempting to cut an adjacent web can so with secondary weapon
if dual wielding and primary isn't a blade.

Mostly message handling for the 'neither weapon is a blade' situation.
2024-01-14 16:58:43 -08:00
Pasi Kallinen
ccfcc32843 Message location for monster wielding an item 2024-01-14 17:43:27 +02:00
Pasi Kallinen
679c312d4d Message location for monster hurling a potion 2024-01-14 17:21:48 +02:00
nhmall
bbb7523a04 vestiges of C(color) 2024-01-14 08:57:28 -05:00
Pasi Kallinen
3160112ece Accessibility: Show a message when monster is spotted
Adds a new boolean option, spot_monsters.  If on, every time
the hero notices a monster which was out of sight before,
a message is given.  Combine with accessiblemsg to get the
monster location:

(3north): You see a newt.

Breaks saves and bones.
2024-01-14 13:33:02 +02:00
PatR
627b40fb57 redo monsters.h
Change MON(name, ...) to MON(NAM(name), ...) and get rid of MON3(),
replacing it with MON(NAMS(malename,femalename,neutername), ...).
That eliminates the macro which uses 16 parameters.  Standard C
allows compilers to impose a limit of 15, rejecting 16 or more while
still being in compliance.

That necessitated some reformatting since it made the first line of
each entry longer.  Shorten that by having all entries start with
name(s) and symbol on the first line, then LVL() and generation flags
on the second line, then attacks start on the third.

Reformat attacks to change ATTK(one) + 4 * NO_ATTK on one line plus
an orphaned NO_ATTK on the next line to always use ATTK(one) on first
line and all 5 NO_ATTKs on the next line.  Similarly, change ATTK(1of2)
ATTK(2of2) NO_ATTK on one line followed by 3 * NO_ATTK on the next line
into ATTK(1of2) ATTK(2of2) followed by 4 NO_ATTKS.  For three attacks,
list two on the first line then the third and 3 * NO_ATTK on the next.
Four or more attacks use a third line; ATTK(1of4+) ATTK(2of4+) on the
first, ATTK(3of4+) ATTK(4of4+) on the second, and whatever's left on
the third.  SIZ() follows on its own line for each of the cases.

Split the final line of each entry so that the difficulty value is the
first thing on that line, followed by color and enum tag.  This may or
may not make moving the difficulty into LVL() easier someday (which
would have been an alternate way to reduce the 16 args that MON3 had).

The file gets stretched out by many lines but entries should be easier
to read (matter of taste, I suppose).

I didn't attempt to clean up M1_foo, M2_bar, M3_quux; too hard....
I also didn't touch SIZ() or resistances which are less cluttered than
the other stuff.
2024-01-12 17:06:47 -08:00