Loading a movie now sets emulation/firmware settings.

This commit is contained in:
SuuperW 2018-09-01 11:09:04 -05:00
parent bd299672a1
commit e83ec89578
2 changed files with 76 additions and 6 deletions

View File

@ -486,7 +486,47 @@ void FCEUI_StopMovie()
freshMovie = false;
}
static void LoadSettingsFromMovie(MovieData movieData)
{
if (currMovieData.useExtBios != -1)
CommonSettings.UseExtBIOS = currMovieData.useExtBios;
if (currMovieData.useExtFirmware != -1)
CommonSettings.UseExtFirmware = currMovieData.useExtFirmware;
if (!CommonSettings.UseExtFirmware)
{
if (currMovieData.firmNickname != "")
{
CommonSettings.fw_config.nickname_len = currMovieData.firmNickname.length() > MAX_FW_NICKNAME_LENGTH ? MAX_FW_NICKNAME_LENGTH : currMovieData.firmNickname.length();
for (int i = 0; i < CommonSettings.fw_config.nickname_len; i++)
CommonSettings.fw_config.nickname[i] = currMovieData.firmNickname[i];
}
if (currMovieData.firmMessage != "")
{
CommonSettings.fw_config.message_len = currMovieData.firmMessage.length() > MAX_FW_MESSAGE_LENGTH ? MAX_FW_MESSAGE_LENGTH : currMovieData.firmMessage.length();
for (int i = 0; i < CommonSettings.fw_config.message_len; i++)
CommonSettings.fw_config.message[i] = currMovieData.firmMessage[i];
}
if (currMovieData.firmFavColour != -1)
CommonSettings.fw_config.fav_colour = currMovieData.firmFavColour;
if (currMovieData.firmBirthMonth != -1)
CommonSettings.fw_config.birth_month = currMovieData.firmBirthMonth;
if (currMovieData.firmBirthDay != -1)
CommonSettings.fw_config.birth_day = currMovieData.firmBirthDay;
if (currMovieData.firmLanguage != -1)
CommonSettings.fw_config.language = currMovieData.firmLanguage;
// reset firmware (some games can write to it)
NDS_CreateDummyFirmware(&CommonSettings.fw_config);
}
if (currMovieData.advancedTiming != -1)
CommonSettings.advanced_timing = currMovieData.advancedTiming;
if (currMovieData.jitBlockSize != -1)
{
CommonSettings.use_jit = currMovieData.jitBlockSize != 0;
CommonSettings.jit_max_block_size = currMovieData.jitBlockSize;
}
}
//begin playing an existing movie
const char* _CDECL_ FCEUI_LoadMovie(const char *fname, bool _read_only, bool tasedit, int _pauseframe)
{
@ -547,11 +587,8 @@ const char* _CDECL_ FCEUI_LoadMovie(const char *fname, bool _read_only, bool tas
//fully reload the game to reinitialize everything before playing any movie
//poweron(true);
// reset firmware (some games can write to it)
if (!CommonSettings.UseExtFirmware)
{
NDS_CreateDummyFirmware(&CommonSettings.fw_config);
}
// set emulation/firmware settings
LoadSettingsFromMovie(currMovieData);
NDS_Reset();

View File

@ -155,6 +155,19 @@ public:
//was the frame data stored in binary?
bool binaryFlag;
int useExtBios = -1;
int useExtFirmware = -1;
std::string firmNickname = "";
std::string firmMessage = "";
int firmFavColour = -1;
int firmBirthMonth = -1;
int firmBirthDay = -1;
int firmLanguage = -1;
int advancedTiming = -1;
int jitBlockSize = -1;
int getNumRecords() { return records.size(); }
class TDictionary : public std::map<std::string,std::string>
@ -206,7 +219,17 @@ private:
void installGuid(std::string& val) { guid = Desmume_Guid::fromString(val); }
void installRtcStartNew(std::string& val) { DateTime::TryParse(val.c_str(), rtcStart); }
void installBinary(std::string& val) { binaryFlag = atoi(val.c_str()) != 0; }
void installUseExtBios(std::string& val) { useExtBios = atoi(val.c_str()) != 0; }
void installUseExtFirmware(std::string& val) { useExtFirmware = atoi(val.c_str()) != 0; }
void installFirmNickname(std::string& val) { firmNickname = val; }
void installFirmMessage(std::string& val) { firmMessage = val; }
void installFirmFavColour(std::string& val) { firmFavColour = atoi(val.c_str()); }
void installFirmBirthMonth(std::string& val) { firmBirthMonth = atoi(val.c_str()); }
void installFirmBirthDay(std::string& val) { firmBirthDay = atoi(val.c_str()); }
void installFirmLanguage(std::string& val) { firmLanguage = atoi(val.c_str()); }
void installAdvancedTiming(std::string& val) { advancedTiming = atoi(val.c_str()) != 0; }
void installJitBlockSize(std::string& val) { jitBlockSize = atoi(val.c_str()); }
void installRomChecksum(std::string& val);
void installRtcStart(std::string& val);
void installComment(std::string& val);
@ -226,6 +249,16 @@ private:
{"rtcStartNew", &MovieData::installRtcStartNew},
{"comment", &MovieData::installComment},
{"binary", &MovieData::installBinary},
{"useExtBios", &MovieData::installUseExtBios},
{"useExtFirmware", &MovieData::installUseExtBios},
{"firmNickname", &MovieData::installFirmNickname},
{"firmMessage", &MovieData::installFirmMessage},
{"firmFavColour", &MovieData::installFirmFavColour},
{"firmBirthMonth", &MovieData::installFirmBirthMonth},
{"firmBirthDay", &MovieData::installFirmBirthDay},
{"firmLanguage", &MovieData::installFirmLanguage},
{"advancedTiming", &MovieData::installAdvancedTiming},
{"jitBlockSize", &MovieData::installJitBlockSize},
{"savestate", &MovieData::installSavestate},
{"sram", &MovieData::installSram}
};