private byte[] SaveTrainerInfo(uint version) { List <byte> data = new List <byte>(); playTime += new TimeSpan((DateTime.Now - lastSaveTime).Ticks); lastSaveTime = DateTime.Now; byte[] seenData = new byte[50]; ByteHelper.SetBits(seenData, 0, 0, new BitArray(pokedexSeen)); byte[] ownedData = new byte[50]; ByteHelper.SetBits(ownedData, 0, 0, new BitArray(pokedexOwned)); /* 0 */ data.AddRange(GBACharacterEncoding.GetBytes(trainerName, 7)); /* 7 */ data.Add((byte)trainerGender); /* 8 */ data.AddRange(BitConverter.GetBytes(trainerID)); /* 10 */ data.AddRange(BitConverter.GetBytes(secretID)); /* 12 */ data.AddRange(BitConverter.GetBytes(playTime.Ticks)); /* 20 */ data.AddRange(BitConverter.GetBytes(money)); /* 24 */ data.AddRange(BitConverter.GetBytes(coins)); /* 28 */ data.AddRange(BitConverter.GetBytes(battlePoints)); /* 32 */ data.AddRange(BitConverter.GetBytes(pokeCoupons)); /* 36 */ data.AddRange(BitConverter.GetBytes(volcanicAsh)); /* 40 */ data.AddRange(seenData); /* 90 */ data.AddRange(ownedData); return(data.ToArray()); }
private void LoadTrainerInfo(uint version, byte[] data) { if (version >= 1) { trainerName = GBACharacterEncoding.GetString(ByteHelper.SubByteArray(0, data, 7)); trainerGender = (Genders)data[7]; trainerID = LittleEndian.ToUInt16(data, 8); secretID = LittleEndian.ToUInt16(data, 10); playTime = TimeSpan.FromTicks(LittleEndian.ToSInt64(data, 12)); lastSaveTime = DateTime.Now; money = LittleEndian.ToUInt32(data, 20); coins = LittleEndian.ToUInt32(data, 24); battlePoints = LittleEndian.ToUInt32(data, 28); pokeCoupons = LittleEndian.ToUInt32(data, 32); volcanicAsh = LittleEndian.ToUInt32(data, 36); BitArray seen = ByteHelper.GetBits(data, 40, 0, 386); BitArray owned = ByteHelper.GetBits(data, 90, 0, 386); for (int i = 0; i < 386; i++) { pokedexSeen[i] = seen[i]; } for (int i = 0; i < 386; i++) { pokedexOwned[i] = owned[i]; } } }
private void OnNameChanged(object sender, TextChangedEventArgs e) { if (!loaded) { return; } newNameRaw = GBACharacterEncoding.GetBytes(textBoxName.Text, 7, newLanguage); }
private void OnSaveClicked(object sender, RoutedEventArgs e) { byte[] trainerNameBytes = GBACharacterEncoding.GetBytes(trainerName, 7); string newTrainerName = GBACharacterEncoding.GetString(trainerNameBytes); bool setName = newTrainerName != gameSave.TrainerName; bool setGender = trainerGender != gameSave.TrainerGender; if (setName || setGender) { MessageBoxResult result = TriggerMessageBox.Show(this, "Warning: Renaming a trainer or changing their gender will also change the OT Trainer of every Pokémon caught by this trainer in all saves. Are you sure you want to continue?", "Warning", MessageBoxButton.YesNo); //if (result == MessageBoxResult.Yes && (gameSave.GameType == GameTypes.Ruby || gameSave.GameType == GameTypes.Sapphire || gameSave.GameType == GameTypes.Emerald)) // result = TriggerMessageBox.Show(this, "Warning: Certain scripts may act incorrectly if you change your gender. This includes after you beat the Elite Four where you will get stuck in a wall. Are you sure you want to continue?", "Warning", MessageBoxButton.YesNo); if (result == MessageBoxResult.Yes) { if (setName) { gameSave.TrainerName = GBACharacterEncoding.CheckString(newTrainerName, gameSave.IsJapanese ? Languages.Japanese : Languages.English); } if (setGender) { gameSave.TrainerGender = trainerGender; } for (int i = -1; i < PokeManager.NumGameSaves; i++) { IGameSave newGameSave = PokeManager.GetGameSaveAt(i); if (newGameSave is ManagerGameSave) { for (int j = 0; j < (newGameSave as ManagerGameSave).NumPokePCRows; j++) { foreach (IPokemon pokemon in (newGameSave as ManagerGameSave).GetPokePCRow(j)) { if (pokemon.TrainerID == gameSave.TrainerID && pokemon.SecretID == gameSave.SecretID) { if (setName) { pokemon.TrainerName = newTrainerName; } if (setGender) { pokemon.TrainerGender = trainerGender; } } } } } else { foreach (IPokemon pokemon in newGameSave.PokePC) { if (pokemon.TrainerID == gameSave.TrainerID && pokemon.SecretID == gameSave.SecretID) { if (setName) { pokemon.TrainerName = newTrainerName; } if (setGender) { pokemon.TrainerGender = trainerGender; } } } } } gameSave.IsChanged = true; PokeManager.RefreshUI(); } } DialogResult = true; }