static std::vector<TitleCommand> LegacyScriptRead(utf8* script, size_t scriptLength, std::vector<utf8*> saves) { std::vector<TitleCommand> commands; auto fs = MemoryStream(script, scriptLength); do { char parts[3 * 128], *token, *part1, *part2; LegacyScriptGetLine(&fs, parts); token = &parts[0 * 128]; part1 = &parts[1 * 128]; part2 = &parts[2 * 128]; TitleCommand command = {}; command.Type = TITLE_SCRIPT_UNDEFINED; if (token[0] != 0) { if (_stricmp(token, "LOAD") == 0) { command.Type = TITLE_SCRIPT_LOAD; command.SaveIndex = SAVE_INDEX_INVALID; for (size_t i = 0; i < saves.size(); i++) { if (String::Equals(part1, saves[i], true)) { command.SaveIndex = (uint8_t)i; break; } } } else if (_stricmp(token, "LOCATION") == 0) { command.Type = TITLE_SCRIPT_LOCATION; command.X = atoi(part1) & 0xFF; command.Y = atoi(part2) & 0xFF; } else if (_stricmp(token, "ROTATE") == 0) { command.Type = TITLE_SCRIPT_ROTATE; command.Rotations = atoi(part1) & 0xFF; } else if (_stricmp(token, "ZOOM") == 0) { command.Type = TITLE_SCRIPT_ZOOM; command.Zoom = atoi(part1) & 0xFF; } else if (_stricmp(token, "SPEED") == 0) { command.Type = TITLE_SCRIPT_SPEED; command.Speed = std::max(1, std::min(4, atoi(part1) & 0xFF)); } else if (_stricmp(token, "FOLLOW") == 0) { command.Type = TITLE_SCRIPT_FOLLOW; command.SpriteIndex = atoi(part1) & 0xFFFF; safe_strcpy(command.SpriteName, part2, USER_STRING_MAX_LENGTH); } else if (_stricmp(token, "WAIT") == 0) { command.Type = TITLE_SCRIPT_WAIT; command.Milliseconds = atoi(part1) & 0xFFFF; } else if (_stricmp(token, "RESTART") == 0) { command.Type = TITLE_SCRIPT_RESTART; } else if (_stricmp(token, "END") == 0) { command.Type = TITLE_SCRIPT_END; } else if (_stricmp(token, "LOADMM") == 0) { command.Type = TITLE_SCRIPT_LOADMM; } else if (_stricmp(token, "LOADRCT1") == 0) { command.Type = TITLE_SCRIPT_LOADRCT1; command.SaveIndex = atoi(part1) & 0xFF; } else if (_stricmp(token, "LOADSC") == 0) { command.Type = TITLE_SCRIPT_LOADSC; // Confirm the scenario exists // source_desc desc; // if (ScenarioSources::TryGetByName(part1, &desc)) //{ safe_strcpy(command.Scenario, part1, sizeof(command.Scenario)); //} } } if (command.Type != TITLE_SCRIPT_UNDEFINED) { commands.push_back(command); } } while (fs.GetPosition() < scriptLength); return commands; }
static std::vector<TitleCommand> LegacyScriptRead(utf8 * script, size_t scriptLength, std::vector<utf8 *> saves) { std::vector<TitleCommand> commands; SDL_RWops * file = SDL_RWFromMem(script, (int)scriptLength); do { char parts[3 * 128], *token, *part1, *part2; LegacyScriptGetLine(file, parts); token = &parts[0 * 128]; part1 = &parts[1 * 128]; part2 = &parts[2 * 128]; TitleCommand command = { 0 }; command.Type = TITLE_SCRIPT_UNDEFINED; if (token[0] != 0) { if (_stricmp(token, "LOAD") == 0) { command.Type = TITLE_SCRIPT_LOAD; command.SaveIndex = SAVE_INDEX_INVALID; for (size_t i = 0; i < saves.size(); i++) { if (String::Equals(part1, saves[i], true)) { command.SaveIndex = (uint8)i; break; } } } else if (_stricmp(token, "LOCATION") == 0) { command.Type = TITLE_SCRIPT_LOCATION; command.X = atoi(part1) & 0xFF; command.Y = atoi(part2) & 0xFF; } else if (_stricmp(token, "ROTATE") == 0) { command.Type = TITLE_SCRIPT_ROTATE; command.Rotations = atoi(part1) & 0xFF; } else if (_stricmp(token, "ZOOM") == 0) { command.Type = TITLE_SCRIPT_ZOOM; command.Zoom = atoi(part1) & 0xFF; } else if (_stricmp(token, "SPEED") == 0) { command.Type = TITLE_SCRIPT_SPEED; command.Speed = Math::Max(1, Math::Min(4, atoi(part1) & 0xFF)); } else if (_stricmp(token, "WAIT") == 0) { command.Type = TITLE_SCRIPT_WAIT; command.Seconds = atoi(part1) & 0xFF; } else if (_stricmp(token, "RESTART") == 0) { command.Type = TITLE_SCRIPT_RESTART; } else if (_stricmp(token, "END") == 0) { command.Type = TITLE_SCRIPT_END; } else if (_stricmp(token, "LOADMM") == 0) { command.Type = TITLE_SCRIPT_LOADMM; } else if (_stricmp(token, "LOADRCT1") == 0) { command.Type = TITLE_SCRIPT_LOADRCT1; command.SaveIndex = atoi(part1) & 0xFF; } } if (command.Type != TITLE_SCRIPT_UNDEFINED) { commands.push_back(command); } } while (SDL_RWtell(file) < (int)scriptLength); SDL_RWclose(file); return commands; }