/** * Loads a game, given a full path/filename. The driver code must be * initialized after the game is loaded, because the emulator code * provides data necessary for the driver code(number of scanlines to * render, what virtual input devices to use, etc.). */ int LoadGame(const char *path) { if (isloaded){ CloseGame(); } if(!FCEUI_LoadGame(path, 1)) { return 0; } int state_to_load; g_config->getOption("SDL.AutoLoadState", &state_to_load); if (state_to_load >= 0 && state_to_load < 10){ FCEUI_SelectState(state_to_load, 0); FCEUI_LoadState(NULL, false); } ParseGIInput(GameInfo); RefreshThrottleFPS(); if(!DriverInitialize(GameInfo)) { return(0); } // set pal/ntsc int id; g_config->getOption("SDL.PAL", &id); switch(id) { case 0: FCEUI_SetVidSystem(0); pal_emulation = 0; dendy = 0; break; case 1: FCEUI_SetVidSystem(1); pal_emulation = 1; dendy = 0; break; case 2: FCEUI_SetVidSystem(0); pal_emulation = 0; dendy = 1; } std::string filename; g_config->getOption("SDL.Sound.RecordFile", &filename); if(filename.size()) { if(!FCEUI_BeginWaveRecord(filename.c_str())) { g_config->setOption("SDL.Sound.RecordFile", ""); } } isloaded = 1; FCEUD_NetworkConnect(); return 1; }
//Show the record movie dialog and record a movie. void FCEUD_MovieRecordTo() { if (RA_HardcoreModeIsActive()) { MessageBox(nullptr, ("Hardcore Mode is active. Movie Recording/Playback is disabled."), ("Warning"), MB_OK); return; } if (!GameInfo) return; static struct CreateMovieParameters p; p.szFilename = strdup(FCEU_MakeFName(FCEUMKF_MOVIE,0,0).c_str()); if(p.recordFrom >= 2) p.recordFrom=1; if(DialogBoxParam(fceu_hInstance, "IDD_RECORDINP", hAppWnd, RecordDialogProc, (LPARAM)&p)) { if(p.recordFrom >= 2) { // attempt to load the savestate // FIXME: pop open a messagebox if this fails FCEUI_LoadState(p.szSavestateFilename.c_str()); { extern int loadStateFailed; if(loadStateFailed) { char str [1024]; sprintf(str, "Failed to load save state \"%s\".\nRecording from current state instead...", p.szSavestateFilename.c_str()); FCEUD_PrintError(str); } } } EMOVIE_FLAG flags = MOVIE_FLAG_NONE; if(p.recordFrom == 0) flags = MOVIE_FLAG_FROM_POWERON; FCEUI_SaveMovie(p.szFilename.c_str(), flags, p.authorName); } }
void Ingame_Menu(void) { char *temp; int i,selection = 0; oldselect = -1; char stateoption[16]; strcpy(stateoption,"State number: "); int option_changed = 0; int menu_x1 = gsGlobal->Width*0.25; int menu_y1 = gsGlobal->Height*0.15; int menu_x2 = gsGlobal->Width*0.75; int menu_y2 = gsGlobal->Height*0.85+FONT_HEIGHT; int text_line = menu_y1 + 4; char options[14][23] = { { "State number: " }, { "Save State" }, { "Load State" }, { "Filtering: "}, { "LowPass: "******"Configure Input" }, { "Rapidfire Switch: "}, { "RapidFire P1: " }, { "RapidFire P2: " }, { "Reset Game" }, { "Exit Game" }, { "Exit Menu" }, { "Palette:" }, { "" } }; for(i=0;i<14;i++) { switch(i) { case 0: sprintf(options[i],"%s%d",options[i],statenum); break; case 3: if(!Settings.filter) sprintf(options[i],"%s%s",options[i],"Off"); else sprintf(options[i],"%s%s",options[i],"On"); break; case 4: if(!Settings.lowpass) sprintf(options[i],"%s%s",options[i],"Off"); else sprintf(options[i],"%s%s",options[i],"On"); break; case 6: if(!Settings.turbo) { sprintf(options[i],"%s%s",options[i],"Off"); } else { sprintf(options[i],"%s%s",options[i],"On"); } break; case 7: switch(aorborab[0]) { case 0: sprintf(options[i],"%s%s",options[i],"Off"); break; case 1: sprintf(options[i],"%s%s",options[i],"A"); break; case 2: sprintf(options[i],"%s%s",options[i],"B"); break; case 3: sprintf(options[i],"%s%s",options[i],"AB"); break; } break; case 8: switch(aorborab[1]) { case 0: sprintf(options[i],"%s%s",options[i],"Off"); break; case 1: sprintf(options[i],"%s%s",options[i],"A"); break; case 2: sprintf(options[i],"%s%s",options[i],"B"); break; case 3: sprintf(options[i],"%s%s",options[i],"AB"); break; } break; case 13: sprintf(options[i],"%s%s",options[i],palette_names[Settings.current_palette - 1].name); break; } } #ifdef SOUND_ON audsrv_stop_audio(); #endif gsKit_mode_switch(gsGlobal, GS_ONESHOT); gsGlobal->DrawOrder = GS_PER_OS; while(1) { selected = 0; //clear selected flag selection += menu_input(0,0); if(selection == 12 && oldselect == 11) { selection++; } //12 is palette if(selection == 12 && oldselect == 13) { selection--; } if(selection > 13) { selection = 0; } if(selection < 0) { selection = 13; } if(oldselect != selection || option_changed) { i = 0x10000; while(i--) asm("nop\nnop\nnop\nnop"); gsKit_queue_reset(gsGlobal->Os_Queue); option_changed = 0; menu_primitive("Options", &MENU_TEX, menu_x1, menu_y1, menu_x2, menu_y2); for(i=0;i<14;i++) { if(selection == i) { //font_print(gsGlobal, menu_x1+10.0f, text_line + i*FONT_HEIGHT, 2, DarkYellowFont, options[i]); printXY(options[i],menu_x1+10,text_line + i*FONT_HEIGHT, 4, FCEUSkin.highlight, 1, 0); } else { //font_print(gsGlobal, menu_x1+10.0f, text_line + i*FONT_HEIGHT, 2, WhiteFont, options[i]); printXY(options[i],menu_x1+10,text_line + i*FONT_HEIGHT, 4, FCEUSkin.textcolor, 1, 0); } } DrawScreen(gsGlobal); } oldselect = selection; if(selected) { if(selected == 2) { //menu combo pressed again selection = 11; } i = selection; switch(i) { case 0: //State Number statenum++; if(statenum > 9) {statenum = 0;} sprintf(options[i],"%s%d",stateoption,statenum); FCEUI_SelectState(statenum); option_changed = 1; break; case 1: FCEUI_SaveState(NULL); SetupNESGS(); return; case 2: FCEUI_LoadState(NULL); SetupNESGS(); return; case 3: Settings.filter ^= 1; if(Settings.filter) { temp = strstr(options[i],"Off"); *temp = 0; strcat(options[i],"On"); } else { temp = strstr(options[i],"On"); *temp = 0; strcat(options[i],"Off"); } option_changed = 1; break; case 4: Settings.lowpass ^= 1; if(Settings.lowpass) { FCEUI_SetLowPass(Settings.lowpass); temp = strstr(options[i],"Off"); *temp = 0; strcat(options[i],"On"); } else { FCEUI_SetLowPass(Settings.lowpass); temp = strstr(options[i],"On"); *temp = 0; strcat(options[i],"Off"); } option_changed = 1; break; case 6: Settings.turbo ^= 1; if(Settings.turbo) { temp = strstr(options[i],"Off"); *temp = 0; strcat(options[i],"On"); } else { temp = strstr(options[i],"On"); *temp = 0; strcat(options[i],"Off"); } option_changed = 1; break; case 7: aorborab[0]++; if(aorborab[0] > 3) aorborab[0] = 0; switch(aorborab[0]) { case 0: //Off rapidfire_a[0] = 0; rapidfire_b[0] = 0; temp = strstr(options[i],"AB"); *temp = 0; strcat(options[i],"Off"); break; case 1: //A rapidfire_a[0] = 1; rapidfire_b[0] = 0; temp = strstr(options[i],"Off"); *temp = 0; strcat(options[i],"A"); break; case 2: //B rapidfire_a[0] = 0; rapidfire_b[0] = 1; temp = strstr(options[i]," A"); *temp = 0; strcat(options[i]," B"); break; case 3: //AB rapidfire_a[0] = 1; rapidfire_b[0] = 1; temp = strstr(options[i]," B"); *temp = 0; strcat(options[i]," AB"); break; } option_changed = 1; break; case 8: aorborab[1]++; if(aorborab[1] > 3) aorborab[1] = 0; switch(aorborab[1]) { case 0: //Off rapidfire_a[1] = 0; rapidfire_b[1] = 0; temp = strstr(options[i],"AB"); *temp = 0; strcat(options[i],"Off"); break; case 1: //A rapidfire_a[1] = 1; rapidfire_b[1] = 0; temp = strstr(options[i],"Off"); *temp = 0; strcat(options[i],"A"); break; case 2: //B rapidfire_a[1] = 0; rapidfire_b[1] = 1; temp = strstr(options[i]," A"); *temp = 0; strcat(options[i]," B"); break; case 3: //AB rapidfire_a[1] = 1; rapidfire_b[1] = 1; temp = strstr(options[i]," B"); *temp = 0; strcat(options[i]," AB"); break; } option_changed = 1; break; case 9: FCEUI_ResetNES(); SetupNESGS(); return; case 10: fdsswap = 0; statenum = 0; exitgame = 1; selected = 0; return; case 11: SetupNESGS(); return; case 13: Settings.current_palette++; if(Settings.current_palette > MAXPAL) {Settings.current_palette = 1;} sprintf(options[i],"%s",palette_names[Settings.current_palette - 1].name); SetupNESTexture(); option_changed = 1; break; } } } }
static void KeyboardCommands(void) { int is_shift, is_alt; keys=GetKeyboard(); if(InputType[2]==SIFC_FKB) // Family Keyboard (FKB) { if(keyonly(SCROLLLOCK)) { cidisabled^=1; FCEUI_DispMessage("Family Keyboard %sabled.",cidisabled?"en":"dis"); } #ifdef SDL SDL_WM_GrabInput( cidisabled? SDL_GRAB_ON: SDL_GRAB_OFF ); #endif if(cidisabled) return; } is_shift = KEY(LEFTSHIFT) | KEY(RIGHTSHIFT); is_alt = KEY(LEFTALT) | KEY(RIGHTALT); #ifdef SDL if(keyonly(F4)) { if(is_shift) FCEUI_SetRenderDisable(-1, 2); else FCEUI_SetRenderDisable(2, -1); } #endif #if defined(SDL) && !defined(FLASH) if(keyonly(ENTER) && is_alt) ToggleFS(); #endif // Disable most keyboard shortcuts in Flash #ifndef FLASH NoWaiting &=~ 1; if(KEY(GRAVE)) { NoWaiting|=1; } if(gametype==GIT_FDS) { if(keyonly(F6)) FCEUI_FDSSelect(); if(keyonly(F8)) FCEUI_FDSInsert(0); } if(keyonly(F9)) { FCEUI_SaveSnapshot(); } if(gametype!=GIT_NSF) { #ifndef EXTGUI if(keyonly(F2)) { DoCheatSeq(); } #endif if(keyonly(F5)) { if(is_shift) FCEUI_SaveMovie(NULL); else FCEUI_SaveState(NULL); } if(keyonly(F7)) { if(is_shift) FCEUI_LoadMovie(NULL); else FCEUI_LoadState(NULL); } } if(keyonly(F1)) FCEUI_ToggleTileView(); if(keyonly(F10)) FCEUI_ResetNES(); if(keyonly(F11)) FCEUI_PowerNES(); #ifdef EXTGUI if(keyonly(F3)) GUI_Hide(-1); if(KEY(F12)) GUI_RequestExit(); if(KEY(ESCAPE)) CloseGame(); #else if(KEY(F12) || KEY(ESCAPE)) CloseGame(); #endif if(gametype==GIT_VSUNI) { if(keyonly(F8)) FCEUI_VSUniCoin(); if(keyonly(F6)) { DIPS^=1; FCEUI_VSUniToggleDIPView(); } if(!(DIPS&1)) goto DIPSless; if(keyonly(1)) FCEUI_VSUniToggleDIP(0); if(keyonly(2)) FCEUI_VSUniToggleDIP(1); if(keyonly(3)) FCEUI_VSUniToggleDIP(2); if(keyonly(4)) FCEUI_VSUniToggleDIP(3); if(keyonly(5)) FCEUI_VSUniToggleDIP(4); if(keyonly(6)) FCEUI_VSUniToggleDIP(5); if(keyonly(7)) FCEUI_VSUniToggleDIP(6); if(keyonly(8)) FCEUI_VSUniToggleDIP(7); } else { static uint8 bbuf[32]; static int bbuft; static int barcoder = 0; if(keyonly(H)) FCEUI_NTSCSELHUE(); if(keyonly(T)) FCEUI_NTSCSELTINT(); if(KEY(KP_MINUS) || KEY(MINUS)) FCEUI_NTSCDEC(); if(KEY(KP_PLUS) || KEY(EQUAL)) FCEUI_NTSCINC(); if((InputType[2] == SIFC_BWORLD) || (cspec == SIS_DATACH)) { if(keyonly(F8)) { barcoder ^= 1; if(!barcoder) { if(InputType[2] == SIFC_BWORLD) { strcpy(&BWorldData[1],bbuf); BWorldData[0]=1; } else FCEUI_DatachSet(bbuf); FCEUI_DispMessage("Barcode Entered"); } else { bbuft = 0; FCEUI_DispMessage("Enter Barcode");} } } else barcoder = 0; #define SSM(x) \ { if(barcoder) { if(bbuft < 13) {bbuf[bbuft++] = '0' + x; bbuf[bbuft] = 0;} FCEUI_DispMessage("Barcode: %s",bbuf);} \ else { \ if(is_shift) FCEUI_SelectMovie(x); \ else FCEUI_SelectState(x); \ } } DIPSless: if(keyonly(0)) SSM(0); if(keyonly(1)) SSM(1); if(keyonly(2)) SSM(2); if(keyonly(3)) SSM(3); if(keyonly(4)) SSM(4); if(keyonly(5)) SSM(5); if(keyonly(6)) SSM(6); if(keyonly(7)) SSM(7); if(keyonly(8)) SSM(8); if(keyonly(9)) SSM(9); #undef SSM } #endif }
static void KeyboardCommands(void) { int is_shift, is_alt; keys = GetKeyboard(); if ((InputType[2] == SIFC_FKB) || (InputType[2] == SIFC_SUBORKB) || (InputType[2] == SIFC_PEC586KB)) { if (cidisabled) return; } is_shift = KEY(LEFTSHIFT) | KEY(RIGHTSHIFT); is_alt = KEY(LEFTALT) | KEY(RIGHTALT); if (keyonly(F4)) { if (is_shift) FCEUI_SetRenderDisable(-1, 2); else FCEUI_SetRenderDisable(2, -1); } { static int nocount = 0; NoWaiting &= ~1; if (KEY(GRAVE)) //&& nocount) NoWaiting |= 1; nocount = (nocount + 1) & 3; } if (gametype == GIT_FDS) { if (keyonly(F6)) FCEUI_FDSSelect(); if (keyonly(F8)) FCEUI_FDSInsert(0); } if (keyonly(F9)) FCEUI_SaveSnapshot(); if (gametype != GIT_NSF) { if (keyonly(F5)) { if (is_shift) FCEUI_SaveMovie(NULL); else FCEUI_SaveState(NULL); } if (keyonly(F7)) { if (is_shift) FCEUI_LoadMovie(NULL); else FCEUI_LoadState(NULL); } } // if(keyonly(F1)) FCEUI_ToggleTileView(); if (gametype == GIT_VSUNI) { if (keyonly(F8)) FCEUI_VSUniCoin(); if (keyonly(F6)) { DIPS ^= 1; FCEUI_VSUniToggleDIPView(); } if (!(DIPS & 1)) goto DIPSless; if (keyonly(1)) FCEUI_VSUniToggleDIP(0); if (keyonly(2)) FCEUI_VSUniToggleDIP(1); if (keyonly(3)) FCEUI_VSUniToggleDIP(2); if (keyonly(4)) FCEUI_VSUniToggleDIP(3); if (keyonly(5)) FCEUI_VSUniToggleDIP(4); if (keyonly(6)) FCEUI_VSUniToggleDIP(5); if (keyonly(7)) FCEUI_VSUniToggleDIP(6); if (keyonly(8)) FCEUI_VSUniToggleDIP(7); } else { static uint8 bbuf[32]; static int bbuft; static int barcoder = 0; if (keyonly(H)) FCEUI_NTSCSELHUE(); if (keyonly(T)) FCEUI_NTSCSELTINT(); if (KEY(KP_MINUS) || KEY(MINUS)) FCEUI_NTSCDEC(); if (KEY(KP_PLUS) || KEY(EQUAL)) FCEUI_NTSCINC(); if ((InputType[2] == SIFC_BWORLD) || (cspec == SIS_DATACH)) { if (keyonly(F8)) { barcoder ^= 1; if (!barcoder) { if (InputType[2] == SIFC_BWORLD) { strcpy(&BWorldData[1], bbuf); BWorldData[0] = 1; } else FCEUI_DatachSet(bbuf); FCEUI_DispMessage("Barcode Entered"); } else { bbuft = 0; FCEUI_DispMessage("Enter Barcode"); } } } else barcoder = 0; #define SSM(x) \ { if (barcoder) { if (bbuft < 13) { bbuf[bbuft++] = '0' + x; bbuf[bbuft] = 0; } FCEUI_DispMessage("Barcode: %s", bbuf); } \ else { \ if (is_shift) FCEUI_SelectMovie(x); \ else FCEUI_SelectState(x); \ } \ } DIPSless: if (keyonly(0)) SSM(0); if (keyonly(1)) SSM(1); if (keyonly(2)) SSM(2); if (keyonly(3)) SSM(3); if (keyonly(4)) SSM(4); if (keyonly(5)) SSM(5); if (keyonly(6)) SSM(6); if (keyonly(7)) SSM(7); if (keyonly(8)) SSM(8); if (keyonly(9)) SSM(9); #undef SSM } }
static int load_state() { FCEUI_LoadState(NULL); return 0; }