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) #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// //
@@ -62,36 +63,46 @@ IDR_MENU1 MENU
BEGIN BEGIN
POPUP "&File" POPUP "&File"
BEGIN BEGIN
MENUITEM "&Open Game\tCtrl+O", 2 MENUITEM "&Open Game\tCtrl+O", IDM_FILE_OPEN
MENUITEM "&Save Game\tCtrl+S", 1 MENUITEM "Close\tCtrl+W", IDM_FILE_CLOSE
MENUITEM "Save As...", 3
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "&Quit\tCtrl+Q", 4 MENUITEM "&Save Game\tCtrl+S", IDM_FILE_SAVE
END MENUITEM "Save As...", IDM_FILE_SAVE_AS
POPUP "&Scenario Editing" MENUITEM "Revert to Saved", IDM_FILE_REVERT
BEGIN
MENUITEM "Edit Day", 70
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "Leave Town", 44 MENUITEM "&Quit\tCtrl+Q", IDM_FILE_QUIT
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
END END
POPUP "&Edit Party" POPUP "&Edit Party"
BEGIN BEGIN
MENUITEM "Edit Gold", 41 MENUITEM "Edit Gold", IDM_PARTY_GOLD
MENUITEM "Edit Food", 42 MENUITEM "Edit Food", IDM_PARTY_FOOD
MENUITEM "Edit Alchemy", 62 MENUITEM "Edit Alchemy", IDM_PARTY_ALCHEMY
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "Heal Damage", 51 MENUITEM "Heal Damage", IDM_PARTY_DAMAGE
MENUITEM "Restore Spell Points", 52 MENUITEM "Restore Spell Points", IDM_PARTY_MANA
MENUITEM "Raise Dead, Destone, etc.", 53 MENUITEM "Raise Dead, Destone, etc.", IDM_PARTY_DEAD
MENUITEM "Remove Bad Conditions", 54 MENUITEM "Remove Bad Conditions", IDM_PARTY_CONDITIONS
MENUITEM SEPARATOR MENUITEM SEPARATOR
MENUITEM "Reunite Party", 45 MENUITEM "Reunite Party", IDM_PARTY_REUNITE
MENUITEM "Own All Boats/Horses", 63 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 END
POPUP "&I1" POPUP "&I1"
BEGIN BEGIN
@@ -111,9 +122,7 @@ BEGIN
END END
POPUP "&Help" POPUP "&Help"
BEGIN BEGIN
MENUITEM "Index\tF1", 100 MENUITEM "About Blades of Exile Editor", IDM_HELP
MENUITEM SEPARATOR
MENUITEM "About Blades of Exile Editor", 200
END END
END END
@@ -122,13 +131,13 @@ END
// //
// Accelerator // Accelerator
// //
ACCELERATORS_1 ACCELERATORS
{
"^O", 2, ASCII IDR_ACCELERATOR1 ACCELERATORS
"^S", 1, ASCII BEGIN
"^Q", 4, ASCII "^O", 2, ASCII
} "^S", 1, ASCII
"^Q", 4, ASCII
END
#endif // English (United States) resources #endif // English (United States) resources
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////

View File

@@ -59,7 +59,7 @@
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation> <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> <EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>

View File

@@ -3,17 +3,43 @@
// Used by Char Editor.rc // Used by Char Editor.rc
// //
#define IDR_MENU1 101 #define IDR_MENU1 101
#define IDR_MENU2 102 #define IDM_FILE_OPEN 101
#define IDR_MENU3 103 #define IDM_FILE_CLOSE 102
#define IDM_FILE_SAVE 103
#define IDR_ACCELERATOR1 104 #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 // 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 105 #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_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101 #define _APS_NEXT_SYMED_VALUE 129
#endif #endif
#endif #endif

View File

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

View File

@@ -59,7 +59,7 @@
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation> <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> <EntryPointSymbol>mainCRTStartup</EntryPointSymbol>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>

View File

@@ -3,15 +3,77 @@
// Used by Scen Editor.rc // Used by Scen Editor.rc
// //
#define IDR_MENU1 101 #define IDR_MENU1 101
#define IDM_FILE_NEW 101
#define IDR_ACCELERATOR1 102 #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 // 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 103 #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_CONTROL_VALUE 1001
#define _APS_NEXT_SYMED_VALUE 101 #define _APS_NEXT_SYMED_VALUE 163
#endif #endif
#endif #endif

View File

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

View File

@@ -48,6 +48,10 @@ static void setMenuCallback(NSMenuItem* item, id targ, SEL selector, int num) {
} }
void init_menubar() { void init_menubar() {
static bool inited = false;
if(inited) return;
inited = true;
NSApplication* app = [NSApplication sharedApplication]; NSApplication* app = [NSApplication sharedApplication];
[NSBundle loadNibNamed: @"pc.menu" owner: app]; [NSBundle loadNibNamed: @"pc.menu" owner: app];
menu_bar_handle = [app mainMenu]; 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"], handler, @selector(fileMenu:), 1);
setMenuCallback([file_menu itemWithTitle: @"Save As…"], handler, @selector(fileMenu:), 2); setMenuCallback([file_menu itemWithTitle: @"Save As…"], handler, @selector(fileMenu:), 2);
setMenuCallback([file_menu itemWithTitle: @"Open…"], handler, @selector(fileMenu:), 3); 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++) for(int i = 0; i < [reg_menu numberOfItems]; i++)
setMenuCallback([reg_menu itemAtIndex: i], handler, @selector(editMenu:), i + 1); 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_One_Event();
void Handle_Activate(); void Handle_Activate();
void Handle_Update(); 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_file_menu(int item_hit);
void handle_edit_menu(int item_hit); void handle_edit_menu(int item_hit);
void handle_scenario_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 // 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.create(sf::VideoMode(windRect.width(), windRect.height()), "Blades of Exile Scenario Editor", sf::Style::Titlebar);
mainPtr.setPosition(windRect.topLeft()); mainPtr.setPosition(windRect.topLeft());
init_menubar();
right_sbar_rect.top = RIGHT_AREA_UL_Y - 1; 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.left = RIGHT_AREA_UL_X + RIGHT_AREA_WIDTH - 1 - 16;
right_sbar_rect.bottom = RIGHT_AREA_UL_Y + RIGHT_AREA_HEIGHT + 1; right_sbar_rect.bottom = RIGHT_AREA_UL_Y + RIGHT_AREA_HEIGHT + 1;
@@ -217,14 +216,6 @@ void Handle_Update() {
restore_cursor(); 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) { void handle_file_menu(int item_hit) {
fs::path file_to_load; fs::path file_to_load;
switch(item_hit) { switch(item_hit) {
@@ -496,6 +487,9 @@ void handle_outdoor_menu(int item_hit) {
void handle_help_menu(int item_hit) { void handle_help_menu(int item_hit) {
switch(item_hit) { switch(item_hit) {
case 0:
cChoiceDlog("about-scened").show();
break;
case 1: case 1:
cChoiceDlog("help-editing").show(); cChoiceDlog("help-editing").show();
break; // started 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; extern cScenario scenario;
@interface MenuHandler : NSObject @interface MenuHandler : NSObject
-(void) appMenu:(id) sender;
-(void) fileMenu:(id) sender; -(void) fileMenu:(id) sender;
-(void) editMenu:(id) sender; -(void) editMenu:(id) sender;
-(void) scenMenu:(id) sender; -(void) scenMenu:(id) sender;
@@ -37,6 +36,10 @@ static void setMenuCallback(NSMenuItem* item, id targ, SEL selector, int num) {
} }
void init_menubar() { void init_menubar() {
static bool inited = false;
if(inited) return;
inited = true;
NSApplication* app = [NSApplication sharedApplication]; NSApplication* app = [NSApplication sharedApplication];
[NSBundle loadNibNamed: @"scen.menu" owner: app]; [NSBundle loadNibNamed: @"scen.menu" owner: app];
menu_bar_handle = [app mainMenu]; menu_bar_handle = [app mainMenu];
@@ -59,7 +62,7 @@ void init_menubar() {
mon_menu[3] = [[menu_bar_handle itemWithTitle: @"M4"] submenu]; mon_menu[3] = [[menu_bar_handle itemWithTitle: @"M4"] submenu];
MenuHandler* handler = [[[MenuHandler alloc] init] retain]; 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); setMenuCallback([app_menu itemWithTitle: @"Quit BoE Scenario Editor"], handler, @selector(fileMenu:), 5);
// TODO: Organize file menu function // TODO: Organize file menu function
setMenuCallback([file_menu itemWithTitle: @"New Scenario…"], handler, @selector(fileMenu:), 3); 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_file_menu(int item_hit);
void handle_edit_menu(int item_hit); void handle_edit_menu(int item_hit);
void handle_scenario_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); void handle_monst_menu(int item_hit);
@implementation MenuHandler @implementation MenuHandler
-(void) appMenu:(id) sender {
handle_apple_menu([[sender representedObject] intValue]);
}
-(void) fileMenu:(id) sender { -(void) fileMenu:(id) sender {
handle_file_menu([[sender representedObject] intValue]); 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);
}