diff --git a/source/ngc/filebrowser.cpp b/source/ngc/filebrowser.cpp index 628c18d..92f8dec 100644 --- a/source/ngc/filebrowser.cpp +++ b/source/ngc/filebrowser.cpp @@ -36,8 +36,6 @@ extern "C" { #include "gcunzip.h" #include "wiiusbsupport.h" -void AutoLoad(int method); - BROWSERINFO browser; BROWSERENTRY * browserList = NULL; // list of files/folders in browser @@ -450,8 +448,10 @@ int BrowserLoadFile(int method) } else { - AutoLoad(method); // Load SRAM (battery backed RAM) or save state - + if (GCSettings.AutoLoad == 1) + LoadBatteryOrStateAuto(GCSettings.SaveMethod, FILE_SRAM, SILENT); + else if (GCSettings.AutoLoad == 2) + LoadBatteryOrStateAuto(GCSettings.SaveMethod, FILE_SNAPSHOT, SILENT); ResetBrowser(); } CancelAction(); diff --git a/source/ngc/gameinput.cpp b/source/ngc/gameinput.cpp index a67f766..39be2f6 100644 --- a/source/ngc/gameinput.cpp +++ b/source/ngc/gameinput.cpp @@ -39,6 +39,223 @@ char DebugStr[50] = ""; va_end( args ); }*/ + +u32 MK1Input(unsigned short pad) { + u32 J = StandardMovement(pad); + u8 Health = gbReadMemory(0xc695); + static u8 OldHealth = 0; + + // Rumble when they lose health! + if (Health < OldHealth) + systemGameRumble(5); + OldHealth = Health; + +#ifdef HW_RVL + WPADData * wp = WPAD_Data(pad); + + // Punch + if (wp->btns_h & WPAD_BUTTON_UP || wp->btns_h & WPAD_BUTTON_LEFT) + J |= VBA_BUTTON_B; + // Kick + if (wp->btns_h & WPAD_BUTTON_DOWN || wp->btns_h & WPAD_BUTTON_RIGHT) + J |= VBA_BUTTON_A; + // Block + if ((wp->exp.type == WPAD_EXP_NUNCHUK) && (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z)) + J |= VBA_BUTTON_A | VBA_BUTTON_B; // different from MK2 + // Throw + if (wp->btns_h & WPAD_BUTTON_A) + J |= VBA_BUTTON_B | VBA_RIGHT; // CAKTODO check which way we are facing + // Pause + if (wp->btns_h & WPAD_BUTTON_MINUS) + J |= VBA_BUTTON_SELECT; + // Start + if (wp->btns_h & WPAD_BUTTON_PLUS) + J |= VBA_BUTTON_START; + // Special move + if (wp->btns_h & WPAD_BUTTON_B) + { + // CAKTODO + } + +#endif + return J; +} + +u32 MK4Input(unsigned short pad) +{ + u32 J = StandardMovement(pad); + u8 Health = 0; + static u8 OldHealth = 0; + + // Rumble when they lose health! + if (Health < OldHealth) + systemGameRumble(20); + OldHealth = Health; + +#ifdef HW_RVL + WPADData * wp = WPAD_Data(pad); + + // Punch + if (wp->btns_h & WPAD_BUTTON_UP || wp->btns_h & WPAD_BUTTON_LEFT) + J |= VBA_BUTTON_B; + // Kick + if (wp->btns_h & WPAD_BUTTON_DOWN || wp->btns_h & WPAD_BUTTON_RIGHT) + J |= VBA_BUTTON_A; + // Block + if ((wp->exp.type == WPAD_EXP_NUNCHUK) && (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z)) + J |= VBA_BUTTON_START; + // Throw + if (wp->btns_h & WPAD_BUTTON_A) + J |= VBA_BUTTON_B | VBA_RIGHT; // CAKTODO check which way we are facing + // Pause + if (wp->btns_h & WPAD_BUTTON_MINUS) + J |= VBA_BUTTON_SELECT; + // Start + if (wp->btns_h & WPAD_BUTTON_PLUS) + J |= VBA_BUTTON_START; + // Special move + if (wp->btns_h & WPAD_BUTTON_B) + { + // CAKTODO + } +#endif + + return J; +} + +u32 MKAInput(unsigned short pad) +{ + u32 J = StandardMovement(pad); + u8 Health = 0; + static u8 OldHealth = 0; + + // Rumble when they lose health! + if (Health < OldHealth) + systemGameRumble(20); + OldHealth = Health; + +#ifdef HW_RVL + WPADData * wp = WPAD_Data(pad); + + // Punch + if (wp->btns_h & WPAD_BUTTON_UP || wp->btns_h & WPAD_BUTTON_LEFT) + J |= VBA_BUTTON_B; + // Kick + if (wp->btns_h & WPAD_BUTTON_DOWN || wp->btns_h & WPAD_BUTTON_RIGHT) + J |= VBA_BUTTON_A; + // Block + if ((wp->exp.type == WPAD_EXP_NUNCHUK) && (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z)) + J |= VBA_BUTTON_R; + // Run (supposed to be change styles) + if ((wp->exp.type == WPAD_EXP_NUNCHUK) && (wp->btns_h & WPAD_NUNCHUK_BUTTON_C)) + J |= VBA_BUTTON_L; + // Throw + if (wp->btns_h & WPAD_BUTTON_A) + J |= VBA_RIGHT; // CAKTODO check which way we are facing + // Pause + if (wp->btns_h & WPAD_BUTTON_PLUS || wp->btns_h & WPAD_BUTTON_MINUS) + J |= VBA_BUTTON_SELECT; + // Special move + if (wp->btns_h & WPAD_BUTTON_B) + { + // CAKTODO + } +#endif + + return J; +} + +u32 MKTEInput(unsigned short pad) +{ + static u32 prevJ = 0, prevPrevJ = 0; + u32 J = StandardMovement(pad); +#ifdef HW_RVL + WPADData * wp = WPAD_Data(pad); + u8 Health; + u8 Side; + if (RomIdCode & 0xFFFFFF == MKDA) + { + Health = CPUReadByte(0x3000760); // 731 or 760 + Side = CPUReadByte(0x3000747); + } + else + { + Health = CPUReadByte(0x3000761); // or 790 + Side = CPUReadByte(0x3000777); + } + static u8 OldHealth = 0; + + // Rumble when they lose health! + if (Health < OldHealth) + systemGameRumble(20); + OldHealth = Health; + + u32 Forwards, Back; + if (Side == 0) + { + Forwards = VBA_RIGHT; + Back = VBA_LEFT; + } + else + { + Forwards = VBA_LEFT; + Back = VBA_RIGHT; + } + + // Punch + if (wp->btns_h & WPAD_BUTTON_UP || wp->btns_h & WPAD_BUTTON_LEFT) + J |= VBA_BUTTON_B; + // Kick + if (wp->btns_h & WPAD_BUTTON_DOWN || wp->btns_h & WPAD_BUTTON_RIGHT) + J |= VBA_BUTTON_A; + // Block + if ((wp->exp.type == WPAD_EXP_NUNCHUK) && (wp->btns_h & WPAD_NUNCHUK_BUTTON_Z)) + J |= VBA_BUTTON_R; + // Change styles + if ((wp->exp.type == WPAD_EXP_NUNCHUK) && (wp->btns_h & WPAD_NUNCHUK_BUTTON_C)) + J |= VBA_BUTTON_L; + // Throw + if (wp->btns_h & WPAD_BUTTON_A) + { + if ((prevJ & Forwards && prevJ & VBA_BUTTON_A && prevJ & VBA_BUTTON_B) || ((prevPrevJ & Forwards) && !(prevJ & Forwards))) + J |= Forwards | VBA_BUTTON_A | VBA_BUTTON_B; // R, R+1+2 = throw + + else if (prevJ & Forwards) + { + J &= ~Forwards; + J &= ~VBA_BUTTON_A; + J &= ~VBA_BUTTON_B; + } + else + J |= Forwards; + + } + // Pause + if (wp->btns_h & WPAD_BUTTON_MINUS) + J |= VBA_BUTTON_SELECT; + // Start + if (wp->btns_h & WPAD_BUTTON_PLUS) + J |= VBA_BUTTON_START; + // Special move + if (wp->btns_h & WPAD_BUTTON_B) { + // CAKTODO + } + // Speed + if (wp->btns_h & WPAD_BUTTON_1 || wp->btns_h & WPAD_BUTTON_2) { + J |= VBA_SPEED; + } +#endif + + if ((J & 48) == 48) + J &= ~16; + if ((J & 192) == 192) + J &= ~128; + prevPrevJ = prevJ; + prevJ = J; + + return J; +} + u32 LegoStarWars1Input(unsigned short pad) { u32 J = StandardMovement(pad) | DecodeGamecube(pad) | DPadWASD(pad); // Rumble when they lose health! diff --git a/source/ngc/menu.cpp b/source/ngc/menu.cpp index 6be5ea3..4aff6ed 100644 --- a/source/ngc/menu.cpp +++ b/source/ngc/menu.cpp @@ -508,58 +508,6 @@ void InfoPrompt(const char *msg) WindowPrompt("Information", msg, "OK", NULL); } -/**************************************************************************** - * AutoSave - * - * Automatically saves SRAM/snapshot when returning from in-game to the menu - ***************************************************************************/ -void AutoSave() -{ - if (GCSettings.AutoSave == 1) - { - SaveBatteryOrStateAuto(GCSettings.SaveMethod, FILE_SRAM, SILENT); // save battery - } - else if (GCSettings.AutoSave == 2) - { - if (WindowPrompt("Save", "Save Snapshot?", "Save", "Don't Save") ) - SaveBatteryOrStateAuto(GCSettings.SaveMethod, FILE_SNAPSHOT, NOTSILENT); // save state - } - else if (GCSettings.AutoSave == 3) - { - if (WindowPrompt("Save", "Save SRAM and Snapshot?", "Save", "Don't Save") ) - { - SaveBatteryOrStateAuto(GCSettings.SaveMethod, FILE_SRAM, NOTSILENT); // save battery - SaveBatteryOrStateAuto(GCSettings.SaveMethod, FILE_SNAPSHOT, NOTSILENT); // save state - } - } -} - -/**************************************************************************** - * AutoLoad - * - * Automatically loads SRAM/snapshot when choosing a game from the menu - ***************************************************************************/ -void AutoLoad(int method) -{ - if (GCSettings.AutoLoad == 1) - { - LoadBatteryOrStateAuto(method, FILE_SRAM, SILENT); // save battery - } - else if (GCSettings.AutoLoad == 2) - { - if (WindowPrompt("Load", "Load Snapshot?", "Load", "Don't Load") ) - LoadBatteryOrStateAuto(method, FILE_SNAPSHOT, NOTSILENT); // save state - } - else if (GCSettings.AutoLoad == 3) - { - if (WindowPrompt("Load", "Load SRAM and Snapshot?", "Load", "Don't Load") ) - { - LoadBatteryOrStateAuto(method, FILE_SRAM, NOTSILENT); // save battery - LoadBatteryOrStateAuto(method, FILE_SNAPSHOT, NOTSILENT); // save state - } - } -} - /**************************************************************************** * OnScreenKeyboard * @@ -1256,7 +1204,23 @@ static int MenuGame() resetBtn.SetEffect(EFFECT_FADE, 15); //cheatsBtn.SetEffect(EFFECT_FADE, 15); - AutoSave(); + if (GCSettings.AutoSave == 1) + { + SaveBatteryOrStateAuto(GCSettings.SaveMethod, FILE_SRAM, SILENT); // save battery + } + else if (GCSettings.AutoSave == 2) + { + if (WindowPrompt("Save", "Save Snapshot?", "Save", "Don't Save") ) + SaveBatteryOrStateAuto(GCSettings.SaveMethod, FILE_SNAPSHOT, NOTSILENT); // save state + } + else if (GCSettings.AutoSave == 3) + { + if (WindowPrompt("Save", "Save SRAM and Snapshot?", "Save", "Don't Save") ) + { + SaveBatteryOrStateAuto(GCSettings.SaveMethod, FILE_SRAM, NOTSILENT); // save battery + SaveBatteryOrStateAuto(GCSettings.SaveMethod, FILE_SNAPSHOT, NOTSILENT); // save state + } + } } ResumeGui(); @@ -2338,8 +2302,8 @@ ButtonMappingWindow() case CTRLR_CLASSIC: if(userInput[0].wpad.exp.type != WPAD_EXP_CLASSIC) pressed = 0; // not a valid input - //else if(pressed <= 0x1000) - // pressed = 0; // not a valid input (says Tantric, I disagree) + else if(pressed <= 0x1000) + pressed = 0; break; case CTRLR_NUNCHUK: diff --git a/source/ngc/vbasupport.cpp b/source/ngc/vbasupport.cpp index 9fcc598..eabd862 100644 --- a/source/ngc/vbasupport.cpp +++ b/source/ngc/vbasupport.cpp @@ -315,18 +315,42 @@ bool LoadBatteryOrStateAuto(int method, int action, bool silent) if(method == METHOD_AUTO) return false; - char filepath[1024]; + char filepath[MAXPATHLEN]; + char fullpath[MAXPATHLEN]; + char filepath2[MAXPATHLEN]; + char fullpath2[MAXPATHLEN]; if(!MakeFilePath(filepath, action, method, ROMFilename, 0)) return false; - if (action==FILE_SRAM) { - if (!LoadBatteryOrState(filepath, method, action, SILENT)) { - if(!MakeFilePath(filepath, action, method, ROMFilename, -1)) + if (action==FILE_SRAM) + { + if (!LoadBatteryOrState(filepath, method, action, SILENT)) + { + if(!MakeFilePath(filepath2, action, method, ROMFilename, -1)) return false; - return LoadBatteryOrState(filepath, method, action, silent); - } else return true; - } else return LoadBatteryOrState(filepath, method, action, silent); + if(LoadBatteryOrState(filepath2, method, action, silent)) + { + // rename this file - append Auto + sprintf(fullpath, "%s%s", rootdir, filepath); // add device to path + sprintf(fullpath2, "%s%s", rootdir, filepath2); // add device to path + rename(fullpath2, fullpath); // rename file (to avoid duplicates) + return true; + } + else + { + return false; + } + } + else + { + return true; + } + } + else + { + return LoadBatteryOrState(filepath, method, action, silent); + } } /**************************************************************************** diff --git a/source/ngc/video.cpp b/source/ngc/video.cpp index 20ad320..b5f500b 100644 --- a/source/ngc/video.cpp +++ b/source/ngc/video.cpp @@ -392,7 +392,7 @@ InitializeVideo () VIDEO_Configure (vmode); - screenheight = 480; //vmode->xfbHeight; + screenheight = 480; screenwidth = vmode->fbWidth; // Allocate the video buffers