parent
c0e17f2a2b
commit
275cf18417
|
@ -57,7 +57,7 @@ static u32 guitarGrip_read32(u32 adr)
|
||||||
//INFO("GuitarGrip: read 32 at 0x%08X\n", adr);
|
//INFO("GuitarGrip: read 32 at 0x%08X\n", adr);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
static void guitarGrip_info(char *info) { strcpy(info, "Guitar Grid for Guitar Hero games"); }
|
static void guitarGrip_info(char *info) { strcpy(info, "Guitar Grip for Guitar Hero games"); }
|
||||||
|
|
||||||
void guitarGrip_setKey(bool green, bool red, bool yellow, bool blue)
|
void guitarGrip_setKey(bool green, bool red, bool yellow, bool blue)
|
||||||
{
|
{
|
||||||
|
@ -65,7 +65,7 @@ void guitarGrip_setKey(bool green, bool red, bool yellow, bool blue)
|
||||||
}
|
}
|
||||||
|
|
||||||
ADDONINTERFACE addonGuitarGrip = {
|
ADDONINTERFACE addonGuitarGrip = {
|
||||||
"Guitar Grid",
|
"Guitar Grip",
|
||||||
guitarGrip_init,
|
guitarGrip_init,
|
||||||
guitarGrip_reset,
|
guitarGrip_reset,
|
||||||
guitarGrip_close,
|
guitarGrip_close,
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "../addons.h"
|
#include "../addons.h"
|
||||||
#include "../NDSSystem.h"
|
#include "../NDSSystem.h"
|
||||||
|
#include "inputdx.h"
|
||||||
#include <shlobj.h>
|
#include <shlobj.h>
|
||||||
|
|
||||||
WNDCLASSEX wc;
|
WNDCLASSEX wc;
|
||||||
|
@ -39,6 +40,8 @@ char tmp_gbagame_filename[MAX_PATH] = { 0 };
|
||||||
ADDON_CFLASH_MODE tmp_CFlashMode = ADDON_CFLASH_MODE_RomPath;
|
ADDON_CFLASH_MODE tmp_CFlashMode = ADDON_CFLASH_MODE_RomPath;
|
||||||
HWND OKbutton = NULL;
|
HWND OKbutton = NULL;
|
||||||
bool _OKbutton = false;
|
bool _OKbutton = false;
|
||||||
|
SGuitar tmp_Guitar;
|
||||||
|
bool needReset = true;
|
||||||
|
|
||||||
std::string CFlashPath, CFlashName;
|
std::string CFlashPath, CFlashName;
|
||||||
|
|
||||||
|
@ -289,13 +292,60 @@ BOOL CALLBACK GbaSlotGBAgame(HWND dialog, UINT msg,WPARAM wparam,LPARAM lparam)
|
||||||
|
|
||||||
BOOL CALLBACK GbaSlotGuitarGrip(HWND dialog, UINT msg,WPARAM wparam,LPARAM lparam)
|
BOOL CALLBACK GbaSlotGuitarGrip(HWND dialog, UINT msg,WPARAM wparam,LPARAM lparam)
|
||||||
{
|
{
|
||||||
|
int which = 0;
|
||||||
|
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
{
|
{
|
||||||
_OKbutton = TRUE;
|
_OKbutton = TRUE;
|
||||||
|
SendDlgItemMessage(dialog,IDC_GGREEN,WM_USER+44,tmp_Guitar.GREEN,0);
|
||||||
|
SendDlgItemMessage(dialog,IDC_GRED,WM_USER+44,tmp_Guitar.RED,0);
|
||||||
|
SendDlgItemMessage(dialog,IDC_GYELLOW,WM_USER+44,tmp_Guitar.YELLOW,0);
|
||||||
|
SendDlgItemMessage(dialog,IDC_GBLUE,WM_USER+44,tmp_Guitar.BLUE,0);
|
||||||
|
if (temp_type != addon_type)
|
||||||
|
needReset = true;
|
||||||
|
else
|
||||||
|
needReset = false;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case WM_USER+46:
|
||||||
|
SendDlgItemMessage(dialog,IDC_GGREEN,WM_USER+44,tmp_Guitar.GREEN,0);
|
||||||
|
SendDlgItemMessage(dialog,IDC_GRED,WM_USER+44,tmp_Guitar.RED,0);
|
||||||
|
SendDlgItemMessage(dialog,IDC_GYELLOW,WM_USER+44,tmp_Guitar.YELLOW,0);
|
||||||
|
SendDlgItemMessage(dialog,IDC_GBLUE,WM_USER+44,tmp_Guitar.BLUE,0);
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
case WM_USER+43:
|
||||||
|
//MessageBox(hDlg,"USER+43 CAUGHT","moo",MB_OK);
|
||||||
|
which = GetDlgCtrlID((HWND)lparam);
|
||||||
|
switch(which)
|
||||||
|
{
|
||||||
|
case IDC_GGREEN:
|
||||||
|
tmp_Guitar.GREEN = wparam;
|
||||||
|
|
||||||
|
break;
|
||||||
|
case IDC_GRED:
|
||||||
|
tmp_Guitar.RED = wparam;
|
||||||
|
|
||||||
|
break;
|
||||||
|
case IDC_GYELLOW:
|
||||||
|
tmp_Guitar.YELLOW = wparam;
|
||||||
|
|
||||||
|
break;
|
||||||
|
case IDC_GBLUE:
|
||||||
|
tmp_Guitar.BLUE = wparam;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
SendDlgItemMessage(dialog,IDC_GGREEN,WM_USER+44,tmp_Guitar.GREEN,0);
|
||||||
|
SendDlgItemMessage(dialog,IDC_GRED,WM_USER+44,tmp_Guitar.RED,0);
|
||||||
|
SendDlgItemMessage(dialog,IDC_GYELLOW,WM_USER+44,tmp_Guitar.YELLOW,0);
|
||||||
|
SendDlgItemMessage(dialog,IDC_GBLUE,WM_USER+44,tmp_Guitar.BLUE,0);
|
||||||
|
PostMessage(dialog,WM_NEXTDLGCTL,0,0);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
@ -349,9 +399,9 @@ BOOL CALLBACK GbaSlotBox_Proc(HWND dialog, UINT msg,WPARAM wparam,LPARAM lparam)
|
||||||
case IDOK:
|
case IDOK:
|
||||||
{
|
{
|
||||||
int Msg = IDYES;
|
int Msg = IDYES;
|
||||||
if (romloaded)
|
if (romloaded && (needReset || (temp_type!=addon_type)) )
|
||||||
{
|
{
|
||||||
int Msg = MessageBox(dialog,
|
Msg = MessageBox(dialog,
|
||||||
"After change GBA slot pak game will reset!\nAre you sure to continue?", "DeSmuME",
|
"After change GBA slot pak game will reset!\nAre you sure to continue?", "DeSmuME",
|
||||||
MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2);
|
MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2);
|
||||||
}
|
}
|
||||||
|
@ -403,8 +453,10 @@ void GBAslotDialog(HWND hwnd)
|
||||||
strcpy(tmp_cflash_filename, CFlashName.c_str());
|
strcpy(tmp_cflash_filename, CFlashName.c_str());
|
||||||
strcpy(tmp_cflash_path, CFlashPath.c_str());
|
strcpy(tmp_cflash_path, CFlashPath.c_str());
|
||||||
strcpy(tmp_gbagame_filename, GBAgameName);
|
strcpy(tmp_gbagame_filename, GBAgameName);
|
||||||
|
memcpy(&tmp_Guitar, &Guitar, sizeof(Guitar));
|
||||||
tmp_CFlashMode = CFlash_Mode;
|
tmp_CFlashMode = CFlash_Mode;
|
||||||
_OKbutton = false;
|
_OKbutton = false;
|
||||||
|
needReset == true;
|
||||||
u32 res=DialogBox(hAppInst, MAKEINTRESOURCE(IDD_GBASLOT), hwnd, (DLGPROC) GbaSlotBox_Proc);
|
u32 res=DialogBox(hAppInst, MAKEINTRESOURCE(IDD_GBASLOT), hwnd, (DLGPROC) GbaSlotBox_Proc);
|
||||||
if (res)
|
if (res)
|
||||||
{
|
{
|
||||||
|
@ -432,6 +484,11 @@ void GBAslotDialog(HWND hwnd)
|
||||||
WritePrivateProfileString("GBAslot.GBAgame","filename",GBAgameName,IniName);
|
WritePrivateProfileString("GBAslot.GBAgame","filename",GBAgameName,IniName);
|
||||||
break;
|
break;
|
||||||
case NDS_ADDON_GUITARGRIP:
|
case NDS_ADDON_GUITARGRIP:
|
||||||
|
memcpy(&Guitar, &tmp_Guitar, sizeof(tmp_Guitar));
|
||||||
|
WritePrivateProfileInt("GBAslot.GuitarGrip","green",Guitar.GREEN,IniName);
|
||||||
|
WritePrivateProfileInt("GBAslot.GuitarGrip","red",Guitar.RED,IniName);
|
||||||
|
WritePrivateProfileInt("GBAslot.GuitarGrip","yellow",Guitar.YELLOW,IniName);
|
||||||
|
WritePrivateProfileInt("GBAslot.GuitarGrip","blue",Guitar.BLUE,IniName);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return;
|
return;
|
||||||
|
@ -440,7 +497,8 @@ void GBAslotDialog(HWND hwnd)
|
||||||
|
|
||||||
addon_type = temp_type;
|
addon_type = temp_type;
|
||||||
addonsChangePak(addon_type);
|
addonsChangePak(addon_type);
|
||||||
if (romloaded)
|
if (romloaded && needReset)
|
||||||
NDS_Reset();
|
NDS_Reset();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -198,9 +198,11 @@
|
||||||
|
|
||||||
static TCHAR szClassName[] = _T("InputCustom");
|
static TCHAR szClassName[] = _T("InputCustom");
|
||||||
static TCHAR szHotkeysClassName[] = _T("InputCustomHot");
|
static TCHAR szHotkeysClassName[] = _T("InputCustomHot");
|
||||||
|
static TCHAR szGuitarClassName[] = _T("InputCustomGuitar");
|
||||||
|
|
||||||
static LRESULT CALLBACK InputCustomWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
static LRESULT CALLBACK InputCustomWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
static LRESULT CALLBACK HotInputCustomWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
static LRESULT CALLBACK HotInputCustomWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
static LRESULT CALLBACK GuitarInputCustomWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
|
||||||
|
|
||||||
SJoyState Joystick [16];
|
SJoyState Joystick [16];
|
||||||
SJoyState JoystickF [16];
|
SJoyState JoystickF [16];
|
||||||
|
@ -239,6 +241,11 @@ SJoypad DefaultJoypad[16] = {
|
||||||
|
|
||||||
SJoypad Joypad[16];
|
SJoypad Joypad[16];
|
||||||
|
|
||||||
|
SGuitar DefaultGuitar = { true, 'E', 'R', 'T', 'Y' };
|
||||||
|
|
||||||
|
SGuitar Guitar;
|
||||||
|
u8 guitarState = 0;
|
||||||
|
|
||||||
extern volatile BOOL paused;
|
extern volatile BOOL paused;
|
||||||
|
|
||||||
#define MAXKEYPAD 15
|
#define MAXKEYPAD 15
|
||||||
|
@ -345,6 +352,15 @@ static void ReadHotkey(const char* name, WORD& output)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ReadGuitarControl(const char* name, WORD& output)
|
||||||
|
{
|
||||||
|
UINT temp;
|
||||||
|
temp = GetPrivateProfileInt("GBAslot.GuitarGrip",name,-1,IniName);
|
||||||
|
if(temp != -1) {
|
||||||
|
output = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void LoadHotkeyConfig()
|
static void LoadHotkeyConfig()
|
||||||
{
|
{
|
||||||
SCustomKey *key = &CustomKeys.key(0);
|
SCustomKey *key = &CustomKeys.key(0);
|
||||||
|
@ -369,6 +385,19 @@ static void SaveHotkeyConfig()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void LoadGuitarConfig()
|
||||||
|
{
|
||||||
|
memcpy(&Guitar,&DefaultGuitar,sizeof(Guitar));
|
||||||
|
|
||||||
|
Guitar.Enabled = true;
|
||||||
|
#define DO(X) ReadControl(#X,Guitar.X);
|
||||||
|
DO(GREEN);
|
||||||
|
DO(RED);
|
||||||
|
DO(YELLOW);
|
||||||
|
DO(BLUE);
|
||||||
|
#undef DO
|
||||||
|
}
|
||||||
|
|
||||||
static void LoadInputConfig()
|
static void LoadInputConfig()
|
||||||
{
|
{
|
||||||
memcpy(&Joypad,&DefaultJoypad,sizeof(Joypad));
|
memcpy(&Joypad,&DefaultJoypad,sizeof(Joypad));
|
||||||
|
@ -1140,6 +1169,21 @@ static void InitCustomControls()
|
||||||
|
|
||||||
RegisterClassEx(&wc);
|
RegisterClassEx(&wc);
|
||||||
|
|
||||||
|
wc.cbSize = sizeof(wc);
|
||||||
|
wc.lpszClassName = szGuitarClassName;
|
||||||
|
wc.hInstance = GetModuleHandle(0);
|
||||||
|
wc.lpfnWndProc = GuitarInputCustomWndProc;
|
||||||
|
wc.hCursor = LoadCursor (NULL, IDC_ARROW);
|
||||||
|
wc.hIcon = 0;
|
||||||
|
wc.lpszMenuName = 0;
|
||||||
|
wc.hbrBackground = (HBRUSH)GetSysColorBrush(COLOR_BTNFACE);
|
||||||
|
wc.style = 0;
|
||||||
|
wc.cbClsExtra = 0;
|
||||||
|
wc.cbWndExtra = sizeof(InputCust *);
|
||||||
|
wc.hIconSm = 0;
|
||||||
|
|
||||||
|
|
||||||
|
RegisterClassEx(&wc);
|
||||||
}
|
}
|
||||||
|
|
||||||
InputCust * GetInputCustom(HWND hwnd)
|
InputCust * GetInputCustom(HWND hwnd)
|
||||||
|
@ -1341,6 +1385,148 @@ static LRESULT CALLBACK InputCustomWndProc(HWND hwnd, UINT msg, WPARAM wParam, L
|
||||||
return DefWindowProc(hwnd, msg, wParam, lParam);
|
return DefWindowProc(hwnd, msg, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static LRESULT CALLBACK GuitarInputCustomWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
// retrieve the custom structure POINTER for THIS window
|
||||||
|
InputCust *icp = GetInputCustom(hwnd);
|
||||||
|
HWND pappy = (HWND__ *)GetWindowLongPtr(hwnd,GWL_HWNDPARENT);
|
||||||
|
funky= hwnd;
|
||||||
|
|
||||||
|
static HWND selectedItem = NULL;
|
||||||
|
|
||||||
|
char temp[100];
|
||||||
|
COLORREF col;
|
||||||
|
switch(msg)
|
||||||
|
{
|
||||||
|
|
||||||
|
case WM_GETDLGCODE:
|
||||||
|
return DLGC_WANTARROWS|DLGC_WANTALLKEYS|DLGC_WANTCHARS;
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
case WM_NCCREATE:
|
||||||
|
|
||||||
|
// Allocate a new CustCtrl structure for this window.
|
||||||
|
icp = (InputCust *) malloc( sizeof(InputCust) );
|
||||||
|
|
||||||
|
// Failed to allocate, stop window creation.
|
||||||
|
if(icp == NULL) return FALSE;
|
||||||
|
|
||||||
|
// Initialize the CustCtrl structure.
|
||||||
|
icp->hwnd = hwnd;
|
||||||
|
icp->crForeGnd = GetSysColor(COLOR_WINDOWTEXT);
|
||||||
|
icp->crBackGnd = GetSysColor(COLOR_WINDOW);
|
||||||
|
icp->hFont = (HFONT__ *) GetStockObject(DEFAULT_GUI_FONT);
|
||||||
|
|
||||||
|
// Assign the window text specified in the call to CreateWindow.
|
||||||
|
SetWindowText(hwnd, ((CREATESTRUCT *)lParam)->lpszName);
|
||||||
|
|
||||||
|
// Attach custom structure to this window.
|
||||||
|
SetInputCustom(hwnd, icp);
|
||||||
|
|
||||||
|
InvalidateRect(icp->hwnd, NULL, FALSE);
|
||||||
|
UpdateWindow(icp->hwnd);
|
||||||
|
|
||||||
|
selectedItem = NULL;
|
||||||
|
|
||||||
|
SetTimer(hwnd,777,125,NULL);
|
||||||
|
|
||||||
|
// Continue with window creation.
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
// Clean up when the window is destroyed.
|
||||||
|
case WM_NCDESTROY:
|
||||||
|
free(icp);
|
||||||
|
break;
|
||||||
|
case WM_PAINT:
|
||||||
|
return InputCustom_OnPaint(icp,wParam,lParam);
|
||||||
|
break;
|
||||||
|
case WM_ERASEBKGND:
|
||||||
|
return 1;
|
||||||
|
case WM_USER+45:
|
||||||
|
case WM_KEYDOWN:
|
||||||
|
TranslateKey(wParam,temp);
|
||||||
|
col = CheckButtonKey(wParam);
|
||||||
|
|
||||||
|
icp->crForeGnd = ((~col) & 0x00ffffff);
|
||||||
|
icp->crBackGnd = col;
|
||||||
|
SetWindowText(hwnd,temp);
|
||||||
|
InvalidateRect(icp->hwnd, NULL, FALSE);
|
||||||
|
UpdateWindow(icp->hwnd);
|
||||||
|
SendMessage(pappy,WM_USER+43,wParam,(LPARAM)hwnd);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case WM_USER+44:
|
||||||
|
|
||||||
|
TranslateKey(wParam,temp);
|
||||||
|
if(IsWindowEnabled(hwnd))
|
||||||
|
{
|
||||||
|
col = CheckButtonKey(wParam);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
col = RGB( 192,192,192);
|
||||||
|
}
|
||||||
|
icp->crForeGnd = ((~col) & 0x00ffffff);
|
||||||
|
icp->crBackGnd = col;
|
||||||
|
SetWindowText(hwnd,temp);
|
||||||
|
InvalidateRect(icp->hwnd, NULL, FALSE);
|
||||||
|
UpdateWindow(icp->hwnd);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case WM_SETFOCUS:
|
||||||
|
{
|
||||||
|
selectedItem = hwnd;
|
||||||
|
col = RGB( 0,255,0);
|
||||||
|
icp->crForeGnd = ((~col) & 0x00ffffff);
|
||||||
|
icp->crBackGnd = col;
|
||||||
|
InvalidateRect(icp->hwnd, NULL, FALSE);
|
||||||
|
UpdateWindow(icp->hwnd);
|
||||||
|
// tid = wParam;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case WM_KILLFOCUS:
|
||||||
|
{
|
||||||
|
selectedItem = NULL;
|
||||||
|
SendMessage(pappy,WM_USER+46,wParam,(LPARAM)hwnd); // refresh fields on deselect
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case WM_TIMER:
|
||||||
|
if(hwnd == selectedItem)
|
||||||
|
{
|
||||||
|
FunkyJoyStickTimer();
|
||||||
|
}
|
||||||
|
SetTimer(hwnd,777,125,NULL);
|
||||||
|
break;
|
||||||
|
case WM_LBUTTONDOWN:
|
||||||
|
SetFocus(hwnd);
|
||||||
|
break;
|
||||||
|
case WM_ENABLE:
|
||||||
|
COLORREF col;
|
||||||
|
if(wParam)
|
||||||
|
{
|
||||||
|
col = RGB( 255,255,255);
|
||||||
|
icp->crForeGnd = ((~col) & 0x00ffffff);
|
||||||
|
icp->crBackGnd = col;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
col = RGB( 192,192,192);
|
||||||
|
icp->crForeGnd = ((~col) & 0x00ffffff);
|
||||||
|
icp->crBackGnd = col;
|
||||||
|
}
|
||||||
|
InvalidateRect(icp->hwnd, NULL, FALSE);
|
||||||
|
UpdateWindow(icp->hwnd);
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return DefWindowProc(hwnd, msg, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
static void TranslateKeyWithModifiers(int wParam, int modifiers, char * outStr)
|
static void TranslateKeyWithModifiers(int wParam, int modifiers, char * outStr)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -2171,6 +2357,7 @@ void input_init()
|
||||||
|
|
||||||
LoadInputConfig();
|
LoadInputConfig();
|
||||||
LoadHotkeyConfig();
|
LoadHotkeyConfig();
|
||||||
|
LoadGuitarConfig();
|
||||||
|
|
||||||
di_init();
|
di_init();
|
||||||
FeedbackON = input_feedback;
|
FeedbackON = input_feedback;
|
||||||
|
@ -2213,6 +2400,14 @@ void input_process()
|
||||||
|
|
||||||
NDS_setPad( R, L, D, U, T, S, B, A, Y, X, W, E, G, F);
|
NDS_setPad( R, L, D, U, T, S, B, A, Y, X, W, E, G, F);
|
||||||
|
|
||||||
|
if (Guitar.Enabled)
|
||||||
|
{
|
||||||
|
bool gG=!S9xGetState(Guitar.GREEN);
|
||||||
|
bool gR=!S9xGetState(Guitar.RED);
|
||||||
|
bool gY=!S9xGetState(Guitar.YELLOW);
|
||||||
|
bool gB=!S9xGetState(Guitar.BLUE);
|
||||||
|
guitarGrip_setKey(gG, gR, gY, gB);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_hotkeyinfo(HWND hDlg)
|
static void set_hotkeyinfo(HWND hDlg)
|
||||||
|
|
|
@ -112,6 +112,16 @@ void RunInputConfig();
|
||||||
void RunHotkeyConfig();
|
void RunHotkeyConfig();
|
||||||
void input_process();
|
void input_process();
|
||||||
|
|
||||||
|
struct SGuitar {
|
||||||
|
BOOL Enabled;
|
||||||
|
WORD GREEN;
|
||||||
|
WORD RED;
|
||||||
|
WORD YELLOW;
|
||||||
|
WORD BLUE;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern SGuitar Guitar;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
Binary file not shown.
Loading…
Reference in New Issue