> - 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.
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.
> 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
> Below is the result of your feedback form. It was submitted by
> <email deleted> on Tuesday, June 4, 2002 at 21:04:54
> After alt-Q or F)ile, Q)uitting, it is still possible to F)ile, S)ave your
> game. By doing this after you are shown your inventory [fully identified] and
> attributes (It must be done before the last "Do you want to view your %1"
> dialog is answered--usually conduct), which means you can know what you are
> holding-- although it won't be officially identified. But you can use it to
> avoid putting on, say, an amulet of strangulation by mistake.
In item-selection menus, as you know one can press "=" to select all
rings, say. This doesn't work if the letters run out before you get to
the rings, however (because there are so many items).
Menu code did not check group accelerators on items without assigned letters
(if the letters run out). Fixed.
W340-6 fix
fixed: mswin_menu_size incremented width of the actual menu window
each time being called. This only happens if "show window content
while dragging" option is set in Windows desktop settings.
The pet image was garbled because it was reduced to the size of the pet mark
bitmap
in the function that draws pet mark transparently over the pet tile (32x32
image was reduced to 16x16 and then stretched again)
Also added: use Windows-provided TransparentBlt where available.
Another fatal bug in win32 graphical interface
"Too many "dead" NHW_TEXT windows around. Repeating #? 15 times will produce
the same result."
>Wizard, wearing gray dragon scale mail and wielding Magicbane. The
>Dark One teleports next to me and I get the message "The Dark One
>casts a spell at you! A field of force surrounds you!". Then I get
>3 windows popping up: "Oops." "The dungeon collapses." "ERROR: No
>windows available..." and the game exits.
> I wish I could reproduce this reliably. Here's the method I've been using
> to do it:
>
> - Equip character (+4 gdsm, Magicbane, unicorn horn, see invisible,
> telepathy, key, "gain ability" potions to max out, enhance dagger skill
> to max, level change to 14)
> - Teleport down to the portal entrance. Go through the portal, get
> permission to go down to see the Dark One.
> - Go down to the Dark One's level, teleport over, open up his door, and
> basically just try to head back to the entrance and kill him.
>
> Two different things have happened while doing this so far. (I've been
> able to get errors something like 5 times out of many tries, and I haven't
> been about to do it at all in the TTY version - only the windows
> one.) Either I get the above message I mentioned to you, which seems to
> happen at a random time, or I get a slightly different result - "Oops,
> program initialization failed, ERROR: No windows available". This second
> result happened once _after_ I had killed the Dark One and was trying to
> #quit.
>
- mostly from Yitzhak, with a modification based on subsequent discussion.
After installing everything (mail, cvs, etc) I found the compile was
broken.
Yitzhak: This fixes the compile. I used LONG for the types because using DWORD
conflicted in Borland with signed/unsigned compare mismatches.
[Also works around some perm_invent code destined for a later patch that got
rolled in prematurely]
Two things:
1. This patch causes the window placement of the main window to be
written to the registry, and to be restored upon the next start
of the program. I had to move the creation of the main window to init_nhwindows,
as the registry is not read until then.
2. Implement support for wc_popup_dialog (or rather, support for not having
popup windows.) It asks getlin questions and get_ext_cmd on the
message window, much like the TTY port does it.
The get_ext_cmd procedure is almost but not quite the same as the
one for TTY, and I think it is better: It autocompletes the extended
command you type, but if you keep on typing it doesn't add those letters
after the completed command, but just keeps track of how many (correct)
characters you typed. If you type a different character than the
autocompleted command has, it shows you what you typed again. If you
press backspace, it deletes the characters you typed, and if autocompletion
is no longer possible, it removes the autocompleted part. The effect
of this is that you can type as many letters as you want when typing
an extended command, as long as it is enough to identify one command;
and you only have to delete the characters you actually typed if you made
a mistake. I think autocompletion is a lot less obtrusive this way.
Some notes about the patch:
- Both mswin_getlin and mswin_get_ext_cmd now have two versions, with
and without a popup.
- yn_question was changed so that it displays a caret, which is a lot
nicer IMHO.
- I had to implement a new NetHack Windows Message parameter,
"MSNH_MSG_CARET", to make it possible to show and hide the caret in
the message window. Normally the caret is created and destroyed by the
window that owns it, but in NetHack the input focus is always on the
main window, while the caret is in the message window, which happens
to be the only one that knows how large the caret should be.
- mswin_putstr_ex's last parameter changed from boolean to int; the
semantics are enhanced so that a negative last parameter means "delete
that many characters from the input line". The string to be deleted is
passed in as well, although it is currently not used.
- A rather large chunk of code finds out where the last string that was
displayed on the message window ended. This is necessary to place the
caret at the right spot. The caret is always positioned there, even if
it is hidden or non-existing.
- mswin_get_nh_event was changed to actually process and empty the
message queue, and called from mswin_putstr_ex to make sure the
message window is updated before the next step is done. Without this,
the caret is positioned before the last message is painted, which
makes its x-position after the last character of the previous line.
Date: Sun, 24 Mar 2002 15:40:30 -0800
<email deleted>
Subject: patch: nethack-graphical - menu window colors
- W340-4 (menu checkboxes have a hard-coded white inner part)
- use windowcolors settings for menu backgroud/foreground color
<Someone>
(from <Someone>)
>The tile size is actually set just once in mhmap.c so validation can be done
>in one place. The patch is attached.
>
><email deleted>
on Sunday, March 24, 2002 at 16:15:50
---------------------------------------------------------------------------
mailversion: 1.10
nhversion: 3.4.0
nhfrom: 3.4.0 Official binary release for Windows 95/98/NT/2000/Me/XP
(nh340win.zip)
hardware: 1 Ghz AMD Athlon, 512 MB RAM etc. etc.
I don't think that the hardware is related to the problem because I found it.
software: I used Win 98 (1st edition) and MS VC++ 6.0 to find/fix the bug in
Nethack 3.4.0.
comments: steps to crash: start nethackw.exe - start a game - select "fit to
sreen" in the map menue - rezize the map until it is very very small -> crash
This patch implements two things:
- space now dismisses a menu, text or menutext window when you are
at the bottom of that window
- Page scrolling in menus now works as follows:
pressing PgDn (or Space in NH mode) moves the focus down one page,
and moves the scroll position down one page. The effect of this
is that you always get a full new page of items (which is what
NetHack players expect), and that the focus moved down one page
(what Windows users expect.)
The same (revers) goes for scrolling up a page.
A Windows user will still be a bit surprised when the focus is on
the top item, and he presses '>': he gets a new page of things instead
of the focus moving to the bottom of the page.
However, the PgUp/PgDn keys (which he probably uses) still have the
old Windows behaviour.
This band adds handling for the "5" key in the numeric keypad. This is
called VK_CLEAR in the VK_ constants. Using this band, and with
NumLock off, doing 5 will send NetHack the letter 'g'. Doing SHIFT-5 will
send 'G'. Without this band and with NumLock off, 5 does nothing. With
NumLock on, 5 sends 5.
This implements some items on the ToDo list:
- H0005: Space does the same as PgDn in text, menu and 'menutext'
windows if NetHack mode is on.
- M0004: The cursor (caret) is hidden in text windows and menu
windows.
PgUp/PgDn/Up/Dn don't move the cursor, but scroll the
window.
This patch allows ALT-? to do #? in NetHack mode by not doing
TranslateAccelerator in NetHack mode. This relies on the short circuit
logic of || (much of NetHack code relies on it, it's just an explanatory note).
This patch disables ALT-H in NetHack mode. Before patch: ALT-H in NetHack
mode brings down the Help menu in the menu bar. After patch: ALT-H does
nothing in NetHack mode. In both cases, in Windows mode, ALT-H brings
down the Help menu in the menu bar. I can easily write a patch to have
ALT-H in NetHack mode act the same as '?'.
Explanation:
return 0: this window proc has processed this event.
return DefWindowProc(): process using default window proc.
ALT-H is the only key for which DefWindowProc() does something special AND
reaches the else.
This is so it can be shared with Qt.
If, for some reason, we have to cut another source tarball for
3.4.0, then this will be included. Otherwise, this will
turn out to be a post-3.4.0 patch.
- splash_screen (boolean for whether to display splash screen at startup)
- player_selection:dialog|prompts
Also moves the font and window manipulation stuff in defaults.nh
further down the file, so that a tty users doesn't have to wade
through it all to find the character adjustment samples.
- changed splash screen fonts to measure in logical pixels rather that
points.
Points are 1/72 inch regardless of screen resolution. If screen resolution
changes so does visible image size. If font is measured in points then its
visible size remains the same. The text is getting cut off (or becomes to
small for the image) as a result.
- a couple of README updates
- some color changes for windowcolors
- prevent crash From a bug report, but better than a crash. It
probably renders the map_mode:fit_to_screen ignored in defaults.nh.