mirror of
https://github.com/dborth/snes9xgx.git
synced 2024-11-27 13:04:21 +01:00
- Superscope support for wiimote and GC controller
- Fixed Multitap
This commit is contained in:
parent
66b4f278f6
commit
1478cee2a3
@ -336,7 +336,8 @@ static char emulatorOptions[][20] = { "Reverse Stereo OFF",
|
||||
"Interp. Sound ON", "Transparency ON", "FPS Display OFF",
|
||||
"MultiTap 5 OFF", "C-Stick Zoom OFF",
|
||||
"Auto Load OFF", "Auto Save OFF", "Verify MC Saves OFF",
|
||||
"Video Filtering OFF", "Save Prefs Now", "Return to previous"
|
||||
"Video Filtering OFF", "Superscope OFF",
|
||||
"Save Prefs Now", "Return to previous"
|
||||
};
|
||||
|
||||
void
|
||||
@ -381,8 +382,11 @@ EmulatorOptions ()
|
||||
|
||||
sprintf (emulatorOptions[9], "Video Filtering %s",
|
||||
GCSettings.render == true ? " ON" : "OFF");
|
||||
|
||||
if (GCSettings.Superscope > 0) sprintf (emulatorOptions[10], "Superscope: Pad %d", GCSettings.Superscope);
|
||||
else sprintf (emulatorOptions[10], "Superscope OFF");
|
||||
|
||||
ret = RunMenu (emulatorOptions, emuCount, (char*)"Emulator Options");
|
||||
ret = RunMenu (emulatorOptions, emuCount, (char*)"Emulator Options", 18);
|
||||
|
||||
switch (ret)
|
||||
{
|
||||
@ -440,11 +444,17 @@ EmulatorOptions ()
|
||||
break;
|
||||
|
||||
case 10:
|
||||
GCSettings.Superscope ++;
|
||||
if (GCSettings.Superscope > 4)
|
||||
GCSettings.Superscope = 0;
|
||||
break;
|
||||
|
||||
case 11:
|
||||
quickSavePrefs(NOTSILENT);
|
||||
break;
|
||||
|
||||
case -1: /*** Button B ***/
|
||||
case 11:
|
||||
case 12:
|
||||
quit = 1;
|
||||
break;
|
||||
|
||||
@ -875,4 +885,7 @@ mainmenu ()
|
||||
#endif
|
||||
|
||||
ReInitGCVideo(); // update video after reading settings
|
||||
Settings.SuperScopeMaster = (GCSettings.Superscope > 0 ? true : false); // update superscope settings
|
||||
// update mouse/justifier info?
|
||||
SetControllers();
|
||||
}
|
||||
|
@ -31,7 +31,7 @@ extern unsigned int wmpadmap[];
|
||||
extern unsigned int ccpadmap[];
|
||||
extern unsigned int ncpadmap[];
|
||||
|
||||
#define PREFSVERSTRING "Snes9x GX 004 Prefs"
|
||||
#define PREFSVERSTRING "Snes9x GX 004a Prefs"
|
||||
|
||||
char prefscomment[2][32] = { {PREFSVERSTRING}, {"Preferences"} };
|
||||
|
||||
|
@ -166,8 +166,8 @@ DefaultSettings ()
|
||||
memset (&Settings, 0, sizeof (Settings));
|
||||
|
||||
/*** General ***/
|
||||
Settings.MouseMaster = true;
|
||||
Settings.SuperScopeMaster = true;
|
||||
Settings.MouseMaster = false;
|
||||
Settings.SuperScopeMaster = false;
|
||||
Settings.MultiPlayer5Master = false;
|
||||
Settings.JustifierMaster = true;
|
||||
Settings.ShutdownMaster = false;
|
||||
@ -219,6 +219,8 @@ DefaultSettings ()
|
||||
GCSettings.NGCZoom = 0;
|
||||
GCSettings.VerifySaves = 0;
|
||||
GCSettings.render = 0;
|
||||
GCSettings.Superscope = 0;
|
||||
GCSettings.Mouse = 0;
|
||||
|
||||
Settings.ForceNTSC = 0;
|
||||
Settings.ForcePAL = 0;
|
||||
|
@ -252,28 +252,50 @@ unsigned int gcscopemap[] = { PAD_TRIGGER_Z, PAD_BUTTON_B,
|
||||
PAD_BUTTON_A, PAD_BUTTON_Y,
|
||||
PAD_BUTTON_START
|
||||
};
|
||||
/*** Superscope : wiimote button mapping ***/
|
||||
unsigned int wmscopemap[] = { WPAD_BUTTON_MINUS, WPAD_BUTTON_B,
|
||||
WPAD_BUTTON_A, WPAD_BUTTON_DOWN,
|
||||
WPAD_BUTTON_PLUS
|
||||
};
|
||||
|
||||
void UpdateCursorPosition (int input_x, int input_y, int &pos_x, int &pos_y)
|
||||
void UpdateCursorPosition (int pad, int &pos_x, int &pos_y)
|
||||
{
|
||||
// gc left joystick
|
||||
signed char pad_x = PAD_StickX (pad);
|
||||
signed char pad_y = PAD_StickY (pad);
|
||||
int SCOPEPADCAL = 30;
|
||||
#ifdef HW_RVL
|
||||
// wiimote ir
|
||||
struct ir_t ir;
|
||||
#endif
|
||||
|
||||
if (input_x > SCOPEPADCAL){
|
||||
if (pad_x > SCOPEPADCAL){
|
||||
pos_x +=4;
|
||||
if (pos_x > 256) pos_x = 256;
|
||||
}
|
||||
if (input_x < -SCOPEPADCAL){
|
||||
if (pad_x < -SCOPEPADCAL){
|
||||
pos_x -=4;
|
||||
if (pos_x < 0) pos_x = 0;
|
||||
}
|
||||
|
||||
if (input_y < -SCOPEPADCAL){
|
||||
if (pad_y < -SCOPEPADCAL){
|
||||
pos_y +=4;
|
||||
if (pos_y > 224) pos_y = 224;
|
||||
}
|
||||
if (input_y > SCOPEPADCAL){
|
||||
if (pad_y > SCOPEPADCAL){
|
||||
pos_y -=4;
|
||||
if (pos_y < 0) pos_y = 0;
|
||||
}
|
||||
|
||||
#ifdef HW_RVL
|
||||
// read wiimote IR
|
||||
WPAD_IR(pad, &ir);
|
||||
if (ir.valid)
|
||||
{
|
||||
scope_x = (ir.x * 256) / 640;
|
||||
scope_y = (ir.y * 224) / 480;
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
@ -392,20 +414,24 @@ decodepad (int pad)
|
||||
}
|
||||
|
||||
/*** Superscope ***/
|
||||
if (pad == 0 && Settings.SuperScopeMaster) // report only once
|
||||
if (pad == GCSettings.Superscope-1) // report only once
|
||||
{
|
||||
// buttons
|
||||
offset = 0x50;
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
if ( jp & gcscopemap[i] )
|
||||
{
|
||||
if ( jp & gcscopemap[i]
|
||||
#ifdef HW_RVL
|
||||
|| wp & wmscopemap[i]
|
||||
#endif
|
||||
)
|
||||
S9xReportButton (offset + i, true);
|
||||
else
|
||||
S9xReportButton (offset + i, false);
|
||||
}
|
||||
// pointer
|
||||
offset = 0x60;
|
||||
UpdateCursorPosition (pad_x, pad_y, scope_x, scope_y);
|
||||
UpdateCursorPosition (pad, scope_x, scope_y);
|
||||
S9xReportPointer(offset, (u16)scope_x, (u16)scope_y);
|
||||
}
|
||||
}
|
||||
@ -566,6 +592,26 @@ u32 wpad_get_analogues(int pad, float* mag1, u16* ang1, float* mag2, u16* ang2)
|
||||
return exp_type; // return expansion type
|
||||
}
|
||||
|
||||
void SetControllers ()
|
||||
{
|
||||
if (Settings.MultiPlayer5Master == true)
|
||||
{
|
||||
|
||||
S9xSetController (0, CTL_JOYPAD, 0, 0, 0, 0);
|
||||
S9xSetController (1, CTL_MP5, 1, 2, 3, -1);
|
||||
}
|
||||
else if (Settings.SuperScopeMaster == true)
|
||||
{
|
||||
S9xSetController (0, CTL_JOYPAD, 0, 0, 0, 0);
|
||||
S9xSetController (1, CTL_SUPERSCOPE, 1, 0, 0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*** Plugin 2 Joypads by default ***/
|
||||
S9xSetController (0, CTL_JOYPAD, 0, 0, 0, 0);
|
||||
S9xSetController (1, CTL_JOYPAD, 1, 0, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/****************************************************************************
|
||||
* Set the default mapping for NGC
|
||||
@ -647,23 +693,7 @@ SetDefaultButtonMap ()
|
||||
S9xMapPointer( maxcode++, S9xGetCommandT("Pointer Superscope"), false);
|
||||
// add mouses here
|
||||
|
||||
if (Settings.MultiPlayer5Master == true)
|
||||
{
|
||||
|
||||
S9xSetController (0, CTL_JOYPAD, 0, 0, 0, 0);
|
||||
S9xSetController (1, CTL_MP5, 1, 2, 3, -1);
|
||||
}
|
||||
else if (Settings.SuperScopeMaster == true)
|
||||
{
|
||||
S9xSetController (0, CTL_JOYPAD, 0, 0, 0, 0);
|
||||
S9xSetController (1, CTL_SUPERSCOPE, 1, 0, 0, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
/*** Plugin 2 Joypads by default ***/
|
||||
S9xSetController (0, CTL_JOYPAD, 0, 0, 0, 0);
|
||||
S9xSetController (1, CTL_JOYPAD, 1, 0, 0, 0);
|
||||
}
|
||||
SetControllers ();
|
||||
|
||||
}
|
||||
|
||||
@ -742,6 +772,9 @@ main ()
|
||||
|
||||
#ifdef HW_RVL
|
||||
WPAD_Init();
|
||||
// read wiimote accelerometer and IR data
|
||||
WPAD_SetDataFormat(WPAD_CHAN_ALL,WPAD_FMT_BTNS_ACC_IR);
|
||||
WPAD_SetVRes(WPAD_CHAN_ALL,640,480);
|
||||
#endif
|
||||
|
||||
|
||||
|
@ -182,6 +182,8 @@ struct SGCSettings{
|
||||
uint8 VerifySaves;
|
||||
u16 render; // 0 - original, 1 - no AA
|
||||
u32 QuickSaveSlot; // -1 Disabled - no prefs are loaded, 0 Memory card in slot A, 1 Memory card in slot B, 2 SD card in slot A, 3 SD card in slot B, 4 SMB share, 5 USB
|
||||
u16 Superscope;
|
||||
u16 Mouse;
|
||||
};
|
||||
|
||||
START_EXTERN_C
|
||||
@ -190,6 +192,7 @@ extern unsigned short saveicon[1024];
|
||||
extern bool8 isWii;
|
||||
|
||||
extern u32 wpad_get_analogues(int pad, float* mag1, u16* ang1, float* mag2, u16* ang2);
|
||||
extern void SetControllers ();
|
||||
END_EXTERN_C
|
||||
|
||||
#define JOY_THRESHOLD 0.70 // for wii (expansion) analogues
|
||||
|
Loading…
Reference in New Issue
Block a user