Get the scenario and PC editors to build

This commit is contained in:
2014-12-30 23:16:49 -05:00
parent 16d31f4a3f
commit 39ed049faa
12 changed files with 689 additions and 274 deletions

View File

@@ -17,6 +17,7 @@
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
/////////////////////////////////////////////////////////////////////////////
//
@@ -62,36 +63,46 @@ IDR_MENU1 MENU
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&Open Game\tCtrl+O", 2
MENUITEM "&Save Game\tCtrl+S", 1
MENUITEM "Save As...", 3
MENUITEM "&Open Game\tCtrl+O", IDM_FILE_OPEN
MENUITEM "Close\tCtrl+W", IDM_FILE_CLOSE
MENUITEM SEPARATOR
MENUITEM "&Quit\tCtrl+Q", 4
END
POPUP "&Scenario Editing"
BEGIN
MENUITEM "Edit Day", 70
MENUITEM "&Save Game\tCtrl+S", IDM_FILE_SAVE
MENUITEM "Save As...", IDM_FILE_SAVE_AS
MENUITEM "Revert to Saved", IDM_FILE_REVERT
MENUITEM SEPARATOR
MENUITEM "Leave Town", 44
MENUITEM "Make Towns Forget You", 48
MENUITEM "Add All Town Maps", 72
MENUITEM "Add All Outdoor Maps", 71
MENUITEM SEPARATOR
MENUITEM "Remove Party From Scenario", 55
MENUITEM "&Quit\tCtrl+Q", IDM_FILE_QUIT
END
POPUP "&Edit Party"
BEGIN
MENUITEM "Edit Gold", 41
MENUITEM "Edit Food", 42
MENUITEM "Edit Alchemy", 62
MENUITEM "Edit Gold", IDM_PARTY_GOLD
MENUITEM "Edit Food", IDM_PARTY_FOOD
MENUITEM "Edit Alchemy", IDM_PARTY_ALCHEMY
MENUITEM SEPARATOR
MENUITEM "Heal Damage", 51
MENUITEM "Restore Spell Points", 52
MENUITEM "Raise Dead, Destone, etc.", 53
MENUITEM "Remove Bad Conditions", 54
MENUITEM "Heal Damage", IDM_PARTY_DAMAGE
MENUITEM "Restore Spell Points", IDM_PARTY_MANA
MENUITEM "Raise Dead, Destone, etc.", IDM_PARTY_DEAD
MENUITEM "Remove Bad Conditions", IDM_PARTY_CONDITIONS
MENUITEM SEPARATOR
MENUITEM "Reunite Party", 45
MENUITEM "Own All Boats/Horses", 63
MENUITEM "Reunite Party", IDM_PARTY_REUNITE
MENUITEM "Own All Boats/Horses", IDM_PARTY_VEHICLES
MENUITEM SEPARATOR
MENUITEM "Edit Mage Spells", IDM_PARTY_MAGE
MENUITEM "Edit Priest Spells", IDM_PARTY_PRIEST
MENUITEM "Edit Traits", IDM_PARTY_TRAITS
MENUITEM "Edit Skills", IDM_PARTY_SKILLS
MENUITEM "Edit XP", IDM_PARTY_XP
END
POPUP "&Scenario Editing"
BEGIN
MENUITEM "Edit Day", IDM_SCEN_DAY
MENUITEM SEPARATOR
MENUITEM "Leave Town", IDM_SCEN_LEAVE_TOWN
MENUITEM "Make Towns Forget You", IDM_SCEN_TOWN_RESET
MENUITEM "Add All Town Maps", IDM_SCEN_TOWN_MAP
MENUITEM "Add All Outdoor Maps", IDM_SCEN_OUT_MAP
MENUITEM SEPARATOR
MENUITEM "Remove Party From Scenario", IDM_SCEN_LEAVE
MENUITEM "Set Stuff Done Flag", IDM_SCEN_SDF
END
POPUP "&I1"
BEGIN
@@ -111,9 +122,7 @@ BEGIN
END
POPUP "&Help"
BEGIN
MENUITEM "Index\tF1", 100
MENUITEM SEPARATOR
MENUITEM "About Blades of Exile Editor", 200
MENUITEM "About Blades of Exile Editor", IDM_HELP
END
END
@@ -122,13 +131,13 @@ END
//
// Accelerator
//
ACCELERATORS_1 ACCELERATORS
{
IDR_ACCELERATOR1 ACCELERATORS
BEGIN
"^O", 2, ASCII
"^S", 1, ASCII
"^Q", 4, ASCII
}
END
#endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////

View File

@@ -59,7 +59,7 @@
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>opengl32.lib;sfml-system.lib;sfml-window.lib;sfml-graphics.lib;sfml-audio.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>opengl32.lib;sfml-system-d.lib;sfml-window-d.lib;sfml-graphics-d.lib;sfml-audio-d.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
<EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
</Link>
</ItemDefinitionGroup>

View File

@@ -3,17 +3,43 @@
// Used by Char Editor.rc
//
#define IDR_MENU1 101
#define IDR_MENU2 102
#define IDR_MENU3 103
#define IDM_FILE_OPEN 101
#define IDM_FILE_CLOSE 102
#define IDM_FILE_SAVE 103
#define IDR_ACCELERATOR1 104
#define IDM_FILE_SAVE_AS 104
#define IDM_FILE_REVERT 105
#define IDM_FILE_QUIT 106
#define IDM_PARTY_GOLD 107
#define IDM_PARTY_FOOD 108
#define IDM_PARTY_ALCHEMY 109
#define IDM_PARTY_DAMAGE 110
#define IDM_PARTY_MANA 111
#define IDM_PARTY_DEAD 112
#define IDM_PARTY_CONDITIONS 113
#define IDM_PARTY_REUNITE 114
#define IDM_PARTY_VEHICLES 115
#define IDM_PARTY_MAGE 116
#define IDM_PARTY_PRIEST 117
#define IDM_PARTY_TRAITS 118
#define IDM_PARTY_SKILLS 119
#define IDM_PARTY_XP 120
#define IDM_SCEN_DAY 121
#define IDM_SCEN_LEAVE_TOWN 122
#define IDM_SCEN_TOWN_RESET 123
#define IDM_SCEN_TOWN_MAP 124
#define IDM_SCEN_OUT_MAP 125
#define IDM_SCEN_LEAVE 126
#define IDM_SCEN_SDF 127
#define IDM_HELP 128
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 105
#define _APS_NEXT_COMMAND_VALUE 40002
#define _APS_NEXT_COMMAND_VALUE 40010
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#define _APS_NEXT_SYMED_VALUE 129
#endif
#endif

View File

@@ -15,6 +15,10 @@
/////////////////////////////////////////////////////////////////////////////
// English (United States) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
/////////////////////////////////////////////////////////////////////////////
//
// Icon
@@ -24,9 +28,6 @@
// remains consistent on all systems.
IDI_BLADESOFEXILE ICON "../../../Win32/scenedit/BLSCENED.ICO"
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
@@ -59,90 +60,97 @@ END
//
IDR_MENU1 MENU
{
BEGIN
POPUP "&File"
{
MENUITEM "&Open Scenario\tCtrl+O", 1
MENUITEM "&Save Scenario\tCtrl+S", 2
MENUITEM "&New Scenario\tCtrl+N", 3
BEGIN
MENUITEM "&New Scenario\tCtrl+N", IDM_FILE_NEW
MENUITEM "&Open Scenario\tCtrl+O", IDM_FILE_OPEN
MENUITEM SEPARATOR
MENUITEM "&Quit\tCtrl+Q", 5
}
MENUITEM "Close Scenario\tCtrl+W", IDM_FILE_CLOSE
MENUITEM "&Save Scenario\tCtrl+S", IDM_FILE_SAVE
MENUITEM "Revert to Saved", IDM_FILE_REVERT
MENUITEM SEPARATOR
MENUITEM "&Quit\tCtrl+Q", IDM_FILE_QUIT
END
POPUP "Edit"
BEGIN
MENUITEM "Undo\tCtrl+Z", IDM_EDIT_UNDO
MENUITEM "Redo\tCtrl+Y", IDM_EDIT_REDO
MENUITEM SEPARATOR
MENUITEM "Cut\tCtrl+X", IDM_EDIT_CUT
MENUITEM "Copy\tCtrl+C", IDM_EDIT_COPY
MENUITEM "Paste\tCtrl+V", IDM_EDIT_PASTE
MENUITEM "Delete", IDM_EDIT_DELETE
MENUITEM "Select All\tCtrl+A", IDM_EDIT_SELECT
END
POPUP "&Scenario"
{
MENUITEM "&Create New Town", 101
BEGIN
MENUITEM "&Create New Town", IDM_SCEN_NEW_TOWN
MENUITEM SEPARATOR
MENUITEM "&Scenario Details", 103
MENUITEM "Scenario Intr&o Text", 104
MENUITEM "Set Starting &Location: Town", 105
MENUITEM "Set Starting &Location: Outdoors", 106
MENUITEM "&Scenario Details", IDM_SCEN_DETAILS
MENUITEM "Scenario Intr&o Text", IDM_SCEN_INTRO
MENUITEM "Set Starting &Location", IDM_SCEN_START
MENUITEM "Change Password", IDM_SCEN_PASSWORD
MENUITEM SEPARATOR
MENUITEM "Advanced:", 107
MENUITEM " Edit Special &Nodes", 109
MENUITEM " Edit Scenario &Text", 110
MENUITEM " &Import Town", 111
MENUITEM " Edit Saved Item &Rectangles", 112
MENUITEM " Edit &Horses", 113
MENUITEM " Edit &Boats", 114
MENUITEM " Set &Variable Town Entry", 115
MENUITEM " Set Scenario &Event Timers", 116
MENUITEM " Edit Item &Placement Shortcuts", 117
MENUITEM " &Delete Last Town", 118
MENUITEM SEPARATOR
MENUITEM " Write D&ata To Text File", 119
MENUITEM " Do &Full Text Dump", 120
MENUITEM " Scenario Shoppin&g Text Dump", 121
MENUITEM " Scenario &Monster Dump", 122
MENUITEM " Scenario Specials D&ump", 123
MENUITEM " Scenario Ob&ject Data Dump", 124
}
MENUITEM "Advanced:", IDM_SCEN_NEW_TOWN, GRAYED
MENUITEM " Edit Special &Nodes", IDM_SCEN_ADV_SPECIALS
MENUITEM " Edit Scenario &Text", IDM_SCEN_ADV_TEXT
MENUITEM " Edit Journal Entries", IDM_SCEN_ADV_JOURNAL
MENUITEM " &Import Town", IDM_SCEN_ADV_IMPORT_TOWN
MENUITEM " Edit Saved Item &Rectangles", IDM_SCEN_ADV_SAVE_RECTS
MENUITEM " Edit &Horses", IDM_SCEN_ADV_HORSES
MENUITEM " Edit &Boats", IDM_SCEN_ADV_BOATS
MENUITEM " Set &Variable Town Entry", IDM_SCEN_ADV_TOWN_VARY
MENUITEM " Set Scenario &Event Timers", IDM_SCEN_ADV_EVENTS
MENUITEM " Edit Item &Placement Shortcuts", IDM_SCEN_ADV_SHORTCUTS
MENUITEM " &Delete Last Town", IDM_SCEN_ADV_DELETE_TOWN
MENUITEM " Write D&ata To Text File", IDM_SCEN_ADV_DATA_DUMP
MENUITEM " Do &Full Text Dump", IDM_SCEN_ADV_TEXT_DUMP
MENUITEM " Scenario Shoppin&g Text Dump", IDM_SCEN_ADV_DATA_DUMP
MENUITEM " Scenario &Monster Dump", IDM_SCEN_ADV_TEXT_DUMP
MENUITEM " Scenario Specials D&ump", IDM_SCEN_INTRO
MENUITEM " Scenario Ob&ject Data Dump", IDM_SCEN_PASSWORD
END
POPUP "&Town"
{
MENUITEM "Town &Details\tCtrl+D", 201
MENUITEM "Town &Wandering Monsters", 202
MENUITEM "Set Town &Boundaries", 203
MENUITEM "&Frill Up Terrain", 204
MENUITEM "Remo&ve Terrain Frills", 205
MENUITEM "Edit &Area Descriptions", 206
BEGIN
MENUITEM "Town &Details\tCtrl+D", IDM_TOWN_DETAILS
MENUITEM "Town &Wandering Monsters", IDM_TOWN_WANDER
MENUITEM "Set Town &Boundaries", IDM_TOWN_BOUNDS
MENUITEM "&Frill Up Terrain", IDM_TOWN_FRILL
MENUITEM "Remo&ve Terrain Frills", IDM_TOWN_UNFRILL
MENUITEM "Edit &Area Descriptions", IDM_TOWN_AREAS
MENUITEM SEPARATOR
MENUITEM "Add Rand&om Items", 208
MENUITEM "Set All Items Not Propert&y", 209
MENUITEM "Clear All &Items", 210
MENUITEM "Add Rand&om Items", IDM_TOWN_RANDOM_ITEMS
MENUITEM "Set All Items Not Propert&y", IDM_TOWN_NOT_PROPERTY
MENUITEM "Clear All &Items", IDM_TOWN_CLEAR_ITEMS
MENUITEM SEPARATOR
MENUITEM "Clear All &Monsters", 217
MENUITEM "&Clear All Placed Specials", 218
MENUITEM "Clear All &Preset Fields", 219
MENUITEM "Clear All &Stains", 220
MENUITEM SEPARATOR
MENUITEM "Advanced:", 212
MENUITEM " Edit Special &Nodes\tCtrl+1", 213
MENUITEM " Edit Town &Text\tCtrl+2", 214
MENUITEM " Edit Town Dialo&g\tCtrl+3", 222
MENUITEM " Advanced Town Detai&ls\tCtrl+4", 215
MENUITEM " Set Town &Event Timers\tCtrl+5", 216
MENUITEM " Concise Town &Report\tCtrl+6", 221
}
MENUITEM "Advanced:", 212, GRAYED
MENUITEM " Edit Special &Nodes\tCtrl+1", IDM_TOWN_ADV_SPECIALS
MENUITEM " Edit Town &Text\tCtrl+2", IDM_TOWN_ADV_TEXT
MENUITEM " Edit Town &Signs\tCtrl+3", IDM_TOWN_ADV_SIGNS
MENUITEM " Advanced Town Detai&ls\tCtrl+4", IDM_TOWN_ADV_DETAILS
MENUITEM " Set Town &Event Timers\tCtrl+5", IDM_TOWN_ADV_EVENTS
MENUITEM " Concise Town &Report\tCtrl+6", IDM_TOWN_ADV_REPORT
END
POPUP "&Outdoors"
{
MENUITEM "Outdoor &Details\tCtrl+D", 301
MENUITEM "Outdoor &Wandering Monsters", 302
MENUITEM "&Outdoor Special Encounters", 303
MENUITEM "&Frill Up Terrain", 304
MENUITEM "Remo&ve Terrain Frills", 305
MENUITEM "Edit &Area Descriptions", 306
MENUITEM "&Clear All Placed Specials", 307
BEGIN
MENUITEM "Outdoor &Details\tCtrl+D", IDM_OUT_DETAILS
MENUITEM "Outdoor &Wandering Monsters", IDM_OUT_WANDER
MENUITEM "&Outdoor Special Encounters", IDM_OUT_ENCOUNTER
MENUITEM "&Frill Up Terrain", IDM_OUT_FRILL
MENUITEM "Remo&ve Terrain Frills", IDM_OUT_UNFRILL
MENUITEM "Edit &Area Descriptions", IDM_OUT_AREAS
MENUITEM SEPARATOR
MENUITEM "Advanced:", 310
MENUITEM " Edit Special &Nodes\tCtrl+7", 311
MENUITEM " Edit Outdoor &Text\tCtrl+8", 312
MENUITEM " Concise Outdoor &Report\tCtrl+9", 313
}
POPUP "&Additional Features"
{
MENUITEM "Set Starting Location", IDM_OUT_START
MENUITEM SEPARATOR
MENUITEM "Advanced:", 310, GRAYED
MENUITEM " Edit Special &Nodes\tCtrl+7", IDM_OUT_ADV_SPECIALS
MENUITEM " Edit Outdoor &Text\tCtrl+8", IDM_OUT_ADV_TEXT
MENUITEM " Edit Outdoor &Signs\tCtrl+9", IDM_OUT_ADV_SIGNS
MENUITEM " Concise Outdoor &Report\tCtrl+0", IDM_OUT_ADV_REPORT
END
POPUP "E&xtras"
BEGIN
MENUITEM "Terrain &Animations Play", 411
MENUITEM SEPARATOR
MENUITEM "Edit &Town\tCtrl+T", 401
@@ -159,81 +167,62 @@ IDR_MENU1 MENU
MENUITEM "Load &Next Outdoor Zone/Town\tCtrl+K", 410
MENUITEM SEPARATOR
MENUITEM "Repeat Printing of Last &File\tCtrl+P", 414
}
END
POPUP "&I1"
{
BEGIN
MENUITEM "Dummy", 600
}
END
POPUP "&I2"
{
BEGIN
MENUITEM "Dummy", 601
}
END
POPUP "&I3"
{
BEGIN
MENUITEM "Dummy", 602
}
END
POPUP "&I4"
{
BEGIN
MENUITEM "Dummy", 603
}
END
POPUP "&I5"
{
BEGIN
MENUITEM "Dummy", 604
}
POPUP "&I6"
{
MENUITEM "Dummy", 605
}
POPUP "&I7"
{
MENUITEM "Dummy", 606
}
POPUP "&I8"
{
MENUITEM "Dummy", 607
}
END
POPUP "&M1"
{
BEGIN
MENUITEM "Dummy", 608
}
END
POPUP "&M2"
{
BEGIN
MENUITEM "Dummy", 609
}
END
POPUP "&M3"
{
BEGIN
MENUITEM "Dummy", 610
}
END
POPUP "&M4"
{
BEGIN
MENUITEM "Dummy", 611
}
POPUP "&M5"
{
MENUITEM "Dummy", 612
}
END
POPUP "&Help"
{
MENUITEM "&Index\tF1", 801
BEGIN
MENUITEM "&Index\tF1", IDM_HELP_INDEX
MENUITEM "&About Blades Scenario Editor", IDM_HELP_ABOUT
MENUITEM SEPARATOR
MENUITEM "&Getting Started", 802
MENUITEM "&Testing Your Scenario", 803
MENUITEM "&Distributing Your Scenario", 804
MENUITEM SEPARATOR
MENUITEM "&About Blades Scenario Editor", 805
}
}
MENUITEM "&Getting Started", IDM_HELP_START
MENUITEM "&Testing Your Scenario", IDM_HELP_TEST
MENUITEM "&Distributing Your Scenario", IDM_HELP_DISTRIBUTE
END
END
/////////////////////////////////////////////////////////////////////////////
//
// Accelerator
//
ACCELERATORS_1 ACCELERATORS
{
IDR_ACCELERATOR1 ACCELERATORS
BEGIN
VK_F1, 801, VIRTKEY
"^O", 1, ASCII
"^S", 2, ASCII
@@ -248,32 +237,16 @@ ACCELERATORS_1 ACCELERATORS
"^F", 405, ASCII
"^G", 406, ASCII
"^M", 407, ASCII
"^I", 408, ASCII
"\t", 408, ASCII
"^J", 409, ASCII
"^K", 410, ASCII
"^P", 414, ASCII
/*
"^1", 213, ASCII
"^2", 214, ASCII
"^3", 222, ASCII
"^4", 215, ASCII
"^5", 216, ASCII
"^6", 221, ASCII
"^7", 311, ASCII
"^8", 312, ASCII
"^9", 313, ASCII
*/
VK_TAB, 408, VIRTKEY, CONTROL, NOINVERT
VK_LEFT, 409, VIRTKEY, CONTROL, NOINVERT
VK_RIGHT, 410, VIRTKEY, CONTROL, NOINVERT
VK_UP, 412, VIRTKEY, CONTROL, NOINVERT
VK_DOWN, 413, VIRTKEY, CONTROL, NOINVERT
// Defined elsewhere: D,L
// Keys currently available: H,W,Y,Z
// Don't use keys A, X, C and V as they are Windows shortcuts (select all, cut, copy and paste)
}
END
#endif // English (United States) resources
/////////////////////////////////////////////////////////////////////////////

View File

@@ -59,7 +59,7 @@
<Link>
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>opengl32.lib;sfml-system.lib;sfml-window.lib;sfml-graphics.lib;sfml-audio.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>opengl32.lib;sfml-system-d.lib;sfml-window-d.lib;sfml-graphics-d.lib;sfml-audio-d.lib;zlib.lib;%(AdditionalDependencies)</AdditionalDependencies>
<EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
</Link>
</ItemDefinitionGroup>

View File

@@ -3,15 +3,77 @@
// Used by Scen Editor.rc
//
#define IDR_MENU1 101
#define IDM_FILE_NEW 101
#define IDR_ACCELERATOR1 102
#define IDM_FILE_OPEN 102
#define IDM_FILE_CLOSE 103
#define IDM_FILE_SAVE 104
#define IDM_FILE_REVERT 105
#define IDM_FILE_QUIT 106
#define IDM_SCEN_NEW_TOWN 107
#define IDM_SCEN_DETAILS 108
#define IDM_SCEN_START 109
#define IDM_SCEN_ADV_SPECIALS 110
#define IDM_SCEN_ADV_TEXT 111
#define IDM_SCEN_ADV_JOURNAL 112
#define IDM_SCEN_ADV_IMPORT_TOWN 113
#define IDM_SCEN_ADV_SAVE_RECTS 114
#define IDM_SCEN_ADV_HORSES 115
#define IDM_SCEN_ADV_BOATS 116
#define IDM_SCEN_ADV_TOWN_VARY 117
#define IDM_SCEN_ADV_EVENTS 118
#define IDM_SCEN_ADV_SHORTCUTS 119
#define IDM_SCEN_ADV_DELETE_TOWN 120
#define IDM_SCEN_ADV_DATA_DUMP 121
#define IDM_SCEN_ADV_TEXT_DUMP 122
#define IDM_SCEN_INTRO 123
#define IDM_SCEN_PASSWORD 124
#define IDM_TOWN_DETAILS 125
#define IDM_TOWN_WANDER 126
#define IDM_TOWN_BOUNDS 127
#define IDM_TOWN_FRILL 128
#define IDM_TOWN_UNFRILL 129
#define IDM_TOWN_AREAS 130
#define IDM_TOWN_RANDOM_ITEMS 131
#define IDM_TOWN_NOT_PROPERTY 132
#define IDM_TOWN_CLEAR_ITEMS 133
#define IDM_TOWN_ADV_SPECIALS 134
#define IDM_TOWN_ADV_TEXT 135
#define IDM_TOWN_ADV_SIGNS 136
#define IDM_TOWN_ADV_DETAILS 137
#define IDM_TOWN_ADV_EVENTS 138
#define IDM_TOWN_ADV_REPORT 139
#define IDM_OUT_DETAILS 140
#define IDM_OUT_WANDER 141
#define IDM_OUT_ENCOUNTER 142
#define IDM_OUT_FRILL 143
#define IDM_OUT_UNFRILL 144
#define IDM_OUT_AREAS 145
#define IDM_OUT_START 146
#define IDM_OUT_ADV_SPECIALS 147
#define IDM_OUT_ADV_TEXT 148
#define IDM_OUT_ADV_SIGNS 149
#define IDM_OUT_ADV_REPORT 150
#define IDM_HELP_INDEX 151
#define IDM_HELP_ABOUT 152
#define IDM_HELP_START 153
#define IDM_HELP_TEST 154
#define IDM_HELP_DISTRIBUTE 155
#define IDM_EDIT_UNDO 156
#define IDM_EDIT_REDO 157
#define IDM_EDIT_CUT 158
#define IDM_EDIT_COPY 159
#define IDM_EDIT_PASTE 160
#define IDM_EDIT_DELETE 161
#define IDM_EDIT_SELECT 162
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 103
#define _APS_NEXT_COMMAND_VALUE 40002
#define _APS_NEXT_COMMAND_VALUE 40014
#define _APS_NEXT_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101
#define _APS_NEXT_SYMED_VALUE 163
#endif
#endif

View File

@@ -74,12 +74,9 @@ void Handle_One_Event();
void Handle_Activate();
void Handle_Update();
void Mouse_Pressed();
void handle_apple_menu(int item_hit);
void handle_help_menu(int item_hit);
void handle_file_menu(int item_hit);
void handle_reg_menu(int item_hit);
void handle_extra_menu(int item_hit);
void handle_edit_menu(int item_hit);
void update_item_menu();
void handle_edit_menus(int item_hit);
bool verify_restore_quit(bool mode);
void set_up_apple_events();
void handle_item_menu(int item_hit);
@@ -110,6 +107,8 @@ int main(int /*argc*/, char* argv[]) {
cDialog::init();
redraw_screen();
menu_activate();
update_item_menu();
while(!All_Done)
Handle_One_Event();
@@ -154,6 +153,7 @@ void Initialize(void) {
//
// Size and style obtained from WIND resource #128
mainPtr.create(sf::VideoMode(590, 440), "Blades of Exile Character Editor", sf::Style::Titlebar | sf::Style::Close);
init_menubar();
}
void Handle_One_Event() {
@@ -191,7 +191,7 @@ void Mouse_Pressed() {
All_Done = verify_restore_quit(false);
}
void handle_apple_menu(int item_hit) {
void handle_help_menu(int item_hit) {
//char desk_acc_name[256];
//short desk_acc_num;
@@ -231,6 +231,11 @@ void handle_file_menu(int item_hit) {
menu_activate();
}
break;
// TODO: Implement these two
case 4: //close
break;
case 5: //revert;
break;
case 7://quit
All_Done = verify_restore_quit(false);
break;

View File

@@ -48,6 +48,10 @@ static void setMenuCallback(NSMenuItem* item, id targ, SEL selector, int num) {
}
void init_menubar() {
static bool inited = false;
if(inited) return;
inited = true;
NSApplication* app = [NSApplication sharedApplication];
[NSBundle loadNibNamed: @"pc.menu" owner: app];
menu_bar_handle = [app mainMenu];
@@ -68,6 +72,8 @@ void init_menubar() {
setMenuCallback([file_menu itemWithTitle: @"Save"], handler, @selector(fileMenu:), 1);
setMenuCallback([file_menu itemWithTitle: @"Save As…"], handler, @selector(fileMenu:), 2);
setMenuCallback([file_menu itemWithTitle: @"Open…"], handler, @selector(fileMenu:), 3);
setMenuCallback([file_menu itemWithTitle: @"Close"], handler, @selector(fileMenu:), 4);
setMenuCallback([file_menu itemWithTitle: @"Revert to Saved"], handler, @selector(fileMenu:), 5);
for(int i = 0; i < [reg_menu numberOfItems]; i++)
setMenuCallback([reg_menu itemAtIndex: i], handler, @selector(editMenu:), i + 1);

115
src/pcedit/pc.menus.win.cpp Normal file
View File

@@ -0,0 +1,115 @@
#include "pc.menus.h"
#include <SFML/Graphics/RenderWindow.hpp>
#include "Resource.h"
#include "universe.h"
// Include this last because some #defines in the Windows headers cause compile errors in my headers.
// Fortunately they're on symbols not used in this file, so this should work.
#include <Windows.h>
// This is the index of each menu on the menubar
enum {
FILE_MENU_POS = 0,
PARTY_MENU_POS = 1,
SCEN_MENU_POS = 2,
ITEMS_MENU_POS = 3,
HELP_MENU_POS = 7,
};
extern sf::RenderWindow mainPtr;
extern cUniverse univ;
extern bool scen_items_loaded;
extern fs::path file_in_mem;
LONG_PTR mainProc;
HMENU menuHandle = NULL;
LRESULT CALLBACK menuProc(HWND handle, UINT message, WPARAM wParam, LPARAM lParam);
void init_menubar() {
HWND winHandle = mainPtr.getSystemHandle();
if(winHandle == NULL) return;
if(menuHandle == NULL)
menuHandle = LoadMenu(GetModuleHandle(NULL), MAKEINTRESOURCE(IDR_MENU1));
SetMenu(winHandle, menuHandle);
// Now we have to do a little hack to handle menu messages.
// We replace SFML's window procedure with our own, which checks for menu events and then forwards to SFML's procedure.
mainProc = SetWindowLongPtr(winHandle, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(&menuProc));
}
void update_item_menu() {
if(menuHandle == NULL) return;
cItemRec(& item_list)[400] = univ.scenario.scen_items;
for(int j = 0; j < 4; j++) {
HMENU items_menu = GetSubMenu(menuHandle, ITEMS_MENU_POS + j);
while(GetMenuItemCount(items_menu)) RemoveMenu(items_menu, 0, MF_BYPOSITION);
if(!scen_items_loaded) {
AppendMenuA(items_menu, MF_STRING | MF_GRAYED, 1000, "Items Not Loaded");
} else for(int i = 0; i < 100; i++) {
cItemRec& item = item_list[i + j * 100];
AppendMenuA(items_menu, MF_STRING | MF_ENABLED, 1000 + j * 100 + i, item.full_name.c_str());
// TODO: Also disable gold or food
EnableMenuItem(items_menu, i, MF_BYPOSITION | (item.variety != eItemType::NO_ITEM ? MF_ENABLED : MF_GRAYED));
}
}
DrawMenuBar(mainPtr.getSystemHandle());
}
void menu_activate() {
if(menuHandle == NULL) return;
HMENU file_menu = GetSubMenu(menuHandle, FILE_MENU_POS);
if(file_in_mem.empty())
for(int i = 1; i < GetMenuItemCount(file_menu) - 1; i++)
EnableMenuItem(file_menu, i, MF_BYPOSITION | MF_GRAYED);
else for(int i = 1; i < GetMenuItemCount(file_menu) - 1; i++)
EnableMenuItem(file_menu, i, MF_BYPOSITION | MF_ENABLED);
DrawMenuBar(mainPtr.getSystemHandle());
}
void handle_help_menu(int item_hit);
void handle_file_menu(int item_hit);
void handle_edit_menus(int item_hit);
void handle_item_menu(int item_hit);
LRESULT CALLBACK menuProc(HWND handle, UINT message, WPARAM wParam, LPARAM lParam) {
if(message == WM_COMMAND) {
int cmd = LOWORD(wParam);
if(cmd >= 1000) { // Item menus
handle_item_menu(cmd - 1000);
} else switch(cmd) {
// File menu
case IDM_FILE_OPEN: handle_file_menu(3); break;
case IDM_FILE_CLOSE: handle_file_menu(4); break;
case IDM_FILE_SAVE: handle_file_menu(1); break;
case IDM_FILE_SAVE_AS: handle_file_menu(2); break;
case IDM_FILE_REVERT: handle_file_menu(5); break;
case IDM_FILE_QUIT: handle_file_menu(7); break;
// Edit Party menu
case IDM_PARTY_GOLD: handle_edit_menus(1); break;
case IDM_PARTY_FOOD: handle_edit_menus(2); break;
case IDM_PARTY_ALCHEMY: handle_edit_menus(3); break;
case IDM_PARTY_DAMAGE: handle_edit_menus(5); break;
case IDM_PARTY_MANA: handle_edit_menus(6); break;
case IDM_PARTY_DEAD: handle_edit_menus(7); break;
case IDM_PARTY_CONDITIONS: handle_edit_menus(8); break;
case IDM_PARTY_REUNITE: handle_edit_menus(10); break;
case IDM_PARTY_VEHICLES: handle_edit_menus(11); break;
case IDM_PARTY_MAGE: handle_edit_menus(13); break;
case IDM_PARTY_PRIEST: handle_edit_menus(14); break;
case IDM_PARTY_TRAITS: handle_edit_menus(15); break;
case IDM_PARTY_SKILLS: handle_edit_menus(16); break;
case IDM_PARTY_XP: handle_edit_menus(17); break;
// Scenario Editing menu
case IDM_SCEN_DAY: handle_edit_menus(101); break;
case IDM_SCEN_LEAVE_TOWN: handle_edit_menus(103); break;
case IDM_SCEN_TOWN_RESET: handle_edit_menus(104); break;
case IDM_SCEN_TOWN_MAP: handle_edit_menus(105); break;
case IDM_SCEN_OUT_MAP: handle_edit_menus(106); break;
case IDM_SCEN_LEAVE: handle_edit_menus(108); break;
case IDM_SCEN_SDF: handle_edit_menus(109); break;
// Help menu
case IDM_HELP: handle_help_menu(1);
}
}
return CallWindowProc(reinterpret_cast<WNDPROC>(mainProc), handle, message, wParam, lParam);
}

View File

@@ -50,8 +50,6 @@ void Initialize(void);
void Handle_One_Event();
void Handle_Activate();
void Handle_Update();
void handle_menu_choice(long choice);
void handle_apple_menu(int item_hit);
void handle_file_menu(int item_hit);
void handle_edit_menu(int item_hit);
void handle_scenario_menu(int item_hit);
@@ -173,6 +171,7 @@ void Initialize(void) {
// TODO: I think it should have a close button as well
mainPtr.create(sf::VideoMode(windRect.width(), windRect.height()), "Blades of Exile Scenario Editor", sf::Style::Titlebar);
mainPtr.setPosition(windRect.topLeft());
init_menubar();
right_sbar_rect.top = RIGHT_AREA_UL_Y - 1;
right_sbar_rect.left = RIGHT_AREA_UL_X + RIGHT_AREA_WIDTH - 1 - 16;
right_sbar_rect.bottom = RIGHT_AREA_UL_Y + RIGHT_AREA_HEIGHT + 1;
@@ -217,14 +216,6 @@ void Handle_Update() {
restore_cursor();
}
void handle_apple_menu(int item_hit) {
switch(item_hit) {
case 1:
cChoiceDlog("about-scened").show();
break;
}
}
void handle_file_menu(int item_hit) {
fs::path file_to_load;
switch(item_hit) {
@@ -496,6 +487,9 @@ void handle_outdoor_menu(int item_hit) {
void handle_help_menu(int item_hit) {
switch(item_hit) {
case 0:
cChoiceDlog("about-scened").show();
break;
case 1:
cChoiceDlog("help-editing").show();
break; // started

View File

@@ -18,7 +18,6 @@ MenuHandle file_menu, edit_menu, app_menu, scen_menu, town_menu, out_menu, help_
extern cScenario scenario;
@interface MenuHandler : NSObject
-(void) appMenu:(id) sender;
-(void) fileMenu:(id) sender;
-(void) editMenu:(id) sender;
-(void) scenMenu:(id) sender;
@@ -37,6 +36,10 @@ static void setMenuCallback(NSMenuItem* item, id targ, SEL selector, int num) {
}
void init_menubar() {
static bool inited = false;
if(inited) return;
inited = true;
NSApplication* app = [NSApplication sharedApplication];
[NSBundle loadNibNamed: @"scen.menu" owner: app];
menu_bar_handle = [app mainMenu];
@@ -59,7 +62,7 @@ void init_menubar() {
mon_menu[3] = [[menu_bar_handle itemWithTitle: @"M4"] submenu];
MenuHandler* handler = [[[MenuHandler alloc] init] retain];
setMenuCallback([app_menu itemWithTitle: @"About BoE Scenario Editor"], handler, @selector(appMenu:), 1);
setMenuCallback([app_menu itemWithTitle: @"About BoE Scenario Editor"], handler, @selector(helpMenu:), 0);
setMenuCallback([app_menu itemWithTitle: @"Quit BoE Scenario Editor"], handler, @selector(fileMenu:), 5);
// TODO: Organize file menu function
setMenuCallback([file_menu itemWithTitle: @"New Scenario…"], handler, @selector(fileMenu:), 3);
@@ -167,7 +170,6 @@ void update_item_menu() {
}
void handle_apple_menu(int item_hit);
void handle_file_menu(int item_hit);
void handle_edit_menu(int item_hit);
void handle_scenario_menu(int item_hit);
@@ -178,10 +180,6 @@ void handle_item_menu(int item_hit);
void handle_monst_menu(int item_hit);
@implementation MenuHandler
-(void) appMenu:(id) sender {
handle_apple_menu([[sender representedObject] intValue]);
}
-(void) fileMenu:(id) sender {
handle_file_menu([[sender representedObject] intValue]);
}

View File

@@ -0,0 +1,227 @@
#include "scen.menus.h"
#include <SFML/Graphics/RenderWindow.hpp>
#include "Resource.h"
#include "scenario.h"
// Include this last because some #defines in the Windows headers cause compile errors in my headers.
// Fortunately they're on symbols not used in this file, so this should work.
#include <Windows.h>
// This is the index of each menu on the menubar
enum {
FILE_MENU_POS = 0,
EDIT_MENU_POS = 1,
SCEN_MENU_POS = 2,
TOWN_MENU_POS = 3,
OUT_MENU_POS = 4,
ITEMS_MENU_POS = 6,
MONST_MENU_POS = 11,
HELP_MENU_POS = 15,
};
extern sf::RenderWindow mainPtr;
extern cScenario scenario;
LONG_PTR mainProc;
HMENU menuHandle = NULL;
LRESULT CALLBACK menuProc(HWND handle, UINT message, WPARAM wParam, LPARAM lParam);
void init_menubar() {
HWND winHandle = mainPtr.getSystemHandle();
if(winHandle == NULL) return;
if(menuHandle == NULL)
menuHandle = LoadMenu(GetModuleHandle(NULL), MAKEINTRESOURCE(IDR_MENU1));
SetMenu(winHandle, menuHandle);
// Now we have to do a little hack to handle menu messages.
// We replace SFML's window procedure with our own, which checks for menu events and then forwards to SFML's procedure.
mainProc = SetWindowLongPtr(winHandle, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(&menuProc));
}
void update_item_menu() {
if(menuHandle == NULL) return;
for(int j = 0; j < 5; j++) {
HMENU item_menu = GetSubMenu(menuHandle, ITEMS_MENU_POS + j);
while(GetMenuItemCount(item_menu)) RemoveMenu(item_menu, 0, MF_BYPOSITION);
for(int i = 0; i < 80; i++) {
UINT flags = MF_STRING | MF_ENABLED;
if(i % 40 == 0) flags |= MF_MENUBARBREAK;
AppendMenuA(item_menu, flags, 10000 + i + j * 80, scenario.scen_items[i + j * 80].full_name.c_str());
}
}
for(int j = 0; j < 4; j++) {
HMENU mon_menu = GetSubMenu(menuHandle, MONST_MENU_POS + j);
while(GetMenuItemCount(mon_menu)) RemoveMenu(mon_menu, 0, MF_BYPOSITION);
for(int i = 0; i < 64; i++) {
UINT flags = MF_STRING | MF_ENABLED;
if(i % 32 == 0) flags |= MF_MENUBARBREAK;
AppendMenuA(mon_menu, flags, 20000 + i + j * 64, scenario.scen_monsters[i + j * 64].m_name.c_str());
}
}
DrawMenuBar(mainPtr.getSystemHandle());
}
void shut_down_menus(short mode) {
if(menuHandle == NULL) return;
HMENU file_menu = GetSubMenu(menuHandle, FILE_MENU_POS);
if(mode == 0) {
EnableMenuItem(file_menu, IDM_FILE_SAVE, MF_GRAYED | MF_BYCOMMAND);
EnableMenuItem(menuHandle, SCEN_MENU_POS, MF_GRAYED | MF_BYPOSITION);
EnableMenuItem(menuHandle, TOWN_MENU_POS, MF_GRAYED | MF_BYPOSITION);
EnableMenuItem(menuHandle, OUT_MENU_POS, MF_GRAYED | MF_BYPOSITION);
for(int i = 0; i < 5; i++)
EnableMenuItem(menuHandle, ITEMS_MENU_POS + i, MF_GRAYED | MF_BYPOSITION);
for(int i = 0; i < 4; i++)
EnableMenuItem(menuHandle, MONST_MENU_POS + i, MF_GRAYED | MF_BYPOSITION);
}
std::shared_ptr<char> buf(new char[256]);
MENUITEMINFOA info;
info.cbSize = sizeof(MENUITEMINFOA);
info.dwTypeData = buf.get();
info.fMask = MIIM_STRING | MIIM_FTYPE;
if(mode == 4) {
EnableMenuItem(file_menu, IDM_FILE_SAVE, MF_ENABLED | MF_BYCOMMAND);
EnableMenuItem(menuHandle, SCEN_MENU_POS, MF_ENABLED | MF_BYPOSITION);
EnableMenuItem(menuHandle, TOWN_MENU_POS, MF_ENABLED | MF_BYPOSITION);
EnableMenuItem(menuHandle, OUT_MENU_POS, MF_ENABLED | MF_BYPOSITION);
for(int i = 0; i < 5; i++)
EnableMenuItem(menuHandle, ITEMS_MENU_POS + i, MF_ENABLED | MF_BYPOSITION);
for(int i = 0; i < 4; i++)
EnableMenuItem(menuHandle, MONST_MENU_POS + i, MF_ENABLED | MF_BYPOSITION);
HMENU town_menu = GetSubMenu(menuHandle, TOWN_MENU_POS);
for(int i = 0; i < GetMenuItemCount(town_menu); i++) {
info.cch = 256;
GetMenuItemInfoA(town_menu, i, true, &info);
if(info.fType == MFT_SEPARATOR || !strcmp("Advanced", info.dwTypeData))
continue;
EnableMenuItem(town_menu, i, MF_ENABLED | MF_BYPOSITION);
}
HMENU out_menu = GetSubMenu(menuHandle, OUT_MENU_POS);
for(int i = 0; i < GetMenuItemCount(out_menu); i++) {
info.cch = 256;
GetMenuItemInfoA(out_menu, i, true, &info);
if(!strcmp("Advanced", info.dwTypeData)) continue;
EnableMenuItem(out_menu, i, MF_ENABLED | MF_BYPOSITION);
}
}
if((mode == 1) || (mode == 3)) {
for(int i = 0; i < 5; i++)
EnableMenuItem(menuHandle, ITEMS_MENU_POS + i, MF_GRAYED | MF_BYPOSITION);
for(int i = 0; i < 4; i++)
EnableMenuItem(menuHandle, MONST_MENU_POS + i, MF_GRAYED | MF_BYPOSITION);
HMENU town_menu = GetSubMenu(menuHandle, TOWN_MENU_POS);
for(int i = 0; i < GetMenuItemCount(town_menu); i++) {
info.cch = 256;
GetMenuItemInfoA(town_menu, i, true, &info);
if(info.fType == MFT_SEPARATOR || info.dwTypeData[0] == ' ')
continue;
EnableMenuItem(town_menu, i, MF_GRAYED | MF_BYPOSITION);
}
}
if((mode == 2) || (mode == 3)) {
HMENU out_menu = GetSubMenu(menuHandle, OUT_MENU_POS);
for(int i = 0; i < GetMenuItemCount(out_menu); i++) {
info.cch = 256;
GetMenuItemInfoA(out_menu, i, true, &info);
if(info.fType == MFT_SEPARATOR || info.dwTypeData[0] == ' ')
continue;
EnableMenuItem(out_menu, i, MF_GRAYED | MF_BYPOSITION);
}
}
}
void handle_file_menu(int item_hit);
void handle_edit_menu(int item_hit);
void handle_scenario_menu(int item_hit);
void handle_town_menu(int item_hit);
void handle_outdoor_menu(int item_hit);
void handle_item_menu(int item_hit);
void handle_monst_menu(int item_hit);
void handle_help_menu(int item_hit);
LRESULT CALLBACK menuProc(HWND handle, UINT message, WPARAM wParam, LPARAM lParam) {
if(message == WM_COMMAND) {
int cmd = LOWORD(wParam);
if(cmd >= 10000 && cmd < 20000) { // Item menus
handle_item_menu(cmd - 10000);
} else if(cmd >= 20000 && cmd < 30000) { // Monster menus
handle_monst_menu(cmd - 20000);
} else switch(cmd) {
// File menu
case IDM_FILE_NEW: handle_file_menu(3); break;
case IDM_FILE_OPEN: handle_file_menu(1); break;
case IDM_FILE_CLOSE: break;
case IDM_FILE_SAVE: handle_file_menu(2); break;
case IDM_FILE_REVERT: break;
case IDM_FILE_QUIT: handle_file_menu(5); break;
// Edit menu
case IDM_EDIT_UNDO: handle_edit_menu(1); break;
case IDM_EDIT_REDO: handle_edit_menu(2); break;
case IDM_EDIT_CUT: handle_edit_menu(4); break;
case IDM_EDIT_COPY: handle_edit_menu(5); break;
case IDM_EDIT_PASTE: handle_edit_menu(6); break;
case IDM_EDIT_DELETE: handle_edit_menu(7); break;
case IDM_EDIT_SELECT: handle_edit_menu(8); break;
// Scenario menu
case IDM_SCEN_NEW_TOWN: handle_scenario_menu(1); break;
case IDM_SCEN_DETAILS: handle_scenario_menu(3); break;
case IDM_SCEN_INTRO: handle_scenario_menu(4); break;
case IDM_SCEN_START: handle_scenario_menu(4); break;
case IDM_SCEN_PASSWORD: break;
// Scenario menu (advanced)
case IDM_SCEN_ADV_SPECIALS: handle_scenario_menu(9); break;
case IDM_SCEN_ADV_TEXT: handle_scenario_menu(10); break;
case IDM_SCEN_ADV_JOURNAL: handle_scenario_menu(11); break;
case IDM_SCEN_ADV_IMPORT_TOWN: handle_scenario_menu(12); break;
case IDM_SCEN_ADV_SAVE_RECTS: handle_scenario_menu(13); break;
case IDM_SCEN_ADV_HORSES: handle_scenario_menu(14); break;
case IDM_SCEN_ADV_BOATS: handle_scenario_menu(15); break;
case IDM_SCEN_ADV_TOWN_VARY: handle_scenario_menu(16); break;
case IDM_SCEN_ADV_EVENTS: handle_scenario_menu(17); break;
case IDM_SCEN_ADV_SHORTCUTS: handle_scenario_menu(18); break;
case IDM_SCEN_ADV_DELETE_TOWN: handle_scenario_menu(19); break;
case IDM_SCEN_ADV_DATA_DUMP: handle_scenario_menu(20); break;
case IDM_SCEN_ADV_TEXT_DUMP: handle_scenario_menu(21); break;
// Town menu
case IDM_TOWN_DETAILS: handle_town_menu(1); break;
case IDM_TOWN_WANDER: handle_town_menu(2); break;
case IDM_TOWN_BOUNDS: handle_town_menu(3); break;
case IDM_TOWN_FRILL: handle_town_menu(4); break;
case IDM_TOWN_UNFRILL: handle_town_menu(5); break;
case IDM_TOWN_AREAS: handle_town_menu(6); break;
case IDM_TOWN_RANDOM_ITEMS: handle_town_menu(8); break;
case IDM_TOWN_NOT_PROPERTY: handle_town_menu(9); break;
case IDM_TOWN_CLEAR_ITEMS: handle_town_menu(10); break;
// Town menu (advanced)
case IDM_TOWN_ADV_SPECIALS: handle_town_menu(13); break;
case IDM_TOWN_ADV_TEXT: handle_town_menu(14); break;
case IDM_TOWN_ADV_SIGNS: handle_town_menu(15); break;
case IDM_TOWN_ADV_DETAILS: handle_town_menu(16); break;
case IDM_TOWN_ADV_EVENTS: handle_town_menu(17); break;
case IDM_TOWN_ADV_REPORT: break;
// Outdoors menu
case IDM_OUT_DETAILS: handle_outdoor_menu(1); break;
case IDM_OUT_WANDER: handle_outdoor_menu(2); break;
case IDM_OUT_ENCOUNTER: handle_outdoor_menu(3); break;
case IDM_OUT_FRILL: handle_outdoor_menu(4); break;
case IDM_OUT_UNFRILL: handle_outdoor_menu(5); break;
case IDM_OUT_AREAS: handle_outdoor_menu(6); break;
case IDM_OUT_START: handle_outdoor_menu(8); break;
// Outdoors menu (advanced)
case IDM_OUT_ADV_SPECIALS: handle_outdoor_menu(11); break;
case IDM_OUT_ADV_TEXT: handle_outdoor_menu(12); break;
case IDM_OUT_ADV_SIGNS: handle_outdoor_menu(13); break;
case IDM_OUT_ADV_REPORT: break;
// Help menu
case IDM_HELP_INDEX: ShellExecuteA(NULL, "open", "https://calref.net/~sylae/boe-doc/editor/About.html", NULL, NULL, SW_SHOWNORMAL); break;
case IDM_HELP_ABOUT: handle_help_menu(0); break;
case IDM_HELP_START: handle_help_menu(1); break;
case IDM_HELP_TEST: handle_help_menu(2); break;
case IDM_HELP_DISTRIBUTE: handle_help_menu(3); break;
}
}
return CallWindowProc(reinterpret_cast<WNDPROC>(mainProc), handle, message, wParam, lParam);
}