ASM-accurate Main.cpp and added the various Windows menus
This commit is contained in:
parent
451945e80c
commit
8892dc24b5
8 changed files with 475 additions and 194 deletions
|
@ -175,6 +175,80 @@ END
|
||||||
|
|
||||||
#endif // APSTUDIO_INVOKED
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Menu
|
||||||
|
//
|
||||||
|
|
||||||
|
MENU_MAIN MENU
|
||||||
|
BEGIN
|
||||||
|
MENUITEM "Quit", 40001
|
||||||
|
MENUITEM "Volume", 40004
|
||||||
|
MENUITEM "Version", 40002
|
||||||
|
MENUITEM "Debug Save", 40005
|
||||||
|
MENUITEM "Mute", 40007
|
||||||
|
END
|
||||||
|
|
||||||
|
|
||||||
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Dialog
|
||||||
|
//
|
||||||
|
|
||||||
|
DLG_ABOUT DIALOGEX 0, 0, 123, 75
|
||||||
|
STYLE DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
|
FONT 9, "Arial", 400, 0, 0x1
|
||||||
|
BEGIN
|
||||||
|
DEFPUSHBUTTON "OK",1,37,54,50,14,BS_FLAT
|
||||||
|
CTEXT "---",1011,7,14,109,35
|
||||||
|
END
|
||||||
|
|
||||||
|
DLG_MUTE DIALOGEX 0, 0, 118, 111
|
||||||
|
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
|
CAPTION "Mute"
|
||||||
|
FONT 9, "Arial", 400, 0, 0x80
|
||||||
|
BEGIN
|
||||||
|
DEFPUSHBUTTON "OK",1,7,90,50,14
|
||||||
|
PUSHBUTTON "Cancel",2,61,90,50,14
|
||||||
|
CONTROL "0",1010,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT |
|
||||||
|
WS_TABSTOP,7,7,20,10
|
||||||
|
CONTROL "1",1018,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT |
|
||||||
|
WS_TABSTOP,17,15,20,10
|
||||||
|
CONTROL "2",1019,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT |
|
||||||
|
WS_TABSTOP,26,24,20,10
|
||||||
|
CONTROL "3",1020,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT |
|
||||||
|
WS_TABSTOP,35,33,20,10
|
||||||
|
CONTROL "4",1021,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT |
|
||||||
|
WS_TABSTOP,45,41,20,10
|
||||||
|
CONTROL "5",1022,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT |
|
||||||
|
WS_TABSTOP,54,50,20,10
|
||||||
|
CONTROL "6",1023,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT |
|
||||||
|
WS_TABSTOP,63,58,20,10
|
||||||
|
CONTROL "7",1024,"Button",BS_AUTOCHECKBOX | BS_LEFTTEXT |
|
||||||
|
WS_TABSTOP,73,67,20,10
|
||||||
|
END
|
||||||
|
|
||||||
|
DLG_SAVE DIALOGEX 0, 0, 118, 47
|
||||||
|
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
|
CAPTION "Save"
|
||||||
|
FONT 9, "Arial", 0, 0, 0x1
|
||||||
|
BEGIN
|
||||||
|
EDITTEXT 1008,36,8,72,12,ES_AUTOHSCROLL
|
||||||
|
DEFPUSHBUTTON "OK",1,8,28,48,12
|
||||||
|
PUSHBUTTON "Cancel",2,60,28,48,12
|
||||||
|
LTEXT "Name",-1,8,8,20,12,SS_CENTERIMAGE
|
||||||
|
END
|
||||||
|
|
||||||
|
DLG_YESNO DIALOGEX 0, 0, 119, 49
|
||||||
|
STYLE DS_SETFONT | WS_POPUP | WS_CAPTION
|
||||||
|
FONT 9, "Arial", 400, 0, 0x80
|
||||||
|
BEGIN
|
||||||
|
PUSHBUTTON "Yes",1,7,28,50,14,BS_FLAT
|
||||||
|
PUSHBUTTON "No",2,62,28,50,14,BS_FLAT
|
||||||
|
CTEXT "---",1009,7,8,105,15,SS_CENTERIMAGE
|
||||||
|
END
|
||||||
|
|
||||||
#endif // English (U.S.) resources
|
#endif // English (U.S.) resources
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
Name="VCCustomBuildTool"/>
|
Name="VCCustomBuildTool"/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
AdditionalDependencies="Version.lib dsound.lib WinMM.lib dxguid.lib dinput.lib ddraw.lib ShLwApi.Lib"
|
AdditionalDependencies="Version.lib dsound.lib WinMM.lib dxguid.lib dinput.lib ddraw.lib ShLwApi.Lib Imm32.lib"
|
||||||
OutputFile="$(OutDir)\$(ProjectName).exe"
|
OutputFile="$(OutDir)\$(ProjectName).exe"
|
||||||
LinkIncremental="2"
|
LinkIncremental="2"
|
||||||
AdditionalLibraryDirectories=""
|
AdditionalLibraryDirectories=""
|
||||||
|
@ -85,7 +85,7 @@
|
||||||
Name="VCCustomBuildTool"/>
|
Name="VCCustomBuildTool"/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
AdditionalDependencies="Version.lib dsound.lib WinMM.lib dxguid.lib dinput.lib ddraw.lib ShLwApi.Lib"
|
AdditionalDependencies="Version.lib dsound.lib WinMM.lib dxguid.lib dinput.lib ddraw.lib ShLwApi.Lib Imm32.lib"
|
||||||
OutputFile="$(OutDir)\$(ProjectName).exe"
|
OutputFile="$(OutDir)\$(ProjectName).exe"
|
||||||
LinkIncremental="1"
|
LinkIncremental="1"
|
||||||
IgnoreAllDefaultLibraries="FALSE"
|
IgnoreAllDefaultLibraries="FALSE"
|
||||||
|
@ -135,7 +135,7 @@
|
||||||
Name="VCCustomBuildTool"/>
|
Name="VCCustomBuildTool"/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
AdditionalDependencies="Version.lib dsound.lib WinMM.lib dxguid.lib dinput.lib ddraw.lib ShLwApi.Lib"
|
AdditionalDependencies="Version.lib dsound.lib WinMM.lib dxguid.lib dinput.lib ddraw.lib ShLwApi.Lib Imm32.lib"
|
||||||
OutputFile="$(OutDir)\$(ProjectName).exe"
|
OutputFile="$(OutDir)\$(ProjectName).exe"
|
||||||
LinkIncremental="1"
|
LinkIncremental="1"
|
||||||
IgnoreAllDefaultLibraries="FALSE"
|
IgnoreAllDefaultLibraries="FALSE"
|
||||||
|
@ -186,7 +186,7 @@
|
||||||
Name="VCCustomBuildTool"/>
|
Name="VCCustomBuildTool"/>
|
||||||
<Tool
|
<Tool
|
||||||
Name="VCLinkerTool"
|
Name="VCLinkerTool"
|
||||||
AdditionalDependencies="Version.lib dsound.lib WinMM.lib dxguid.lib dinput.lib ddraw.lib ShLwApi.Lib"
|
AdditionalDependencies="Version.lib dsound.lib WinMM.lib dxguid.lib dinput.lib ddraw.lib ShLwApi.Lib Imm32.lib"
|
||||||
OutputFile="$(OutDir)\$(ProjectName).exe"
|
OutputFile="$(OutDir)\$(ProjectName).exe"
|
||||||
LinkIncremental="2"
|
LinkIncremental="2"
|
||||||
AdditionalLibraryDirectories=""
|
AdditionalLibraryDirectories=""
|
||||||
|
@ -825,6 +825,9 @@
|
||||||
RelativePath="..\assets\resources\Org\Zonbie.org">
|
RelativePath="..\assets\resources\Org\Zonbie.org">
|
||||||
</File>
|
</File>
|
||||||
</Filter>
|
</Filter>
|
||||||
|
<File
|
||||||
|
RelativePath="..\assets\resources\Wave\Wave.dat">
|
||||||
|
</File>
|
||||||
</Files>
|
</Files>
|
||||||
<Globals>
|
<Globals>
|
||||||
</Globals>
|
</Globals>
|
||||||
|
|
|
@ -782,10 +782,46 @@ addr = 0x412250
|
||||||
name = "GetTrg"
|
name = "GetTrg"
|
||||||
addr = 0x4122E0
|
addr = 0x4122E0
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "SetWindowName"
|
||||||
|
addr = 0x412320
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "PutFramePerSecound"
|
||||||
|
addr = 0x412370
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "GetFramePerSecound"
|
||||||
|
addr = 0x4123A0
|
||||||
|
|
||||||
[[func]]
|
[[func]]
|
||||||
name = "WinMain"
|
name = "WinMain"
|
||||||
addr = 0x412420
|
addr = 0x412420
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "InactiveWindow"
|
||||||
|
addr = 0x412BC0
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "ActiveWindow"
|
||||||
|
addr = 0x412BF0
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "DragAndDropHandler"
|
||||||
|
addr = 0x412C30
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "WindowProcedure"
|
||||||
|
addr = 0x412CA0
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "SystemTask"
|
||||||
|
addr = 0x413570
|
||||||
|
|
||||||
|
[[func]]
|
||||||
|
name = "JoystickProc"
|
||||||
|
addr = 0x4135E0
|
||||||
|
|
||||||
[[func]]
|
[[func]]
|
||||||
name = "InitMapData2"
|
name = "InitMapData2"
|
||||||
addr = 0x413750
|
addr = 0x413750
|
||||||
|
|
|
@ -5,9 +5,10 @@
|
||||||
|
|
||||||
// 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 169
|
#define _APS_NEXT_RESOURCE_VALUE 172
|
||||||
#define _APS_NEXT_COMMAND_VALUE 40001
|
#define _APS_NEXT_COMMAND_VALUE 40001
|
||||||
#define _APS_NEXT_CONTROL_VALUE 1001
|
#define _APS_NEXT_CONTROL_VALUE 1001
|
||||||
#define _APS_NEXT_SYMED_VALUE 101
|
#define _APS_NEXT_SYMED_VALUE 101
|
||||||
|
|
|
@ -143,7 +143,7 @@ BOOL __stdcall EnumDevices_Callback(LPCDIDEVICEINSTANCE lpddi, LPVOID pvRef)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL GetJoystickStatus(BOOL *buttons)
|
BOOL GetJoystickStatus(JOYSTICK_STATUS *status)
|
||||||
{
|
{
|
||||||
DIJOYSTATE joystate;
|
DIJOYSTATE joystate;
|
||||||
|
|
||||||
|
@ -165,25 +165,25 @@ BOOL GetJoystickStatus(BOOL *buttons)
|
||||||
for (int i = 0; i < 32; ++i)
|
for (int i = 0; i < 32; ++i)
|
||||||
{
|
{
|
||||||
if (joystate.rgbButtons[i] & 0x80)
|
if (joystate.rgbButtons[i] & 0x80)
|
||||||
buttons[i + 4] = TRUE;
|
status->bButton[i] = TRUE;
|
||||||
else
|
else
|
||||||
buttons[i + 4] = FALSE;
|
status->bButton[i] = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
buttons[3] = FALSE;
|
status->bDown = FALSE;
|
||||||
buttons[1] = FALSE;
|
status->bRight = FALSE;
|
||||||
buttons[2] = FALSE;
|
status->bUp = FALSE;
|
||||||
buttons[0] = FALSE;
|
status->bLeft = FALSE;
|
||||||
|
|
||||||
if (joystate.lX < joystick_neutral_x - 10000)
|
if (joystate.lX < joystick_neutral_x - 10000)
|
||||||
buttons[0] = TRUE;
|
status->bLeft = TRUE;
|
||||||
else if (joystate.lX > joystick_neutral_x + 10000)
|
else if (joystate.lX > joystick_neutral_x + 10000)
|
||||||
buttons[1] = TRUE;
|
status->bRight = TRUE;
|
||||||
|
|
||||||
if (joystate.lY < joystick_neutral_y - 10000)
|
if (joystate.lY < joystick_neutral_y - 10000)
|
||||||
buttons[2] = TRUE;
|
status->bUp = TRUE;
|
||||||
else if (joystate.lY > joystick_neutral_y + 10000)
|
else if (joystate.lY > joystick_neutral_y + 10000)
|
||||||
buttons[3] = TRUE;
|
status->bDown = TRUE;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,5 +16,5 @@ struct JOYSTICK_STATUS
|
||||||
|
|
||||||
void ReleaseDirectInput(void);
|
void ReleaseDirectInput(void);
|
||||||
BOOL InitDirectInput(HINSTANCE hinst, HWND hWnd);
|
BOOL InitDirectInput(HINSTANCE hinst, HWND hWnd);
|
||||||
BOOL GetJoystickStatus(BOOL *buttons);
|
BOOL GetJoystickStatus(JOYSTICK_STATUS *status);
|
||||||
BOOL ResetJoystickStatus(void);
|
BOOL ResetJoystickStatus(void);
|
||||||
|
|
517
src/Main.cpp
517
src/Main.cpp
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
#include "CommonDefines.h"
|
#include "CommonDefines.h"
|
||||||
#include "Config.h"
|
#include "Config.h"
|
||||||
|
#include "Dialog.h"
|
||||||
#include "Draw.h"
|
#include "Draw.h"
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
#include "Generic.h"
|
#include "Generic.h"
|
||||||
|
@ -21,6 +22,8 @@
|
||||||
#include "Sound.h"
|
#include "Sound.h"
|
||||||
#include "Triangle.h"
|
#include "Triangle.h"
|
||||||
|
|
||||||
|
LRESULT __stdcall WindowProcedure(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
char gModulePath[MAX_PATH];
|
char gModulePath[MAX_PATH];
|
||||||
char gDataPath[MAX_PATH];
|
char gDataPath[MAX_PATH];
|
||||||
|
|
||||||
|
@ -48,16 +51,27 @@ static const char *lpWindowName = "\x93\xB4\x8C\x41\x95\xA8\x8C\xEA";
|
||||||
static const char *lpWindowName = "Cave Story ~ Doukutsu Monogatari";
|
static const char *lpWindowName = "Cave Story ~ Doukutsu Monogatari";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Framerate stuff
|
void SetWindowName(HWND hWnd)
|
||||||
void PutFramePerSecound()
|
|
||||||
{
|
{
|
||||||
if (bFps)
|
char window_name[0x100];
|
||||||
PutNumber4(WINDOW_WIDTH - 40, 8, GetFramePerSecound(), FALSE);
|
|
||||||
|
sprintf(window_name, "%s", lpWindowName);
|
||||||
|
SetWindowTextA(hWnd, window_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
int GetFramePerSecound()
|
// Framerate stuff
|
||||||
|
void PutFramePerSecound(void)
|
||||||
{
|
{
|
||||||
/* unsigned int current_tick;
|
if (bFps)
|
||||||
|
{
|
||||||
|
const int fps = GetFramePerSecound();
|
||||||
|
PutNumber4(WINDOW_WIDTH - 40, 8, fps, FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int GetFramePerSecound(void)
|
||||||
|
{
|
||||||
|
unsigned int current_tick;
|
||||||
static BOOL need_new_base_tick = TRUE;
|
static BOOL need_new_base_tick = TRUE;
|
||||||
static int frames_this_second;
|
static int frames_this_second;
|
||||||
static int current_frame;
|
static int current_frame;
|
||||||
|
@ -65,11 +79,11 @@ int GetFramePerSecound()
|
||||||
|
|
||||||
if (need_new_base_tick)
|
if (need_new_base_tick)
|
||||||
{
|
{
|
||||||
base_tick = SDL_GetTicks();
|
base_tick = GetTickCount();
|
||||||
need_new_base_tick = FALSE;
|
need_new_base_tick = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
current_tick = SDL_GetTicks();
|
current_tick = GetTickCount();
|
||||||
++current_frame;
|
++current_frame;
|
||||||
|
|
||||||
if (base_tick + 1000 <= current_tick)
|
if (base_tick + 1000 <= current_tick)
|
||||||
|
@ -79,8 +93,7 @@ int GetFramePerSecound()
|
||||||
current_frame = 0;
|
current_frame = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return frames_this_second;*/
|
return frames_this_second;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
|
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
|
||||||
|
@ -198,7 +211,7 @@ int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdL
|
||||||
WNDCLASSEXA wndclassex;
|
WNDCLASSEXA wndclassex;
|
||||||
memset(&wndclassex, 0, sizeof(WNDCLASSEXA));
|
memset(&wndclassex, 0, sizeof(WNDCLASSEXA));
|
||||||
wndclassex.cbSize = sizeof(WNDCLASSEXA);
|
wndclassex.cbSize = sizeof(WNDCLASSEXA);
|
||||||
// wndclassex.lpfnWndProc = WindowProcedure;
|
wndclassex.lpfnWndProc = WindowProcedure;
|
||||||
wndclassex.hInstance = hInstance;
|
wndclassex.hInstance = hInstance;
|
||||||
wndclassex.hbrBackground = (HBRUSH)GetStockObject(3);
|
wndclassex.hbrBackground = (HBRUSH)GetStockObject(3);
|
||||||
wndclassex.lpszClassName = lpWindowName;
|
wndclassex.lpszClassName = lpWindowName;
|
||||||
|
@ -354,7 +367,7 @@ int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdL
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InactiveWindow()
|
void InactiveWindow(void)
|
||||||
{
|
{
|
||||||
if (bActive)
|
if (bActive)
|
||||||
{
|
{
|
||||||
|
@ -366,7 +379,7 @@ void InactiveWindow()
|
||||||
PlaySoundObject(7, 0);
|
PlaySoundObject(7, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ActiveWindow()
|
void ActiveWindow(void)
|
||||||
{
|
{
|
||||||
if (!bActive)
|
if (!bActive)
|
||||||
{
|
{
|
||||||
|
@ -379,226 +392,380 @@ void ActiveWindow()
|
||||||
PlaySoundObject(7, -1);
|
PlaySoundObject(7, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void JoystickProc()
|
// Turns out you could drag-and-drop a save file onto the
|
||||||
|
// window to load it, but this behavior is dummied-out.
|
||||||
|
BOOL DragAndDropHandler(HWND hWnd, WPARAM wParam)
|
||||||
{
|
{
|
||||||
/* JOYSTICK_STATUS status;
|
char path[MAX_PATH];
|
||||||
|
HDROP hDrop = (HDROP)wParam;
|
||||||
|
|
||||||
if (GetJoystickStatus(&status))
|
if (DragQueryFileA(hDrop, 0xFFFFFFFF, NULL, 0) != 0)
|
||||||
{
|
{
|
||||||
// Clear held buttons
|
DragQueryFileA(hDrop, 0, path, sizeof(path));
|
||||||
gKey &= (KEY_ESCAPE | KEY_F2 | KEY_F1);
|
LoadProfile(path);
|
||||||
|
}
|
||||||
|
|
||||||
// Set movement buttons
|
DragFinish(hDrop);
|
||||||
if (status.bLeft)
|
|
||||||
gKey |= gKeyLeft;
|
|
||||||
if (status.bRight)
|
|
||||||
gKey |= gKeyRight;
|
|
||||||
if (status.bUp)
|
|
||||||
gKey |= gKeyUp;
|
|
||||||
if (status.bDown)
|
|
||||||
gKey |= gKeyDown;
|
|
||||||
|
|
||||||
// Set held buttons
|
return TRUE;
|
||||||
for (int i = 0; i < 8; i++)
|
|
||||||
{
|
|
||||||
if (status.bButton[i])
|
|
||||||
gKey |= gJoystickButtonTable[i];
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define DO_KEY_PRESS(key) \
|
LRESULT __stdcall WindowProcedure(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
||||||
if (event.type == SDL_KEYDOWN) \
|
|
||||||
gKey |= key; \
|
|
||||||
else \
|
|
||||||
gKey &= ~key; \
|
|
||||||
break;
|
|
||||||
|
|
||||||
BOOL SystemTask()
|
|
||||||
{
|
{
|
||||||
// Handle window events
|
BOOL window_focus;
|
||||||
BOOL focusGained = TRUE;
|
HMENU hMenu;
|
||||||
/*
|
|
||||||
while (SDL_PollEvent(NULL) || !focusGained)
|
switch (Msg)
|
||||||
{
|
{
|
||||||
SDL_Event event;
|
case WM_CREATE:
|
||||||
SDL_WaitEvent(&event);
|
hMenu = GetMenu(hWnd);
|
||||||
|
//if (!CheckFileExists("save")) // Chances are a line like this used to exist
|
||||||
|
DeleteMenu(hMenu, 40005, MF_BYCOMMAND);
|
||||||
|
DrawMenuBar(hWnd);
|
||||||
|
|
||||||
switch (event.type)
|
hMenu = GetMenu(hWnd);
|
||||||
{
|
if (!CheckFileExists("mute"))
|
||||||
case SDL_QUIT:
|
DeleteMenu(hMenu, 40007, MF_BYCOMMAND);
|
||||||
return FALSE;
|
DrawMenuBar(hWnd);
|
||||||
|
|
||||||
case SDL_WINDOWEVENT:
|
if (CheckFileExists("fps"))
|
||||||
switch (event.window.event)
|
bFps = TRUE;
|
||||||
{
|
|
||||||
case SDL_WINDOWEVENT_FOCUS_GAINED:
|
|
||||||
focusGained = TRUE;
|
|
||||||
ActiveWindow();
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDL_WINDOWEVENT_FOCUS_LOST:
|
if (!bFullscreen)
|
||||||
focusGained = FALSE;
|
LoadWindowRect(hWnd, "window.rect", FALSE);
|
||||||
InactiveWindow();
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
SetWindowName(hWnd);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SDL_DROPFILE:
|
case WM_SYSCOMMAND:
|
||||||
LoadProfile(event.drop.file);
|
switch (wParam)
|
||||||
SDL_free(event.drop.file);
|
{
|
||||||
break;
|
case SC_MONITORPOWER:
|
||||||
|
break;
|
||||||
|
|
||||||
case SDL_KEYDOWN:
|
case SC_KEYMENU:
|
||||||
case SDL_KEYUP:
|
break;
|
||||||
#ifdef FIX_BUGS
|
|
||||||
// BUG FIX: Pixel relied on key codes for input, but these differ based on keyboard layout.
|
|
||||||
// This would break the alternate movement keys on typical English keyboards, since the '=' key is in a completely different place to where it is on a Japanese keyboard.
|
|
||||||
// To solve this, we use scancodes instead, which are based on the physical location of keys, rather than their meaning.
|
|
||||||
switch (event.key.keysym.scancode)
|
|
||||||
{
|
|
||||||
case SDL_SCANCODE_ESCAPE:
|
|
||||||
DO_KEY_PRESS(KEY_ESCAPE)
|
|
||||||
|
|
||||||
case SDL_SCANCODE_W:
|
case SC_SCREENSAVE:
|
||||||
DO_KEY_PRESS(KEY_MAP)
|
break;
|
||||||
|
|
||||||
case SDL_SCANCODE_LEFT:
|
default:
|
||||||
DO_KEY_PRESS(KEY_LEFT)
|
DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case SDL_SCANCODE_RIGHT:
|
break;
|
||||||
DO_KEY_PRESS(KEY_RIGHT)
|
|
||||||
|
|
||||||
case SDL_SCANCODE_UP:
|
case WM_IME_NOTIFY:
|
||||||
DO_KEY_PRESS(KEY_UP)
|
if (wParam == IMN_SETOPENSTATUS)
|
||||||
|
{
|
||||||
|
HIMC hImc = ImmGetContext(hWnd);
|
||||||
|
ImmSetOpenStatus(hImc, 0);
|
||||||
|
ImmReleaseContext(hWnd, hImc);
|
||||||
|
}
|
||||||
|
|
||||||
case SDL_SCANCODE_DOWN:
|
break;
|
||||||
DO_KEY_PRESS(KEY_DOWN)
|
|
||||||
|
|
||||||
case SDL_SCANCODE_X:
|
case WM_KEYDOWN:
|
||||||
DO_KEY_PRESS(KEY_X)
|
switch (wParam)
|
||||||
|
{
|
||||||
|
case VK_ESCAPE:
|
||||||
|
gKey |= KEY_ESCAPE;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDL_SCANCODE_Z:
|
case 'W':
|
||||||
DO_KEY_PRESS(KEY_Z)
|
gKey |= KEY_MAP;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDL_SCANCODE_S:
|
case VK_LEFT:
|
||||||
DO_KEY_PRESS(KEY_ARMS)
|
gKey |= KEY_LEFT;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDL_SCANCODE_A:
|
case VK_RIGHT:
|
||||||
DO_KEY_PRESS(KEY_ARMSREV)
|
gKey |= KEY_RIGHT;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDL_SCANCODE_RSHIFT:
|
case VK_UP:
|
||||||
case SDL_SCANCODE_LSHIFT:
|
gKey |= KEY_UP;
|
||||||
DO_KEY_PRESS(KEY_SHIFT)
|
break;
|
||||||
|
|
||||||
case SDL_SCANCODE_F1:
|
case VK_DOWN:
|
||||||
DO_KEY_PRESS(KEY_F1)
|
gKey |= KEY_DOWN;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDL_SCANCODE_F2:
|
case 'X':
|
||||||
DO_KEY_PRESS(KEY_F2)
|
gKey |= KEY_X;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDL_SCANCODE_Q:
|
case 'Z':
|
||||||
DO_KEY_PRESS(KEY_ITEM)
|
gKey |= KEY_Z;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDL_SCANCODE_COMMA:
|
case 'S':
|
||||||
DO_KEY_PRESS(KEY_ALT_LEFT)
|
gKey |= KEY_ARMS;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDL_SCANCODE_PERIOD:
|
case 'A':
|
||||||
DO_KEY_PRESS(KEY_ALT_DOWN)
|
gKey |= KEY_ARMSREV;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDL_SCANCODE_SLASH:
|
case VK_SHIFT:
|
||||||
DO_KEY_PRESS(KEY_ALT_RIGHT)
|
gKey |= KEY_SHIFT;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDL_SCANCODE_L:
|
case VK_F1:
|
||||||
DO_KEY_PRESS(KEY_ALT_UP)
|
gKey |= KEY_F1;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDL_SCANCODE_SEMICOLON:
|
case VK_F2:
|
||||||
DO_KEY_PRESS(KEY_PLUS)
|
gKey |= KEY_F2;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDL_SCANCODE_F5:
|
case 'Q':
|
||||||
gbUseJoystick = FALSE;
|
gKey |= KEY_ITEM;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
case VK_OEM_COMMA:
|
||||||
break;
|
gKey |= KEY_ALT_LEFT;
|
||||||
}
|
break;
|
||||||
break;
|
|
||||||
#else
|
|
||||||
switch (event.key.keysym.sym)
|
|
||||||
{
|
|
||||||
case SDLK_ESCAPE:
|
|
||||||
DO_KEY_PRESS(KEY_ESCAPE)
|
|
||||||
|
|
||||||
case SDLK_w:
|
case VK_OEM_PERIOD:
|
||||||
DO_KEY_PRESS(KEY_MAP)
|
gKey |= KEY_ALT_DOWN;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDLK_LEFT:
|
case VK_OEM_2:
|
||||||
DO_KEY_PRESS(KEY_LEFT)
|
gKey |= KEY_ALT_RIGHT;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDLK_RIGHT:
|
case 'L':
|
||||||
DO_KEY_PRESS(KEY_RIGHT)
|
gKey |= KEY_L;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDLK_UP:
|
case VK_OEM_PLUS:
|
||||||
DO_KEY_PRESS(KEY_UP)
|
gKey |= KEY_PLUS;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDLK_DOWN:
|
case VK_F5:
|
||||||
DO_KEY_PRESS(KEY_DOWN)
|
gbUseJoystick = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case SDLK_x:
|
break;
|
||||||
DO_KEY_PRESS(KEY_X)
|
|
||||||
|
|
||||||
case SDLK_z:
|
case WM_KEYUP:
|
||||||
DO_KEY_PRESS(KEY_Z)
|
switch (wParam)
|
||||||
|
{
|
||||||
|
case VK_ESCAPE:
|
||||||
|
gKey &= ~KEY_ESCAPE;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDLK_s:
|
case 'W':
|
||||||
DO_KEY_PRESS(KEY_ARMS)
|
gKey &= ~KEY_MAP;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDLK_a:
|
case VK_LEFT:
|
||||||
DO_KEY_PRESS(KEY_ARMSREV)
|
gKey &= ~KEY_LEFT;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDLK_RSHIFT:
|
case VK_RIGHT:
|
||||||
case SDLK_LSHIFT:
|
gKey &= ~KEY_RIGHT;
|
||||||
DO_KEY_PRESS(KEY_SHIFT)
|
break;
|
||||||
|
|
||||||
case SDLK_F1:
|
case VK_UP:
|
||||||
DO_KEY_PRESS(KEY_F1)
|
gKey &= ~KEY_UP;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDLK_F2:
|
case VK_DOWN:
|
||||||
DO_KEY_PRESS(KEY_F2)
|
gKey &= ~KEY_DOWN;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDLK_q:
|
case 'X':
|
||||||
DO_KEY_PRESS(KEY_ITEM)
|
gKey &= ~KEY_X;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDLK_COMMA:
|
case 'Z':
|
||||||
DO_KEY_PRESS(KEY_ALT_LEFT)
|
gKey &= ~KEY_Z;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDLK_PERIOD:
|
case 'S':
|
||||||
DO_KEY_PRESS(KEY_ALT_DOWN)
|
gKey &= ~KEY_ARMS;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDLK_SLASH:
|
case 'A':
|
||||||
DO_KEY_PRESS(KEY_ALT_RIGHT)
|
gKey &= ~KEY_ARMSREV;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDLK_l:
|
case VK_SHIFT:
|
||||||
DO_KEY_PRESS(KEY_ALT_UP)
|
gKey &= ~KEY_SHIFT;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDLK_SEMICOLON:
|
case VK_F1:
|
||||||
DO_KEY_PRESS(KEY_PLUS)
|
gKey &= ~KEY_F1;
|
||||||
|
break;
|
||||||
|
|
||||||
case SDLK_F5:
|
case VK_F2:
|
||||||
gbUseJoystick = FALSE;
|
gKey &= ~KEY_F2;
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
break;
|
case 'Q':
|
||||||
#endif
|
gKey &= ~KEY_ITEM;
|
||||||
}
|
break;
|
||||||
|
|
||||||
|
case VK_OEM_COMMA:
|
||||||
|
gKey &= ~KEY_ALT_LEFT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VK_OEM_PERIOD:
|
||||||
|
gKey &= ~KEY_ALT_DOWN;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VK_OEM_2:
|
||||||
|
gKey &= ~KEY_ALT_RIGHT;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'L':
|
||||||
|
gKey &= ~KEY_L;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VK_OEM_PLUS:
|
||||||
|
gKey &= ~KEY_PLUS;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_COMMAND:
|
||||||
|
switch (LOWORD(wParam))
|
||||||
|
{
|
||||||
|
case 40001:
|
||||||
|
if (DialogBoxParamA(ghInstance, "DLG_YESNO", hWnd, QuitDialog, (LPARAM)"Quit?") == 1)
|
||||||
|
PostMessageA(hWnd, WM_CLOSE, 0, 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 40002:
|
||||||
|
DialogBoxParamA(ghInstance, "DLG_ABOUT", hWnd, VersionDialog, NULL);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 40004:
|
||||||
|
if (!OpenVolumeConfiguration(hWnd))
|
||||||
|
#ifdef JAPANESE
|
||||||
|
MessageBoxA(hWnd, "â{âèâàü[âÇɦÆÞéïNô«é+é½é_é¦é±é+éÁé¢", lpWindowName, NULL);
|
||||||
|
#else
|
||||||
|
MessageBoxA(hWnd, "Could not launch volume configuration", lpWindowName, NULL);
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 40005:
|
||||||
|
DialogBoxParamA(ghInstance, "DLG_SAVE", hWnd, DebugSaveDialog, NULL);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 40007:
|
||||||
|
DialogBoxParamA(ghInstance, "DLG_MUTE", hWnd, DebugMuteDialog, NULL);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_DROPFILES:
|
||||||
|
DragAndDropHandler(hWnd, wParam);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_ACTIVATE:
|
||||||
|
switch (LOWORD(wParam))
|
||||||
|
{
|
||||||
|
case WA_INACTIVE:
|
||||||
|
window_focus = FALSE;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WA_ACTIVE:
|
||||||
|
case WA_CLICKACTIVE:
|
||||||
|
if (HIWORD(wParam) != 0)
|
||||||
|
window_focus = FALSE;
|
||||||
|
else
|
||||||
|
window_focus = TRUE;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (window_focus)
|
||||||
|
ActiveWindow();
|
||||||
|
else
|
||||||
|
InactiveWindow();
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_CLOSE:
|
||||||
|
StopOrganyaMusic();
|
||||||
|
PostQuitMessage(0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return DefWindowProcA(hWnd, Msg, wParam, lParam);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void JoystickProc(void);
|
||||||
|
|
||||||
|
BOOL SystemTask(void)
|
||||||
|
{
|
||||||
|
MSG Msg;
|
||||||
|
|
||||||
|
while (PeekMessageA(&Msg, NULL, 0, 0, PM_NOREMOVE) || !bActive)
|
||||||
|
{
|
||||||
|
if (!GetMessageA(&Msg, NULL, 0, 0))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
TranslateMessage(&Msg);
|
||||||
|
DispatchMessageA(&Msg);
|
||||||
|
}
|
||||||
|
|
||||||
// Run joystick code
|
// Run joystick code
|
||||||
if (gbUseJoystick)
|
if (gbUseJoystick)
|
||||||
JoystickProc();
|
JoystickProc();
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void JoystickProc(void)
|
||||||
|
{
|
||||||
|
JOYSTICK_STATUS status;
|
||||||
|
|
||||||
|
if (!GetJoystickStatus(&status))
|
||||||
|
return;
|
||||||
|
|
||||||
|
gKey &= (KEY_ESCAPE | KEY_F2 | KEY_F1);
|
||||||
|
|
||||||
|
// Set movement buttons
|
||||||
|
if (status.bLeft)
|
||||||
|
gKey |= gKeyLeft;
|
||||||
|
else
|
||||||
|
gKey &= ~gKeyLeft;
|
||||||
|
|
||||||
|
if (status.bRight)
|
||||||
|
gKey |= gKeyRight;
|
||||||
|
else
|
||||||
|
gKey &= ~gKeyRight;
|
||||||
|
|
||||||
|
if (status.bUp)
|
||||||
|
gKey |= gKeyUp;
|
||||||
|
else
|
||||||
|
gKey &= ~gKeyUp;
|
||||||
|
|
||||||
|
if (status.bDown)
|
||||||
|
gKey |= gKeyDown;
|
||||||
|
else
|
||||||
|
gKey &= ~gKeyDown;
|
||||||
|
|
||||||
|
// Clear held buttons
|
||||||
|
for (int i = 0; i < 8; i++)
|
||||||
|
gKey &= ~gJoystickButtonTable[i];
|
||||||
|
|
||||||
|
// Set held buttons
|
||||||
|
for (int i = 0; i < 8; i++)
|
||||||
|
{
|
||||||
|
if (status.bButton[i])
|
||||||
|
gKey |= gJoystickButtonTable[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -5,5 +5,5 @@
|
||||||
extern HWND ghWnd;
|
extern HWND ghWnd;
|
||||||
extern BOOL bFullscreen;
|
extern BOOL bFullscreen;
|
||||||
|
|
||||||
void PutFramePerSecound();
|
void PutFramePerSecound(void);
|
||||||
int GetFramePerSecound();
|
int GetFramePerSecound(void);
|
||||||
|
|
Loading…
Add table
Reference in a new issue