mirror of
https://github.com/iAmInActions/SpaceCadetPinballPPC.git
synced 2024-11-25 05:30:09 +00:00
winmain message_handler v1.
This commit is contained in:
parent
d83c4e2b26
commit
9ffab95d8e
Binary file not shown.
@ -1,6 +1,11 @@
|
|||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
#include "Sound.h"
|
#include "Sound.h"
|
||||||
|
|
||||||
|
int Sound::Init(HINSTANCE hInstance, int voices, void(__stdcall* someFuncPtr)(int, int, int))
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
void Sound::Enable(int a1, int a2, int a3)
|
void Sound::Enable(int a1, int a2, int a3)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -12,3 +17,15 @@ void Sound::nullsub_1(int a1, int a2, int a3)
|
|||||||
void Sound::Idle()
|
void Sound::Idle()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Sound::Activate()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void Sound::Deactivate()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void Sound::Close()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
@ -2,7 +2,11 @@
|
|||||||
class Sound
|
class Sound
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
static int Init(HINSTANCE hInstance, int voices, void (__stdcall* someFuncPtr)(int, int, int));
|
||||||
static void Enable(int a1, int a2, int a3);
|
static void Enable(int a1, int a2, int a3);
|
||||||
static void nullsub_1(int a1, int a2, int a3);
|
static void nullsub_1(int a1, int a2, int a3);
|
||||||
static void Idle();
|
static void Idle();
|
||||||
|
static void Activate();
|
||||||
|
static void Deactivate();
|
||||||
|
static void Close();
|
||||||
};
|
};
|
||||||
|
@ -14,17 +14,16 @@
|
|||||||
#include "score.h"
|
#include "score.h"
|
||||||
#include "TPinballTable.h"
|
#include "TPinballTable.h"
|
||||||
#include "TTextBox.h"
|
#include "TTextBox.h"
|
||||||
|
#include "winmain.h"
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
std::cout << "Hello World!\n";
|
std::cout << "Hello World!\n";
|
||||||
{
|
{
|
||||||
// Testing with UI
|
// Testing with UI
|
||||||
/* lstrcpyA(pinball::DatFileName, "PINBALL.DAT");
|
|
||||||
pinball::hinst = GetModuleHandleA(nullptr);
|
|
||||||
char cmdLine[1]{};
|
char cmdLine[1]{};
|
||||||
pb::init();
|
pb::init();
|
||||||
WinMain(pinball::hinst, 0, cmdLine, 10);*/
|
WinMain(pinball::hinst, 0, cmdLine, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
gdrv::init(0, 0);
|
gdrv::init(0, 0);
|
||||||
@ -40,7 +39,7 @@ int main()
|
|||||||
|
|
||||||
auto xx = sizeof(datFileHeader);
|
auto xx = sizeof(datFileHeader);
|
||||||
|
|
||||||
lstrcpyA(pinball::DatFileName, "PINBALL.DAT");
|
lstrcpyA(winmain::DatFileName, "PINBALL.DAT");
|
||||||
pb::init();
|
pb::init();
|
||||||
auto datFile = pb::record_table;
|
auto datFile = pb::record_table;
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@
|
|||||||
<Link>
|
<Link>
|
||||||
<SubSystem>Console</SubSystem>
|
<SubSystem>Console</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalDependencies>Comctl32.lib;Winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>Comctl32.lib;Winmm.lib;Htmlhelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||||
@ -131,6 +131,7 @@
|
|||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<AdditionalDependencies>Comctl32.lib;Winmm.lib;Htmlhelp.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
@ -159,6 +160,8 @@
|
|||||||
<ClInclude Include="loader.h" />
|
<ClInclude Include="loader.h" />
|
||||||
<ClInclude Include="maths.h" />
|
<ClInclude Include="maths.h" />
|
||||||
<ClInclude Include="memory.h" />
|
<ClInclude Include="memory.h" />
|
||||||
|
<ClInclude Include="midi.h" />
|
||||||
|
<ClInclude Include="nudge.h" />
|
||||||
<ClInclude Include="objlist_class.h" />
|
<ClInclude Include="objlist_class.h" />
|
||||||
<ClInclude Include="options.h" />
|
<ClInclude Include="options.h" />
|
||||||
<ClInclude Include="partman.h" />
|
<ClInclude Include="partman.h" />
|
||||||
@ -217,6 +220,8 @@
|
|||||||
<ClCompile Include="loader.cpp" />
|
<ClCompile Include="loader.cpp" />
|
||||||
<ClCompile Include="maths.cpp" />
|
<ClCompile Include="maths.cpp" />
|
||||||
<ClCompile Include="memory.cpp" />
|
<ClCompile Include="memory.cpp" />
|
||||||
|
<ClCompile Include="midi.cpp" />
|
||||||
|
<ClCompile Include="nudge.cpp" />
|
||||||
<ClCompile Include="objlist_class.cpp" />
|
<ClCompile Include="objlist_class.cpp" />
|
||||||
<ClCompile Include="options.cpp" />
|
<ClCompile Include="options.cpp" />
|
||||||
<ClCompile Include="partman.cpp" />
|
<ClCompile Include="partman.cpp" />
|
||||||
|
@ -201,6 +201,12 @@
|
|||||||
<ClInclude Include="timer.h">
|
<ClInclude Include="timer.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="midi.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="nudge.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="pch.cpp">
|
<ClCompile Include="pch.cpp">
|
||||||
@ -368,6 +374,12 @@
|
|||||||
<ClCompile Include="timer.cpp">
|
<ClCompile Include="timer.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="midi.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="nudge.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Natvis Include="NatvisFile.natvis" />
|
<Natvis Include="NatvisFile.natvis" />
|
||||||
|
@ -28,6 +28,7 @@ public:
|
|||||||
static int convert_mouse_pos(unsigned int mouseXY);
|
static int convert_mouse_pos(unsigned int mouseXY);
|
||||||
static void getminmaxinfo(MINMAXINFO* maxMin);
|
static void getminmaxinfo(MINMAXINFO* maxMin);
|
||||||
static void paint();
|
static void paint();
|
||||||
|
static bool set_menu_mode(int menuEnabled);
|
||||||
private :
|
private :
|
||||||
static int MenuEnabled;
|
static int MenuEnabled;
|
||||||
static HMENU MenuHandle;
|
static HMENU MenuHandle;
|
||||||
@ -37,6 +38,5 @@ private :
|
|||||||
static int setWindowFlagsDisDlg();
|
static int setWindowFlagsDisDlg();
|
||||||
static int enableFullscreen();
|
static int enableFullscreen();
|
||||||
static int disableFullscreen();
|
static int disableFullscreen();
|
||||||
static bool set_menu_mode(int menuEnabled);
|
|
||||||
static void fillRect(int right, int bottom);
|
static void fillRect(int right, int bottom);
|
||||||
};
|
};
|
||||||
|
@ -206,9 +206,10 @@ int gdrv::display_palette(PALETTEENTRY* plt)
|
|||||||
{
|
{
|
||||||
if (plt)
|
if (plt)
|
||||||
{
|
{
|
||||||
pltDst->peRed = pltSrc->peRed;
|
// Todo: verify RGB order
|
||||||
|
pltDst->peRed = pltSrc->peBlue;
|
||||||
pltDst->peGreen = pltSrc->peGreen;
|
pltDst->peGreen = pltSrc->peGreen;
|
||||||
pltDst->peBlue = pltSrc->peBlue;
|
pltDst->peBlue = pltSrc->peRed;
|
||||||
}
|
}
|
||||||
pltDst->peFlags = 4;
|
pltDst->peFlags = 4;
|
||||||
pltSrc++;
|
pltSrc++;
|
||||||
|
22
SpaceCadetPinball/midi.cpp
Normal file
22
SpaceCadetPinball/midi.cpp
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
#include "pch.h"
|
||||||
|
#include "midi.h"
|
||||||
|
|
||||||
|
MCIERROR midi::play_pb_theme(int flag)
|
||||||
|
{
|
||||||
|
return MCIERROR();
|
||||||
|
}
|
||||||
|
|
||||||
|
MCIERROR midi::music_stop()
|
||||||
|
{
|
||||||
|
return MCIERROR();
|
||||||
|
}
|
||||||
|
|
||||||
|
int midi::music_init(HWND hwnd)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
MCIERROR midi::restart_midi_seq(int param)
|
||||||
|
{
|
||||||
|
return MCIERROR();
|
||||||
|
}
|
9
SpaceCadetPinball/midi.h
Normal file
9
SpaceCadetPinball/midi.h
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#pragma once
|
||||||
|
class midi
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static MCIERROR play_pb_theme(int flag);
|
||||||
|
static MCIERROR music_stop();
|
||||||
|
static int music_init(HWND hwnd);
|
||||||
|
static MCIERROR restart_midi_seq(int param);
|
||||||
|
};
|
26
SpaceCadetPinball/nudge.cpp
Normal file
26
SpaceCadetPinball/nudge.cpp
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#include "pch.h"
|
||||||
|
#include "nudge.h"
|
||||||
|
|
||||||
|
void nudge::un_nudge_right(int x, int y)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void nudge::un_nudge_left(int x, int y)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void nudge::un_nudge_up(int x, int y)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void nudge::nudge_right()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void nudge::nudge_left()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void nudge::nudge_up()
|
||||||
|
{
|
||||||
|
}
|
12
SpaceCadetPinball/nudge.h
Normal file
12
SpaceCadetPinball/nudge.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
#pragma once
|
||||||
|
class nudge
|
||||||
|
{
|
||||||
|
public :
|
||||||
|
|
||||||
|
static void un_nudge_right(int x, int y);
|
||||||
|
static void un_nudge_left(int x, int y);
|
||||||
|
static void un_nudge_up(int x, int y);
|
||||||
|
static void nudge_right();
|
||||||
|
static void nudge_left();
|
||||||
|
static void nudge_up();
|
||||||
|
};
|
@ -1,6 +1,9 @@
|
|||||||
#include "pch.h"
|
#include "pch.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
|
|
||||||
|
#include "fullscrn.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
|
#include "midi.h"
|
||||||
#include "pinball.h"
|
#include "pinball.h"
|
||||||
#include "Sound.h"
|
#include "Sound.h"
|
||||||
|
|
||||||
@ -185,10 +188,62 @@ void options::set_string(LPCSTR optPath, LPCSTR lpValueName, LPCSTR value)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
HMENU options::menu_check(UINT uIDCheckItem, int value)
|
void options::menu_check(UINT uIDCheckItem, int check)
|
||||||
{
|
{
|
||||||
HMENU result = MenuHandle;
|
|
||||||
if (MenuHandle)
|
if (MenuHandle)
|
||||||
result = (HMENU)CheckMenuItem(MenuHandle, uIDCheckItem, value != 0 ? 8 : 0);
|
CheckMenuItem(MenuHandle, uIDCheckItem, check != 0 ? 8 : 0);
|
||||||
return result;
|
}
|
||||||
|
|
||||||
|
void options::menu_set(UINT uIDEnableItem, int enable)
|
||||||
|
{
|
||||||
|
if (MenuHandle)
|
||||||
|
EnableMenuItem(MenuHandle, uIDEnableItem, enable == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void options::toggle(UINT uIDCheckItem)
|
||||||
|
{
|
||||||
|
int newValue;
|
||||||
|
switch (uIDCheckItem)
|
||||||
|
{
|
||||||
|
case 0xC9u:
|
||||||
|
newValue = Options.Sounds == 0;
|
||||||
|
Options.Sounds = Options.Sounds == 0;
|
||||||
|
Sound::Enable(0, 7, newValue);
|
||||||
|
menu_check(uIDCheckItem, newValue);
|
||||||
|
return;
|
||||||
|
case 0xCAu:
|
||||||
|
newValue = Options.Music == 0;
|
||||||
|
Options.Music = Options.Music == 0;
|
||||||
|
if (!newValue)
|
||||||
|
midi::music_stop();
|
||||||
|
else
|
||||||
|
midi::play_pb_theme(0);
|
||||||
|
menu_check(uIDCheckItem, newValue);
|
||||||
|
return;
|
||||||
|
case 0x193u:
|
||||||
|
newValue = Options.FullScreen == 0;
|
||||||
|
Options.FullScreen = Options.FullScreen == 0;
|
||||||
|
fullscrn::set_screen_mode(newValue);
|
||||||
|
menu_check(uIDCheckItem, newValue);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (uIDCheckItem > 407 && uIDCheckItem <= 411)
|
||||||
|
{
|
||||||
|
Options.Players = uIDCheckItem - 407;
|
||||||
|
menu_check(0x198u, uIDCheckItem == 408);
|
||||||
|
menu_check(0x199u, Options.Players == 2);
|
||||||
|
menu_check(0x19Au, Options.Players == 3);
|
||||||
|
menu_check(0x19Bu, Options.Players == 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void options::keyboard()
|
||||||
|
{
|
||||||
|
DialogBoxParamA(pinball::hinst, "KEYMAPPER", pinball::hwnd_frame, KeyMapDlgProc, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
INT_PTR _stdcall options::KeyMapDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,11 @@ public:
|
|||||||
static void set_int(LPCSTR optPath, LPCSTR lpValueName, int data);
|
static void set_int(LPCSTR optPath, LPCSTR lpValueName, int data);
|
||||||
static void get_string(LPCSTR optPath, LPCSTR lpValueName, LPSTR lpString1, LPCSTR lpString2, int iMaxLength);
|
static void get_string(LPCSTR optPath, LPCSTR lpValueName, LPSTR lpString1, LPCSTR lpString2, int iMaxLength);
|
||||||
static void set_string(LPCSTR optPath, LPCSTR lpValueName, LPCSTR value);
|
static void set_string(LPCSTR optPath, LPCSTR lpValueName, LPCSTR value);
|
||||||
static HMENU menu_check(UINT uIDCheckItem, int value);
|
static void menu_check(UINT uIDCheckItem, int check);
|
||||||
|
static void menu_set(UINT uIDEnableItem, int enable);
|
||||||
|
static void toggle(UINT uIDCheckItem);
|
||||||
|
static void keyboard();
|
||||||
|
static INT_PTR _stdcall KeyMapDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
static optionsStruct Options;
|
static optionsStruct Options;
|
||||||
private:
|
private:
|
||||||
|
@ -6,12 +6,17 @@
|
|||||||
#include "proj.h"
|
#include "proj.h"
|
||||||
#include "render.h"
|
#include "render.h"
|
||||||
#include "loader.h"
|
#include "loader.h"
|
||||||
|
#include "midi.h"
|
||||||
|
#include "nudge.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
|
#include "winmain.h"
|
||||||
|
|
||||||
TPinballTable* pb::MainTable = nullptr;
|
TPinballTable* pb::MainTable = nullptr;
|
||||||
datFileStruct* pb::record_table = nullptr;
|
datFileStruct* pb::record_table = nullptr;
|
||||||
int pb::time_ticks = 0, pb::demo_mode = 0;
|
int pb::time_ticks = 0, pb::demo_mode = 0, pb::cheat_mode = 0, pb::game_mode = 2, pb::mode_countdown_, pb::
|
||||||
|
ball_speed_limit;
|
||||||
|
float pb::time_now, pb::time_next;
|
||||||
|
|
||||||
int pb::init()
|
int pb::init()
|
||||||
{
|
{
|
||||||
@ -20,7 +25,7 @@ int pb::init()
|
|||||||
CHAR dataFilePath[300];
|
CHAR dataFilePath[300];
|
||||||
|
|
||||||
++memory::critical_allocation;
|
++memory::critical_allocation;
|
||||||
lstrcpyA(datFileName, pinball::DatFileName);
|
lstrcpyA(datFileName, winmain::DatFileName);
|
||||||
pinball::make_path_name(dataFilePath, datFileName, 300);
|
pinball::make_path_name(dataFilePath, datFileName, 300);
|
||||||
record_table = partman::load_records(dataFilePath);
|
record_table = partman::load_records(dataFilePath);
|
||||||
|
|
||||||
@ -53,6 +58,7 @@ int pb::init()
|
|||||||
}
|
}
|
||||||
|
|
||||||
render::init(nullptr, zMin, zScaler, tableSize[0], tableSize[1]);
|
render::init(nullptr, zMin, zScaler, tableSize[0], tableSize[1]);
|
||||||
|
gdrv::fill_bitmap(&render::vscreen, render::vscreen.Width, render::vscreen.Height, 0, 0, 0xff); // temp
|
||||||
gdrv::copy_bitmap(
|
gdrv::copy_bitmap(
|
||||||
&render::vscreen,
|
&render::vscreen,
|
||||||
backgroundBmp->Width,
|
backgroundBmp->Width,
|
||||||
@ -130,7 +136,7 @@ void pb::replay_level(int demoMode)
|
|||||||
demo_mode = demoMode;
|
demo_mode = demoMode;
|
||||||
mode_change(1);
|
mode_change(1);
|
||||||
//if (options::Options.Music)
|
//if (options::Options.Music)
|
||||||
//midi_play_pb_theme(0);
|
midi::play_pb_theme(0);
|
||||||
MainTable->Message(1014, static_cast<float>(options::Options.Players));
|
MainTable->Message(1014, static_cast<float>(options::Options.Players));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -140,5 +146,239 @@ void pb::ballset(int x, int y)
|
|||||||
|
|
||||||
int pb::frame(int time)
|
int pb::frame(int time)
|
||||||
{
|
{
|
||||||
|
if (time > 100)
|
||||||
|
time = 100;
|
||||||
|
float timeMul = time * 0.001f;
|
||||||
|
if (!mode_countdown(time))
|
||||||
|
{
|
||||||
|
time_next = time_now + timeMul;
|
||||||
|
//pb::timed_frame(time_now, timeMul, 1);
|
||||||
|
time_now = time_next;
|
||||||
|
time_ticks += time;
|
||||||
|
/*if (nudged_left || nudged_right || nudged_up)
|
||||||
|
{
|
||||||
|
nudge_count = timeMul * 4.0 + nudge_count;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
v2 = nudge_count - timeMul;
|
||||||
|
if (v2 <= 0.0)
|
||||||
|
v2 = 0.0;
|
||||||
|
nudge_count = v2;
|
||||||
|
}*/
|
||||||
|
//timer::check();
|
||||||
|
render::update();
|
||||||
|
//score::update(MainTable->Score1);
|
||||||
|
/*if (!MainTable->UnknownP83)
|
||||||
|
{
|
||||||
|
if (nudge_count > 0.5)
|
||||||
|
{
|
||||||
|
v3 = pinball:: get_rc_string(25, 0);
|
||||||
|
pinball::InfoTextBox->Display( v3, 2.0);
|
||||||
|
}
|
||||||
|
if (nudge_count > 1.0)
|
||||||
|
TPinballTable::tilt(MainTable, v1, time_now);
|
||||||
|
}*/
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void pb::window_size(int* width, int* height)
|
||||||
|
{
|
||||||
|
*width = 600;
|
||||||
|
*height = 416;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pb::pause_continue()
|
||||||
|
{
|
||||||
|
winmain::single_step = winmain::single_step == 0;
|
||||||
|
pinball::InfoTextBox->Clear();
|
||||||
|
pinball::MissTextBox->Clear();
|
||||||
|
if (winmain::single_step)
|
||||||
|
{
|
||||||
|
if (MainTable)
|
||||||
|
MainTable->Message(1008, time_now);
|
||||||
|
pinball::InfoTextBox->Display(pinball::get_rc_string(22, 0), -1.0);
|
||||||
|
midi::music_stop();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (MainTable)
|
||||||
|
MainTable->Message(1009, 0.0);
|
||||||
|
if (!demo_mode)
|
||||||
|
{
|
||||||
|
char* text;
|
||||||
|
float textTime;
|
||||||
|
if (game_mode == 2)
|
||||||
|
{
|
||||||
|
textTime = -1.0;
|
||||||
|
text = pinball::get_rc_string(24, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
textTime = 5.0;
|
||||||
|
text = pinball::get_rc_string(23, 0);
|
||||||
|
}
|
||||||
|
pinball::InfoTextBox->Display(text, textTime);
|
||||||
|
}
|
||||||
|
if (options::Options.Music && !winmain::single_step)
|
||||||
|
midi::play_pb_theme(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void pb::loose_focus()
|
||||||
|
{
|
||||||
|
if (MainTable)
|
||||||
|
MainTable->Message(1010, time_now);
|
||||||
|
}
|
||||||
|
|
||||||
|
void pb::keyup(int key)
|
||||||
|
{
|
||||||
|
if (game_mode == 1 && !winmain::single_step && !demo_mode)
|
||||||
|
{
|
||||||
|
if (key == options::Options.LeftFlipperKey)
|
||||||
|
{
|
||||||
|
MainTable->Message(1001, time_now);
|
||||||
|
}
|
||||||
|
else if (key == options::Options.RightFlipperKey)
|
||||||
|
{
|
||||||
|
MainTable->Message(1003, time_now);
|
||||||
|
}
|
||||||
|
else if (key == options::Options.PlungerKey)
|
||||||
|
{
|
||||||
|
MainTable->Message(1005, time_now);
|
||||||
|
}
|
||||||
|
else if (key == options::Options.LeftTableBumpKey)
|
||||||
|
{
|
||||||
|
nudge::un_nudge_right(0, 0);
|
||||||
|
}
|
||||||
|
else if (key == options::Options.RightTableBumpKey)
|
||||||
|
{
|
||||||
|
nudge::un_nudge_left(0, 0);
|
||||||
|
}
|
||||||
|
else if (key == options::Options.BottomTableBumpKey)
|
||||||
|
{
|
||||||
|
nudge::un_nudge_up(0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void pb::keydown(int key)
|
||||||
|
{
|
||||||
|
if (winmain::single_step || demo_mode)
|
||||||
|
return;
|
||||||
|
if (game_mode != 1)
|
||||||
|
{
|
||||||
|
mode_countdown(-1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ctrl_bdoor_controller(key);
|
||||||
|
if (key == options::Options.LeftFlipperKey)
|
||||||
|
{
|
||||||
|
MainTable->Message(1000, time_now);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (key == options::Options.RightFlipperKey)
|
||||||
|
{
|
||||||
|
MainTable->Message(1002, time_now);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (key == options::Options.PlungerKey)
|
||||||
|
{
|
||||||
|
MainTable->Message(1004, time_now);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (key == options::Options.LeftTableBumpKey)
|
||||||
|
{
|
||||||
|
if (!MainTable->UnknownP83)
|
||||||
|
nudge::nudge_right();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (key == options::Options.RightTableBumpKey)
|
||||||
|
{
|
||||||
|
if (!MainTable->UnknownP83)
|
||||||
|
nudge::nudge_left();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (key == options::Options.BottomTableBumpKey)
|
||||||
|
{
|
||||||
|
if (!MainTable->UnknownP83)
|
||||||
|
nudge::nudge_up();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (cheat_mode)
|
||||||
|
{
|
||||||
|
switch (key)
|
||||||
|
{
|
||||||
|
case 'B':
|
||||||
|
/**/
|
||||||
|
break;
|
||||||
|
case 'H':
|
||||||
|
/*auto v1 = get_rc_string(26, 0);
|
||||||
|
lstrcpyA(&String1, v1);
|
||||||
|
show_and_set_high_score_dialog(highscore_table, 1000000000, 1, &String1);*/
|
||||||
|
break;
|
||||||
|
case 'M':
|
||||||
|
char buffer[20];
|
||||||
|
sprintf_s(buffer, "%ld", memory::use_total);
|
||||||
|
MessageBoxA(pinball::hwnd_frame, buffer, "Mem:", 0x2000u);
|
||||||
|
break;
|
||||||
|
case 'R':
|
||||||
|
cheat_bump_rank();
|
||||||
|
break;
|
||||||
|
case VK_F11:
|
||||||
|
gdrv::get_focus();
|
||||||
|
break;
|
||||||
|
case VK_F12:
|
||||||
|
MainTable->port_draw();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void pb::ctrl_bdoor_controller(int key)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int pb::mode_countdown(int time)
|
||||||
|
{
|
||||||
|
if (!game_mode || game_mode <= 0)
|
||||||
|
return 1;
|
||||||
|
if (game_mode > 2)
|
||||||
|
{
|
||||||
|
if (game_mode == 3)
|
||||||
|
{
|
||||||
|
mode_countdown_ -= time;
|
||||||
|
if (mode_countdown_ < 0 || time < 0)
|
||||||
|
mode_change(4);
|
||||||
|
}
|
||||||
|
else if (game_mode == 4)
|
||||||
|
{
|
||||||
|
mode_countdown_ -= time;
|
||||||
|
if (mode_countdown_ < 0 || time < 0)
|
||||||
|
mode_change(1);
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int pb::cheat_bump_rank()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pb::launch_ball()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int pb::end_game()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void pb::high_scores()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
@ -7,6 +7,7 @@ class pb
|
|||||||
public:
|
public:
|
||||||
static int time_ticks;
|
static int time_ticks;
|
||||||
static int ball_speed_limit;
|
static int ball_speed_limit;
|
||||||
|
static int cheat_mode, game_mode;
|
||||||
static datFileStruct* record_table;
|
static datFileStruct* record_table;
|
||||||
static TPinballTable* MainTable;
|
static TPinballTable* MainTable;
|
||||||
|
|
||||||
@ -19,6 +20,18 @@ public:
|
|||||||
static void replay_level(int demoMode);
|
static void replay_level(int demoMode);
|
||||||
static void ballset(int x, int y);
|
static void ballset(int x, int y);
|
||||||
static int frame(int time);
|
static int frame(int time);
|
||||||
|
static void window_size(int* width, int* height);
|
||||||
|
static void pause_continue();
|
||||||
|
static void loose_focus();
|
||||||
|
static void keyup(int key);
|
||||||
|
static void keydown(int key);
|
||||||
|
static void ctrl_bdoor_controller(int key);
|
||||||
|
static int mode_countdown(int time);
|
||||||
|
static int cheat_bump_rank();
|
||||||
|
static void launch_ball();
|
||||||
|
static int end_game();
|
||||||
|
static void high_scores();
|
||||||
private :
|
private :
|
||||||
static int demo_mode;
|
static int demo_mode, mode_countdown_;
|
||||||
|
static float time_now, time_next;
|
||||||
};
|
};
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <CommCtrl.h>
|
#include <CommCtrl.h>
|
||||||
|
#include <htmlhelp.h>
|
||||||
//#include <cstdlib>
|
//#include <cstdlib>
|
||||||
|
|
||||||
// Use (void) to silent unused warnings.
|
// Use (void) to silent unused warnings.
|
||||||
|
@ -10,7 +10,6 @@ char pinball::getRcBuffer[6 * 256];
|
|||||||
int pinball::rc_string_slot = 0;
|
int pinball::rc_string_slot = 0;
|
||||||
HINSTANCE pinball::hinst;
|
HINSTANCE pinball::hinst;
|
||||||
char pinball::WindowName[2]{};
|
char pinball::WindowName[2]{};
|
||||||
char pinball::DatFileName[300]{};
|
|
||||||
int pinball::LeftShift = -1;
|
int pinball::LeftShift = -1;
|
||||||
int pinball::RightShift = -1;
|
int pinball::RightShift = -1;
|
||||||
HWND pinball::hwnd_frame = nullptr;
|
HWND pinball::hwnd_frame = nullptr;
|
||||||
|
@ -9,7 +9,6 @@ public:
|
|||||||
static TTextBox* MissTextBox;
|
static TTextBox* MissTextBox;
|
||||||
static HINSTANCE hinst;
|
static HINSTANCE hinst;
|
||||||
static char WindowName[2];
|
static char WindowName[2];
|
||||||
static char DatFileName[300];
|
|
||||||
static int RightShift;
|
static int RightShift;
|
||||||
static int LeftShift;
|
static int LeftShift;
|
||||||
static HWND hwnd_frame;
|
static HWND hwnd_frame;
|
||||||
|
@ -3,16 +3,20 @@
|
|||||||
|
|
||||||
#include "fullscrn.h"
|
#include "fullscrn.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
|
#include "midi.h"
|
||||||
#include "pinball.h"
|
#include "pinball.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
#include "pb.h"
|
#include "pb.h"
|
||||||
#include "Sound.h"
|
#include "Sound.h"
|
||||||
|
|
||||||
int winmain::iFrostUniqueMsg, winmain::return_value = 0, winmain::bQuit = 0;
|
int winmain::return_value = 0, winmain::bQuit = 0, winmain::activated;
|
||||||
DWORD winmain::then, winmain::now;
|
DWORD winmain::then, winmain::now;
|
||||||
|
UINT winmain::iFrostUniqueMsg;
|
||||||
gdrv_bitmap8 winmain::gfr_display{};
|
gdrv_bitmap8 winmain::gfr_display{};
|
||||||
int winmain::DispFrameRate = 1, winmain::DispGRhistory = 1, winmain::single_step = 0;
|
int winmain::DispFrameRate = 1, winmain::DispGRhistory = 1, winmain::single_step = 0;
|
||||||
int winmain::has_focus = 1, winmain::last_mouse_x, winmain::last_mouse_y, winmain::mouse_down, winmain::no_time_loss;
|
int winmain::has_focus = 1, winmain::last_mouse_x, winmain::last_mouse_y, winmain::mouse_down, winmain::no_time_loss;
|
||||||
|
char winmain::DatFileName[300]{};
|
||||||
|
HCURSOR winmain::mouse_hsave;
|
||||||
|
|
||||||
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
|
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
|
||||||
{
|
{
|
||||||
@ -89,7 +93,7 @@ int winmain::WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
|
|||||||
|
|
||||||
pinball::quickFlag = strstr(lpCmdLine, "-quick") != nullptr;
|
pinball::quickFlag = strstr(lpCmdLine, "-quick") != nullptr;
|
||||||
pinball::hinst = hInstance;
|
pinball::hinst = hInstance;
|
||||||
options::get_string(regSpaceCadet, "Pinball Data", pinball::DatFileName, pinball::get_rc_string(168, 0), 300);
|
options::get_string(regSpaceCadet, "Pinball Data", DatFileName, pinball::get_rc_string(168, 0), 300);
|
||||||
|
|
||||||
iFrostUniqueMsg = RegisterWindowMessageA("PinballThemeSwitcherUniqueMsgString");
|
iFrostUniqueMsg = RegisterWindowMessageA("PinballThemeSwitcherUniqueMsgString");
|
||||||
auto windowHandle = FindWindowA(pinball::get_rc_string(167, 0), nullptr);
|
auto windowHandle = FindWindowA(pinball::get_rc_string(167, 0), nullptr);
|
||||||
@ -272,6 +276,364 @@ int winmain::WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi
|
|||||||
|
|
||||||
LRESULT CALLBACK winmain::message_handler(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
LRESULT CALLBACK winmain::message_handler(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
|
if (Msg == iFrostUniqueMsg)
|
||||||
|
{
|
||||||
|
if (IsIconic(hWnd))
|
||||||
|
ShowWindow(hWnd, 9);
|
||||||
|
SetForegroundWindow(hWnd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Msg <= WM_ACTIVATEAPP)
|
||||||
|
{
|
||||||
|
switch (Msg)
|
||||||
|
{
|
||||||
|
case WM_ACTIVATEAPP:
|
||||||
|
if (wParam)
|
||||||
|
{
|
||||||
|
activated = 1;
|
||||||
|
Sound::Activate();
|
||||||
|
if (options::Options.Music && !single_step)
|
||||||
|
midi::play_pb_theme(0);
|
||||||
|
no_time_loss = 1;
|
||||||
|
pinball::adjust_priority(options::Options.PriorityAdj);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
activated = 0;
|
||||||
|
fullscrn::activate(0);
|
||||||
|
options::menu_check(0x193u, 0);
|
||||||
|
options::Options.FullScreen = 0;
|
||||||
|
SetThreadPriority(GetCurrentThread(), 0);
|
||||||
|
Sound::Deactivate();
|
||||||
|
midi::music_stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case WM_KILLFOCUS:
|
||||||
|
has_focus = 0;
|
||||||
|
gdrv::get_focus();
|
||||||
|
pb::loose_focus();
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case WM_CREATE:
|
||||||
|
{
|
||||||
|
RECT rect{};
|
||||||
|
++memory::critical_allocation;
|
||||||
|
|
||||||
|
GetWindowRect(GetDesktopWindow(), &rect);
|
||||||
|
int width = rect.right - rect.left;
|
||||||
|
int height = rect.bottom - rect.top;
|
||||||
|
pb::window_size(&width, &height);
|
||||||
|
|
||||||
|
auto prevCursor = SetCursor(LoadCursorA(nullptr, (LPCSTR)IDC_WAIT));
|
||||||
|
gdrv::init(pinball::hinst, hWnd);
|
||||||
|
|
||||||
|
auto voiceCount = options::get_int(nullptr, "Voices", 8);
|
||||||
|
if (!Sound::Init(pinball::hinst, voiceCount, nullptr))
|
||||||
|
options::menu_set(0xC9u, 0);
|
||||||
|
Sound::Activate();
|
||||||
|
|
||||||
|
if (!pinball::quickFlag && !midi::music_init(hWnd))
|
||||||
|
options::menu_set(0xCAu, 0);
|
||||||
|
|
||||||
|
if (pb::init())
|
||||||
|
_exit(0);
|
||||||
|
SetCursor(prevCursor);
|
||||||
|
auto changeDisplayFg = options::get_int(nullptr, "Change Display", 1);
|
||||||
|
auto menuHandle = GetMenu(hWnd);
|
||||||
|
fullscrn::init(width, static_cast<int>(height), options::Options.FullScreen, hWnd, menuHandle,
|
||||||
|
changeDisplayFg);
|
||||||
|
|
||||||
|
--memory::critical_allocation;
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
case WM_MOVE:
|
||||||
|
no_time_loss = 1;
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case WM_SETFOCUS:
|
||||||
|
has_focus = 1;
|
||||||
|
no_time_loss = 1;
|
||||||
|
gdrv::get_focus();
|
||||||
|
fullscrn::force_redraw();
|
||||||
|
pb::paint();
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case WM_PAINT:
|
||||||
|
{
|
||||||
|
PAINTSTRUCT paint{};
|
||||||
|
_BeginPaint(hWnd, &paint);
|
||||||
|
fullscrn::paint();
|
||||||
|
EndPaint(hWnd, &paint);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case WM_CLOSE:
|
||||||
|
case WM_QUIT:
|
||||||
|
case WM_DESTROY:
|
||||||
|
end_pause();
|
||||||
|
bQuit = 1;
|
||||||
|
PostQuitMessage(0);
|
||||||
|
fullscrn::shutdown();
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case WM_ERASEBKGND:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Msg <= WM_MENUSELECT)
|
||||||
|
{
|
||||||
|
switch (Msg)
|
||||||
|
{
|
||||||
|
case WM_MENUSELECT:
|
||||||
|
if (lParam)
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
if (fullscrn::screen_mode)
|
||||||
|
fullscrn::set_menu_mode(0);
|
||||||
|
return 0;
|
||||||
|
case WM_SYSKEYDOWN:
|
||||||
|
no_time_loss = 1;
|
||||||
|
if (fullscrn::screen_mode)
|
||||||
|
fullscrn::set_menu_mode(1);
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case WM_GETMINMAXINFO:
|
||||||
|
fullscrn::getminmaxinfo((MINMAXINFO*)lParam);
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case WM_DISPLAYCHANGE:
|
||||||
|
if (fullscrn::displaychange())
|
||||||
|
{
|
||||||
|
options::Options.FullScreen = 0;
|
||||||
|
options::menu_check(0x193u, 0);
|
||||||
|
}
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case WM_KEYUP:
|
||||||
|
pb::keyup(wParam);
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
if (!(lParam & 0x40000000))
|
||||||
|
pb::keydown(wParam);
|
||||||
|
switch (wParam)
|
||||||
|
{
|
||||||
|
case VK_ESCAPE:
|
||||||
|
if (options::Options.FullScreen)
|
||||||
|
options::toggle(0x193u);
|
||||||
|
SendMessageA(pinball::hwnd_frame, 0x112u, 0xF020u, 0);
|
||||||
|
break;
|
||||||
|
case VK_F1:
|
||||||
|
help_introduction(pinball::hinst, hWnd);
|
||||||
|
break;
|
||||||
|
case VK_F2:
|
||||||
|
new_game();
|
||||||
|
break;
|
||||||
|
case VK_F3:
|
||||||
|
pause();
|
||||||
|
break;
|
||||||
|
case VK_F4:
|
||||||
|
options::toggle(0x193u);
|
||||||
|
break;
|
||||||
|
case VK_F8:
|
||||||
|
if (!single_step)
|
||||||
|
pause();
|
||||||
|
options::keyboard();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!pb::cheat_mode)
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
switch (wParam)
|
||||||
|
{
|
||||||
|
case 'H':
|
||||||
|
DispGRhistory = 1;
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case 'Y':
|
||||||
|
SetWindowTextA(hWnd, "Pinball");
|
||||||
|
DispFrameRate = DispFrameRate == 0;
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case VK_F1:
|
||||||
|
pb::frame(10);
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case VK_F15:
|
||||||
|
single_step = single_step == 0;
|
||||||
|
if (single_step == 0)
|
||||||
|
no_time_loss = 1;
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
default:
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
case WM_SYSCOMMAND:
|
||||||
|
switch (wParam & 0xFFF0)
|
||||||
|
{
|
||||||
|
case SC_MOVE:
|
||||||
|
if (fullscrn::screen_mode)
|
||||||
|
return 0;
|
||||||
|
case SC_MINIMIZE:
|
||||||
|
if (!single_step)
|
||||||
|
pause();
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case SC_SCREENSAVE:
|
||||||
|
fullscrn::activate(0);
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
end_pause();
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case WM_INITMENU:
|
||||||
|
no_time_loss = 1;
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case WM_COMMAND:
|
||||||
|
no_time_loss = 1;
|
||||||
|
switch (wParam)
|
||||||
|
{
|
||||||
|
case 0x191u:
|
||||||
|
end_pause();
|
||||||
|
pb::launch_ball();
|
||||||
|
break;
|
||||||
|
case 0x192u:
|
||||||
|
pause();
|
||||||
|
break;
|
||||||
|
case 0x193u:
|
||||||
|
if (!single_step)
|
||||||
|
pause();
|
||||||
|
options::toggle(wParam);
|
||||||
|
break;
|
||||||
|
case 0x194u:
|
||||||
|
end_pause();
|
||||||
|
pb::toggle_demo();
|
||||||
|
break;
|
||||||
|
case 0x195u:
|
||||||
|
{
|
||||||
|
if (!single_step)
|
||||||
|
pause();
|
||||||
|
auto tmpBuf = memory::allocate(0x1F4u);
|
||||||
|
if (tmpBuf)
|
||||||
|
{
|
||||||
|
char cmdLine[0x1F4u];
|
||||||
|
options::get_string(nullptr, "Shell Exe", tmpBuf, pinball::WindowName, 500);
|
||||||
|
sprintf_s(
|
||||||
|
cmdLine,
|
||||||
|
"%s %s%lX %s%lX",
|
||||||
|
tmpBuf,
|
||||||
|
"select=",
|
||||||
|
(int)pinball::hwnd_frame,
|
||||||
|
"confirm=",
|
||||||
|
(int)pinball::hwnd_frame
|
||||||
|
* (int)pinball::hwnd_frame
|
||||||
|
* (int)pinball::hwnd_frame
|
||||||
|
* (int)pinball::hwnd_frame
|
||||||
|
* (int)pinball::hwnd_frame
|
||||||
|
* (int)pinball::hwnd_frame
|
||||||
|
* (int)pinball::hwnd_frame);
|
||||||
|
if (static_cast<int>(WinExec(cmdLine, 5u)) < 32)
|
||||||
|
{
|
||||||
|
auto caption = pinball::get_rc_string(170, 0);
|
||||||
|
auto text = pinball::get_rc_string(171, 0);
|
||||||
|
MessageBoxA(pinball::hwnd_frame, text, caption, 0x2010u);
|
||||||
|
}
|
||||||
|
memory::free(tmpBuf);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0x196u:
|
||||||
|
if (!single_step)
|
||||||
|
pause();
|
||||||
|
options::keyboard();
|
||||||
|
break;
|
||||||
|
case 0x198u:
|
||||||
|
case 0x199u:
|
||||||
|
case 0x19Au:
|
||||||
|
case 0x19Bu:
|
||||||
|
options::toggle(wParam);
|
||||||
|
new_game();
|
||||||
|
break;
|
||||||
|
case 301:
|
||||||
|
if (!single_step)
|
||||||
|
pause();
|
||||||
|
help_introduction(pinball::hinst, hWnd);
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case 0x6A:
|
||||||
|
pb::end_game();
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case 201:
|
||||||
|
case 202:
|
||||||
|
if (!single_step)
|
||||||
|
pause();
|
||||||
|
options::toggle(wParam);
|
||||||
|
break;
|
||||||
|
case 204:
|
||||||
|
if (!single_step)
|
||||||
|
pause();
|
||||||
|
options::keyboard();
|
||||||
|
break;
|
||||||
|
case 0x69u:
|
||||||
|
PostMessageA(hWnd, 0x12u, 0, 0);
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case 0x65u:
|
||||||
|
new_game();
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case 0x66u:
|
||||||
|
if (!single_step)
|
||||||
|
pause();
|
||||||
|
a_dialog(pinball::hinst, hWnd);
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case 0x67u:
|
||||||
|
if (!single_step)
|
||||||
|
pause();
|
||||||
|
pb::high_scores();
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case 1:
|
||||||
|
midi::restart_midi_seq(lParam);
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case WM_LBUTTONDOWN:
|
||||||
|
if (pb::game_mode)
|
||||||
|
{
|
||||||
|
if (pb::cheat_mode)
|
||||||
|
{
|
||||||
|
mouse_down = 1;
|
||||||
|
mouse_hsave = SetCursor(nullptr);
|
||||||
|
auto lParam2 = fullscrn::convert_mouse_pos(lParam);
|
||||||
|
last_mouse_x = static_cast<unsigned __int16>(lParam2);
|
||||||
|
last_mouse_y = static_cast<unsigned int>(lParam2) >> 16;
|
||||||
|
SetCapture(hWnd);
|
||||||
|
}
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case WM_LBUTTONUP:
|
||||||
|
if (mouse_down)
|
||||||
|
{
|
||||||
|
mouse_down = 0;
|
||||||
|
SetCursor(mouse_hsave);
|
||||||
|
ReleaseCapture();
|
||||||
|
}
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case WM_RBUTTONDOWN:
|
||||||
|
case WM_MBUTTONDOWN:
|
||||||
|
if (pb::game_mode)
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
break;
|
||||||
|
case WM_POWERBROADCAST:
|
||||||
|
if (wParam == 4 && options::Options.FullScreen)
|
||||||
|
{
|
||||||
|
options::Options.FullScreen = 0;
|
||||||
|
options::menu_check(0x193u, 0);
|
||||||
|
fullscrn::set_screen_mode(options::Options.FullScreen);
|
||||||
|
}
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case WM_PALETTECHANGED:
|
||||||
|
InvalidateRect(hWnd, nullptr, 0);
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
case WM_POINTERDEVICEINRANGE | LB_ADDSTRING:
|
||||||
|
if (wParam == 1)
|
||||||
|
midi::restart_midi_seq(lParam);
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
default:
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pb::mode_countdown(-1);
|
||||||
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -306,8 +668,8 @@ int winmain::ProcessWindowMessages()
|
|||||||
|
|
||||||
void winmain::memalloc_failure()
|
void winmain::memalloc_failure()
|
||||||
{
|
{
|
||||||
/*midi_music_stop();
|
midi::music_stop();
|
||||||
Sound_Close();*/
|
Sound::Close();
|
||||||
gdrv::uninit();
|
gdrv::uninit();
|
||||||
char* caption = pinball::get_rc_string(170, 0);
|
char* caption = pinball::get_rc_string(170, 0);
|
||||||
char* text = pinball::get_rc_string(179, 0);
|
char* text = pinball::get_rc_string(179, 0);
|
||||||
@ -347,3 +709,57 @@ int winmain::a_dialog(HINSTANCE hInstance, HWND hWnd)
|
|||||||
auto icon = LoadIconA(hInstance, "ICON_1");
|
auto icon = LoadIconA(hInstance, "ICON_1");
|
||||||
return ShellAboutA(hWnd, appName, szOtherStuff, icon);
|
return ShellAboutA(hWnd, appName, szOtherStuff, icon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void winmain::end_pause()
|
||||||
|
{
|
||||||
|
if (single_step)
|
||||||
|
{
|
||||||
|
if (fullscrn::screen_mode)
|
||||||
|
fullscrn::set_menu_mode(0);
|
||||||
|
pb::pause_continue();
|
||||||
|
no_time_loss = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void winmain::new_game()
|
||||||
|
{
|
||||||
|
end_pause();
|
||||||
|
HCURSOR prevCursor = SetCursor(LoadCursorA(nullptr, (LPCSTR)IDC_WAIT));
|
||||||
|
pb::replay_level(0);
|
||||||
|
SetCursor(prevCursor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void winmain::pause()
|
||||||
|
{
|
||||||
|
if (fullscrn::screen_mode)
|
||||||
|
{
|
||||||
|
if (single_step)
|
||||||
|
fullscrn::set_menu_mode(0);
|
||||||
|
else
|
||||||
|
fullscrn::set_menu_mode(1);
|
||||||
|
}
|
||||||
|
pb::pause_continue();
|
||||||
|
no_time_loss = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void winmain::help_introduction(HINSTANCE a1, HWND a2)
|
||||||
|
{
|
||||||
|
char* buf1 = memory::allocate(0x1F4u);
|
||||||
|
if (buf1)
|
||||||
|
{
|
||||||
|
char* buf2 = memory::allocate(0x1F4u);
|
||||||
|
if (buf2)
|
||||||
|
{
|
||||||
|
options::get_string(nullptr, "HelpFile", buf1, pinball::get_rc_string(178, 0), 500);
|
||||||
|
options::get_string(pinball::get_rc_string(166, 0), "HelpFile", buf1, buf1, 500);
|
||||||
|
lstrcpyA(buf2, buf1);
|
||||||
|
memory::free(buf1);
|
||||||
|
HtmlHelpA(GetDesktopWindow(), buf2, 0, 0);
|
||||||
|
memory::free(buf2);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
memory::free(buf1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -4,6 +4,9 @@
|
|||||||
class winmain
|
class winmain
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
static char DatFileName[300];
|
||||||
|
static int single_step;
|
||||||
|
|
||||||
static int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd);
|
static int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd);
|
||||||
static LRESULT CALLBACK message_handler(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
|
static LRESULT CALLBACK message_handler(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
|
||||||
static void memalloc_failure();
|
static void memalloc_failure();
|
||||||
@ -11,11 +14,17 @@ public:
|
|||||||
static int check_expiration_date();
|
static int check_expiration_date();
|
||||||
static HDC _GetDC(HWND hWnd);
|
static HDC _GetDC(HWND hWnd);
|
||||||
static int a_dialog(HINSTANCE hInstance, HWND hWnd);
|
static int a_dialog(HINSTANCE hInstance, HWND hWnd);
|
||||||
|
static void end_pause();
|
||||||
|
static void new_game();
|
||||||
|
static void pause();
|
||||||
|
static void help_introduction(HINSTANCE a1, HWND a2);
|
||||||
private:
|
private:
|
||||||
static int iFrostUniqueMsg, return_value, bQuit, DispFrameRate, DispGRhistory;
|
static int return_value, bQuit, DispFrameRate, DispGRhistory, activated;
|
||||||
static int has_focus, single_step, mouse_down, last_mouse_x, last_mouse_y, no_time_loss;
|
static int has_focus, mouse_down, last_mouse_x, last_mouse_y, no_time_loss;
|
||||||
static DWORD then, now;
|
static DWORD then, now;
|
||||||
|
static UINT iFrostUniqueMsg;
|
||||||
static gdrv_bitmap8 gfr_display;
|
static gdrv_bitmap8 gfr_display;
|
||||||
|
static HCURSOR mouse_hsave;
|
||||||
|
|
||||||
static HDC _BeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint);
|
static HDC _BeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint);
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user