Commit Graph

11214 Commits

Author SHA1 Message Date
Pasi Kallinen
05263bc276 Fix memory leak when adding basic color menucolors 2020-10-30 23:04:22 +02:00
Patric Mueller
7086427aaa Enable checkpointing again by default
This was accidentally changed in the options refactoring in commit 68fdc3bbcb.
2020-10-30 20:30:21 +01:00
nhmall
96ba25241c revert to numeric 2020-10-30 09:14:23 -04:00
nhmall
01c4a50f98 warning and a bit of alignment-related header consolidation 2020-10-30 09:08:23 -04:00
Pasi Kallinen
91c46ab54b Restful sleep regenerates hp
When sleeping due to wearing an amulet of restful sleep,
hit points will regenerate, one point faster than with normal regeneration.
2020-10-29 19:14:32 +02:00
PatR
f5a6267b3a Qt character selection hackery
Tweak the Qt character selection widget format a bit.  Forcing
the 'logo' string to be taller has resulted in stretching the
window enough to fit all the roles without a scrollbar.  (On my
monitor on my OSX system, that is.  It won't necessarily be an
improvement for anybody else but shouldn't break anything.)

The TODO item about making it taller so that role list fits is
still there.
2020-10-28 18:07:27 -07:00
PatR
706977a1e7 Qt: character selection
For Qt's character selection widget, only allow the [Play] button
to be used when the character name field is non-blank.  When that
field is blank, show "(required)" there.

Catch up with SYSCF for checking generic names like "player".

Fix up handling for some conditionally unused variables.
2020-10-28 01:43:53 -07:00
PatR
70e4f5b197 Qt: new game vs saved game selection
If player got Qt's saved game selection widget at startup but
picked "new game" there, the save file for the last character
in the list of saved games would be clobbered with the new
character's game if a save was performed.  It wasn't necessarily
easy to spot because saved game selection shows the character
name from inside the file rather than from the file name, so the
next restore would look normal except for one older character
missing.

Noticed while testing:  when you used the character selection
widget (either by picking "new game" in saved game selection or
because there aren't any save files), if you blanked out the
name field or it was already blanked because a generic name like
"player" had been specified, then clicked on "play", the program
would get stuck in a loop somewhere.  I didn't try to figure out
where, just changed qt_askname() to revert to original name if
it ended up with a blank one.
2020-10-27 15:10:22 -07:00
PatR
14ec98a241 Qt saved game selection
This fixes the Qt popup widget for selecting among saved games.
The character name from each applicable save file is shown in a
button and clicking on one of those buttons restores corresponding
file.  Previously all the buttons were written on top of each
other so only the final name was visible and the button for the
initial name received the click.  The widget also has [quit] and
[new game] buttons.

This fixes restoring an existing save file if no character name
is supplied on the command line in the options.  It does not fix
the problem where picking [new game] remembers the file name of
the last saved game in the popup's list and overwrites that file
(after requesting confirmation to do so) if/when you eventually
save.  The resulting file will contain the character just saved
but be named for the earlier one.  It may not be obvious because
on subsequent restores it will list names from inside the files
rather than deduce those from file names, so the clobbered/
misnamed file will just show up as the former new character.
2020-10-26 22:37:40 -07:00
PatR
9c384ba867 Qt popup dialog input vs '&'
I'm not sure whether any yn_function() calls include ampersand
in the list of acceptable choices but if any did, the button
for that character would have shown up blank.  (Clicking on it
would have successfully produced '&' as player's input though.)
2020-10-26 12:44:40 -07:00
PatR
ec5772d6d2 Qt hitpointbar
Add support for the 'hitpointbar' to the Qt interface.  Rather
than rendering the status title (name+rank or name+monster_species)
using inverse video for leading substring to produce distinct left
and right sides, draw a horizontal bar above that field.

The left portion (current health) is thicker and uses red for <10%
or <5hp, orange for <25% or <10hp, yellow for <50%, green for <75%,
blue for <100%, and black for 100%.

The right portion (missing maximum health) is thinner and runs
from white (paired with red), light gray (paired with orange),
dark gray (with yellow), plain gray (which turns out to be darker
than dark gray, with green), dark blue (with blue), and black (but
black is never shown for injury portion because that's suppressed
when at full health).

Qt already supports a square frame around the hero's map tile that
changes color according to health.  Turning the hitpointbar option
Off or On has no effect on that.
2020-10-25 15:47:49 -07:00
Patric Mueller
4e1cf071ae List lamps and lanterns in charging prompt
Brass lanterns and oil lamps are always chargeable.
Magic lamps are only listed if they are not yet identified.
2020-10-25 19:25:39 +01:00
Pasi Kallinen
22ca1ae4da Fix monster hiding under hatching egg staying hidden 2020-10-24 18:32:08 +03:00
PatR
1b37ac6280 disclosure prompt phrasing
With to-be-3.7, if game ends without any achievements, the conduct
disclosure prompt is the same as it has always been
  Do you want to see your conduct?
If it ends after attaining one achievement (probably entering the
mines or acquiring the second rank title when gaining Xp level 3)
you're asked
  Do you want to see your conduct and achievement?
which looks awkward after the fact if 'y' reveals multiple conducts.

Instead of deciding whether to pluralize "conduct(s)", simplify the
prompt when one or more achievements have been attained to be
  Do you want to see your conduct and achievements?
That works even when there is only one achievement.
2020-10-24 03:17:19 -07:00
Patric Mueller
8cc75bf583 Fix "may be used uninitialized" warning 2020-10-24 11:38:22 +02:00
PatR
74c2716004 fix #K2622 - fire/frost horn feedback for monster
When a monster used a fire horn or frost horn to attack the hero,
the feedback claimed that the attack was being directed at itself.
The error occurred in code that was added to 3.7 during 3.6
development but wasn't present in 3.6.x so fixes entry is in the
"exposed by git" section.
2020-10-23 20:15:01 -07:00
PatR
0e713dc4e9 fix #K2617 - metallivores eating iron bars
Monsters with rust attacks (rust monster) and corrosion attacks
(black pudding, gray ooze) can eat or otherwise destroy iron bars
but xorns could only move through the iron bars spot without being
able to eat the metal there.  Change xorn to eat bars instead of
phazing through them.  Lets rock moles eat bars too.

Hero polymorphed into a rust monster would eat bars if trying to
move to their location but couldn't do so if already there (maybe
was in xorn form and now in rust monster form).  Xorns could pass
through them but not eat them.  Allow hero metallivores to eat
bars at the current location via 'e', similar to eating food off
the floor.  Hero as rock mole behaves like rust monster.
2020-10-23 19:43:10 -07:00
Pasi Kallinen
aeb0ea65e3 Mild Zombie Apocalypse
When a zombie (or lich) kills a monster in melee without a weapon,
the monster can rise few turns later as a zombie.

The only creatures that can be zombified are ones that actually have
a zombie counterpart monster. A zombie cannot turn a jackal into
a zombie, for instance. But it could turn a shopkeeper into a human
zombie, or a dwarf king into a dwarf zombie.

Zombies will fight with monsters that can be turned into zombies.

Originally this was a SliceHack feature, but this is based on xNetHack
version of it, with some modifications.
2020-10-23 19:47:10 +03:00
Patric Mueller
1cc26106bf Tossed upwards objects got two times half physical damage reduction 2020-10-23 11:04:29 +02:00
Bart House
7e3a739ef9 Add stringization of nhassert expression. 2020-10-20 20:14:27 -07:00
nhmall
d1c7f26d4b clear a couple of new warnings
mondata.c:198:17: warning: unused variable 's' [-Wunused-variable]
    const char *s;
                ^
1 warning generated.

steed.c:43:17: warning: unused variable 's' [-Wunused-variable]
    const char *s;
                ^
1 warning generated.
2020-10-20 19:37:51 -04:00
Pasi Kallinen
566dde8683 Match object description via single function
making the code more readable.

Instead of doing strcmp(OBJ_DESCR(objects[otyp]), "foo"),
just call objdescr_is(obj, "foo")

(via xNetHack)
2020-10-20 19:19:57 +03:00
Bart House
5880da9269 Add cpp.hint file to NetHack project. 2020-10-19 16:26:01 -07:00
Bart House
c33a9ed94a Add inlcude files to NetHackW project. Add cpp.hint file. 2020-10-19 16:25:42 -07:00
Bart House
d1404d345c Fix compiler warning. 2020-10-19 16:20:49 -07:00
Bart House
b4c4491229 Fix sign/unsigned comparison bug.
We are comparing a signed char with unsigned int.  The signed char will be
sign exetended when converted to unsigned int causing an unexpected
result.
2020-10-19 16:19:01 -07:00
Bart House
a9deeb69c9 Removing assertion that does not hold under all scenarios.
When we save gamestate as part of making an insurance snapshot, we will
save message history which will clear toplines but leaving window state
in tack including the need for more.
2020-10-19 16:03:10 -07:00
Bart House
2c752cce69 Added assertions to check toplin state. 2020-10-19 15:59:46 -07:00
Bart House
aee1509979 Fixed bug with inmore and toplin state management.
When fuzzing, we would increment ttyDisplay->inmore but then prematurely
exit more() leaving ttyDisplay->inmore set.

Under various conditions, we can request to remember the topline when
the topline had not yet been acknowledged leaving toplin state in an
inappropriate state.
2020-10-19 15:59:01 -07:00
Bart House
362fd6ffbf Add stopping in the debugger when nhassert() is hit in the windows port.
When stopping in the debugger after having called impossible, the windowing
state will have been modified since the assertion was hit.  This made
examining state that caused the nhassert to fire no longer possible.
To avoid this issue, we now detect the debugger and stop in the debugger
prior to impossible.
2020-10-19 15:56:49 -07:00
Bart House
93ce6857d3 Tweaks to nhassert implementation. Change to warnings on MSC build. 2020-10-19 15:55:32 -07:00
Bart House
3842da9dbd Added nhassert to core. 2020-10-19 15:51:41 -07:00
Bart House
dde11630e8 Modified nhassert_failed to call impossoible. 2020-10-19 15:36:34 -07:00
Bart House
783efd3524 Remove the remapping of snprintf to _snprintf when compiling with MSC.
_snprintf and snprintf have one very important semantic difference.
_snprintf does NOT add terminating null character when the buffer limit
is reached while snprintf guarantees a terminating null character.  It
was a mistake to make this naming change hiding the fact that the
semantics don't match what the developer might expect.
2020-10-19 15:32:58 -07:00
Bart House
7795d82be6 Improved readability of topline state management. 2020-10-19 15:19:09 -07:00
Pasi Kallinen
3a31587ca9 Prevent ghosts from being renamed
(via xNetHack)
2020-10-18 20:28:32 +03:00
Pasi Kallinen
f38cb63714 Spitting monsters try to stay away from melee range 2020-10-18 19:18:38 +03:00
PatR
9a6bc0fd8f Qt status window icon alignment
When the game windows were initialized, the anhk icon for alignment
was centered relative to Lawful/Neutral/Chaotic label but during
the first status update it noticeably shifted left.  Non-blank
hunger or encumbrance states could change from centered to left
justified when they were present and the icon was replaced.  Oddly,
resetting the 'centered' attribute for the widget wasn't sufficient
to fix this.  Running the resize code for that widget did.  Another
case of trial and error to make things work the way they ought.

Also, don't highlight a change in alignment or dungeon location as
"got worse" if the internal numeric value went down instead of up;
always highlight as "got better" for those two fields.  There ought
to be a third choice for just "changed" but that would have been
more complicated.
2020-10-17 11:10:00 -07:00
Pasi Kallinen
fc6b491303 Fix thinko in reset travel dest condition 2020-10-17 16:48:07 +03:00
Pasi Kallinen
5ddafa5c81 Only reset if we actually went to travel destination 2020-10-17 12:13:17 +03:00
Pasi Kallinen
a9e4904131 Reset travel destination if reached via teleport 2020-10-17 12:08:51 +03:00
Pasi Kallinen
b6125b8f78 Pre-populate teleport destination prompt with travel destination
This has been implemented in multiple variants, and seems like
a small but useful quality of life improvement.
2020-10-16 19:14:01 +03:00
PatR
9d3dfd59f9 Qt paperdoll - slight reorganization
Three-way swap:  move blindfold to alt-weapon slot, alt-weapon to
quiver slot, and quiver to former blindfold slot.  Affects first
and third rows of the 6x3 grid.

Before  |After
 x H b  | b H q
 S a w  | S a w
 G C q  | G C x

[x=alt-weapon, H=helmet, b=blindfold, S=shield, a=amulet, w=weapon,
 G=gloves, C=cloak, q=quiver; bottom three rows not changed so not
 shown.]
2020-10-15 18:22:26 -07:00
nhmall
4c933fbf3c recognize visual studio 2019 16.7.6 in sys/winnt/Makefile.msc 2020-10-15 09:38:52 -04:00
PatR
a0c6118c97 Qt paperdoll - tool tips used to describe items
New for Qt, moving the mouse over one of the slots in the paperdoll
inventory subset and letting it pause there will use Qt's tool tip
mechanism to give a description of the item under the pointer, if
there is one, or of what the slot would contain when there isn't.

So "e - uncursed leather gloves (being worn)" or "no gloves" when
the pointer is over the glove slot.  If you do something with the
keyboard to make the paperdoll change while the mouse is still
hovering, you'll need to move the pointer slightly to have Qt
recheck for tool tip at that spot.  It may be feasible to force
an immediate update, but I'm satisfied with how it's working.

Interestingly, you can move pointer and hover while yn_function()
has asked you to pick an inventory item and is waiting for an
answer.  Mostly useful for Take-off/Remove or #adjust.
2020-10-14 16:06:25 -07:00
PatR
42b466e87b artifact.h formatting
The automated reformatting way back when left artifact.h in need
of manual fixup, particularly SPFX_HPHDAM.
2020-10-14 09:25:45 -07:00
PatR
6a443226d1 Qt toolbar: add button for 'search'
The toolbar contains do-Again, Pick up, Drop, Kick, Throw, Fire,
Eat, and Rest.  Insert Search in front of Rest since it's useful
in its own right and some players prefer it even when resting.
Includes a new 12x13 icon; a tiny magnifying glass shown straight
on is something I can manage.
2020-10-14 03:02:55 -07:00
PatR
7011b10f64 Qt "Get" -> "Pick up"
Both the toolbar button for pick up and the action menu entry for
pick up were labeled "Get".  That's confusing for an experienced
player who is looking for "Pick up".  Rename both of them.

Also, consolidate repetitive code used to set up toolbar buttons.
2020-10-13 14:05:52 -07:00
PatR
267228d0dd Qt toolbar 'rest' button
An issue in the core made the "Zz" button in the Qt toolbar only
work if rest_on_space was enabled.  cmd_from_func() was returning
' ' instead of '.' for the keystroke to run the rest command.
2020-10-13 13:41:57 -07:00
nhmall
060bfe6f5d Merge branch 'NetHack-3.7' of https://rodney.nethack.org:20040/git/NHsource into NetHack-3.7 2020-10-11 14:30:30 -04:00