Steve VanDevender noticed that fixing the default text window font
caused the rip window to use this font as well, due to intricacies
of X11 resource relationships.
The problem with the new autocomplete was tracked down to
be the result of differences between different implementations
of backsp(). The differences go all the way back to the
early MSDOS port by the look of it, and the win32,
and Mac tty ports all seemed to pattern themselves after the
MSDOS port for that routine. Apparently, it didn't cause any
harm until now.
The problem is that backsp() sends a character sequence
of 0x08, 0x20, 0x08 on at least those ports, where the Unix
tty code only sends 0x08. So the characters in the new
autocomplete were all being erased from the screen.
This patch only fixes the win32 tty port, so I've left the
conditional code in getline.c for DOS and Mac. I
Change tty extended command autocomplete, based loosely on <Someone>'s
patch, to allow you to type autocompleted characters. That is, you can type
characters the autocompleter inserted without invalidating the command.
I haven't looked closely, but at least some other windowport extended
command readers seem to already behave similarly.
A recent change described as:
"changed the IDE files to build NetHackW.exe instead of
nethackw.exe. This is only cosmetic, but consistent with the
other executable."
was not just cosmetic. The changes prevented the
executable from being copied to the target binary
directory at all, due to the removal of the necessary
trailing tab.
- restructured Install.nt quite a bit. It now contains instructions
to build a graphical nethack using NMAKE, too. I merged
the instructions for command line builds, and separated the IDE
build; that made more sense to me. It is shorter, too.
- added some lines to all Makefiles so they now build
NetHackW.exe when GRAPHICAL is "Y", and NetHack.exe
otherwise. I espacially did not test this on Borland.
Previously, the makefiles would always build NetHack.exe.
- changed the IDE files to build NetHackW.exe instead of
nethackw.exe. This is only cosmetic, but consistent with the
other executable.
- made a small change to pcmain.c, as the MinGW linker
cannot decide between main() and WinMain() when both are
present, as explained in <Someone>'s original
message. (I used a #ifndef instead of comments ;-)
The MinGW graphical build indeed seems to work.
If race is set to random and role is set to something
specific, the Qt interface sometimes hangs trying to
determine an appropriate race/role.
This patch that fixes the problem, and makes 'random'
work more appropriately.
- Show splash on "Help - About" with all version information
- Show splash with news on startup (if show_splash is on of course).
I made another small patch to the splash screen. Because the greenish background colour always seemed a little odd to me, I decided
to make it transparent. Doing that, I found the following:
- The splash picture was a 24-bit bitmap, although it had less than 256 colours. That makes the size of the final executable about
200K larger than necessary. I changed it to a 256-colour bitmap. I also changed the background colour to the default tile background
colour, for consistency. The new bitmap is attached here. My excuses if the large file means a problem to anyone.
- In Microsoft's documentation (see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_2y9g.asp) is is
stated that on Windows 95/98 "TransparentBlt contains a memory leak that can exhaust system resources." It is recommended to use
different code to draw transparent bitmaps, to be precise: the alternative code that is already in nhapply_image_transparent(). I'm
almost convinced that this is the cause for Betabug B08008 reported bij <Someone>. Can anyone confirm he is using 95/98? I decided
for the easy way out and removed the code that uses TransparentBlt completely. I see not much reason to use it if it is a) buggy and
b) we have an alternative that works perfectly. This is attached as trans.patch.
- The rest of the patch only changes the BitBlt() in mhsplash.c to a nhapply_image_transparent().
Here is one more patch (see attachment). It does TranslateCharsetInfo
to map codepage to a character set. I am not sure if it will help though.
Japanese Windows is using codepage 932 and I don't think IBMgraphics
will work too well in this codepage.
AFAIK, there is no way in win32 to force arbitrary codepage for a font
(CP 437 in case of Nethack). That means IBMgraphics is unlikely to work
if the system locale is set to something other than US or Western Europe
(CP 437 & 850).
-<Someone>
I've found myself adding a trailing space to various extend
commands from time to time, and the program fails to recognize then
when that happens. It might be less likely once none of them has
any embedded spaces, but this wouldn't hurt anything if that becomes
the case.
winhack.h is not being used anywhere now and can safely be deleted.
There 2 instances of this file:
sys\wince\winhack.h
win\win32\winhack.h
The patch is also attached that adjusts for this.
This uses pmatch() as a default pattern matcher,
and #defines USER_SOUNDS_REGEX for Qt
to enable the code for regular expressions.
This is enabled for win32tty and win32gui.
This patch is an improvement for menu/text dialogs.
This is a code carried over from Windows CE port. It changes
text and menu windows from "system popup" to plain "child"
windows of the main nethack window. Nethack main window can
now be resized/moved/minimized when menu/text window is up.
Menu/text windows will always stay inside the main window and
move along with it.
<Someone>
> Questions are being appended in the message window, some showing
> up on the same line. This is really noticeable with the
> end-of-game disclosure questions. Questions should always be
> presented on a new line.
At end of game is probably the only place, since then more than one
question is asked in the same turn. Anyhow, here's the patch, in
mswproc.c [...]
- No checkboxes in menu if menu is PICK_NONE. mhmenu.c
- About box changed to splash screen. This last thing is open
for discussion, as the splash screen currently does not give
exactly the ame information as the about box (or the v command).
Maybe the splash should be enhanced? Anyway, it looks better than
the About-box. I didn't remove the About-box code and resource yet
until this discussion is had. mhmain.c
<Someone>
(from <Someone>):
I guess that this:
mcam += iflags.wc_scroll_amount;
should be his:
mcam += iflags.wc_scroll_amount - 1;
In words: If scroll amount is 1, the behaviour should be as it was
before the option existed, which means: no addition to mcam.
> - I'd like to see another option added: scroll_amount. In
> combination with scroll_margin, this would control the amount
> of squares the screen is scrolled when the scroll_margin is
> reached (currently, this amount is 1, but if I recall
> correctly, it used to be more). For example, if both were 5,
> when you came within 5 spaces of the left screen border, the
> screen would shift 5 spaces to the right).
>>> - When I set font and font size of the message window, the
>>> message window size doesn't calculate correctly to show the
>>> number of message lines specified. For example, I set the font
>>> size to 6, and the number of messages to display to 8. Now
>>> there is whitespace at the top of my message window. When I
>>> set the font size to 14 now, I see only 5.5 message lines.
>>> This is unintuitive: the interface should recalculate the
>>> window size needed to display the correct number of lines.
>>>
>> I agree, especially since the message window size is
>> recalculated correctly if you save and restore. An easy way out
>> would be to set those options to DISP_IN_GAME.
>
> That seems like a good work-around until the proper fix is done.
The patch is attached. I moved the code that was computing the font
size to mswin_message_window_size(). This will cause the message
window to resize properly if the message font size changes. There
are also 2 minor bits in mswproc.c to invalidate the message window
when the font changes.
When GOLDOBJ is defined, dropping partial amounts of gold using the D
command would not work because gold currently has the same inventory letter
as the coin group accelerator. In this case, the group accelerator should
not be used, since it confuses counts. tty and X11 ports are fixed. The
tty change should fix the Windows console version as well (untested).
three new features for the message window we discussed:
- Graying out lines that are old -- slightly cleaner than <Someone>'s version.
- Message concatenation.
- --More-- prompt if there are more messages this turn than fit in the
window.
As a by-product of these changes, some other things have changed, too:
- The message lines array is now used in a round-robin way, i.e. the
messages are no longer copied one line up when adding a new message.
- clear_nhwindow no longer redraws the window, which significantly
reduces screen flicker.
- A caret bug was fixed.
- The last line is no longer highlighted, as this seems unnecessary
since the most recent messages are in a different colour
- A bug was fixed that caused two lines too many to be drawn on each
paint.
Move get_saved_games() functionality to files.c
Use moved get_saved_games() functionality in Qt windowport.
[also some non-enabled perminv code in Qt windowport]
> It's probably best to empty
> mswin_update_inventory() in win\win32\. If I
> remember correctly there is some code in there now
> which probably behaves badly if perm_invent is
> switched on