Win32GUI: Changes to player selection dialog.
Significant changes to player selection dialog that attempt to match recently made changes to the Qt and X11 window ports.
This commit is contained in:
committed by
Pasi Kallinen
parent
a588541a27
commit
3d2e59ecec
+427
-447
@@ -10,6 +10,8 @@
|
|||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
#include "mhdlg.h"
|
#include "mhdlg.h"
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
/*---------------------------------------------------------------*/
|
/*---------------------------------------------------------------*/
|
||||||
/* data for getlin dialog */
|
/* data for getlin dialog */
|
||||||
struct getlin_data {
|
struct getlin_data {
|
||||||
@@ -256,34 +258,51 @@ ExtCmdDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------*/
|
/*---------------------------------------------------------------*/
|
||||||
/* player selector dialog data */
|
/* player selector dialog */
|
||||||
struct plsel_data {
|
typedef struct plsel_data {
|
||||||
int *selection;
|
int config_race;
|
||||||
};
|
int config_role;
|
||||||
|
int config_gender;
|
||||||
|
int config_alignment;
|
||||||
|
HWND control_role;
|
||||||
|
HWND control_race;
|
||||||
|
HWND control_genders[ROLE_GENDERS];
|
||||||
|
HWND control_aligns[ROLE_ALIGNS];
|
||||||
|
int role_count;
|
||||||
|
int race_count;
|
||||||
|
HWND focus;
|
||||||
|
} plsel_data_t;
|
||||||
|
|
||||||
INT_PTR CALLBACK PlayerSelectorDlgProc(HWND, UINT, WPARAM, LPARAM);
|
INT_PTR CALLBACK PlayerSelectorDlgProc(HWND, UINT, WPARAM, LPARAM);
|
||||||
static void plselInitDialog(HWND hWnd);
|
static void plselInitDialog(HWND hWnd);
|
||||||
static void plselAdjustLists(HWND hWnd, int changed_opt);
|
static void plselAdjustSelections(HWND hWnd);
|
||||||
static int plselFinalSelection(HWND hWnd, int *selection);
|
static boolean plselRandomize(plsel_data_t * data);
|
||||||
|
static BOOL plselDrawItem(HWND hWnd, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
int
|
boolean
|
||||||
mswin_player_selection_window(int *selection)
|
mswin_player_selection_window()
|
||||||
{
|
{
|
||||||
INT_PTR ret;
|
INT_PTR ret;
|
||||||
struct plsel_data data;
|
plsel_data_t data;
|
||||||
|
boolean ok = TRUE;
|
||||||
|
|
||||||
/* init dialog data */
|
/* save away configuration settings */
|
||||||
ZeroMemory(&data, sizeof(data));
|
data.config_role = flags.initrole;
|
||||||
data.selection = selection;
|
data.config_race = flags.initrace;
|
||||||
|
data.config_gender = flags.initgend;
|
||||||
|
data.config_alignment = flags.initalign;
|
||||||
|
|
||||||
/* create modal dialog */
|
if (!plselRandomize(&data)) {
|
||||||
ret = DialogBoxParam(
|
/* create modal dialog */
|
||||||
GetNHApp()->hApp, MAKEINTRESOURCE(IDD_PLAYER_SELECTOR),
|
ret = DialogBoxParam(
|
||||||
GetNHApp()->hMainWnd, PlayerSelectorDlgProc, (LPARAM) &data);
|
GetNHApp()->hApp, MAKEINTRESOURCE(IDD_PLAYER_SELECTOR),
|
||||||
if (ret == -1)
|
GetNHApp()->hMainWnd, PlayerSelectorDlgProc, (LPARAM) &data);
|
||||||
panic("Cannot create getlin window");
|
if (ret == -1)
|
||||||
|
panic("Cannot create getlin window");
|
||||||
|
ok = (ret == IDOK);
|
||||||
|
}
|
||||||
|
|
||||||
return (int) ret;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
INT_PTR CALLBACK
|
INT_PTR CALLBACK
|
||||||
@@ -315,11 +334,94 @@ PlayerSelectorDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
/* init dialog */
|
/* init dialog */
|
||||||
plselInitDialog(hWnd);
|
plselInitDialog(hWnd);
|
||||||
|
|
||||||
/* set focus on the role checkbox (random) field */
|
/* tell windows to set the focus */
|
||||||
SetFocus(GetDlgItem(hWnd, IDC_PLSEL_ROLE_RANDOM));
|
return TRUE;
|
||||||
|
break;
|
||||||
|
|
||||||
/* tell windows we set the focus */
|
case WM_DRAWITEM:
|
||||||
return FALSE;
|
if (wParam == IDC_PLSEL_ROLE_LIST || wParam == IDC_PLSEL_RACE_LIST)
|
||||||
|
return plselDrawItem(hWnd, wParam, lParam);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_NOTIFY:
|
||||||
|
{
|
||||||
|
LPNMHDR nmhdr = (LPNMHDR)lParam;
|
||||||
|
HWND control = nmhdr->hwndFrom;
|
||||||
|
|
||||||
|
data = (struct plsel_data *) GetWindowLongPtr(hWnd, GWLP_USERDATA);
|
||||||
|
|
||||||
|
switch (nmhdr->code) {
|
||||||
|
case LVN_KEYDOWN:
|
||||||
|
{
|
||||||
|
LPNMLVKEYDOWN lpnmkeydown = (LPNMLVKEYDOWN) lParam;
|
||||||
|
|
||||||
|
if (lpnmkeydown->wVKey == ' ') {
|
||||||
|
if (control == data->control_role) {
|
||||||
|
int i = ListView_GetNextItem(data->control_role, -1, LVNI_FOCUSED);
|
||||||
|
assert(i == -1 || ListView_GetNextItem(data->control_role, i, LVNI_FOCUSED) == -1);
|
||||||
|
flags.initrole = i;
|
||||||
|
plselAdjustSelections(hWnd);
|
||||||
|
} else if (control == data->control_race) {
|
||||||
|
int i = ListView_GetNextItem(data->control_race, -1, LVNI_FOCUSED);
|
||||||
|
assert(i == -1 || ListView_GetNextItem(data->control_race, i, LVNI_FOCUSED) == -1);
|
||||||
|
if (ok_race(flags.initrole, i, ROLE_RANDOM, ROLE_RANDOM)) {
|
||||||
|
flags.initrace = i;
|
||||||
|
plselAdjustSelections(hWnd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NM_CLICK:
|
||||||
|
{
|
||||||
|
LPNMLISTVIEW lpnmitem = (LPNMLISTVIEW)lParam;
|
||||||
|
int i = lpnmitem->iItem;
|
||||||
|
if (i == -1)
|
||||||
|
return FALSE;
|
||||||
|
if (control == data->control_role) {
|
||||||
|
flags.initrole = i;
|
||||||
|
plselAdjustSelections(hWnd);
|
||||||
|
} else if(control == data->control_race) {
|
||||||
|
if (ok_race(flags.initrole, i, ROLE_RANDOM, ROLE_RANDOM)) {
|
||||||
|
flags.initrace = i;
|
||||||
|
plselAdjustSelections(hWnd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NM_KILLFOCUS:
|
||||||
|
{
|
||||||
|
char buf[64];
|
||||||
|
sprintf(buf, "KILLFOCUS %lx\n", (unsigned long) control);
|
||||||
|
OutputDebugStringA(buf);
|
||||||
|
|
||||||
|
if (data->focus == data->control_race) {
|
||||||
|
data->focus = NULL;
|
||||||
|
ListView_RedrawItems(data->control_race, 0, data->race_count - 1);
|
||||||
|
} else if (data->focus == data->control_role) {
|
||||||
|
data->focus = NULL;
|
||||||
|
ListView_RedrawItems(data->control_role, 0, data->role_count - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NM_SETFOCUS:
|
||||||
|
{
|
||||||
|
char buf[64];
|
||||||
|
sprintf(buf, "SETFOCUS %lx\n", (unsigned long) control);
|
||||||
|
OutputDebugStringA(buf);
|
||||||
|
data->focus = control;
|
||||||
|
|
||||||
|
if (control == data->control_race) {
|
||||||
|
data->focus = data->control_race;
|
||||||
|
plselAdjustSelections(hWnd);
|
||||||
|
} else if (control == data->control_role) {
|
||||||
|
data->focus = data->control_role;
|
||||||
|
plselAdjustSelections(hWnd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_COMMAND:
|
case WM_COMMAND:
|
||||||
@@ -327,483 +429,361 @@ PlayerSelectorDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||||||
switch (LOWORD(wParam)) {
|
switch (LOWORD(wParam)) {
|
||||||
/* OK button was clicked */
|
/* OK button was clicked */
|
||||||
case IDOK:
|
case IDOK:
|
||||||
if (plselFinalSelection(hWnd, data->selection)) {
|
EndDialog(hWnd, wParam);
|
||||||
EndDialog(hWnd, wParam);
|
|
||||||
} else {
|
|
||||||
NHMessageBox(
|
|
||||||
hWnd, TEXT("Cannot match this role. Try something else."),
|
|
||||||
MB_ICONSTOP | MB_OK);
|
|
||||||
}
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/* CANCEL button was clicked */
|
/* CANCEL button was clicked */
|
||||||
case IDCANCEL:
|
case IDCANCEL:
|
||||||
*data->selection = -1;
|
|
||||||
EndDialog(hWnd, wParam);
|
EndDialog(hWnd, wParam);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/* following are events from dialog controls:
|
case IDC_PLSEL_RANDOM:
|
||||||
"random" checkboxes send BN_CLICKED messages;
|
plselRandomize(data);
|
||||||
role/race/... combo-boxes send CBN_SELENDOK
|
plselAdjustSelections(hWnd);
|
||||||
if something was selected;
|
return TRUE;
|
||||||
*/
|
|
||||||
case IDC_PLSEL_ROLE_RANDOM:
|
case IDC_PLSEL_GENDER_MALE:
|
||||||
|
case IDC_PLSEL_GENDER_FEMALE:
|
||||||
if (HIWORD(wParam) == BN_CLICKED) {
|
if (HIWORD(wParam) == BN_CLICKED) {
|
||||||
/* enable corresponding list window if "random"
|
int i = LOWORD(wParam) - IDC_PLSEL_GENDER_MALE;
|
||||||
checkbox was "unchecked" */
|
if (ok_gend(flags.initrole, flags.initrace, i, ROLE_RANDOM)) {
|
||||||
EnableWindow(GetDlgItem(hWnd, IDC_PLSEL_ROLE_LIST),
|
flags.initgend = i;
|
||||||
SendMessage((HWND) lParam, BM_GETCHECK, 0, 0)
|
plselAdjustSelections(hWnd);
|
||||||
== BST_UNCHECKED);
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDC_PLSEL_RACE_RANDOM:
|
|
||||||
|
case IDC_PLSEL_ALIGN_LAWFUL:
|
||||||
|
case IDC_PLSEL_ALIGN_NEUTRAL:
|
||||||
|
case IDC_PLSEL_ALIGN_CHAOTIC:
|
||||||
if (HIWORD(wParam) == BN_CLICKED) {
|
if (HIWORD(wParam) == BN_CLICKED) {
|
||||||
EnableWindow(GetDlgItem(hWnd, IDC_PLSEL_RACE_LIST),
|
int i = LOWORD(wParam) - IDC_PLSEL_ALIGN_LAWFUL;
|
||||||
SendMessage((HWND) lParam, BM_GETCHECK, 0, 0)
|
if (ok_align(flags.initrole, flags.initrace, flags.initgend, i)) {
|
||||||
== BST_UNCHECKED);
|
flags.initalign = i;
|
||||||
|
plselAdjustSelections(hWnd);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IDC_PLSEL_GENDER_RANDOM:
|
|
||||||
if (HIWORD(wParam) == BN_CLICKED) {
|
|
||||||
EnableWindow(GetDlgItem(hWnd, IDC_PLSEL_GENDER_LIST),
|
|
||||||
SendMessage((HWND) lParam, BM_GETCHECK, 0, 0)
|
|
||||||
== BST_UNCHECKED);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IDC_PLSEL_ALIGN_RANDOM:
|
|
||||||
if (HIWORD(wParam) == BN_CLICKED) {
|
|
||||||
EnableWindow(GetDlgItem(hWnd, IDC_PLSEL_ALIGN_LIST),
|
|
||||||
SendMessage((HWND) lParam, BM_GETCHECK, 0, 0)
|
|
||||||
== BST_UNCHECKED);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IDC_PLSEL_ROLE_LIST:
|
|
||||||
if (HIWORD(wParam) == CBN_SELENDOK) {
|
|
||||||
/* filter out invalid options if
|
|
||||||
the selection was made */
|
|
||||||
plselAdjustLists(hWnd, LOWORD(wParam));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IDC_PLSEL_RACE_LIST:
|
|
||||||
if (HIWORD(wParam) == CBN_SELENDOK) {
|
|
||||||
plselAdjustLists(hWnd, LOWORD(wParam));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IDC_PLSEL_GENDER_LIST:
|
|
||||||
if (HIWORD(wParam) == CBN_SELENDOK) {
|
|
||||||
plselAdjustLists(hWnd, LOWORD(wParam));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case IDC_PLSEL_ALIGN_LIST:
|
|
||||||
if (HIWORD(wParam) == CBN_SELENDOK) {
|
|
||||||
plselAdjustLists(hWnd, LOWORD(wParam));
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
setComboBoxValue(HWND hWnd, int combo_box, int value)
|
|
||||||
{
|
|
||||||
int index_max =
|
|
||||||
(int) SendDlgItemMessage(hWnd, combo_box, CB_GETCOUNT, 0, 0);
|
|
||||||
int index;
|
|
||||||
int value_to_set = LB_ERR;
|
|
||||||
for (index = 0; index < index_max; index++) {
|
|
||||||
if (SendDlgItemMessage(hWnd, combo_box, CB_GETITEMDATA,
|
|
||||||
(WPARAM) index, 0) == value) {
|
|
||||||
value_to_set = index;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SendDlgItemMessage(hWnd, combo_box, CB_SETCURSEL, (WPARAM) value_to_set,
|
|
||||||
0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* initialize player selector dialog */
|
/* initialize player selector dialog */
|
||||||
void
|
void
|
||||||
plselInitDialog(HWND hWnd)
|
plselInitDialog(HWND hWnd)
|
||||||
{
|
{
|
||||||
|
struct plsel_data * data = (plsel_data_t *) GetWindowLongPtr(hWnd, GWLP_USERDATA);
|
||||||
TCHAR wbuf[BUFSZ];
|
TCHAR wbuf[BUFSZ];
|
||||||
|
LVCOLUMN lvcol;
|
||||||
|
data->control_role = GetDlgItem(hWnd, IDC_PLSEL_ROLE_LIST);
|
||||||
|
data->control_race = GetDlgItem(hWnd, IDC_PLSEL_RACE_LIST);
|
||||||
|
|
||||||
|
ZeroMemory(&lvcol, sizeof(lvcol));
|
||||||
|
lvcol.mask = LVCF_WIDTH;
|
||||||
|
lvcol.cx = GetSystemMetrics(SM_CXFULLSCREEN);
|
||||||
|
|
||||||
|
/* build role list */
|
||||||
|
ListView_InsertColumn(data->control_role, 0, &lvcol);
|
||||||
|
data->role_count = 0;
|
||||||
|
for (int i = 0; roles[i].name.m; i++) {
|
||||||
|
LVITEM lvitem;
|
||||||
|
ZeroMemory(&lvitem, sizeof(lvitem));
|
||||||
|
|
||||||
|
lvitem.mask = LVIF_STATE | LVIF_TEXT;
|
||||||
|
lvitem.iItem = i;
|
||||||
|
lvitem.iSubItem = 0;
|
||||||
|
lvitem.state = 0;
|
||||||
|
lvitem.stateMask = LVIS_FOCUSED;
|
||||||
|
if (flags.female && roles[i].name.f)
|
||||||
|
lvitem.pszText = NH_A2W(roles[i].name.f, wbuf, BUFSZ);
|
||||||
|
else
|
||||||
|
lvitem.pszText = NH_A2W(roles[i].name.m, wbuf, BUFSZ);
|
||||||
|
if (ListView_InsertItem(data->control_role, &lvitem) == -1) {
|
||||||
|
panic("cannot insert menu item");
|
||||||
|
}
|
||||||
|
data->role_count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* build race list */
|
||||||
|
ListView_InsertColumn(data->control_race, 0, &lvcol);
|
||||||
|
data->race_count = 0;
|
||||||
|
for (int i = 0; races[i].noun; i++) {
|
||||||
|
LVITEM lvitem;
|
||||||
|
ZeroMemory(&lvitem, sizeof(lvitem));
|
||||||
|
|
||||||
|
lvitem.mask = LVIF_STATE | LVIF_TEXT;
|
||||||
|
lvitem.iItem = i;
|
||||||
|
lvitem.iSubItem = 0;
|
||||||
|
lvitem.state = 0;
|
||||||
|
lvitem.stateMask = LVIS_FOCUSED;
|
||||||
|
lvitem.pszText = NH_A2W(races[i].noun, wbuf, BUFSZ);
|
||||||
|
if (ListView_InsertItem(data->control_race, &lvitem) == -1) {
|
||||||
|
panic("cannot insert menu item");
|
||||||
|
}
|
||||||
|
data->race_count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(int i = 0; i < ROLE_GENDERS; i++)
|
||||||
|
data->control_genders[i] = GetDlgItem(hWnd, IDC_PLSEL_GENDER_MALE + i);
|
||||||
|
|
||||||
|
for(int i = 0; i < ROLE_ALIGNS; i++)
|
||||||
|
data->control_aligns[i] = GetDlgItem(hWnd, IDC_PLSEL_ALIGN_LAWFUL + i);
|
||||||
|
|
||||||
|
/* set gender radio button state */
|
||||||
|
for (int i = 0; i < ROLE_GENDERS; i++)
|
||||||
|
Button_Enable(data->control_genders[i], TRUE);
|
||||||
|
|
||||||
|
Button_SetCheck(data->control_genders[0], BST_CHECKED);
|
||||||
|
|
||||||
|
/* set alignment radio button state */
|
||||||
|
for (int i = 0; i < ROLE_ALIGNS; i++)
|
||||||
|
Button_Enable(data->control_aligns[i], TRUE);
|
||||||
|
|
||||||
|
Button_SetCheck(data->control_aligns[0], BST_CHECKED);
|
||||||
|
|
||||||
/* set player name */
|
/* set player name */
|
||||||
SetDlgItemText(hWnd, IDC_PLSEL_NAME, NH_A2W(plname, wbuf, sizeof(wbuf)));
|
SetDlgItemText(hWnd, IDC_PLSEL_NAME, NH_A2W(plname, wbuf, sizeof(wbuf)));
|
||||||
|
|
||||||
/* check flags for consistency */
|
plselRandomize(data);
|
||||||
if (flags.initrole >= 0) {
|
|
||||||
if (flags.initrace >= 0
|
|
||||||
&& !validrace(flags.initrole, flags.initrace)) {
|
|
||||||
flags.initrace = ROLE_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flags.initgend >= 0
|
|
||||||
&& !validgend(flags.initrole, flags.initrace, flags.initgend)) {
|
|
||||||
flags.initgend = ROLE_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flags.initalign >= 0
|
|
||||||
&& !validalign(flags.initrole, flags.initrace, flags.initalign)) {
|
|
||||||
flags.initalign = ROLE_NONE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* populate select boxes */
|
/* populate select boxes */
|
||||||
plselAdjustLists(hWnd, -1);
|
plselAdjustSelections(hWnd);
|
||||||
|
|
||||||
/* intialize roles list */
|
/* set tab order */
|
||||||
if (flags.initrole < 0
|
SetWindowPos(GetDlgItem(hWnd, IDCANCEL), NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
||||||
|| !ok_role(flags.initrole, ROLE_NONE, ROLE_NONE, ROLE_NONE)) {
|
SetWindowPos(GetDlgItem(hWnd, IDC_PLSEL_RANDOM), NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
||||||
CheckDlgButton(hWnd, IDC_PLSEL_ROLE_RANDOM, BST_CHECKED);
|
SetWindowPos(GetDlgItem(hWnd, IDOK), NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
||||||
EnableWindow(GetDlgItem(hWnd, IDC_PLSEL_ROLE_LIST), FALSE);
|
for(int i = ROLE_GENDERS - 1; i >= 0; i--)
|
||||||
} else {
|
SetWindowPos(data->control_genders[i], NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
||||||
CheckDlgButton(hWnd, IDC_PLSEL_ROLE_RANDOM, BST_UNCHECKED);
|
for(int i = ROLE_ALIGNS - 1; i >= 0; i--)
|
||||||
EnableWindow(GetDlgItem(hWnd, IDC_PLSEL_ROLE_LIST), TRUE);
|
SetWindowPos(data->control_aligns[i], NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
||||||
setComboBoxValue(hWnd, IDC_PLSEL_ROLE_LIST, flags.initrole);
|
SetWindowPos(data->control_race, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
||||||
}
|
SetWindowPos(data->control_role, NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
||||||
|
|
||||||
/* intialize races list */
|
|
||||||
if (flags.initrace < 0
|
|
||||||
|| !ok_race(flags.initrole, flags.initrace, ROLE_NONE, ROLE_NONE)) {
|
|
||||||
CheckDlgButton(hWnd, IDC_PLSEL_RACE_RANDOM, BST_CHECKED);
|
|
||||||
EnableWindow(GetDlgItem(hWnd, IDC_PLSEL_RACE_LIST), FALSE);
|
|
||||||
} else {
|
|
||||||
CheckDlgButton(hWnd, IDC_PLSEL_RACE_RANDOM, BST_UNCHECKED);
|
|
||||||
EnableWindow(GetDlgItem(hWnd, IDC_PLSEL_RACE_LIST), TRUE);
|
|
||||||
setComboBoxValue(hWnd, IDC_PLSEL_RACE_LIST, flags.initrace);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* intialize genders list */
|
|
||||||
if (flags.initgend < 0
|
|
||||||
|| !ok_gend(flags.initrole, flags.initrace, flags.initgend,
|
|
||||||
ROLE_NONE)) {
|
|
||||||
CheckDlgButton(hWnd, IDC_PLSEL_GENDER_RANDOM, BST_CHECKED);
|
|
||||||
EnableWindow(GetDlgItem(hWnd, IDC_PLSEL_GENDER_LIST), FALSE);
|
|
||||||
} else {
|
|
||||||
CheckDlgButton(hWnd, IDC_PLSEL_GENDER_RANDOM, BST_UNCHECKED);
|
|
||||||
EnableWindow(GetDlgItem(hWnd, IDC_PLSEL_GENDER_LIST), TRUE);
|
|
||||||
setComboBoxValue(hWnd, IDC_PLSEL_GENDER_LIST, flags.initgend);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* intialize alignments list */
|
|
||||||
if (flags.initalign < 0
|
|
||||||
|| !ok_align(flags.initrole, flags.initrace, flags.initgend,
|
|
||||||
flags.initalign)) {
|
|
||||||
CheckDlgButton(hWnd, IDC_PLSEL_ALIGN_RANDOM, BST_CHECKED);
|
|
||||||
EnableWindow(GetDlgItem(hWnd, IDC_PLSEL_ALIGN_LIST), FALSE);
|
|
||||||
} else {
|
|
||||||
CheckDlgButton(hWnd, IDC_PLSEL_ALIGN_RANDOM, BST_UNCHECKED);
|
|
||||||
EnableWindow(GetDlgItem(hWnd, IDC_PLSEL_ALIGN_LIST), TRUE);
|
|
||||||
setComboBoxValue(hWnd, IDC_PLSEL_ALIGN_LIST, flags.initalign);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* adjust role/race/alignment/gender list - filter out
|
|
||||||
invalid combinations
|
|
||||||
changed_sel points to the list where selection occurred
|
|
||||||
(-1 if unknown)
|
|
||||||
*/
|
|
||||||
void
|
void
|
||||||
plselAdjustLists(HWND hWnd, int changed_sel)
|
plselAdjustSelections(HWND hWnd)
|
||||||
{
|
{
|
||||||
HWND control_role, control_race, control_gender, control_align;
|
struct plsel_data * data = (plsel_data_t *) GetWindowLongPtr(hWnd, GWLP_USERDATA);
|
||||||
int initrole, initrace, initgend, initalign;
|
|
||||||
int i;
|
|
||||||
LRESULT ind;
|
|
||||||
int valid_opt;
|
|
||||||
TCHAR wbuf[255];
|
|
||||||
|
|
||||||
/* get control handles */
|
if (!ok_race(flags.initrole, flags.initrace, ROLE_RANDOM, ROLE_RANDOM))
|
||||||
control_role = GetDlgItem(hWnd, IDC_PLSEL_ROLE_LIST);
|
flags.initrace = pick_race(flags.initrole, ROLE_RANDOM, ROLE_RANDOM, ROLE_RANDOM);
|
||||||
control_race = GetDlgItem(hWnd, IDC_PLSEL_RACE_LIST);
|
|
||||||
control_gender = GetDlgItem(hWnd, IDC_PLSEL_GENDER_LIST);
|
|
||||||
control_align = GetDlgItem(hWnd, IDC_PLSEL_ALIGN_LIST);
|
|
||||||
|
|
||||||
/* get current selections */
|
if (!ok_gend(flags.initrole, flags.initrace, flags.initgend, ROLE_RANDOM))
|
||||||
ind = SendMessage(control_role, CB_GETCURSEL, 0, 0);
|
flags.initgend = pick_gend(flags.initrole, flags.initrace, ROLE_RANDOM , ROLE_RANDOM);
|
||||||
initrole = (ind == LB_ERR)
|
|
||||||
? flags.initrole
|
|
||||||
: (int) SendMessage(control_role, CB_GETITEMDATA, ind, 0);
|
|
||||||
|
|
||||||
ind = SendMessage(control_race, CB_GETCURSEL, 0, 0);
|
if (!ok_align(flags.initrole, flags.initrace, flags.initgend, flags.initalign))
|
||||||
initrace = (ind == LB_ERR)
|
flags.initalign = pick_align(flags.initrole, flags.initrace, flags.initgend , ROLE_RANDOM);
|
||||||
? flags.initrace
|
|
||||||
: (int) SendMessage(control_race, CB_GETITEMDATA, ind, 0);
|
|
||||||
|
|
||||||
ind = SendMessage(control_gender, CB_GETCURSEL, 0, 0);
|
ListView_RedrawItems(data->control_role, 0, data->role_count - 1);
|
||||||
initgend = (ind == LB_ERR) ? flags.initgend
|
ListView_RedrawItems(data->control_race, 0, data->race_count - 1);
|
||||||
: (int) SendMessage(control_gender,
|
|
||||||
CB_GETITEMDATA, ind, 0);
|
|
||||||
|
|
||||||
ind = SendMessage(control_align, CB_GETCURSEL, 0, 0);
|
/* set gender radio button state */
|
||||||
initalign = (ind == LB_ERR) ? flags.initalign
|
for (int i = 0; i < ROLE_GENDERS; i++) {
|
||||||
: (int) SendMessage(control_align,
|
BOOL enable = ok_gend(flags.initrole, flags.initrace, i, flags.initalign);
|
||||||
CB_GETITEMDATA, ind, 0);
|
Button_Enable(data->control_genders[i], enable);
|
||||||
|
LRESULT state = Button_GetCheck(data->control_genders[i]);
|
||||||
/* intialize roles list */
|
if (state == BST_CHECKED && flags.initgend != i)
|
||||||
if (changed_sel == -1) {
|
Button_SetCheck(data->control_genders[i], BST_UNCHECKED);
|
||||||
valid_opt = 0;
|
if (state == BST_UNCHECKED && flags.initgend == i)
|
||||||
|
Button_SetCheck(data->control_genders[i], BST_CHECKED);
|
||||||
/* reset content and populate the list */
|
|
||||||
SendMessage(control_role, CB_RESETCONTENT, 0, 0);
|
|
||||||
for (i = 0; roles[i].name.m; i++) {
|
|
||||||
if (initgend >= 0 && flags.female && roles[i].name.f)
|
|
||||||
ind = SendMessage(
|
|
||||||
control_role, CB_ADDSTRING, (WPARAM) 0,
|
|
||||||
(LPARAM) NH_A2W(roles[i].name.f, wbuf, sizeof(wbuf)));
|
|
||||||
else
|
|
||||||
ind = SendMessage(
|
|
||||||
control_role, CB_ADDSTRING, (WPARAM) 0,
|
|
||||||
(LPARAM) NH_A2W(roles[i].name.m, wbuf, sizeof(wbuf)));
|
|
||||||
|
|
||||||
SendMessage(control_role, CB_SETITEMDATA, (WPARAM) ind,
|
|
||||||
(LPARAM) i);
|
|
||||||
if (i == initrole) {
|
|
||||||
SendMessage(control_role, CB_SETCURSEL, (WPARAM) ind,
|
|
||||||
(LPARAM) 0);
|
|
||||||
valid_opt = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* set selection to the previously selected role
|
|
||||||
if it is still valid */
|
|
||||||
if (!valid_opt) {
|
|
||||||
initrole = ROLE_NONE;
|
|
||||||
initrace = ROLE_NONE;
|
|
||||||
initgend = ROLE_NONE;
|
|
||||||
initalign = ROLE_NONE;
|
|
||||||
SendMessage(control_role, CB_SETCURSEL, (WPARAM) -1, (LPARAM) 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* trigger change of the races list */
|
|
||||||
changed_sel = IDC_PLSEL_ROLE_LIST;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* intialize races list */
|
/* set alignment radio button state */
|
||||||
if (changed_sel == IDC_PLSEL_ROLE_LIST) {
|
for (int i = 0; i < ROLE_ALIGNS; i++) {
|
||||||
valid_opt = 0;
|
BOOL enable = ok_align(flags.initrole, flags.initrace, flags.initgend, i);
|
||||||
|
Button_Enable(data->control_aligns[i], enable);
|
||||||
/* reset content and populate the list */
|
LRESULT state = Button_GetCheck(data->control_aligns[i]);
|
||||||
SendMessage(control_race, CB_RESETCONTENT, 0, 0);
|
if (state == BST_CHECKED && flags.initalign != i)
|
||||||
for (i = 0; races[i].noun; i++)
|
Button_SetCheck(data->control_aligns[i], BST_UNCHECKED);
|
||||||
if (ok_race(initrole, i, ROLE_NONE, ROLE_NONE)) {
|
if (state == BST_UNCHECKED && flags.initalign == i)
|
||||||
ind = SendMessage(
|
Button_SetCheck(data->control_aligns[i], BST_CHECKED);
|
||||||
control_race, CB_ADDSTRING, (WPARAM) 0,
|
|
||||||
(LPARAM) NH_A2W(races[i].noun, wbuf, sizeof(wbuf)));
|
|
||||||
SendMessage(control_race, CB_SETITEMDATA, (WPARAM) ind,
|
|
||||||
(LPARAM) i);
|
|
||||||
if (i == initrace) {
|
|
||||||
SendMessage(control_race, CB_SETCURSEL, (WPARAM) ind,
|
|
||||||
(LPARAM) 0);
|
|
||||||
valid_opt = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* set selection to the previously selected race
|
|
||||||
if it is still valid */
|
|
||||||
if (!valid_opt) {
|
|
||||||
initrace = ROLE_NONE;
|
|
||||||
initgend = ROLE_NONE;
|
|
||||||
initalign = ROLE_NONE;
|
|
||||||
SendMessage(control_race, CB_SETCURSEL, (WPARAM) -1, (LPARAM) 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* trigger change of the genders list */
|
|
||||||
changed_sel = IDC_PLSEL_RACE_LIST;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* intialize genders list */
|
|
||||||
if (changed_sel == IDC_PLSEL_RACE_LIST) {
|
|
||||||
valid_opt = 0;
|
|
||||||
|
|
||||||
/* reset content and populate the list */
|
|
||||||
SendMessage(control_gender, CB_RESETCONTENT, 0, 0);
|
|
||||||
for (i = 0; i < ROLE_GENDERS; i++)
|
|
||||||
if (ok_gend(initrole, initrace, i, ROLE_NONE)) {
|
|
||||||
ind = SendMessage(
|
|
||||||
control_gender, CB_ADDSTRING, (WPARAM) 0,
|
|
||||||
(LPARAM) NH_A2W(genders[i].adj, wbuf, sizeof(wbuf)));
|
|
||||||
SendMessage(control_gender, CB_SETITEMDATA, (WPARAM) ind,
|
|
||||||
(LPARAM) i);
|
|
||||||
if (i == initgend) {
|
|
||||||
SendMessage(control_gender, CB_SETCURSEL, (WPARAM) ind,
|
|
||||||
(LPARAM) 0);
|
|
||||||
valid_opt = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* set selection to the previously selected gender
|
|
||||||
if it is still valid */
|
|
||||||
if (!valid_opt) {
|
|
||||||
initgend = ROLE_NONE;
|
|
||||||
initalign = ROLE_NONE;
|
|
||||||
SendMessage(control_gender, CB_SETCURSEL, (WPARAM) -1,
|
|
||||||
(LPARAM) 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* trigger change of the alignments list */
|
|
||||||
changed_sel = IDC_PLSEL_GENDER_LIST;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* intialize alignments list */
|
|
||||||
if (changed_sel == IDC_PLSEL_GENDER_LIST) {
|
|
||||||
valid_opt = 0;
|
|
||||||
|
|
||||||
/* reset content and populate the list */
|
|
||||||
SendMessage(control_align, CB_RESETCONTENT, 0, 0);
|
|
||||||
for (i = 0; i < ROLE_ALIGNS; i++)
|
|
||||||
if (ok_align(initrole, initrace, initgend, i)) {
|
|
||||||
ind = SendMessage(
|
|
||||||
control_align, CB_ADDSTRING, (WPARAM) 0,
|
|
||||||
(LPARAM) NH_A2W(aligns[i].adj, wbuf, sizeof(wbuf)));
|
|
||||||
SendMessage(control_align, CB_SETITEMDATA, (WPARAM) ind,
|
|
||||||
(LPARAM) i);
|
|
||||||
if (i == initalign) {
|
|
||||||
SendMessage(control_align, CB_SETCURSEL, (WPARAM) ind,
|
|
||||||
(LPARAM) 0);
|
|
||||||
valid_opt = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* set selection to the previously selected alignment
|
|
||||||
if it is still valid */
|
|
||||||
if (!valid_opt) {
|
|
||||||
initalign = ROLE_NONE;
|
|
||||||
SendMessage(control_align, CB_SETCURSEL, (WPARAM) -1, (LPARAM) 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* player made up his mind - get final selection here */
|
/* player made up his mind - get final selection here */
|
||||||
int
|
int
|
||||||
plselFinalSelection(HWND hWnd, int *selection)
|
plselFinalSelection(HWND hWnd)
|
||||||
{
|
{
|
||||||
LRESULT ind;
|
int role = flags.initrole;
|
||||||
|
int race = flags.initrace;
|
||||||
|
int gender = flags.initgend;
|
||||||
|
int alignment = flags.initalign;
|
||||||
|
|
||||||
UNREFERENCED_PARAMETER(selection);
|
assert(role != ROLE_RANDOM && role != ROLE_NONE);
|
||||||
|
assert(race != ROLE_RANDOM && race != ROLE_NONE);
|
||||||
/* get current selections */
|
assert(gender != ROLE_RANDOM && gender != ROLE_NONE);
|
||||||
if (SendDlgItemMessage(hWnd, IDC_PLSEL_ROLE_RANDOM, BM_GETCHECK, 0, 0)
|
assert(alignment != ROLE_RANDOM && alignment != ROLE_NONE);
|
||||||
== BST_CHECKED) {
|
assert(ok_role(role, race, gender, alignment));
|
||||||
flags.initrole = ROLE_RANDOM;
|
assert(ok_race(role, race, gender, alignment));
|
||||||
} else {
|
assert(ok_gend(role, race, gender, alignment));
|
||||||
ind =
|
assert(ok_align(role, race, gender, alignment));
|
||||||
SendDlgItemMessage(hWnd, IDC_PLSEL_ROLE_LIST, CB_GETCURSEL, 0, 0);
|
|
||||||
flags.initrole =
|
return TRUE;
|
||||||
(ind == LB_ERR)
|
}
|
||||||
? ROLE_RANDOM
|
|
||||||
: (int) SendDlgItemMessage(hWnd, IDC_PLSEL_ROLE_LIST,
|
static boolean plselRandomize(plsel_data_t * data)
|
||||||
CB_GETITEMDATA, ind, 0);
|
{
|
||||||
}
|
boolean fully_specified = TRUE;
|
||||||
|
|
||||||
if (SendDlgItemMessage(hWnd, IDC_PLSEL_RACE_RANDOM, BM_GETCHECK, 0, 0)
|
// restore back to configuration settings
|
||||||
== BST_CHECKED) {
|
flags.initrole = data->config_role;
|
||||||
flags.initrace = ROLE_RANDOM;
|
flags.initrace = data->config_race;
|
||||||
} else {
|
flags.initgend = data->config_gender;
|
||||||
ind =
|
flags.initalign = data->config_alignment;
|
||||||
SendDlgItemMessage(hWnd, IDC_PLSEL_RACE_LIST, CB_GETCURSEL, 0, 0);
|
|
||||||
flags.initrace =
|
if (!flags.randomall) {
|
||||||
(ind == LB_ERR)
|
if(flags.initrole == ROLE_NONE || flags.initrace == ROLE_NONE
|
||||||
? ROLE_RANDOM
|
|| flags.initgend == ROLE_NONE || flags.initalign == ROLE_NONE)
|
||||||
: (int) SendDlgItemMessage(hWnd, IDC_PLSEL_RACE_LIST,
|
fully_specified = FALSE;
|
||||||
CB_GETITEMDATA, ind, 0);
|
}
|
||||||
}
|
|
||||||
|
if (flags.initrole == ROLE_NONE)
|
||||||
if (SendDlgItemMessage(hWnd, IDC_PLSEL_GENDER_RANDOM, BM_GETCHECK, 0, 0)
|
flags.initrole = ROLE_RANDOM;
|
||||||
== BST_CHECKED) {
|
if (flags.initrace == ROLE_NONE)
|
||||||
flags.initgend = ROLE_RANDOM;
|
flags.initrace = ROLE_RANDOM;
|
||||||
} else {
|
if (flags.initgend == ROLE_NONE)
|
||||||
ind = SendDlgItemMessage(hWnd, IDC_PLSEL_GENDER_LIST, CB_GETCURSEL, 0,
|
flags.initgend = ROLE_RANDOM;
|
||||||
0);
|
if (flags.initalign == ROLE_NONE)
|
||||||
flags.initgend =
|
flags.initalign = ROLE_RANDOM;
|
||||||
(ind == LB_ERR)
|
|
||||||
? ROLE_RANDOM
|
rigid_role_checks();
|
||||||
: (int) SendDlgItemMessage(hWnd, IDC_PLSEL_GENDER_LIST,
|
|
||||||
CB_GETITEMDATA, ind, 0);
|
int role = flags.initrole;
|
||||||
}
|
int race = flags.initrace;
|
||||||
|
int gender = flags.initgend;
|
||||||
if (SendDlgItemMessage(hWnd, IDC_PLSEL_ALIGN_RANDOM, BM_GETCHECK, 0, 0)
|
int alignment = flags.initalign;
|
||||||
== BST_CHECKED) {
|
|
||||||
flags.initalign = ROLE_RANDOM;
|
assert(role != ROLE_RANDOM && role != ROLE_NONE);
|
||||||
} else {
|
assert(race != ROLE_RANDOM && race != ROLE_NONE);
|
||||||
ind = SendDlgItemMessage(hWnd, IDC_PLSEL_ALIGN_LIST, CB_GETCURSEL, 0,
|
assert(gender != ROLE_RANDOM && gender != ROLE_NONE);
|
||||||
0);
|
assert(alignment != ROLE_RANDOM && alignment != ROLE_NONE);
|
||||||
flags.initalign =
|
|
||||||
(ind == LB_ERR)
|
if (!ok_role(role, race, gender, alignment)) {
|
||||||
? ROLE_RANDOM
|
fully_specified = FALSE;
|
||||||
: (int) SendDlgItemMessage(hWnd, IDC_PLSEL_ALIGN_LIST,
|
flags.initrole = ROLE_RANDOM;
|
||||||
CB_GETITEMDATA, ind, 0);
|
}
|
||||||
}
|
|
||||||
|
if (!ok_race(role, race, gender, alignment)) {
|
||||||
/* check the role */
|
fully_specified = FALSE;
|
||||||
if (flags.initrole == ROLE_RANDOM) {
|
flags.initrace = ROLE_RANDOM;
|
||||||
flags.initrole = pick_role(flags.initrace, flags.initgend,
|
}
|
||||||
flags.initalign, PICK_RANDOM);
|
|
||||||
if (flags.initrole < 0) {
|
if (!ok_gend(role, race, gender, alignment)) {
|
||||||
NHMessageBox(hWnd, TEXT("Incompatible role!"),
|
fully_specified = FALSE;
|
||||||
MB_ICONSTOP | MB_OK);
|
flags.initgend = ROLE_RANDOM;
|
||||||
return FALSE;
|
}
|
||||||
}
|
|
||||||
}
|
if(!ok_align(role, race, gender, alignment))
|
||||||
|
{
|
||||||
/* Select a race, if necessary */
|
fully_specified = FALSE;
|
||||||
/* force compatibility with role */
|
flags.initalign = ROLE_RANDOM;
|
||||||
if (flags.initrace == ROLE_RANDOM
|
}
|
||||||
|| !validrace(flags.initrole, flags.initrace)) {
|
|
||||||
/* pre-selected race not valid */
|
rigid_role_checks();
|
||||||
if (flags.initrace == ROLE_RANDOM) {
|
|
||||||
flags.initrace = pick_race(flags.initrole, flags.initgend,
|
role = flags.initrole;
|
||||||
flags.initalign, PICK_RANDOM);
|
race = flags.initrace;
|
||||||
}
|
gender = flags.initgend;
|
||||||
|
alignment = flags.initalign;
|
||||||
if (flags.initrace < 0) {
|
|
||||||
NHMessageBox(hWnd, TEXT("Incompatible race!"),
|
assert(role != ROLE_RANDOM && role != ROLE_NONE);
|
||||||
MB_ICONSTOP | MB_OK);
|
assert(race != ROLE_RANDOM && race != ROLE_NONE);
|
||||||
return FALSE;
|
assert(gender != ROLE_RANDOM && gender != ROLE_NONE);
|
||||||
}
|
assert(alignment != ROLE_RANDOM && alignment != ROLE_NONE);
|
||||||
}
|
assert(ok_role(role, race, gender, alignment));
|
||||||
|
assert(ok_race(role, race, gender, alignment));
|
||||||
/* Select a gender, if necessary */
|
assert(ok_gend(role, race, gender, alignment));
|
||||||
/* force compatibility with role/race, try for compatibility with
|
assert(ok_align(role, race, gender, alignment));
|
||||||
* pre-selected alignment */
|
|
||||||
if (flags.initgend < 0
|
return fully_specified;
|
||||||
|| !validgend(flags.initrole, flags.initrace, flags.initgend)) {
|
}
|
||||||
/* pre-selected gender not valid */
|
|
||||||
if (flags.initgend == ROLE_RANDOM) {
|
/*-----------------------------------------------------------------------------*/
|
||||||
flags.initgend = pick_gend(flags.initrole, flags.initrace,
|
BOOL
|
||||||
flags.initalign, PICK_RANDOM);
|
plselDrawItem(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
||||||
}
|
{
|
||||||
|
LPDRAWITEMSTRUCT lpdis = (LPDRAWITEMSTRUCT) lParam;
|
||||||
if (flags.initgend < 0) {
|
struct plsel_data * data = (plsel_data_t *) GetWindowLongPtr(hWnd, GWLP_USERDATA);
|
||||||
NHMessageBox(hWnd, TEXT("Incompatible gender!"),
|
|
||||||
MB_ICONSTOP | MB_OK);
|
/* If there are no list box items, skip this message. */
|
||||||
return FALSE;
|
if (lpdis->itemID < 0)
|
||||||
}
|
return FALSE;
|
||||||
}
|
|
||||||
|
HWND control = GetDlgItem(hWnd, wParam);
|
||||||
/* Select an alignment, if necessary */
|
int i = lpdis->itemID;
|
||||||
/* force compatibility with role/race/gender */
|
|
||||||
if (flags.initalign < 0
|
{
|
||||||
|| !validalign(flags.initrole, flags.initrace, flags.initalign)) {
|
char buf[64];
|
||||||
/* pre-selected alignment not valid */
|
sprintf(buf, "DRAW %lx %d\n", (unsigned long)control, i);
|
||||||
if (flags.initalign == ROLE_RANDOM) {
|
OutputDebugStringA(buf);
|
||||||
flags.initalign = pick_align(flags.initrole, flags.initrace,
|
}
|
||||||
flags.initgend, PICK_RANDOM);
|
|
||||||
} else {
|
const char * string;
|
||||||
NHMessageBox(hWnd, TEXT("Incompatible alignment!"),
|
|
||||||
MB_ICONSTOP | MB_OK);
|
boolean ok = TRUE;
|
||||||
return FALSE;
|
boolean selected;
|
||||||
}
|
|
||||||
}
|
if (wParam == IDC_PLSEL_ROLE_LIST) {
|
||||||
|
if (flags.female && roles[i].name.f)
|
||||||
|
string = roles[i].name.f;
|
||||||
|
else
|
||||||
|
string = roles[i].name.m;
|
||||||
|
selected = (flags.initrole == i);
|
||||||
|
} else {
|
||||||
|
assert(wParam == IDC_PLSEL_RACE_LIST);
|
||||||
|
ok = ok_race(flags.initrole, i, ROLE_RANDOM, ROLE_RANDOM);
|
||||||
|
string = races[i].noun;
|
||||||
|
selected = (flags.initrace == i);
|
||||||
|
}
|
||||||
|
|
||||||
|
SetBkMode(lpdis->hDC, OPAQUE);
|
||||||
|
HBRUSH brush;
|
||||||
|
if (selected) {
|
||||||
|
brush = CreateSolidBrush(RGB(0, 0, 0));
|
||||||
|
SetTextColor(lpdis->hDC, RGB(255, 255, 255));
|
||||||
|
SetBkColor(lpdis->hDC, RGB(0, 0, 0));
|
||||||
|
} else {
|
||||||
|
brush = CreateSolidBrush(RGB(255, 255, 255));
|
||||||
|
if (!ok)
|
||||||
|
SetTextColor(lpdis->hDC, RGB(220, 0, 0));
|
||||||
|
else
|
||||||
|
SetTextColor(lpdis->hDC, RGB(0, 0, 0));
|
||||||
|
SetBkColor(lpdis->hDC, RGB(255, 255, 255));
|
||||||
|
}
|
||||||
|
|
||||||
|
FillRect(lpdis->hDC, &lpdis->rcItem, brush);
|
||||||
|
RECT rect = lpdis->rcItem;
|
||||||
|
rect.left += 5;
|
||||||
|
DrawTextA(lpdis->hDC, string, strlen(string), &rect,
|
||||||
|
DT_LEFT | DT_SINGLELINE | DT_VCENTER);
|
||||||
|
|
||||||
|
if (data->focus == control) {
|
||||||
|
if (lpdis->itemState & LVIS_FOCUSED) {
|
||||||
|
/* draw focus rect */
|
||||||
|
RECT client_rt;
|
||||||
|
|
||||||
|
GetClientRect(lpdis->hwndItem, &client_rt);
|
||||||
|
SetRect(&rect, client_rt.left, lpdis->rcItem.top,
|
||||||
|
client_rt.left + ListView_GetColumnWidth(lpdis->hwndItem, 0),
|
||||||
|
lpdis->rcItem.bottom);
|
||||||
|
DrawFocusRect(lpdis->hDC, &rect);
|
||||||
|
|
||||||
|
{
|
||||||
|
char buf[64];
|
||||||
|
sprintf(buf, "FOCUS %lx %d\n", (unsigned long)control, i);
|
||||||
|
OutputDebugStringA(buf);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DeleteObject(brush);
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -12,6 +12,6 @@
|
|||||||
int mswin_getlin_window(const char *question, char *result,
|
int mswin_getlin_window(const char *question, char *result,
|
||||||
size_t result_size);
|
size_t result_size);
|
||||||
int mswin_ext_cmd_window(int *selection);
|
int mswin_ext_cmd_window(int *selection);
|
||||||
int mswin_player_selection_window(int *selection);
|
boolean mswin_player_selection_window();
|
||||||
|
|
||||||
#endif /* MSWINDlgWindow_h */
|
#endif /* MSWINDlgWindow_h */
|
||||||
|
|||||||
+1
-3
@@ -260,8 +260,6 @@ mswin_init_nhwindows(int *argc, char **argv)
|
|||||||
void
|
void
|
||||||
mswin_player_selection(void)
|
mswin_player_selection(void)
|
||||||
{
|
{
|
||||||
int nRole;
|
|
||||||
|
|
||||||
logDebug("mswin_player_selection()\n");
|
logDebug("mswin_player_selection()\n");
|
||||||
|
|
||||||
if (iflags.wc_player_selection == VIA_DIALOG) {
|
if (iflags.wc_player_selection == VIA_DIALOG) {
|
||||||
@@ -311,7 +309,7 @@ mswin_player_selection(void)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* select a role */
|
/* select a role */
|
||||||
if (mswin_player_selection_window(&nRole) == IDCANCEL) {
|
if (!mswin_player_selection_window()) {
|
||||||
bail(0);
|
bail(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+145
-145
@@ -2,155 +2,155 @@
|
|||||||
// Microsoft Visual C++ generated include file.
|
// Microsoft Visual C++ generated include file.
|
||||||
// Used by winhack.rc
|
// Used by winhack.rc
|
||||||
//
|
//
|
||||||
#define IDC_MYICON 2
|
#define IDC_MYICON 2
|
||||||
#define IDD_WINHACK_DIALOG 102
|
#define IDD_WINHACK_DIALOG 102
|
||||||
#define IDD_ABOUTBOX 103
|
#define IDD_ABOUTBOX 103
|
||||||
#define IDS_APP_TITLE 103
|
#define IDS_APP_TITLE 103
|
||||||
#define IDM_ABOUT 104
|
#define IDM_ABOUT 104
|
||||||
#define IDM_EXIT 105
|
#define IDM_EXIT 105
|
||||||
#define IDS_HELLO 106
|
#define IDS_HELLO 106
|
||||||
#define IDI_NETHACKW 107
|
#define IDI_NETHACKW 107
|
||||||
#define IDC_NETHACKW 109
|
#define IDC_NETHACKW 109
|
||||||
#define IDS_APP_TITLE_SHORT 110
|
#define IDS_APP_TITLE_SHORT 110
|
||||||
#define IDR_MAINFRAME 128
|
#define IDR_MAINFRAME 128
|
||||||
#define IDB_TILES 129
|
#define IDB_TILES 129
|
||||||
#define IDD_TEXT 130
|
#define IDD_TEXT 130
|
||||||
#define IDD_NHTEXT 130
|
#define IDD_NHTEXT 130
|
||||||
#define IDD_MENU 132
|
#define IDD_MENU 132
|
||||||
#define IDB_MENU_SEL 133
|
#define IDB_MENU_SEL 133
|
||||||
#define IDB_MENU_UNSEL 134
|
#define IDB_MENU_UNSEL 134
|
||||||
#define IDD_COMMANDS 136
|
#define IDD_COMMANDS 136
|
||||||
#define IDD_GETLIN 138
|
#define IDD_GETLIN 138
|
||||||
#define IDD_EXTCMD 139
|
#define IDD_EXTCMD 139
|
||||||
#define IDD_PLAYER_SELECTOR 141
|
#define IDD_PLAYER_SELECTOR 141
|
||||||
#define IDB_PETMARK 143
|
#define IDB_PETMARK 143
|
||||||
#define IDB_MENU_SEL_COUNT 144
|
#define IDB_MENU_SEL_COUNT 144
|
||||||
#define IDD_NHRIP 145
|
#define IDD_NHRIP 145
|
||||||
#define IDB_SPLASH 146
|
#define IDB_SPLASH 146
|
||||||
#define IDB_RIP 147
|
#define IDB_RIP 147
|
||||||
#define IDD_SPLASH 148
|
#define IDD_SPLASH 148
|
||||||
#define IDB_PILEMARK 149
|
#define IDB_PILEMARK 149
|
||||||
#define IDC_TEXT_VIEW 1000
|
#define IDC_TEXT_VIEW 1000
|
||||||
#define IDC_TEXT_CONTROL 1000
|
#define IDC_TEXT_CONTROL 1000
|
||||||
#define IDC_CMD_MOVE_NW 1001
|
#define IDC_CMD_MOVE_NW 1001
|
||||||
#define IDC_CMD_MOVE_N 1002
|
#define IDC_CMD_MOVE_N 1002
|
||||||
#define IDC_MENU_LIST 1003
|
#define IDC_MENU_LIST 1003
|
||||||
#define IDC_CMD_MOVE_NE 1003
|
#define IDC_CMD_MOVE_NE 1003
|
||||||
#define IDC_MENU_TEXT 1004
|
#define IDC_MENU_TEXT 1004
|
||||||
#define IDC_CMD_MOVE_W 1004
|
#define IDC_CMD_MOVE_W 1004
|
||||||
#define IDC_CMD_MOVE_SELF 1005
|
#define IDC_CMD_MOVE_SELF 1005
|
||||||
#define IDC_CMD_MOVE_E 1006
|
#define IDC_CMD_MOVE_E 1006
|
||||||
#define IDC_CMD_MOVE_SW 1007
|
#define IDC_CMD_MOVE_SW 1007
|
||||||
#define IDC_CMD_MOVE_S 1008
|
#define IDC_CMD_MOVE_S 1008
|
||||||
#define IDC_CMD_MOVE_SE 1009
|
#define IDC_CMD_MOVE_SE 1009
|
||||||
#define IDC_CMD_MOVE_UP 1010
|
#define IDC_CMD_MOVE_UP 1010
|
||||||
#define IDC_CMD_MOVE_DOWN 1011
|
#define IDC_CMD_MOVE_DOWN 1011
|
||||||
#define IDC_CMD_5 1012
|
#define IDC_CMD_5 1012
|
||||||
#define IDC_CMD_A 1013
|
#define IDC_CMD_A 1013
|
||||||
#define IDC_CMD_B 1014
|
#define IDC_CMD_B 1014
|
||||||
#define IDC_CMD_C 1015
|
#define IDC_CMD_C 1015
|
||||||
#define IDC_CMD_D 1016
|
#define IDC_CMD_D 1016
|
||||||
#define IDC_CMD_E 1017
|
#define IDC_CMD_E 1017
|
||||||
#define IDC_CMD_F 1018
|
#define IDC_CMD_F 1018
|
||||||
#define IDC_CMD_G 1019
|
#define IDC_CMD_G 1019
|
||||||
#define IDC_CMD_H 1020
|
#define IDC_CMD_H 1020
|
||||||
#define IDC_CMD_I 1021
|
#define IDC_CMD_I 1021
|
||||||
#define IDC_CMD_J 1022
|
#define IDC_CMD_J 1022
|
||||||
#define IDC_CMD_K 1023
|
#define IDC_CMD_K 1023
|
||||||
#define IDC_CMD_L 1024
|
#define IDC_CMD_L 1024
|
||||||
#define IDC_CMD_M 1025
|
#define IDC_CMD_M 1025
|
||||||
#define IDC_CMD_N 1026
|
#define IDC_CMD_N 1026
|
||||||
#define IDC_CMD_O 1027
|
#define IDC_CMD_O 1027
|
||||||
#define IDC_CMD_P 1028
|
#define IDC_CMD_P 1028
|
||||||
#define IDC_CMD_Q 1029
|
#define IDC_CMD_Q 1029
|
||||||
#define IDC_CMD_R 1030
|
#define IDC_CMD_R 1030
|
||||||
#define IDC_CMD_S 1031
|
#define IDC_CMD_S 1031
|
||||||
#define IDC_CMD_T 1032
|
#define IDC_CMD_T 1032
|
||||||
#define IDC_CMD_U 1033
|
#define IDC_CMD_U 1033
|
||||||
#define IDC_CMD_V 1034
|
#define IDC_CMD_V 1034
|
||||||
#define IDC_CMD_W 1035
|
#define IDC_CMD_W 1035
|
||||||
#define IDC_CMD_X 1036
|
#define IDC_CMD_X 1036
|
||||||
#define IDC_CMD_Y 1037
|
#define IDC_CMD_Y 1037
|
||||||
#define IDC_CMD_Z 1038
|
#define IDC_CMD_Z 1038
|
||||||
#define IDC_CMD_AA 1039
|
#define IDC_CMD_AA 1039
|
||||||
#define IDC_CMD_BB 1040
|
#define IDC_CMD_BB 1040
|
||||||
#define IDC_CMD_CC 1041
|
#define IDC_CMD_CC 1041
|
||||||
#define IDC_CMD_DD 1042
|
#define IDC_CMD_DD 1042
|
||||||
#define IDC_CMD_EE 1043
|
#define IDC_CMD_EE 1043
|
||||||
#define IDC_CMD_FF 1044
|
#define IDC_CMD_FF 1044
|
||||||
#define IDC_CMD_GG 1045
|
#define IDC_CMD_GG 1045
|
||||||
#define IDC_CMD_HH 1046
|
#define IDC_CMD_HH 1046
|
||||||
#define IDC_CMD_II 1047
|
#define IDC_CMD_II 1047
|
||||||
#define IDC_CMD_JJ 1048
|
#define IDC_CMD_JJ 1048
|
||||||
#define IDC_CMD_KK 1049
|
#define IDC_CMD_KK 1049
|
||||||
#define IDC_CMD_LL 1050
|
#define IDC_CMD_LL 1050
|
||||||
#define IDC_CMD_MM 1051
|
#define IDC_CMD_MM 1051
|
||||||
#define IDC_CMD_NN 1052
|
#define IDC_CMD_NN 1052
|
||||||
#define IDC_CMD_OO 1053
|
#define IDC_CMD_OO 1053
|
||||||
#define IDC_CMD_PP 1054
|
#define IDC_CMD_PP 1054
|
||||||
#define IDC_CMD_QQ 1055
|
#define IDC_CMD_QQ 1055
|
||||||
#define IDC_CMD_RR 1056
|
#define IDC_CMD_RR 1056
|
||||||
#define IDC_CMD_SS 1057
|
#define IDC_CMD_SS 1057
|
||||||
#define IDC_CMD_TT 1058
|
#define IDC_CMD_TT 1058
|
||||||
#define IDC_CMD_UU 1059
|
#define IDC_CMD_UU 1059
|
||||||
#define IDC_CMD_VV 1060
|
#define IDC_CMD_VV 1060
|
||||||
#define IDC_CMD_WW 1061
|
#define IDC_CMD_WW 1061
|
||||||
#define IDC_CMD_XX 1062
|
#define IDC_CMD_XX 1062
|
||||||
#define IDC_CMD_YY 1063
|
#define IDC_CMD_YY 1063
|
||||||
#define IDC_CMD_ZZ 1064
|
#define IDC_CMD_ZZ 1064
|
||||||
#define IDC_CMD_FIRST 1100
|
#define IDC_CMD_FIRST 1100
|
||||||
#define IDC_CMD_LAST 1300
|
#define IDC_CMD_LAST 1300
|
||||||
#define IDC_GETLIN_EDIT 1309
|
#define IDC_GETLIN_EDIT 1309
|
||||||
#define IDC_EXTCMD_LIST 1310
|
#define IDC_EXTCMD_LIST 1310
|
||||||
#define IDC_PLSEL_NAME 1314
|
#define IDC_PLSEL_NAME 1314
|
||||||
#define IDC_PLSEL_ROLE_RANDOM 1315
|
#define IDC_PLSEL_RANDOM 1315
|
||||||
#define IDC_PLSEL_RACE_RANDOM 1318
|
#define IDC_ABOUT_VERSION 1327
|
||||||
#define IDC_PLSEL_GENDER_RANDOM 1319
|
#define IDC_ABOUT_COPYRIGHT 1328
|
||||||
#define IDC_PLSEL_ALIGN_RANDOM 1320
|
#define IDC_EXTRAINFO 1331
|
||||||
#define IDC_PLSEL_ROLE_LIST 1323
|
#define IDC_PLSEL_ROLE_LIST 1332
|
||||||
#define IDC_PLSEL_RACE_LIST 1324
|
#define IDC_PLSEL_RACE_LIST 1333
|
||||||
#define IDC_PLSEL_ALIGN_LIST 1325
|
#define IDC_PLSEL_ALIGN_LAWFUL 1334
|
||||||
#define IDC_PLSEL_GENDER_LIST 1326
|
#define IDC_PLSEL_ALIGN_NEUTRAL 1335
|
||||||
#define IDC_ABOUT_VERSION 1327
|
#define IDC_PLSEL_ALIGN_CHAOTIC 1336
|
||||||
#define IDC_ABOUT_COPYRIGHT 1328
|
#define IDC_PLSEL_GENDER_MALE 1337
|
||||||
#define IDC_EXTRAINFO 1331
|
#define IDC_PLSEL_GENDER_FEMALE 1338
|
||||||
#define IDM_SAVE 32771
|
#define IDM_SAVE 32771
|
||||||
#define IDM_HELP_LONG 32772
|
#define IDM_HELP_LONG 32772
|
||||||
#define IDM_HELP_COMMANDS 32773
|
#define IDM_HELP_COMMANDS 32773
|
||||||
#define IDM_HELP_HISTORY 32774
|
#define IDM_HELP_HISTORY 32774
|
||||||
#define IDM_HELP_INFO_CHAR 32775
|
#define IDM_HELP_INFO_CHAR 32775
|
||||||
#define IDM_HELP_INFO_KEY 32776
|
#define IDM_HELP_INFO_KEY 32776
|
||||||
#define IDM_HELP_OPTIONS 32777
|
#define IDM_HELP_OPTIONS 32777
|
||||||
#define IDM_HELP_OPTIONS_LONG 32778
|
#define IDM_HELP_OPTIONS_LONG 32778
|
||||||
#define IDM_HELP_EXTCMD 32779
|
#define IDM_HELP_EXTCMD 32779
|
||||||
#define IDM_HELP_LICENSE 32780
|
#define IDM_HELP_LICENSE 32780
|
||||||
#define IDM_HELP_PORTHELP 32781
|
#define IDM_HELP_PORTHELP 32781
|
||||||
#define IDM_MAP_TILES 32782
|
#define IDM_MAP_TILES 32782
|
||||||
#define IDM_MAP_ASCII4X6 32783
|
#define IDM_MAP_ASCII4X6 32783
|
||||||
#define IDM_MAP_ASCII6X8 32784
|
#define IDM_MAP_ASCII6X8 32784
|
||||||
#define IDM_MAP_ASCII8X8 32785
|
#define IDM_MAP_ASCII8X8 32785
|
||||||
#define IDM_MAP_ASCII16X8 32786
|
#define IDM_MAP_ASCII16X8 32786
|
||||||
#define IDM_MAP_ASCII7X12 32787
|
#define IDM_MAP_ASCII7X12 32787
|
||||||
#define IDM_MAP_ASCII8X12 32788
|
#define IDM_MAP_ASCII8X12 32788
|
||||||
#define IDM_MAP_ASCII16X12 32789
|
#define IDM_MAP_ASCII16X12 32789
|
||||||
#define IDM_MAP_ASCII12X16 32790
|
#define IDM_MAP_ASCII12X16 32790
|
||||||
#define IDM_MAP_ASCII10X18 32791
|
#define IDM_MAP_ASCII10X18 32791
|
||||||
#define IDM_MAP_FIT_TO_SCREEN 32792
|
#define IDM_MAP_FIT_TO_SCREEN 32792
|
||||||
#define IDM_NHMODE 32794
|
#define IDM_NHMODE 32794
|
||||||
#define IDM_CLEARSETTINGS 32795
|
#define IDM_CLEARSETTINGS 32795
|
||||||
#define IDM_SETTING_AUTOLAYOUT 32796
|
#define IDM_SETTING_AUTOLAYOUT 32796
|
||||||
#define IDM_SETTING_LOCKWINDOWS 32797
|
#define IDM_SETTING_LOCKWINDOWS 32797
|
||||||
#define IDM_SETTING_SCREEN_TO_CLIPBOARD 32798
|
#define IDM_SETTING_SCREEN_TO_CLIPBOARD 32798
|
||||||
#define IDM_SETTING_SCREEN_TO_FILE 32799
|
#define IDM_SETTING_SCREEN_TO_FILE 32799
|
||||||
#define IDC_STATIC -1
|
#define IDC_STATIC -1
|
||||||
|
|
||||||
// Next default values for new objects
|
// Next default values for new objects
|
||||||
//
|
//
|
||||||
#ifdef APSTUDIO_INVOKED
|
#ifdef APSTUDIO_INVOKED
|
||||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 145
|
#define _APS_NEXT_RESOURCE_VALUE 146
|
||||||
#define _APS_NEXT_COMMAND_VALUE 32800
|
#define _APS_NEXT_COMMAND_VALUE 32800
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1332
|
#define _APS_NEXT_CONTROL_VALUE 1341
|
||||||
#define _APS_NEXT_SYMED_VALUE 110
|
#define _APS_NEXT_SYMED_VALUE 110
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -29,6 +29,7 @@
|
|||||||
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
#define WIN32_LEAN_AND_MEAN
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include <windowsx.h>
|
||||||
#include <commctrl.h>
|
#include <commctrl.h>
|
||||||
#include <tchar.h>
|
#include <tchar.h>
|
||||||
#include "hack.h"
|
#include "hack.h"
|
||||||
|
|||||||
+87
-81
@@ -1,4 +1,4 @@
|
|||||||
//Microsoft Developer Studio generated resource script.
|
// Microsoft Visual C++ generated resource script.
|
||||||
//
|
//
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
|
|
||||||
@@ -19,13 +19,11 @@ LANGUAGE LANG_ENGLISH,SUBLANG_ENGLISH_US
|
|||||||
#undef APSTUDIO_READONLY_SYMBOLS
|
#undef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
// English (U.S.) resources
|
// English (United States) resources
|
||||||
|
|
||||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||||
#ifdef _WIN32
|
|
||||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||||
#pragma code_page(1252)
|
#pragma code_page(1252)
|
||||||
#endif //_WIN32
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
@@ -34,14 +32,15 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
|||||||
|
|
||||||
// Icon with lowest ID value placed first to ensure application icon
|
// Icon with lowest ID value placed first to ensure application icon
|
||||||
// remains consistent on all systems.
|
// remains consistent on all systems.
|
||||||
IDI_NETHACKW ICON DISCARDABLE "NETHACK.ICO"
|
IDI_NETHACKW ICON "NETHACK.ICO"
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Menu
|
// Menu
|
||||||
//
|
//
|
||||||
|
|
||||||
IDC_NETHACKW MENU DISCARDABLE
|
IDC_NETHACKW MENU
|
||||||
BEGIN
|
BEGIN
|
||||||
POPUP "&File"
|
POPUP "&File"
|
||||||
BEGIN
|
BEGIN
|
||||||
@@ -98,7 +97,7 @@ END
|
|||||||
// Accelerator
|
// Accelerator
|
||||||
//
|
//
|
||||||
|
|
||||||
IDC_NETHACKW ACCELERATORS MOVEABLE PURE
|
IDC_NETHACKW ACCELERATORS
|
||||||
BEGIN
|
BEGIN
|
||||||
"?", IDM_ABOUT, ASCII, ALT
|
"?", IDM_ABOUT, ASCII, ALT
|
||||||
"/", IDM_ABOUT, ASCII, ALT
|
"/", IDM_ABOUT, ASCII, ALT
|
||||||
@@ -110,8 +109,8 @@ END
|
|||||||
// Dialog
|
// Dialog
|
||||||
//
|
//
|
||||||
|
|
||||||
IDD_ABOUTBOX DIALOG DISCARDABLE 22, 17, 230, 75
|
IDD_ABOUTBOX DIALOG 22, 17, 230, 75
|
||||||
STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "About"
|
CAPTION "About"
|
||||||
FONT 8, "System"
|
FONT 8, "System"
|
||||||
BEGIN
|
BEGIN
|
||||||
@@ -121,29 +120,27 @@ BEGIN
|
|||||||
END
|
END
|
||||||
|
|
||||||
IDD_NHTEXT DIALOGEX 0, 0, 172, 178
|
IDD_NHTEXT DIALOGEX 0, 0, 172, 178
|
||||||
STYLE WS_CHILD | WS_CLIPSIBLINGS | WS_THICKFRAME
|
STYLE DS_SETFONT | WS_CHILD | WS_CLIPSIBLINGS | WS_THICKFRAME
|
||||||
EXSTYLE WS_EX_CLIENTEDGE | WS_EX_CONTROLPARENT
|
EXSTYLE WS_EX_CLIENTEDGE | WS_EX_CONTROLPARENT
|
||||||
FONT 8, "MS Sans Serif", 0, 0
|
FONT 8, "MS Sans Serif", 0, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
EDITTEXT IDC_TEXT_CONTROL,0,0,172,160,ES_MULTILINE |
|
EDITTEXT IDC_TEXT_CONTROL,0,0,172,160,ES_MULTILINE | ES_OEMCONVERT | ES_READONLY | WS_VSCROLL | WS_HSCROLL | NOT WS_TABSTOP
|
||||||
ES_OEMCONVERT | ES_READONLY | WS_VSCROLL | WS_HSCROLL | NOT WS_TABSTOP
|
|
||||||
DEFPUSHBUTTON "OK",IDOK,54,163,50,14,BS_FLAT | NOT WS_TABSTOP
|
DEFPUSHBUTTON "OK",IDOK,54,163,50,14,BS_FLAT | NOT WS_TABSTOP
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_MENU DIALOGEX 0, 0, 187, 153
|
IDD_MENU DIALOGEX 0, 0, 187, 153
|
||||||
STYLE WS_CHILD | WS_CLIPSIBLINGS | WS_THICKFRAME
|
STYLE DS_SETFONT | WS_CHILD | WS_CLIPSIBLINGS | WS_THICKFRAME
|
||||||
EXSTYLE WS_EX_CLIENTEDGE | WS_EX_CONTROLPARENT
|
EXSTYLE WS_EX_CLIENTEDGE | WS_EX_CONTROLPARENT
|
||||||
FONT 8, "MS Sans Serif", 0, 0
|
FONT 8, "MS Sans Serif", 0, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
LISTBOX IDC_MENU_LIST,10,10,170,55,LBS_SORT | NOT WS_BORDER
|
LISTBOX IDC_MENU_LIST,10,10,170,55,LBS_SORT | NOT WS_BORDER
|
||||||
EDITTEXT IDC_MENU_TEXT,10,70,170,60,ES_MULTILINE | ES_OEMCONVERT |
|
EDITTEXT IDC_MENU_TEXT,10,70,170,60,ES_MULTILINE | ES_OEMCONVERT | ES_READONLY | NOT WS_BORDER | WS_VSCROLL | WS_HSCROLL | NOT WS_TABSTOP
|
||||||
ES_READONLY | WS_VSCROLL | WS_HSCROLL | NOT WS_TABSTOP | NOT WS_BORDER
|
|
||||||
DEFPUSHBUTTON "OK",IDOK,7,132,50,14,BS_FLAT | NOT WS_TABSTOP
|
DEFPUSHBUTTON "OK",IDOK,7,132,50,14,BS_FLAT | NOT WS_TABSTOP
|
||||||
PUSHBUTTON "Cancel",IDCANCEL,130,132,50,14,BS_FLAT | NOT WS_TABSTOP
|
PUSHBUTTON "Cancel",IDCANCEL,130,132,50,14,BS_FLAT | NOT WS_TABSTOP
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_GETLIN DIALOG DISCARDABLE 0, 0, 131, 29
|
IDD_GETLIN DIALOG 0, 0, 131, 29
|
||||||
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Question?"
|
CAPTION "Question?"
|
||||||
FONT 8, "MS Sans Serif"
|
FONT 8, "MS Sans Serif"
|
||||||
BEGIN
|
BEGIN
|
||||||
@@ -152,65 +149,54 @@ BEGIN
|
|||||||
EDITTEXT IDC_GETLIN_EDIT,0,0,130,13,ES_AUTOHSCROLL
|
EDITTEXT IDC_GETLIN_EDIT,0,0,130,13,ES_AUTOHSCROLL
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_EXTCMD DIALOG DISCARDABLE 0, 0, 137, 117
|
IDD_EXTCMD DIALOG 0, 0, 137, 117
|
||||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Extended Commands"
|
CAPTION "Extended Commands"
|
||||||
FONT 8, "MS Sans Serif"
|
FONT 8, "MS Sans Serif"
|
||||||
BEGIN
|
BEGIN
|
||||||
DEFPUSHBUTTON "OK",IDOK,80,7,50,14
|
DEFPUSHBUTTON "OK",IDOK,80,7,50,14
|
||||||
PUSHBUTTON "Cancel",IDCANCEL,80,24,50,14
|
PUSHBUTTON "Cancel",IDCANCEL,80,24,50,14
|
||||||
LISTBOX IDC_EXTCMD_LIST,7,7,65,103,LBS_NOINTEGRALHEIGHT |
|
LISTBOX IDC_EXTCMD_LIST,7,7,65,103,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
|
||||||
WS_VSCROLL | WS_TABSTOP
|
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_PLAYER_SELECTOR DIALOG DISCARDABLE 0, 0, 152, 169
|
IDD_PLAYER_SELECTOR DIALOGEX 0, 0, 225, 212
|
||||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "What are you?"
|
CAPTION "What are you?"
|
||||||
FONT 8, "MS Sans Serif"
|
FONT 8, "MS Sans Serif", 0, 0, 0x0
|
||||||
BEGIN
|
BEGIN
|
||||||
DEFPUSHBUTTON "Play",IDOK,7,148,66,14
|
DEFPUSHBUTTON "Play",IDOK,12,192,54,14,WS_GROUP
|
||||||
PUSHBUTTON "Quit",IDCANCEL,79,148,66,14
|
PUSHBUTTON "Quit",IDCANCEL,162,192,54,14,WS_GROUP
|
||||||
LTEXT "Name:",IDC_STATIC,7,8,25,10
|
EDITTEXT IDC_PLSEL_NAME,12,12,105,12,ES_AUTOHSCROLL | ES_READONLY | WS_GROUP | NOT WS_TABSTOP
|
||||||
EDITTEXT IDC_PLSEL_NAME,40,7,105,12,ES_AUTOHSCROLL | ES_READONLY |
|
CONTROL "Neutral",IDC_PLSEL_ALIGN_NEUTRAL,"Button",BS_AUTORADIOBUTTON,168,60,37,10
|
||||||
NOT WS_TABSTOP
|
CONTROL "Lawful",IDC_PLSEL_ALIGN_LAWFUL,"Button",BS_AUTORADIOBUTTON | WS_GROUP,168,48,35,10
|
||||||
GROUPBOX "Role",IDC_STATIC,7,21,138,30
|
CONTROL "Chaotic",IDC_PLSEL_ALIGN_CHAOTIC,"Button",BS_AUTORADIOBUTTON,168,72,38,10
|
||||||
CONTROL "Random",IDC_PLSEL_ROLE_RANDOM,"Button",BS_AUTOCHECKBOX |
|
CONTROL "Male",IDC_PLSEL_GENDER_MALE,"Button",BS_AUTORADIOBUTTON | WS_GROUP,168,108,30,10
|
||||||
WS_TABSTOP,14,34,40,10
|
CONTROL "Female",IDC_PLSEL_GENDER_FEMALE,"Button",BS_AUTORADIOBUTTON,168,120,38,10
|
||||||
COMBOBOX IDC_PLSEL_ROLE_LIST,63,33,75,50,CBS_DROPDOWNLIST |
|
GROUPBOX "Alignment",IDC_STATIC,162,36,48,54
|
||||||
WS_VSCROLL | WS_TABSTOP
|
GROUPBOX "Gender",IDC_STATIC,162,96,48,42
|
||||||
GROUPBOX "Race",IDC_STATIC,7,51,138,30
|
GROUPBOX "Role",IDC_STATIC,6,36,72,150
|
||||||
CONTROL "Random",IDC_PLSEL_RACE_RANDOM,"Button",BS_AUTOCHECKBOX |
|
GROUPBOX "Race",IDC_STATIC,84,36,72,72
|
||||||
WS_TABSTOP,14,63,40,10
|
PUSHBUTTON "Random",IDC_PLSEL_RANDOM,90,192,54,14,WS_GROUP
|
||||||
COMBOBOX IDC_PLSEL_RACE_LIST,63,62,75,45,CBS_DROPDOWNLIST |
|
GROUPBOX "Name",IDC_STATIC,6,0,120,30
|
||||||
WS_VSCROLL | WS_TABSTOP
|
CONTROL "",IDC_PLSEL_ROLE_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_OWNERDRAWFIXED | LVS_ALIGNLEFT | LVS_NOSCROLL | LVS_NOCOLUMNHEADER | WS_BORDER | WS_GROUP | WS_TABSTOP,12,48,60,130
|
||||||
GROUPBOX "Gender",IDC_STATIC,7,81,138,30
|
CONTROL "",IDC_PLSEL_RACE_LIST,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_OWNERDRAWFIXED | LVS_ALIGNLEFT | LVS_NOSCROLL | LVS_NOCOLUMNHEADER | WS_BORDER | WS_GROUP | WS_TABSTOP,90,48,60,51
|
||||||
CONTROL "Random",IDC_PLSEL_GENDER_RANDOM,"Button",
|
|
||||||
BS_AUTOCHECKBOX | WS_TABSTOP,14,93,40,10
|
|
||||||
COMBOBOX IDC_PLSEL_GENDER_LIST,63,92,75,40,CBS_DROPDOWNLIST |
|
|
||||||
WS_VSCROLL | WS_TABSTOP
|
|
||||||
GROUPBOX "Alignment",IDC_STATIC,7,111,138,30
|
|
||||||
CONTROL "Random",IDC_PLSEL_ALIGN_RANDOM,"Button",BS_AUTOCHECKBOX |
|
|
||||||
WS_TABSTOP,13,123,40,10
|
|
||||||
COMBOBOX IDC_PLSEL_ALIGN_LIST,63,122,75,45,CBS_DROPDOWNLIST |
|
|
||||||
WS_VSCROLL | WS_TABSTOP
|
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_NHRIP DIALOGEX 0, 0, 281, 209
|
IDD_NHRIP DIALOGEX 0, 0, 281, 209
|
||||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Here lies..."
|
CAPTION "Here lies..."
|
||||||
FONT 8, "MS Sans Serif", 0, 0
|
FONT 8, "MS Sans Serif", 0, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
DEFPUSHBUTTON "OK",IDOK,82,188,50,14
|
DEFPUSHBUTTON "OK",IDOK,82,188,50,14
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_SPLASH DIALOG DISCARDABLE 0, 0, 281, 257
|
IDD_SPLASH DIALOG 0, 0, 281, 257
|
||||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Welcome to NetHack"
|
CAPTION "Welcome to NetHack"
|
||||||
FONT 8, "MS Sans Serif"
|
FONT 8, "MS Sans Serif"
|
||||||
BEGIN
|
BEGIN
|
||||||
DEFPUSHBUTTON "OK",IDOK,224,236,50,14
|
DEFPUSHBUTTON "OK",IDOK,224,236,50,14
|
||||||
EDITTEXT IDC_EXTRAINFO,7,176,267,52,ES_MULTILINE | ES_READONLY |
|
EDITTEXT IDC_EXTRAINFO,7,176,267,52,ES_MULTILINE | ES_READONLY | WS_VSCROLL
|
||||||
WS_VSCROLL
|
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
@@ -220,7 +206,7 @@ END
|
|||||||
// TEXTINCLUDE
|
// TEXTINCLUDE
|
||||||
//
|
//
|
||||||
|
|
||||||
2 TEXTINCLUDE DISCARDABLE
|
2 TEXTINCLUDE
|
||||||
BEGIN
|
BEGIN
|
||||||
"#if defined(__BORLANDC__)\r\n"
|
"#if defined(__BORLANDC__)\r\n"
|
||||||
"LANGUAGE LANG_ENGLISH,SUBLANG_ENGLISH_US\r\n"
|
"LANGUAGE LANG_ENGLISH,SUBLANG_ENGLISH_US\r\n"
|
||||||
@@ -232,13 +218,13 @@ BEGIN
|
|||||||
"\0"
|
"\0"
|
||||||
END
|
END
|
||||||
|
|
||||||
3 TEXTINCLUDE DISCARDABLE
|
3 TEXTINCLUDE
|
||||||
BEGIN
|
BEGIN
|
||||||
"\r\n"
|
"\r\n"
|
||||||
"\0"
|
"\0"
|
||||||
END
|
END
|
||||||
|
|
||||||
1 TEXTINCLUDE DISCARDABLE
|
1 TEXTINCLUDE
|
||||||
BEGIN
|
BEGIN
|
||||||
"resource.h\0"
|
"resource.h\0"
|
||||||
END
|
END
|
||||||
@@ -251,14 +237,22 @@ END
|
|||||||
// Bitmap
|
// Bitmap
|
||||||
//
|
//
|
||||||
|
|
||||||
IDB_TILES BITMAP DISCARDABLE "tiles.bmp"
|
IDB_TILES BITMAP "tiles.bmp"
|
||||||
IDB_MENU_SEL BITMAP DISCARDABLE "mnsel.bmp"
|
|
||||||
IDB_MENU_UNSEL BITMAP DISCARDABLE "mnunsel.bmp"
|
IDB_MENU_SEL BITMAP "mnsel.bmp"
|
||||||
IDB_PETMARK BITMAP DISCARDABLE "petmark.bmp"
|
|
||||||
IDB_PILEMARK BITMAP DISCARDABLE "pilemark.bmp"
|
IDB_MENU_UNSEL BITMAP "mnunsel.bmp"
|
||||||
IDB_MENU_SEL_COUNT BITMAP DISCARDABLE "mnselcnt.bmp"
|
|
||||||
IDB_RIP BITMAP DISCARDABLE "rip.bmp"
|
IDB_PETMARK BITMAP "petmark.bmp"
|
||||||
IDB_SPLASH BITMAP DISCARDABLE "splash.bmp"
|
|
||||||
|
IDB_PILEMARK BITMAP "pilemark.bmp"
|
||||||
|
|
||||||
|
IDB_MENU_SEL_COUNT BITMAP "mnselcnt.bmp"
|
||||||
|
|
||||||
|
IDB_RIP BITMAP "rip.bmp"
|
||||||
|
|
||||||
|
IDB_SPLASH BITMAP "splash.bmp"
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
@@ -266,7 +260,7 @@ IDB_SPLASH BITMAP DISCARDABLE "splash.bmp"
|
|||||||
//
|
//
|
||||||
|
|
||||||
#ifdef APSTUDIO_INVOKED
|
#ifdef APSTUDIO_INVOKED
|
||||||
GUIDELINES DESIGNINFO DISCARDABLE
|
GUIDELINES DESIGNINFO
|
||||||
BEGIN
|
BEGIN
|
||||||
IDD_NHTEXT, DIALOG
|
IDD_NHTEXT, DIALOG
|
||||||
BEGIN
|
BEGIN
|
||||||
@@ -297,9 +291,9 @@ BEGIN
|
|||||||
IDD_PLAYER_SELECTOR, DIALOG
|
IDD_PLAYER_SELECTOR, DIALOG
|
||||||
BEGIN
|
BEGIN
|
||||||
LEFTMARGIN, 7
|
LEFTMARGIN, 7
|
||||||
RIGHTMARGIN, 145
|
RIGHTMARGIN, 218
|
||||||
TOPMARGIN, 7
|
TOPMARGIN, 7
|
||||||
BOTTOMMARGIN, 162
|
BOTTOMMARGIN, 205
|
||||||
END
|
END
|
||||||
|
|
||||||
IDD_NHRIP, DIALOG
|
IDD_NHRIP, DIALOG
|
||||||
@@ -342,14 +336,14 @@ BEGIN
|
|||||||
BEGIN
|
BEGIN
|
||||||
BLOCK "040904b0"
|
BLOCK "040904b0"
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "FileDescription", "NetHack for Windows - Graphical Interface\0"
|
VALUE "FileDescription", "NetHack for Windows - Graphical Interface"
|
||||||
VALUE "FileVersion", "3.6.1\0"
|
VALUE "FileVersion", "3.6.1"
|
||||||
VALUE "InternalName", "NetHackW\0"
|
VALUE "InternalName", "NetHackW"
|
||||||
VALUE "LegalCopyright", "Copyright (C) 1985 - 2017. By Stichting Mathematisch Centrum and M. Stephenson. See license for details.\0"
|
VALUE "LegalCopyright", "Copyright (C) 1985 - 2017. By Stichting Mathematisch Centrum and M. Stephenson. See license for details."
|
||||||
VALUE "OriginalFilename", "NetHackW.exe\0"
|
VALUE "OriginalFilename", "NetHackW.exe"
|
||||||
VALUE "PrivateBuild", "140606\0"
|
VALUE "PrivateBuild", "140606"
|
||||||
VALUE "ProductName", "NetHack\0"
|
VALUE "ProductName", "NetHack"
|
||||||
VALUE "ProductVersion", "3.6.1\0"
|
VALUE "ProductVersion", "3.6.1"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
@@ -358,19 +352,31 @@ BEGIN
|
|||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// AFX_DIALOG_LAYOUT
|
||||||
|
//
|
||||||
|
|
||||||
|
IDD_PLAYER_SELECTOR AFX_DIALOG_LAYOUT
|
||||||
|
BEGIN
|
||||||
|
0
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// String Table
|
// String Table
|
||||||
//
|
//
|
||||||
|
|
||||||
STRINGTABLE DISCARDABLE
|
STRINGTABLE
|
||||||
BEGIN
|
BEGIN
|
||||||
IDS_APP_TITLE "NetHack for Windows - Graphical Interface"
|
IDS_APP_TITLE "NetHack for Windows - Graphical Interface"
|
||||||
IDC_NETHACKW "NETHACKW"
|
IDC_NETHACKW "NETHACKW"
|
||||||
IDS_APP_TITLE_SHORT "NetHack for Windows"
|
IDS_APP_TITLE_SHORT "NetHack for Windows"
|
||||||
END
|
END
|
||||||
|
|
||||||
#endif // English (U.S.) resources
|
#endif // English (United States) resources
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user