ASM-accurate Main.cpp and added the various Windows menus

This commit is contained in:
Clownacy 2019-09-01 18:15:12 +01:00
parent 451945e80c
commit 8892dc24b5
8 changed files with 475 additions and 194 deletions

View file

@ -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
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////

View file

@ -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>

View file

@ -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

View file

@ -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

View file

@ -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;
} }

View file

@ -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);

View file

@ -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];
}
}

View file

@ -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);