bool LoadState (char * filepath, bool silent) { int offset = 0; bool retval = false; int device; if(!FindDevice(filepath, &device)) return 0; AllocSaveBuffer (); offset = LoadFile(filepath, silent); if (offset > 0) { EMUFILE_MEMFILE save(savebuffer, offset); FCEUSS_LoadFP(&save, SSLOADPARAM_NOBACKUP); retval = true; } else { // if we reached here, nothing was done! if(!silent) ErrorPrompt ("State file not found"); } FreeSaveBuffer (); return retval; }
bool GREENZONE::loadSavestateOfFrame(unsigned int frame) { if (frame >= savestates.size() || !savestates[frame].size()) return false; EMUFILE_MEMORY ms(&savestates[frame]); return FCEUSS_LoadFP(&ms, SSLOADPARAM_NOBACKUP); }
void LoadState(void) { FILE *st=NULL; char *fname; if(geniestage==1) { FCEU_DispMessage("Cannot load FCS in GG screen."); return; } fname = FCEU_MakeFName(FCEUMKF_STATE,CurrentState,0); st=fopen(fname,"rb"); free(fname); if (st) { FCEUSS_LoadFP(st, 0); fclose(st); } else { FCEU_DispMessage("State %d load error (no file).",CurrentState); SaveStateStatus[CurrentState]=0; } }
int FCEUSS_Load(char *fname) { MEM_TYPE *st; char *fn; #ifdef HAVE_MEMSTREAM st = memstream_open(0); #else if (geniestage == 1) { FCEU_DispMessage("Cannot load FCS in GG screen."); return(0); } if (fname) st = FCEUD_UTF8fopen(fname, "rb"); else { st = FCEUD_UTF8fopen(fn = FCEU_MakeFName(FCEUMKF_STATE, CurrentState, fname), "rb"); free(fn); } if (st == NULL) { FCEU_DispMessage("State %d load error.", CurrentState); SaveStateStatus[CurrentState] = 0; return(0); } #endif if (FCEUSS_LoadFP(st)) { #ifndef HAVE_MEMSTREAM SaveStateStatus[CurrentState] = 1; FCEU_DispMessage("State %d loaded.", CurrentState); #endif SaveStateStatus[CurrentState] = 1; fclose(st); return(1); } else { SaveStateStatus[CurrentState] = 1; #ifndef HAVE_MEMSTREAM FCEU_DispMessage("Error(s) reading state %d!", CurrentState); #endif fclose(st); return(0); } }
int FCEUSS_Load(char *fname) { FILE *st; char *fn; if(geniestage==1) { FCEU_DispMessage("Cannot load FCS in GG screen."); return(0); } if(fname) st=FCEUD_UTF8fopen(fname, "rb"); else { st=FCEUD_UTF8fopen(fn=FCEU_MakeFName(FCEUMKF_STATE,CurrentState,fname),"rb"); free(fn); } if(st == NULL) { FCEU_DispMessage("State %d load error.",CurrentState); SaveStateStatus[CurrentState]=0; return(0); } if(FCEUSS_LoadFP(st)) { SaveStateStatus[CurrentState]=1; FCEU_DispMessage("State %d loaded.",CurrentState); SaveStateStatus[CurrentState]=1; fclose(st); return(1); } else { SaveStateStatus[CurrentState]=1; FCEU_DispMessage("Error(s) reading state %d!",CurrentState); fclose(st); return(0); } }
void LoadState(const char *fname) { MEMFILE *st=NULL; if(geniestage==1) { // FCEU_DispMessage("Cannot load FCS in GG screen."); return; } st=mem_fopen_read(fname); if (st) { FCEUSS_LoadFP(st, 0); mem_fclose(st); } else { FCEU_DispMessage("State %d load error (no file).",CurrentState); SaveStateStatus[CurrentState]=0; } }
void NetplayUpdate(uint8 *joyp) { static uint8 buf[5]; /* 4 play states, + command/extra byte */ static uint8 joypb[4]; memcpy(joypb,joyp,4); /* This shouldn't happen, but just in case. 0xFF is used as a command escape elsewhere. */ if(joypb[0] == 0xFF) joypb[0] = 0xF; #ifdef NETWORK if(!netdcount) if(!FCEUD_SendData(joypb,numlocal)) { NetError(); return; } if(!netdcount) do { if(!FCEUD_RecvData(buf,5)) { NetError(); return; } switch(buf[4]) { default: FCEU_DoSimpleCommand(buf[4]);break; case FCEUNPCMD_TEXT: { uint8 *tbuf; uint32 len = FCEU_de32lsb(buf); if(len > 100000) // Insanity check! { NetError(); return; } tbuf = malloc(len + 1); tbuf[len] = 0; if(!FCEUD_RecvData(tbuf, len)) { NetError(); free(tbuf); return; } FCEUD_NetplayText(tbuf); free(tbuf); } break; case FCEUNPCMD_SAVESTATE: { char *fn; FILE *fp; /* Send the cheats first, then the save state, since there might be a frame or two in between the two sendfile commands on the server side. */ fn = FCEU_MakeFName(FCEUMKF_CHEAT,0,0); //if(! FCEUNET_SendFile(FCEUNPCMD_LOADCHEATS,fn); // { // free(fn); // return; // } free(fn); if(!FCEUnetplay) return; fn = FCEU_MakeFName(FCEUMKF_NPTEMP,0,0); fp = fopen(fn, "wb"); if(FCEUSS_SaveFP(fp)) { fclose(fp); if(!FCEUNET_SendFile(FCEUNPCMD_LOADSTATE, fn)) { unlink(fn); free(fn); return; } unlink(fn); free(fn); } else { fclose(fp); FCEUD_PrintError("File error. (K)ill, (M)aim, (D)estroy? Now!"); unlink(fn); free(fn); return; } } break; case FCEUNPCMD_LOADCHEATS: { FILE *fp = FetchFile(FCEU_de32lsb(buf)); if(!fp) return; FCEU_FlushGameCheats(0,1); FCEU_LoadGameCheats(fp); } break; case FCEUNPCMD_LOADSTATE: { FILE *fp = FetchFile(FCEU_de32lsb(buf)); if(!fp) return; if(FCEUSS_LoadFP(fp)) { fclose(fp); FCEU_DispMessage("Remote state loaded."); } else FCEUD_PrintError("File error. (K)ill, (M)aim, (D)estroy?"); } break; } } while(buf[4]); #endif netdcount=(netdcount+1)%netdivisor; memcpy(netjoy,buf,4); *(uint32 *)joyp=*(uint32 *)netjoy; }