1
0
Fork 0
mirror of https://github.com/k4zmu2a/SpaceCadetPinball.git synced 2024-11-22 17:00:18 +01:00

key mapper dialog, ready.

This commit is contained in:
oz 2020-12-13 16:05:19 +03:00
parent 2da95a2e8a
commit 12066963f0
8 changed files with 311 additions and 50 deletions

Binary file not shown.

View file

@ -212,26 +212,26 @@ BEGIN
LTEXT "Components:",176,2,3,43,8 LTEXT "Components:",176,2,3,43,8
END END
KEYMAPPER DIALOG 2, 9, 284, 183 KEYMAPPER DIALOGEX 2, 9, 284, 183
STYLE DS_SETFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION | WS_SYSMENU STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CAPTION | WS_SYSMENU
CAPTION "3D Pinball: Player Controls" CAPTION "3D Pinball: Player Controls"
FONT 8, "MS Shell Dlg" FONT 8, "MS Shell Dlg", 0, 0, 0x0
BEGIN BEGIN
PUSHBUTTON "OK",1,119,163,50,14 PUSHBUTTON "OK",KEYMAPPER_Ok,119,163,50,14
PUSHBUTTON "Cancel",2,173,163,50,14 PUSHBUTTON "Cancel",KEYMAPPER_Cancel,173,163,50,14
PUSHBUTTON "&Default",501,227,163,50,14 PUSHBUTTON "&Default",KEYMAPPER_Default,227,163,50,14
LTEXT "&Left Flipper",901,20,87,39,10 LTEXT "&Left Flipper",901,20,87,39,10
COMBOBOX 401,66,85,53,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX KEYMAPPER_FlipperL,66,85,53,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Right &Flipper",902,146,87,44,10 LTEXT "Right &Flipper",902,146,87,44,10
COMBOBOX 402,192,85,53,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX KEYMAPPER_FlipperR,192,85,53,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "Left &Table Bump",904,20,107,34,17 LTEXT "Left &Table Bump",904,20,107,34,17
COMBOBOX 404,66,108,53,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX KEYMAPPER_BumpLeft,66,108,53,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "&Right Table Bump",905,146,107,38,19 LTEXT "&Right Table Bump",905,146,107,38,19
COMBOBOX 405,192,108,53,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX KEYMAPPER_BumpRight,192,108,53,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "&BottomTable Bump",906,20,131,41,18 LTEXT "&BottomTable Bump",906,20,131,41,18
COMBOBOX 406,66,133,53,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX KEYMAPPER_BumpBottom,66,133,53,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "&Plunger",903,146,136,39,8 LTEXT "&Plunger",903,146,136,39,8
COMBOBOX 403,192,133,53,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP COMBOBOX KEYMAPPER_Plunger,192,133,53,70,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
LTEXT "To change game controls, choose the control options you want, click the Arrow buttons to change specific keys, and then choose OK.",801,14,17,249,18 LTEXT "To change game controls, choose the control options you want, click the Arrow buttons to change specific keys, and then choose OK.",801,14,17,249,18
LTEXT "To restore 3D Pinball to its original settings, choose Default, and then choose OK. To use the Arrow keys on the numeric keypad, make sure NUMLOCK is off.",802,14,38,256,25 LTEXT "To restore 3D Pinball to its original settings, choose Default, and then choose OK. To use the Arrow keys on the numeric keypad, make sure NUMLOCK is off.",802,14,38,256,25
GROUPBOX "Control Options",908,7,71,269,87 GROUPBOX "Control Options",908,7,71,269,87
@ -313,6 +313,10 @@ BEGIN
"DLG_HIGHSCORES", DIALOG "DLG_HIGHSCORES", DIALOG
BEGIN BEGIN
END END
"KEYMAPPER", DIALOG
BEGIN
END
END END
#endif // APSTUDIO_INVOKED #endif // APSTUDIO_INVOKED
@ -327,6 +331,11 @@ BEGIN
0 0
END END
KEYMAPPER AFX_DIALOG_LAYOUT
BEGIN
0
END
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// //

View file

@ -4,7 +4,6 @@
#include "fullscrn.h" #include "fullscrn.h"
#include "memory.h" #include "memory.h"
#include "options.h" #include "options.h"
#include "pinball.h"
#include "resource.h" #include "resource.h"
#include "winmain.h" #include "winmain.h"
@ -14,7 +13,7 @@ int high_score::position;
LPCSTR high_score::default_name; LPCSTR high_score::default_name;
high_score_struct* high_score::dlg_hst; high_score_struct* high_score::dlg_hst;
winhelp_entry high_score::winHelpArgs[21] winhelp_entry high_score::help[21]
{ {
winhelp_entry{0x70, 0x3E9}, winhelp_entry{0x70, 0x3E9},
winhelp_entry{0x191, 0x3EB}, winhelp_entry{0x191, 0x3EB},
@ -201,10 +200,11 @@ INT_PTR __stdcall high_score::HighScore(HWND hWnd, UINT msg, WPARAM wParam, LPAR
SendMessageA(hWnd, WM_COMMAND, WM_DESTROY, 0); SendMessageA(hWnd, WM_COMMAND, WM_DESTROY, 0);
break; break;
case WM_HELP: case WM_HELP:
WinHelpA(*(HWND*)(lParam + 12), "pinball.hlp", HELP_WM_HELP, (ULONG_PTR)winHelpArgs); WinHelpA(static_cast<HWND>(reinterpret_cast<HELPINFO*>(lParam)->hItemHandle), "pinball.hlp", HELP_WM_HELP,
(ULONG_PTR)help);
break; break;
case WM_CONTEXTMENU: case WM_CONTEXTMENU:
WinHelpA((HWND)wParam, "pinball.hlp", HELP_CONTEXTMENU, (ULONG_PTR)winHelpArgs); WinHelpA((HWND)wParam, "pinball.hlp", HELP_CONTEXTMENU, (ULONG_PTR)help);
break; break;
case WM_INITDIALOG: case WM_INITDIALOG:
show_high_scores(hWnd, dlg_hst); show_high_scores(hWnd, dlg_hst);

View file

@ -1,4 +1,5 @@
#pragma once #pragma once
#include "pinball.h"
struct high_score_struct struct high_score_struct
{ {
@ -6,12 +7,6 @@ struct high_score_struct
int Score; int Score;
}; };
struct winhelp_entry
{
int ControlId;
int ContextId;
};
class high_score class high_score
{ {
@ -34,5 +29,5 @@ private :
static int position; static int position;
static LPCSTR default_name; static LPCSTR default_name;
static high_score_struct* dlg_hst; static high_score_struct* dlg_hst;
static winhelp_entry winHelpArgs[21]; static winhelp_entry help[21];
}; };

View file

@ -4,7 +4,6 @@
#include "fullscrn.h" #include "fullscrn.h"
#include "memory.h" #include "memory.h"
#include "midi.h" #include "midi.h"
#include "pinball.h"
#include "resource.h" #include "resource.h"
#include "Sound.h" #include "Sound.h"
#include "winmain.h" #include "winmain.h"
@ -14,6 +13,60 @@ LPSTR options::OptionsRegPathCur;
HMENU options::MenuHandle; HMENU options::MenuHandle;
optionsStruct options::Options; optionsStruct options::Options;
winhelp_entry options::keymap_help[18]
{
winhelp_entry{0x1F5, 0x3EA},
winhelp_entry{0x191, 0x3EC},
winhelp_entry{0x192, 0x3ED},
winhelp_entry{0x193, 0x3F1},
winhelp_entry{0x194, 0x3EE},
winhelp_entry{0x195, 0x3EF},
winhelp_entry{0x196, 0x3F0},
winhelp_entry{0x385, 0x3EC},
winhelp_entry{0x386, 0x3ED},
winhelp_entry{0x387, 0x3F1},
winhelp_entry{0x388, 0x3EE},
winhelp_entry{0x389, 0x3EF},
winhelp_entry{0x38A, 0x3F0},
winhelp_entry{0x38C, -1},
winhelp_entry{0x38D, -1},
winhelp_entry{0x321, -1},
winhelp_entry{0x322, -1},
winhelp_entry{0, 0},
};
short options::vk_list[28]
{
0x8041,
0x5A,
0x8030,
0x39,
0x402E,
0x402F,
0x403B,
0x4027,
0x405B,
0x405D,
0x20,
0x0D,
0x9,
0x14,
0x25,
0x27,
0x26,
0x28,
0x2D,
0x2E,
0x24,
0x23,
0x21,
0x22,
0x90,
0x91,
0x13,
-1
};
void options::init(HMENU menuHandle) void options::init(HMENU menuHandle)
{ {
MenuHandle = menuHandle; MenuHandle = menuHandle;
@ -22,25 +75,25 @@ void options::init(HMENU menuHandle)
Options.FullScreen = 0; Options.FullScreen = 0;
Options.Average = 5; Options.Average = 5;
Options.PriorityAdj = 2; Options.PriorityAdj = 2;
Options.LeftFlipperKey2 = 90; Options.LeftFlipperKeyDft = 90;
Options.RightFlipperKey2 = 191; Options.RightFlipperKeyDft = 191;
Options.PlungerKey2 = 32; Options.PlungerKeyDft = 32;
Options.LeftTableBumpKey2 = 88; Options.LeftTableBumpKeyDft = 88;
Options.RightTableBumpKey2 = 190; Options.RightTableBumpKeyDft = 190;
Options.BottomTableBumpKey2 = 38; Options.BottomTableBumpKeyDft = 38;
pinball::get_rc_int(159, &Options.LeftFlipperKey2); pinball::get_rc_int(159, &Options.LeftFlipperKeyDft);
pinball::get_rc_int(160, &Options.RightFlipperKey2); pinball::get_rc_int(160, &Options.RightFlipperKeyDft);
pinball::get_rc_int(161, &Options.PlungerKey2); pinball::get_rc_int(161, &Options.PlungerKeyDft);
pinball::get_rc_int(162, &Options.LeftTableBumpKey2); pinball::get_rc_int(162, &Options.LeftTableBumpKeyDft);
pinball::get_rc_int(163, &Options.RightTableBumpKey2); pinball::get_rc_int(163, &Options.RightTableBumpKeyDft);
pinball::get_rc_int(164, &Options.BottomTableBumpKey2); pinball::get_rc_int(164, &Options.BottomTableBumpKeyDft);
Options.LeftFlipperKey = Options.LeftFlipperKey2; Options.LeftFlipperKey = Options.LeftFlipperKeyDft;
Options.RightFlipperKey = Options.RightFlipperKey2; Options.RightFlipperKey = Options.RightFlipperKeyDft;
Options.PlungerKey = Options.PlungerKey2; Options.PlungerKey = Options.PlungerKeyDft;
Options.LeftTableBumpKey = Options.LeftTableBumpKey2; Options.LeftTableBumpKey = Options.LeftTableBumpKeyDft;
Options.RightTableBumpKey = Options.RightTableBumpKey2; Options.RightTableBumpKey = Options.RightTableBumpKeyDft;
Options.Players = 1; Options.Players = 1;
Options.BottomTableBumpKey = Options.BottomTableBumpKey2; Options.BottomTableBumpKey = Options.BottomTableBumpKeyDft;
Options.Sounds = get_int(nullptr, "Sounds", Options.Sounds); Options.Sounds = get_int(nullptr, "Sounds", Options.Sounds);
Options.Music = get_int(nullptr, "Music", Options.Music); Options.Music = get_int(nullptr, "Music", Options.Music);
Options.Average = get_int(nullptr, "Average", Options.Average); Options.Average = get_int(nullptr, "Average", Options.Average);
@ -261,5 +314,189 @@ void options::keyboard()
INT_PTR _stdcall options::KeyMapDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) INT_PTR _stdcall options::KeyMapDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{ {
char keyName[20];
int keyBindings[6];
char rcString[256];
switch (msg)
{
case WM_HELP:
WinHelpA(static_cast<HWND>(reinterpret_cast<HELPINFO*>(lParam)->hItemHandle), "pinball.hlp", HELP_WM_HELP,
(ULONG_PTR)keymap_help);
return 1;
case WM_CONTEXTMENU:
WinHelpA((HWND)wParam, "pinball.hlp", HELP_CONTEXTMENU, (ULONG_PTR)keymap_help);
return 1;
case WM_INITDIALOG:
for (auto vkPtr = vk_list; *vkPtr != -1; vkPtr++)
{
short vk = *vkPtr;
auto vk2And = vk & 0x4000;
auto vkChar = static_cast<unsigned __int8>(vk);
unsigned short maxVk;
if (vk2And)
{
auto index = 128;
do
{
if (vkChar == MapVirtualKeyA(index, MAPVK_VK_TO_CHAR))
break;
++index;
}
while (index < 256);
if (index == 256)
{
continue;
}
keyName[0] = static_cast<char>(vkChar);
keyName[1] = 0;
vkChar = index;
maxVk = index;
}
else
{
if (vk >= 0)
{
maxVk = vkChar;
}
else
{
++vkPtr;
maxVk = *vkPtr;
}
if (vkChar > maxVk)
{
continue;
}
}
for (int curVK = vkChar; curVK <= maxVk; curVK++)
{
if (vk2And || get_vk_key_name(curVK, keyName))
{
auto ind = SendDlgItemMessageA(hDlg, KEYMAPPER_FlipperL,CB_INSERTSTRING, -1, (LPARAM)keyName);
SendDlgItemMessageA(hDlg, KEYMAPPER_FlipperL, CB_SETITEMDATA, ind, curVK);
if (curVK == Options.LeftFlipperKey)
SendDlgItemMessageA(hDlg, KEYMAPPER_FlipperL, CB_SETCURSEL, ind, 0);
ind = SendDlgItemMessageA(hDlg, KEYMAPPER_FlipperR, CB_INSERTSTRING, -1, (LPARAM)keyName);
SendDlgItemMessageA(hDlg, KEYMAPPER_FlipperR, CB_SETITEMDATA, ind, curVK);
if (curVK == Options.RightFlipperKey)
SendDlgItemMessageA(hDlg, KEYMAPPER_FlipperR, CB_SETCURSEL, ind, 0);
ind = SendDlgItemMessageA(hDlg, KEYMAPPER_Plunger, CB_INSERTSTRING, -1, (LPARAM)keyName);
SendDlgItemMessageA(hDlg, KEYMAPPER_Plunger, CB_SETITEMDATA, ind, curVK);
if (curVK == Options.PlungerKey)
SendDlgItemMessageA(hDlg, KEYMAPPER_Plunger, CB_SETCURSEL, ind, 0);
ind = SendDlgItemMessageA(hDlg, KEYMAPPER_BumpLeft, CB_INSERTSTRING, -1, (LPARAM)keyName);
SendDlgItemMessageA(hDlg, KEYMAPPER_BumpLeft, CB_SETITEMDATA, ind, curVK);
if (curVK == Options.LeftTableBumpKey)
SendDlgItemMessageA(hDlg, KEYMAPPER_BumpLeft, CB_SETCURSEL, ind, 0);
ind = SendDlgItemMessageA(hDlg, KEYMAPPER_BumpRight, CB_INSERTSTRING, -1, (LPARAM)keyName);
SendDlgItemMessageA(hDlg, KEYMAPPER_BumpRight, CB_SETITEMDATA, ind, curVK);
if (curVK == Options.RightTableBumpKey)
SendDlgItemMessageA(hDlg, KEYMAPPER_BumpRight, CB_SETCURSEL, ind, 0);
ind = SendDlgItemMessageA(hDlg, KEYMAPPER_BumpBottom, CB_INSERTSTRING, -1, (LPARAM)keyName);
SendDlgItemMessageA(hDlg, KEYMAPPER_BumpBottom, CB_SETITEMDATA, ind, curVK);
if (curVK == Options.BottomTableBumpKey)
SendDlgItemMessageA(hDlg, KEYMAPPER_BumpBottom, CB_SETCURSEL, ind, 0);
}
}
}
return 1;
case WM_COMMAND:
switch (wParam)
{
case KEYMAPPER_Ok:
{
auto ind = SendDlgItemMessageA(hDlg, KEYMAPPER_FlipperL, CB_GETCURSEL, 0, 0);
keyBindings[0] = SendDlgItemMessageA(hDlg, KEYMAPPER_FlipperL, CB_GETITEMDATA, ind, 0);
ind = SendDlgItemMessageA(hDlg, KEYMAPPER_FlipperR, CB_GETCURSEL, 0, 0);
keyBindings[1] = SendDlgItemMessageA(hDlg, KEYMAPPER_FlipperR, CB_GETITEMDATA, ind, 0);
ind = SendDlgItemMessageA(hDlg, KEYMAPPER_Plunger, CB_GETCURSEL, 0, 0);
keyBindings[2] = SendDlgItemMessageA(hDlg, KEYMAPPER_Plunger, CB_GETITEMDATA, ind, 0);
ind = SendDlgItemMessageA(hDlg, KEYMAPPER_BumpLeft, CB_GETCURSEL, 0, 0);
keyBindings[3] = SendDlgItemMessageA(hDlg, KEYMAPPER_BumpLeft, CB_GETITEMDATA, ind, 0);
ind = SendDlgItemMessageA(hDlg, KEYMAPPER_BumpRight, CB_GETCURSEL, 0, 0);
keyBindings[4] = SendDlgItemMessageA(hDlg, KEYMAPPER_BumpRight, CB_GETITEMDATA, ind, 0);
ind = SendDlgItemMessageA(hDlg, KEYMAPPER_BumpBottom, CB_GETCURSEL, 0, 0);
keyBindings[5] = SendDlgItemMessageA(hDlg, KEYMAPPER_BumpBottom, CB_GETITEMDATA, ind, 0);
auto sameKeyBound = 0;
auto index = 1;
auto optPtr = keyBindings;
while (!sameKeyBound)
{
for (auto keyInd = index; keyInd < 6; keyInd++)
{
if (sameKeyBound)
break;
if (*optPtr == keyBindings[keyInd])
{
lstrcpyA(rcString, pinball::get_rc_string(43, 0));
MessageBoxA(hDlg, pinball::get_rc_string(39, 0), rcString, 0x2000u);
sameKeyBound = 1;
}
}
++index;
++optPtr;
if (index - 1 >= 5)
{
if (sameKeyBound)
return 1;
Options.LeftFlipperKey = keyBindings[0];
Options.RightFlipperKey = keyBindings[1];
Options.PlungerKey = keyBindings[2];
Options.LeftTableBumpKey = keyBindings[3];
Options.RightTableBumpKey = keyBindings[4];
Options.BottomTableBumpKey = keyBindings[5];
EndDialog(hDlg, wParam);
return 1;
}
}
return 1;
}
case KEYMAPPER_Cancel:
EndDialog(hDlg, wParam);
return 1;
case KEYMAPPER_Default:
{
auto name = (LPARAM)get_vk_key_name(Options.LeftFlipperKeyDft, keyName);
auto ind = SendDlgItemMessageA(hDlg, KEYMAPPER_FlipperL, CB_FINDSTRINGEXACT, 0, name);
SendDlgItemMessageA(hDlg, KEYMAPPER_FlipperL, CB_SETCURSEL, ind, 0);
name = (LPARAM)get_vk_key_name(Options.RightFlipperKeyDft, keyName);
ind = SendDlgItemMessageA(hDlg, KEYMAPPER_FlipperR, CB_FINDSTRINGEXACT, 0, name);
SendDlgItemMessageA(hDlg, KEYMAPPER_FlipperR, CB_SETCURSEL, ind, 0);
name = (LPARAM)get_vk_key_name(Options.PlungerKeyDft, keyName);
ind = SendDlgItemMessageA(hDlg, KEYMAPPER_Plunger, CB_FINDSTRINGEXACT, 0, name);
SendDlgItemMessageA(hDlg, KEYMAPPER_Plunger, CB_SETCURSEL, ind, 0);
name = (LPARAM)get_vk_key_name(Options.LeftTableBumpKeyDft, keyName);
ind = SendDlgItemMessageA(hDlg, KEYMAPPER_BumpLeft, CB_FINDSTRINGEXACT, 0, name);
SendDlgItemMessageA(hDlg, KEYMAPPER_BumpLeft, CB_SETCURSEL, ind, 0);
name = (LPARAM)get_vk_key_name(Options.RightTableBumpKeyDft, keyName);
ind = SendDlgItemMessageA(hDlg, KEYMAPPER_BumpRight, CB_FINDSTRINGEXACT, 0, name);
SendDlgItemMessageA(hDlg, KEYMAPPER_BumpRight, CB_SETCURSEL, ind, 0);
name = (LPARAM)get_vk_key_name(Options.BottomTableBumpKeyDft, keyName);
ind = SendDlgItemMessageA(hDlg, KEYMAPPER_BumpBottom, CB_FINDSTRINGEXACT, 0, name);
SendDlgItemMessageA(hDlg, KEYMAPPER_BumpBottom, CB_SETCURSEL, ind, 0);
return 0;
}
default:
return 0;
}
default:
break;
}
return 0; return 0;
} }
LPSTR options::get_vk_key_name(unsigned __int16 vk, LPSTR keyName)
{
LONG scanCode = MapVirtualKeyA(vk, MAPVK_VK_TO_VSC) << 16;
if (vk >= 0x21u && vk <= 0x2Eu)
scanCode |= 0x1000000u;
return GetKeyNameTextA(scanCode, keyName, 19) != 0 ? keyName : nullptr;
}

View file

@ -1,4 +1,5 @@
#pragma once #pragma once
#include "pinball.h"
struct __declspec(align(4)) optionsStruct struct __declspec(align(4)) optionsStruct
{ {
@ -14,12 +15,12 @@ struct __declspec(align(4)) optionsStruct
int LeftTableBumpKey; int LeftTableBumpKey;
int RightTableBumpKey; int RightTableBumpKey;
int BottomTableBumpKey; int BottomTableBumpKey;
int LeftFlipperKey2; int LeftFlipperKeyDft;
int RightFlipperKey2; int RightFlipperKeyDft;
int PlungerKey2; int PlungerKeyDft;
int LeftTableBumpKey2; int LeftTableBumpKeyDft;
int RightTableBumpKey2; int RightTableBumpKeyDft;
int BottomTableBumpKey2; int BottomTableBumpKeyDft;
}; };
@ -37,8 +38,10 @@ public:
static void menu_check(UINT uIDCheckItem, int check); static void menu_check(UINT uIDCheckItem, int check);
static void menu_set(UINT uIDEnableItem, int enable); static void menu_set(UINT uIDEnableItem, int enable);
static void toggle(UINT uIDCheckItem); static void toggle(UINT uIDCheckItem);
static void keyboard(); static void keyboard();
static INT_PTR _stdcall KeyMapDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); static INT_PTR _stdcall KeyMapDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
static LPSTR get_vk_key_name(unsigned __int16 vk, LPSTR keyName);
static optionsStruct Options; static optionsStruct Options;
private: private:
@ -47,4 +50,6 @@ private:
static LPCSTR path(LPCSTR regPath); static LPCSTR path(LPCSTR regPath);
static void path_free(); static void path_free();
static HMENU MenuHandle; static HMENU MenuHandle;
static winhelp_entry keymap_help[18];
static short vk_list[28];
}; };

View file

@ -1,6 +1,12 @@
#pragma once #pragma once
#include "TTextBox.h" #include "TTextBox.h"
struct winhelp_entry
{
int ControlId;
int ContextId;
};
class pinball class pinball
{ {
public: public:

View file

@ -5,8 +5,10 @@
#define IDS_STRING101 0 #define IDS_STRING101 0
#define IDS_STRING102 1 #define IDS_STRING102 1
#define DLG_HIGHSCORES_Ok 1 #define DLG_HIGHSCORES_Ok 1
#define KEYMAPPER_Ok 1
#define IDS_STRING103 2 #define IDS_STRING103 2
#define DLG_HIGHSCORES_Cancel 2 #define DLG_HIGHSCORES_Cancel 2
#define KEYMAPPER_Cancel 2
#define IDS_STRING104 3 #define IDS_STRING104 3
#define IDS_STRING105 4 #define IDS_STRING105 4
#define IDS_STRING106 5 #define IDS_STRING106 5
@ -203,20 +205,27 @@
#define Menu1_Help_Topics 301 #define Menu1_Help_Topics 301
#define Menu1_Launch_Ball 401 #define Menu1_Launch_Ball 401
#define DLG_HIGHSCORES_StaticName1 401 #define DLG_HIGHSCORES_StaticName1 401
#define KEYMAPPER_FlipperL 401
#define Menu1_Pause_Resume_Game 402 #define Menu1_Pause_Resume_Game 402
#define DLG_HIGHSCORES_StaticName2 402 #define DLG_HIGHSCORES_StaticName2 402
#define KEYMAPPER_FlipperR 402
#define Menu1_Full_Screen 403 #define Menu1_Full_Screen 403
#define DLG_HIGHSCORES_StaticName3 403 #define DLG_HIGHSCORES_StaticName3 403
#define KEYMAPPER_Plunger 403
#define Menu1_Demo 404 #define Menu1_Demo 404
#define DLG_HIGHSCORES_StaticName4 404 #define DLG_HIGHSCORES_StaticName4 404
#define KEYMAPPER_BumpLeft 404
#define Menu1_Select_Table 405 #define Menu1_Select_Table 405
#define DLG_HIGHSCORES_StaticName5 405 #define DLG_HIGHSCORES_StaticName5 405
#define KEYMAPPER_BumpRight 405
#define Menu1_Player_Controls 406 #define Menu1_Player_Controls 406
#define KEYMAPPER_BumpBottom 406
#define Menu1_1Player 408 #define Menu1_1Player 408
#define Menu1_2Players 409 #define Menu1_2Players 409
#define Menu1_3Players 410 #define Menu1_3Players 410
#define Menu1_4Players 411 #define Menu1_4Players 411
#define DLG_HIGHSCORES_Score1 501 #define DLG_HIGHSCORES_Score1 501
#define KEYMAPPER_Default 501
#define DLG_HIGHSCORES_Score2 502 #define DLG_HIGHSCORES_Score2 502
#define DLG_HIGHSCORES_Score3 503 #define DLG_HIGHSCORES_Score3 503
#define DLG_HIGHSCORES_Score4 504 #define DLG_HIGHSCORES_Score4 504
@ -231,9 +240,9 @@
// //
#ifdef APSTUDIO_INVOKED #ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 203 #define _APS_NEXT_RESOURCE_VALUE 204
#define _APS_NEXT_COMMAND_VALUE 40004 #define _APS_NEXT_COMMAND_VALUE 40004
#define _APS_NEXT_CONTROL_VALUE 1001 #define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101 #define _APS_NEXT_SYMED_VALUE 102
#endif #endif
#endif #endif