change references from winnt to windows

rename sys/winnt to sys/windows
move vs (visual studio) folder out of win/win32 and into sys/windows
rename include/ntconf.h to include/windconf.h
rename winnt.c to windsys.c
place visual studio projects into individual subfolders.

This will hopefully resolve GitHub issue #484 as well.
This commit is contained in:
nhmall
2021-06-03 12:14:27 -04:00
parent acfbf20958
commit 0a10bd632d
140 changed files with 1013 additions and 469 deletions

10
sys/windows/.gitattributes vendored Normal file
View File

@@ -0,0 +1,10 @@
Install.windows NHSUBST
Makefile.* NHSUBST
defaults.nh NHSUBST
sysconf NHSUBST
*.rc NHSUBST
*.bat NHSUBST
*.def NH_header=no
* NH_filestag=(file%s_for_Windows_7/8.x/10_version)
..files NH_filegenerated=nethack.ico
nethack.ico NH_filesgentag=(file%s_generated_by_uudecode_at_compile_time)

1
sys/windows/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
NetHack.ico

View File

@@ -0,0 +1,235 @@
# NetHack 3.7 defaults.nh $NHDT-Date: 1524689357 2018/04/25 20:49:17 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.32 $
# Copyright (c) 2006 by Michael Allison
# NetHack may be freely redistributed. See license for details.
# Sample config file for win32 NetHack
# A '#' at the beginning of a line means the rest of the line is a comment.
#
# Some options MUST be set in this file, other options can be toggled while
# playing. For a list of options available see the <opthelp.> file.
#
# To change the configuration, comment out the unwanted lines, and
# uncomment the configuration you want.
#
# $NHDT-Date: 1524689357 2018/04/25 20:49:17 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.32 $
# *** OPTIONS ***
#
# Use the IBM character set rather than just plain ascii characters
# for tty window-port.
OPTIONS=symset:IBMGraphics_2,roguesymset:RogueEpyx
# Here is a suggested symbol set from Michael Feir,
# for use by blind NetHack players
#OPTIONS=symset:NHAccess,roguesymset:NHAccess
# Optional curses port interface
#OPTIONS=windowtype:curses
#
# Keyboard handling
# Different keyboard handlers can be loaded.
# Default is nhdefkey.dll but you can override that.
# Ray Chason's keyboard handler
# OPTIONS=altkeyhandler:nhraykey.dll
#
# NetHack 3.4.0 keyboard handling
# OPTIONS=altkeyhandler:nh340key.dll
# *** Personal Preferences ***
# Some options to set personal preferences. Uncomment and change these to
# suit your personal preference. If several people are to use the same
# configuration, options like these should not be set.
#
#OPTIONS=name:Janet,role:Valkyrie,race:Human,gender:female,align:lawful
#OPTIONS=dogname:Fido,catname:Morris,fruit:guava
#OPTIONS=horsename:Silver
# Disable autopickup
OPTIONS=!autopickup
# When autopickup is on, automatically pick up these types of objects
#OPTIONS=pickup_types:$"=/!?+
#OPTIONS=packorder:")[%?+/=!(*0_`
#OPTIONS=scores:10 top/2 around/own
#OPTIONS=nolegacy,noverbose
#OPTIONS=menustyle:traditional
#OPTIONS=perm_invent
# Highlight menu lines with different colors. You need to define the colors
# with MENUCOLOR lines.
# Toggle menucolor use on or off
OPTIONS=menucolors
# Define color used for a certain menu line. Format is
# MENUCOLOR="regular expression"=color
# or
# MENUCOLOR="regular expression"=color&attribute
# Show all blessed items in green
MENUCOLOR=" blessed " = green
# Show all holy water in green
MENUCOLOR=" holy " = green
# Show all cursed items in red
MENUCOLOR=" cursed " = red
# Show all unholy water in red
MENUCOLOR=" unholy " = red
# Show all cursed worn items in orange and underlined
MENUCOLOR=" cursed .* (being worn)" = orange&underline
# General options. You might also set "silent" so as not to attract
# the boss's attention.
#
# number_pad option can have an optional value of 0 (off), 1 (on),
# or 2(on,legacy-mode) which causes 5='g', alt-5='G', alt-0='I'
OPTIONS=time,noshowexp,number_pad:2,lit_corridor,mouse_support:1
# Make commands that ask for an inventory item pop up a menu
OPTIONS=force_invmenu
#
# If you want to get rid of "use #quit to quit..." use:
OPTIONS=suppress_alert:3.3.1
#
# Note: the rest_on_space in the next line may not be
# appropriate for a beginning NetHack player, since
# it could result in use of a turn unintentionally.
# If you're new to NetHack, leave it commented it out.
#OPTIONS=rest_on_space
#
# Set some options to control graphical window-port (these will
# be safely and silently ignored by the tty port)
#
# Map window settings
# possible map_mode options include: tiles|ascii4x6|ascii6x8|ascii8x8|ascii16x8|
# ascii7x12|ascii8x12|ascii16x12|ascii12x16|
# ascii10x18|fit_to_screen|ascii_fit_to_screen|
# tiles_fit_to_screen
OPTIONS=map_mode:tiles,scroll_margin:10
# Message window settings
OPTIONS=font_message:Arial,font_size_message:14,align_message:top
# Menu settings
OPTIONS=font_menu:Arial,font_size_menu:14
# Text settings
OPTIONS=font_text:Courier New,font_size_text:14
# Status window settings
OPTIONS=font_status:Courier New,font_size_status:14
# Other
OPTIONS=hilite_pet,!toptenwin
#OPTIONS=!splash_screen,player_selection:prompts
# Status/message window colors
# Possible color options include:
# six digit hexadecimal RGB color value ("#8F8F8F"), black, red, green, brown,
# blue, magenta, cyan, gray (or grey), orange, brightgreen, yellow, brightblue,
# brightmagenta, brightcyan, white, trueblack, purple, silver, maroon, fuchsia,
# lime, olive, navy, teal, aqua, activeborder, activecaption, appworkspace,
# background, btnface, btnshadow, btntext, captiontext, graytext, highlight,
# highlighttext, inactiveborder, inactivecaption, menu, menutext, scrollbar,
# window, windowframe, windowtext.
#OPTIONS=windowcolors:status windowtext/window message windowtext/window
# "Nethack mode" colors
OPTIONS=windowcolors:status white/#000000 message white/#000000 text white/#000000 menu white/#000000 menutext white/#000000
OPTIONS=vary_msgcount:4
# *** LOCATIONS ***
# IMPORTANT: If you change any of these locations, the directories they
# point at must exist. NetHack will not create them for you.
#
# The location that documentation and helps files are placed
#HACKDIR=c:\User\USERNAME\NetHack\3.6
#
# The location that level files in progress are stored (writeable)
#LEVELDIR=c:\User\USERNAME\AppData\Local\NetHack\3.6
#
# The location where saved games are kept (writeable)
#SAVEDIR=c:\User\USERNAME\AppData\Local\NetHack\3.6
#
# The location that bones files are kept (writeable)
#BONESDIR=c:\ProgramData\NetHack\3.6
#
# The location that score files are kept (writeable)
#SCOREDIR=c:\ProgramData\NetHack\3.6
#
# The location that file synchronization locks are stored (writeable)
#LOCKDIR=c:\ProgramData\NetHack\3.6
#
# Finnish keyboards might need these modifications uncommented.
# For \, @, $, [, |
#OPTIONS=subkeyvalue:171/92
#OPTIONS=subkeyvalue:178/64
#OPTIONS=subkeyvalue:180/36
#OPTIONS=subkeyvalue:184/91
#OPTIONS=subkeyvalue:188/124
#
# Some versions of Windows allow you to adjust the win32 console port
# colors using R-G-B settings.
#
#OPTIONS=palette:black-0-0-0
#OPTIONS=palette:red-210-0-0
#OPTIONS=palette:green-80-200-0
#OPTIONS=palette:brown-180-100-0
#OPTIONS=palette:blue-0-0-200
#OPTIONS=palette:magenta-128-0-128
#OPTIONS=palette:cyan-50-180-180
#OPTIONS=palette:gray-192-192-192
#OPTIONS=palette:dark gray-100-100-100
#OPTIONS=palette:orange-255-128-0
#OPTIONS=palette:bright green-0-255-0
#OPTIONS=palette:yellow-255-255-0
#OPTIONS=palette:bright blue-100-100-240
#OPTIONS=palette:bright magenta-255-0-255
#OPTIONS=palette:bright cyan-0-255-255
#OPTIONS=palette:white-255-255-255
# Status hilites
OPTIONS=statushilites
# HP
OPTIONS=hitpointbar
OPTIONS=hilite_status:hitpoints/100%/gray&normal
OPTIONS=hilite_status:hitpoints/<100%/green&normal
OPTIONS=hilite_status:hitpoints/<66%/yellow&normal
OPTIONS=hilite_status:hitpoints/<50%/orange&normal
OPTIONS=hilite_status:hitpoints/<33%/red&bold
OPTIONS=hilite_status:hitpoints/<15%/red&inverse
## Pw
OPTIONS=hilite_status:power/100%/gray&normal
OPTIONS=hilite_status:power/<100%/green&normal
OPTIONS=hilite_status:power/<66%/yellow&normal
OPTIONS=hilite_status:power/<50%/orange&normal
OPTIONS=hilite_status:power/<33%/red&bold
## Carry
OPTIONS=hilite_status:cap/burdened/yellow/stressed/orange/strained/red&bold/overtaxed/red&inverse/overloaded/red&inverse&blink
## Hunger
OPTIONS=hilite_status:hunger/satiated/yellow/hungry/orange/weak/red&bold/fainting/red&inverse/fainted/red&inverse&blink
## Mental
OPTIONS=hilite_status:condition/hallu/yellow
OPTIONS=hilite_status:condition/conf/orange
OPTIONS=hilite_status:condition/stun/red&bold
## Health
OPTIONS=hilite_status:condition/termill/red&inverse
OPTIONS=hilite_status:condition/foodpois/red&inverse
OPTIONS=hilite_status:condition/slime/red&inverse
# gold
OPTIONS=hilite_status:gold/up/yellow/down/brown
# St, Dx, Co, In, Wi, Ch
OPTIONS=hilite_status:characteristics/up/green/down/red

323
sys/windows/Install.windows Normal file
View File

@@ -0,0 +1,323 @@
Copyright (c) NetHack Development Team 1990-2021
NetHack may be freely redistributed. See license for details.
==============================================================
Instructions for compiling and installing
NetHack 3.7 on a Windows system
(Windows 7/8.x/10 or later only)
==============================================================
Last revision: $NHDT-Date: 1594155895 2020/07/07 21:04:55 $
Credit for the porting of NetHack to the Win32 Console Subsystem goes to
the NT Porting Team started by Michael Allison.
Credit for the Win32 Graphical version of NetHack (aka "NetHack for
Windows" or NetHackW) goes to Alex Kompel who initially developed and
contributed the port.
Alex Kompel, Dion Nicolaas, Yitzhak Sapir, Derek S. Ray, Michael Allison,
Pasi Kallinen, Bart House, and Janet Walz contributed to the maintainance
of the tty and graphical windows versions of NetHack 3.7.0.
You can build a TTY version of NetHack and a Windows Graphical
version. You can use one of the following build environments:
o A copy of Microsoft Visual Studio 2017 Community Edition or
a copy of Microsoft Visual Studio 2019 Community Edition
OR
o (Untested for 3.7) A copy of MinGW. MinGW is a collection of header
files and import libraries with which native Windows32 programs
can be built; the MinGW distribution contains the GNU Compiler
Collection. You can download MinGW at
http://www.mingw.org/
Earlier versions of MinGW will not allow you to build the Windows
Graphical version.
/---------------------------------------------\
| Directories for a Win32 NetHack build |
\---------------------------------------------/
(NetHack-top)
|
+-----+-----+------+------+-----+-------------+--------~------+
| | | | | | | |
util dat doc include src sys win lib (external)
| | |
+------+ +------+ +-----------+
| | | | | |
share windows tty win32 Lua-5.4.3 pdcurses
|
vs
/--------------------------------------------------------\
| Building And Running Using Visual Studio 2017 or 2019 |
\--------------------------------------------------------/
Before proceeding, please obtain the lua-5.4.3 sources and copy them to
the new directory lib\lua-5.4.3\src. This source can be obtained either from
http://www.lua.org/ftp/lua-5.4.3.tar.gz or from the git hub mirror
https://github.com/lua/lua.git using the tag 'v5.4.3'. The build expects
to find lua files such as 'lua.h' at 'lib\lua-5.4.3\src\lua.h'.
If you are NOT using Visual Studio 2017 or 2019 IDE, or you prefer to build
using a Make utility and a Makefile proceed to "Building Using Make".
When using either Visual Studio 2017 or 2019, you simply need to load the
solution file within the IDE, build the solution and run the version
of NetHack you wish to run.
The Visual Studio NetHack solution file can be found here:
win\win32\vs\NetHack.sln
Before executing the steps to build listed in the next paragraph,
decide if you want to include optional curses window-port. See
the note just below entitled "Optional curses window-port support."
So the steps are:
1. Launch the IDE.
2. Open the appropriate solution file.
3. Select the build configuration you wish to use (Release, Debug, etc.).
4. From the build menu, select build solution.
5. Type F5 to start debugging.
You can also build all the projects for all platforms and configurations
using a "build.bat" batch file found in the same directory as the solution.
Open a developer command prompt for the version of Visual Studio you are
using. Change to the directory win\win32\vs and run "build.bat".
* Optional curses window-port support *
Since 3.6.2, the community patch for a window-port that uses curses has been
incorporated into the NetHack source code tree. That window-port, which
evolved from work originally done by Karl Garrison, has been used in several
NetHack variants and on nethack.alt.org and on www.hardfought.org/nethack/.
If you want to include the curses window-port support in your Visual Studio
build, you will have to first obtain the PDCurses sources from
https://github.com/wmcbrine/PDCurses
and have them available prior to building NetHack. There are two ways to
enable curses window-port support during the VS build: Either set the
environment variable PDCURSES to a folder containing a PDCurses
repository/source-tree
OR
Place the PDCurses folder alongside the NetHack source repository prior
to proceeding with steps 1 through 5 above.
/-------------------------------------------\
| Building From the Command Line Using Make |
\-------------------------------------------/
--------------------------------------------------------------------------
-- Beginning of prerequisite step --
The first step in building either version of NetHack via Makefile is to
execute sys\windows\nhsetup.bat to move some files to their required locations.
From the command prompt:
cd sys\windows
nhsetup
From a Windows explorer window:
double-click on nhsetup.bat
If you wish to build from the command line, proceed to "BUILDING FROM
THE COMMAND LINE."
-- end of prerequisite step --
--------------------------------------------------------------------------
Two different versions of NetHack will be built for Windows from the
command line using the Makefile approach:
A tty port utilizing the Win32 Console I/O subsystem, Console
NetHack;
A Win32 native port built on the Windows API, Graphical NetHack or
NetHackW.
The executable for Console NetHack will be named NetHack.exe. The
executable for Graphical NetHack will be named NetHackW.exe. The
Makefile configuration will build both; NetHackW.exe and NetHack.exe
will be able to use the same datafiles, save files and bones files.
Since the last official release of NetHack, compilers and computer
architectures have evolved and you can now choose whether to build
a 32-bit x86 version, or a 64-bit x64 version. The default Makefile
is set up for a 32-bit x86 version, but that's only because it will
run on the most number of existing Windows environments.
NetHack's save files and bones files in the 3.7.0 release have not yet
evolved enough to allow them to interchange between the 32-bit version
and the 64-bit version (or between different platforms). Hopefully
that will change in an upcoming release.
I. Dispelling the Myths:
Compiling NetHack for Windows is not as easy as it sounds, nor as hard
as it looks, however it will behoove you to read this entire section
through before beginning the task.
We have provided a Makefile for each of the following compilers:
o Microsoft Visual Studio 2017 or 2019 C++ Compiler
The Community Editions are fine and available at no cost
o MinGW 2.0 (with GCC 3.2)
The Microsoft Visual Studio makefile was created for use
with MS NMAKE which is provided with the Microsoft compiler.
The supplied Makefile may work with earlier versions of the Microsoft
compiler, but that has not been tested.
The GCC Makefile was created for use with GNU Make version 3.79.1,
which comes with the MinGW package.
You may find it useful to obtain copies of lex (flex) and yacc
(bison, or byacc). While not strictly necessary to compile nethack,
they are required should you desire to make any changes to the level
and dungeon compilers.
II. To compile your copy of NetHack on a Windows machine:
Setting Up
1. It almost goes without saying that you should make sure that your
tools are set up and running correctly. That includes ensuring that
all the necessary environment variables for the compiler environment
are set correctly.
Change your current directory to the src subfolder of the nethack
source tree.
cd src
GCC
For the GCC Makefile, add <mingw>\bin to your path, where <mingw>
is your MinGW root directory.).
Change your current directory to src subfolder of the nethack
source tree.
cd src
2. Since 3.6.2, the community patch for an optional curses window-port
has been incorporated into the NetHack source code tree. That
window-port, which evolved from work originally done by Karl Garrison,
has been used in several NetHack variants and on nethack.alt.org and
on www.hardfought.org/nethack/. The optional curses window-port is
available for Windows, Mac OS X, and Unix (and also DOS).
If you want to include the optional curses window-port support in your
command line Makefile build, you will have to first obtain the
PDCurses sources from https://github.com/wmcbrine/PDCurses
and have that source code tree available prior to building NetHack.
Edit your Makefile and in Question 4 of the four decisions you can
make in there, uncomment these two lines:
ADD_CURSES=Y
PDCURSES_TOP=..\..\pdcurses
Adjust the PDCURSES_TOP macro so that it points to the correct
location for the top of the PDCurses source tree if it differs from
the path shown.
3. Make sure all the necessary files are in the appropriate directory
structure. You should have a main NetHack top directory with
subdirectories dat, doc, include, src, sys\share, sys\windows,
win\tty, util.
If you are including the optional Curses window port into your
build,then you will need the top of the PDCurses sources in a
folder parallel to the top of the NetHack folder (or you will need
to change the value of the PDCURSES_TOP macro in the Makefile to
specify the appropriate location.
(You can check the file "Files" in your top level directory for a
more complete listing of what file is in which directory.)
If you downloaded or ftp'd the sources from a UNIX system, the lines
will probably end in UNIX-style newlines, instead of the carriage
return and line feed pairs used by Windows. Some programs have
trouble with them, so you may need to convert them. The compiler
should not have any problems with them however.
4. Edit your Makefile if you wish, but it is not required unless
you are altering the build options.
If you are recompiling after patching your sources, or if you got
your files from somewhere other than the official distribution,
"touch makedefs.c" to ensure that certain files (onames.h and pm.h)
are remade, lest potentially troublesome timestamps fool your make
(or nmake) utility.
Compiling
5. Now that everything is set up...
For the Visual Studio compiler, as mentioned above, you should now be
at the command prompt to carry out the build and your current
directory should be the src subdirectory in the NetHack source tree.
In the src subdirectory, issue this command:
nmake install
For GCC:
Change your current directory to the NetHack src directory.
Issue this command:
mingw32-make -f Makefile.gcc install
If you get any errors along the way then something has not been set
up correctly. The time it takes to compile depends on your
particular machine of course, but you should be able to go for lunch
and return to find everything finished. The less memory, and slower
your machine, the longer the lunch you may take. :-)
In any case, it is likely that the command prompt window where you
are doing the compiling will be occupied for a while. If all goes
well, you will get an NetHack executable.
Notes:
1. To install an update of NetHack after changing something, change
your current directory to src and issue the appropriate command for
your compiler:
For Microsoft compiler:
nmake
For GCC:
mingw32-make -f Makefile.gcc
If you add, delete, or reorder monsters or objects, or you change
the format of saved level files, delete any save and bones files.
(Trying to use such files sometimes produces amusing confusions on
the game's part, but usually crashes.)
If you made changes to any of the level compiler software, you may
have to delete dgn_flex.c, dgn_yacc.c, lev_flex.c, and lev_yacc.c
from the util directory to ensure that they are remade.
2. Depending on the build and compiler and tools used above, the
executable produced by the TTY build is either:
- a 32-bit (x86), flat-address space, non-overlayed .exe file,
which should run on any recent Win32 environment.
or
- a 64-bit (x64) .exe file,
which should run on any 64-bit Windows O/S.
Note that saved games are NOT compatible between the 32-bit and the
64-bit versions at this time.
NetHack.exe is the tty version. NetHackW.exe is the graphical version.
Play NetHack.
PROBLEMS
If you discover a bug and wish to report it, or if you have comments
or suggestions we recommend using our "Contact Us" web page at:
http://www.nethack.org/common/contact.html
If you don't have access to the web, or you want to send us a patch
to the NetHack source code feel free to drop us a line c/o:
DevTeam (at) nethack.org
Happy NetHacking!

1718
sys/windows/Makefile.gcc Normal file

File diff suppressed because it is too large Load Diff

2076
sys/windows/Makefile.msc Normal file

File diff suppressed because it is too large Load Diff

49
sys/windows/console.rc Normal file
View File

@@ -0,0 +1,49 @@
/* NetHack 3.7 console.rc $NHDT-Date: 1596498311 2020/08/03 23:45:11 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.14 $ */
/* Copyright (c) Yitzhak Sapir, 2002. */
/* NetHack may be freely redistributed. See license for details. */
#include "windows.h"
1 ICON DISCARDABLE "NetHack.ICO"
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 3,7,0,0
PRODUCTVERSION 3,7,0,0
FILEFLAGSMASK 0x1fL
#ifdef _DEBUG
FILEFLAGS 0x9L
#else
FILEFLAGS 0x8L
#endif
FILEOS 0x4L
FILETYPE 0x0L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "FileDescription", "NetHack for Windows - TTY Interface\0"
VALUE "FileVersion", "3.7.0\0"
VALUE "InternalName", "NetHack\0"
VALUE "LegalCopyright", "Copyright (C) 1985 - 2020. By Stichting Mathematisch Centrum and M. Stephenson. See license for details.\0"
VALUE "OriginalFilename", "NetHack.exe\0"
VALUE "PrivateBuild", "050102\0"
VALUE "ProductName", "NetHack\0"
VALUE "ProductVersion", "3.7.0\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
/*console.rc*/

1999
sys/windows/consoletty.c Normal file

File diff suppressed because it is too large Load Diff

9
sys/windows/nethack.def Normal file
View File

@@ -0,0 +1,9 @@
NAME NETHACK
DESCRIPTION 'NetHack 3.7.0 for Windows'
EXETYPE WINDOWS
STUB 'WINSTUB.EXE'
CODE PRELOAD MOVEABLE DISCARDABLE
DATA PRELOAD MOVEABLE MULTIPLE
HEAPSIZE 4096
STACKSIZE 9216
EXPORTS WndProc

353
sys/windows/nh340key.c Normal file
View File

@@ -0,0 +1,353 @@
/* NetHack 3.7 nh340key.c $NHDT-Date: 1596498312 2020/08/03 23:45:12 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.16 $ */
/* Copyright (c) NetHack PC Development Team 2003 */
/* NetHack may be freely redistributed. See license for details. */
/*
* This is the NetHack keystroke processing from NetHack 3.4.0.
* It can be built as a run-time loadable dll (nh340key.dll),
* placed in the same directory as the nethack.exe executable,
* and loaded by specifying OPTIONS=altkeyhandler:nh340key
* in defaults.nh
*/
static char where_to_get_source[] = "http://www.nethack.org/";
static char author[] = "The NetHack Development Team";
#include "win32api.h"
#include "hack.h"
#include "wintty.h"
extern HANDLE hConIn;
extern INPUT_RECORD ir;
char dllname[512];
char *shortdllname;
int __declspec(dllexport) __stdcall ProcessKeystroke(HANDLE hConIn,
INPUT_RECORD *ir, boolean *valid, boolean numberpad, int portdebug);
int WINAPI
DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
char dlltmpname[512];
char *tmp = dlltmpname, *tmp2;
*(tmp + GetModuleFileName(hInstance, tmp, 511)) = '\0';
(void) strcpy(dllname, tmp);
tmp2 = strrchr(dllname, '\\');
if (tmp2) {
tmp2++;
shortdllname = tmp2;
}
return TRUE;
}
/*
* Keyboard translation tables.
* (Adopted from the MSDOS port)
*/
#define KEYPADLO 0x47
#define KEYPADHI 0x53
#define PADKEYS (KEYPADHI - KEYPADLO + 1)
#define iskeypad(x) (KEYPADLO <= (x) && (x) <= KEYPADHI)
#ifdef QWERTZ_SUPPORT
/* when 'numberpad' is 0 and Cmd.swap_yz is True
(signaled by setting 0x10 on boolean numpad argument)
treat keypress of numpad 7 as 'z' rather than 'y' */
static boolean qwertz = FALSE;
#endif
/*
* Keypad keys are translated to the normal values below.
* Shifted keypad keys are translated to the
* shift values below.
*/
static const struct pad {
uchar normal, shift, cntrl;
} keypad[PADKEYS] =
{
{ 'y', 'Y', C('y') }, /* 7 */
{ 'k', 'K', C('k') }, /* 8 */
{ 'u', 'U', C('u') }, /* 9 */
{ 'm', C('p'), C('p') }, /* - */
{ 'h', 'H', C('h') }, /* 4 */
{ 'g', 'G', 'g' }, /* 5 */
{ 'l', 'L', C('l') }, /* 6 */
{ '+', 'P', C('p') }, /* + */
{ 'b', 'B', C('b') }, /* 1 */
{ 'j', 'J', C('j') }, /* 2 */
{ 'n', 'N', C('n') }, /* 3 */
{ 'i', 'I', C('i') }, /* Ins */
{ '.', ':', ':' } /* Del */
},
numpad[PADKEYS] = {
{ '7', M('7'), '7' }, /* 7 */
{ '8', M('8'), '8' }, /* 8 */
{ '9', M('9'), '9' }, /* 9 */
{ 'm', C('p'), C('p') }, /* - */
{ '4', M('4'), '4' }, /* 4 */
{ 'g', 'G', 'g' }, /* 5 */
{ '6', M('6'), '6' }, /* 6 */
{ '+', 'P', C('p') }, /* + */
{ '1', M('1'), '1' }, /* 1 */
{ '2', M('2'), '2' }, /* 2 */
{ '3', M('3'), '3' }, /* 3 */
{ 'i', 'I', C('i') }, /* Ins */
{ '.', ':', ':' } /* Del */
};
#define inmap(x, vk) (((x) > 'A' && (x) < 'Z') || (vk) == 0xBF || (x) == '2')
int __declspec(dllexport) __stdcall
ProcessKeystroke(
HANDLE hConIn,
INPUT_RECORD *ir,
boolean *valid,
boolean numberpad,
int portdebug)
{
int keycode, vk;
unsigned char ch, pre_ch;
unsigned short int scan;
unsigned long shiftstate;
int altseq = 0;
const struct pad *kpad;
#ifdef QWERTZ_SUPPORT
if (numberpad & 0x10) {
numberpad &= ~0x10;
qwertz = TRUE;
} else {
qwertz = FALSE;
}
#endif
shiftstate = 0L;
ch = pre_ch = ir->Event.KeyEvent.uChar.AsciiChar;
scan = ir->Event.KeyEvent.wVirtualScanCode;
vk = ir->Event.KeyEvent.wVirtualKeyCode;
keycode = MapVirtualKey(vk, 2);
shiftstate = ir->Event.KeyEvent.dwControlKeyState;
if (shiftstate & (LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED)) {
if (ch || inmap(keycode, vk))
altseq = 1;
else
altseq = -1; /* invalid altseq */
}
if (ch || (iskeypad(scan)) || (altseq > 0))
*valid = TRUE;
/* if (!valid) return 0; */
/*
* shiftstate can be checked to see if various special
* keys were pressed at the same time as the key.
* Currently we are using the ALT & SHIFT & CONTROLS.
*
* RIGHT_ALT_PRESSED, LEFT_ALT_PRESSED,
* RIGHT_CTRL_PRESSED, LEFT_CTRL_PRESSED,
* SHIFT_PRESSED,NUMLOCK_ON, SCROLLLOCK_ON,
* CAPSLOCK_ON, ENHANCED_KEY
*
* are all valid bit masks to use on shiftstate.
* eg. (shiftstate & LEFT_CTRL_PRESSED) is true if the
* left control key was pressed with the keystroke.
*/
if (iskeypad(scan)) {
kpad = numberpad ? numpad : keypad;
if (shiftstate & SHIFT_PRESSED) {
ch = kpad[scan - KEYPADLO].shift;
} else if (shiftstate & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED)) {
ch = kpad[scan - KEYPADLO].cntrl;
} else {
ch = kpad[scan - KEYPADLO].normal;
}
#ifdef QWERTZ_SUPPORT
/* OPTIONS=number_pad:-1 is for qwertz keyboard; for that setting,
'numberpad' will be 0; core swaps y to zap, z to move northwest;
we want numpad 7 to move northwest, so when qwertz is set,
tell core that user who types numpad 7 typed z rather than y */
if (qwertz && kpad[scan - KEYPADLO].normal == 'y')
ch += 1; /* changes y to z, Y to Z, ^Y to ^Z */
#endif /*QWERTZ_SUPPORT*/
} else if (altseq > 0) { /* ALT sequence */
if (vk == 0xBF)
ch = M('?');
else
ch = M(tolower((uchar) keycode));
}
if (ch == '\r')
ch = '\n';
#ifdef PORT_DEBUG
if (portdebug) {
char buf[BUFSZ];
Sprintf(buf,
"PORTDEBUG (%s): ch=%u, sc=%u, vk=%d, sh=0x%lX (ESC to end)",
shortdllname, ch, scan, vk, shiftstate);
fprintf(stdout, "\n%s", buf);
}
#endif
return ch;
}
int __declspec(dllexport) __stdcall
NHkbhit(
HANDLE hConIn,
INPUT_RECORD *ir)
{
int done = 0; /* true = "stop searching" */
int retval; /* true = "we had a match" */
DWORD count;
unsigned short int scan;
unsigned char ch;
unsigned long shiftstate;
int altseq = 0, keycode, vk;
done = 0;
retval = 0;
while (!done) {
count = 0;
PeekConsoleInput(hConIn, ir, 1, &count);
if (count > 0) {
if (ir->EventType == KEY_EVENT && ir->Event.KeyEvent.bKeyDown) {
ch = ir->Event.KeyEvent.uChar.AsciiChar;
scan = ir->Event.KeyEvent.wVirtualScanCode;
shiftstate = ir->Event.KeyEvent.dwControlKeyState;
vk = ir->Event.KeyEvent.wVirtualKeyCode;
keycode = MapVirtualKey(vk, 2);
if (shiftstate & (LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED)) {
if (ch || inmap(keycode, vk))
altseq = 1;
else
altseq = -1; /* invalid altseq */
}
if (ch || iskeypad(scan) || altseq) {
done = 1; /* Stop looking */
retval = 1; /* Found what we sought */
} else {
/* Strange Key event; let's purge it to avoid trouble */
ReadConsoleInput(hConIn, ir, 1, &count);
}
} else if ((ir->EventType == MOUSE_EVENT
&& (ir->Event.MouseEvent.dwButtonState
& MOUSEMASK))) {
done = 1;
retval = 1;
}
else /* Discard it, it's an insignificant event */
ReadConsoleInput(hConIn, ir, 1, &count);
} else /* There are no events in console event queue */ {
done = 1; /* Stop looking */
retval = 0;
}
}
return retval;
}
int __declspec(dllexport) __stdcall CheckInput(
HANDLE hConIn,
INPUT_RECORD *ir,
DWORD *count,
boolean numpad,
int mode,
int *mod,
coord *cc)
{
#if defined(SAFERHANGUP)
DWORD dwWait;
#endif
int ch = 0;
boolean valid = 0, done = 0;
#ifdef QWERTZ_SUPPORT
if (numpad & 0x10) {
numpad &= ~0x10;
qwertz = TRUE;
} else {
qwertz = FALSE;
}
#endif
while (!done) {
#if defined(SAFERHANGUP)
dwWait = WaitForSingleObjectEx(hConIn, // event object to wait for
INFINITE, // waits indefinitely
TRUE); // alertable wait enabled
if (dwWait == WAIT_FAILED)
return '\033';
#endif
ReadConsoleInput(hConIn, ir, 1, count);
if (mode == 0) {
if ((ir->EventType == KEY_EVENT) && ir->Event.KeyEvent.bKeyDown) {
#ifdef QWERTZ_SUPPORT
if (qwertz)
numpad |= 0x10;
#endif
ch = ProcessKeystroke(hConIn, ir, &valid, numpad, 0);
#ifdef QWERTZ_SUPPORT
numpad &= ~0x10;
#endif
done = valid;
}
} else {
if (count > 0) {
if (ir->EventType == KEY_EVENT
&& ir->Event.KeyEvent.bKeyDown) {
ch = ProcessKeystroke(hConIn, ir, &valid, numpad, 0);
if (valid)
return ch;
} else if (ir->EventType == MOUSE_EVENT) {
if ((ir->Event.MouseEvent.dwEventFlags == 0)
&& (ir->Event.MouseEvent.dwButtonState & MOUSEMASK)) {
cc->x = ir->Event.MouseEvent.dwMousePosition.X + 1;
cc->y = ir->Event.MouseEvent.dwMousePosition.Y - 1;
if (ir->Event.MouseEvent.dwButtonState & LEFTBUTTON)
*mod = CLICK_1;
else if (ir->Event.MouseEvent.dwButtonState
& RIGHTBUTTON)
*mod = CLICK_2;
#if 0 /* middle button */
else if (ir->Event.MouseEvent.dwButtonState & MIDBUTTON)
*mod = CLICK_3;
#endif
return 0;
}
}
} else
done = 1;
}
}
return mode ? 0 : ch;
}
int __declspec(dllexport) __stdcall
SourceWhere(char** buf)
{
if (!buf)
return 0;
*buf = where_to_get_source;
return 1;
}
int __declspec(dllexport) __stdcall
SourceAuthor(char** buf)
{
if (!buf)
return 0;
*buf = author;
return 1;
}
int __declspec(dllexport) __stdcall
KeyHandlerName(char** buf, int full)
{
if (!buf)
return 0;
if (full)
*buf = dllname;
else
*buf = shortdllname;
return 1;
}

384
sys/windows/nhdefkey.c Normal file
View File

@@ -0,0 +1,384 @@
/* NetHack 3.7 nhdefkey.c $NHDT-Date: 1596498313 2020/08/03 23:45:13 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.19 $ */
/* Copyright (c) NetHack PC Development Team 2003 */
/* NetHack may be freely redistributed. See license for details. */
/*
* This is the default NetHack keystroke processing.
* It can be built as a run-time loadable dll (nhdefkey.dll).
* Alternative keystroke handlers can be built using the
* entry points in this file as a template.
*
* Use the defaults.nh "altkeyhandler" option to set a
* different dll name (without the ".DLL" extension) to
* get different processing. Ensure that the dll referenced
* in defaults.nh exists in the same directory as NetHack in
* order for it to load successfully.
*
*/
static char where_to_get_source[] = "http://www.nethack.org/";
static char author[] = "The NetHack Development Team";
#include "win32api.h"
#include "hack.h"
#include "wintty.h"
extern HANDLE hConIn;
extern INPUT_RECORD ir;
char dllname[512];
char *shortdllname;
int __declspec(dllexport) __stdcall ProcessKeystroke(HANDLE hConIn,
INPUT_RECORD *ir, boolean *valid, boolean numberpad, int portdebug);
int WINAPI
DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
char dlltmpname[512];
char *tmp = dlltmpname, *tmp2;
*(tmp + GetModuleFileName(hInstance, tmp, 511)) = '\0';
(void) strcpy(dllname, tmp);
tmp2 = strrchr(dllname, '\\');
if (tmp2) {
tmp2++;
shortdllname = tmp2;
}
return TRUE;
}
/*
* Keyboard translation tables.
* (Adopted from the MSDOS port)
*/
#define KEYPADLO 0x47
#define KEYPADHI 0x53
#define PADKEYS (KEYPADHI - KEYPADLO + 1)
#define iskeypad(x) (KEYPADLO <= (x) && (x) <= KEYPADHI)
#ifdef QWERTZ_SUPPORT
/* when 'numberpad' is 0 and Cmd.swap_yz is True
(signaled by setting 0x10 on boolean numpad argument)
treat keypress of numpad 7 as 'z' rather than 'y' */
static boolean qwertz = FALSE;
#endif
/*
* Keypad keys are translated to the normal values below.
* Shifted keypad keys are translated to the
* shift values below.
*/
static const struct pad {
uchar normal, shift, cntrl;
} keypad[PADKEYS] =
{
{ 'y', 'Y', C('y') }, /* 7 */
{ 'k', 'K', C('k') }, /* 8 */
{ 'u', 'U', C('u') }, /* 9 */
{ 'm', C('p'), C('p') }, /* - */
{ 'h', 'H', C('h') }, /* 4 */
{ 'g', 'G', 'g' }, /* 5 */
{ 'l', 'L', C('l') }, /* 6 */
{ '+', 'P', C('p') }, /* + */
{ 'b', 'B', C('b') }, /* 1 */
{ 'j', 'J', C('j') }, /* 2 */
{ 'n', 'N', C('n') }, /* 3 */
{ 'i', 'I', C('i') }, /* Ins */
{ '.', ':', ':' } /* Del */
},
numpad[PADKEYS] = {
{ '7', M('7'), '7' }, /* 7 */
{ '8', M('8'), '8' }, /* 8 */
{ '9', M('9'), '9' }, /* 9 */
{ 'm', C('p'), C('p') }, /* - */
{ '4', M('4'), '4' }, /* 4 */
{ '5', M('5'), '5' }, /* 5 */
{ '6', M('6'), '6' }, /* 6 */
{ '+', 'P', C('p') }, /* + */
{ '1', M('1'), '1' }, /* 1 */
{ '2', M('2'), '2' }, /* 2 */
{ '3', M('3'), '3' }, /* 3 */
{ '0', M('0'), '0' }, /* Ins */
{ '.', ':', ':' } /* Del */
};
#define inmap(x, vk) (((x) > 'A' && (x) < 'Z') || (vk) == 0xBF || (x) == '2')
static BYTE KeyState[256];
int __declspec(dllexport) __stdcall
ProcessKeystroke(
HANDLE hConIn,
INPUT_RECORD* ir,
boolean* valid,
boolean numberpad,
int portdebug)
{
int k = 0;
int keycode, vk;
unsigned char ch, pre_ch;
unsigned short int scan;
unsigned long shiftstate;
int altseq = 0;
const struct pad *kpad;
#ifdef QWERTZ_SUPPORT
if (numberpad & 0x10) {
numberpad &= ~0x10;
qwertz = TRUE;
} else {
qwertz = FALSE;
}
#endif
shiftstate = 0L;
ch = pre_ch = ir->Event.KeyEvent.uChar.AsciiChar;
scan = ir->Event.KeyEvent.wVirtualScanCode;
vk = ir->Event.KeyEvent.wVirtualKeyCode;
keycode = MapVirtualKey(vk, 2);
shiftstate = ir->Event.KeyEvent.dwControlKeyState;
KeyState[VK_SHIFT] = (shiftstate & SHIFT_PRESSED) ? 0x81 : 0;
KeyState[VK_CONTROL] =
(shiftstate & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED)) ? 0x81 : 0;
KeyState[VK_CAPITAL] = (shiftstate & CAPSLOCK_ON) ? 0x81 : 0;
if (shiftstate & (LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED)) {
if (ch || inmap(keycode, vk))
altseq = 1;
else
altseq = -1; /* invalid altseq */
}
if (ch || (iskeypad(scan)) || (altseq > 0))
*valid = TRUE;
/* if (!valid) return 0; */
/*
* shiftstate can be checked to see if various special
* keys were pressed at the same time as the key.
* Currently we are using the ALT & SHIFT & CONTROLS.
*
* RIGHT_ALT_PRESSED, LEFT_ALT_PRESSED,
* RIGHT_CTRL_PRESSED, LEFT_CTRL_PRESSED,
* SHIFT_PRESSED,NUMLOCK_ON, SCROLLLOCK_ON,
* CAPSLOCK_ON, ENHANCED_KEY
*
* are all valid bit masks to use on shiftstate.
* eg. (shiftstate & LEFT_CTRL_PRESSED) is true if the
* left control key was pressed with the keystroke.
*/
if (iskeypad(scan)) {
kpad = numberpad ? numpad : keypad;
if (shiftstate & SHIFT_PRESSED) {
ch = kpad[scan - KEYPADLO].shift;
} else if (shiftstate & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED)) {
ch = kpad[scan - KEYPADLO].cntrl;
} else {
ch = kpad[scan - KEYPADLO].normal;
}
#ifdef QWERTZ_SUPPORT
/* OPTIONS=number_pad:-1 is for qwertz keyboard; for that setting,
'numberpad' will be 0; core swaps y to zap, z to move northwest;
we want numpad 7 to move northwest, so when qwertz is set,
tell core that user who types numpad 7 typed z rather than y */
if (qwertz && kpad[scan - KEYPADLO].normal == 'y')
ch += 1; /* changes y to z, Y to Z, ^Y to ^Z */
#endif /*QWERTZ_SUPPORT*/
} else if (altseq > 0) { /* ALT sequence */
if (vk == 0xBF)
ch = M('?');
else
ch = M(tolower((uchar) keycode));
}
/* Attempt to work better with international keyboards. */
else {
WORD chr[2];
k = ToAscii(vk, scan, KeyState, chr, 0);
if (k <= 2)
switch (k) {
case 2: /* two characters */
ch = (unsigned char) chr[1];
*valid = TRUE;
break;
case 1: /* one character */
ch = (unsigned char) chr[0];
*valid = TRUE;
break;
case 0: /* no translation */
default: /* negative */
*valid = FALSE;
}
}
if (ch == '\r')
ch = '\n';
#ifdef PORT_DEBUG
if (portdebug) {
char buf[BUFSZ];
Sprintf(buf, "PORTDEBUG (%s): ch=%u, sc=%u, vk=%d, pre=%d, sh=0x%lX, "
"ta=%d (ESC to end)",
shortdllname, ch, scan, vk, pre_ch, shiftstate, k);
fprintf(stdout, "\n%s", buf);
}
#endif
return ch;
}
int __declspec(dllexport) __stdcall
NHkbhit(HANDLE hConIn, INPUT_RECORD *ir)
{
int done = 0; /* true = "stop searching" */
int retval; /* true = "we had a match" */
DWORD count;
unsigned short int scan;
unsigned char ch;
unsigned long shiftstate;
int altseq = 0, keycode, vk;
done = 0;
retval = 0;
while (!done) {
count = 0;
PeekConsoleInput(hConIn, ir, 1, &count);
if (count > 0) {
if (ir->EventType == KEY_EVENT && ir->Event.KeyEvent.bKeyDown) {
ch = ir->Event.KeyEvent.uChar.AsciiChar;
scan = ir->Event.KeyEvent.wVirtualScanCode;
shiftstate = ir->Event.KeyEvent.dwControlKeyState;
vk = ir->Event.KeyEvent.wVirtualKeyCode;
keycode = MapVirtualKey(vk, 2);
if (shiftstate & (LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED)) {
if (ch || inmap(keycode, vk))
altseq = 1;
else
altseq = -1; /* invalid altseq */
}
if (ch || iskeypad(scan) || altseq) {
done = 1; /* Stop looking */
retval = 1; /* Found what we sought */
} else {
/* Strange Key event; let's purge it to avoid trouble */
ReadConsoleInput(hConIn, ir, 1, &count);
}
} else if ((ir->EventType == MOUSE_EVENT
&& (ir->Event.MouseEvent.dwButtonState
& MOUSEMASK))) {
done = 1;
retval = 1;
}
else /* Discard it, it's an insignificant event */
ReadConsoleInput(hConIn, ir, 1, &count);
} else /* There are no events in console event queue */ {
done = 1; /* Stop looking */
retval = 0;
}
}
return retval;
}
int __declspec(dllexport) __stdcall
CheckInput(
HANDLE hConIn,
INPUT_RECORD *ir,
DWORD* count,
boolean numpad,
int mode,
int *mod,
coord *cc)
{
#if defined(SAFERHANGUP)
DWORD dwWait;
#endif
int ch = 0;
boolean valid = 0, done = 0;
#ifdef QWERTZ_SUPPORT
if (numpad & 0x10) {
numpad &= ~0x10;
qwertz = TRUE;
} else {
qwertz = FALSE;
}
#endif
while (!done) {
#if defined(SAFERHANGUP)
dwWait = WaitForSingleObjectEx(hConIn, // event object to wait for
INFINITE, // waits indefinitely
TRUE); // alertable wait enabled
if (dwWait == WAIT_FAILED)
return '\033';
#endif
ReadConsoleInput(hConIn, ir, 1, count);
if (mode == 0) {
if ((ir->EventType == KEY_EVENT) && ir->Event.KeyEvent.bKeyDown) {
ch = ProcessKeystroke(hConIn, ir, &valid, numpad, 0);
done = valid;
}
} else {
if (count > 0) {
if (ir->EventType == KEY_EVENT
&& ir->Event.KeyEvent.bKeyDown) {
#ifdef QWERTZ_SUPPORT
if (qwertz)
numpad |= 0x10;
#endif
ch = ProcessKeystroke(hConIn, ir, &valid, numpad, 0);
#ifdef QWERTZ_SUPPORT
numpad &= ~0x10;
#endif
if (valid)
return ch;
} else if (ir->EventType == MOUSE_EVENT) {
if ((ir->Event.MouseEvent.dwEventFlags == 0)
&& (ir->Event.MouseEvent.dwButtonState & MOUSEMASK)) {
cc->x = ir->Event.MouseEvent.dwMousePosition.X + 1;
cc->y = ir->Event.MouseEvent.dwMousePosition.Y - 1;
if (ir->Event.MouseEvent.dwButtonState & LEFTBUTTON)
*mod = CLICK_1;
else if (ir->Event.MouseEvent.dwButtonState
& RIGHTBUTTON)
*mod = CLICK_2;
#if 0 /* middle button */
else if (ir->Event.MouseEvent.dwButtonState & MIDBUTTON)
*mod = CLICK_3;
#endif
return 0;
}
}
} else
done = 1;
}
}
return mode ? 0 : ch;
}
int __declspec(dllexport) __stdcall
SourceWhere(char** buf)
{
if (!buf)
return 0;
*buf = where_to_get_source;
return 1;
}
int __declspec(dllexport) __stdcall
SourceAuthor(char **buf)
{
if (!buf)
return 0;
*buf = author;
return 1;
}
int __declspec(dllexport) __stdcall
KeyHandlerName(char **buf, int full)
{
if (!buf)
return 0;
if (full)
*buf = dllname;
else
*buf = shortdllname;
return 1;
}

27
sys/windows/nhico.uu Normal file
View File

@@ -0,0 +1,27 @@
begin 600 nethack.ico
M```!``(`("`0``````#H`@``)@```!`0$```````*`$```X#```H````(```
M`$`````!``0``````(`"````````````````````````````````@```@```
M`("``(````"``(``@(```,#`P`"`@(````#_``#_````__\`_P```/\`_P#_
M_P``____````````````````````````__=P```````````'=W<`#___=P``
M````````?_?W<`]W:/=P``#_<```!WB'!G`/8'B'<``/_W<```?VAGAP#P=E
M;W``__]W<``'>`=H\`__=G_P#_!V9_<`!W=H=W``__</\/\,>(:/<`=P=W<`
M``__\`_W=G9GB'<`!W=P````__#_=G=X2&"/<`=W``````_P_\=T=F>(:/<'
M<```````#_9V=V5H8(AO<`````````_W=W1WAXAHA_````````#_9\<&>&!H
M!H9W````````_W=V=6=GAH@(]P``````#_?'9W9T:(!H:&=P``````_V=WQV
M=X=HA@B/<``````/]GQP=G>':(A@AW``````#_<'9\=VAH!HB&=P``````_V
M=G=X9V>&"&"'<``````/]W?'9W1@B(:(9W````^&C_?'9W1WAX:`8(=P`'`/
M_X_P9W9W:&A@AH:'</=P#_^/]W?'='>'AH@(AW!W\`=H;_9V=G!H:&"&A@=P
M`(`'B(_P<'!V<&>(:(B'<`"`#_\/______=W=W=W=W!W<`__#_____?_?W=W
M=W=P=W`/``__#___]W=W=W!W<`!P```/\`#_]_]_=W<`!W``````#P```/_W
M=W<```!P````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M```````````````````````H````$````"`````!``0``````,``````````
M````````````````````````@```@````("``(````"``(``@(```,#`P`"`
M@(````#_``#_````__\`_P```/\`_P#__P``____`````````````/<`````
M=P`/_W`/<`=W<`#_\/8'!W<```\/9F!P<````/9F!@<`````]F9@9P````]F
M9@8&<```#V9F8&!P```/9F8&!G````]F9F!@<``/?V9F!@9P<`]_9F9@8'!P
M#P___W=W<'``#P__=W!P````````````````````````````````````````
K````````````````````````````````````````````````````````````
`
end

666
sys/windows/nhraykey.c Normal file
View File

@@ -0,0 +1,666 @@
/* NetHack 3.7 nhraykey.c $NHDT-Date: 1596498314 2020/08/03 23:45:14 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.21 $ */
/* Copyright (c) NetHack PC Development Team 2003 */
/* NetHack may be freely redistributed. See license for details. */
/*
* Keystroke handling contributed by Ray Chason.
* The following text was written by Ray Chason.
*
* The problem
* ===========
*
* The console-mode Nethack wants both keyboard and mouse input. The
* problem is that the Windows API provides no easy way to get mouse input
* and also keyboard input properly translated according to the user's
* chosen keyboard layout.
*
* The ReadConsoleInput function returns a stream of keyboard and mouse
* events. Nethack is interested in those events that represent a key
* pressed, or a click on a mouse button. The keyboard events from
* ReadConsoleInput are not translated according to the keyboard layout,
* and do not take into account the shift, control, or alt keys.
*
* The PeekConsoleInput function works similarly to ReadConsoleInput,
* except that it does not remove an event from the queue and it returns
* instead of blocking when the queue is empty.
*
* A program can also use ReadConsole to get a properly translated stream
* of characters. Unfortunately, ReadConsole does not return mouse events,
* does not distinguish the keypad from the main keyboard, does not return
* keys shifted with Alt, and does not even return the ESC key when
* pressed.
*
* We want both the functionality of ReadConsole and the functionality of
* ReadConsoleInput. But Microsoft didn't seem to think of that.
*
*
* The solution, in the original code
* ==================================
*
* The original 3.4.1 distribution tries to get proper keyboard translation
* by passing keyboard events to the ToAscii function. This works, to some
* extent -- it takes the shift key into account, and it processes dead
* keys properly. But it doesn't take non-US keyboards into account. It
* appears that ToAscii is meant for windowed applications, and does not
* have enough information to do its job properly in a console application.
*
*
* The Finnish keyboard patch
* ==========================
*
* This patch adds the "subkeyvalue" option to the defaults.nh file. The
* user can then add OPTIONS=sukeyvalue:171/92, for instance, to replace
* the 171 character with 92, which is \. This works, once properly
* configured, but places too much burden on the user. It also bars the
* use of the substituted characters in naming objects or monsters.
*
*
* The solution presented here
* ===========================
*
* The best way I could find to combine the functionality of ReadConsole
* with that of ReadConsoleInput is simple in concept. First, call
* PeekConsoleInput to get the first event. If it represents a key press,
* call ReadConsole to retrieve the key. Otherwise, pop it off the queue
* with ReadConsoleInput and, if it's a mouse click, return it as such.
*
* But the Devil, as they say, is in the details. The problem is in
* recognizing an event that ReadConsole will return as a key. We don't
* want to call ReadConsole unless we know that it will immediately return:
* if it blocks, the mouse and the Alt sequences will cease to function
* until it returns.
*
* Separating process_keystroke into two functions, one for commands and a
* new one, process_keystroke2, for answering prompts, makes the job a lot
* easier. process_keystroke2 doesn't have to worry about mouse events or
* Alt sequences, and so the consequences are minor if ReadConsole blocks.
* process_keystroke, OTOH, never needs to return a non-ASCII character
* that was read from ReadConsole; it returns bytes with the high bit set
* only in response to an Alt sequence.
*
* So in process_keystroke, before calling ReadConsole, a bogus key event
* is pushed on the queue. This event causes ReadConsole to return, even
* if there was no other character available. Because the bogus key has
* the eighth bit set, it is filtered out. This is not done in
* process_keystroke2, because that would render dead keys unusable.
*
* A separate process_keystroke2 can also process the numeric keypad in a
* way that makes sense for prompts: just return the corresponding symbol,
* and pay no mind to number_pad or the num lock key.
*
* The recognition of Alt sequences is modified, to support the use of
* characters generated with the AltGr key. A keystroke is an Alt sequence
* if an Alt key is seen that can't be an AltGr (since an AltGr sequence
* could be a character, and in some layouts it could even be an ASCII
* character). This recognition is different on NT-based and 95-based
* Windows:
*
* * On NT-based Windows, AltGr signals as right Alt and left Ctrl
* together. So an Alt sequence is recognized if either Alt key is
* pressed and if right Alt and left Ctrl are not both present. This
* is true even if the keyboard in use does not have an AltGr key, and
* uses right Alt for AltGr.
*
* * On 95-based Windows, with a keyboard that lacks the AltGr key, the
* right Alt key is used instead. But it still signals as right Alt,
* without left Ctrl. There is no way for the application to know
* whether right Alt is Alt or AltGr, and so it is always assumed
* to be AltGr. This means that Alt sequences must be formed with
* left Alt.
*
* So the patch processes keystrokes as follows:
*
* * If the scan and virtual key codes are both 0, it's the bogus key,
* and we ignore it.
*
* * Keys on the numeric keypad are processed for commands as in the
* unpatched Nethack, and for prompts by returning the ASCII
* character, even if the num lock is off.
*
* * Alt sequences are processed for commands as in the unpatched
* Nethack, and ignored for prompts.
*
* * Control codes are returned as received, because ReadConsole will
* not return the ESC key.
*
* * Other key-down events are passed to ReadConsole. The use of
* ReadConsole is different for commands than for prompts:
*
* o For commands, the bogus key is pushed onto the queue before
* ReadConsole is called. On return, non-ASCII characters are
* filtered, so they are not mistaken for Alt sequences; this also
* filters the bogus key.
*
* o For prompts, the bogus key is not used, because that would
* interfere with dead keys. Eight bit characters may be returned,
* and are coded in the configured code page.
*
*
* Possible improvements
* =====================
*
* Some possible improvements remain:
*
* * Integrate the existing Finnish keyboard patch, for use with non-
* QWERTY layouts such as the German QWERTZ keyboard or Dvorak.
*
* * Fix the keyboard glitches in the graphical version. Namely, dead
* keys don't work, and input comes in as ISO-8859-1 but is displayed
* as code page 437 if IBMgraphics is set on startup.
*
* * Transform incoming text to ISO-8859-1, for full compatibility with
* the graphical version.
*
* * After pushing the bogus key and calling ReadConsole, check to see
* if we got the bogus key; if so, and an Alt is pressed, process the
* event as an Alt sequence.
*
*/
static char where_to_get_source[] = "http://www.nethack.org/";
static char author[] = "Ray Chason";
#include "win32api.h"
#include "hack.h"
#include "wintty.h"
extern HANDLE hConIn;
extern INPUT_RECORD ir;
char dllname[512];
char *shortdllname;
int __declspec(dllexport) __stdcall ProcessKeystroke(HANDLE hConIn,
INPUT_RECORD *ir, boolean *valid, boolean numberpad, int portdebug);
static INPUT_RECORD bogus_key;
int WINAPI
DllMain(HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
char dlltmpname[512];
char *tmp = dlltmpname, *tmp2;
*(tmp + GetModuleFileName(hInstance, tmp, 511)) = '\0';
(void) strcpy(dllname, tmp);
tmp2 = strrchr(dllname, '\\');
if (tmp2) {
tmp2++;
shortdllname = tmp2;
}
/* A bogus key that will be filtered when received, to keep ReadConsole
* from blocking */
bogus_key.EventType = KEY_EVENT;
bogus_key.Event.KeyEvent.bKeyDown = 1;
bogus_key.Event.KeyEvent.wRepeatCount = 1;
bogus_key.Event.KeyEvent.wVirtualKeyCode = 0;
bogus_key.Event.KeyEvent.wVirtualScanCode = 0;
bogus_key.Event.KeyEvent.uChar.AsciiChar = (uchar) 0x80;
bogus_key.Event.KeyEvent.dwControlKeyState = 0;
return TRUE;
}
/*
* Keyboard translation tables.
* (Adopted from the MSDOS port)
*/
#define KEYPADLO 0x47
#define KEYPADHI 0x53
#define PADKEYS (KEYPADHI - KEYPADLO + 1)
#define iskeypad(x) (KEYPADLO <= (x) && (x) <= KEYPADHI)
#define isnumkeypad(x) \
(KEYPADLO <= (x) && (x) <= 0x51 && (x) != 0x4A && (x) != 0x4E)
#ifdef QWERTZ_SUPPORT
/* when 'numberpad' is 0 and Cmd.swap_yz is True
(signaled by setting 0x10 on boolean numpad argument)
treat keypress of numpad 7 as 'z' rather than 'y' */
static boolean qwertz = FALSE;
#endif
/*
* Keypad keys are translated to the normal values below.
* Shifted keypad keys are translated to the
* shift values below.
*/
static const struct pad {
uchar normal, shift, cntrl;
} keypad[PADKEYS] =
{
{ 'y', 'Y', C('y') }, /* 7 */
{ 'k', 'K', C('k') }, /* 8 */
{ 'u', 'U', C('u') }, /* 9 */
{ 'm', C('p'), C('p') }, /* - */
{ 'h', 'H', C('h') }, /* 4 */
{ 'g', 'G', 'g' }, /* 5 */
{ 'l', 'L', C('l') }, /* 6 */
{ '+', 'P', C('p') }, /* + */
{ 'b', 'B', C('b') }, /* 1 */
{ 'j', 'J', C('j') }, /* 2 */
{ 'n', 'N', C('n') }, /* 3 */
{ 'i', 'I', C('i') }, /* Ins */
{ '.', ':', ':' } /* Del */
},
numpad[PADKEYS] = {
{ '7', M('7'), '7' }, /* 7 */
{ '8', M('8'), '8' }, /* 8 */
{ '9', M('9'), '9' }, /* 9 */
{ 'm', C('p'), C('p') }, /* - */
{ '4', M('4'), '4' }, /* 4 */
{ 'g', 'G', 'g' }, /* 5 */
{ '6', M('6'), '6' }, /* 6 */
{ '+', 'P', C('p') }, /* + */
{ '1', M('1'), '1' }, /* 1 */
{ '2', M('2'), '2' }, /* 2 */
{ '3', M('3'), '3' }, /* 3 */
{ 'i', 'I', C('i') }, /* Ins */
{ '.', ':', ':' } /* Del */
};
#define inmap(x, vk) (((x) > 'A' && (x) < 'Z') || (vk) == 0xBF || (x) == '2')
/* Use process_keystroke for key commands, process_keystroke2 for prompts */
/* int process_keystroke(INPUT_RECORD *ir, boolean *valid, int
* portdebug); */
int process_keystroke2(HANDLE, INPUT_RECORD *ir, boolean *valid);
static int is_altseq(unsigned long shiftstate);
static int
is_altseq(unsigned long shiftstate)
{
/* We need to distinguish the Alt keys from the AltGr key.
* On NT-based Windows, AltGr signals as right Alt and left Ctrl together;
* on 95-based Windows, AltGr signals as right Alt only.
* So on NT, we signal Alt if either Alt is pressed and left Ctrl is not,
* and on 95, we signal Alt for left Alt only. */
switch (shiftstate
& (RIGHT_ALT_PRESSED | LEFT_ALT_PRESSED | LEFT_CTRL_PRESSED)) {
case LEFT_ALT_PRESSED:
case LEFT_ALT_PRESSED | LEFT_CTRL_PRESSED:
return 1;
case RIGHT_ALT_PRESSED:
case RIGHT_ALT_PRESSED | LEFT_ALT_PRESSED:
return (GetVersion() & 0x80000000) == 0;
default:
return 0;
}
}
int __declspec(dllexport) __stdcall
ProcessKeystroke(
HANDLE hConIn,
INPUT_RECORD *ir,
boolean *valid,
boolean numberpad,
int portdebug)
{
int keycode, vk;
unsigned char ch, pre_ch;
unsigned short int scan;
unsigned long shiftstate;
int altseq = 0;
const struct pad *kpad;
DWORD count;
#ifdef QWERTZ_SUPPORT
if (numberpad & 0x10) {
numberpad &= ~0x10;
qwertz = TRUE;
} else {
qwertz = FALSE;
}
#endif
shiftstate = 0L;
ch = pre_ch = ir->Event.KeyEvent.uChar.AsciiChar;
scan = ir->Event.KeyEvent.wVirtualScanCode;
vk = ir->Event.KeyEvent.wVirtualKeyCode;
keycode = MapVirtualKey(vk, 2);
shiftstate = ir->Event.KeyEvent.dwControlKeyState;
if (scan == 0 && vk == 0) {
/* It's the bogus_key */
ReadConsoleInput(hConIn, ir, 1, &count);
*valid = FALSE;
return 0;
}
if (is_altseq(shiftstate)) {
if (ch || inmap(keycode, vk))
altseq = 1;
else
altseq = -1; /* invalid altseq */
}
if (ch || (iskeypad(scan)) || (altseq > 0))
*valid = TRUE;
/* if (!valid) return 0; */
/*
* shiftstate can be checked to see if various special
* keys were pressed at the same time as the key.
* Currently we are using the ALT & SHIFT & CONTROLS.
*
* RIGHT_ALT_PRESSED, LEFT_ALT_PRESSED,
* RIGHT_CTRL_PRESSED, LEFT_CTRL_PRESSED,
* SHIFT_PRESSED,NUMLOCK_ON, SCROLLLOCK_ON,
* CAPSLOCK_ON, ENHANCED_KEY
*
* are all valid bit masks to use on shiftstate.
* eg. (shiftstate & LEFT_CTRL_PRESSED) is true if the
* left control key was pressed with the keystroke.
*/
if (iskeypad(scan)) {
ReadConsoleInput(hConIn, ir, 1, &count);
kpad = numberpad ? numpad : keypad;
if (shiftstate & SHIFT_PRESSED) {
ch = kpad[scan - KEYPADLO].shift;
} else if (shiftstate & (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED)) {
ch = kpad[scan - KEYPADLO].cntrl;
} else {
ch = kpad[scan - KEYPADLO].normal;
}
#ifdef QWERTZ_SUPPORT
/* OPTIONS=number_pad:-1 is for qwertz keyboard; for that setting,
'numberpad' will be 0; core swaps y to zap, z to move northwest;
we want numpad 7 to move northwest, so when qwertz is set,
tell core that user who types numpad 7 typed z rather than y */
if (qwertz && kpad[scan - KEYPADLO].normal == 'y')
ch += 1; /* changes y to z, Y to Z, ^Y to ^Z */
#endif /*QWERTZ_SUPPORT*/
} else if (altseq > 0) { /* ALT sequence */
ReadConsoleInput(hConIn, ir, 1, &count);
if (vk == 0xBF)
ch = M('?');
else
ch = M(tolower((uchar) keycode));
} else if (ch < 32 && !isnumkeypad(scan)) {
/* Control code; ReadConsole seems to filter some of these,
* including ESC */
ReadConsoleInput(hConIn, ir, 1, &count);
}
/* Attempt to work better with international keyboards. */
else {
CHAR ch2;
DWORD written;
/* The bogus_key guarantees that ReadConsole will return,
* and does not itself do anything */
WriteConsoleInput(hConIn, &bogus_key, 1, &written);
ReadConsole(hConIn, &ch2, 1, &count, NULL);
/* Prevent high characters from being interpreted as alt
* sequences; also filter the bogus_key */
if (ch2 & 0x80)
*valid = FALSE;
else
ch = ch2;
if (ch == 0)
*valid = FALSE;
}
if (ch == '\r')
ch = '\n';
#ifdef PORT_DEBUG
if (portdebug) {
char buf[BUFSZ];
Sprintf(buf, "PORTDEBUG: ch=%u, scan=%u, vk=%d, pre=%d, "
"shiftstate=0x%lX (ESC to end)\n",
ch, scan, vk, pre_ch, shiftstate);
fprintf(stdout, "\n%s", buf);
}
#endif
return ch;
}
int
process_keystroke2(
HANDLE hConIn,
INPUT_RECORD *ir,
boolean *valid)
{
/* Use these values for the numeric keypad */
static const char keypad_nums[] = "789-456+1230.";
unsigned char ch;
int vk;
unsigned short int scan;
unsigned long shiftstate;
int altseq;
DWORD count;
ch = ir->Event.KeyEvent.uChar.AsciiChar;
vk = ir->Event.KeyEvent.wVirtualKeyCode;
scan = ir->Event.KeyEvent.wVirtualScanCode;
shiftstate = ir->Event.KeyEvent.dwControlKeyState;
if (scan == 0 && vk == 0) {
/* It's the bogus_key */
ReadConsoleInput(hConIn, ir, 1, &count);
*valid = FALSE;
return 0;
}
altseq = is_altseq(shiftstate);
if (ch || (iskeypad(scan)) || altseq)
*valid = TRUE;
/* if (!valid) return 0; */
/*
* shiftstate can be checked to see if various special
* keys were pressed at the same time as the key.
* Currently we are using the ALT & SHIFT & CONTROLS.
*
* RIGHT_ALT_PRESSED, LEFT_ALT_PRESSED,
* RIGHT_CTRL_PRESSED, LEFT_CTRL_PRESSED,
* SHIFT_PRESSED,NUMLOCK_ON, SCROLLLOCK_ON,
* CAPSLOCK_ON, ENHANCED_KEY
*
* are all valid bit masks to use on shiftstate.
* eg. (shiftstate & LEFT_CTRL_PRESSED) is true if the
* left control key was pressed with the keystroke.
*/
if (iskeypad(scan) && !altseq) {
ReadConsoleInput(hConIn, ir, 1, &count);
ch = keypad_nums[scan - KEYPADLO];
} else if (ch < 32 && !isnumkeypad(scan)) {
/* Control code; ReadConsole seems to filter some of these,
* including ESC */
ReadConsoleInput(hConIn, ir, 1, &count);
}
/* Attempt to work better with international keyboards. */
else {
CHAR ch2;
ReadConsole(hConIn, &ch2, 1, &count, NULL);
ch = ch2 & 0xFF;
if (ch == 0)
*valid = FALSE;
}
if (ch == '\r')
ch = '\n';
return ch;
}
int __declspec(dllexport) __stdcall
CheckInput(
HANDLE hConIn,
INPUT_RECORD *ir,
DWORD *count,
boolean numpad,
int mode,
int *mod,
coord *cc)
{
#if defined(SAFERHANGUP)
DWORD dwWait;
#endif
int ch = 0;
boolean valid = 0, done = 0;
#ifdef QWERTZ_SUPPORT
if (numpad & 0x10) {
numpad &= ~0x10;
qwertz = TRUE;
} else {
qwertz = FALSE;
}
#endif
while (!done) {
*count = 0;
dwWait = WaitForSingleObject(hConIn, INFINITE);
#if defined(SAFERHANGUP)
if (dwWait == WAIT_FAILED)
return '\033';
#endif
PeekConsoleInput(hConIn, ir, 1, count);
if (mode == 0) {
if ((ir->EventType == KEY_EVENT) && ir->Event.KeyEvent.bKeyDown) {
ch = process_keystroke2(hConIn, ir, &valid);
done = valid;
} else
ReadConsoleInput(hConIn, ir, 1, count);
} else {
ch = 0;
if (count > 0) {
if (ir->EventType == KEY_EVENT
&& ir->Event.KeyEvent.bKeyDown) {
#ifdef QWERTZ_SUPPORT
if (qwertz)
numpad |= 0x10;
#endif
ch = ProcessKeystroke(hConIn, ir, &valid, numpad,
#ifdef PORTDEBUG
1);
#else
0);
#endif
#ifdef QWERTZ_SUPPORT
numpad &= ~0x10;
#endif
if (valid)
return ch;
} else {
ReadConsoleInput(hConIn, ir, 1, count);
if (ir->EventType == MOUSE_EVENT) {
if ((ir->Event.MouseEvent.dwEventFlags == 0)
&& (ir->Event.MouseEvent.dwButtonState
& MOUSEMASK)) {
cc->x =
ir->Event.MouseEvent.dwMousePosition.X + 1;
cc->y =
ir->Event.MouseEvent.dwMousePosition.Y - 1;
if (ir->Event.MouseEvent.dwButtonState
& LEFTBUTTON)
*mod = CLICK_1;
else if (ir->Event.MouseEvent.dwButtonState
& RIGHTBUTTON)
*mod = CLICK_2;
#if 0 /* middle button */
else if (ir->Event.MouseEvent.dwButtonState & MIDBUTTON)
*mod = CLICK_3;
#endif
return 0;
}
}
#if 0
/* We ignore these types of console events */
else if (ir->EventType == FOCUS_EVENT) {
}
else if (ir->EventType == MENU_EVENT) {
}
#endif
}
} else
done = 1;
}
}
*mod = 0;
return ch;
}
int __declspec(dllexport) __stdcall NHkbhit(
HANDLE hConIn,
INPUT_RECORD *ir)
{
int done = 0; /* true = "stop searching" */
int retval; /* true = "we had a match" */
DWORD count;
unsigned short int scan;
unsigned char ch;
unsigned long shiftstate;
int altseq = 0, keycode, vk;
done = 0;
retval = 0;
while (!done) {
count = 0;
PeekConsoleInput(hConIn, ir, 1, &count);
if (count > 0) {
if (ir->EventType == KEY_EVENT && ir->Event.KeyEvent.bKeyDown) {
ch = ir->Event.KeyEvent.uChar.AsciiChar;
scan = ir->Event.KeyEvent.wVirtualScanCode;
shiftstate = ir->Event.KeyEvent.dwControlKeyState;
vk = ir->Event.KeyEvent.wVirtualKeyCode;
if (scan == 0 && vk == 0) {
/* It's the bogus_key. Discard it */
ReadConsoleInput(hConIn,ir,1,&count);
} else {
keycode = MapVirtualKey(vk, 2);
if (is_altseq(shiftstate)) {
if (ch || inmap(keycode, vk))
altseq = 1;
else
altseq = -1; /* invalid altseq */
}
if (ch || iskeypad(scan) || altseq) {
done = 1; /* Stop looking */
retval = 1; /* Found what we sought */
} else {
/* Strange Key event; let's purge it to avoid trouble */
ReadConsoleInput(hConIn, ir, 1, &count);
}
}
} else if ((ir->EventType == MOUSE_EVENT
&& (ir->Event.MouseEvent.dwButtonState
& MOUSEMASK))) {
done = 1;
retval = 1;
}
else /* Discard it, it's an insignificant event */
ReadConsoleInput(hConIn, ir, 1, &count);
} else /* There are no events in console event queue */ {
done = 1; /* Stop looking */
retval = 0;
}
}
return retval;
}
int __declspec(dllexport) __stdcall
SourceWhere(char** buf)
{
if (!buf)
return 0;
*buf = where_to_get_source;
return 1;
}
int __declspec(dllexport) __stdcall
SourceAuthor(char** buf)
{
if (!buf)
return 0;
*buf = author;
return 1;
}
int __declspec(dllexport) __stdcall KeyHandlerName(
char **buf,
int full)
{
if (!buf)
return 0;
if (full)
*buf = dllname;
else
*buf = shortdllname;
return 1;
}

128
sys/windows/nhsetup.bat Executable file
View File

@@ -0,0 +1,128 @@
@REM NetHack 3.7 nhsetup.bat $NHDT-Date: 1596498315 2020/08/03 23:45:15 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.40 $ */
@REM Copyright (c) NetHack PC Development Team 1993-2019
@REM NetHack may be freely redistributed. See license for details.
@REM Win32 setup batch file, see Install.windows for details
@REM
@echo off
pushd %~dp0
set WIN32PATH=..\..\win\win32
set BINPATH=..\..\binary
set VCDir=
goto :main
:dirname
rem Get the dirname of the second argument and set the variable who's
rem name was specified in the first argument.
call set %~1=%%~dp2
call set %~1=%%%~1:~0,-1%%
goto :EOF
:main
echo Checking to see if source tree directories are set up properly...
if not exist ..\..\include\hack.h goto :err_dir
if not exist ..\..\src\hack.c goto :err_dir
if not exist ..\..\dat\wizard1.lua goto :err_dir
if not exist ..\..\util\makedefs.c goto :err_dir
if not exist ..\..\sys\windows\windsys.c goto :err_dir
echo Directories look ok.
:movemakes
echo Moving Makefiles into ..\..\src for those not using Visual Studio
REM Some file movemet for those that still want to use MAKE or NMAKE and a Makefile
:do_tty
if NOT exist %BINPATH%\*.* mkdir %BINPATH%
if NOT exist %BINPATH%\license copy ..\..\dat\license %BINPATH%\license >nul
echo Copying Microsoft Makefile - Makefile.msc to ..\..\src\Makefile...
if NOT exist ..\..\src\Makefile goto :domsc
copy ..\..\src\Makefile ..\..\src\Makefile-orig >nul
echo Your existing
echo ..\..\src\Makefile
echo has been renamed to
echo ..\..\src\Makefile-orig
:domsc
copy Makefile.msc ..\..\src\Makefile >nul
echo Microsoft Makefile copied ok.
echo Copying MinGW Makefile - Makefile.gcc to ..\..\src\Makefile.gcc...
if NOT exist ..\..\src\Makefile.gcc goto :dogcc
copy ..\..\src\Makefile.gcc ..\..\src\Makefile.gcc-orig >nul
echo Your existing
echo ..\..\src\Makefile.gcc
echo has been renamed to
echo ..\..\src\Makefile.gcc-orig
:dogcc
copy Makefile.gcc ..\..\src\Makefile.gcc >nul
echo MinGW Makefile copied ok.
echo Done copying files.
echo Checking version of VC++ installed...
:vscheck2019
SET REGTREE=HKLM\SOFTWARE\WOW6432Node\Microsoft\VisualStudio
@REM i can see your house from here... or at least your VC++ folder
set VCDir="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\"
if not defined VCDir goto :vscheck2017
if not exist %VCDir% goto :vscheck2017
if not "%VSCMD_VER%"=="16.0.0" goto :vscheck2017
set MSVCVERSION=2019
set MSVCPROJ=2017
goto :fallback
:vscheck2017
SET REGTREE=HKLM\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\SxS\VS7
@REM i can see your house from here... or at least your VC++ folder
for /f "usebackq skip=2 tokens=1-2*" %%a IN (`reg query %REGTREE% /v 15.0`) do @set VCDir="%%c"
if not defined VCDir goto :vscheck2015
if not exist %VCDir% goto :vscheck2015
set MSVCVERSION=2017
set MSVCPROJ=2017
goto :fallback
:vscheck2015
rem cannot use the registry trick used for vc2017
rem 14 = 2015
SET VCVERS=14
rem Finally, let's determine the root folder for this VC installation.
set VCROOT=%%VS%VCVERS%0COMNTOOLS%%
if "%VCROOT:~-1%"=="\" set VCROOT=%VCROOT:~0,-1%
rem VCROOT=VSDir\Common7\Tools
call :dirname VCROOT "%VCROOT%"
rem VCROOT=VSDir\Common7
call :dirname VCROOT "%VCROOT%"
rem VCROOT=VSDir
set VCDir=%VCROOT%\VC
SET MSVCVERSION=2015
:fallback
echo Using VS%MSVCVERSION%.
set SRCPATH=%WIN32PATH%\vs%MSVCPROJ%
echo NetHack VS%MSVCVERSION% project files are in %SRCPATH%
goto :done
:err_win
echo Some of the files needed to build graphical NetHack
echo for Windows are not in the expected places.
echo Check "Install.windows" for a list of the steps required
echo to build NetHack.
goto :fini
:err_dir
echo Your directories are not set up properly, please re-read the
echo documentation and sys/windows/Install.windows.
goto :fini
:done
echo done!
echo.
echo Proceed with the next step documented in Install.windows
echo.
:fini
:end
set _pause=N
for %%x in (%cmdcmdline%) do if /i "%%~x"=="/c" set _pause=Y
if "%_pause%"=="Y" pause
set _pause=
popd

27
sys/windows/ntsound.c Normal file
View File

@@ -0,0 +1,27 @@
/* NetHack 3.7 ntsound.c $NHDT-Date: 1596498316 2020/08/03 23:45:16 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.13 $ */
/* Copyright (c) NetHack PC Development Team 1993 */
/* NetHack may be freely redistributed. See license for details. */
/* */
/*
* ntsound.c - Windows NT NetHack sound support
*
*Edit History:
* Initial Creation 93/12/11
*
*/
#include "win32api.h"
#include "hack.h"
#include <mmsystem.h>
#ifdef USER_SOUNDS
void
play_usersound(const char* filename, int volume)
{
/* pline("play_usersound: %s (%d).", filename, volume); */
(void) sndPlaySound(filename, SND_ASYNC | SND_NODEFAULT);
}
#endif /*USER_SOUNDS*/
/* ntsound.c */

300
sys/windows/porthelp Normal file
View File

@@ -0,0 +1,300 @@
Microsoft Windows specific help file for NetHack 3.7
Copyright (c) NetHack PC Development Team 1993-2020.
NetHack may be freely distributed. See license for details.
(Last Revision: August 8, 2020)
This file details specifics for NetHack built for Windows 95, 98, NT,
Me, 2000, and XP. Users of really early 16-bit Windows versions should
use the MSDOS NetHack.
Please note that "NetHack for Windows - Graphical Interface" requires
an installation of Internet Explorer 4 or an installation of
version 4.71 of the common controls. See the following internet page:
http://www.nethack.org/v340/ports/download-win.html#cc
for more information. If the game runs for you, you are not affected.
New players should be sure to read GuideBook.txt which contains
essential information about playing NetHack. It can be found in the
same directory as your NetHack executable.
The NetHack for Windows port supports some additional or enhanced
commands as well as some defaults.nh file options specific to
configuration choices used during the building of NetHack for
Windows. Listed below are those commands and defaults.nh file
options.
Some options are applicable only to the "Graphical Interface."
These are discussed separately in their own section.
Contents
1. ALT Key Combinations
2. Boolean options - Option that you can toggle on or off
3. Graphical Interface - Options you can assign a value to
4. Graphical Interface - Additional/Enhanced Commands
5. Graphical Interface - Menus
6. Numeric Keypad (for number_pad mode)
1. ALT Key Combinations
----------------------------------------------
The non-graphical (tty) interface always operates in "NetHack mode",
while the "NetHack for Windows - Graphical Interface" lets you
toggle the mode. In non-NetHack mode, all ALT-key combinations
are sent to the Windows itself, rather than to NetHack.
While playing in NetHack mode you can press the ALT key in
combination with another key to execute an extended command
as an alternative method to pressing a # key sequence.
The available commands are:
Alt-2 #twoweapon - toggle two-weapon combat (unavailable
if number_pad mode is set)
Alt-a #adjust - adjust inventory letters.
Alt-c #chat - talk to someone or something.
Alt-d #dip - dip an object into something.
Alt-e #enhance - enhance your skill with a weapon.
Alt-f #force - force a lock.
Alt-i #invoke - invoke an object's powers.
Alt-j #jump - jump to a location.
Alt-l #loot - loot a box on the floor.
Alt-m #monster - use a monster's special ability.
Alt-n #name - name an item or type of object.
Alt-o #offer - offer a sacrifice to the gods.
Alt-p #pray - pray to the gods for help.
Alt-q #quit - quit the game. (Same as #quit)
Alt-r #rub - rub a lamp.
Alt-s #sit - sit down.
Alt-t #turn - turn undead.
Alt-u #untrap - untrap something.
Alt-v #version - list compile time options for this version of
NetHack.
Alt-w #wipe - wipe off your face.
Alt-? #? - display list of extended menu commands
2. Boolean Options (Options that can be toggled on or off)
----------------------------------------------------------
Listed here are any options not discussed in the main help, options
which may be slightly different from the main help file, and options
which may need a slightly more explanatory note:
color Use color when displaying non-tiled maps. Tiled
maps (available in the graphical port) are always
rendered in color. Default: [TRUE]
hilite_pet Using tiled graphics, displays a small heart symbol
next to your pet. Using ascii graphics, the pet is
hilited in a white background.
Default: [TRUE]
IBMgraphics Use IBM extended characters for the dungeon
Default: [TRUE]
msg_window When ^P is pressed, it shows menu in a full window.
Available only in the non-graphical (tty) version.
Default: [FALSE]
toptenwin Write top ten list to a window, as opposed to stdout.
Default in tty interface: [FALSE]
Default in graphical interface: [TRUE] (and cannot be changed)
3. Options that you assign a value to (Graphical Interface only)
----------------------------------------------------------------
"NetHack for Windows - Graphical Interface" recognizes the following
additional options, which the non-graphical (tty) version will
silently ignore. These are options that specify attributes of various
windows. The windows that you can tailor include menu windows (such
as the inventory list), text windows (such as "It is written in the
book of ..." screens), the message window (where events of the game are
displayed), the status window (where your character name
and attributes are displayed), and the map window (where the map
is drawn).
Window Alignment options:
align_message Specifies at which side of the NetHack screen the
message window is aligned. This option can be used
to align the window to "top" or "bottom".
Default: [TOP]
align_status Specifies at which side of the NetHack screen the
status window is aligned. This option can be used
to align the window to "top" or "bottom".
Default: [BOTTOM]
Map Window options:
map_mode Specifies which map mode to use.
The following map modes are available:
tiles (display things on the map with colored tiles),
ascii4x6, ascii6x8, ascii8x8, ascii16x8, ascii7x12,
ascii8x12, ascii16x12, ascii12x16, ascii10x18
(which use that size font to display things on
the map), or fit_to_screen (an ascii mode which
forces things to fit on a single screen).
Default: [tiles]
scroll_margin Specifies the number of map cells from the edge
of the map window where scrolling will take place.
Default: [5]
tile_file An alternative file containing bitmap to use for
tiles. This file should be a .bmp file and should
be organized as 40 rectangular tiles wide. It is
beyond the scope of this document to describe the
exact contents of each tile in the .bmp, which must
match the object lists used when building NetHack.
tile_height Used with tile_file to specify the height of each
tile in pixels. This option may only be specified
in the defaults.nh config file.
Default: [16]
tile_width Used with tile_file to specify the width of each
tile in pixels. This option may only be specified
in the defaults.nh config file.
Default: [16]
Other Window options:
windowcolors Specifies the colors for various windows
This option may only be specified in the
defaults.nh config file and has the following
format:
window-type foreground/background
Notes:
- Both foreground and background colors are
required, and a slash must separate them.
- "window-type" is either "message" or "status"
(Short forms are: "msg" or "sts").
- "foreground" and "background" may be specified as
a color name (such as "blue"), or by a six
digit hexadecimal RGB color value (such as
"#8F8F8F")
- The following color names are available:
black, red, green, brown, blue, magenta,
cyan, gray (or grey), orange, brightgreen,
yellow, brightblue, brightmagenta, brightcyan,
white, trueblack, purple, silver, maroon, fuchsia,
lime, olive, navy, teal, aqua. In addition, you
can use the following names to refer to default
Windows settings: activeborder, activecaption,
appworkspace, background, btnface, btnshadow, btntext,
captiontext, graytext, highlight, highlighttext,
inactiveborder, inactivecaption, menu, menutext,
scrollbar, window, windowframe, windowtext.
Example:
OPTIONS=windowcolors:sts #00FF80/blue msg menutext/menu
font_menu Specifies the name of the menu font.
font_message Specifies the name of the message font.
font_status Specifies the name of the status font.
font_text Specifies the name of the text font.
font_size_menu Specifies the size of the menu font.
font_size_message
Specifies the size of the message font.
font_size_status
Specifies the size of the status font.
font_size_text Specifies the size of the text font.
Miscellaneous options:
vary_msgcount Number of lines to display in message window.
4. NetHack for Windows - Graphical Interface, Additional/Enhanced Commands
-------------------------------------------------------------------------
The following function keys are active in
the "NetHack for Windows - Graphical Interface":
F4 Toggle level overview mode on/off
This key will toggle the map between a view that
is mapped to fit exactly to the window, and the
view that shows the various symbols in their
normal size. This is useful for getting an idea
of where you are in a level.
F5 Toggle tiled display on/off.
This key switches between the tiled and the
traditional ASCII display. This is equivalent to
using the "map_mode" option.
F10 Activate menu bar.
This key will activate the menu bar, allowing you
to select between the menus: File, Map,
Window Settings, and Help.
5. Graphical Port Menus
-----------------------
File
Save - Allows you to save and exit the game
Quit - Allows you to quit the game
Map - Provides for selection of map mode. Equivalent to using
the map_mode option.
Window Settings - Changes your logged-on user's settings for NetHack.
In 3.5.0, only one setting is available: NetHack mode, which can be
checked or unchecked. NetHack mode allows you to use the ALT key for
game key commands [see list above]. You can use F10 to access the
menu bar while in NetHack mode. You can also clear your logged-on
user's settings for NetHack. Settings in this window are saved in
your logged-on user's registry.
Help - Provides help about various portions of NetHack.
6. Numeric Keypad (for "OPTION=number_pad" mode)
------------------------------------------------
The numeric keypad and surrounding characters act as macros for different
commands in NetHack. The Num Lock should be toggled to "on" to make the
most of these keys:
Key Normal Shift-Key
---------- ---------- -------------
1, 2, 3, 4 Move In Run In
6, 7, 8, 9 Direction Direction
0 (Ins) Inventory Categorized
Inventory
. (Del) Wait Turn : - Look Here
+ Spell List P - Put on an
accessory
- m - Move Previous
Only Message
NetHack for Windows - tty Interface Specific Behavior:
------------------------------------------------------
In the non-graphical (tty) interface, when you use the Ctrl key with a
directional key (1, 2, 3, 4, 6, 7, 8, 9) it means "go in specified
direction until you hit a wall or run into something interesting."
NetHack for Windows - Graphical Interface Specific Behavior:
------------------------------------------------------------
It is possible to scroll or pan the map in a specific direction:
Ctrl-Shift-Left (4) Scroll (Pan) map left
Ctrl-Shift-Right (6) Scroll (Pan) map right
Ctrl-Shift-Up (8) Scroll (Pan) map up
Ctrl-Shift-Down (2) Scroll (Pan) map down
Ctrl-Shift-Home (7) Scroll (Pan) map left to leftmost corner
Ctrl-Shift-End (1) Scroll (Pan) map left to rightmost corner
Ctrl-Shift-PgUp (9) Scroll (Pan) map left to uppermost corner
Ctrl-Shift-PgDn (3) Scroll (Pan) map left to lowermost corner

View File

@@ -0,0 +1,15 @@
/*
* Use this stub to insert a needed pragma prior
* to compiling $(PDCWINCON)\pdcscrn.c in the
* PDCurses distribution.
*
* We don't want to ask NetHack builders to
* modify the PDCurses distribution in any way,
* we only ask that they have the original intact
* PDCurses source tree available during the build.
*
*/
#pragma warning(disable : 4996)
#include "pdcscrn.c"

193
sys/windows/stubs.c Normal file
View File

@@ -0,0 +1,193 @@
/* NetHack 3.7 stubs.c $NHDT-Date: 1596498317 2020/08/03 23:45:17 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.31 $ */
/* Copyright (c) 2015 by Michael Allison */
/* NetHack may be freely redistributed. See license for details. */
#include "win32api.h"
#include "hack.h"
#ifdef GUISTUB
#ifdef TTYSTUB
#error You cannot compile this with both GUISTUB and TTYSTUB defined.
#endif
int GUILaunched;
struct window_procs mswin_procs = { "-guistubs" };
#ifdef QT_GRAPHICS
struct window_procs Qt_procs = { "-guistubs" };
int qt_tilewidth, qt_tileheight, qt_fontsize, qt_compact_mode;
#endif
void
mswin_destroy_reg(void)
{
return;
}
void
mswin_raw_print_flush(void)
{
}
void
mswin_raw_print(const char *str)
{
}
/* MINGW32 has trouble with both a main() and WinMain()
* so we move main for the MINGW tty version into this stub
* so that it is out of sight for the gui linkage.
*/
#ifdef __MINGW32__
extern char default_window_sys[];
extern int mingw_main(int argc, char **argv);
int
main(int argc, char *argv[])
{
boolean resuming;
resuming = mingw_main(argc, argv);
nethack_exit(EXIT_SUCCESS);
/*NOTREACHED*/
return 0;
}
#endif
#endif /* GUISTUB */
/* =============================================== */
#ifdef TTYSTUB
HANDLE hConIn;
HANDLE hConOut;
int GUILaunched;
struct window_procs tty_procs = { "-ttystubs" };
#ifdef CURSES_GRAPHICS
char erase_char, kill_char;
#endif
void
win_tty_init(int dir)
{
return;
}
void
consoletty_open(int mode)
{
return;
}
int
xputc(int ch)
{
return 0;
}
void
xputs(const char *s)
{
return;
}
void
raw_clear_screen(void)
{
return;
}
void
clear_screen(void)
{
return;
}
void
backsp(void)
{
return;
}
#ifndef NO_MOUSE_ALLOWED
void
toggle_mouse_support(void)
{
return;
}
#endif
#ifdef PORT_DEBUG
void
win32con_debug_keystrokes(void)
{
return;
}
void
win32con_handler_info(void)
{
return;
}
#endif
void
map_subkeyvalue(char *op)
{
return;
}
/* this is used as a printf() replacement when the window
* system isn't initialized yet
*/
void msmsg
VA_DECL(const char *, fmt)
{
VA_START(fmt);
VA_INIT(fmt, const char *);
VA_END();
return;
}
/*VARARGS1*/
void consoletty_error
VA_DECL(const char *, s)
{
VA_START(s);
VA_INIT(s, const char *);
VA_END();
return;
}
#ifdef TTY_GRAPHICS
void
synch_cursor(void)
{
return;
}
#endif
void
more(void)
{
return;
}
void
nethack_enter_consoletty(void)
{
return;
}
void
set_altkeyhandler(const char *inName)
{
return;
}
#if defined(USER_SOUNDS) && defined(TTY_SOUND_ESCCODES)
void
play_usersound_via_idx(int idx, int volume)
{
}
#endif /* USER_SOUNDS && TTY_SOUND_ESCCODES */
#endif /* TTYSTUBS */

View File

@@ -0,0 +1,117 @@
#
# NetHack 3.7 sysconf $NHDT-Date: 1524689357 2018/04/25 20:49:17 $ $NHDT-Branch: NetHack-3.7.0 $:$NHDT-Revision: 1.22 $
# Copyright (c) 2015 by Michael Allison
# NetHack may be freely redistributed. See license for details.
#
# Sample sysconf file.
# The sysconf file is only used if NetHack is compiled with SYSCF defined.
# This file uses the same syntax as nethack.cf.
# Which users can use WIZARD (debugging) mode (the -D flag).
# A value of * allows anyone to enter debugging mode.
WIZARDS=*
# Users allowed to use the ! (shell escape) command or to suspend the game.
# Uses the same syntax as the WIZARDS option above.
#SHELLERS=
# Show debugging information originating from these source files.
# Use '*' for all, or list source files separated by spaces.
# Only available if game has been compiled with DEBUG.
#DEBUGFILES=*
# Save end of game dump log to this file.
# Only available if NetHack was compiled with DUMPLOG
# Allows following placeholders:
# %% literal '%'
# %v version (eg. "3.7.0-0")
# %u game UID
# %t game start time, UNIX timestamp format
# %T current time, UNIX timestamp format
# %d game start time, YYYYMMDDhhmmss format
# %D current time, YYYYMMDDhhmmss format
# %n player name
# %N first character of player name
#DUMPLOGFILE=nethack-%n-%d.log
# Number of bones file pools.
# The pool you belong to is determined at game start. You will
# load and save bones only from that pool. Generally useful
# for public servers only.
# Changing this might make existing bones inaccessible.
# Disabled by setting to 0, or commenting out.
#BONES_POOLS=10
# Limit the number of simultaneous games (see also nethack.sh).
#MAXPLAYERS=10
# If not null, added to string "To get local support, " in the support
# information help.
#SUPPORT=call Izchak at extension 42.
# Uncomment the next line to disable the SEDUCE option.
#SEDUCE=0
# Uncomment the next line to enable some accessibility features such
# as S_hero_override and S_pet_override symbols for screen readers
# in the user config file.
#ACCESSIBILITY=1
# Record (high score) file options.
# CAUTION: changing these after people have started playing games can
# lead to lost high scores!
# Maximum entries for one person.
#PERSMAX=10
# Maximum entries in the record file.
#ENTRYMAX=100
# Minimum points to get an entry.
#POINTSMIN=1
# Determine identity of "person" in the score file with name (0) or
# numeric (1) user id.
#PERS_IS_UID=1
# Maximum number of score file entries to use for random statue names
#MAX_STATUENAME_RANK=10
# 'portable_device_paths' is only supported for Windows. Starting with
# 3.6.3, nethack on Windows treats the folder containing nethack.exe and
# nethackW.exe as read-only and puts data files which are generated or
# modified during play or by the user in assorted folders derived from
# user name. 3.6.4 added PORTABLE_DEVICE_PATHS to allow reverting to
# the old behavior of having the run-time configuration file and other
# data in the same directory as the executable so that the whole thing
# can be moved from one machine to another (flash drive or perhaps cloud)
# without updating folder paths. Uncomment it and set to 1 to activate.
#PORTABLE_DEVICE_PATHS=0
# *** LOCATIONS ***
# IMPORTANT: If you change any of these locations, the directories they
# point at must exist. NetHack will not create them for you.
#
# Before adjusting, you can verify the default locations for files with:
# nethack --showpaths
#
# The location that users can adjust their config file startup options
#CONFIGDIR=%USERPROFILE%\NetHack
#
# The location that a record of game aborts and self-diagnosed game problems
# is kept (default=HACKDIR, writeable)
#TROUBLEDIR=%USERPROFILE%\NetHack\3.7
#
# The location that documentation and helps files are placed
#HACKDIR=%USERPROFILE%\NetHack\3.7
#
# The location that level files in progress are stored (writeable)
#LEVELDIR=%USERPROFILE%\AppData\Local\NetHack\3.7
#
# The location where saved games are kept (writeable)
#SAVEDIR=%USERPROFILE%\AppData\Local\NetHack\3.7
#
# The location that bones files are kept (writeable)
#BONESDIR=c:\ProgramData\NetHack\3.7
#
# The location that score files are kept (writeable)
#SCOREDIR=c:\ProgramData\NetHack\3.7
#
# The location that file synchronization locks are stored (writeable)
#LOCKDIR=c:\ProgramData\NetHack\3.7

View File

@@ -0,0 +1,8 @@
set -x
mkdir -p lib
cd lib
git clone --depth 1 https://github.com/wmcbrine/PDCurses.git pdcurses
#git clone --depth 1 https://github.com/universal-ctags/ctags.git ctags
curl -R -O http://www.lua.org/ftp/lua-5.4.3.tar.gz
tar zxf lua-5.4.3.tar.gz
cd ../

1
sys/windows/vs/.gitattributes vendored Normal file
View File

@@ -0,0 +1 @@
* NH_filestag=(file%s_for_Visual_Studio_2017_or_2019_Community_Edition_builds)

17
sys/windows/vs/.gitignore vendored Normal file
View File

@@ -0,0 +1,17 @@
!NetHack.sln
*.db-shm
*.db-wal
paniclog
_pkginfo.txt
AppPackages
BundleArtifacts
report.xml
*.cer
*.appxbundle
NetHackPackage_StoreKey.pfx
NetHackPackage_TemporaryKey.pfx
NetHackPackage.assets.cache
NetHackPackage.wapproj.user
NetHackPackage/obj/
NetHackW.vcxproj.user
obj/

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 370 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 520 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 770 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 954 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 667 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

195
sys/windows/vs/NetHack.sln Normal file
View File

@@ -0,0 +1,195 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26730.12
MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NetHackW", "NetHackW\NetHackW.vcxproj", "{CEC5D360-8804-454F-8591-002184C23499}"
ProjectSection(ProjectDependencies) = postProject
{93F10526-209E-41D7-BBEA-775787876895} = {93F10526-209E-41D7-BBEA-775787876895}
{63F9B82B-F589-4082-ABE5-D4F0682050AB} = {63F9B82B-F589-4082-ABE5-D4F0682050AB}
{BA3DD34C-04B7-40D0-B373-9329AA9E8945} = {BA3DD34C-04B7-40D0-B373-9329AA9E8945}
{642BC75D-ABAF-403E-8224-7C725FD4CB42} = {642BC75D-ABAF-403E-8224-7C725FD4CB42}
{0303A585-3F83-4BB7-AF6B-1E12C8FB54AC} = {0303A585-3F83-4BB7-AF6B-1E12C8FB54AC}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "dlb", "dlb\dlb.vcxproj", "{0303A585-3F83-4BB7-AF6B-1E12C8FB54AC}"
ProjectSection(ProjectDependencies) = postProject
{63F9B82B-F589-4082-ABE5-D4F0682050AB} = {63F9B82B-F589-4082-ABE5-D4F0682050AB}
{BA3DD34C-04B7-40D0-B373-9329AA9E8945} = {BA3DD34C-04B7-40D0-B373-9329AA9E8945}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "makedefs", "makedefs\makedefs.vcxproj", "{BA3DD34C-04B7-40D0-B373-9329AA9E8945}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "recover", "recover\recover.vcxproj", "{2F35F228-6733-4FE5-9B46-B3AA10D4BC2E}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tile2bmp", "tile2bmp\tile2bmp.vcxproj", "{642BC75D-ABAF-403E-8224-7C725FD4CB42}"
ProjectSection(ProjectDependencies) = postProject
{BA3DD34C-04B7-40D0-B373-9329AA9E8945} = {BA3DD34C-04B7-40D0-B373-9329AA9E8945}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tilemap", "tilemap\tilemap.vcxproj", "{93F10526-209E-41D7-BBEA-775787876895}"
ProjectSection(ProjectDependencies) = postProject
{BA3DD34C-04B7-40D0-B373-9329AA9E8945} = {BA3DD34C-04B7-40D0-B373-9329AA9E8945}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "uudecode", "uudecode\uudecode.vcxproj", "{63F9B82B-F589-4082-ABE5-D4F0682050AB}"
ProjectSection(ProjectDependencies) = postProject
{BA3DD34C-04B7-40D0-B373-9329AA9E8945} = {BA3DD34C-04B7-40D0-B373-9329AA9E8945}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NetHack", "NetHack\NetHack.vcxproj", "{609BC774-C6F8-4B2B-AA7D-5B3D0EA95751}"
ProjectSection(ProjectDependencies) = postProject
{63F9B82B-F589-4082-ABE5-D4F0682050AB} = {63F9B82B-F589-4082-ABE5-D4F0682050AB}
{BA3DD34C-04B7-40D0-B373-9329AA9E8945} = {BA3DD34C-04B7-40D0-B373-9329AA9E8945}
{6813477F-64B6-4B97-B230-438D0D233385} = {6813477F-64B6-4B97-B230-438D0D233385}
{0303A585-3F83-4BB7-AF6B-1E12C8FB54AC} = {0303A585-3F83-4BB7-AF6B-1E12C8FB54AC}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nhdefkey", "nhdefkey\nhdefkey.vcxproj", "{6813477F-64B6-4B97-B230-438D0D233385}"
ProjectSection(ProjectDependencies) = postProject
{BA3DD34C-04B7-40D0-B373-9329AA9E8945} = {BA3DD34C-04B7-40D0-B373-9329AA9E8945}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nh340key", "nh340key\nh340key.vcxproj", "{BE04E242-A1E9-4593-B95B-057F37330B76}"
ProjectSection(ProjectDependencies) = postProject
{BA3DD34C-04B7-40D0-B373-9329AA9E8945} = {BA3DD34C-04B7-40D0-B373-9329AA9E8945}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nhraykey", "nhraykey\nhraykey.vcxproj", "{2E1F4BB3-3BD7-43AD-8E64-D3B8A2F5D7B2}"
ProjectSection(ProjectDependencies) = postProject
{BA3DD34C-04B7-40D0-B373-9329AA9E8945} = {BA3DD34C-04B7-40D0-B373-9329AA9E8945}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PDCurses", "PDCurses\PDCurses.vcxproj", "{BAA70D0F-3EC7-4D10-91F0-974F1F49308B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{477BF231-48E0-4312-AA12-9D8576215489}"
ProjectSection(SolutionItems) = preProject
NetHackProperties.props = NetHackProperties.props
EndProjectSection
EndProject
Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "NetHackPackage", "NetHackPackage.wapproj", "{6838EC9D-F25D-4779-9CD7-2EDB61E49429}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
Release|Win32 = Release|Win32
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{CEC5D360-8804-454F-8591-002184C23499}.Debug|Win32.ActiveCfg = Debug|Win32
{CEC5D360-8804-454F-8591-002184C23499}.Debug|Win32.Build.0 = Debug|Win32
{CEC5D360-8804-454F-8591-002184C23499}.Debug|x64.ActiveCfg = Debug|x64
{CEC5D360-8804-454F-8591-002184C23499}.Debug|x64.Build.0 = Debug|x64
{CEC5D360-8804-454F-8591-002184C23499}.Release|Win32.ActiveCfg = Release|Win32
{CEC5D360-8804-454F-8591-002184C23499}.Release|Win32.Build.0 = Release|Win32
{CEC5D360-8804-454F-8591-002184C23499}.Release|x64.ActiveCfg = Release|x64
{CEC5D360-8804-454F-8591-002184C23499}.Release|x64.Build.0 = Release|x64
{0303A585-3F83-4BB7-AF6B-1E12C8FB54AC}.Debug|Win32.ActiveCfg = Debug|Win32
{0303A585-3F83-4BB7-AF6B-1E12C8FB54AC}.Debug|Win32.Build.0 = Debug|Win32
{0303A585-3F83-4BB7-AF6B-1E12C8FB54AC}.Debug|x64.ActiveCfg = Debug|x64
{0303A585-3F83-4BB7-AF6B-1E12C8FB54AC}.Debug|x64.Build.0 = Debug|x64
{0303A585-3F83-4BB7-AF6B-1E12C8FB54AC}.Release|Win32.ActiveCfg = Release|Win32
{0303A585-3F83-4BB7-AF6B-1E12C8FB54AC}.Release|Win32.Build.0 = Release|Win32
{0303A585-3F83-4BB7-AF6B-1E12C8FB54AC}.Release|x64.ActiveCfg = Release|x64
{0303A585-3F83-4BB7-AF6B-1E12C8FB54AC}.Release|x64.Build.0 = Release|x64
{BA3DD34C-04B7-40D0-B373-9329AA9E8945}.Debug|Win32.ActiveCfg = Debug|Win32
{BA3DD34C-04B7-40D0-B373-9329AA9E8945}.Debug|Win32.Build.0 = Debug|Win32
{BA3DD34C-04B7-40D0-B373-9329AA9E8945}.Debug|x64.ActiveCfg = Debug|x64
{BA3DD34C-04B7-40D0-B373-9329AA9E8945}.Debug|x64.Build.0 = Debug|x64
{BA3DD34C-04B7-40D0-B373-9329AA9E8945}.Release|Win32.ActiveCfg = Release|Win32
{BA3DD34C-04B7-40D0-B373-9329AA9E8945}.Release|Win32.Build.0 = Release|Win32
{BA3DD34C-04B7-40D0-B373-9329AA9E8945}.Release|x64.ActiveCfg = Release|x64
{BA3DD34C-04B7-40D0-B373-9329AA9E8945}.Release|x64.Build.0 = Release|x64
{2F35F228-6733-4FE5-9B46-B3AA10D4BC2E}.Debug|Win32.ActiveCfg = Debug|Win32
{2F35F228-6733-4FE5-9B46-B3AA10D4BC2E}.Debug|Win32.Build.0 = Debug|Win32
{2F35F228-6733-4FE5-9B46-B3AA10D4BC2E}.Debug|x64.ActiveCfg = Debug|x64
{2F35F228-6733-4FE5-9B46-B3AA10D4BC2E}.Debug|x64.Build.0 = Debug|x64
{2F35F228-6733-4FE5-9B46-B3AA10D4BC2E}.Release|Win32.ActiveCfg = Release|Win32
{2F35F228-6733-4FE5-9B46-B3AA10D4BC2E}.Release|Win32.Build.0 = Release|Win32
{2F35F228-6733-4FE5-9B46-B3AA10D4BC2E}.Release|x64.ActiveCfg = Release|x64
{2F35F228-6733-4FE5-9B46-B3AA10D4BC2E}.Release|x64.Build.0 = Release|x64
{642BC75D-ABAF-403E-8224-7C725FD4CB42}.Debug|Win32.ActiveCfg = Debug|Win32
{642BC75D-ABAF-403E-8224-7C725FD4CB42}.Debug|Win32.Build.0 = Debug|Win32
{642BC75D-ABAF-403E-8224-7C725FD4CB42}.Debug|x64.ActiveCfg = Debug|x64
{642BC75D-ABAF-403E-8224-7C725FD4CB42}.Debug|x64.Build.0 = Debug|x64
{642BC75D-ABAF-403E-8224-7C725FD4CB42}.Release|Win32.ActiveCfg = Release|Win32
{642BC75D-ABAF-403E-8224-7C725FD4CB42}.Release|Win32.Build.0 = Release|Win32
{642BC75D-ABAF-403E-8224-7C725FD4CB42}.Release|x64.ActiveCfg = Release|x64
{642BC75D-ABAF-403E-8224-7C725FD4CB42}.Release|x64.Build.0 = Release|x64
{93F10526-209E-41D7-BBEA-775787876895}.Debug|Win32.ActiveCfg = Debug|Win32
{93F10526-209E-41D7-BBEA-775787876895}.Debug|Win32.Build.0 = Debug|Win32
{93F10526-209E-41D7-BBEA-775787876895}.Debug|x64.ActiveCfg = Debug|x64
{93F10526-209E-41D7-BBEA-775787876895}.Debug|x64.Build.0 = Debug|x64
{93F10526-209E-41D7-BBEA-775787876895}.Release|Win32.ActiveCfg = Release|Win32
{93F10526-209E-41D7-BBEA-775787876895}.Release|Win32.Build.0 = Release|Win32
{93F10526-209E-41D7-BBEA-775787876895}.Release|x64.ActiveCfg = Release|x64
{93F10526-209E-41D7-BBEA-775787876895}.Release|x64.Build.0 = Release|x64
{63F9B82B-F589-4082-ABE5-D4F0682050AB}.Debug|Win32.ActiveCfg = Debug|Win32
{63F9B82B-F589-4082-ABE5-D4F0682050AB}.Debug|Win32.Build.0 = Debug|Win32
{63F9B82B-F589-4082-ABE5-D4F0682050AB}.Debug|x64.ActiveCfg = Debug|x64
{63F9B82B-F589-4082-ABE5-D4F0682050AB}.Debug|x64.Build.0 = Debug|x64
{63F9B82B-F589-4082-ABE5-D4F0682050AB}.Release|Win32.ActiveCfg = Release|Win32
{63F9B82B-F589-4082-ABE5-D4F0682050AB}.Release|Win32.Build.0 = Release|Win32
{63F9B82B-F589-4082-ABE5-D4F0682050AB}.Release|x64.ActiveCfg = Release|x64
{63F9B82B-F589-4082-ABE5-D4F0682050AB}.Release|x64.Build.0 = Release|x64
{609BC774-C6F8-4B2B-AA7D-5B3D0EA95751}.Debug|Win32.ActiveCfg = Debug|Win32
{609BC774-C6F8-4B2B-AA7D-5B3D0EA95751}.Debug|Win32.Build.0 = Debug|Win32
{609BC774-C6F8-4B2B-AA7D-5B3D0EA95751}.Debug|x64.ActiveCfg = Debug|x64
{609BC774-C6F8-4B2B-AA7D-5B3D0EA95751}.Debug|x64.Build.0 = Debug|x64
{609BC774-C6F8-4B2B-AA7D-5B3D0EA95751}.Release|Win32.ActiveCfg = Release|Win32
{609BC774-C6F8-4B2B-AA7D-5B3D0EA95751}.Release|Win32.Build.0 = Release|Win32
{609BC774-C6F8-4B2B-AA7D-5B3D0EA95751}.Release|x64.ActiveCfg = Release|x64
{609BC774-C6F8-4B2B-AA7D-5B3D0EA95751}.Release|x64.Build.0 = Release|x64
{6813477F-64B6-4B97-B230-438D0D233385}.Debug|Win32.ActiveCfg = Debug|Win32
{6813477F-64B6-4B97-B230-438D0D233385}.Debug|Win32.Build.0 = Debug|Win32
{6813477F-64B6-4B97-B230-438D0D233385}.Debug|x64.ActiveCfg = Debug|x64
{6813477F-64B6-4B97-B230-438D0D233385}.Debug|x64.Build.0 = Debug|x64
{6813477F-64B6-4B97-B230-438D0D233385}.Release|Win32.ActiveCfg = Release|Win32
{6813477F-64B6-4B97-B230-438D0D233385}.Release|Win32.Build.0 = Release|Win32
{6813477F-64B6-4B97-B230-438D0D233385}.Release|x64.ActiveCfg = Release|x64
{6813477F-64B6-4B97-B230-438D0D233385}.Release|x64.Build.0 = Release|x64
{BE04E242-A1E9-4593-B95B-057F37330B76}.Debug|Win32.ActiveCfg = Debug|Win32
{BE04E242-A1E9-4593-B95B-057F37330B76}.Debug|Win32.Build.0 = Debug|Win32
{BE04E242-A1E9-4593-B95B-057F37330B76}.Debug|x64.ActiveCfg = Debug|x64
{BE04E242-A1E9-4593-B95B-057F37330B76}.Debug|x64.Build.0 = Debug|x64
{BE04E242-A1E9-4593-B95B-057F37330B76}.Release|Win32.ActiveCfg = Release|Win32
{BE04E242-A1E9-4593-B95B-057F37330B76}.Release|Win32.Build.0 = Release|Win32
{BE04E242-A1E9-4593-B95B-057F37330B76}.Release|x64.ActiveCfg = Release|x64
{BE04E242-A1E9-4593-B95B-057F37330B76}.Release|x64.Build.0 = Release|x64
{2E1F4BB3-3BD7-43AD-8E64-D3B8A2F5D7B2}.Debug|Win32.ActiveCfg = Debug|Win32
{2E1F4BB3-3BD7-43AD-8E64-D3B8A2F5D7B2}.Debug|Win32.Build.0 = Debug|Win32
{2E1F4BB3-3BD7-43AD-8E64-D3B8A2F5D7B2}.Debug|x64.ActiveCfg = Debug|x64
{2E1F4BB3-3BD7-43AD-8E64-D3B8A2F5D7B2}.Debug|x64.Build.0 = Debug|x64
{2E1F4BB3-3BD7-43AD-8E64-D3B8A2F5D7B2}.Release|Win32.ActiveCfg = Release|Win32
{2E1F4BB3-3BD7-43AD-8E64-D3B8A2F5D7B2}.Release|Win32.Build.0 = Release|Win32
{2E1F4BB3-3BD7-43AD-8E64-D3B8A2F5D7B2}.Release|x64.ActiveCfg = Release|x64
{2E1F4BB3-3BD7-43AD-8E64-D3B8A2F5D7B2}.Release|x64.Build.0 = Release|x64
{BAA70D0F-3EC7-4D10-91F0-974F1F49308B}.Debug|Win32.ActiveCfg = Debug|Win32
{BAA70D0F-3EC7-4D10-91F0-974F1F49308B}.Debug|Win32.Build.0 = Debug|Win32
{BAA70D0F-3EC7-4D10-91F0-974F1F49308B}.Debug|x64.ActiveCfg = Debug|x64
{BAA70D0F-3EC7-4D10-91F0-974F1F49308B}.Debug|x64.Build.0 = Debug|x64
{BAA70D0F-3EC7-4D10-91F0-974F1F49308B}.Release|Win32.ActiveCfg = Release|Win32
{BAA70D0F-3EC7-4D10-91F0-974F1F49308B}.Release|Win32.Build.0 = Release|Win32
{BAA70D0F-3EC7-4D10-91F0-974F1F49308B}.Release|x64.ActiveCfg = Release|x64
{BAA70D0F-3EC7-4D10-91F0-974F1F49308B}.Release|x64.Build.0 = Release|x64
{6838EC9D-F25D-4779-9CD7-2EDB61E49429}.Debug|Win32.ActiveCfg = Debug|Win32
{6838EC9D-F25D-4779-9CD7-2EDB61E49429}.Debug|Win32.Build.0 = Debug|Win32
{6838EC9D-F25D-4779-9CD7-2EDB61E49429}.Debug|Win32.Deploy.0 = Debug|Win32
{6838EC9D-F25D-4779-9CD7-2EDB61E49429}.Debug|x64.ActiveCfg = Debug|x64
{6838EC9D-F25D-4779-9CD7-2EDB61E49429}.Debug|x64.Build.0 = Debug|x64
{6838EC9D-F25D-4779-9CD7-2EDB61E49429}.Debug|x64.Deploy.0 = Debug|x64
{6838EC9D-F25D-4779-9CD7-2EDB61E49429}.Release|Win32.ActiveCfg = Release|Win32
{6838EC9D-F25D-4779-9CD7-2EDB61E49429}.Release|Win32.Build.0 = Release|Win32
{6838EC9D-F25D-4779-9CD7-2EDB61E49429}.Release|Win32.Deploy.0 = Release|Win32
{6838EC9D-F25D-4779-9CD7-2EDB61E49429}.Release|x64.ActiveCfg = Release|x64
{6838EC9D-F25D-4779-9CD7-2EDB61E49429}.Release|x64.Build.0 = Release|x64
{6838EC9D-F25D-4779-9CD7-2EDB61E49429}.Release|x64.Deploy.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {6DF8F690-552A-4329-8FAB-DD447071A473}
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1,271 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\config.props" />
<Import Project="..\dirs.props" />
<PropertyGroup Label="Globals">
<ProjectGuid>{609BC774-C6F8-4B2B-AA7D-5B3D0EA95751}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>NetHack</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="$(vsDir)default.props" />
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<Import Project="$(vsDir)NetHackProperties.props" />
<Import Project="$(vsDir)console.props" />
<Import Project="$(vsDir)common.props" />
<Import Project="$(vsDir)files.props" />
<PropertyGroup>
<OutDir>$(BinDir)</OutDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="Exists('$(PDCURSES)')">
<ClCompile>
<AdditionalIncludeDirectories>$(PDCURSES);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>CURSES_GRAPHICS;CHTYPE_32;PDC_NCMOUSE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalLibraryDirectories>$(ToolsDir)</AdditionalLibraryDirectories>
<AdditionalDependencies>PDCurses.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalOptions>/Gs /Oi- /w44774 %(AdditionalOptions)</AdditionalOptions>
<Optimization>Disabled</Optimization>
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
<OmitFramePointers>true</OmitFramePointers>
<AdditionalIncludeDirectories>$(WinWin32Dir);$(IncDir);$(SysWindDir);$(SysShareDir);$(WinShareDir);$(LuaDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>TILES;WIN32CON;DLB;MSWIN_GRAPHICS;SAFEPROCS;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;winmm.lib;Winmm.lib;bcrypt.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="@(Lua)">
<DisableSpecificWarnings>4701;4702;4244;4310;4774</DisableSpecificWarnings>
<AdditionalOptions>%(AdditionalOptions) /wd4774</AdditionalOptions>
</ClCompile>
<ClCompile Include="$(SrcDir)allmain.c" />
<ClCompile Include="$(SrcDir)alloc.c" />
<ClCompile Include="$(SrcDir)apply.c" />
<ClCompile Include="$(SrcDir)artifact.c" />
<ClCompile Include="$(SrcDir)attrib.c" />
<ClCompile Include="$(SrcDir)ball.c" />
<ClCompile Include="$(SrcDir)bones.c" />
<ClCompile Include="$(SrcDir)botl.c" />
<ClCompile Include="$(SrcDir)cmd.c" />
<ClCompile Include="$(SrcDir)dbridge.c" />
<ClCompile Include="$(SrcDir)decl.c" />
<ClCompile Include="$(SrcDir)detect.c" />
<ClCompile Include="$(SrcDir)dig.c" />
<ClCompile Include="$(SrcDir)display.c" />
<ClCompile Include="$(SrcDir)dlb.c" />
<ClCompile Include="$(SrcDir)do.c" />
<ClCompile Include="$(SrcDir)dog.c" />
<ClCompile Include="$(SrcDir)dogmove.c" />
<ClCompile Include="$(SrcDir)dokick.c" />
<ClCompile Include="$(SrcDir)dothrow.c" />
<ClCompile Include="$(SrcDir)do_name.c" />
<ClCompile Include="$(SrcDir)do_wear.c" />
<ClCompile Include="$(SrcDir)drawing.c" />
<ClCompile Include="$(SrcDir)dungeon.c" />
<ClCompile Include="$(SrcDir)eat.c" />
<ClCompile Include="$(SrcDir)end.c" />
<ClCompile Include="$(SrcDir)engrave.c" />
<ClCompile Include="$(SrcDir)exper.c" />
<ClCompile Include="$(SrcDir)explode.c" />
<ClCompile Include="$(SrcDir)extralev.c" />
<ClCompile Include="$(SrcDir)files.c" />
<ClCompile Include="$(SrcDir)fountain.c" />
<ClCompile Include="$(SrcDir)hack.c" />
<ClCompile Include="$(SrcDir)hacklib.c" />
<ClCompile Include="$(SrcDir)insight.c" />
<ClCompile Include="$(SrcDir)invent.c" />
<ClCompile Include="$(SrcDir)isaac64.c" />
<ClCompile Include="$(SrcDir)light.c" />
<ClCompile Include="$(SrcDir)lock.c" />
<ClCompile Include="$(SrcDir)mail.c" />
<ClCompile Include="$(SrcDir)makemon.c" />
<ClCompile Include="$(SrcDir)mcastu.c" />
<ClCompile Include="$(SrcDir)mdlib.c" />
<ClCompile Include="$(SrcDir)mhitm.c" />
<ClCompile Include="$(SrcDir)mhitu.c" />
<ClCompile Include="$(SrcDir)minion.c" />
<ClCompile Include="$(SrcDir)mklev.c" />
<ClCompile Include="$(SrcDir)mkmap.c" />
<ClCompile Include="$(SrcDir)mkmaze.c" />
<ClCompile Include="$(SrcDir)mkobj.c" />
<ClCompile Include="$(SrcDir)mkroom.c" />
<ClCompile Include="$(SrcDir)mon.c" />
<ClCompile Include="$(SrcDir)mondata.c" />
<ClCompile Include="$(SrcDir)monmove.c" />
<ClCompile Include="$(SrcDir)monst.c" />
<ClCompile Include="$(SrcDir)mplayer.c" />
<ClCompile Include="$(SrcDir)mthrowu.c" />
<ClCompile Include="$(SrcDir)muse.c" />
<ClCompile Include="$(SrcDir)music.c" />
<ClCompile Include="$(SrcDir)nhlobj.c" />
<ClCompile Include="$(SrcDir)nhlsel.c" />
<ClCompile Include="$(SrcDir)nhlua.c" />
<ClCompile Include="$(SrcDir)objects.c" />
<ClCompile Include="$(SrcDir)objnam.c" />
<ClCompile Include="$(SrcDir)options.c" />
<ClCompile Include="$(SrcDir)o_init.c" />
<ClCompile Include="$(SrcDir)pager.c" />
<ClCompile Include="$(SrcDir)pickup.c" />
<ClCompile Include="$(SrcDir)pline.c" />
<ClCompile Include="$(SrcDir)polyself.c" />
<ClCompile Include="$(SrcDir)potion.c" />
<ClCompile Include="$(SrcDir)pray.c" />
<ClCompile Include="$(SrcDir)priest.c" />
<ClCompile Include="$(SrcDir)quest.c" />
<ClCompile Include="$(SrcDir)questpgr.c" />
<ClCompile Include="$(SrcDir)read.c" />
<ClCompile Include="$(SrcDir)rect.c" />
<ClCompile Include="$(SrcDir)region.c" />
<ClCompile Include="$(SrcDir)restore.c" />
<ClCompile Include="$(SrcDir)rip.c" />
<ClCompile Include="$(SrcDir)rnd.c" />
<ClCompile Include="$(SrcDir)role.c" />
<ClCompile Include="$(SrcDir)rumors.c" />
<ClCompile Include="$(SrcDir)save.c" />
<ClCompile Include="$(SrcDir)sfstruct.c" />
<ClCompile Include="$(SrcDir)shk.c" />
<ClCompile Include="$(SrcDir)shknam.c" />
<ClCompile Include="$(SrcDir)sit.c" />
<ClCompile Include="$(SrcDir)sounds.c" />
<ClCompile Include="$(SrcDir)spell.c" />
<ClCompile Include="$(SrcDir)sp_lev.c" />
<ClCompile Include="$(SrcDir)steal.c" />
<ClCompile Include="$(SrcDir)steed.c" />
<ClCompile Include="$(SrcDir)symbols.c" />
<ClCompile Include="$(SrcDir)sys.c" />
<ClCompile Include="$(SrcDir)teleport.c" />
<ClCompile Include="$(SrcDir)tile.c" />
<ClCompile Include="$(SrcDir)timeout.c" />
<ClCompile Include="$(SrcDir)topten.c" />
<ClCompile Include="$(SrcDir)track.c" />
<ClCompile Include="$(SrcDir)trap.c" />
<ClCompile Include="$(SrcDir)uhitm.c" />
<ClCompile Include="$(SrcDir)u_init.c" />
<ClCompile Include="$(SrcDir)vault.c" />
<ClCompile Include="$(SrcDir)version.c" />
<ClCompile Include="$(SrcDir)vision.c" />
<ClCompile Include="$(SrcDir)weapon.c" />
<ClCompile Include="$(SrcDir)were.c" />
<ClCompile Include="$(SrcDir)wield.c" />
<ClCompile Include="$(SrcDir)windows.c" />
<ClCompile Include="$(SrcDir)wizard.c" />
<ClCompile Include="$(SrcDir)worm.c" />
<ClCompile Include="$(SrcDir)worn.c" />
<ClCompile Include="$(SrcDir)write.c" />
<ClCompile Include="$(SrcDir)zap.c" />
<ClCompile Include="$(SysShareDir)cppregex.cpp" />
<ClCompile Include="$(SysShareDir)nhlan.c" />
<ClCompile Include="$(SysShareDir)random.c" />
<ClCompile Include="$(SysWindDir)ntsound.c" />
<ClCompile Include="$(SysWindDir)consoletty.c" />
<ClCompile Include="$(SysWindDir)stubs.c">
<PreprocessorDefinitions>GUISTUB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<ClCompile Include="$(SysWindDir)windmain.c" />
<ClCompile Include="$(SysWindDir)windsys.c" />
<ClCompile Include="$(WinShareDir)safeproc.c" />
<ClCompile Include="$(WinTtyDir)getline.c" />
<ClCompile Include="$(WinTtyDir)topl.c" />
<ClCompile Include="$(WinTtyDir)wintty.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(WinCursDir)cursdial.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(WinCursDir)cursinit.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(WinCursDir)cursinvt.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(WinCursDir)cursmain.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(WinCursDir)cursmesg.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(WinCursDir)cursmisc.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(WinCursDir)cursstat.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(WinCursDir)curswins.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="$(IncDir)align.h" />
<ClInclude Include="$(IncDir)artifact.h" />
<ClInclude Include="$(IncDir)artilist.h" />
<ClInclude Include="$(IncDir)attrib.h" />
<ClInclude Include="$(IncDir)botl.h" />
<ClInclude Include="$(IncDir)color.h" />
<ClInclude Include="$(IncDir)config.h" />
<ClInclude Include="$(IncDir)config1.h" />
<ClInclude Include="$(IncDir)context.h" />
<ClInclude Include="$(IncDir)coord.h" />
<ClInclude Include="$(IncDir)date.h" />
<ClInclude Include="$(IncDir)decl.h" />
<ClInclude Include="$(IncDir)display.h" />
<ClInclude Include="$(IncDir)dlb.h" />
<ClInclude Include="$(IncDir)dungeon.h" />
<ClInclude Include="$(IncDir)engrave.h" />
<ClInclude Include="$(IncDir)extern.h" />
<ClInclude Include="$(IncDir)flag.h" />
<ClInclude Include="$(IncDir)func_tab.h" />
<ClInclude Include="$(IncDir)global.h" />
<ClInclude Include="$(IncDir)hack.h" />
<ClInclude Include="$(IncDir)isaac64.h" />
<ClInclude Include="$(IncDir)mextra.h" />
<ClInclude Include="$(IncDir)mfndpos.h" />
<ClInclude Include="$(IncDir)mkroom.h" />
<ClInclude Include="$(IncDir)monattk.h" />
<ClInclude Include="$(IncDir)mondata.h" />
<ClInclude Include="$(IncDir)monflag.h" />
<ClInclude Include="$(IncDir)monst.h" />
<ClInclude Include="$(IncDir)monsym.h" />
<ClInclude Include="$(IncDir)nhlua.h" />
<ClInclude Include="$(IncDir)windconf.h" />
<ClInclude Include="$(IncDir)obj.h" />
<ClInclude Include="$(IncDir)objclass.h" />
<ClInclude Include="$(IncDir)onames.h" />
<ClInclude Include="$(IncDir)patchlevel.h" />
<ClInclude Include="$(IncDir)permonst.h" />
<ClInclude Include="$(IncDir)pm.h" />
<ClInclude Include="$(IncDir)prop.h" />
<ClInclude Include="$(IncDir)quest.h" />
<ClInclude Include="$(IncDir)rect.h" />
<ClInclude Include="$(IncDir)region.h" />
<ClInclude Include="$(IncDir)rm.h" />
<ClInclude Include="$(IncDir)skills.h" />
<ClInclude Include="$(IncDir)spell.h" />
<ClInclude Include="$(IncDir)sp_lev.h" />
<ClInclude Include="$(IncDir)timeout.h" />
<ClInclude Include="$(IncDir)tradstdc.h" />
<ClInclude Include="$(IncDir)trap.h" />
<ClInclude Include="$(IncDir)vision.h" />
<ClInclude Include="$(IncDir)winprocs.h" />
<ClInclude Include="$(IncDir)wintty.h" />
<ClInclude Include="$(IncDir)wintype.h" />
<ClInclude Include="$(IncDir)you.h" />
<ClInclude Include="$(IncDir)youprop.h" />
<ClInclude Include="$(WinWin32Dir)nhresource.h" />
<ClInclude Include="$(WinCursDir)cursdial.h" />
<ClInclude Include="$(WinCursDir)cursinit.h" />
<ClInclude Include="$(WinCursDir)cursinvt.h" />
<ClInclude Include="$(WinCursDir)cursmesg.h" />
<ClInclude Include="$(WinCursDir)cursmisc.h" />
<ClInclude Include="$(WinCursDir)cursstat.h" />
<ClInclude Include="$(WinCursDir)curswins.h" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="$(WinWin32Dir)NetHack.rc" />
</ItemGroup>
<ItemGroup>
<Image Include="$(WinWin32Dir)nethack.ico" />
</ItemGroup>
<ItemGroup>
<None Include="cpp.hint" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<Target Name="AfterBuild">
<MSBuild Projects="afternethack.proj" Targets="Build" Properties="Configuration=$(Configuration)" />
</Target>
<Target Name="AfterClean">
<MSBuild Projects="afternethack.proj" Targets="Clean" Properties="Configuration=$(Configuration)" />
</Target>
<Target Name="AfterRebuild">
<MSBuild Projects="afternethack.proj" Targets="Build" Properties="Configuration=$(Configuration)" />
</Target>
</Project>

View File

@@ -0,0 +1,13 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\dirs.props" />
<!-- TODO not copying record -->
<Target Name="Build"
Inputs="$(SysWindDir).nethackrc.template;$(DocDir)Guidebook.txt;$(DatDir)license;$(SysWindDir)sysconf.template;$(DocDir)nethack.txt;$(DatDir)symbols;$(WinWin32Dir)record;$(DatDir)opthelp"
Outputs="$(BinDir).nethackrc.template;$(BinDir)Guidebook.txt;$(BinDir)license;$(BinDir)sysconf.template;$(BinDir)symbols.template;$(BinDir)record;$(BinDir)opthelp">
<Copy SourceFiles="$(SysWindDir).nethackrc.template;$(DocDir)Guidebook.txt;$(DatDir)license;$(SysWindDir)sysconf.template;$(DocDir)nethack.txt;$(DatDir)symbols;$(WinWin32Dir)record;$(DatDir)opthelp"
DestinationFiles="$(BinDir).nethackrc.template;$(BinDir)Guidebook.txt;$(BinDir)license;$(BinDir)sysconf.template;$(BinDir)nethack.txt;$(BinDir)symbols.template;$(BinDir)record;$(BinDir)opthelp" />
</Target>
<Target Name="Clean">
<Delete Files="$(BinDir).nethackrc.template;$(BinDir)Guidebook.txt;$(BinDir)license;$(BinDir)sysconf.template;$(BinDir)nethack.txt;$(BinDir)symbols.template;$(BinDir)record;$(BinDir)opthelp"/>
</Target>
</Project>

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" IgnorableNamespaces="uap mp rescap">
<Identity Name="30485NetHackDevTeam.NetHack3.6" Publisher="CN=8BDC628A-FAAA-4EBA-8B5B-EB61BA93BA1F" Version="363.0.28.0" />
<Properties>
<DisplayName>NetHack 3.7</DisplayName>
<PublisherDisplayName>NetHack DevTeam</PublisherDisplayName>
<Logo>Images\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.14393.0" MaxVersionTested="10.0.14393.0" />
</Dependencies>
<Resources>
<Resource Language="x-generate" />
</Resources>
<Applications>
<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="$targetentrypoint$">
<uap:VisualElements DisplayName="NetHack 3.7" Description="NetHack 3.7" BackgroundColor="transparent" Square150x150Logo="Images\Square150x150Logo.png" Square44x44Logo="Images\Square44x44Logo.png">
<uap:DefaultTile Wide310x150Logo="Images\Wide310x150Logo.png" Square310x310Logo="Images\LargeTile.png" Square71x71Logo="Images\SmallTile.png">
</uap:DefaultTile>
<uap:SplashScreen Image="Images\SplashScreen.png" />
</uap:VisualElements>
</Application>
</Applications>
<Capabilities>
<Capability Name="internetClient" />
<rescap:Capability Name="runFullTrust" />
</Capabilities>
</Package>

View File

@@ -0,0 +1,144 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '15.0'">
<VisualStudioVersion>15.0</VisualStudioVersion>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup>
<WapProjPath Condition="'$(WapProjPath)'==''">$(MSBuildExtensionsPath)\Microsoft\DesktopBridge\</WapProjPath>
</PropertyGroup>
<Import Project="$(WapProjPath)\Microsoft.DesktopBridge.props" />
<Import Project="NetHackProperties.props" />
<PropertyGroup>
<OutDir>$(BinDir)</OutDir>
</PropertyGroup>
<PropertyGroup>
<ProjectGuid>6838ec9d-f25d-4779-9cd7-2edb61e49429</ProjectGuid>
<TargetPlatformVersion>10.0.17763.0</TargetPlatformVersion>
<TargetPlatformMinVersion>10.0.15063.0</TargetPlatformMinVersion>
<DefaultLanguage>en-US</DefaultLanguage>
<PackageCertificateKeyFile>NetHackPackage_StoreKey.pfx</PackageCertificateKeyFile>
<EntryPointProjectUniqueName>NetHackW\NetHackW.vcxproj</EntryPointProjectUniqueName>
<PackageCertificateThumbprint>19591BE8832D6EFED75019EACE7C4CA42ABC90D4</PackageCertificateThumbprint>
<GenerateAppInstallerFile>False</GenerateAppInstallerFile>
<AppxAutoIncrementPackageRevision>True</AppxAutoIncrementPackageRevision>
<AppxBundlePlatforms>x86</AppxBundlePlatforms>
<AppInstallerUpdateFrequency>1</AppInstallerUpdateFrequency>
<AppInstallerCheckForUpdateFrequency>OnApplicationRun</AppInstallerCheckForUpdateFrequency>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<ItemGroup>
<AppxManifest Include="NetHackPackage.appxmanifest">
<SubType>Designer</SubType>
</AppxManifest>
<None Include="NetHackPackage_TemporaryKey.pfx" />
</ItemGroup>
<ItemGroup>
<Content Include="Images\BadgeLogo.scale-100.png" />
<Content Include="Images\BadgeLogo.scale-125.png" />
<Content Include="Images\BadgeLogo.scale-150.png" />
<Content Include="Images\BadgeLogo.scale-200.png" />
<Content Include="Images\BadgeLogo.scale-400.png" />
<Content Include="Images\LargeTile.scale-100.png" />
<Content Include="Images\LargeTile.scale-125.png" />
<Content Include="Images\LargeTile.scale-150.png" />
<Content Include="Images\LargeTile.scale-200.png" />
<Content Include="Images\LargeTile.scale-400.png" />
<Content Include="Images\LockScreenLogo.scale-200.png" />
<Content Include="Images\SmallTile.scale-100.png" />
<Content Include="Images\SmallTile.scale-125.png" />
<Content Include="Images\SmallTile.scale-150.png" />
<Content Include="Images\SmallTile.scale-200.png" />
<Content Include="Images\SmallTile.scale-400.png" />
<Content Include="Images\SplashScreen.scale-100.png" />
<Content Include="Images\SplashScreen.scale-125.png" />
<Content Include="Images\SplashScreen.scale-150.png" />
<Content Include="Images\SplashScreen.scale-200.png" />
<Content Include="Images\SplashScreen.scale-400.png" />
<Content Include="Images\Square150x150Logo.scale-100.png" />
<Content Include="Images\Square150x150Logo.scale-125.png" />
<Content Include="Images\Square150x150Logo.scale-150.png" />
<Content Include="Images\Square150x150Logo.scale-200.png" />
<Content Include="Images\Square150x150Logo.scale-400.png" />
<Content Include="Images\Square44x44Logo.altform-unplated_targetsize-16.png" />
<Content Include="Images\Square44x44Logo.altform-unplated_targetsize-256.png" />
<Content Include="Images\Square44x44Logo.altform-unplated_targetsize-32.png" />
<Content Include="Images\Square44x44Logo.altform-unplated_targetsize-48.png" />
<Content Include="Images\Square44x44Logo.scale-100.png" />
<Content Include="Images\Square44x44Logo.scale-125.png" />
<Content Include="Images\Square44x44Logo.scale-150.png" />
<Content Include="Images\Square44x44Logo.scale-200.png" />
<Content Include="Images\Square44x44Logo.scale-400.png" />
<Content Include="Images\Square44x44Logo.targetsize-16.png" />
<Content Include="Images\Square44x44Logo.targetsize-24.png" />
<Content Include="Images\Square44x44Logo.targetsize-24_altform-unplated.png" />
<Content Include="Images\Square44x44Logo.targetsize-256.png" />
<Content Include="Images\Square44x44Logo.targetsize-32.png" />
<Content Include="Images\Square44x44Logo.targetsize-48.png" />
<Content Include="Images\StoreLogo.scale-100.png" />
<Content Include="Images\StoreLogo.scale-125.png" />
<Content Include="Images\StoreLogo.scale-150.png" />
<Content Include="Images\StoreLogo.scale-200.png" />
<Content Include="Images\StoreLogo.scale-400.png" />
<Content Include="Images\Wide310x150Logo.scale-100.png" />
<Content Include="Images\Wide310x150Logo.scale-125.png" />
<Content Include="Images\Wide310x150Logo.scale-150.png" />
<Content Include="Images\Wide310x150Logo.scale-200.png" />
<Content Include="..\..\..\binary\$(Configuration)\$(Platform)\.nethackrc.template">
<Link>NetHackW\.nethackrc.template</Link>
</Content>
<Content Include="..\..\..\binary\$(Configuration)\$(Platform)\Guidebook.txt">
<Link>NetHackW\Guidebook.txt</Link>
</Content>
<Content Include="..\..\..\binary\$(Configuration)\$(Platform)\license">
<Link>NetHackW\license</Link>
</Content>
<Content Include="..\..\..\binary\$(Configuration)\$(Platform)\nhdat$(VERSION_MAJOR)$(VERSION_MINOR)$(PATCHLEVEL)">
<Link>NetHackW\nhdat$(VERSION_MAJOR)$(VERSION_MINOR)$(PATCHLEVEL)</Link>
</Content>
<Content Include="..\..\..\binary\$(Configuration)\$(Platform)\opthelp">
<Link>NetHackW\opthelp</Link>
</Content>
<Content Include="..\..\..\binary\$(Configuration)\$(Platform)\symbols.template">
<Link>NetHackW\symbols.template</Link>
</Content>
<Content Include="..\..\..\binary\$(Configuration)\$(Platform)\sysconf.template">
<Link>NetHackW\sysconf.template</Link>
</Content>
<Content Include="Images\Wide310x150Logo.scale-400.png" />
<None Include="NetHackPackage_StoreKey.pfx" />
<None Include="Package.StoreAssociation.xml" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="NetHackW\NetHackW.vcxproj" />
</ItemGroup>
<Import Project="$(WapProjPath)\Microsoft.DesktopBridge.targets" />
</Project>

View File

@@ -0,0 +1,29 @@
<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities" IgnorableNamespaces="uap mp rescap">
<Identity Name="30485NetHackDevTeam.NetHack3.6" Publisher="CN=8BDC628A-FAAA-4EBA-8B5B-EB61BA93BA1F" Version="363.0.28.0" />
<Properties>
<DisplayName>NetHack 3.7</DisplayName>
<PublisherDisplayName>NetHack DevTeam</PublisherDisplayName>
<Logo>Images\StoreLogo.png</Logo>
</Properties>
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.14393.0" MaxVersionTested="10.0.14393.0" />
</Dependencies>
<Resources>
<Resource Language="x-generate" />
</Resources>
<Applications>
<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="$targetentrypoint$">
<uap:VisualElements DisplayName="NetHack 3.7" Description="NetHack 3.7" BackgroundColor="transparent" Square150x150Logo="Images\Square150x150Logo.png" Square44x44Logo="Images\Square44x44Logo.png">
<uap:DefaultTile Wide310x150Logo="Images\Wide310x150Logo.png" Square310x310Logo="Images\LargeTile.png" Square71x71Logo="Images\SmallTile.png">
</uap:DefaultTile>
<uap:SplashScreen Image="Images\SplashScreen.png" />
</uap:VisualElements>
</Application>
</Applications>
<Capabilities>
<Capability Name="internetClient" />
<rescap:Capability Name="runFullTrust" />
</Capabilities>
</Package>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '15.0'">
<VisualStudioVersion>15.0</VisualStudioVersion>
</PropertyGroup>
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup>
<WapProjPath Condition="'$(WapProjPath)'==''">$(MSBuildExtensionsPath)\Microsoft\DesktopBridge\</WapProjPath>
</PropertyGroup>
<Import Project="..\dirs.props" />
<Import Project="$(WapProjPath)\Microsoft.DesktopBridge.props" />
<Import Project="$(vsDir)NetHackProperties.props" />
<PropertyGroup>
<OutDir>$(BinDir)</OutDir>
</PropertyGroup>
<PropertyGroup>
<ProjectGuid>6838ec9d-f25d-4779-9cd7-2edb61e49429</ProjectGuid>
<TargetPlatformVersion>10.0.17763.0</TargetPlatformVersion>
<TargetPlatformMinVersion>10.0.15063.0</TargetPlatformMinVersion>
<DefaultLanguage>en-US</DefaultLanguage>
<PackageCertificateKeyFile>NetHackPackage_StoreKey.pfx</PackageCertificateKeyFile>
<PackageCertificateThumbprint>19591BE8832D6EFED75019EACE7C4CA42ABC90D4</PackageCertificateThumbprint>
<GenerateAppInstallerFile>False</GenerateAppInstallerFile>
<AppxAutoIncrementPackageRevision>True</AppxAutoIncrementPackageRevision>
<AppxBundlePlatforms>x86</AppxBundlePlatforms>
<AppInstallerUpdateFrequency>1</AppInstallerUpdateFrequency>
<AppInstallerCheckForUpdateFrequency>OnApplicationRun</AppInstallerCheckForUpdateFrequency>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<AppxBundle>Always</AppxBundle>
</PropertyGroup>
<ItemGroup>
<AppxManifest Include="NetHackPackage.appxmanifest">
<SubType>Designer</SubType>
</AppxManifest>
<None Include="NetHackPackage_TemporaryKey.pfx" />
</ItemGroup>
<ItemGroup>
<Content Include="$(ImageDir)BadgeLogo.scale-100.png" />
<Content Include="$(ImageDir)BadgeLogo.scale-125.png" />
<Content Include="$(ImageDir)BadgeLogo.scale-150.png" />
<Content Include="$(ImageDir)BadgeLogo.scale-200.png" />
<Content Include="$(ImageDir)BadgeLogo.scale-400.png" />
<Content Include="$(ImageDir)LargeTile.scale-100.png" />
<Content Include="$(ImageDir)LargeTile.scale-125.png" />
<Content Include="$(ImageDir)LargeTile.scale-150.png" />
<Content Include="$(ImageDir)LargeTile.scale-200.png" />
<Content Include="$(ImageDir)LargeTile.scale-400.png" />
<Content Include="$(ImageDir)LockScreenLogo.scale-200.png" />
<Content Include="$(ImageDir)SmallTile.scale-100.png" />
<Content Include="$(ImageDir)SmallTile.scale-125.png" />
<Content Include="$(ImageDir)SmallTile.scale-150.png" />
<Content Include="$(ImageDir)SmallTile.scale-200.png" />
<Content Include="$(ImageDir)SmallTile.scale-400.png" />
<Content Include="$(ImageDir)SplashScreen.scale-100.png" />
<Content Include="$(ImageDir)SplashScreen.scale-125.png" />
<Content Include="$(ImageDir)SplashScreen.scale-150.png" />
<Content Include="$(ImageDir)SplashScreen.scale-200.png" />
<Content Include="$(ImageDir)SplashScreen.scale-400.png" />
<Content Include="$(ImageDir)Square150x150Logo.scale-100.png" />
<Content Include="$(ImageDir)Square150x150Logo.scale-125.png" />
<Content Include="$(ImageDir)Square150x150Logo.scale-150.png" />
<Content Include="$(ImageDir)Square150x150Logo.scale-200.png" />
<Content Include="$(ImageDir)Square150x150Logo.scale-400.png" />
<Content Include="$(ImageDir)Square44x44Logo.altform-unplated_targetsize-16.png" />
<Content Include="$(ImageDir)Square44x44Logo.altform-unplated_targetsize-256.png" />
<Content Include="$(ImageDir)Square44x44Logo.altform-unplated_targetsize-32.png" />
<Content Include="$(ImageDir)Square44x44Logo.altform-unplated_targetsize-48.png" />
<Content Include="$(ImageDir)Square44x44Logo.scale-100.png" />
<Content Include="$(ImageDir)Square44x44Logo.scale-125.png" />
<Content Include="$(ImageDir)Square44x44Logo.scale-150.png" />
<Content Include="$(ImageDir)Square44x44Logo.scale-200.png" />
<Content Include="$(ImageDir)Square44x44Logo.scale-400.png" />
<Content Include="$(ImageDir)Square44x44Logo.targetsize-16.png" />
<Content Include="$(ImageDir)Square44x44Logo.targetsize-24.png" />
<Content Include="$(ImageDir)Square44x44Logo.targetsize-24_altform-unplated.png" />
<Content Include="$(ImageDir)Square44x44Logo.targetsize-256.png" />
<Content Include="$(ImageDir)Square44x44Logo.targetsize-32.png" />
<Content Include="$(ImageDir)Square44x44Logo.targetsize-48.png" />
<Content Include="$(ImageDir)StoreLogo.scale-100.png" />
<Content Include="$(ImageDir)StoreLogo.scale-125.png" />
<Content Include="$(ImageDir)StoreLogo.scale-150.png" />
<Content Include="$(ImageDir)StoreLogo.scale-200.png" />
<Content Include="$(ImageDir)StoreLogo.scale-400.png" />
<Content Include="$(ImageDir)Wide310x150Logo.scale-100.png" />
<Content Include="$(ImageDir)Wide310x150Logo.scale-125.png" />
<Content Include="$(ImageDir)Wide310x150Logo.scale-150.png" />
<Content Include="$(ImageDir)Wide310x150Logo.scale-200.png" />
<Content Include="$(BinDir).nethackrc.template">
<Link>$(vsDir)NetHackW\.nethackrc.template</Link>
</Content>
<Content Include="$(BinDir)Guidebook.txt">
<Link>$(vsDir)NetHackW\Guidebook.txt</Link>
</Content>
<Content Include="$(BinDir)license">
<Link>$(vsDir)NetHackW\license</Link>
</Content>
<Content Include="$(BinDir)nhdat$(VERSION_MAJOR)$(VERSION_MINOR)$(PATCHLEVEL)">
<Link>$(vsDir)NetHackW\nhdat$(VERSION_MAJOR)$(VERSION_MINOR)$(PATCHLEVEL)</Link>
</Content>
<Content Include="$(BinDir)opthelp">
<Link>$(vsDir)NetHackW\opthelp</Link>
</Content>
<Content Include="$(BinDir)symbols.template">
<Link>$(vsDir)NetHackW\symbols.template</Link>
</Content>
<Content Include="$(BinDir)sysconf.template">
<Link>$(vsDir)NetHackW\sysconf.template</Link>
</Content>
<Content Include="$(ImageDir)Wide310x150Logo.scale-400.png" />
<None Include="NetHackPackage_StoreKey.pfx" />
<None Include="Package.StoreAssociation.xml" />
</ItemGroup>
<Import Project="$(WapProjPath)\Microsoft.DesktopBridge.targets" />
</Project>

View File

@@ -0,0 +1,373 @@
<?xml version="1.0" encoding="utf-8"?>
<StoreAssociation xmlns="http://schemas.microsoft.com/appx/2010/storeassociation">
<Publisher>CN=8BDC628A-FAAA-4EBA-8B5B-EB61BA93BA1F</Publisher>
<PublisherDisplayName>NetHack DevTeam</PublisherDisplayName>
<DeveloperAccountType>AAD</DeveloperAccountType>
<GeneratePackageHash>http://www.w3.org/2001/04/xmlenc#sha256</GeneratePackageHash>
<SupportedLocales>
<Language Code="af" InMinimumRequirementSet="true" />
<Language Code="af-za" InMinimumRequirementSet="true" />
<Language Code="am" InMinimumRequirementSet="true" />
<Language Code="am-et" InMinimumRequirementSet="true" />
<Language Code="ar" InMinimumRequirementSet="true" />
<Language Code="ar-ae" InMinimumRequirementSet="true" />
<Language Code="ar-bh" InMinimumRequirementSet="true" />
<Language Code="ar-dz" InMinimumRequirementSet="true" />
<Language Code="ar-eg" InMinimumRequirementSet="true" />
<Language Code="ar-iq" InMinimumRequirementSet="true" />
<Language Code="ar-jo" InMinimumRequirementSet="true" />
<Language Code="ar-kw" InMinimumRequirementSet="true" />
<Language Code="ar-lb" InMinimumRequirementSet="true" />
<Language Code="ar-ly" InMinimumRequirementSet="true" />
<Language Code="ar-ma" InMinimumRequirementSet="true" />
<Language Code="ar-om" InMinimumRequirementSet="true" />
<Language Code="ar-qa" InMinimumRequirementSet="true" />
<Language Code="ar-sa" InMinimumRequirementSet="true" />
<Language Code="ar-sy" InMinimumRequirementSet="true" />
<Language Code="ar-tn" InMinimumRequirementSet="true" />
<Language Code="ar-ye" InMinimumRequirementSet="true" />
<Language Code="as" InMinimumRequirementSet="true" />
<Language Code="as-in" InMinimumRequirementSet="true" />
<Language Code="az" InMinimumRequirementSet="true" />
<Language Code="az-arab" InMinimumRequirementSet="true" />
<Language Code="az-arab-az" InMinimumRequirementSet="true" />
<Language Code="az-cyrl" InMinimumRequirementSet="true" />
<Language Code="az-cyrl-az" InMinimumRequirementSet="true" />
<Language Code="az-latn" InMinimumRequirementSet="true" />
<Language Code="az-latn-az" InMinimumRequirementSet="true" />
<Language Code="be" InMinimumRequirementSet="true" />
<Language Code="be-by" InMinimumRequirementSet="true" />
<Language Code="bg" InMinimumRequirementSet="true" />
<Language Code="bg-bg" InMinimumRequirementSet="true" />
<Language Code="bn" InMinimumRequirementSet="true" />
<Language Code="bn-bd" InMinimumRequirementSet="true" />
<Language Code="bn-in" InMinimumRequirementSet="true" />
<Language Code="bs" InMinimumRequirementSet="true" />
<Language Code="bs-cyrl" InMinimumRequirementSet="true" />
<Language Code="bs-cyrl-ba" InMinimumRequirementSet="true" />
<Language Code="bs-latn" InMinimumRequirementSet="true" />
<Language Code="bs-latn-ba" InMinimumRequirementSet="true" />
<Language Code="ca" InMinimumRequirementSet="true" />
<Language Code="ca-es" InMinimumRequirementSet="true" />
<Language Code="ca-es-valencia" InMinimumRequirementSet="true" />
<Language Code="chr-cher" InMinimumRequirementSet="true" />
<Language Code="chr-cher-us" InMinimumRequirementSet="true" />
<Language Code="chr-latn" InMinimumRequirementSet="true" />
<Language Code="cs" InMinimumRequirementSet="true" />
<Language Code="cs-cz" InMinimumRequirementSet="true" />
<Language Code="cy" InMinimumRequirementSet="true" />
<Language Code="cy-gb" InMinimumRequirementSet="true" />
<Language Code="da" InMinimumRequirementSet="true" />
<Language Code="da-dk" InMinimumRequirementSet="true" />
<Language Code="de" InMinimumRequirementSet="true" />
<Language Code="de-at" InMinimumRequirementSet="true" />
<Language Code="de-ch" InMinimumRequirementSet="true" />
<Language Code="de-de" InMinimumRequirementSet="true" />
<Language Code="de-li" InMinimumRequirementSet="true" />
<Language Code="de-lu" InMinimumRequirementSet="true" />
<Language Code="el" InMinimumRequirementSet="true" />
<Language Code="el-gr" InMinimumRequirementSet="true" />
<Language Code="en" InMinimumRequirementSet="true" />
<Language Code="en-011" InMinimumRequirementSet="true" />
<Language Code="en-014" InMinimumRequirementSet="true" />
<Language Code="en-018" InMinimumRequirementSet="true" />
<Language Code="en-021" InMinimumRequirementSet="true" />
<Language Code="en-029" InMinimumRequirementSet="true" />
<Language Code="en-053" InMinimumRequirementSet="true" />
<Language Code="en-au" InMinimumRequirementSet="true" />
<Language Code="en-bz" InMinimumRequirementSet="true" />
<Language Code="en-ca" InMinimumRequirementSet="true" />
<Language Code="en-gb" InMinimumRequirementSet="true" />
<Language Code="en-hk" InMinimumRequirementSet="true" />
<Language Code="en-id" InMinimumRequirementSet="true" />
<Language Code="en-ie" InMinimumRequirementSet="true" />
<Language Code="en-in" InMinimumRequirementSet="true" />
<Language Code="en-jm" InMinimumRequirementSet="true" />
<Language Code="en-kz" InMinimumRequirementSet="true" />
<Language Code="en-mt" InMinimumRequirementSet="true" />
<Language Code="en-my" InMinimumRequirementSet="true" />
<Language Code="en-nz" InMinimumRequirementSet="true" />
<Language Code="en-ph" InMinimumRequirementSet="true" />
<Language Code="en-pk" InMinimumRequirementSet="true" />
<Language Code="en-sg" InMinimumRequirementSet="true" />
<Language Code="en-tt" InMinimumRequirementSet="true" />
<Language Code="en-us" InMinimumRequirementSet="true" />
<Language Code="en-vn" InMinimumRequirementSet="true" />
<Language Code="en-za" InMinimumRequirementSet="true" />
<Language Code="en-zw" InMinimumRequirementSet="true" />
<Language Code="es" InMinimumRequirementSet="true" />
<Language Code="es-019" InMinimumRequirementSet="true" />
<Language Code="es-419" InMinimumRequirementSet="true" />
<Language Code="es-ar" InMinimumRequirementSet="true" />
<Language Code="es-bo" InMinimumRequirementSet="true" />
<Language Code="es-cl" InMinimumRequirementSet="true" />
<Language Code="es-co" InMinimumRequirementSet="true" />
<Language Code="es-cr" InMinimumRequirementSet="true" />
<Language Code="es-do" InMinimumRequirementSet="true" />
<Language Code="es-ec" InMinimumRequirementSet="true" />
<Language Code="es-es" InMinimumRequirementSet="true" />
<Language Code="es-gt" InMinimumRequirementSet="true" />
<Language Code="es-hn" InMinimumRequirementSet="true" />
<Language Code="es-mx" InMinimumRequirementSet="true" />
<Language Code="es-ni" InMinimumRequirementSet="true" />
<Language Code="es-pa" InMinimumRequirementSet="true" />
<Language Code="es-pe" InMinimumRequirementSet="true" />
<Language Code="es-pr" InMinimumRequirementSet="true" />
<Language Code="es-py" InMinimumRequirementSet="true" />
<Language Code="es-sv" InMinimumRequirementSet="true" />
<Language Code="es-us" InMinimumRequirementSet="true" />
<Language Code="es-uy" InMinimumRequirementSet="true" />
<Language Code="es-ve" InMinimumRequirementSet="true" />
<Language Code="et" InMinimumRequirementSet="true" />
<Language Code="et-ee" InMinimumRequirementSet="true" />
<Language Code="eu" InMinimumRequirementSet="true" />
<Language Code="eu-es" InMinimumRequirementSet="true" />
<Language Code="fa" InMinimumRequirementSet="true" />
<Language Code="fa-ir" InMinimumRequirementSet="true" />
<Language Code="fi" InMinimumRequirementSet="true" />
<Language Code="fi-fi" InMinimumRequirementSet="true" />
<Language Code="fil" InMinimumRequirementSet="true" />
<Language Code="fil-latn" InMinimumRequirementSet="true" />
<Language Code="fil-ph" InMinimumRequirementSet="true" />
<Language Code="fr" InMinimumRequirementSet="true" />
<Language Code="fr-011" InMinimumRequirementSet="true" />
<Language Code="fr-015" InMinimumRequirementSet="true" />
<Language Code="fr-021" InMinimumRequirementSet="true" />
<Language Code="fr-029" InMinimumRequirementSet="true" />
<Language Code="fr-155" InMinimumRequirementSet="true" />
<Language Code="fr-be" InMinimumRequirementSet="true" />
<Language Code="fr-ca" InMinimumRequirementSet="true" />
<Language Code="fr-cd" InMinimumRequirementSet="true" />
<Language Code="fr-ch" InMinimumRequirementSet="true" />
<Language Code="fr-ci" InMinimumRequirementSet="true" />
<Language Code="fr-cm" InMinimumRequirementSet="true" />
<Language Code="fr-fr" InMinimumRequirementSet="true" />
<Language Code="fr-ht" InMinimumRequirementSet="true" />
<Language Code="fr-lu" InMinimumRequirementSet="true" />
<Language Code="fr-ma" InMinimumRequirementSet="true" />
<Language Code="fr-mc" InMinimumRequirementSet="true" />
<Language Code="fr-ml" InMinimumRequirementSet="true" />
<Language Code="fr-re" InMinimumRequirementSet="true" />
<Language Code="frc-latn" InMinimumRequirementSet="true" />
<Language Code="frp-latn" InMinimumRequirementSet="true" />
<Language Code="ga" InMinimumRequirementSet="true" />
<Language Code="ga-ie" InMinimumRequirementSet="true" />
<Language Code="gd-gb" InMinimumRequirementSet="true" />
<Language Code="gd-latn" InMinimumRequirementSet="true" />
<Language Code="gl" InMinimumRequirementSet="true" />
<Language Code="gl-es" InMinimumRequirementSet="true" />
<Language Code="gu" InMinimumRequirementSet="true" />
<Language Code="gu-in" InMinimumRequirementSet="true" />
<Language Code="ha" InMinimumRequirementSet="true" />
<Language Code="ha-latn" InMinimumRequirementSet="true" />
<Language Code="ha-latn-ng" InMinimumRequirementSet="true" />
<Language Code="he" InMinimumRequirementSet="true" />
<Language Code="he-il" InMinimumRequirementSet="true" />
<Language Code="hi" InMinimumRequirementSet="true" />
<Language Code="hi-in" InMinimumRequirementSet="true" />
<Language Code="hr" InMinimumRequirementSet="true" />
<Language Code="hr-ba" InMinimumRequirementSet="true" />
<Language Code="hr-hr" InMinimumRequirementSet="true" />
<Language Code="hu" InMinimumRequirementSet="true" />
<Language Code="hu-hu" InMinimumRequirementSet="true" />
<Language Code="hy" InMinimumRequirementSet="true" />
<Language Code="hy-am" InMinimumRequirementSet="true" />
<Language Code="id" InMinimumRequirementSet="true" />
<Language Code="id-id" InMinimumRequirementSet="true" />
<Language Code="ig-latn" InMinimumRequirementSet="true" />
<Language Code="ig-ng" InMinimumRequirementSet="true" />
<Language Code="is" InMinimumRequirementSet="true" />
<Language Code="is-is" InMinimumRequirementSet="true" />
<Language Code="it" InMinimumRequirementSet="true" />
<Language Code="it-ch" InMinimumRequirementSet="true" />
<Language Code="it-it" InMinimumRequirementSet="true" />
<Language Code="iu-cans" InMinimumRequirementSet="true" />
<Language Code="iu-latn" InMinimumRequirementSet="true" />
<Language Code="iu-latn-ca" InMinimumRequirementSet="true" />
<Language Code="ja" InMinimumRequirementSet="true" />
<Language Code="ja-jp" InMinimumRequirementSet="true" />
<Language Code="ka" InMinimumRequirementSet="true" />
<Language Code="ka-ge" InMinimumRequirementSet="true" />
<Language Code="kk" InMinimumRequirementSet="true" />
<Language Code="kk-kz" InMinimumRequirementSet="true" />
<Language Code="km" InMinimumRequirementSet="true" />
<Language Code="km-kh" InMinimumRequirementSet="true" />
<Language Code="kn" InMinimumRequirementSet="true" />
<Language Code="kn-in" InMinimumRequirementSet="true" />
<Language Code="ko" InMinimumRequirementSet="true" />
<Language Code="ko-kr" InMinimumRequirementSet="true" />
<Language Code="kok" InMinimumRequirementSet="true" />
<Language Code="kok-in" InMinimumRequirementSet="true" />
<Language Code="ku-arab" InMinimumRequirementSet="true" />
<Language Code="ku-arab-iq" InMinimumRequirementSet="true" />
<Language Code="ky-cyrl" InMinimumRequirementSet="true" />
<Language Code="ky-kg" InMinimumRequirementSet="true" />
<Language Code="lb" InMinimumRequirementSet="true" />
<Language Code="lb-lu" InMinimumRequirementSet="true" />
<Language Code="lo" InMinimumRequirementSet="true" />
<Language Code="lo-la" InMinimumRequirementSet="true" />
<Language Code="lt" InMinimumRequirementSet="true" />
<Language Code="lt-lt" InMinimumRequirementSet="true" />
<Language Code="lv" InMinimumRequirementSet="true" />
<Language Code="lv-lv" InMinimumRequirementSet="true" />
<Language Code="mi" InMinimumRequirementSet="true" />
<Language Code="mi-latn" InMinimumRequirementSet="true" />
<Language Code="mi-nz" InMinimumRequirementSet="true" />
<Language Code="mk" InMinimumRequirementSet="true" />
<Language Code="mk-mk" InMinimumRequirementSet="true" />
<Language Code="ml" InMinimumRequirementSet="true" />
<Language Code="ml-in" InMinimumRequirementSet="true" />
<Language Code="mn-cyrl" InMinimumRequirementSet="true" />
<Language Code="mn-mn" InMinimumRequirementSet="true" />
<Language Code="mn-mong" InMinimumRequirementSet="true" />
<Language Code="mn-phag" InMinimumRequirementSet="true" />
<Language Code="mr" InMinimumRequirementSet="true" />
<Language Code="mr-in" InMinimumRequirementSet="true" />
<Language Code="ms" InMinimumRequirementSet="true" />
<Language Code="ms-bn" InMinimumRequirementSet="true" />
<Language Code="ms-my" InMinimumRequirementSet="true" />
<Language Code="mt" InMinimumRequirementSet="true" />
<Language Code="mt-mt" InMinimumRequirementSet="true" />
<Language Code="nb" InMinimumRequirementSet="true" />
<Language Code="nb-no" InMinimumRequirementSet="true" />
<Language Code="ne" InMinimumRequirementSet="true" />
<Language Code="ne-np" InMinimumRequirementSet="true" />
<Language Code="nl" InMinimumRequirementSet="true" />
<Language Code="nl-be" InMinimumRequirementSet="true" />
<Language Code="nl-nl" InMinimumRequirementSet="true" />
<Language Code="nn" InMinimumRequirementSet="true" />
<Language Code="nn-no" InMinimumRequirementSet="true" />
<Language Code="no" InMinimumRequirementSet="true" />
<Language Code="no-no" InMinimumRequirementSet="true" />
<Language Code="nso" InMinimumRequirementSet="true" />
<Language Code="nso-za" InMinimumRequirementSet="true" />
<Language Code="om" InMinimumRequirementSet="false" />
<Language Code="om-et" InMinimumRequirementSet="false" />
<Language Code="or" InMinimumRequirementSet="true" />
<Language Code="or-in" InMinimumRequirementSet="true" />
<Language Code="pa" InMinimumRequirementSet="true" />
<Language Code="pa-arab" InMinimumRequirementSet="true" />
<Language Code="pa-arab-pk" InMinimumRequirementSet="true" />
<Language Code="pa-deva" InMinimumRequirementSet="true" />
<Language Code="pa-in" InMinimumRequirementSet="true" />
<Language Code="pl" InMinimumRequirementSet="true" />
<Language Code="pl-pl" InMinimumRequirementSet="true" />
<Language Code="prs" InMinimumRequirementSet="true" />
<Language Code="prs-af" InMinimumRequirementSet="true" />
<Language Code="prs-arab" InMinimumRequirementSet="true" />
<Language Code="pt" InMinimumRequirementSet="true" />
<Language Code="pt-br" InMinimumRequirementSet="true" />
<Language Code="pt-pt" InMinimumRequirementSet="true" />
<Language Code="quc-latn" InMinimumRequirementSet="true" />
<Language Code="qut-gt" InMinimumRequirementSet="true" />
<Language Code="qut-latn" InMinimumRequirementSet="true" />
<Language Code="quz" InMinimumRequirementSet="true" />
<Language Code="quz-bo" InMinimumRequirementSet="true" />
<Language Code="quz-ec" InMinimumRequirementSet="true" />
<Language Code="quz-pe" InMinimumRequirementSet="true" />
<Language Code="ro" InMinimumRequirementSet="true" />
<Language Code="ro-ro" InMinimumRequirementSet="true" />
<Language Code="ru" InMinimumRequirementSet="true" />
<Language Code="ru-ru" InMinimumRequirementSet="true" />
<Language Code="rw" InMinimumRequirementSet="true" />
<Language Code="rw-rw" InMinimumRequirementSet="true" />
<Language Code="sd-arab" InMinimumRequirementSet="true" />
<Language Code="sd-arab-pk" InMinimumRequirementSet="true" />
<Language Code="sd-deva" InMinimumRequirementSet="true" />
<Language Code="si" InMinimumRequirementSet="true" />
<Language Code="si-lk" InMinimumRequirementSet="true" />
<Language Code="sk" InMinimumRequirementSet="true" />
<Language Code="sk-sk" InMinimumRequirementSet="true" />
<Language Code="sl" InMinimumRequirementSet="true" />
<Language Code="sl-si" InMinimumRequirementSet="true" />
<Language Code="sq" InMinimumRequirementSet="true" />
<Language Code="sq-al" InMinimumRequirementSet="true" />
<Language Code="sr" InMinimumRequirementSet="true" />
<Language Code="sr-cyrl" InMinimumRequirementSet="true" />
<Language Code="sr-cyrl-ba" InMinimumRequirementSet="true" />
<Language Code="sr-cyrl-cs" InMinimumRequirementSet="true" />
<Language Code="sr-cyrl-me" InMinimumRequirementSet="true" />
<Language Code="sr-cyrl-rs" InMinimumRequirementSet="true" />
<Language Code="sr-latn" InMinimumRequirementSet="true" />
<Language Code="sr-latn-ba" InMinimumRequirementSet="true" />
<Language Code="sr-latn-cs" InMinimumRequirementSet="true" />
<Language Code="sr-latn-me" InMinimumRequirementSet="true" />
<Language Code="sr-latn-rs" InMinimumRequirementSet="true" />
<Language Code="sv" InMinimumRequirementSet="true" />
<Language Code="sv-fi" InMinimumRequirementSet="true" />
<Language Code="sv-se" InMinimumRequirementSet="true" />
<Language Code="sw" InMinimumRequirementSet="true" />
<Language Code="sw-ke" InMinimumRequirementSet="true" />
<Language Code="ta" InMinimumRequirementSet="true" />
<Language Code="ta-in" InMinimumRequirementSet="true" />
<Language Code="te" InMinimumRequirementSet="true" />
<Language Code="te-in" InMinimumRequirementSet="true" />
<Language Code="tg-arab" InMinimumRequirementSet="true" />
<Language Code="tg-cyrl" InMinimumRequirementSet="true" />
<Language Code="tg-cyrl-tj" InMinimumRequirementSet="true" />
<Language Code="tg-latn" InMinimumRequirementSet="true" />
<Language Code="th" InMinimumRequirementSet="true" />
<Language Code="th-th" InMinimumRequirementSet="true" />
<Language Code="ti" InMinimumRequirementSet="true" />
<Language Code="ti-et" InMinimumRequirementSet="true" />
<Language Code="tk-cyrl" InMinimumRequirementSet="true" />
<Language Code="tk-cyrl-tr" InMinimumRequirementSet="true" />
<Language Code="tk-latn" InMinimumRequirementSet="true" />
<Language Code="tk-latn-tr" InMinimumRequirementSet="true" />
<Language Code="tk-tm" InMinimumRequirementSet="true" />
<Language Code="tn" InMinimumRequirementSet="true" />
<Language Code="tn-bw" InMinimumRequirementSet="true" />
<Language Code="tn-za" InMinimumRequirementSet="true" />
<Language Code="tr" InMinimumRequirementSet="true" />
<Language Code="tr-tr" InMinimumRequirementSet="true" />
<Language Code="tt-arab" InMinimumRequirementSet="true" />
<Language Code="tt-cyrl" InMinimumRequirementSet="true" />
<Language Code="tt-latn" InMinimumRequirementSet="true" />
<Language Code="tt-ru" InMinimumRequirementSet="true" />
<Language Code="ug-arab" InMinimumRequirementSet="true" />
<Language Code="ug-cn" InMinimumRequirementSet="true" />
<Language Code="ug-cyrl" InMinimumRequirementSet="true" />
<Language Code="ug-latn" InMinimumRequirementSet="true" />
<Language Code="uk" InMinimumRequirementSet="true" />
<Language Code="uk-ua" InMinimumRequirementSet="true" />
<Language Code="ur" InMinimumRequirementSet="true" />
<Language Code="ur-pk" InMinimumRequirementSet="true" />
<Language Code="uz" InMinimumRequirementSet="true" />
<Language Code="uz-cyrl" InMinimumRequirementSet="true" />
<Language Code="uz-latn" InMinimumRequirementSet="true" />
<Language Code="uz-latn-uz" InMinimumRequirementSet="true" />
<Language Code="vi" InMinimumRequirementSet="true" />
<Language Code="vi-vn" InMinimumRequirementSet="true" />
<Language Code="wo" InMinimumRequirementSet="true" />
<Language Code="wo-sn" InMinimumRequirementSet="true" />
<Language Code="xh" InMinimumRequirementSet="true" />
<Language Code="xh-za" InMinimumRequirementSet="true" />
<Language Code="yo-latn" InMinimumRequirementSet="true" />
<Language Code="yo-ng" InMinimumRequirementSet="true" />
<Language Code="zh" InMinimumRequirementSet="true" />
<Language Code="zh-cn" InMinimumRequirementSet="true" />
<Language Code="zh-hans" InMinimumRequirementSet="true" />
<Language Code="zh-hans-cn" InMinimumRequirementSet="true" />
<Language Code="zh-hans-sg" InMinimumRequirementSet="true" />
<Language Code="zh-hant" InMinimumRequirementSet="true" />
<Language Code="zh-hant-hk" InMinimumRequirementSet="true" />
<Language Code="zh-hant-mo" InMinimumRequirementSet="true" />
<Language Code="zh-hant-tw" InMinimumRequirementSet="true" />
<Language Code="zh-hk" InMinimumRequirementSet="true" />
<Language Code="zh-mo" InMinimumRequirementSet="true" />
<Language Code="zh-sg" InMinimumRequirementSet="true" />
<Language Code="zh-tw" InMinimumRequirementSet="true" />
<Language Code="zu" InMinimumRequirementSet="true" />
<Language Code="zu-za" InMinimumRequirementSet="true" />
</SupportedLocales>
<ProductReservedInfo>
<MainPackageIdentityName>30485NetHackDevTeam.NetHack3.6</MainPackageIdentityName>
<ReservedNames>
<ReservedName>NetHack 3.7</ReservedName>
</ReservedNames>
</ProductReservedInfo>
<AccountPackageIdentityNames>
<MainPackageIdentityName>30485NetHackDevTeam.NetHackBeta</MainPackageIdentityName>
</AccountPackageIdentityNames>
<PackageInfoList LandingUrl="https://developer.microsoft.com/dashboard/Application?appId=9PJ7BFSRP8M5" />
</StoreAssociation>

View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Label="PropertySheets" />
<PropertyGroup Label="UserMacros">
<VERSION_MAJOR>3</VERSION_MAJOR>
<VERSION_MINOR>7</VERSION_MINOR>
<PATCHLEVEL>0</PATCHLEVEL>
<LUA_MAJOR_VERSION>5</LUA_MAJOR_VERSION>
<LUA_MINOR_VERSION>4</LUA_MINOR_VERSION>
<LUA_PATCH_LEVEL>3></LUA_PATCH_LEVEL>
<LUA_VERSION>$(LUA_MAJOR_VERSION).$(LUA_MINOR_VERSION).$(LUA_PATCH_LEVEL)</LUA_VERSION>
<ADD_PACKAGE>true</ADD_PACKAGE>
</PropertyGroup>
<PropertyGroup />
<ItemDefinitionGroup />
<ItemGroup>
<BuildMacro Include="VERSION_MAJOR">
<Value>$(VERSION_MAJOR)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="VERSION_MINOR">
<Value>$(VERSION_MINOR)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="PATCHLEVEL">
<Value>$(PATCHLEVEL)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="LUA_VERSION">
<Value>$(LUA_VERSION)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
<BuildMacro Include="ADD_PACKAGE">
<Value>$(ADD_PACKAGE)</Value>
<EnvironmentVariable>true</EnvironmentVariable>
</BuildMacro>
</ItemGroup>
</Project>

View File

@@ -0,0 +1,308 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\config.props" />
<PropertyGroup Label="Globals">
<ProjectGuid>{CEC5D360-8804-454F-8591-002184C23499}</ProjectGuid>
<RootNamespace>NetHackW</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="..\dirs.props" />
<Import Project="$(vsDir)default.props" />
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<Import Project="$(vsDir)NetHackProperties.props" />
<Import Project="$(vsDir)common.props" />
<Import Project="$(vsDir)files.props" />
<PropertyGroup>
<OutDir>$(BinDir)</OutDir>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<AdditionalOptions>/Gs /Oi- /w44774 %(AdditionalOptions)</AdditionalOptions>
<Optimization>Disabled</Optimization>
<OmitFramePointers>true</OmitFramePointers>
<AdditionalIncludeDirectories>$(WinWin32Dir);$(IncDir);$(SysWindDir);$(SysShareDir);$(WinShareDir);$(LuaDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>TILES;_WINDOWS;DLB;MSWIN_GRAPHICS;SAFEPROCS;NOTTYGRAPHICS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<ResourceCompile>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<Culture>0x0409</Culture>
</ResourceCompile>
<Link>
<SubSystem>Windows</SubSystem>
<AdditionalDependencies>comctl32.lib;winmm.lib;bcrypt.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<Manifest>
<AdditionalManifestFiles>$(WinWin32Dir)NethackW.exe.manifest;%(AdditionalManifestFiles)</AdditionalManifestFiles>
</Manifest>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="@(Lua)">
<DisableSpecificWarnings>4701;4702;4244;4310;4774</DisableSpecificWarnings>
<AdditionalOptions>%(AdditionalOptions) /wd4774</AdditionalOptions>
</ClCompile>
<ClCompile Include="$(SrcDir)allmain.c" />
<ClCompile Include="$(SrcDir)alloc.c" />
<ClCompile Include="$(SrcDir)apply.c" />
<ClCompile Include="$(SrcDir)artifact.c" />
<ClCompile Include="$(SrcDir)attrib.c" />
<ClCompile Include="$(SrcDir)ball.c" />
<ClCompile Include="$(SrcDir)bones.c" />
<ClCompile Include="$(SrcDir)botl.c" />
<ClCompile Include="$(SrcDir)cmd.c" />
<ClCompile Include="$(SrcDir)dbridge.c" />
<ClCompile Include="$(SrcDir)decl.c" />
<ClCompile Include="$(SrcDir)detect.c" />
<ClCompile Include="$(SrcDir)dig.c" />
<ClCompile Include="$(SrcDir)display.c" />
<ClCompile Include="$(SrcDir)dlb.c" />
<ClCompile Include="$(SrcDir)do.c" />
<ClCompile Include="$(SrcDir)dog.c" />
<ClCompile Include="$(SrcDir)dogmove.c" />
<ClCompile Include="$(SrcDir)dokick.c" />
<ClCompile Include="$(SrcDir)dothrow.c" />
<ClCompile Include="$(SrcDir)do_name.c" />
<ClCompile Include="$(SrcDir)do_wear.c" />
<ClCompile Include="$(SrcDir)drawing.c" />
<ClCompile Include="$(SrcDir)dungeon.c" />
<ClCompile Include="$(SrcDir)eat.c" />
<ClCompile Include="$(SrcDir)end.c" />
<ClCompile Include="$(SrcDir)engrave.c" />
<ClCompile Include="$(SrcDir)exper.c" />
<ClCompile Include="$(SrcDir)explode.c" />
<ClCompile Include="$(SrcDir)extralev.c" />
<ClCompile Include="$(SrcDir)files.c" />
<ClCompile Include="$(SrcDir)fountain.c" />
<ClCompile Include="$(SrcDir)hack.c" />
<ClCompile Include="$(SrcDir)hacklib.c" />
<ClCompile Include="$(SrcDir)invent.c" />
<ClCompile Include="$(SrcDir)insight.c" />
<ClCompile Include="$(SrcDir)isaac64.c" />
<ClCompile Include="$(SrcDir)light.c" />
<ClCompile Include="$(SrcDir)lock.c" />
<ClCompile Include="$(SrcDir)mail.c" />
<ClCompile Include="$(SrcDir)makemon.c" />
<ClCompile Include="$(SrcDir)mcastu.c" />
<ClCompile Include="$(SrcDir)mdlib.c" />
<ClCompile Include="$(SrcDir)mhitm.c" />
<ClCompile Include="$(SrcDir)mhitu.c" />
<ClCompile Include="$(SrcDir)minion.c" />
<ClCompile Include="$(SrcDir)mklev.c" />
<ClCompile Include="$(SrcDir)mkmap.c" />
<ClCompile Include="$(SrcDir)mkmaze.c" />
<ClCompile Include="$(SrcDir)mkobj.c" />
<ClCompile Include="$(SrcDir)mkroom.c" />
<ClCompile Include="$(SrcDir)mon.c" />
<ClCompile Include="$(SrcDir)mondata.c" />
<ClCompile Include="$(SrcDir)monmove.c" />
<ClCompile Include="$(SrcDir)monst.c" />
<ClCompile Include="$(SrcDir)mplayer.c" />
<ClCompile Include="$(SrcDir)mthrowu.c" />
<ClCompile Include="$(SrcDir)muse.c" />
<ClCompile Include="$(SrcDir)music.c" />
<ClCompile Include="$(SrcDir)nhlobj.c" />
<ClCompile Include="$(SrcDir)nhlsel.c" />
<ClCompile Include="$(SrcDir)nhlua.c" />
<ClCompile Include="$(SrcDir)objects.c" />
<ClCompile Include="$(SrcDir)objnam.c" />
<ClCompile Include="$(SrcDir)options.c" />
<ClCompile Include="$(SrcDir)o_init.c" />
<ClCompile Include="$(SrcDir)pager.c" />
<ClCompile Include="$(SrcDir)pickup.c" />
<ClCompile Include="$(SrcDir)pline.c" />
<ClCompile Include="$(SrcDir)polyself.c" />
<ClCompile Include="$(SrcDir)potion.c" />
<ClCompile Include="$(SrcDir)pray.c" />
<ClCompile Include="$(SrcDir)priest.c" />
<ClCompile Include="$(SrcDir)quest.c" />
<ClCompile Include="$(SrcDir)questpgr.c" />
<ClCompile Include="$(SrcDir)read.c" />
<ClCompile Include="$(SrcDir)rect.c" />
<ClCompile Include="$(SrcDir)region.c" />
<ClCompile Include="$(SrcDir)restore.c" />
<ClCompile Include="$(SrcDir)rip.c" />
<ClCompile Include="$(SrcDir)rnd.c" />
<ClCompile Include="$(SrcDir)role.c" />
<ClCompile Include="$(SrcDir)rumors.c" />
<ClCompile Include="$(SrcDir)save.c" />
<ClCompile Include="$(SrcDir)sfstruct.c" />
<ClCompile Include="$(SrcDir)shk.c" />
<ClCompile Include="$(SrcDir)shknam.c" />
<ClCompile Include="$(SrcDir)sit.c" />
<ClCompile Include="$(SrcDir)sounds.c" />
<ClCompile Include="$(SrcDir)spell.c" />
<ClCompile Include="$(SrcDir)sp_lev.c" />
<ClCompile Include="$(SrcDir)steal.c" />
<ClCompile Include="$(SrcDir)steed.c" />
<ClCompile Include="$(SrcDir)symbols.c" />
<ClCompile Include="$(SrcDir)sys.c" />
<ClCompile Include="$(SrcDir)teleport.c" />
<ClCompile Include="$(SrcDir)tile.c" />
<ClCompile Include="$(SrcDir)timeout.c" />
<ClCompile Include="$(SrcDir)topten.c" />
<ClCompile Include="$(SrcDir)track.c" />
<ClCompile Include="$(SrcDir)trap.c" />
<ClCompile Include="$(SrcDir)uhitm.c" />
<ClCompile Include="$(SrcDir)u_init.c" />
<ClCompile Include="$(SrcDir)vault.c" />
<ClCompile Include="$(SrcDir)version.c" />
<ClCompile Include="$(SrcDir)vision.c" />
<ClCompile Include="$(SrcDir)weapon.c" />
<ClCompile Include="$(SrcDir)were.c" />
<ClCompile Include="$(SrcDir)wield.c" />
<ClCompile Include="$(SrcDir)windows.c" />
<ClCompile Include="$(SrcDir)wizard.c" />
<ClCompile Include="$(SrcDir)worm.c" />
<ClCompile Include="$(SrcDir)worn.c" />
<ClCompile Include="$(SrcDir)write.c" />
<ClCompile Include="$(SrcDir)zap.c" />
<ClCompile Include="$(SysShareDir)cppregex.cpp" />
<ClCompile Include="$(SysShareDir)nhlan.c" />
<ClCompile Include="$(SysShareDir)random.c" />
<ClCompile Include="$(SysWindDir)ntsound.c" />
<ClCompile Include="$(SysWindDir)stubs.c">
<PreprocessorDefinitions>TTYSTUB;</PreprocessorDefinitions>
</ClCompile>
<ClCompile Include="$(SysWindDir)windmain.c" />
<ClCompile Include="$(SysWindDir)windsys.c" />
<ClCompile Include="$(SysWindDir)win10.c" />
<ClCompile Include="$(WinShareDir)safeproc.c" />
<ClCompile Include="$(WinWin32Dir)mhaskyn.c" />
<ClCompile Include="$(WinWin32Dir)mhdlg.c" />
<ClCompile Include="$(WinWin32Dir)mhfont.c" />
<ClCompile Include="$(WinWin32Dir)mhinput.c" />
<ClCompile Include="$(WinWin32Dir)mhmain.c" />
<ClCompile Include="$(WinWin32Dir)mhmap.c" />
<ClCompile Include="$(WinWin32Dir)mhmenu.c" />
<ClCompile Include="$(WinWin32Dir)mhmsgwnd.c" />
<ClCompile Include="$(WinWin32Dir)mhrip.c" />
<ClCompile Include="$(WinWin32Dir)mhsplash.c" />
<ClCompile Include="$(WinWin32Dir)mhstatus.c" />
<ClCompile Include="$(WinWin32Dir)mhtext.c" />
<ClCompile Include="$(WinWin32Dir)mswproc.c" />
<ClCompile Include="$(WinWin32Dir)NetHackW.c" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="$(WinWin32Dir)NetHackW.rc" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="$(WinWin32Dir)mhaskyn.h" />
<ClInclude Include="$(WinWin32Dir)mhdlg.h" />
<ClInclude Include="$(WinWin32Dir)mhfont.h" />
<ClInclude Include="$(WinWin32Dir)mhinput.h" />
<ClInclude Include="$(WinWin32Dir)mhmain.h" />
<ClInclude Include="$(WinWin32Dir)mhmap.h" />
<ClInclude Include="$(WinWin32Dir)mhmenu.h" />
<ClInclude Include="$(WinWin32Dir)mhmsg.h" />
<ClInclude Include="$(WinWin32Dir)mhmsgwnd.h" />
<ClInclude Include="$(WinWin32Dir)mhrip.h" />
<ClInclude Include="$(WinWin32Dir)mhsplash.h" />
<ClInclude Include="$(WinWin32Dir)mhstatus.h" />
<ClInclude Include="$(WinWin32Dir)mhtext.h" />
<ClInclude Include="$(WinWin32Dir)winMS.h" />
<ClInclude Include="$(IncDir)align.h" />
<ClInclude Include="$(IncDir)artifact.h" />
<ClInclude Include="$(IncDir)artilist.h" />
<ClInclude Include="$(IncDir)attrib.h" />
<ClInclude Include="$(IncDir)bitmfile.h" />
<ClInclude Include="$(IncDir)botl.h" />
<ClInclude Include="$(IncDir)color.h" />
<ClInclude Include="$(IncDir)config.h" />
<ClInclude Include="$(IncDir)config1.h" />
<ClInclude Include="$(IncDir)context.h" />
<ClInclude Include="$(IncDir)coord.h" />
<ClInclude Include="$(IncDir)date.h" />
<ClInclude Include="$(IncDir)decl.h" />
<ClInclude Include="$(IncDir)dgn_comp.h" />
<ClInclude Include="$(IncDir)dgn_file.h" />
<ClInclude Include="$(IncDir)display.h" />
<ClInclude Include="$(IncDir)dlb.h" />
<ClInclude Include="$(IncDir)dungeon.h" />
<ClInclude Include="$(IncDir)engrave.h" />
<ClInclude Include="$(IncDir)extern.h" />
<ClInclude Include="$(IncDir)flag.h" />
<ClInclude Include="$(IncDir)fnamesiz.h" />
<ClInclude Include="$(IncDir)func_tab.h" />
<ClInclude Include="$(IncDir)gem_rsc.h" />
<ClInclude Include="$(IncDir)global.h" />
<ClInclude Include="$(IncDir)hack.h" />
<ClInclude Include="$(IncDir)integer.h" />
<ClInclude Include="$(IncDir)isaac64.h" />
<ClInclude Include="$(IncDir)lev_comp.h" />
<ClInclude Include="$(IncDir)lint.h" />
<ClInclude Include="$(IncDir)load_img.h" />
<ClInclude Include="$(IncDir)mail.h" />
<ClInclude Include="$(IncDir)mextra.h" />
<ClInclude Include="$(IncDir)mfndpos.h" />
<ClInclude Include="$(IncDir)micro.h" />
<ClInclude Include="$(IncDir)mkroom.h" />
<ClInclude Include="$(IncDir)monattk.h" />
<ClInclude Include="$(IncDir)mondata.h" />
<ClInclude Include="$(IncDir)monflag.h" />
<ClInclude Include="$(IncDir)monst.h" />
<ClInclude Include="$(IncDir)monsym.h" />
<ClInclude Include="$(IncDir)nhlua.h" />
<ClInclude Include="$(IncDir)windconf.h" />
<ClInclude Include="$(IncDir)obj.h" />
<ClInclude Include="$(IncDir)objclass.h" />
<ClInclude Include="$(IncDir)onames.h" />
<ClInclude Include="$(IncDir)optlist.h" />
<ClInclude Include="$(IncDir)patchlevel.h" />
<ClInclude Include="$(IncDir)pcconf.h" />
<ClInclude Include="$(IncDir)permonst.h" />
<ClInclude Include="$(IncDir)pm.h" />
<ClInclude Include="$(IncDir)prop.h" />
<ClInclude Include="$(IncDir)quest.h" />
<ClInclude Include="$(IncDir)rect.h" />
<ClInclude Include="$(IncDir)region.h" />
<ClInclude Include="$(IncDir)rm.h" />
<ClInclude Include="$(IncDir)skills.h" />
<ClInclude Include="$(IncDir)spell.h" />
<ClInclude Include="$(IncDir)sp_lev.h" />
<ClInclude Include="$(IncDir)sys.h" />
<ClInclude Include="$(IncDir)system.h" />
<ClInclude Include="$(IncDir)tcap.h" />
<ClInclude Include="$(IncDir)tile2x11.h" />
<ClInclude Include="$(IncDir)tileset.h" />
<ClInclude Include="$(IncDir)timeout.h" />
<ClInclude Include="$(IncDir)tradstdc.h" />
<ClInclude Include="$(IncDir)trap.h" />
<ClInclude Include="$(IncDir)unixconf.h" />
<ClInclude Include="$(IncDir)vision.h" />
<ClInclude Include="$(IncDir)vmsconf.h" />
<ClInclude Include="$(IncDir)winami.h" />
<ClInclude Include="$(IncDir)wincurs.h" />
<ClInclude Include="$(IncDir)winprocs.h" />
<ClInclude Include="$(IncDir)wintty.h" />
<ClInclude Include="$(IncDir)wintype.h" />
<ClInclude Include="$(IncDir)winX.h" />
<ClInclude Include="$(IncDir)xwindow.h" />
<ClInclude Include="$(IncDir)xwindowp.h" />
<ClInclude Include="$(IncDir)you.h" />
<ClInclude Include="$(IncDir)youprop.h" />
<ClInclude Include="$(vsDir)resource.h" />
</ItemGroup>
<ItemGroup>
<Image Include="$(WinWin32Dir)mnsel.bmp" />
<Image Include="$(WinWin32Dir)mnselcnt.bmp" />
<Image Include="$(WinWin32Dir)mnunsel.bmp" />
<Image Include="$(WinWin32Dir)NETHACK.ICO" />
<Image Include="$(WinWin32Dir)petmark.bmp" />
<Image Include="$(WinWin32Dir)pilemark.bmp" />
<Image Include="$(WinWin32Dir)rip.bmp" />
<Image Include="$(WinWin32Dir)splash.bmp" />
<Image Include="$(WinWin32Dir)tiles.bmp" />
</ItemGroup>
<ItemGroup>
<None Include="cpp.hint" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<Target Name="AfterBuild">
<MSBuild Projects="$(vsDir)NetHack\afternethack.proj" Targets="Build" Properties="Configuration=$(Configuration)" />
</Target>
<Target Name="AfterClean">
<MSBuild Projects="$(vsDir)NetHack\afternethack.proj" Targets="Clean" Properties="Configuration=$(Configuration)" />
</Target>
<Target Name="AfterRebuild">
<MSBuild Projects="$(vsDir)NetHack\afternethack.proj" Targets="Build" Properties="Configuration=$(Configuration)" />
</Target>
</Project>

View File

@@ -0,0 +1,118 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\dirs.props" />
<Import Project="$(vsDir)config.props" />
<PropertyGroup Label="Globals">
<ProjectGuid>{BAA70D0F-3EC7-4D10-91F0-974F1F49308B}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>PDCurses</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="$(vsDir)default_lib.props" />
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ItemGroup>
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\addch.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\addchstr.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\addstr.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\attr.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\beep.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\bkgd.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\border.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\clear.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\color.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\debug.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\delch.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\deleteln.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\getch.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\getstr.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\getyx.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\inch.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\inchstr.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\initscr.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\inopts.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\insch.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\insstr.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\kernel.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\keyname.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\mouse.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\move.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\outopts.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\overlay.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\pad.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\panel.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\printw.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\refresh.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\scanw.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\scroll.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\scr_dump.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\slk.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\termattr.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\touch.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\util.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\pdcurses\window.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\wincon\pdcclip.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\wincon\pdcdisp.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\wincon\pdcgetsc.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\wincon\pdckbd.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\wincon\pdcscrn.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\wincon\pdcsetsc.c" />
<ClCompile Condition="Exists('$(PDCURSES)')" Include="$(PDCURSES)\wincon\pdcutil.c" />
</ItemGroup>
<PropertyGroup >
<LinkIncremental>true</LinkIncremental>
<IncludePath>$(PDCURSES);$(IncludePath)</IncludePath>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<DisableSpecificWarnings>4996;4244;%(DisableSpecificWarnings)</DisableSpecificWarnings>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
<OmitDefaultLibName>true</OmitDefaultLibName>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
</Project>

View File

@@ -0,0 +1,373 @@
<?xml version="1.0" encoding="utf-8"?>
<StoreAssociation xmlns="http://schemas.microsoft.com/appx/2010/storeassociation">
<Publisher>CN=8BDC628A-FAAA-4EBA-8B5B-EB61BA93BA1F</Publisher>
<PublisherDisplayName>NetHack DevTeam</PublisherDisplayName>
<DeveloperAccountType>AAD</DeveloperAccountType>
<GeneratePackageHash>http://www.w3.org/2001/04/xmlenc#sha256</GeneratePackageHash>
<SupportedLocales>
<Language Code="af" InMinimumRequirementSet="true" />
<Language Code="af-za" InMinimumRequirementSet="true" />
<Language Code="am" InMinimumRequirementSet="true" />
<Language Code="am-et" InMinimumRequirementSet="true" />
<Language Code="ar" InMinimumRequirementSet="true" />
<Language Code="ar-ae" InMinimumRequirementSet="true" />
<Language Code="ar-bh" InMinimumRequirementSet="true" />
<Language Code="ar-dz" InMinimumRequirementSet="true" />
<Language Code="ar-eg" InMinimumRequirementSet="true" />
<Language Code="ar-iq" InMinimumRequirementSet="true" />
<Language Code="ar-jo" InMinimumRequirementSet="true" />
<Language Code="ar-kw" InMinimumRequirementSet="true" />
<Language Code="ar-lb" InMinimumRequirementSet="true" />
<Language Code="ar-ly" InMinimumRequirementSet="true" />
<Language Code="ar-ma" InMinimumRequirementSet="true" />
<Language Code="ar-om" InMinimumRequirementSet="true" />
<Language Code="ar-qa" InMinimumRequirementSet="true" />
<Language Code="ar-sa" InMinimumRequirementSet="true" />
<Language Code="ar-sy" InMinimumRequirementSet="true" />
<Language Code="ar-tn" InMinimumRequirementSet="true" />
<Language Code="ar-ye" InMinimumRequirementSet="true" />
<Language Code="as" InMinimumRequirementSet="true" />
<Language Code="as-in" InMinimumRequirementSet="true" />
<Language Code="az" InMinimumRequirementSet="true" />
<Language Code="az-arab" InMinimumRequirementSet="true" />
<Language Code="az-arab-az" InMinimumRequirementSet="true" />
<Language Code="az-cyrl" InMinimumRequirementSet="true" />
<Language Code="az-cyrl-az" InMinimumRequirementSet="true" />
<Language Code="az-latn" InMinimumRequirementSet="true" />
<Language Code="az-latn-az" InMinimumRequirementSet="true" />
<Language Code="be" InMinimumRequirementSet="true" />
<Language Code="be-by" InMinimumRequirementSet="true" />
<Language Code="bg" InMinimumRequirementSet="true" />
<Language Code="bg-bg" InMinimumRequirementSet="true" />
<Language Code="bn" InMinimumRequirementSet="true" />
<Language Code="bn-bd" InMinimumRequirementSet="true" />
<Language Code="bn-in" InMinimumRequirementSet="true" />
<Language Code="bs" InMinimumRequirementSet="true" />
<Language Code="bs-cyrl" InMinimumRequirementSet="true" />
<Language Code="bs-cyrl-ba" InMinimumRequirementSet="true" />
<Language Code="bs-latn" InMinimumRequirementSet="true" />
<Language Code="bs-latn-ba" InMinimumRequirementSet="true" />
<Language Code="ca" InMinimumRequirementSet="true" />
<Language Code="ca-es" InMinimumRequirementSet="true" />
<Language Code="ca-es-valencia" InMinimumRequirementSet="true" />
<Language Code="chr-cher" InMinimumRequirementSet="true" />
<Language Code="chr-cher-us" InMinimumRequirementSet="true" />
<Language Code="chr-latn" InMinimumRequirementSet="true" />
<Language Code="cs" InMinimumRequirementSet="true" />
<Language Code="cs-cz" InMinimumRequirementSet="true" />
<Language Code="cy" InMinimumRequirementSet="true" />
<Language Code="cy-gb" InMinimumRequirementSet="true" />
<Language Code="da" InMinimumRequirementSet="true" />
<Language Code="da-dk" InMinimumRequirementSet="true" />
<Language Code="de" InMinimumRequirementSet="true" />
<Language Code="de-at" InMinimumRequirementSet="true" />
<Language Code="de-ch" InMinimumRequirementSet="true" />
<Language Code="de-de" InMinimumRequirementSet="true" />
<Language Code="de-li" InMinimumRequirementSet="true" />
<Language Code="de-lu" InMinimumRequirementSet="true" />
<Language Code="el" InMinimumRequirementSet="true" />
<Language Code="el-gr" InMinimumRequirementSet="true" />
<Language Code="en" InMinimumRequirementSet="true" />
<Language Code="en-011" InMinimumRequirementSet="true" />
<Language Code="en-014" InMinimumRequirementSet="true" />
<Language Code="en-018" InMinimumRequirementSet="true" />
<Language Code="en-021" InMinimumRequirementSet="true" />
<Language Code="en-029" InMinimumRequirementSet="true" />
<Language Code="en-053" InMinimumRequirementSet="true" />
<Language Code="en-au" InMinimumRequirementSet="true" />
<Language Code="en-bz" InMinimumRequirementSet="true" />
<Language Code="en-ca" InMinimumRequirementSet="true" />
<Language Code="en-gb" InMinimumRequirementSet="true" />
<Language Code="en-hk" InMinimumRequirementSet="true" />
<Language Code="en-id" InMinimumRequirementSet="true" />
<Language Code="en-ie" InMinimumRequirementSet="true" />
<Language Code="en-in" InMinimumRequirementSet="true" />
<Language Code="en-jm" InMinimumRequirementSet="true" />
<Language Code="en-kz" InMinimumRequirementSet="true" />
<Language Code="en-mt" InMinimumRequirementSet="true" />
<Language Code="en-my" InMinimumRequirementSet="true" />
<Language Code="en-nz" InMinimumRequirementSet="true" />
<Language Code="en-ph" InMinimumRequirementSet="true" />
<Language Code="en-pk" InMinimumRequirementSet="true" />
<Language Code="en-sg" InMinimumRequirementSet="true" />
<Language Code="en-tt" InMinimumRequirementSet="true" />
<Language Code="en-us" InMinimumRequirementSet="true" />
<Language Code="en-vn" InMinimumRequirementSet="true" />
<Language Code="en-za" InMinimumRequirementSet="true" />
<Language Code="en-zw" InMinimumRequirementSet="true" />
<Language Code="es" InMinimumRequirementSet="true" />
<Language Code="es-019" InMinimumRequirementSet="true" />
<Language Code="es-419" InMinimumRequirementSet="true" />
<Language Code="es-ar" InMinimumRequirementSet="true" />
<Language Code="es-bo" InMinimumRequirementSet="true" />
<Language Code="es-cl" InMinimumRequirementSet="true" />
<Language Code="es-co" InMinimumRequirementSet="true" />
<Language Code="es-cr" InMinimumRequirementSet="true" />
<Language Code="es-do" InMinimumRequirementSet="true" />
<Language Code="es-ec" InMinimumRequirementSet="true" />
<Language Code="es-es" InMinimumRequirementSet="true" />
<Language Code="es-gt" InMinimumRequirementSet="true" />
<Language Code="es-hn" InMinimumRequirementSet="true" />
<Language Code="es-mx" InMinimumRequirementSet="true" />
<Language Code="es-ni" InMinimumRequirementSet="true" />
<Language Code="es-pa" InMinimumRequirementSet="true" />
<Language Code="es-pe" InMinimumRequirementSet="true" />
<Language Code="es-pr" InMinimumRequirementSet="true" />
<Language Code="es-py" InMinimumRequirementSet="true" />
<Language Code="es-sv" InMinimumRequirementSet="true" />
<Language Code="es-us" InMinimumRequirementSet="true" />
<Language Code="es-uy" InMinimumRequirementSet="true" />
<Language Code="es-ve" InMinimumRequirementSet="true" />
<Language Code="et" InMinimumRequirementSet="true" />
<Language Code="et-ee" InMinimumRequirementSet="true" />
<Language Code="eu" InMinimumRequirementSet="true" />
<Language Code="eu-es" InMinimumRequirementSet="true" />
<Language Code="fa" InMinimumRequirementSet="true" />
<Language Code="fa-ir" InMinimumRequirementSet="true" />
<Language Code="fi" InMinimumRequirementSet="true" />
<Language Code="fi-fi" InMinimumRequirementSet="true" />
<Language Code="fil" InMinimumRequirementSet="true" />
<Language Code="fil-latn" InMinimumRequirementSet="true" />
<Language Code="fil-ph" InMinimumRequirementSet="true" />
<Language Code="fr" InMinimumRequirementSet="true" />
<Language Code="fr-011" InMinimumRequirementSet="true" />
<Language Code="fr-015" InMinimumRequirementSet="true" />
<Language Code="fr-021" InMinimumRequirementSet="true" />
<Language Code="fr-029" InMinimumRequirementSet="true" />
<Language Code="fr-155" InMinimumRequirementSet="true" />
<Language Code="fr-be" InMinimumRequirementSet="true" />
<Language Code="fr-ca" InMinimumRequirementSet="true" />
<Language Code="fr-cd" InMinimumRequirementSet="true" />
<Language Code="fr-ch" InMinimumRequirementSet="true" />
<Language Code="fr-ci" InMinimumRequirementSet="true" />
<Language Code="fr-cm" InMinimumRequirementSet="true" />
<Language Code="fr-fr" InMinimumRequirementSet="true" />
<Language Code="fr-ht" InMinimumRequirementSet="true" />
<Language Code="fr-lu" InMinimumRequirementSet="true" />
<Language Code="fr-ma" InMinimumRequirementSet="true" />
<Language Code="fr-mc" InMinimumRequirementSet="true" />
<Language Code="fr-ml" InMinimumRequirementSet="true" />
<Language Code="fr-re" InMinimumRequirementSet="true" />
<Language Code="frc-latn" InMinimumRequirementSet="true" />
<Language Code="frp-latn" InMinimumRequirementSet="true" />
<Language Code="ga" InMinimumRequirementSet="true" />
<Language Code="ga-ie" InMinimumRequirementSet="true" />
<Language Code="gd-gb" InMinimumRequirementSet="true" />
<Language Code="gd-latn" InMinimumRequirementSet="true" />
<Language Code="gl" InMinimumRequirementSet="true" />
<Language Code="gl-es" InMinimumRequirementSet="true" />
<Language Code="gu" InMinimumRequirementSet="true" />
<Language Code="gu-in" InMinimumRequirementSet="true" />
<Language Code="ha" InMinimumRequirementSet="true" />
<Language Code="ha-latn" InMinimumRequirementSet="true" />
<Language Code="ha-latn-ng" InMinimumRequirementSet="true" />
<Language Code="he" InMinimumRequirementSet="true" />
<Language Code="he-il" InMinimumRequirementSet="true" />
<Language Code="hi" InMinimumRequirementSet="true" />
<Language Code="hi-in" InMinimumRequirementSet="true" />
<Language Code="hr" InMinimumRequirementSet="true" />
<Language Code="hr-ba" InMinimumRequirementSet="true" />
<Language Code="hr-hr" InMinimumRequirementSet="true" />
<Language Code="hu" InMinimumRequirementSet="true" />
<Language Code="hu-hu" InMinimumRequirementSet="true" />
<Language Code="hy" InMinimumRequirementSet="true" />
<Language Code="hy-am" InMinimumRequirementSet="true" />
<Language Code="id" InMinimumRequirementSet="true" />
<Language Code="id-id" InMinimumRequirementSet="true" />
<Language Code="ig-latn" InMinimumRequirementSet="true" />
<Language Code="ig-ng" InMinimumRequirementSet="true" />
<Language Code="is" InMinimumRequirementSet="true" />
<Language Code="is-is" InMinimumRequirementSet="true" />
<Language Code="it" InMinimumRequirementSet="true" />
<Language Code="it-ch" InMinimumRequirementSet="true" />
<Language Code="it-it" InMinimumRequirementSet="true" />
<Language Code="iu-cans" InMinimumRequirementSet="true" />
<Language Code="iu-latn" InMinimumRequirementSet="true" />
<Language Code="iu-latn-ca" InMinimumRequirementSet="true" />
<Language Code="ja" InMinimumRequirementSet="true" />
<Language Code="ja-jp" InMinimumRequirementSet="true" />
<Language Code="ka" InMinimumRequirementSet="true" />
<Language Code="ka-ge" InMinimumRequirementSet="true" />
<Language Code="kk" InMinimumRequirementSet="true" />
<Language Code="kk-kz" InMinimumRequirementSet="true" />
<Language Code="km" InMinimumRequirementSet="true" />
<Language Code="km-kh" InMinimumRequirementSet="true" />
<Language Code="kn" InMinimumRequirementSet="true" />
<Language Code="kn-in" InMinimumRequirementSet="true" />
<Language Code="ko" InMinimumRequirementSet="true" />
<Language Code="ko-kr" InMinimumRequirementSet="true" />
<Language Code="kok" InMinimumRequirementSet="true" />
<Language Code="kok-in" InMinimumRequirementSet="true" />
<Language Code="ku-arab" InMinimumRequirementSet="true" />
<Language Code="ku-arab-iq" InMinimumRequirementSet="true" />
<Language Code="ky-cyrl" InMinimumRequirementSet="true" />
<Language Code="ky-kg" InMinimumRequirementSet="true" />
<Language Code="lb" InMinimumRequirementSet="true" />
<Language Code="lb-lu" InMinimumRequirementSet="true" />
<Language Code="lo" InMinimumRequirementSet="true" />
<Language Code="lo-la" InMinimumRequirementSet="true" />
<Language Code="lt" InMinimumRequirementSet="true" />
<Language Code="lt-lt" InMinimumRequirementSet="true" />
<Language Code="lv" InMinimumRequirementSet="true" />
<Language Code="lv-lv" InMinimumRequirementSet="true" />
<Language Code="mi" InMinimumRequirementSet="true" />
<Language Code="mi-latn" InMinimumRequirementSet="true" />
<Language Code="mi-nz" InMinimumRequirementSet="true" />
<Language Code="mk" InMinimumRequirementSet="true" />
<Language Code="mk-mk" InMinimumRequirementSet="true" />
<Language Code="ml" InMinimumRequirementSet="true" />
<Language Code="ml-in" InMinimumRequirementSet="true" />
<Language Code="mn-cyrl" InMinimumRequirementSet="true" />
<Language Code="mn-mn" InMinimumRequirementSet="true" />
<Language Code="mn-mong" InMinimumRequirementSet="true" />
<Language Code="mn-phag" InMinimumRequirementSet="true" />
<Language Code="mr" InMinimumRequirementSet="true" />
<Language Code="mr-in" InMinimumRequirementSet="true" />
<Language Code="ms" InMinimumRequirementSet="true" />
<Language Code="ms-bn" InMinimumRequirementSet="true" />
<Language Code="ms-my" InMinimumRequirementSet="true" />
<Language Code="mt" InMinimumRequirementSet="true" />
<Language Code="mt-mt" InMinimumRequirementSet="true" />
<Language Code="nb" InMinimumRequirementSet="true" />
<Language Code="nb-no" InMinimumRequirementSet="true" />
<Language Code="ne" InMinimumRequirementSet="true" />
<Language Code="ne-np" InMinimumRequirementSet="true" />
<Language Code="nl" InMinimumRequirementSet="true" />
<Language Code="nl-be" InMinimumRequirementSet="true" />
<Language Code="nl-nl" InMinimumRequirementSet="true" />
<Language Code="nn" InMinimumRequirementSet="true" />
<Language Code="nn-no" InMinimumRequirementSet="true" />
<Language Code="no" InMinimumRequirementSet="true" />
<Language Code="no-no" InMinimumRequirementSet="true" />
<Language Code="nso" InMinimumRequirementSet="true" />
<Language Code="nso-za" InMinimumRequirementSet="true" />
<Language Code="om" InMinimumRequirementSet="false" />
<Language Code="om-et" InMinimumRequirementSet="false" />
<Language Code="or" InMinimumRequirementSet="true" />
<Language Code="or-in" InMinimumRequirementSet="true" />
<Language Code="pa" InMinimumRequirementSet="true" />
<Language Code="pa-arab" InMinimumRequirementSet="true" />
<Language Code="pa-arab-pk" InMinimumRequirementSet="true" />
<Language Code="pa-deva" InMinimumRequirementSet="true" />
<Language Code="pa-in" InMinimumRequirementSet="true" />
<Language Code="pl" InMinimumRequirementSet="true" />
<Language Code="pl-pl" InMinimumRequirementSet="true" />
<Language Code="prs" InMinimumRequirementSet="true" />
<Language Code="prs-af" InMinimumRequirementSet="true" />
<Language Code="prs-arab" InMinimumRequirementSet="true" />
<Language Code="pt" InMinimumRequirementSet="true" />
<Language Code="pt-br" InMinimumRequirementSet="true" />
<Language Code="pt-pt" InMinimumRequirementSet="true" />
<Language Code="quc-latn" InMinimumRequirementSet="true" />
<Language Code="qut-gt" InMinimumRequirementSet="true" />
<Language Code="qut-latn" InMinimumRequirementSet="true" />
<Language Code="quz" InMinimumRequirementSet="true" />
<Language Code="quz-bo" InMinimumRequirementSet="true" />
<Language Code="quz-ec" InMinimumRequirementSet="true" />
<Language Code="quz-pe" InMinimumRequirementSet="true" />
<Language Code="ro" InMinimumRequirementSet="true" />
<Language Code="ro-ro" InMinimumRequirementSet="true" />
<Language Code="ru" InMinimumRequirementSet="true" />
<Language Code="ru-ru" InMinimumRequirementSet="true" />
<Language Code="rw" InMinimumRequirementSet="true" />
<Language Code="rw-rw" InMinimumRequirementSet="true" />
<Language Code="sd-arab" InMinimumRequirementSet="true" />
<Language Code="sd-arab-pk" InMinimumRequirementSet="true" />
<Language Code="sd-deva" InMinimumRequirementSet="true" />
<Language Code="si" InMinimumRequirementSet="true" />
<Language Code="si-lk" InMinimumRequirementSet="true" />
<Language Code="sk" InMinimumRequirementSet="true" />
<Language Code="sk-sk" InMinimumRequirementSet="true" />
<Language Code="sl" InMinimumRequirementSet="true" />
<Language Code="sl-si" InMinimumRequirementSet="true" />
<Language Code="sq" InMinimumRequirementSet="true" />
<Language Code="sq-al" InMinimumRequirementSet="true" />
<Language Code="sr" InMinimumRequirementSet="true" />
<Language Code="sr-cyrl" InMinimumRequirementSet="true" />
<Language Code="sr-cyrl-ba" InMinimumRequirementSet="true" />
<Language Code="sr-cyrl-cs" InMinimumRequirementSet="true" />
<Language Code="sr-cyrl-me" InMinimumRequirementSet="true" />
<Language Code="sr-cyrl-rs" InMinimumRequirementSet="true" />
<Language Code="sr-latn" InMinimumRequirementSet="true" />
<Language Code="sr-latn-ba" InMinimumRequirementSet="true" />
<Language Code="sr-latn-cs" InMinimumRequirementSet="true" />
<Language Code="sr-latn-me" InMinimumRequirementSet="true" />
<Language Code="sr-latn-rs" InMinimumRequirementSet="true" />
<Language Code="sv" InMinimumRequirementSet="true" />
<Language Code="sv-fi" InMinimumRequirementSet="true" />
<Language Code="sv-se" InMinimumRequirementSet="true" />
<Language Code="sw" InMinimumRequirementSet="true" />
<Language Code="sw-ke" InMinimumRequirementSet="true" />
<Language Code="ta" InMinimumRequirementSet="true" />
<Language Code="ta-in" InMinimumRequirementSet="true" />
<Language Code="te" InMinimumRequirementSet="true" />
<Language Code="te-in" InMinimumRequirementSet="true" />
<Language Code="tg-arab" InMinimumRequirementSet="true" />
<Language Code="tg-cyrl" InMinimumRequirementSet="true" />
<Language Code="tg-cyrl-tj" InMinimumRequirementSet="true" />
<Language Code="tg-latn" InMinimumRequirementSet="true" />
<Language Code="th" InMinimumRequirementSet="true" />
<Language Code="th-th" InMinimumRequirementSet="true" />
<Language Code="ti" InMinimumRequirementSet="true" />
<Language Code="ti-et" InMinimumRequirementSet="true" />
<Language Code="tk-cyrl" InMinimumRequirementSet="true" />
<Language Code="tk-cyrl-tr" InMinimumRequirementSet="true" />
<Language Code="tk-latn" InMinimumRequirementSet="true" />
<Language Code="tk-latn-tr" InMinimumRequirementSet="true" />
<Language Code="tk-tm" InMinimumRequirementSet="true" />
<Language Code="tn" InMinimumRequirementSet="true" />
<Language Code="tn-bw" InMinimumRequirementSet="true" />
<Language Code="tn-za" InMinimumRequirementSet="true" />
<Language Code="tr" InMinimumRequirementSet="true" />
<Language Code="tr-tr" InMinimumRequirementSet="true" />
<Language Code="tt-arab" InMinimumRequirementSet="true" />
<Language Code="tt-cyrl" InMinimumRequirementSet="true" />
<Language Code="tt-latn" InMinimumRequirementSet="true" />
<Language Code="tt-ru" InMinimumRequirementSet="true" />
<Language Code="ug-arab" InMinimumRequirementSet="true" />
<Language Code="ug-cn" InMinimumRequirementSet="true" />
<Language Code="ug-cyrl" InMinimumRequirementSet="true" />
<Language Code="ug-latn" InMinimumRequirementSet="true" />
<Language Code="uk" InMinimumRequirementSet="true" />
<Language Code="uk-ua" InMinimumRequirementSet="true" />
<Language Code="ur" InMinimumRequirementSet="true" />
<Language Code="ur-pk" InMinimumRequirementSet="true" />
<Language Code="uz" InMinimumRequirementSet="true" />
<Language Code="uz-cyrl" InMinimumRequirementSet="true" />
<Language Code="uz-latn" InMinimumRequirementSet="true" />
<Language Code="uz-latn-uz" InMinimumRequirementSet="true" />
<Language Code="vi" InMinimumRequirementSet="true" />
<Language Code="vi-vn" InMinimumRequirementSet="true" />
<Language Code="wo" InMinimumRequirementSet="true" />
<Language Code="wo-sn" InMinimumRequirementSet="true" />
<Language Code="xh" InMinimumRequirementSet="true" />
<Language Code="xh-za" InMinimumRequirementSet="true" />
<Language Code="yo-latn" InMinimumRequirementSet="true" />
<Language Code="yo-ng" InMinimumRequirementSet="true" />
<Language Code="zh" InMinimumRequirementSet="true" />
<Language Code="zh-cn" InMinimumRequirementSet="true" />
<Language Code="zh-hans" InMinimumRequirementSet="true" />
<Language Code="zh-hans-cn" InMinimumRequirementSet="true" />
<Language Code="zh-hans-sg" InMinimumRequirementSet="true" />
<Language Code="zh-hant" InMinimumRequirementSet="true" />
<Language Code="zh-hant-hk" InMinimumRequirementSet="true" />
<Language Code="zh-hant-mo" InMinimumRequirementSet="true" />
<Language Code="zh-hant-tw" InMinimumRequirementSet="true" />
<Language Code="zh-hk" InMinimumRequirementSet="true" />
<Language Code="zh-mo" InMinimumRequirementSet="true" />
<Language Code="zh-sg" InMinimumRequirementSet="true" />
<Language Code="zh-tw" InMinimumRequirementSet="true" />
<Language Code="zu" InMinimumRequirementSet="true" />
<Language Code="zu-za" InMinimumRequirementSet="true" />
</SupportedLocales>
<ProductReservedInfo>
<MainPackageIdentityName>30485NetHackDevTeam.NetHack3.6</MainPackageIdentityName>
<ReservedNames>
<ReservedName>NetHack 3.7</ReservedName>
</ReservedNames>
</ProductReservedInfo>
<AccountPackageIdentityNames>
<MainPackageIdentityName>30485NetHackDevTeam.NetHackBeta</MainPackageIdentityName>
</AccountPackageIdentityNames>
<PackageInfoList LandingUrl="https://developer.microsoft.com/dashboard/Application?appId=9PJ7BFSRP8M5" />
</StoreAssociation>

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

44
sys/windows/vs/build.bat Normal file
View File

@@ -0,0 +1,44 @@
@echo off
if "%VSCMD_VER%"=="" (
echo MSBuild environment not set ... attempting to setup build environment.
call :setup_environment
)
if "%VSCMD_VER%"=="" (
echo Unable to setup build environment. Exiting.
goto :EOF
)
msbuild NetHack.sln /t:Clean;Build /p:Configuration=Debug;Platform=Win32
msbuild NetHack.sln /t:Clean;Build /p:Configuration=Debug;Platform=x64
msbuild NetHack.sln /t:Clean;Build /p:Configuration=Release;Platform=Win32
msbuild NetHack.sln /t:Clean;Build /p:Configuration=Release;Platform=x64
goto :EOF
:setup_environment
if "%VS150COMNTOOLS%"=="" (
call :set_vs15comntools
)
if "%VS150COMNTOOLS%"=="" (
echo Can not find Visual Studio 2017 Common Tools path.
echo Set VS150COMNTOOLS appropriately.
goto :EOF
)
call "%VS150COMNTOOLS%VsMSBuildCmd.bat"
cd %~dp0
goto :EOF
:set_vs15comntools
if exist "%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Professional\Common7\Tools" (
set "VS150COMNTOOLS=%ProgramFiles(x86)%\Microsoft Visual Studio\2017\Professional\Common7\Tools\"
)
goto :EOF

View File

@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
<LinkIncremental>true</LinkIncremental>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Release'">
<LinkIncremental>false</LinkIncremental>
</PropertyGroup>
<ItemDefinitionGroup>
<ClCompile>
<WarningLevel>Level4</WarningLevel>
<DisableSpecificWarnings>4820;4706;4244;4245;4100;4310</DisableSpecificWarnings>
<PreprocessorDefinitions>WIN32;CRT_SECURE_NO_DEPRECATE;_SCL_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_WARNINGS;WINVER=0x0601;_WIN32_WINNT=0x0601;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<ProgramDatabaseFile>$(SymbolsDir)$(TargetName).pdb</ProgramDatabaseFile>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)'=='Debug'">
<ClCompile>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
</ClCompile>
<Link>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)'=='Release'">
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
</ClCompile>
<Link>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
</Link>
</ItemDefinitionGroup>
</Project>

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>15.0</VCProjectVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(WindowsTargetPlatformVersion)'==''">
<LatestTargetPlatformVersion>$([Microsoft.Build.Utilities.ToolLocationHelper]::GetLatestSDKTargetPlatformVersion('Windows', '10.0'))</LatestTargetPlatformVersion>
<WindowsTargetPlatformVersion Condition="'$(WindowsTargetPlatformVersion)' == ''">$(LatestTargetPlatformVersion)</WindowsTargetPlatformVersion>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
</Link>
</ItemDefinitionGroup>
</Project>

6
sys/windows/vs/cpp.hint Normal file
View File

@@ -0,0 +1,6 @@
// Hint files help the Visual Studio IDE interpret Visual C++ identifiers
// such as names of functions and macros.
// For more information see https://go.microsoft.com/fwlink/?linkid=865984
#define E
#define NDECL(x) x
#define FDECL(x, y) x y

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ConfigurationType>Application</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
<LocalDebuggerWorkingDirectory>$(BinDir)</LocalDebuggerWorkingDirectory>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Debug'" >
<UseDebugLibraries>true</UseDebugLibraries>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Release'" >
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Debug'" >
<UseDebugLibraries>true</UseDebugLibraries>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Release'" >
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ConfigurationType>StaticLibrary</ConfigurationType>
<UseOfMfc>false</UseOfMfc>
<CharacterSet>MultiByte</CharacterSet>
<PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Debug'" >
<UseDebugLibraries>true</UseDebugLibraries>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Release'" >
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
</Project>

32
sys/windows/vs/dirs.props Normal file
View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<RootDir>$(MSBuildProjectDirectory)\..\..\..\..\</RootDir>
<vsDir>$(RootDir)sys\windows\vs\</vsDir>
<BinDir>$(RootDir)binary\$(Configuration)\$(Platform)\</BinDir>
<ObjDir>$(ProjectDir)obj\$(Configuration)\$(Platform)\$(TargetName)\</ObjDir>
<SymbolsDir>$(ProjectDir)symbols\$(Configuration)\$(Platform)\$(TargetName)\</SymbolsDir>
<ToolsDir>$(RootDir)tools\$(Configuration)\$(Platform)\</ToolsDir>
<ImageDir>$(vsDir)\Images\</ImageDir>
<UtilDir>$(RootDir)util\</UtilDir>
<DatDir>$(RootDir)dat\</DatDir>
<DocDir>$(RootDir)doc\</DocDir>
<IncDir>$(RootDir)include\</IncDir>
<LuaDir>$(RootDir)submodules\lua\</LuaDir>
<SrcDir>$(RootDir)src\</SrcDir>
<SysDir>$(RootDir)sys\</SysDir>
<UtilDir>$(RootDir)util\</UtilDir>
<SysShareDir>$(RootDir)sys\share\</SysShareDir>
<SysWindDir>$(RootDir)sys\windows\</SysWindDir>
<WinShareDir>$(RootDir)win\share\</WinShareDir>
<WinTtyDir>$(RootDir)win\tty\</WinTtyDir>
<WinWin32Dir>$(RootDir)win\win32\</WinWin32Dir>
<OutDir>$(ToolsDir)</OutDir>
<IntDir>$(ObjDir)</IntDir>
<WinCursDir>$(RootDir)win\curses\</WinCursDir>
<SubmodulesDir>$(RootDir)submodules\</SubmodulesDir>
</PropertyGroup>
<PropertyGroup Condition="'$(PDCURSES)'=='' AND Exists('$(RootDir)lib\PDCurses')">
<PDCURSES>$(RootDir)lib\PDCurses\</PDCURSES>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,17 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\dirs.props"/>
<Import Project="$(vsDir)files.props"/>
<Target Name="Build"
Inputs="$(ToolsDir)dlb.exe;@(DlbList);$(SysWindDir)porthelp"
Outputs="$(BinDir)nhdat$(VERSION_MAJOR)$(VERSION_MINOR)$(PATCHLEVEL)">
<MakeDir Directories="$(BinDir)"/>
<Copy SourceFiles="$(SysWindDir)porthelp" DestinationFolder="$(DatDir)"/>
<WriteLinesToFile File="$(DatDir)dlb.lst" Lines="@(DlbList->'%(filename)%(extension)')" Overwrite="true"/>
<Exec Command="&quot;$(ToolsDir)dlb.exe&quot; cIf dlb.lst &quot;$(BinDir)nhdat&quot;" WorkingDirectory="$(DatDir)"/>
<Delete Files="$(DatDir)porthelp"/>
</Target>
<Target Name="Clean">
<Delete Files="$(BinDir)nhdat$(VERSION_MAJOR)$(VERSION_MINOR)$(PATCHLEVEL)"/>
</Target>
</Project>

View File

@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\dirs.props" />
<Import Project="$(vsDir)config.props" />
<PropertyGroup Label="Globals">
<ProjectGuid>{0303A585-3F83-4BB7-AF6B-1E12C8FB54AC}</ProjectGuid>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="$(vsDir)default.props" />
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(vsDir)NetHackProperties.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(vsDir)NetHackProperties.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(vsDir)NetHackProperties.props" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(vsDir)NetHackProperties.props" />
</ImportGroup>
<Import Project="$(vsDir)console.props" />
<Import Project="$(vsDir)common.props" />
<Import Project="$(vsDir)files.props" />
<ItemDefinitionGroup>
<ClCompile>
<AdditionalIncludeDirectories>$(IncDir);$(SysWindDir);$(SysShareDir);$(LuaDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32CON;DLB;MSWIN_GRAPHICS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="$(SrcDir)alloc.c" />
<ClCompile Include="$(SrcDir)dlb.c" />
<ClCompile Include="$(UtilDir)dlb_main.c" />
<ClCompile Include="$(UtilDir)panic.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="$(IncDir)dlb.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<Target Name="AfterBuild">
<MSBuild Projects="afterdlb.proj" Targets="Build" Properties="Configuration=$(Configuration)" />
</Target>
<Target Name="AfterClean">
<MSBuild Projects="afterdlb.proj" Targets="Clean" Properties="Configuration=$(Configuration)" />
</Target>
<Target Name="AfterRebuild">
<MSBuild Projects="afterdlb.proj" Targets="Build" Properties="Configuration=$(Configuration)" />
</Target>
</Project>

11
sys/windows/vs/dll.props Normal file
View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemDefinitionGroup>
<ClCompile>
<PreprocessorDefinitions>WIN32CON;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
</Link>
</ItemDefinitionGroup>
</Project>

226
sys/windows/vs/files.props Normal file
View File

@@ -0,0 +1,226 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<!-- -v -->
<Defs Include = "$(DatDir)options"/>
<Defs Include = "$(IncDir)date.h"/>
<!-- -o -->
<Defs Include = "$(IncDir)onames.h"/>
<!-- -p -->
<Defs Include = "$(IncDir)pm.h"/>
<!-- -r -->
<Defs Include = "$(DatDir)rumors"/>
<!-- -s -->
<Defs Include = "$(DatDir)engrave"/>
<Defs Include = "$(DatDir)epitaph"/>
<Defs Include = "$(DatDir)bogusmon"/>
<!-- -h -->
<Defs Include = "$(DatDir)oracles"/>
</ItemGroup>
<ItemGroup>
<Luafiles Include = "bigrm-1.lua"/>
<Luafiles Include = "bigrm-2.lua"/>
<Luafiles Include = "bigrm-3.lua"/>
<Luafiles Include = "bigrm-4.lua"/>
<Luafiles Include = "bigrm-5.lua"/>
<Luafiles Include = "bigrm-6.lua"/>
<Luafiles Include = "bigrm-7.lua"/>
<Luafiles Include = "bigrm-8.lua"/>
<Luafiles Include = "bigrm-9.lua"/>
<Luafiles Include = "bigrm-10.lua"/>
<Luafiles Include = "castle.lua"/>
<Luafiles Include = "air.lua"/>
<Luafiles Include = "astral.lua"/>
<Luafiles Include = "earth.lua"/>
<Luafiles Include = "fire.lua"/>
<Luafiles Include = "water.lua"/>
<Luafiles Include = "asmodeus.lua"/>
<Luafiles Include = "baalz.lua"/>
<Luafiles Include = "juiblex.lua"/>
<Luafiles Include = "orcus.lua"/>
<Luafiles Include = "quest.lua"/>
<Luafiles Include = "sanctum.lua"/>
<Luafiles Include = "valley.lua"/>
<Luafiles Include = "knox.lua"/>
<Luafiles Include = "minefill.lua"/>
<Luafiles Include = "minend-1.lua"/>
<Luafiles Include = "minend-2.lua"/>
<Luafiles Include = "minend-3.lua"/>
<Luafiles Include = "minetn-1.lua"/>
<Luafiles Include = "minetn-2.lua"/>
<Luafiles Include = "minetn-3.lua"/>
<Luafiles Include = "minetn-4.lua"/>
<Luafiles Include = "minetn-5.lua"/>
<Luafiles Include = "minetn-6.lua"/>
<Luafiles Include = "minetn-7.lua"/>
<Luafiles Include = "medusa-1.lua"/>
<Luafiles Include = "medusa-2.lua"/>
<Luafiles Include = "medusa-3.lua"/>
<Luafiles Include = "medusa-4.lua"/>
<Luafiles Include = "oracle.lua"/>
<Luafiles Include = "soko1-1.lua"/>
<Luafiles Include = "soko1-2.lua"/>
<Luafiles Include = "soko2-1.lua"/>
<Luafiles Include = "soko2-2.lua"/>
<Luafiles Include = "soko3-1.lua"/>
<Luafiles Include = "soko3-2.lua"/>
<Luafiles Include = "soko4-1.lua"/>
<Luafiles Include = "soko4-2.lua"/>
<Luafiles Include = "tower1.lua"/>
<Luafiles Include = "tower2.lua"/>
<Luafiles Include = "tower3.lua"/>
<Luafiles Include = "fakewiz1.lua"/>
<Luafiles Include = "fakewiz2.lua"/>
<Luafiles Include = "wizard1.lua"/>
<Luafiles Include = "wizard2.lua"/>
<Luafiles Include = "wizard3.lua"/>
<Luafiles Include = "arc-fila.lua"/>
<Luafiles Include = "arc-filb.lua"/>
<Luafiles Include = "arc-goal.lua"/>
<Luafiles Include = "arc-loca.lua"/>
<Luafiles Include = "arc-strt.lua"/>
<Luafiles Include = "bar-fila.lua"/>
<Luafiles Include = "bar-filb.lua"/>
<Luafiles Include = "bar-goal.lua"/>
<Luafiles Include = "bar-loca.lua"/>
<Luafiles Include = "bar-strt.lua"/>
<Luafiles Include = "cav-fila.lua"/>
<Luafiles Include = "cav-filb.lua"/>
<Luafiles Include = "cav-goal.lua"/>
<Luafiles Include = "cav-loca.lua"/>
<Luafiles Include = "cav-strt.lua"/>
<Luafiles Include = "hea-fila.lua"/>
<Luafiles Include = "hea-filb.lua"/>
<Luafiles Include = "hea-goal.lua"/>
<Luafiles Include = "hea-loca.lua"/>
<Luafiles Include = "hea-strt.lua"/>
<Luafiles Include = "kni-fila.lua"/>
<Luafiles Include = "kni-filb.lua"/>
<Luafiles Include = "kni-goal.lua"/>
<Luafiles Include = "kni-loca.lua"/>
<Luafiles Include = "kni-strt.lua"/>
<Luafiles Include = "mon-fila.lua"/>
<Luafiles Include = "mon-filb.lua"/>
<Luafiles Include = "mon-goal.lua"/>
<Luafiles Include = "mon-loca.lua"/>
<Luafiles Include = "mon-strt.lua"/>
<Luafiles Include = "pri-fila.lua"/>
<Luafiles Include = "pri-filb.lua"/>
<Luafiles Include = "pri-goal.lua"/>
<Luafiles Include = "pri-loca.lua"/>
<Luafiles Include = "pri-strt.lua"/>
<Luafiles Include = "ran-fila.lua"/>
<Luafiles Include = "ran-filb.lua"/>
<Luafiles Include = "ran-goal.lua"/>
<Luafiles Include = "ran-loca.lua"/>
<Luafiles Include = "ran-strt.lua"/>
<Luafiles Include = "rog-fila.lua"/>
<Luafiles Include = "rog-filb.lua"/>
<Luafiles Include = "rog-goal.lua"/>
<Luafiles Include = "rog-loca.lua"/>
<Luafiles Include = "rog-strt.lua"/>
<Luafiles Include = "sam-fila.lua"/>
<Luafiles Include = "sam-filb.lua"/>
<Luafiles Include = "sam-goal.lua"/>
<Luafiles Include = "sam-loca.lua"/>
<Luafiles Include = "sam-strt.lua"/>
<Luafiles Include = "tou-fila.lua"/>
<Luafiles Include = "tou-filb.lua"/>
<Luafiles Include = "tou-goal.lua"/>
<Luafiles Include = "tou-loca.lua"/>
<Luafiles Include = "tou-strt.lua"/>
<Luafiles Include = "val-fila.lua"/>
<Luafiles Include = "val-filb.lua"/>
<Luafiles Include = "val-goal.lua"/>
<Luafiles Include = "val-loca.lua"/>
<Luafiles Include = "val-strt.lua"/>
<Luafiles Include = "wiz-fila.lua"/>
<Luafiles Include = "wiz-filb.lua"/>
<Luafiles Include = "wiz-goal.lua"/>
<Luafiles Include = "wiz-loca.lua"/>
<Luafiles Include = "wiz-strt.lua"/>
</ItemGroup>
<ItemGroup>
<UUFiles Include = "$(SysWindDir)nhico.uu"/>
<UUFiles Include = "$(WinWin32Dir)mnsel.uu"/>
<UUFiles Include = "$(WinWin32Dir)mnselcnt.uu"/>
<UUFiles Include = "$(WinWin32Dir)mnunsel.uu"/>
<UUFiles Include = "$(WinWin32Dir)petmark.uu"/>
<UUFiles Include = "$(WinWin32Dir)pilemark.uu"/>
<UUFiles Include = "$(WinWin32Dir)splash.uu"/>
<UUFiles Include = "$(WinWin32Dir)rip.uu"/>
<UUFiles Include = "$(WinWin32Dir)record.uu"/>
</ItemGroup>
<ItemGroup>
<IconFiles Include = "$(WinWin32Dir)nethack.ico"/>
</ItemGroup>
<ItemGroup>
<RecordFiles Include = "$(WinWin32Dir)record"/>
</ItemGroup>
<ItemGroup>
<BmpFiles Include = "$(WinWin32Dir)mnsel.bmp"/>
<BmpFiles Include = "$(WinWin32Dir)mnselcnt.bmp"/>
<BmpFiles Include = "$(WinWin32Dir)mnunsel.bmp"/>
<BmpFiles Include = "$(WinWin32Dir)petmark.bmp"/>
<BmpFiles Include = "$(WinWin32Dir)pilemark.bmp"/>
<BmpFiles Include = "$(WinWin32Dir)rip.bmp"/>
<BmpFiles Include = "$(WinWin32Dir)splash.bmp"/>
</ItemGroup>
<ItemGroup>
<DlbList Include = "$(DatDir)data"/>
<DlbList Include = "$(DatDir)oracles"/>
<DlbList Include = "$(DatDir)options" Condition="Exists('$(DatDir)options')"/>
<DlbList Include = "$(DatDir)ttyoptions" Condition="Exists('$(DatDir)ttyoptions')"/>
<DlbList Include = "$(DatDir)guioptions" Condition="Exists('$(DatDir)guioptions')"/>
<DlbList Include = "$(DatDir)rumors"/>
<DlbList Include = "$(DatDir)engrave"/>
<DlbList Include = "$(DatDir)epitaph"/>
<DlbList Include = "$(DatDir)bogusmon"/>
<DlbList Include = "$(DatDir)tribute"/>
<DlbList Include = "$(DatDir)help"/>
<DlbList Include = "$(DatDir)porthelp"/>
<DlbList Include = "$(DatDir)hh"/>
<DlbList Include = "$(DatDir)cmdhelp"/>
<DlbList Include = "$(DatDir)keyhelp"/>
<DlbList Include = "$(DatDir)history"/>
<DlbList Include = "$(DatDir)opthelp"/>
<DlbList Include = "$(DatDir)wizhelp"/>
<DlbList Include = "$(DatDir)license"/>
<DlbList Include = "$(DatDir)*.lua"/>
</ItemGroup>
<ItemGroup>
<Lua Include="$(LuaDir)lapi.c"/>
<Lua Include="$(LuaDir)lauxlib.c" />
<Lua Include="$(LuaDir)lbaselib.c" />
<Lua Include="$(LuaDir)lbitlib.c" Condition="'$(LUA_MAJOR_VERSION).$(LUA_MINOR_VERSION)'=='5.3'" />
<Lua Include="$(LuaDir)lcode.c" />
<Lua Include="$(LuaDir)lcorolib.c" />
<Lua Include="$(LuaDir)lctype.c" />
<Lua Include="$(LuaDir)ldblib.c" />
<Lua Include="$(LuaDir)ldebug.c" />
<Lua Include="$(LuaDir)ldo.c" />
<Lua Include="$(LuaDir)ldump.c" />
<Lua Include="$(LuaDir)lfunc.c" />
<Lua Include="$(LuaDir)lgc.c" />
<Lua Include="$(LuaDir)linit.c" />
<Lua Include="$(LuaDir)liolib.c" />
<Lua Include="$(LuaDir)llex.c" />
<Lua Include="$(LuaDir)lmathlib.c" />
<Lua Include="$(LuaDir)lmem.c" />
<Lua Include="$(LuaDir)loadlib.c" />
<Lua Include="$(LuaDir)lobject.c" />
<Lua Include="$(LuaDir)lopcodes.c" />
<Lua Include="$(LuaDir)loslib.c" />
<Lua Include="$(LuaDir)lparser.c" />
<Lua Include="$(LuaDir)lstate.c" />
<Lua Include="$(LuaDir)lstring.c" />
<Lua Include="$(LuaDir)lstrlib.c" />
<Lua Include="$(LuaDir)ltable.c" />
<Lua Include="$(LuaDir)ltablib.c" />
<Lua Include="$(LuaDir)ltm.c" />
<Lua Include="$(LuaDir)lundump.c" />
<Lua Include="$(LuaDir)lutf8lib.c" />
<Lua Include="$(LuaDir)lvm.c" />
<Lua Include="$(LuaDir)lzio.c" />
</ItemGroup>
</Project>

Some files were not shown because too many files have changed in this diff Show More