- added ALT-keys support (except ALT-f and ALT-m which are menu
accelerators). [...] - added F4/F5 functionality - same as in MSDOS port F4 toggles between fitting the tiled display to the screen and full size (compresses the tiles to fit / uncompresses). F5 alternates between ascii and tiles. - added support for wc_vary_msgcount
This commit is contained in:
@@ -180,6 +180,7 @@ extern NEARDATA struct window_procs windowprocs;
|
|||||||
#define MAP_MODE_ASCII12x16 8
|
#define MAP_MODE_ASCII12x16 8
|
||||||
#define MAP_MODE_ASCII10x18 9
|
#define MAP_MODE_ASCII10x18 9
|
||||||
#define MAP_MODE_ASCII_FIT_TO_SCREEN 10
|
#define MAP_MODE_ASCII_FIT_TO_SCREEN 10
|
||||||
|
#define MAP_MODE_TILES_FIT_TO_SCREEN 11
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
#define WC_SND_SOUND 0x01L /* 01 Port has some sound capabilities */
|
#define WC_SND_SOUND 0x01L /* 01 Port has some sound capabilities */
|
||||||
|
|||||||
+117
-22
@@ -15,7 +15,7 @@
|
|||||||
#define MAX_LOADSTRING 100
|
#define MAX_LOADSTRING 100
|
||||||
|
|
||||||
typedef struct mswin_nethack_main_window {
|
typedef struct mswin_nethack_main_window {
|
||||||
int dummy;
|
int mapAcsiiModeSave;
|
||||||
} NHMainWindow, *PNHMainWindow;
|
} NHMainWindow, *PNHMainWindow;
|
||||||
|
|
||||||
static TCHAR szMainWindowClass[] = TEXT("MSNHMainWndClass");
|
static TCHAR szMainWindowClass[] = TEXT("MSNHMainWndClass");
|
||||||
@@ -125,11 +125,18 @@ numpad[KEY_LAST][3] = {
|
|||||||
{'.', ':', ':'} /* Del */
|
{'.', ':', ':'} /* Del */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const unsigned char alt_commands[] = "acdeijlnNopqrstuvw?2";
|
||||||
|
/* original: "acdefijlmnNopqrstuvw?2"; */
|
||||||
|
|
||||||
#define STATEON(x) ((GetKeyState(x) & 0xFFFE) != 0)
|
#define STATEON(x) ((GetKeyState(x) & 0xFFFE) != 0)
|
||||||
#define KEYTABLE(x) ((iflags.num_pad ? numpad : keypad)[x] \
|
#define KEYTABLE(x) ((iflags.num_pad ? numpad : keypad)[x] \
|
||||||
[(STATEON(VK_SHIFT) ? 1 : STATEON(VK_CONTROL) ? 2 : 0)])
|
[(STATEON(VK_SHIFT) ? 1 : STATEON(VK_CONTROL) ? 2 : 0)])
|
||||||
|
|
||||||
|
/* map mode macros */
|
||||||
|
#define IS_MAP_FIT_TO_SCREEN(mode) ((mode)==MAP_MODE_ASCII_FIT_TO_SCREEN || \
|
||||||
|
(mode)==MAP_MODE_TILES_FIT_TO_SCREEN )
|
||||||
|
|
||||||
|
#define IS_MAP_ASCII(mode) ((mode)!=MAP_MODE_TILES && (mode)!=MAP_MODE_TILES_FIT_TO_SCREEN)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
|
// FUNCTION: WndProc(HWND, unsigned, WORD, LONG)
|
||||||
@@ -147,6 +154,7 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar
|
|||||||
data = (PNHMainWindow)malloc(sizeof(NHMainWindow));
|
data = (PNHMainWindow)malloc(sizeof(NHMainWindow));
|
||||||
if( !data ) panic("out of memory");
|
if( !data ) panic("out of memory");
|
||||||
ZeroMemory(data, sizeof(NHMainWindow));
|
ZeroMemory(data, sizeof(NHMainWindow));
|
||||||
|
data->mapAcsiiModeSave = MAP_MODE_ASCII12x16;
|
||||||
SetWindowLong(hWnd, GWL_USERDATA, (LONG)data);
|
SetWindowLong(hWnd, GWL_USERDATA, (LONG)data);
|
||||||
|
|
||||||
GetNHApp()->hMainWnd = hWnd;
|
GetNHApp()->hMainWnd = hWnd;
|
||||||
@@ -158,11 +166,13 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar
|
|||||||
|
|
||||||
case WM_KEYDOWN:
|
case WM_KEYDOWN:
|
||||||
{
|
{
|
||||||
|
data = (PNHMainWindow)GetWindowLong(hWnd, GWL_USERDATA);
|
||||||
|
|
||||||
/* translate arrow keys into nethack commands */
|
/* translate arrow keys into nethack commands */
|
||||||
switch (wParam)
|
switch (wParam)
|
||||||
{
|
{
|
||||||
case VK_LEFT:
|
case VK_LEFT:
|
||||||
if( GetKeyState(VK_CONTROL)&0x80 ) {
|
if( STATEON(VK_CONTROL) ) {
|
||||||
/* scroll map window one line left */
|
/* scroll map window one line left */
|
||||||
SendMessage(
|
SendMessage(
|
||||||
mswin_hwnd_from_winid(WIN_MAP),
|
mswin_hwnd_from_winid(WIN_MAP),
|
||||||
@@ -176,7 +186,7 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case VK_RIGHT:
|
case VK_RIGHT:
|
||||||
if( GetKeyState(VK_CONTROL)&0x80 ) {
|
if( STATEON(VK_CONTROL) ) {
|
||||||
/* scroll map window one line right */
|
/* scroll map window one line right */
|
||||||
SendMessage(
|
SendMessage(
|
||||||
mswin_hwnd_from_winid(WIN_MAP),
|
mswin_hwnd_from_winid(WIN_MAP),
|
||||||
@@ -190,7 +200,7 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case VK_UP:
|
case VK_UP:
|
||||||
if( GetKeyState(VK_CONTROL)&0x80 ) {
|
if( STATEON(VK_CONTROL) ) {
|
||||||
/* scroll map window one line up */
|
/* scroll map window one line up */
|
||||||
SendMessage(
|
SendMessage(
|
||||||
mswin_hwnd_from_winid(WIN_MAP),
|
mswin_hwnd_from_winid(WIN_MAP),
|
||||||
@@ -204,7 +214,7 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case VK_DOWN:
|
case VK_DOWN:
|
||||||
if( GetKeyState(VK_CONTROL)&0x80 ) {
|
if( STATEON(VK_CONTROL) ) {
|
||||||
/* scroll map window one line down */
|
/* scroll map window one line down */
|
||||||
SendMessage(
|
SendMessage(
|
||||||
mswin_hwnd_from_winid(WIN_MAP),
|
mswin_hwnd_from_winid(WIN_MAP),
|
||||||
@@ -218,7 +228,7 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case VK_HOME:
|
case VK_HOME:
|
||||||
if( GetKeyState(VK_CONTROL)&0x80 ) {
|
if( STATEON(VK_CONTROL) ) {
|
||||||
/* scroll map window to upper left corner */
|
/* scroll map window to upper left corner */
|
||||||
SendMessage(
|
SendMessage(
|
||||||
mswin_hwnd_from_winid(WIN_MAP),
|
mswin_hwnd_from_winid(WIN_MAP),
|
||||||
@@ -239,7 +249,7 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case VK_END:
|
case VK_END:
|
||||||
if( GetKeyState(VK_CONTROL)&0x80 ) {
|
if( STATEON(VK_CONTROL) ) {
|
||||||
/* scroll map window to lower right corner */
|
/* scroll map window to lower right corner */
|
||||||
SendMessage(
|
SendMessage(
|
||||||
mswin_hwnd_from_winid(WIN_MAP),
|
mswin_hwnd_from_winid(WIN_MAP),
|
||||||
@@ -260,7 +270,7 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case VK_PRIOR:
|
case VK_PRIOR:
|
||||||
if( GetKeyState(VK_CONTROL)&0x80 ) {
|
if( STATEON(VK_CONTROL) ) {
|
||||||
/* scroll map window one page up */
|
/* scroll map window one page up */
|
||||||
SendMessage(
|
SendMessage(
|
||||||
mswin_hwnd_from_winid(WIN_MAP),
|
mswin_hwnd_from_winid(WIN_MAP),
|
||||||
@@ -274,7 +284,7 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case VK_NEXT:
|
case VK_NEXT:
|
||||||
if( GetKeyState(VK_CONTROL)&0x80 ) {
|
if( STATEON(VK_CONTROL) ) {
|
||||||
/* scroll map window one page down */
|
/* scroll map window one page down */
|
||||||
SendMessage(
|
SendMessage(
|
||||||
mswin_hwnd_from_winid(WIN_MAP),
|
mswin_hwnd_from_winid(WIN_MAP),
|
||||||
@@ -305,12 +315,36 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar
|
|||||||
NHEVENT_KBD(KEYTABLE(KEY_PLUS));
|
NHEVENT_KBD(KEYTABLE(KEY_PLUS));
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case VK_F3:
|
case VK_F4:
|
||||||
mswin_select_map_mode(MAP_MODE_TILES);
|
if( IS_MAP_FIT_TO_SCREEN(iflags.wc_map_mode) ) {
|
||||||
|
mswin_select_map_mode(
|
||||||
|
IS_MAP_ASCII(iflags.wc_map_mode)?
|
||||||
|
data->mapAcsiiModeSave :
|
||||||
|
MAP_MODE_TILES
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
mswin_select_map_mode(
|
||||||
|
IS_MAP_ASCII(iflags.wc_map_mode)?
|
||||||
|
MAP_MODE_ASCII_FIT_TO_SCREEN :
|
||||||
|
MAP_MODE_TILES_FIT_TO_SCREEN
|
||||||
|
);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case VK_F4:
|
case VK_F5:
|
||||||
mswin_select_map_mode(MAP_MODE_ASCII_FIT_TO_SCREEN);
|
if( IS_MAP_ASCII(iflags.wc_map_mode) ) {
|
||||||
|
if( IS_MAP_FIT_TO_SCREEN(iflags.wc_map_mode) ) {
|
||||||
|
mswin_select_map_mode(MAP_MODE_TILES_FIT_TO_SCREEN);
|
||||||
|
} else {
|
||||||
|
mswin_select_map_mode(MAP_MODE_TILES);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if( IS_MAP_FIT_TO_SCREEN(iflags.wc_map_mode) ) {
|
||||||
|
mswin_select_map_mode(MAP_MODE_ASCII_FIT_TO_SCREEN);
|
||||||
|
} else {
|
||||||
|
mswin_select_map_mode(data->mapAcsiiModeSave);
|
||||||
|
}
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
default: {
|
default: {
|
||||||
@@ -332,6 +366,25 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPar
|
|||||||
} /* end switch */
|
} /* end switch */
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
case WM_SYSKEYDOWN:
|
||||||
|
{
|
||||||
|
/* see if this is something we need */
|
||||||
|
WORD c;
|
||||||
|
BYTE kbd_state[256];
|
||||||
|
|
||||||
|
c = 0;
|
||||||
|
ZeroMemory(kbd_state, sizeof(kbd_state));
|
||||||
|
GetKeyboardState(kbd_state);
|
||||||
|
|
||||||
|
if( ToAscii( wParam, (lParam>>16)&0xFF, kbd_state, &c, 0) &&
|
||||||
|
index(alt_commands, c&0xFF) ) {
|
||||||
|
NHEVENT_KBD( M(c&0xFF) );
|
||||||
|
return 0;
|
||||||
|
} else {
|
||||||
|
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
|
||||||
case WM_COMMAND:
|
case WM_COMMAND:
|
||||||
/* process commands - menu commands mostly */
|
/* process commands - menu commands mostly */
|
||||||
if( onWMCommand(hWnd, wParam, lParam) )
|
if( onWMCommand(hWnd, wParam, lParam) )
|
||||||
@@ -573,7 +626,9 @@ void mswin_layout_main_window(HWND changed_child)
|
|||||||
LRESULT onWMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
LRESULT onWMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
int wmId, wmEvent;
|
int wmId, wmEvent;
|
||||||
|
PNHMainWindow data;
|
||||||
|
|
||||||
|
data = (PNHMainWindow)GetWindowLong(hWnd, GWL_USERDATA);
|
||||||
wmId = LOWORD(wParam);
|
wmId = LOWORD(wParam);
|
||||||
wmEvent = HIWORD(wParam);
|
wmEvent = HIWORD(wParam);
|
||||||
|
|
||||||
@@ -602,10 +657,25 @@ LRESULT onWMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
|||||||
case IDM_MAP_ASCII12X16:
|
case IDM_MAP_ASCII12X16:
|
||||||
case IDM_MAP_ASCII16X12:
|
case IDM_MAP_ASCII16X12:
|
||||||
case IDM_MAP_ASCII10X18:
|
case IDM_MAP_ASCII10X18:
|
||||||
case IDM_MAP_FIT_TO_SCREEN:
|
|
||||||
mswin_select_map_mode(menuid2mapmode(wmId));
|
mswin_select_map_mode(menuid2mapmode(wmId));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case IDM_MAP_FIT_TO_SCREEN:
|
||||||
|
if( IS_MAP_FIT_TO_SCREEN(iflags.wc_map_mode) ) {
|
||||||
|
mswin_select_map_mode(
|
||||||
|
IS_MAP_ASCII(iflags.wc_map_mode)?
|
||||||
|
data->mapAcsiiModeSave :
|
||||||
|
MAP_MODE_TILES
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
mswin_select_map_mode(
|
||||||
|
IS_MAP_ASCII(iflags.wc_map_mode)?
|
||||||
|
MAP_MODE_ASCII_FIT_TO_SCREEN :
|
||||||
|
MAP_MODE_TILES_FIT_TO_SCREEN
|
||||||
|
);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case IDM_HELP_LONG:
|
case IDM_HELP_LONG:
|
||||||
display_file(HELP, TRUE);
|
display_file(HELP, TRUE);
|
||||||
break;
|
break;
|
||||||
@@ -704,18 +774,43 @@ LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
|
|
||||||
void mswin_select_map_mode(int mode)
|
void mswin_select_map_mode(int mode)
|
||||||
{
|
{
|
||||||
CheckMenuRadioItem(
|
PNHMainWindow data;
|
||||||
GetMenu(GetNHApp()->hMainWnd),
|
data = (PNHMainWindow)GetWindowLong(GetNHApp()->hMainWnd, GWL_USERDATA);
|
||||||
IDM_MAP_TILES,
|
|
||||||
IDM_MAP_FIT_TO_SCREEN,
|
|
||||||
mapmode2menuid(mode),
|
|
||||||
MF_BYCOMMAND);
|
|
||||||
|
|
||||||
/* override for Rogue level */
|
/* override for Rogue level */
|
||||||
#ifdef REINCARNATION
|
#ifdef REINCARNATION
|
||||||
if( Is_rogue_level(&u.uz) ) return;
|
if( Is_rogue_level(&u.uz) && !IS_MAP_ASCII(mode) ) return;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* set map mode menu mark */
|
||||||
|
if( IS_MAP_ASCII(mode) ) {
|
||||||
|
CheckMenuRadioItem(
|
||||||
|
GetMenu(GetNHApp()->hMainWnd),
|
||||||
|
IDM_MAP_TILES,
|
||||||
|
IDM_MAP_ASCII10X18,
|
||||||
|
mapmode2menuid( IS_MAP_FIT_TO_SCREEN(mode)? data->mapAcsiiModeSave : mode ),
|
||||||
|
MF_BYCOMMAND);
|
||||||
|
} else {
|
||||||
|
CheckMenuRadioItem(
|
||||||
|
GetMenu(GetNHApp()->hMainWnd),
|
||||||
|
IDM_MAP_TILES,
|
||||||
|
IDM_MAP_ASCII10X18,
|
||||||
|
mapmode2menuid( MAP_MODE_TILES ),
|
||||||
|
MF_BYCOMMAND);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* set fit-to-screen mode mark */
|
||||||
|
CheckMenuItem(
|
||||||
|
GetMenu(GetNHApp()->hMainWnd),
|
||||||
|
IDM_MAP_FIT_TO_SCREEN,
|
||||||
|
MF_BYCOMMAND |
|
||||||
|
(IS_MAP_FIT_TO_SCREEN(mode)? MF_CHECKED : MF_UNCHECKED)
|
||||||
|
);
|
||||||
|
|
||||||
|
if( IS_MAP_ASCII(iflags.wc_map_mode) && !IS_MAP_FIT_TO_SCREEN(iflags.wc_map_mode)) {
|
||||||
|
data->mapAcsiiModeSave = iflags.wc_map_mode;
|
||||||
|
}
|
||||||
|
|
||||||
iflags.wc_map_mode = mode;
|
iflags.wc_map_mode = mode;
|
||||||
mswin_map_mode(mswin_hwnd_from_winid(WIN_MAP), mode);
|
mswin_map_mode(mswin_hwnd_from_winid(WIN_MAP), mode);
|
||||||
}
|
}
|
||||||
|
|||||||
+27
-5
@@ -20,6 +20,7 @@ typedef struct mswin_nethack_map_window {
|
|||||||
|
|
||||||
int mapMode; /* current map mode */
|
int mapMode; /* current map mode */
|
||||||
boolean bAsciiMode; /* switch ASCII/tiled mode */
|
boolean bAsciiMode; /* switch ASCII/tiled mode */
|
||||||
|
boolean bFitToScreenMode; /* switch Fit map to screen mode on/off */
|
||||||
int xPos, yPos; /* scroll position */
|
int xPos, yPos; /* scroll position */
|
||||||
int xPageSize, yPageSize; /* scroll page size */
|
int xPageSize, yPageSize; /* scroll page size */
|
||||||
int xCur, yCur; /* position of the cursor */
|
int xCur, yCur; /* position of the cursor */
|
||||||
@@ -91,8 +92,8 @@ void mswin_map_stretch(HWND hWnd, LPSIZE lpsz, BOOL redraw)
|
|||||||
|
|
||||||
/* set new screen tile size */
|
/* set new screen tile size */
|
||||||
data = (PNHMapWindow)GetWindowLong(hWnd, GWL_USERDATA);
|
data = (PNHMapWindow)GetWindowLong(hWnd, GWL_USERDATA);
|
||||||
data->xScrTile = ((data->mapMode==MAP_MODE_ASCII_FIT_TO_SCREEN)? wnd_size.cx : lpsz->cx) / COLNO;
|
data->xScrTile = (data->bFitToScreenMode? wnd_size.cx : lpsz->cx) / COLNO;
|
||||||
data->yScrTile = ((data->mapMode==MAP_MODE_ASCII_FIT_TO_SCREEN)? wnd_size.cy : lpsz->cy) / ROWNO;
|
data->yScrTile = (data->bFitToScreenMode? wnd_size.cy : lpsz->cy) / ROWNO;
|
||||||
|
|
||||||
/* set map origin point */
|
/* set map origin point */
|
||||||
data->map_orig.x = max(0, client_rt.left + (wnd_size.cx - data->xScrTile*COLNO)/2 );
|
data->map_orig.x = max(0, client_rt.left + (wnd_size.cx - data->xScrTile*COLNO)/2 );
|
||||||
@@ -102,7 +103,7 @@ void mswin_map_stretch(HWND hWnd, LPSIZE lpsz, BOOL redraw)
|
|||||||
data->map_orig.y -= data->map_orig.y % data->yScrTile;
|
data->map_orig.y -= data->map_orig.y % data->yScrTile;
|
||||||
|
|
||||||
/* adjust horizontal scroll bar */
|
/* adjust horizontal scroll bar */
|
||||||
if( data->mapMode==MAP_MODE_ASCII_FIT_TO_SCREEN )
|
if( data->bFitToScreenMode )
|
||||||
data->xPageSize = COLNO+1; /* disable scroll bar */
|
data->xPageSize = COLNO+1; /* disable scroll bar */
|
||||||
else
|
else
|
||||||
data->xPageSize = wnd_size.cx/data->xScrTile;
|
data->xPageSize = wnd_size.cx/data->xScrTile;
|
||||||
@@ -124,7 +125,7 @@ void mswin_map_stretch(HWND hWnd, LPSIZE lpsz, BOOL redraw)
|
|||||||
SetScrollInfo(hWnd, SB_HORZ, &si, TRUE);
|
SetScrollInfo(hWnd, SB_HORZ, &si, TRUE);
|
||||||
|
|
||||||
/* adjust vertical scroll bar */
|
/* adjust vertical scroll bar */
|
||||||
if( data->mapMode==MAP_MODE_ASCII_FIT_TO_SCREEN )
|
if( data->bFitToScreenMode )
|
||||||
data->yPageSize = ROWNO+1; /* disable scroll bar */
|
data->yPageSize = ROWNO+1; /* disable scroll bar */
|
||||||
else
|
else
|
||||||
data->yPageSize = wnd_size.cy/data->yScrTile;
|
data->yPageSize = wnd_size.cy/data->yScrTile;
|
||||||
@@ -186,54 +187,63 @@ int mswin_map_mode(HWND hWnd, int mode)
|
|||||||
|
|
||||||
case MAP_MODE_ASCII4x6:
|
case MAP_MODE_ASCII4x6:
|
||||||
data->bAsciiMode = TRUE;
|
data->bAsciiMode = TRUE;
|
||||||
|
data->bFitToScreenMode = FALSE;
|
||||||
mapSize.cx = 4*COLNO;
|
mapSize.cx = 4*COLNO;
|
||||||
mapSize.cy = 6*ROWNO;
|
mapSize.cy = 6*ROWNO;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MAP_MODE_ASCII6x8:
|
case MAP_MODE_ASCII6x8:
|
||||||
data->bAsciiMode = TRUE;
|
data->bAsciiMode = TRUE;
|
||||||
|
data->bFitToScreenMode = FALSE;
|
||||||
mapSize.cx = 6*COLNO;
|
mapSize.cx = 6*COLNO;
|
||||||
mapSize.cy = 8*ROWNO;
|
mapSize.cy = 8*ROWNO;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MAP_MODE_ASCII8x8:
|
case MAP_MODE_ASCII8x8:
|
||||||
data->bAsciiMode = TRUE;
|
data->bAsciiMode = TRUE;
|
||||||
|
data->bFitToScreenMode = FALSE;
|
||||||
mapSize.cx = 8*COLNO;
|
mapSize.cx = 8*COLNO;
|
||||||
mapSize.cy = 8*ROWNO;
|
mapSize.cy = 8*ROWNO;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MAP_MODE_ASCII16x8:
|
case MAP_MODE_ASCII16x8:
|
||||||
data->bAsciiMode = TRUE;
|
data->bAsciiMode = TRUE;
|
||||||
|
data->bFitToScreenMode = FALSE;
|
||||||
mapSize.cx = 16*COLNO;
|
mapSize.cx = 16*COLNO;
|
||||||
mapSize.cy = 8*ROWNO;
|
mapSize.cy = 8*ROWNO;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MAP_MODE_ASCII7x12:
|
case MAP_MODE_ASCII7x12:
|
||||||
data->bAsciiMode = TRUE;
|
data->bAsciiMode = TRUE;
|
||||||
|
data->bFitToScreenMode = FALSE;
|
||||||
mapSize.cx = 7*COLNO;
|
mapSize.cx = 7*COLNO;
|
||||||
mapSize.cy = 12*ROWNO;
|
mapSize.cy = 12*ROWNO;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MAP_MODE_ASCII8x12:
|
case MAP_MODE_ASCII8x12:
|
||||||
data->bAsciiMode = TRUE;
|
data->bAsciiMode = TRUE;
|
||||||
|
data->bFitToScreenMode = FALSE;
|
||||||
mapSize.cx = 8*COLNO;
|
mapSize.cx = 8*COLNO;
|
||||||
mapSize.cy = 12*ROWNO;
|
mapSize.cy = 12*ROWNO;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MAP_MODE_ASCII16x12:
|
case MAP_MODE_ASCII16x12:
|
||||||
data->bAsciiMode = TRUE;
|
data->bAsciiMode = TRUE;
|
||||||
|
data->bFitToScreenMode = FALSE;
|
||||||
mapSize.cx = 16*COLNO;
|
mapSize.cx = 16*COLNO;
|
||||||
mapSize.cy = 12*ROWNO;
|
mapSize.cy = 12*ROWNO;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MAP_MODE_ASCII12x16:
|
case MAP_MODE_ASCII12x16:
|
||||||
data->bAsciiMode = TRUE;
|
data->bAsciiMode = TRUE;
|
||||||
|
data->bFitToScreenMode = FALSE;
|
||||||
mapSize.cx = 12*COLNO;
|
mapSize.cx = 12*COLNO;
|
||||||
mapSize.cy = 16*ROWNO;
|
mapSize.cy = 16*ROWNO;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MAP_MODE_ASCII10x18:
|
case MAP_MODE_ASCII10x18:
|
||||||
data->bAsciiMode = TRUE;
|
data->bAsciiMode = TRUE;
|
||||||
|
data->bFitToScreenMode = FALSE;
|
||||||
mapSize.cx = 10*COLNO;
|
mapSize.cx = 10*COLNO;
|
||||||
mapSize.cy = 18*ROWNO;
|
mapSize.cy = 18*ROWNO;
|
||||||
break;
|
break;
|
||||||
@@ -245,11 +255,23 @@ int mswin_map_mode(HWND hWnd, int mode)
|
|||||||
mapSize.cy = client_rt.bottom - client_rt.top;
|
mapSize.cy = client_rt.bottom - client_rt.top;
|
||||||
|
|
||||||
data->bAsciiMode = TRUE;
|
data->bAsciiMode = TRUE;
|
||||||
|
data->bFitToScreenMode = TRUE;
|
||||||
|
} break;
|
||||||
|
|
||||||
|
case MAP_MODE_TILES_FIT_TO_SCREEN: {
|
||||||
|
RECT client_rt;
|
||||||
|
GetClientRect(hWnd, &client_rt);
|
||||||
|
mapSize.cx = client_rt.right - client_rt.left;
|
||||||
|
mapSize.cy = client_rt.bottom - client_rt.top;
|
||||||
|
|
||||||
|
data->bAsciiMode = FALSE;
|
||||||
|
data->bFitToScreenMode = TRUE;
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case MAP_MODE_TILES:
|
case MAP_MODE_TILES:
|
||||||
default:
|
default:
|
||||||
data->bAsciiMode = FALSE;
|
data->bAsciiMode = FALSE;
|
||||||
|
data->bFitToScreenMode = FALSE;
|
||||||
mapSize.cx = GetNHApp()->mapTile_X*COLNO;
|
mapSize.cx = GetNHApp()->mapTile_X*COLNO;
|
||||||
mapSize.cy = GetNHApp()->mapTile_Y*ROWNO;
|
mapSize.cy = GetNHApp()->mapTile_Y*ROWNO;
|
||||||
break;
|
break;
|
||||||
@@ -320,7 +342,7 @@ LRESULT CALLBACK MapWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPara
|
|||||||
{
|
{
|
||||||
SIZE size;
|
SIZE size;
|
||||||
|
|
||||||
if( data->mapMode == MAP_MODE_ASCII_FIT_TO_SCREEN ) {
|
if( data->bFitToScreenMode ) {
|
||||||
size.cx = LOWORD(lParam);
|
size.cx = LOWORD(lParam);
|
||||||
size.cy = HIWORD(lParam);
|
size.cy = HIWORD(lParam);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
#define MSG_WRAP_TEXT
|
#define MSG_WRAP_TEXT
|
||||||
|
|
||||||
#define MSG_VISIBLE_LINES 4
|
#define MSG_VISIBLE_LINES max(iflags.wc_vary_msgcount, 2)
|
||||||
#define MAX_MSG_LINES 32
|
#define MAX_MSG_LINES 32
|
||||||
#define MSG_LINES (int)min(iflags.msg_history, MAX_MSG_LINES)
|
#define MSG_LINES (int)min(iflags.msg_history, MAX_MSG_LINES)
|
||||||
#define MAXWINDOWTEXT 200
|
#define MAXWINDOWTEXT 200
|
||||||
|
|||||||
+11
-2
@@ -40,7 +40,7 @@ struct window_procs mswin_procs = {
|
|||||||
WC_INVERSE|WC_SCROLL_MARGIN|WC_MAP_MODE|
|
WC_INVERSE|WC_SCROLL_MARGIN|WC_MAP_MODE|
|
||||||
WC_FONT_MESSAGE|WC_FONT_STATUS|WC_FONT_MENU|WC_FONT_TEXT|
|
WC_FONT_MESSAGE|WC_FONT_STATUS|WC_FONT_MENU|WC_FONT_TEXT|
|
||||||
WC_FONTSIZ_MESSAGE|WC_FONTSIZ_STATUS|WC_FONTSIZ_MENU|WC_FONTSIZ_TEXT|
|
WC_FONTSIZ_MESSAGE|WC_FONTSIZ_STATUS|WC_FONTSIZ_MENU|WC_FONTSIZ_TEXT|
|
||||||
WC_TILE_WIDTH|WC_TILE_HEIGHT|WC_TILE_FILE,
|
WC_TILE_WIDTH|WC_TILE_HEIGHT|WC_TILE_FILE|WC_VARY_MSGCOUNT,
|
||||||
mswin_init_nhwindows,
|
mswin_init_nhwindows,
|
||||||
mswin_player_selection,
|
mswin_player_selection,
|
||||||
mswin_askname,
|
mswin_askname,
|
||||||
@@ -143,6 +143,8 @@ void mswin_init_nhwindows(int* argc, char** argv)
|
|||||||
if( iflags.wc_tile_width==0 ) iflags.wc_tile_width = TILE_X;
|
if( iflags.wc_tile_width==0 ) iflags.wc_tile_width = TILE_X;
|
||||||
if( iflags.wc_tile_height==0 ) iflags.wc_tile_height = TILE_Y;
|
if( iflags.wc_tile_height==0 ) iflags.wc_tile_height = TILE_Y;
|
||||||
|
|
||||||
|
if( iflags.wc_vary_msgcount==0 ) iflags.wc_vary_msgcount = 4;
|
||||||
|
|
||||||
/* force tabs in menus */
|
/* force tabs in menus */
|
||||||
iflags.menu_tab_sep = 1;
|
iflags.menu_tab_sep = 1;
|
||||||
|
|
||||||
@@ -168,7 +170,8 @@ void mswin_init_nhwindows(int* argc, char** argv)
|
|||||||
WC_FONTSIZ_MESSAGE |
|
WC_FONTSIZ_MESSAGE |
|
||||||
WC_FONTSIZ_STATUS |
|
WC_FONTSIZ_STATUS |
|
||||||
WC_FONTSIZ_MENU |
|
WC_FONTSIZ_MENU |
|
||||||
WC_FONTSIZ_TEXT,
|
WC_FONTSIZ_TEXT |
|
||||||
|
WC_VARY_MSGCOUNT,
|
||||||
SET_IN_GAME
|
SET_IN_GAME
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -1181,6 +1184,12 @@ void mswin_preference_update(const char *pref)
|
|||||||
mswin_layout_main_window(NULL);
|
mswin_layout_main_window(NULL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( stricmp( pref, "vary_msgcount")==0 ) {
|
||||||
|
InvalidateRect(mswin_hwnd_from_winid(WIN_MESSAGE), NULL, TRUE);
|
||||||
|
mswin_layout_main_window(NULL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,8 @@ BEGIN
|
|||||||
MENUITEM "&7 - ASCII (16x12)", IDM_MAP_ASCII16X12
|
MENUITEM "&7 - ASCII (16x12)", IDM_MAP_ASCII16X12
|
||||||
MENUITEM "&8 - ASCII (12x16)", IDM_MAP_ASCII12X16
|
MENUITEM "&8 - ASCII (12x16)", IDM_MAP_ASCII12X16
|
||||||
MENUITEM "&9 - ASCII (10x18)", IDM_MAP_ASCII10X18
|
MENUITEM "&9 - ASCII (10x18)", IDM_MAP_ASCII10X18
|
||||||
MENUITEM "&Fit To Screen (ASCII only)", IDM_MAP_FIT_TO_SCREEN
|
MENUITEM SEPARATOR
|
||||||
|
MENUITEM "&Fit To Screen ", IDM_MAP_FIT_TO_SCREEN
|
||||||
END
|
END
|
||||||
POPUP "&Help"
|
POPUP "&Help"
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|||||||
Reference in New Issue
Block a user