- Superscope support for wiimote and GC controller

- Fixed Multitap
This commit is contained in:
michniewski 2008-08-06 14:40:28 +00:00
parent 66b4f278f6
commit 1478cee2a3
5 changed files with 83 additions and 32 deletions

View File

@ -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
@ -382,7 +383,10 @@ EmulatorOptions ()
sprintf (emulatorOptions[9], "Video Filtering %s",
GCSettings.render == true ? " ON" : "OFF");
ret = RunMenu (emulatorOptions, emuCount, (char*)"Emulator Options");
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", 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();
}

View File

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

View File

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

View File

@ -252,29 +252,51 @@ 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

View File

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