Repository: Xeeynamo/KingdomSaveEditor Branch: master Commit: 37a7a9dde194 Files: 776 Total size: 2.2 MB Directory structure: gitextract_6g8e8mkh/ ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ ├── bug-report.md │ │ ├── feature-request.md │ │ ├── ff7r-missing-item-name-request.md │ │ └── ff7r-teleport-coordinates-request.md │ ├── dependabot.yml │ └── workflows/ │ ├── format-code.yml │ └── test.yml ├── .gitignore ├── .gitmodules ├── CNAME ├── KH3SaveEditor.sln ├── KHSave/ │ ├── Attributes/ │ │ ├── AbilityAttribute.cs │ │ ├── AccessoryAttribute.cs │ │ ├── ArmorAttribute.cs │ │ ├── BoostAttribute.cs │ │ ├── CombatStyleAttribute.cs │ │ ├── CommandAttribute.cs │ │ ├── ConsumableAttribute.cs │ │ ├── FoodAttribute.cs │ │ ├── FormAttribute.cs │ │ ├── GummiBlockAttribute.cs │ │ ├── InfoAttribute.cs │ │ ├── IngredientAttribute.cs │ │ ├── KeyItemAttribute.cs │ │ ├── KeybladeAttribute.cs │ │ ├── LinkAttribute.cs │ │ ├── MagicAttribute.cs │ │ ├── ManuscriptAttribute.cs │ │ ├── MapAttribute.cs │ │ ├── MapInfo.cs │ │ ├── MateriaAttribute.cs │ │ ├── MogItemAttribute.cs │ │ ├── MoneyAttribute.cs │ │ ├── RecipeAttribute.cs │ │ ├── ReportAttribute.cs │ │ ├── ShieldAttribute.cs │ │ ├── SnackAttribute.cs │ │ ├── StaffAttribute.cs │ │ ├── SummonAttribute.cs │ │ ├── SynthesisAttribute.cs │ │ ├── TentAttribute.cs │ │ ├── TrackAttribute.cs │ │ ├── UnusedAttribute.cs │ │ ├── WeaponAttribute.cs │ │ └── WorldInfoAttribute.cs │ ├── Extensions/ │ │ ├── AttributeExtensions.cs │ │ ├── BitExtensions.cs │ │ └── DateTimeExtensions.cs │ ├── KHSave.csproj │ ├── Services/ │ │ ├── CacheService.cs │ │ └── TransferServiceLL.cs │ └── StreamHelpers.cs ├── KHSave.Archives/ │ ├── ArchiveFactories.cs │ ├── Factories/ │ │ ├── PcKh1Factory.cs │ │ ├── PcKh2Factory.cs │ │ ├── PcKhBbsFactory.cs │ │ ├── PcKhDddFactory.cs │ │ ├── PcKhRecomFactory.cs │ │ ├── Ps2CbsFactory.cs │ │ ├── Ps2PsuFactory.cs │ │ ├── Ps3PsvFactory.cs │ │ ├── Ps4Kh1Factory.cs │ │ ├── Ps4Kh2Factory.cs │ │ ├── Ps4KhDddFactory.cs │ │ └── Ps4KhRecomFactory.cs │ ├── IArchive.cs │ ├── IArchiveEntry.cs │ ├── IArchiveFactory.cs │ ├── KHSave.Archives.csproj │ ├── PcSaveArchive.cs │ ├── Ps2CbsArchive.cs │ ├── Ps2PsuArchive.cs │ ├── Ps3PsvArchive.cs │ └── Ps4SaveArchive.cs ├── KHSave.Lib02/ │ ├── KHSave.Lib02.csproj │ ├── Models/ │ │ ├── Objective.cs │ │ ├── PlayableCharacter.cs │ │ └── Slot.cs │ ├── SaveKh02.cs │ └── Types/ │ ├── CommandType.cs │ ├── DifficultyType.cs │ ├── LocationType.cs │ ├── MapType.cs │ └── SpawnType.cs ├── KHSave.Lib1/ │ ├── Attributes/ │ │ ├── ArmorGummiAttribute.cs │ │ ├── BlueprintGummiAttribute.cs │ │ ├── CockpitGummiAttribute.cs │ │ ├── EngineGummiAttribute.cs │ │ ├── ExtraGummiAttribute.cs │ │ ├── GummiBlockAttribute.cs │ │ ├── SpecialGummiAttribute.cs │ │ ├── WeaponGummiAttribute.cs │ │ └── WingGummiAttribute.cs │ ├── Constants.cs │ ├── ISaveKh1.cs │ ├── KHSave.Lib1.csproj │ ├── Models/ │ │ ├── Character.cs │ │ ├── GummiBlock.cs │ │ └── Gummiship.cs │ ├── SaveKh1.EU.cs │ ├── SaveKh1.FinalMix.cs │ ├── SaveKh1.cs │ └── Types/ │ ├── AbilityType.cs │ ├── CommandType.cs │ ├── DifficultyType.cs │ ├── EquipmentType.cs │ ├── GameTypes.cs │ ├── GummiBlocksType.cs │ ├── PlayableCharacterType.cs │ └── WorldType.cs ├── KHSave.Lib2/ │ ├── Constants.cs │ ├── ISaveKh2.cs │ ├── KHSave.Lib2.csproj │ ├── Models/ │ │ ├── CharacterFinalMix.cs │ │ ├── CharacterVanilla.cs │ │ ├── DriveFormFinalMix.cs │ │ ├── DriveFormVanilla.cs │ │ ├── ICharacter.cs │ │ ├── IDriveForm.cs │ │ ├── IPlaceScript.cs │ │ ├── PartyMembers.cs │ │ ├── PlaceScriptFinalMix.cs │ │ ├── PlaceScriptVanilla.cs │ │ └── Progress.cs │ ├── SaveKh2.European.cs │ ├── SaveKh2.FinalMix.cs │ ├── SaveKh2.TransferMappings.cs │ ├── SaveKh2.cs │ └── Types/ │ ├── AbilityStyleType.cs │ ├── BattleStyleType.cs │ ├── CharacterType.cs │ ├── CommandType.cs │ ├── DifficultyType.cs │ ├── DriveFormType.cs │ ├── EquipmentType.cs │ ├── GameType.cs │ ├── InventoryType.cs │ ├── PlayableCharacterType.cs │ └── WorldType.cs ├── KHSave.Lib3/ │ ├── ISaveKh3.cs │ ├── KHSave.Lib3.csproj │ ├── Models/ │ │ ├── Ability.cs │ │ ├── AiModel.cs │ │ ├── EquipmentItem.cs │ │ ├── FlantasticRecord.cs │ │ ├── InventoryEntry.cs │ │ ├── MagicGroup.cs │ │ ├── PhotoEntry.cs │ │ ├── PlayableCharacter.cs │ │ ├── Records.cs │ │ └── ShortcutGroup.cs │ ├── Presets/ │ │ ├── Preset.Pawn.cs │ │ ├── Presets.Map.cs │ │ └── Presets.Story.cs │ ├── SaveKh3.cs │ ├── SaveKh3u109.cs │ └── Types/ │ ├── AbilityType.cs │ ├── AccessoryType.cs │ ├── AiAbilityType.cs │ ├── AiCombatStyleType.cs │ ├── AiRecoveryType.cs │ ├── ArmorType.cs │ ├── CharacterIconType.cs │ ├── ChoiceType.cs │ ├── CommandType.cs │ ├── ConsumableType.cs │ ├── DifficultyType.cs │ ├── FoodType.cs │ ├── InventoryType.cs │ ├── ItemType.cs │ ├── KeyItemType.cs │ ├── LocationType.cs │ ├── MaterialType.cs │ ├── MogType.cs │ ├── PartyCharacter.cs │ ├── PlayableCharacterType.cs │ ├── RecordAttractionType.cs │ ├── RecordShotlockType.cs │ ├── SnackType.cs │ ├── StoryFlagType.cs │ ├── StoryLabelType.cs │ ├── SyntesisType.cs │ ├── TentType.cs │ ├── WeaponType.cs │ └── WorldType.cs ├── KHSave.LibBbs/ │ ├── Attributes/ │ │ ├── AbilityAttribute.cs │ │ ├── ActionAttribute.cs │ │ ├── CommandAttribute.cs │ │ └── CommandStyleAttribute.cs │ ├── Constants.cs │ ├── ISaveKhBbs.cs │ ├── KHSave.LibBbs.csproj │ ├── Models/ │ │ ├── Ability.cs │ │ ├── Character.cs │ │ ├── Command.cs │ │ ├── Deck.cs │ │ ├── Dlink.cs │ │ └── Finisher.cs │ ├── SaveKhBbs.European.cs │ ├── SaveKhBbs.FinalMix.cs │ ├── SaveKhBbs.cs │ └── Types/ │ ├── AbilityType.cs │ ├── CharacterType.cs │ ├── CommandType.cs │ ├── DifficultyType.cs │ ├── WeaponType.cs │ └── WorldType.cs ├── KHSave.LibDDD/ │ ├── Attributes/ │ │ ├── CommandAttributes.cs │ │ ├── DreamPiecesAttribute.cs │ │ ├── GlossaryAttribute.cs │ │ ├── MementoEntriesAttribute.cs │ │ ├── TrainingToysAttribute.cs │ │ └── TrainingToysFoodAttribute.cs │ ├── Constants.cs │ ├── ISaveKhDDD.cs │ ├── KHSave.LibDDD.csproj │ ├── Model/ │ │ ├── CommandEntry.cs │ │ ├── Deck.cs │ │ ├── DeckPS4.cs │ │ ├── DreamEater.cs │ │ └── IDeck.cs │ ├── SaveKhDDD.3DS.cs │ ├── SaveKhDDD.PS4.cs │ ├── SaveKhDDD.cs │ └── Types/ │ ├── DifficultyType.cs │ ├── DreamEaterType.cs │ ├── EquipmentType.cs │ └── WorldType.cs ├── KHSave.LibFf7Remake/ │ ├── Chunks/ │ │ ├── Chunk.cs │ │ ├── ChunkChapter.cs │ │ └── ChunkCommon.cs │ ├── KHSave.LibFf7Remake.csproj │ ├── Models/ │ │ ├── ChapterObject.cs │ │ ├── Character.cs │ │ ├── CharacterEquipment.cs │ │ ├── CharacterStats.cs │ │ ├── Inventory.cs │ │ ├── Materia.cs │ │ ├── MateriaEquipment.cs │ │ ├── UnknownStructure.cs │ │ ├── UnknownStructure2.cs │ │ ├── UnknownStructure3.cs │ │ ├── Vector3f.cs │ │ └── WeaponFound.cs │ ├── SaveFf7Remake.cs │ └── Types/ │ ├── CharacterStatusType.cs │ ├── CharacterType.cs │ ├── InventoryType.cs │ └── ItemCategory.cs ├── KHSave.LibPersona3/ │ ├── KHSave.LibPersona3.csproj │ ├── Models/ │ │ ├── Character.cs │ │ ├── Persona.cs │ │ ├── SocialLinks.cs │ │ └── SocialLinksPortable.cs │ ├── Presets.cs │ ├── SavePersona3.cs │ └── Types/ │ ├── ArcanaType.cs │ ├── Characters.cs │ ├── Demon.cs │ ├── ExpendableItems.cs │ ├── Inventory.cs │ └── Skill.cs ├── KHSave.LibPersona5/ │ ├── KHSave.LibPersona5.csproj │ ├── Models/ │ │ ├── Character.cs │ │ └── Persona.cs │ ├── Persona5Royal.cs │ ├── Persona5Vanilla.cs │ ├── Presets.Items.cs │ ├── Presets.Persona.cs │ ├── Presets.cs │ ├── Resources/ │ │ └── Persona5/ │ │ ├── Royal_AccessoryNames.txt │ │ ├── Royal_ArmorNames.txt │ │ ├── Royal_ConsumableItemNames.txt │ │ ├── Royal_Demon.txt │ │ ├── Royal_KeyItemNames.txt │ │ ├── Royal_MaterialNames.txt │ │ ├── Royal_MeleeWeaponNames.txt │ │ ├── Royal_OutfitNames.txt │ │ ├── Royal_RangedWeaponNames.txt │ │ ├── Royal_SkillCardNames.txt │ │ ├── Royal_SkillNames.txt │ │ ├── Royal_Traits.txt │ │ ├── Vanilla_AccessoryNames.txt │ │ ├── Vanilla_ArmorNames.txt │ │ ├── Vanilla_ConsumableItemNames.txt │ │ ├── Vanilla_Demon.txt │ │ ├── Vanilla_KeyItemNames.txt │ │ ├── Vanilla_MaterialNames.txt │ │ ├── Vanilla_MeleeWeaponNames.txt │ │ ├── Vanilla_OutfitNames.txt │ │ ├── Vanilla_RangedWeaponNames.txt │ │ ├── Vanilla_SkillCardNames.txt │ │ └── Vanilla_SkillNames.txt │ ├── SavePersona5.cs │ └── Types/ │ ├── ArcanaType.cs │ ├── Characters.cs │ ├── Demon.cs │ ├── Equipment.cs │ ├── Inventory.cs │ ├── Skill.cs │ ├── SkillRoyal.cs │ └── Trait.cs ├── KHSave.LibRecom/ │ ├── Attributes/ │ │ ├── CardEnemyAttribute.cs │ │ ├── CardFriendAttribute.cs │ │ ├── CardItemAttribute.cs │ │ ├── CardMagicAttribute.cs │ │ ├── CardMapAttribute.cs │ │ ├── CardSpecialAttribute.cs │ │ ├── CardSummonAttribute.cs │ │ ├── CardWeaponAttribute.cs │ │ └── CardWorldAttribute.cs │ ├── DataRecom.cs │ ├── DataRecomMcWork.cs │ ├── DataRecomTable0.cs │ ├── DataRecomTable1.cs │ ├── DataRecomTable2.cs │ ├── KHSave.LibRecom.csproj │ ├── Models/ │ │ ├── Card.cs │ │ ├── CardFlags.cs │ │ ├── CardModel.cs │ │ ├── FriendsFlags.cs │ │ ├── Kh2CardFlags.cs │ │ ├── PoohFlags.cs │ │ ├── SkillFlags.cs │ │ ├── StoryFlag.cs │ │ └── TutorialFlags.cs │ ├── SaveKhRecom.cs │ └── Types/ │ ├── CardType.cs │ ├── Difficulty.cs │ ├── PlayMode.cs │ └── SoundMode.cs ├── KHSave.SaveEditor/ │ ├── App.config │ ├── App.manifest │ ├── App.xaml │ ├── App.xaml.cs │ ├── Interfaces/ │ │ ├── IAlertMessage.cs │ │ ├── IApplicationStartup.cs │ │ ├── IFileDialogManager.cs │ │ ├── IReporter.cs │ │ ├── IUpdater.cs │ │ └── IWindowManager.cs │ ├── KHSave.SaveEditor.csproj │ ├── Models/ │ │ ├── PatreonInfo.cs │ │ ├── PatronModel.cs │ │ ├── ServiceMessage.cs │ │ └── SponsorshipInfo.cs │ ├── Properties/ │ │ ├── Resources.Designer.cs │ │ └── Resources.resx │ ├── Services/ │ │ ├── AlertMessage.cs │ │ ├── ContentFactory.cs │ │ ├── DesktopAppIdentity.cs │ │ ├── FileDialogManager.cs │ │ ├── IAppIdentity.cs │ │ ├── PatreonService.cs │ │ ├── Pcsx2MemoryService.cs │ │ ├── ReporterService.cs │ │ ├── TransferService.cs │ │ ├── UpdaterService.cs │ │ └── WindowManager.cs │ ├── StyledControls.xaml │ ├── VersionCheck/ │ │ └── DesktopCheckCurrentVersion.cs │ ├── ViewModels/ │ │ ├── HomeViewModel.cs │ │ ├── MainWindowViewModel.cs │ │ └── PatronViewModel.cs │ ├── Views/ │ │ ├── AttachToPcsx2GameWindow.xaml │ │ ├── AttachToPcsx2GameWindow.xaml.cs │ │ ├── AttachToProcessWindow.xaml │ │ ├── AttachToProcessWindow.xaml.cs │ │ ├── HomeView.xaml │ │ ├── HomeView.xaml.cs │ │ ├── MainWindow.xaml │ │ ├── MainWindow.xaml.cs │ │ ├── PatronView.xaml │ │ ├── PatronView.xaml.cs │ │ ├── ServiceMessageView.xaml │ │ ├── ServiceMessageView.xaml.cs │ │ ├── UpdateWindow.xaml │ │ └── UpdateWindow.xaml.cs │ └── packages.config ├── KHSave.SaveEditor.Common/ │ ├── Contracts/ │ │ ├── IGetSave.cs │ │ ├── IOpenStream.cs │ │ ├── IRefreshUi.cs │ │ └── IWriteToStream.cs │ ├── Controls/ │ │ ├── ItemComboBox.xaml │ │ ├── ItemComboBox.xaml.cs │ │ └── TwoEqualColumnsStackPanel.cs │ ├── Exceptions/ │ │ ├── ImageTooLargeException.cs │ │ ├── SaveNotSupportedException.cs │ │ └── VisualException.cs │ ├── Global.cs │ ├── KHSave.SaveEditor.Common.csproj │ ├── Models/ │ │ ├── EnumIconTypeModel.cs │ │ ├── GenericEntryModel.cs │ │ ├── GenericEnumListModel.cs │ │ ├── GenericListModel.cs │ │ ├── ItemComboBoxModel.cs │ │ └── KhEnumListModel.cs │ ├── ProcessStream.cs │ ├── Services/ │ │ ├── ArchiveWriteToStream.cs │ │ ├── GenericEqualityComparer.cs │ │ ├── IconService.cs │ │ └── SearchEngine.cs │ ├── ViewModels/ │ │ ├── ArchiveEntryViewModel.cs │ │ └── ArchiveManagerViewModel.cs │ └── Views/ │ ├── ArchiveManagerView.xaml │ └── ArchiveManagerView.xaml.cs ├── KHSave.SaveEditor.Ff7Remake/ │ ├── Data/ │ │ ├── BgmPreset.cs │ │ ├── ItemsPreset.cs │ │ └── LocationsPreset.cs │ ├── KHSave.SaveEditor.Ff7Remake.csproj │ ├── KHSave.SaveEditor.Ff7Remake_x53vqark_wpftmp.csproj │ ├── Models/ │ │ ├── BgmModel.cs │ │ ├── ChapterCharacterEntryModel.cs │ │ ├── ChapterEntryModel.cs │ │ ├── ChapterObjectEntry.cs │ │ ├── CharacterEntryModel.cs │ │ ├── ChunkEntryModel.cs │ │ ├── EquipmentEntryModel.cs │ │ ├── InventroyEntryModel.cs │ │ ├── ItemModel.cs │ │ └── MateriaEntryModel.cs │ ├── ViewModels/ │ │ ├── ChaptersViewModel.cs │ │ ├── CharactersViewModel.cs │ │ ├── DeveloperViewModel.cs │ │ ├── EquipmentsViewModel.cs │ │ ├── FF7RMainViewModel.cs │ │ ├── GlobalViewModel.cs │ │ ├── InventoryViewModel.cs │ │ ├── MateriaViewModel.cs │ │ ├── TeleportViewModel.cs │ │ ├── Unknown1ViewModel.cs │ │ ├── Unknown2ViewModel.cs │ │ └── Unknown3ViewModel.cs │ └── Views/ │ ├── ChapterEntryView.xaml │ ├── ChapterEntryView.xaml.cs │ ├── ChapterMainView.xaml │ ├── ChapterMainView.xaml.cs │ ├── ChapterObjectsView.xaml │ ├── ChapterObjectsView.xaml.cs │ ├── ChapterPlayableView.xaml │ ├── ChapterPlayableView.xaml.cs │ ├── ChaptersView.xaml │ ├── ChaptersView.xaml.cs │ ├── CharacterEntryView.xaml │ ├── CharacterEntryView.xaml.cs │ ├── CharactersView.xaml │ ├── CharactersView.xaml.cs │ ├── DeveloperView.xaml │ ├── DeveloperView.xaml.cs │ ├── EquipmentEntryView.xaml │ ├── EquipmentEntryView.xaml.cs │ ├── EquipmentsView.xaml │ ├── EquipmentsView.xaml.cs │ ├── FF7RMainView.xaml │ ├── FF7RMainView.xaml.cs │ ├── GlobalView.xaml │ ├── GlobalView.xaml.cs │ ├── InventoryEntryView.xaml │ ├── InventoryEntryView.xaml.cs │ ├── InventoryView.xaml │ ├── InventoryView.xaml.cs │ ├── MateriaEntryView.xaml │ ├── MateriaEntryView.xaml.cs │ ├── MateriaView.xaml │ ├── MateriaView.xaml.cs │ ├── PositionView.xaml │ ├── PositionView.xaml.cs │ ├── TeleportWindow.xaml │ ├── TeleportWindow.xaml.cs │ ├── Unknown1View.xaml │ ├── Unknown1View.xaml.cs │ ├── Unknown2View.xaml │ ├── Unknown2View.xaml.cs │ ├── Unknown3View.xaml │ └── Unknown3View.xaml.cs ├── KHSave.SaveEditor.Kh02/ │ ├── KHSave.SaveEditor.Kh02.csproj │ ├── MainView.xaml │ ├── MainView.xaml.cs │ ├── Models/ │ │ └── SlotListModel.cs │ ├── ViewModels/ │ │ ├── GlobalSystemViewModel.cs │ │ ├── Kh02ViewModel.cs │ │ └── SlotViewModel.cs │ └── Views/ │ ├── SystemView.xaml │ └── SystemView.xaml.cs ├── KHSave.SaveEditor.Kh1/ │ ├── Interfaces/ │ │ └── IGetAbilities.cs │ ├── KHSave.SaveEditor.Kh1.csproj │ ├── MainView.xaml │ ├── MainView.xaml.cs │ ├── Models/ │ │ └── InventoryItemModel.cs │ ├── Service/ │ │ ├── EquipmentManagerFactory.cs │ │ └── IEquipmentManager.cs │ ├── ViewModels/ │ │ ├── AbilityViewModel.cs │ │ ├── EquipmentItemsViewModel.cs │ │ ├── InventoryViewModel.cs │ │ ├── Kh1ViewModel.cs │ │ ├── PlayerViewModel.cs │ │ ├── PlayersViewModel.cs │ │ └── SystemViewModel.cs │ └── Views/ │ ├── AbilityView.xaml │ ├── AbilityView.xaml.cs │ ├── InventoryView.xaml │ ├── InventoryView.xaml.cs │ ├── PlayerEquipmentView.xaml │ ├── PlayerEquipmentView.xaml.cs │ ├── PlayerView.xaml │ ├── PlayerView.xaml.cs │ ├── PlayersView.xaml │ ├── PlayersView.xaml.cs │ ├── SystemView.xaml │ └── SystemView.xaml.cs ├── KHSave.SaveEditor.Kh2/ │ ├── Data/ │ │ └── Rooms.cs │ ├── Interfaces/ │ │ └── IResourceGetter.cs │ ├── KHSave.SaveEditor.Kh2.csproj │ ├── MainView.xaml │ ├── MainView.xaml.cs │ ├── Models/ │ │ ├── AbilityModel.cs │ │ ├── InventoryItemModel.cs │ │ ├── MapScriptModel.cs │ │ ├── ProgressModel.cs │ │ └── RoomModel.cs │ ├── Service/ │ │ ├── EquipmentManagerFactory.cs │ │ └── IEquipmentManager.cs │ ├── ViewModels/ │ │ ├── CharacterViewModel.cs │ │ ├── CharactersViewModel.cs │ │ ├── DriveFormsViewModel.cs │ │ ├── EquipmentItemsViewModel.cs │ │ ├── InventoryViewModel.cs │ │ ├── Kh2ViewModel.cs │ │ ├── ProgressViewModel.cs │ │ ├── RoomViewModel.cs │ │ ├── RoomVisitedViewModel.cs │ │ ├── SystemViewModel.cs │ │ └── WorldsViewModel.cs │ └── Views/ │ ├── DriveFormView.xaml │ ├── DriveFormView.xaml.cs │ ├── DriveFormsView.xaml │ ├── DriveFormsView.xaml.cs │ ├── InventoryView.xaml │ ├── InventoryView.xaml.cs │ ├── PlayerEquipmentView.xaml │ ├── PlayerEquipmentView.xaml.cs │ ├── PlayerView.xaml │ ├── PlayerView.xaml.cs │ ├── PlayersView.xaml │ ├── PlayersView.xaml.cs │ ├── ProgressView.xaml │ ├── ProgressView.xaml.cs │ ├── RoomVisitedView.xaml │ ├── RoomVisitedView.xaml.cs │ ├── SystemView.xaml │ ├── SystemView.xaml.cs │ ├── WorldView.xaml │ ├── WorldView.xaml.cs │ ├── WorldsView.xaml │ └── WorldsView.xaml.cs ├── KHSave.SaveEditor.Kh3/ │ ├── KHSave.SaveEditor.Kh3.csproj │ ├── KHSave.SaveEditor.Kh3_kwhjhtac_wpftmp.csproj │ ├── MainView.xaml │ ├── MainView.xaml.cs │ ├── Models/ │ │ ├── AttractionRecordItemModel.cs │ │ ├── EquipmentItemEntryViewModel.cs │ │ ├── FlantasticModel.cs │ │ ├── InventoryItemViewModel.cs │ │ ├── MapViewModel.cs │ │ ├── MaterialModel.cs │ │ ├── RecordAttractionListModel.cs │ │ ├── RecordShotlockListModel.cs │ │ ├── ShotlockRecordItemModel.cs │ │ └── SpawnModel.cs │ ├── ViewModels/ │ │ ├── AbilitiesViewModel.cs │ │ ├── EquipmentItemsViewModel.cs │ │ ├── InventoryViewModel.cs │ │ ├── Kh3ViewModel.cs │ │ ├── MaterialsViewModel.cs │ │ ├── PartyViewModel.cs │ │ ├── PhotoEntryViewModel.cs │ │ ├── PhotosViewModel.cs │ │ ├── PlayerViewModel.cs │ │ ├── PlayersViewModel.cs │ │ ├── RecordsViewModel.cs │ │ ├── ShortcutsViewModel.cs │ │ ├── StoryViewModel.cs │ │ └── SystemViewModel.cs │ └── Views/ │ ├── EquipmentItemEntryView.xaml │ ├── EquipmentItemEntryView.xaml.cs │ ├── EquipmentItemsView.xaml │ ├── EquipmentItemsView.xaml.cs │ ├── InventoryView.xaml │ ├── InventoryView.xaml.cs │ ├── MaterialsView.xaml │ ├── MaterialsView.xaml.cs │ ├── PartyView.xaml │ ├── PartyView.xaml.cs │ ├── PhotosView.xaml │ ├── PhotosView.xaml.cs │ ├── PlayerAbilityView.xaml │ ├── PlayerAbilityView.xaml.cs │ ├── PlayerEquipmentView.xaml │ ├── PlayerEquipmentView.xaml.cs │ ├── PlayerStatusView.xaml │ ├── PlayerStatusView.xaml.cs │ ├── PlayerView.xaml │ ├── PlayerView.xaml.cs │ ├── PlayersView.xaml │ ├── PlayersView.xaml.cs │ ├── RecordMinigamesView.xaml │ ├── RecordMinigamesView.xaml.cs │ ├── RecordsView.xaml │ ├── RecordsView.xaml.cs │ ├── ShortcutsView.xaml │ ├── ShortcutsView.xaml.cs │ ├── StoryView.xaml │ ├── StoryView.xaml.cs │ ├── SystemView.xaml │ └── SystemView.xaml.cs ├── KHSave.SaveEditor.KhBbs/ │ ├── KHSave.SaveEditor.KhBbs.csproj │ ├── MainView.xaml │ ├── MainView.xaml.cs │ ├── Models/ │ │ └── CommandListModel.cs │ ├── ViewModels/ │ │ ├── CharacterViewModel.cs │ │ ├── CommandListViewModel.cs │ │ ├── CommandViewModel.cs │ │ ├── DeckViewModel.cs │ │ ├── DecksViewModel.cs │ │ ├── KhBbsViewModel.cs │ │ └── SystemViewModel.cs │ └── Views/ │ ├── CharacterView.xaml │ ├── CharacterView.xaml.cs │ ├── CommandListView.xaml │ ├── CommandListView.xaml.cs │ ├── CommandView.xaml │ ├── CommandView.xaml.cs │ ├── DeckView.xaml │ ├── DeckView.xaml.cs │ ├── DecksView.xaml │ ├── DecksView.xaml.cs │ ├── SystemView.xaml │ └── SystemView.xaml.cs ├── KHSave.SaveEditor.KhDDD/ │ ├── Interfaces/ │ │ └── IResourceGetter.cs │ ├── KHSave.SaveEditor.KhDDD.csproj │ ├── MainView.xaml │ ├── MainView.xaml.cs │ ├── ViewModels/ │ │ ├── CharacterViewModel.cs │ │ ├── CommandsViewModel.cs │ │ ├── DeckViewModel.cs │ │ ├── DecksViewModel.cs │ │ ├── DreamEaterViewModel.cs │ │ ├── DreamEatersViewModel.cs │ │ ├── KhDDDViewModel.cs │ │ └── SystemViewModel.cs │ └── Views/ │ ├── Character.xaml │ ├── Character.xaml.cs │ ├── CommandsView.xaml │ ├── CommandsView.xaml.cs │ ├── Deck.xaml │ ├── Deck.xaml.cs │ ├── Decks.xaml │ ├── Decks.xaml.cs │ ├── DreamEater.xaml │ ├── DreamEater.xaml.cs │ ├── DreamEaters.xaml │ ├── DreamEaters.xaml.cs │ ├── SystemView.xaml │ └── SystemView.xaml.cs ├── KHSave.SaveEditor.KhRecom/ │ ├── Constants.cs │ ├── Interfaces/ │ │ └── ICardCountService.cs │ ├── KHSave.SaveEditor.KhRecom.csproj │ ├── MainView.xaml │ ├── MainView.xaml.cs │ ├── Models/ │ │ └── CardIndex.cs │ ├── ViewModels/ │ │ ├── CardInventoryEntryViewModel.cs │ │ ├── CardInventoryViewModel.cs │ │ ├── KhRecomViewModel.cs │ │ ├── ProgressViewModel.cs │ │ ├── SettingsViewModel.cs │ │ └── SystemViewModel.cs │ └── Views/ │ ├── CardInventoryEntryView.xaml │ ├── CardInventoryEntryView.xaml.cs │ ├── CardInventoryView.xaml │ ├── CardInventoryView.xaml.cs │ ├── ProgressView.xaml │ ├── ProgressView.xaml.cs │ ├── SettingsView.xaml │ ├── SettingsView.xaml.cs │ ├── SystemView.xaml │ └── SystemView.xaml.cs ├── KHSave.SaveEditor.Persona3/ │ ├── Interfaces/ │ │ ├── IPersonaList.cs │ │ └── ISkillList.cs │ ├── KHSave.SaveEditor.Persona3.csproj │ ├── Models/ │ │ ├── PersonaModel.cs │ │ └── SkillModel.cs │ ├── ViewModels/ │ │ ├── CompendiumViewModel.cs │ │ ├── Persona3MainViewModel.cs │ │ └── PersonaViewModel.cs │ └── Views/ │ ├── CompendiumView.xaml │ ├── CompendiumView.xaml.cs │ ├── Persona3MainView.xaml │ ├── Persona3MainView.xaml.cs │ ├── PersonaView.xaml │ └── PersonaView.xaml.cs ├── KHSave.SaveEditor.Persona5/ │ ├── Interfaces/ │ │ ├── IConsumableList.cs │ │ ├── IEquipmentList.cs │ │ ├── IPersonaList.cs │ │ └── ISkillList.cs │ ├── KHSave.SaveEditor.Persona5.csproj │ ├── Models/ │ │ └── EquipmentModel.cs │ ├── ViewModels/ │ │ ├── CharacterEntryViewModel.cs │ │ ├── CharactersViewModel.cs │ │ ├── CompendiumViewModel.cs │ │ ├── InventoryViewModel.cs │ │ ├── Persona5MainViewModel.cs │ │ ├── PersonaEntryViewModel.cs │ │ ├── PersonaViewModel.cs │ │ ├── RoomViewModel.cs │ │ ├── SkillViewModel.cs │ │ └── SystemViewModel.cs │ └── Views/ │ ├── CharacterView.xaml │ ├── CharacterView.xaml.cs │ ├── CharactersView.xaml │ ├── CharactersView.xaml.cs │ ├── CompendiumView.xaml │ ├── CompendiumView.xaml.cs │ ├── InventoryView.xaml │ ├── InventoryView.xaml.cs │ ├── Persona5MainView.xaml │ ├── Persona5MainView.xaml.cs │ ├── PersonaView.xaml │ ├── PersonaView.xaml.cs │ ├── SystemView.xaml │ └── SystemView.xaml.cs ├── KHSave.Tests/ │ ├── Ff7RemakeTests.cs │ ├── Helpers.cs │ ├── KHSave.Tests.csproj │ ├── Kh1Tests.cs │ ├── Kh2Tests.cs │ ├── Kh3Test.cs │ ├── KhBbsTests.cs │ ├── KhDDDTests.cs │ ├── PcArchiveTests.cs │ ├── Persona3Tests.cs │ ├── Persona5Tests.cs │ ├── Ps4SaveArchiveTests.cs │ ├── RecomTests.cs │ ├── Saves/ │ │ ├── BASLUS-21569Save2 │ │ ├── BASLUS-21799COM-02 │ │ ├── BISLPM-66676COM-01 │ │ ├── BISLPS-25198-05 │ │ ├── ff7remake000 │ │ ├── ff7remake007 │ │ └── kh02.sav │ ├── TransferTests.cs │ └── TrssvTest.cs ├── LICENSE ├── README.md ├── Tooling.MemoryWatcher/ │ ├── Configuration.cs │ ├── ProcessStream.cs │ ├── Program.cs │ ├── Tooling.MemoryWatcher.csproj │ └── config.yml ├── WindowsStoreSubmission/ │ ├── Package.appxmanifest │ └── WindowsStoreSubmission.wapproj ├── _config.yml ├── assets/ │ ├── banner.psd │ ├── banner_new.psd │ ├── card.psd │ ├── coin.psd │ ├── icon-circular.psd │ └── icon.psd ├── docs/ │ └── decryption.md ├── manifests/ │ └── x/ │ └── Xeeynamo/ │ └── KingdomSaveEditor/ │ └── 1.15.1/ │ └── Xeeynamo.KingdomSaveEditor.yml └── resources/ ├── ff7r-meta-bgm.yml ├── ff7r-meta-items.yml └── ff7r-meta-locations.yml ================================================ FILE CONTENTS ================================================ ================================================ FILE: .editorconfig ================================================ root = true [*] charset = utf-8 insert_final_newline = true indent_style = space indent_size = 4 tab_size = 4 [*.cs] csharp_new_line_before_open_brace = all csharp_new_line_before_else = true csharp_new_line_before_catch = true csharp_new_line_before_finally = true csharp_new_line_between_query_expression_clauses = true csharp_indent_case_contents = true csharp_indent_switch_labels = true csharp_indent_labels = one_less_than_current csharp_indent_block_contents = true csharp_indent_braces = false csharp_indent_case_contents_when_block = false csharp_indent_case_contents_when_block = false csharp_space_after_keywords_in_control_flow_statements = true csharp_space_before_colon_in_inheritance_clause = true csharp_space_after_colon_in_inheritance_clause = true csharp_space_around_binary_operators = before_and_after csharp_space_between_method_declaration_parameter_list_parentheses = false csharp_space_between_method_declaration_empty_parameter_list_parentheses = false csharp_space_between_method_declaration_name_and_open_parenthesis = false csharp_space_between_method_call_parameter_list_parentheses = false csharp_space_between_method_call_empty_parameter_list_parentheses = false csharp_space_between_method_call_name_and_opening_parenthesis = false csharp_space_after_comma = true csharp_space_before_comma = false csharp_space_after_dot = false csharp_space_before_dot = false csharp_space_after_semicolon_in_for_statement = true csharp_space_before_semicolon_in_for_statement = false csharp_space_around_declaration_statements = false csharp_space_before_open_square_brackets = false csharp_space_between_empty_square_brackets = false csharp_space_between_square_brackets = false csharp_preserve_single_line_statements = false csharp_preserve_single_line_blocks = true csharp_using_directive_placement = outside_namespace:silent csharp_prefer_simple_using_statement = true:suggestion csharp_prefer_braces = true:silent csharp_style_namespace_declarations = block_scoped:silent csharp_style_prefer_method_group_conversion = true:silent csharp_style_expression_bodied_methods = false:silent csharp_style_expression_bodied_constructors = false:silent csharp_style_expression_bodied_operators = false:silent csharp_style_expression_bodied_properties = true:silent csharp_style_expression_bodied_indexers = true:silent csharp_style_expression_bodied_accessors = true:silent csharp_style_expression_bodied_lambdas = true:silent csharp_style_expression_bodied_local_functions = false:silent [*.{cs,vb}] #### Naming styles #### # Naming rules dotnet_naming_rule.interface_should_be_begins_with_i.severity = suggestion dotnet_naming_rule.interface_should_be_begins_with_i.symbols = interface dotnet_naming_rule.interface_should_be_begins_with_i.style = begins_with_i dotnet_naming_rule.types_should_be_pascal_case.severity = suggestion dotnet_naming_rule.types_should_be_pascal_case.symbols = types dotnet_naming_rule.types_should_be_pascal_case.style = pascal_case dotnet_naming_rule.non_field_members_should_be_pascal_case.severity = suggestion dotnet_naming_rule.non_field_members_should_be_pascal_case.symbols = non_field_members dotnet_naming_rule.non_field_members_should_be_pascal_case.style = pascal_case # Symbol specifications dotnet_naming_symbols.interface.applicable_kinds = interface dotnet_naming_symbols.interface.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected dotnet_naming_symbols.interface.required_modifiers = dotnet_naming_symbols.types.applicable_kinds = class, struct, interface, enum dotnet_naming_symbols.types.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected dotnet_naming_symbols.types.required_modifiers = dotnet_naming_symbols.non_field_members.applicable_kinds = property, event, method dotnet_naming_symbols.non_field_members.applicable_accessibilities = public, internal, private, protected, protected_internal, private_protected dotnet_naming_symbols.non_field_members.required_modifiers = # Naming styles dotnet_naming_style.begins_with_i.required_prefix = I dotnet_naming_style.begins_with_i.required_suffix = dotnet_naming_style.begins_with_i.word_separator = dotnet_naming_style.begins_with_i.capitalization = pascal_case dotnet_naming_style.pascal_case.required_prefix = dotnet_naming_style.pascal_case.required_suffix = dotnet_naming_style.pascal_case.word_separator = dotnet_naming_style.pascal_case.capitalization = pascal_case dotnet_naming_style.pascal_case.required_prefix = dotnet_naming_style.pascal_case.required_suffix = dotnet_naming_style.pascal_case.word_separator = dotnet_naming_style.pascal_case.capitalization = pascal_case dotnet_style_operator_placement_when_wrapping = beginning_of_line tab_width = 4 ================================================ FILE: .gitattributes ================================================ *.sln text merge=union *.csproj text merge=union ================================================ FILE: .github/FUNDING.yml ================================================ # These are supported funding model platforms github: [Xeeynamo] ================================================ FILE: .github/ISSUE_TEMPLATE/bug-report.md ================================================ --- name: Bug report about: Used when a user wants to report a bug title: GAME NAME - BRIEF EXPLAINATION labels: enhancement assignees: Xeeynamo --- * Game name: - * Platform: - (eg. PC, PS2, etc.) Explain which action you were trying to perform before facing the bug and error message. ================================================ FILE: .github/ISSUE_TEMPLATE/feature-request.md ================================================ --- name: Feature request about: Used when a user wants to request a feature title: GAME NAME - BRIEF EXPLAINATION labels: enhancement assignees: Xeeynamo --- * Game name: - * Platform: - (eg. PC, PS2, etc.) --- insert your feature request description here--- ================================================ FILE: .github/ISSUE_TEMPLATE/ff7r-missing-item-name-request.md ================================================ --- name: FF7R Missing item name request about: Used when a user wants to add a missing item name title: FF7R Missing item name request labels: ff7r-item assignees: Xeeynamo --- Item name: `eg. Hi-Potion` PLEAE REMOVE THE FOLLOWING TEXT BEFORE SUBMITTING THE ISSUE: Before opening this issue, please be 100% sure that the item you are reporting is the correct one. To prove the item name, you can set a specific amount and see if in-game the value is there, or you set the amount of all your inventory to 0 but this item. The in-game inventory should be empty and the only item is the one you were searching for. ================================================ FILE: .github/ISSUE_TEMPLATE/ff7r-teleport-coordinates-request.md ================================================ --- name: FF7R Teleport coordinates request about: Used when a user wants to add a specific location with coordinates title: FF7R Teleport coordinates request labels: ff7r-location assignees: Xeeynamo --- Chapter: `1-18` Coordinates: `0, 0, 0` Out of bounds: `yes|no` Short description: Please describe here PLEAE REMOVE THE FOLLOWING TEXT BEFORE SUBMITTING THE ISSUE: Please also attach a screenshot, if possible, of the location you decided to request. You can find the coordinates to paste here on the Teleport window. ================================================ FILE: .github/dependabot.yml ================================================ # To get started with Dependabot version updates, you'll need to specify which # package ecosystems to update and where the package manifests are located. # Please see the documentation for all configuration options: # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates version: 2 updates: - package-ecosystem: "nuget" # See documentation for possible values directory: "/" # Location of package manifests schedule: interval: "daily" ================================================ FILE: .github/workflows/format-code.yml ================================================ name: Format code on: push: pull_request: jobs: format-code: runs-on: ubuntu-latest container: image: mcr.microsoft.com/dotnet/sdk:latest steps: - name: Checkout repository uses: actions/checkout@v2 - name: Download formatting tool run: dotnet tool install -g dotnet-format - name: Format source code run: | export PATH="$PATH:/github/home/.dotnet/tools" dotnet format - name: Check if files have been modified id: git-check run: echo ::set-output name=modified::$(if git diff-index --quiet HEAD --; then echo "false"; else echo "true"; fi) - name: Push changes if: steps.git-check.outputs.modified == 'true' run: | git config --global user.name 'Formatting bot' git config --global user.email 'xeeynamo@users.noreply.github.com' git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }} git commit -am "Format code" git push ================================================ FILE: .github/workflows/test.yml ================================================ name: Tests on: push: branches: - master pull_request: types: [assigned, opened, synchronize, reopened] jobs: run-tests: runs-on: ubuntu-latest container: image: mcr.microsoft.com/dotnet/sdk:6.0 steps: - name: Checkout repository uses: actions/checkout@v2 with: submodules: recursive - name: Execute test suite run: dotnet test KHSave.Tests ================================================ FILE: .gitignore ================================================ ## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # User-specific files *.suo *.user *.userosscache *.sln.docstates # User-specific files (MonoDevelop/Xamarin Studio) *.userprefs # Build results [Dd]ebug/ [Dd]ebugPublic/ [Rr]elease/ [Rr]eleases/ x64/ x86/ bld/ [Bb]in/ [Oo]bj/ [Ll]og/ # Visual Studio 2015/2017 cache/options directory .vs/ # Uncomment if you have tasks that create the project's static files in wwwroot #wwwroot/ # Visual Studio 2017 auto generated files Generated\ Files/ # MSTest test Results [Tt]est[Rr]esult*/ [Bb]uild[Ll]og.* # NUNIT *.VisualState.xml TestResult.xml # Build Results of an ATL Project [Dd]ebugPS/ [Rr]eleasePS/ dlldata.c # Benchmark Results BenchmarkDotNet.Artifacts/ # .NET Core project.lock.json project.fragment.lock.json artifacts/ **/Properties/launchSettings.json # StyleCop StyleCopReport.xml # Files built by Visual Studio *_i.c *_p.c *_i.h *.ilk *.meta *.obj *.iobj *.pch *.pdb *.ipdb *.pgc *.pgd *.rsp *.sbr *.tlb *.tli *.tlh *.tmp *.tmp_proj *.log *.vspscc *.vssscc .builds *.pidb *.svclog *.scc # Chutzpah Test files _Chutzpah* # Visual C++ cache files ipch/ *.aps *.ncb *.opendb *.opensdf *.sdf *.cachefile *.VC.db *.VC.VC.opendb # Visual Studio profiler *.psess *.vsp *.vspx *.sap # Visual Studio Trace Files *.e2e # TFS 2012 Local Workspace $tf/ # Guidance Automation Toolkit *.gpState # ReSharper is a .NET coding add-in _ReSharper*/ *.[Rr]e[Ss]harper *.DotSettings.user # JustCode is a .NET coding add-in .JustCode # TeamCity is a build add-in _TeamCity* # DotCover is a Code Coverage Tool *.dotCover # AxoCover is a Code Coverage Tool .axoCover/* !.axoCover/settings.json # Visual Studio code coverage results *.coverage *.coveragexml # NCrunch _NCrunch_* .*crunch*.local.xml nCrunchTemp_* # MightyMoose *.mm.* AutoTest.Net/ # Web workbench (sass) .sass-cache/ # Installshield output folder [Ee]xpress/ # DocProject is a documentation generator add-in DocProject/buildhelp/ DocProject/Help/*.HxT DocProject/Help/*.HxC DocProject/Help/*.hhc DocProject/Help/*.hhk DocProject/Help/*.hhp DocProject/Help/Html2 DocProject/Help/html # Click-Once directory publish/ # Publish Web Output *.[Pp]ublish.xml *.azurePubxml # Note: Comment the next line if you want to checkin your web deploy settings, # but database connection strings (with potential passwords) will be unencrypted *.pubxml *.publishproj # Microsoft Azure Web App publish settings. Comment the next line if you want to # checkin your Azure Web App publish settings, but sensitive information contained # in these scripts will be unencrypted PublishScripts/ # NuGet Packages *.nupkg # The packages folder can be ignored because of Package Restore **/[Pp]ackages/* # except build/, which is used as an MSBuild target. !**/[Pp]ackages/build/ # Uncomment if necessary however generally it will be regenerated when needed #!**/[Pp]ackages/repositories.config # NuGet v3's project.json files produces more ignorable files *.nuget.props *.nuget.targets # Microsoft Azure Build Output csx/ *.build.csdef # Microsoft Azure Emulator ecf/ rcf/ # Windows Store app package directories and files AppPackages/ BundleArtifacts/ Package.StoreAssociation.xml _pkginfo.txt *.appx # Visual Studio cache files # files ending in .cache can be ignored *.[Cc]ache # but keep track of directories ending in .cache !*.[Cc]ache/ # Others ClientBin/ ~$* *~ *.dbmdl *.dbproj.schemaview *.jfm *.pfx *.publishsettings orleans.codegen.cs # Including strong name files can present a security risk # (https://github.com/github/gitignore/pull/2483#issue-259490424) #*.snk # Since there are multiple workflows, uncomment next line to ignore bower_components # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) #bower_components/ # RIA/Silverlight projects Generated_Code/ # Backup & report files from converting an old project file # to a newer Visual Studio version. Backup files are not needed, # because we have git ;-) _UpgradeReport_Files/ Backup*/ UpgradeLog*.XML UpgradeLog*.htm ServiceFabricBackup/ *.rptproj.bak # SQL Server files *.mdf *.ldf *.ndf # Business Intelligence projects *.rdl.data *.bim.layout *.bim_*.settings *.rptproj.rsuser # Microsoft Fakes FakesAssemblies/ # GhostDoc plugin setting file *.GhostDoc.xml # Node.js Tools for Visual Studio .ntvs_analysis.dat node_modules/ # Visual Studio 6 build log *.plg # Visual Studio 6 workspace options file *.opt # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) *.vbw # Visual Studio LightSwitch build output **/*.HTMLClient/GeneratedArtifacts **/*.DesktopClient/GeneratedArtifacts **/*.DesktopClient/ModelManifest.xml **/*.Server/GeneratedArtifacts **/*.Server/ModelManifest.xml _Pvt_Extensions # Paket dependency manager .paket/paket.exe paket-files/ # FAKE - F# Make .fake/ # JetBrains Rider .idea/ *.sln.iml # CodeRush .cr/ # Python Tools for Visual Studio (PTVS) __pycache__/ *.pyc # Cake - Uncomment if you are using it # tools/** # !tools/packages.config # Tabs Studio *.tss # Telerik's JustMock configuration file *.jmconfig # BizTalk build output *.btp.cs *.btm.cs *.odx.cs *.xsd.cs # OpenCover UI analysis results OpenCover/ # Azure Stream Analytics local run output ASALocalRun/ # MSBuild Binary and Structured Log *.binlog # NVidia Nsight GPU debugger configuration file *.nvuser # MFractors (Xamarin productivity tool) working folder .mfractor/ ================================================ FILE: .gitmodules ================================================ [submodule "XeEngine.Tools.Public"] path = XeEngine.Tools.Public url = https://github.com/xeeynamo/XeEngine.Tools.Public [submodule "Xe.ReleaseUpdater"] path = Xe.ReleaseUpdater url = https://github.com/Xeeynamo/Xe.ReleaseUpdater.git ================================================ FILE: CNAME ================================================ kingdomsaveeditor.xee.dev ================================================ FILE: KH3SaveEditor.sln ================================================ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.0.32014.148 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.SaveEditor", "KHSave.SaveEditor\KHSave.SaveEditor.csproj", "{3F04C476-E496-4B96-959F-5C3B3EC4D4E4}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.Tests", "KHSave.Tests\KHSave.Tests.csproj", "{A0A13F70-E37B-4D86-824C-61F3483A2CF8}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave", "KHSave\KHSave.csproj", "{66531854-A216-4F15-ABE5-F723EA257BF2}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "XeEngine.Tools.Public", "XeEngine.Tools.Public", "{F556CBD8-76F3-45A3-9619-8FB81FA64C22}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xe", "XeEngine.Tools.Public\Xe\Xe.csproj", "{61D2474A-EDC5-4792-A4E6-7E935856617A}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xe.Drawing", "XeEngine.Tools.Public\Xe.Drawing\Xe.Drawing.csproj", "{9ECB58D2-3790-4693-8A40-FF2584F263E6}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xe.Tools", "XeEngine.Tools.Public\Xe.Tools\Xe.Tools.csproj", "{2F15C257-7E50-42B5-ADB4-7534B88F466B}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xe.Tools.Wpf", "XeEngine.Tools.Public\Xe.Tools.Wpf\Xe.Tools.Wpf.csproj", "{F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Documentation", "Documentation", "{ABFEAC30-491D-4FDE-A90C-C8E6107F67D5}" ProjectSection(SolutionItems) = preProject README.md = README.md EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Xe.ReleaseUpdater", "Xe.ReleaseUpdater", "{A69D32C8-AA20-4871-858F-31D84193FA1C}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xe.VersionCheck", "Xe.ReleaseUpdater\Xe.VersionCheck\Xe.VersionCheck.csproj", "{F37CC0C9-BFE1-4563-87D8-960FE630E601}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Xe.Http", "Xe.ReleaseUpdater\Xe.Http\Xe.Http.csproj", "{52E2ACD1-845A-41DC-8318-22A0A7274677}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.Lib02", "KHSave.Lib02\KHSave.Lib02.csproj", "{FE823BD9-B309-49E6-85F1-ADAE55752B72}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.Lib3", "KHSave.Lib3\KHSave.Lib3.csproj", "{7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.SaveEditor.Kh3", "KHSave.SaveEditor.Kh3\KHSave.SaveEditor.Kh3.csproj", "{873CD9B2-3984-44DD-A077-B5093714EC56}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.SaveEditor.Common", "KHSave.SaveEditor.Common\KHSave.SaveEditor.Common.csproj", "{916C5797-18A6-4191-8FAA-4CA0B89E0BA9}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.SaveEditor.Kh02", "KHSave.SaveEditor.Kh02\KHSave.SaveEditor.Kh02.csproj", "{13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.Lib2", "KHSave.Lib2\KHSave.Lib2.csproj", "{BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.SaveEditor.Kh2", "KHSave.SaveEditor.Kh2\KHSave.SaveEditor.Kh2.csproj", "{D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.Archives", "KHSave.Archives\KHSave.Archives.csproj", "{93FD8BB6-B750-4BD3-8143-043286DA1E22}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.LibRecom", "KHSave.LibRecom\KHSave.LibRecom.csproj", "{E277131E-3A87-4087-821A-D1E54D3A4FA9}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.SaveEditor.KhRecom", "KHSave.SaveEditor.KhRecom\KHSave.SaveEditor.KhRecom.csproj", "{947C9653-C8D7-4D95-BE62-8101A3C9D824}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.LibFf7Remake", "KHSave.LibFf7Remake\KHSave.LibFf7Remake.csproj", "{A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.SaveEditor.Ff7Remake", "KHSave.SaveEditor.Ff7Remake\KHSave.SaveEditor.Ff7Remake.csproj", "{8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.SaveEditor.Kh1", "KHSave.SaveEditor.Kh1\KHSave.SaveEditor.Kh1.csproj", "{E168AAE0-7730-45FD-A059-6994DB237C85}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.Lib1", "KHSave.Lib1\KHSave.Lib1.csproj", "{34CAFA86-2B8D-41D0-8218-5FEC87170E45}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.LibBbs", "KHSave.LibBbs\KHSave.LibBbs.csproj", "{1A3285D7-5DC5-4135-9F38-503D6DB6469A}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.SaveEditor.KhBbs", "KHSave.SaveEditor.KhBbs\KHSave.SaveEditor.KhBbs.csproj", "{EDD82FFB-2811-4364-AE3F-FD3EA0C54312}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tooling.MemoryWatcher", "Tooling.MemoryWatcher\Tooling.MemoryWatcher.csproj", "{58B80047-B051-49F8-99E0-2FC3FB34F39A}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.LibPersona5", "KHSave.LibPersona5\KHSave.LibPersona5.csproj", "{BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.SaveEditor.Persona5", "KHSave.SaveEditor.Persona5\KHSave.SaveEditor.Persona5.csproj", "{55C8BE35-B770-4FFF-92F8-1FD1792150F7}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.LibDDD", "KHSave.LibDDD\KHSave.LibDDD.csproj", "{BABA96A7-BEF2-450E-8502-11D36163B691}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.SaveEditor.KhDDD", "KHSave.SaveEditor.KhDDD\KHSave.SaveEditor.KhDDD.csproj", "{F85D2EEC-5C85-4443-B046-769F511ACB6F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{112978EC-90BA-40A5-80D3-6457DD67CB64}" ProjectSection(SolutionItems) = preProject .editorconfig = .editorconfig EndProjectSection EndProject Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "WindowsStoreSubmission", "WindowsStoreSubmission\WindowsStoreSubmission.wapproj", "{080A374C-D430-4FCB-96B8-889FDEBF58F2}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.LibPersona3", "KHSave.LibPersona3\KHSave.LibPersona3.csproj", "{17C5019E-53C9-4566-BAA0-9E2E139D6529}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "KHSave.SaveEditor.Persona3", "KHSave.SaveEditor.Persona3\KHSave.SaveEditor.Persona3.csproj", "{EA92AA97-BC63-4691-8483-39E9643D2086}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|ARM = Debug|ARM Debug|ARM64 = Debug|ARM64 Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU Release|ARM = Release|ARM Release|ARM64 = Release|ARM64 Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Debug|Any CPU.Build.0 = Debug|Any CPU {3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Debug|ARM.ActiveCfg = Debug|Any CPU {3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Debug|ARM.Build.0 = Debug|Any CPU {3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Debug|ARM64.ActiveCfg = Debug|Any CPU {3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Debug|ARM64.Build.0 = Debug|Any CPU {3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Debug|x64.ActiveCfg = Debug|Any CPU {3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Debug|x64.Build.0 = Debug|Any CPU {3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Debug|x86.ActiveCfg = Debug|Any CPU {3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Debug|x86.Build.0 = Debug|Any CPU {3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Release|Any CPU.ActiveCfg = Release|Any CPU {3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Release|Any CPU.Build.0 = Release|Any CPU {3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Release|ARM.ActiveCfg = Release|Any CPU {3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Release|ARM.Build.0 = Release|Any CPU {3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Release|ARM64.ActiveCfg = Release|Any CPU {3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Release|ARM64.Build.0 = Release|Any CPU {3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Release|x64.ActiveCfg = Release|Any CPU {3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Release|x64.Build.0 = Release|Any CPU {3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Release|x86.ActiveCfg = Release|Any CPU {3F04C476-E496-4B96-959F-5C3B3EC4D4E4}.Release|x86.Build.0 = Release|Any CPU {A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Debug|Any CPU.Build.0 = Debug|Any CPU {A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Debug|ARM.ActiveCfg = Debug|Any CPU {A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Debug|ARM.Build.0 = Debug|Any CPU {A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Debug|ARM64.ActiveCfg = Debug|Any CPU {A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Debug|ARM64.Build.0 = Debug|Any CPU {A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Debug|x64.ActiveCfg = Debug|Any CPU {A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Debug|x64.Build.0 = Debug|Any CPU {A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Debug|x86.ActiveCfg = Debug|Any CPU {A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Debug|x86.Build.0 = Debug|Any CPU {A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Release|Any CPU.ActiveCfg = Release|Any CPU {A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Release|Any CPU.Build.0 = Release|Any CPU {A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Release|ARM.ActiveCfg = Release|Any CPU {A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Release|ARM.Build.0 = Release|Any CPU {A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Release|ARM64.ActiveCfg = Release|Any CPU {A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Release|ARM64.Build.0 = Release|Any CPU {A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Release|x64.ActiveCfg = Release|Any CPU {A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Release|x64.Build.0 = Release|Any CPU {A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Release|x86.ActiveCfg = Release|Any CPU {A0A13F70-E37B-4D86-824C-61F3483A2CF8}.Release|x86.Build.0 = Release|Any CPU {66531854-A216-4F15-ABE5-F723EA257BF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {66531854-A216-4F15-ABE5-F723EA257BF2}.Debug|Any CPU.Build.0 = Debug|Any CPU {66531854-A216-4F15-ABE5-F723EA257BF2}.Debug|ARM.ActiveCfg = Debug|Any CPU {66531854-A216-4F15-ABE5-F723EA257BF2}.Debug|ARM.Build.0 = Debug|Any CPU {66531854-A216-4F15-ABE5-F723EA257BF2}.Debug|ARM64.ActiveCfg = Debug|Any CPU {66531854-A216-4F15-ABE5-F723EA257BF2}.Debug|ARM64.Build.0 = Debug|Any CPU {66531854-A216-4F15-ABE5-F723EA257BF2}.Debug|x64.ActiveCfg = Debug|Any CPU {66531854-A216-4F15-ABE5-F723EA257BF2}.Debug|x64.Build.0 = Debug|Any CPU {66531854-A216-4F15-ABE5-F723EA257BF2}.Debug|x86.ActiveCfg = Debug|Any CPU {66531854-A216-4F15-ABE5-F723EA257BF2}.Debug|x86.Build.0 = Debug|Any CPU {66531854-A216-4F15-ABE5-F723EA257BF2}.Release|Any CPU.ActiveCfg = Release|Any CPU {66531854-A216-4F15-ABE5-F723EA257BF2}.Release|Any CPU.Build.0 = Release|Any CPU {66531854-A216-4F15-ABE5-F723EA257BF2}.Release|ARM.ActiveCfg = Release|Any CPU {66531854-A216-4F15-ABE5-F723EA257BF2}.Release|ARM.Build.0 = Release|Any CPU {66531854-A216-4F15-ABE5-F723EA257BF2}.Release|ARM64.ActiveCfg = Release|Any CPU {66531854-A216-4F15-ABE5-F723EA257BF2}.Release|ARM64.Build.0 = Release|Any CPU {66531854-A216-4F15-ABE5-F723EA257BF2}.Release|x64.ActiveCfg = Release|Any CPU {66531854-A216-4F15-ABE5-F723EA257BF2}.Release|x64.Build.0 = Release|Any CPU {66531854-A216-4F15-ABE5-F723EA257BF2}.Release|x86.ActiveCfg = Release|Any CPU {66531854-A216-4F15-ABE5-F723EA257BF2}.Release|x86.Build.0 = Release|Any CPU {61D2474A-EDC5-4792-A4E6-7E935856617A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {61D2474A-EDC5-4792-A4E6-7E935856617A}.Debug|Any CPU.Build.0 = Debug|Any CPU {61D2474A-EDC5-4792-A4E6-7E935856617A}.Debug|ARM.ActiveCfg = Debug|Any CPU {61D2474A-EDC5-4792-A4E6-7E935856617A}.Debug|ARM64.ActiveCfg = Debug|Any CPU {61D2474A-EDC5-4792-A4E6-7E935856617A}.Debug|x64.ActiveCfg = Debug|Any CPU {61D2474A-EDC5-4792-A4E6-7E935856617A}.Debug|x86.ActiveCfg = Debug|Any CPU {61D2474A-EDC5-4792-A4E6-7E935856617A}.Release|Any CPU.ActiveCfg = Release|Any CPU {61D2474A-EDC5-4792-A4E6-7E935856617A}.Release|Any CPU.Build.0 = Release|Any CPU {61D2474A-EDC5-4792-A4E6-7E935856617A}.Release|ARM.ActiveCfg = Release|Any CPU {61D2474A-EDC5-4792-A4E6-7E935856617A}.Release|ARM64.ActiveCfg = Release|Any CPU {61D2474A-EDC5-4792-A4E6-7E935856617A}.Release|x64.ActiveCfg = Release|Any CPU {61D2474A-EDC5-4792-A4E6-7E935856617A}.Release|x86.ActiveCfg = Release|Any CPU {9ECB58D2-3790-4693-8A40-FF2584F263E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9ECB58D2-3790-4693-8A40-FF2584F263E6}.Debug|Any CPU.Build.0 = Debug|Any CPU {9ECB58D2-3790-4693-8A40-FF2584F263E6}.Debug|ARM.ActiveCfg = Debug|Any CPU {9ECB58D2-3790-4693-8A40-FF2584F263E6}.Debug|ARM64.ActiveCfg = Debug|Any CPU {9ECB58D2-3790-4693-8A40-FF2584F263E6}.Debug|x64.ActiveCfg = Debug|Any CPU {9ECB58D2-3790-4693-8A40-FF2584F263E6}.Debug|x86.ActiveCfg = Debug|Any CPU {9ECB58D2-3790-4693-8A40-FF2584F263E6}.Release|Any CPU.ActiveCfg = Release|Any CPU {9ECB58D2-3790-4693-8A40-FF2584F263E6}.Release|Any CPU.Build.0 = Release|Any CPU {9ECB58D2-3790-4693-8A40-FF2584F263E6}.Release|ARM.ActiveCfg = Release|Any CPU {9ECB58D2-3790-4693-8A40-FF2584F263E6}.Release|ARM64.ActiveCfg = Release|Any CPU {9ECB58D2-3790-4693-8A40-FF2584F263E6}.Release|x64.ActiveCfg = Release|Any CPU {9ECB58D2-3790-4693-8A40-FF2584F263E6}.Release|x86.ActiveCfg = Release|Any CPU {2F15C257-7E50-42B5-ADB4-7534B88F466B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2F15C257-7E50-42B5-ADB4-7534B88F466B}.Debug|Any CPU.Build.0 = Debug|Any CPU {2F15C257-7E50-42B5-ADB4-7534B88F466B}.Debug|ARM.ActiveCfg = Debug|Any CPU {2F15C257-7E50-42B5-ADB4-7534B88F466B}.Debug|ARM64.ActiveCfg = Debug|Any CPU {2F15C257-7E50-42B5-ADB4-7534B88F466B}.Debug|x64.ActiveCfg = Debug|Any CPU {2F15C257-7E50-42B5-ADB4-7534B88F466B}.Debug|x86.ActiveCfg = Debug|Any CPU {2F15C257-7E50-42B5-ADB4-7534B88F466B}.Release|Any CPU.ActiveCfg = Release|Any CPU {2F15C257-7E50-42B5-ADB4-7534B88F466B}.Release|Any CPU.Build.0 = Release|Any CPU {2F15C257-7E50-42B5-ADB4-7534B88F466B}.Release|ARM.ActiveCfg = Release|Any CPU {2F15C257-7E50-42B5-ADB4-7534B88F466B}.Release|ARM64.ActiveCfg = Release|Any CPU {2F15C257-7E50-42B5-ADB4-7534B88F466B}.Release|x64.ActiveCfg = Release|Any CPU {2F15C257-7E50-42B5-ADB4-7534B88F466B}.Release|x86.ActiveCfg = Release|Any CPU {F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Debug|Any CPU.Build.0 = Debug|Any CPU {F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Debug|ARM.ActiveCfg = Debug|Any CPU {F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Debug|ARM64.ActiveCfg = Debug|Any CPU {F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Debug|x64.ActiveCfg = Debug|Any CPU {F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Debug|x86.ActiveCfg = Debug|Any CPU {F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Release|Any CPU.ActiveCfg = Release|Any CPU {F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Release|Any CPU.Build.0 = Release|Any CPU {F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Release|ARM.ActiveCfg = Release|Any CPU {F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Release|ARM64.ActiveCfg = Release|Any CPU {F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Release|x64.ActiveCfg = Release|Any CPU {F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393}.Release|x86.ActiveCfg = Release|Any CPU {F37CC0C9-BFE1-4563-87D8-960FE630E601}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F37CC0C9-BFE1-4563-87D8-960FE630E601}.Debug|Any CPU.Build.0 = Debug|Any CPU {F37CC0C9-BFE1-4563-87D8-960FE630E601}.Debug|ARM.ActiveCfg = Debug|Any CPU {F37CC0C9-BFE1-4563-87D8-960FE630E601}.Debug|ARM64.ActiveCfg = Debug|Any CPU {F37CC0C9-BFE1-4563-87D8-960FE630E601}.Debug|x64.ActiveCfg = Debug|Any CPU {F37CC0C9-BFE1-4563-87D8-960FE630E601}.Debug|x86.ActiveCfg = Debug|Any CPU {F37CC0C9-BFE1-4563-87D8-960FE630E601}.Release|Any CPU.ActiveCfg = Release|Any CPU {F37CC0C9-BFE1-4563-87D8-960FE630E601}.Release|Any CPU.Build.0 = Release|Any CPU {F37CC0C9-BFE1-4563-87D8-960FE630E601}.Release|ARM.ActiveCfg = Release|Any CPU {F37CC0C9-BFE1-4563-87D8-960FE630E601}.Release|ARM64.ActiveCfg = Release|Any CPU {F37CC0C9-BFE1-4563-87D8-960FE630E601}.Release|x64.ActiveCfg = Release|Any CPU {F37CC0C9-BFE1-4563-87D8-960FE630E601}.Release|x86.ActiveCfg = Release|Any CPU {52E2ACD1-845A-41DC-8318-22A0A7274677}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {52E2ACD1-845A-41DC-8318-22A0A7274677}.Debug|Any CPU.Build.0 = Debug|Any CPU {52E2ACD1-845A-41DC-8318-22A0A7274677}.Debug|ARM.ActiveCfg = Debug|Any CPU {52E2ACD1-845A-41DC-8318-22A0A7274677}.Debug|ARM64.ActiveCfg = Debug|Any CPU {52E2ACD1-845A-41DC-8318-22A0A7274677}.Debug|x64.ActiveCfg = Debug|Any CPU {52E2ACD1-845A-41DC-8318-22A0A7274677}.Debug|x86.ActiveCfg = Debug|Any CPU {52E2ACD1-845A-41DC-8318-22A0A7274677}.Release|Any CPU.ActiveCfg = Release|Any CPU {52E2ACD1-845A-41DC-8318-22A0A7274677}.Release|Any CPU.Build.0 = Release|Any CPU {52E2ACD1-845A-41DC-8318-22A0A7274677}.Release|ARM.ActiveCfg = Release|Any CPU {52E2ACD1-845A-41DC-8318-22A0A7274677}.Release|ARM64.ActiveCfg = Release|Any CPU {52E2ACD1-845A-41DC-8318-22A0A7274677}.Release|x64.ActiveCfg = Release|Any CPU {52E2ACD1-845A-41DC-8318-22A0A7274677}.Release|x86.ActiveCfg = Release|Any CPU {FE823BD9-B309-49E6-85F1-ADAE55752B72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FE823BD9-B309-49E6-85F1-ADAE55752B72}.Debug|Any CPU.Build.0 = Debug|Any CPU {FE823BD9-B309-49E6-85F1-ADAE55752B72}.Debug|ARM.ActiveCfg = Debug|Any CPU {FE823BD9-B309-49E6-85F1-ADAE55752B72}.Debug|ARM.Build.0 = Debug|Any CPU {FE823BD9-B309-49E6-85F1-ADAE55752B72}.Debug|ARM64.ActiveCfg = Debug|Any CPU {FE823BD9-B309-49E6-85F1-ADAE55752B72}.Debug|ARM64.Build.0 = Debug|Any CPU {FE823BD9-B309-49E6-85F1-ADAE55752B72}.Debug|x64.ActiveCfg = Debug|Any CPU {FE823BD9-B309-49E6-85F1-ADAE55752B72}.Debug|x64.Build.0 = Debug|Any CPU {FE823BD9-B309-49E6-85F1-ADAE55752B72}.Debug|x86.ActiveCfg = Debug|Any CPU {FE823BD9-B309-49E6-85F1-ADAE55752B72}.Debug|x86.Build.0 = Debug|Any CPU {FE823BD9-B309-49E6-85F1-ADAE55752B72}.Release|Any CPU.ActiveCfg = Release|Any CPU {FE823BD9-B309-49E6-85F1-ADAE55752B72}.Release|Any CPU.Build.0 = Release|Any CPU {FE823BD9-B309-49E6-85F1-ADAE55752B72}.Release|ARM.ActiveCfg = Release|Any CPU {FE823BD9-B309-49E6-85F1-ADAE55752B72}.Release|ARM.Build.0 = Release|Any CPU {FE823BD9-B309-49E6-85F1-ADAE55752B72}.Release|ARM64.ActiveCfg = Release|Any CPU {FE823BD9-B309-49E6-85F1-ADAE55752B72}.Release|ARM64.Build.0 = Release|Any CPU {FE823BD9-B309-49E6-85F1-ADAE55752B72}.Release|x64.ActiveCfg = Release|Any CPU {FE823BD9-B309-49E6-85F1-ADAE55752B72}.Release|x64.Build.0 = Release|Any CPU {FE823BD9-B309-49E6-85F1-ADAE55752B72}.Release|x86.ActiveCfg = Release|Any CPU {FE823BD9-B309-49E6-85F1-ADAE55752B72}.Release|x86.Build.0 = Release|Any CPU {7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Debug|Any CPU.Build.0 = Debug|Any CPU {7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Debug|ARM.ActiveCfg = Debug|Any CPU {7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Debug|ARM.Build.0 = Debug|Any CPU {7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Debug|ARM64.ActiveCfg = Debug|Any CPU {7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Debug|ARM64.Build.0 = Debug|Any CPU {7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Debug|x64.ActiveCfg = Debug|Any CPU {7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Debug|x64.Build.0 = Debug|Any CPU {7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Debug|x86.ActiveCfg = Debug|Any CPU {7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Debug|x86.Build.0 = Debug|Any CPU {7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Release|Any CPU.ActiveCfg = Release|Any CPU {7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Release|Any CPU.Build.0 = Release|Any CPU {7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Release|ARM.ActiveCfg = Release|Any CPU {7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Release|ARM.Build.0 = Release|Any CPU {7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Release|ARM64.ActiveCfg = Release|Any CPU {7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Release|ARM64.Build.0 = Release|Any CPU {7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Release|x64.ActiveCfg = Release|Any CPU {7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Release|x64.Build.0 = Release|Any CPU {7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Release|x86.ActiveCfg = Release|Any CPU {7BA3EFB5-AF90-434E-9906-B5DAA82B09CA}.Release|x86.Build.0 = Release|Any CPU {873CD9B2-3984-44DD-A077-B5093714EC56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {873CD9B2-3984-44DD-A077-B5093714EC56}.Debug|Any CPU.Build.0 = Debug|Any CPU {873CD9B2-3984-44DD-A077-B5093714EC56}.Debug|ARM.ActiveCfg = Debug|Any CPU {873CD9B2-3984-44DD-A077-B5093714EC56}.Debug|ARM.Build.0 = Debug|Any CPU {873CD9B2-3984-44DD-A077-B5093714EC56}.Debug|ARM64.ActiveCfg = Debug|Any CPU {873CD9B2-3984-44DD-A077-B5093714EC56}.Debug|ARM64.Build.0 = Debug|Any CPU {873CD9B2-3984-44DD-A077-B5093714EC56}.Debug|x64.ActiveCfg = Debug|Any CPU {873CD9B2-3984-44DD-A077-B5093714EC56}.Debug|x64.Build.0 = Debug|Any CPU {873CD9B2-3984-44DD-A077-B5093714EC56}.Debug|x86.ActiveCfg = Debug|Any CPU {873CD9B2-3984-44DD-A077-B5093714EC56}.Debug|x86.Build.0 = Debug|Any CPU {873CD9B2-3984-44DD-A077-B5093714EC56}.Release|Any CPU.ActiveCfg = Release|Any CPU {873CD9B2-3984-44DD-A077-B5093714EC56}.Release|Any CPU.Build.0 = Release|Any CPU {873CD9B2-3984-44DD-A077-B5093714EC56}.Release|ARM.ActiveCfg = Release|Any CPU {873CD9B2-3984-44DD-A077-B5093714EC56}.Release|ARM.Build.0 = Release|Any CPU {873CD9B2-3984-44DD-A077-B5093714EC56}.Release|ARM64.ActiveCfg = Release|Any CPU {873CD9B2-3984-44DD-A077-B5093714EC56}.Release|ARM64.Build.0 = Release|Any CPU {873CD9B2-3984-44DD-A077-B5093714EC56}.Release|x64.ActiveCfg = Release|Any CPU {873CD9B2-3984-44DD-A077-B5093714EC56}.Release|x64.Build.0 = Release|Any CPU {873CD9B2-3984-44DD-A077-B5093714EC56}.Release|x86.ActiveCfg = Release|Any CPU {873CD9B2-3984-44DD-A077-B5093714EC56}.Release|x86.Build.0 = Release|Any CPU {916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Debug|Any CPU.Build.0 = Debug|Any CPU {916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Debug|ARM.ActiveCfg = Debug|Any CPU {916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Debug|ARM.Build.0 = Debug|Any CPU {916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Debug|ARM64.ActiveCfg = Debug|Any CPU {916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Debug|ARM64.Build.0 = Debug|Any CPU {916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Debug|x64.ActiveCfg = Debug|Any CPU {916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Debug|x64.Build.0 = Debug|Any CPU {916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Debug|x86.ActiveCfg = Debug|Any CPU {916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Debug|x86.Build.0 = Debug|Any CPU {916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Release|Any CPU.ActiveCfg = Release|Any CPU {916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Release|Any CPU.Build.0 = Release|Any CPU {916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Release|ARM.ActiveCfg = Release|Any CPU {916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Release|ARM.Build.0 = Release|Any CPU {916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Release|ARM64.ActiveCfg = Release|Any CPU {916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Release|ARM64.Build.0 = Release|Any CPU {916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Release|x64.ActiveCfg = Release|Any CPU {916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Release|x64.Build.0 = Release|Any CPU {916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Release|x86.ActiveCfg = Release|Any CPU {916C5797-18A6-4191-8FAA-4CA0B89E0BA9}.Release|x86.Build.0 = Release|Any CPU {13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Debug|Any CPU.Build.0 = Debug|Any CPU {13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Debug|ARM.ActiveCfg = Debug|Any CPU {13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Debug|ARM.Build.0 = Debug|Any CPU {13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Debug|ARM64.ActiveCfg = Debug|Any CPU {13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Debug|ARM64.Build.0 = Debug|Any CPU {13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Debug|x64.ActiveCfg = Debug|Any CPU {13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Debug|x64.Build.0 = Debug|Any CPU {13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Debug|x86.ActiveCfg = Debug|Any CPU {13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Debug|x86.Build.0 = Debug|Any CPU {13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Release|Any CPU.ActiveCfg = Release|Any CPU {13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Release|Any CPU.Build.0 = Release|Any CPU {13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Release|ARM.ActiveCfg = Release|Any CPU {13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Release|ARM.Build.0 = Release|Any CPU {13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Release|ARM64.ActiveCfg = Release|Any CPU {13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Release|ARM64.Build.0 = Release|Any CPU {13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Release|x64.ActiveCfg = Release|Any CPU {13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Release|x64.Build.0 = Release|Any CPU {13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Release|x86.ActiveCfg = Release|Any CPU {13EEF3A1-A5EC-443E-B9D2-3F730D5BC52F}.Release|x86.Build.0 = Release|Any CPU {BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Debug|Any CPU.Build.0 = Debug|Any CPU {BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Debug|ARM.ActiveCfg = Debug|Any CPU {BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Debug|ARM.Build.0 = Debug|Any CPU {BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Debug|ARM64.ActiveCfg = Debug|Any CPU {BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Debug|ARM64.Build.0 = Debug|Any CPU {BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Debug|x64.ActiveCfg = Debug|Any CPU {BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Debug|x64.Build.0 = Debug|Any CPU {BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Debug|x86.ActiveCfg = Debug|Any CPU {BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Debug|x86.Build.0 = Debug|Any CPU {BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Release|Any CPU.ActiveCfg = Release|Any CPU {BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Release|Any CPU.Build.0 = Release|Any CPU {BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Release|ARM.ActiveCfg = Release|Any CPU {BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Release|ARM.Build.0 = Release|Any CPU {BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Release|ARM64.ActiveCfg = Release|Any CPU {BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Release|ARM64.Build.0 = Release|Any CPU {BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Release|x64.ActiveCfg = Release|Any CPU {BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Release|x64.Build.0 = Release|Any CPU {BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Release|x86.ActiveCfg = Release|Any CPU {BD00CBCE-D6CB-495D-BE43-0C803E21CEAD}.Release|x86.Build.0 = Release|Any CPU {D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Debug|Any CPU.Build.0 = Debug|Any CPU {D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Debug|ARM.ActiveCfg = Debug|Any CPU {D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Debug|ARM.Build.0 = Debug|Any CPU {D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Debug|ARM64.ActiveCfg = Debug|Any CPU {D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Debug|ARM64.Build.0 = Debug|Any CPU {D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Debug|x64.ActiveCfg = Debug|Any CPU {D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Debug|x64.Build.0 = Debug|Any CPU {D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Debug|x86.ActiveCfg = Debug|Any CPU {D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Debug|x86.Build.0 = Debug|Any CPU {D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Release|Any CPU.ActiveCfg = Release|Any CPU {D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Release|Any CPU.Build.0 = Release|Any CPU {D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Release|ARM.ActiveCfg = Release|Any CPU {D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Release|ARM.Build.0 = Release|Any CPU {D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Release|ARM64.ActiveCfg = Release|Any CPU {D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Release|ARM64.Build.0 = Release|Any CPU {D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Release|x64.ActiveCfg = Release|Any CPU {D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Release|x64.Build.0 = Release|Any CPU {D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Release|x86.ActiveCfg = Release|Any CPU {D2D4FFF5-AFB2-4256-AC4D-2BDC57601A62}.Release|x86.Build.0 = Release|Any CPU {93FD8BB6-B750-4BD3-8143-043286DA1E22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {93FD8BB6-B750-4BD3-8143-043286DA1E22}.Debug|Any CPU.Build.0 = Debug|Any CPU {93FD8BB6-B750-4BD3-8143-043286DA1E22}.Debug|ARM.ActiveCfg = Debug|Any CPU {93FD8BB6-B750-4BD3-8143-043286DA1E22}.Debug|ARM.Build.0 = Debug|Any CPU {93FD8BB6-B750-4BD3-8143-043286DA1E22}.Debug|ARM64.ActiveCfg = Debug|Any CPU {93FD8BB6-B750-4BD3-8143-043286DA1E22}.Debug|ARM64.Build.0 = Debug|Any CPU {93FD8BB6-B750-4BD3-8143-043286DA1E22}.Debug|x64.ActiveCfg = Debug|Any CPU {93FD8BB6-B750-4BD3-8143-043286DA1E22}.Debug|x64.Build.0 = Debug|Any CPU {93FD8BB6-B750-4BD3-8143-043286DA1E22}.Debug|x86.ActiveCfg = Debug|Any CPU {93FD8BB6-B750-4BD3-8143-043286DA1E22}.Debug|x86.Build.0 = Debug|Any CPU {93FD8BB6-B750-4BD3-8143-043286DA1E22}.Release|Any CPU.ActiveCfg = Release|Any CPU {93FD8BB6-B750-4BD3-8143-043286DA1E22}.Release|Any CPU.Build.0 = Release|Any CPU {93FD8BB6-B750-4BD3-8143-043286DA1E22}.Release|ARM.ActiveCfg = Release|Any CPU {93FD8BB6-B750-4BD3-8143-043286DA1E22}.Release|ARM.Build.0 = Release|Any CPU {93FD8BB6-B750-4BD3-8143-043286DA1E22}.Release|ARM64.ActiveCfg = Release|Any CPU {93FD8BB6-B750-4BD3-8143-043286DA1E22}.Release|ARM64.Build.0 = Release|Any CPU {93FD8BB6-B750-4BD3-8143-043286DA1E22}.Release|x64.ActiveCfg = Release|Any CPU {93FD8BB6-B750-4BD3-8143-043286DA1E22}.Release|x64.Build.0 = Release|Any CPU {93FD8BB6-B750-4BD3-8143-043286DA1E22}.Release|x86.ActiveCfg = Release|Any CPU {93FD8BB6-B750-4BD3-8143-043286DA1E22}.Release|x86.Build.0 = Release|Any CPU {E277131E-3A87-4087-821A-D1E54D3A4FA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E277131E-3A87-4087-821A-D1E54D3A4FA9}.Debug|Any CPU.Build.0 = Debug|Any CPU {E277131E-3A87-4087-821A-D1E54D3A4FA9}.Debug|ARM.ActiveCfg = Debug|Any CPU {E277131E-3A87-4087-821A-D1E54D3A4FA9}.Debug|ARM.Build.0 = Debug|Any CPU {E277131E-3A87-4087-821A-D1E54D3A4FA9}.Debug|ARM64.ActiveCfg = Debug|Any CPU {E277131E-3A87-4087-821A-D1E54D3A4FA9}.Debug|ARM64.Build.0 = Debug|Any CPU {E277131E-3A87-4087-821A-D1E54D3A4FA9}.Debug|x64.ActiveCfg = Debug|Any CPU {E277131E-3A87-4087-821A-D1E54D3A4FA9}.Debug|x64.Build.0 = Debug|Any CPU {E277131E-3A87-4087-821A-D1E54D3A4FA9}.Debug|x86.ActiveCfg = Debug|Any CPU {E277131E-3A87-4087-821A-D1E54D3A4FA9}.Debug|x86.Build.0 = Debug|Any CPU {E277131E-3A87-4087-821A-D1E54D3A4FA9}.Release|Any CPU.ActiveCfg = Release|Any CPU {E277131E-3A87-4087-821A-D1E54D3A4FA9}.Release|Any CPU.Build.0 = Release|Any CPU {E277131E-3A87-4087-821A-D1E54D3A4FA9}.Release|ARM.ActiveCfg = Release|Any CPU {E277131E-3A87-4087-821A-D1E54D3A4FA9}.Release|ARM.Build.0 = Release|Any CPU {E277131E-3A87-4087-821A-D1E54D3A4FA9}.Release|ARM64.ActiveCfg = Release|Any CPU {E277131E-3A87-4087-821A-D1E54D3A4FA9}.Release|ARM64.Build.0 = Release|Any CPU {E277131E-3A87-4087-821A-D1E54D3A4FA9}.Release|x64.ActiveCfg = Release|Any CPU {E277131E-3A87-4087-821A-D1E54D3A4FA9}.Release|x64.Build.0 = Release|Any CPU {E277131E-3A87-4087-821A-D1E54D3A4FA9}.Release|x86.ActiveCfg = Release|Any CPU {E277131E-3A87-4087-821A-D1E54D3A4FA9}.Release|x86.Build.0 = Release|Any CPU {947C9653-C8D7-4D95-BE62-8101A3C9D824}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {947C9653-C8D7-4D95-BE62-8101A3C9D824}.Debug|Any CPU.Build.0 = Debug|Any CPU {947C9653-C8D7-4D95-BE62-8101A3C9D824}.Debug|ARM.ActiveCfg = Debug|Any CPU {947C9653-C8D7-4D95-BE62-8101A3C9D824}.Debug|ARM.Build.0 = Debug|Any CPU {947C9653-C8D7-4D95-BE62-8101A3C9D824}.Debug|ARM64.ActiveCfg = Debug|Any CPU {947C9653-C8D7-4D95-BE62-8101A3C9D824}.Debug|ARM64.Build.0 = Debug|Any CPU {947C9653-C8D7-4D95-BE62-8101A3C9D824}.Debug|x64.ActiveCfg = Debug|Any CPU {947C9653-C8D7-4D95-BE62-8101A3C9D824}.Debug|x64.Build.0 = Debug|Any CPU {947C9653-C8D7-4D95-BE62-8101A3C9D824}.Debug|x86.ActiveCfg = Debug|Any CPU {947C9653-C8D7-4D95-BE62-8101A3C9D824}.Debug|x86.Build.0 = Debug|Any CPU {947C9653-C8D7-4D95-BE62-8101A3C9D824}.Release|Any CPU.ActiveCfg = Release|Any CPU {947C9653-C8D7-4D95-BE62-8101A3C9D824}.Release|Any CPU.Build.0 = Release|Any CPU {947C9653-C8D7-4D95-BE62-8101A3C9D824}.Release|ARM.ActiveCfg = Release|Any CPU {947C9653-C8D7-4D95-BE62-8101A3C9D824}.Release|ARM.Build.0 = Release|Any CPU {947C9653-C8D7-4D95-BE62-8101A3C9D824}.Release|ARM64.ActiveCfg = Release|Any CPU {947C9653-C8D7-4D95-BE62-8101A3C9D824}.Release|ARM64.Build.0 = Release|Any CPU {947C9653-C8D7-4D95-BE62-8101A3C9D824}.Release|x64.ActiveCfg = Release|Any CPU {947C9653-C8D7-4D95-BE62-8101A3C9D824}.Release|x64.Build.0 = Release|Any CPU {947C9653-C8D7-4D95-BE62-8101A3C9D824}.Release|x86.ActiveCfg = Release|Any CPU {947C9653-C8D7-4D95-BE62-8101A3C9D824}.Release|x86.Build.0 = Release|Any CPU {A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Debug|Any CPU.Build.0 = Debug|Any CPU {A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Debug|ARM.ActiveCfg = Debug|Any CPU {A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Debug|ARM.Build.0 = Debug|Any CPU {A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Debug|ARM64.ActiveCfg = Debug|Any CPU {A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Debug|ARM64.Build.0 = Debug|Any CPU {A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Debug|x64.ActiveCfg = Debug|Any CPU {A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Debug|x64.Build.0 = Debug|Any CPU {A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Debug|x86.ActiveCfg = Debug|Any CPU {A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Debug|x86.Build.0 = Debug|Any CPU {A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Release|Any CPU.ActiveCfg = Release|Any CPU {A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Release|Any CPU.Build.0 = Release|Any CPU {A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Release|ARM.ActiveCfg = Release|Any CPU {A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Release|ARM.Build.0 = Release|Any CPU {A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Release|ARM64.ActiveCfg = Release|Any CPU {A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Release|ARM64.Build.0 = Release|Any CPU {A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Release|x64.ActiveCfg = Release|Any CPU {A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Release|x64.Build.0 = Release|Any CPU {A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Release|x86.ActiveCfg = Release|Any CPU {A9686EC4-E5DB-4EE2-8EA3-F15A509A45E1}.Release|x86.Build.0 = Release|Any CPU {8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Debug|Any CPU.Build.0 = Debug|Any CPU {8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Debug|ARM.ActiveCfg = Debug|Any CPU {8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Debug|ARM.Build.0 = Debug|Any CPU {8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Debug|ARM64.ActiveCfg = Debug|Any CPU {8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Debug|ARM64.Build.0 = Debug|Any CPU {8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Debug|x64.ActiveCfg = Debug|Any CPU {8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Debug|x64.Build.0 = Debug|Any CPU {8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Debug|x86.ActiveCfg = Debug|Any CPU {8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Debug|x86.Build.0 = Debug|Any CPU {8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Release|Any CPU.ActiveCfg = Release|Any CPU {8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Release|Any CPU.Build.0 = Release|Any CPU {8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Release|ARM.ActiveCfg = Release|Any CPU {8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Release|ARM.Build.0 = Release|Any CPU {8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Release|ARM64.ActiveCfg = Release|Any CPU {8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Release|ARM64.Build.0 = Release|Any CPU {8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Release|x64.ActiveCfg = Release|Any CPU {8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Release|x64.Build.0 = Release|Any CPU {8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Release|x86.ActiveCfg = Release|Any CPU {8DB1B921-4190-4ED1-B2B0-C1A9B21B2C08}.Release|x86.Build.0 = Release|Any CPU {E168AAE0-7730-45FD-A059-6994DB237C85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E168AAE0-7730-45FD-A059-6994DB237C85}.Debug|Any CPU.Build.0 = Debug|Any CPU {E168AAE0-7730-45FD-A059-6994DB237C85}.Debug|ARM.ActiveCfg = Debug|Any CPU {E168AAE0-7730-45FD-A059-6994DB237C85}.Debug|ARM.Build.0 = Debug|Any CPU {E168AAE0-7730-45FD-A059-6994DB237C85}.Debug|ARM64.ActiveCfg = Debug|Any CPU {E168AAE0-7730-45FD-A059-6994DB237C85}.Debug|ARM64.Build.0 = Debug|Any CPU {E168AAE0-7730-45FD-A059-6994DB237C85}.Debug|x64.ActiveCfg = Debug|Any CPU {E168AAE0-7730-45FD-A059-6994DB237C85}.Debug|x64.Build.0 = Debug|Any CPU {E168AAE0-7730-45FD-A059-6994DB237C85}.Debug|x86.ActiveCfg = Debug|Any CPU {E168AAE0-7730-45FD-A059-6994DB237C85}.Debug|x86.Build.0 = Debug|Any CPU {E168AAE0-7730-45FD-A059-6994DB237C85}.Release|Any CPU.ActiveCfg = Release|Any CPU {E168AAE0-7730-45FD-A059-6994DB237C85}.Release|Any CPU.Build.0 = Release|Any CPU {E168AAE0-7730-45FD-A059-6994DB237C85}.Release|ARM.ActiveCfg = Release|Any CPU {E168AAE0-7730-45FD-A059-6994DB237C85}.Release|ARM.Build.0 = Release|Any CPU {E168AAE0-7730-45FD-A059-6994DB237C85}.Release|ARM64.ActiveCfg = Release|Any CPU {E168AAE0-7730-45FD-A059-6994DB237C85}.Release|ARM64.Build.0 = Release|Any CPU {E168AAE0-7730-45FD-A059-6994DB237C85}.Release|x64.ActiveCfg = Release|Any CPU {E168AAE0-7730-45FD-A059-6994DB237C85}.Release|x64.Build.0 = Release|Any CPU {E168AAE0-7730-45FD-A059-6994DB237C85}.Release|x86.ActiveCfg = Release|Any CPU {E168AAE0-7730-45FD-A059-6994DB237C85}.Release|x86.Build.0 = Release|Any CPU {34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Debug|Any CPU.Build.0 = Debug|Any CPU {34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Debug|ARM.ActiveCfg = Debug|Any CPU {34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Debug|ARM.Build.0 = Debug|Any CPU {34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Debug|ARM64.ActiveCfg = Debug|Any CPU {34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Debug|ARM64.Build.0 = Debug|Any CPU {34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Debug|x64.ActiveCfg = Debug|Any CPU {34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Debug|x64.Build.0 = Debug|Any CPU {34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Debug|x86.ActiveCfg = Debug|Any CPU {34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Debug|x86.Build.0 = Debug|Any CPU {34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Release|Any CPU.ActiveCfg = Release|Any CPU {34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Release|Any CPU.Build.0 = Release|Any CPU {34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Release|ARM.ActiveCfg = Release|Any CPU {34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Release|ARM.Build.0 = Release|Any CPU {34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Release|ARM64.ActiveCfg = Release|Any CPU {34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Release|ARM64.Build.0 = Release|Any CPU {34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Release|x64.ActiveCfg = Release|Any CPU {34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Release|x64.Build.0 = Release|Any CPU {34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Release|x86.ActiveCfg = Release|Any CPU {34CAFA86-2B8D-41D0-8218-5FEC87170E45}.Release|x86.Build.0 = Release|Any CPU {1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Debug|Any CPU.Build.0 = Debug|Any CPU {1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Debug|ARM.ActiveCfg = Debug|Any CPU {1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Debug|ARM.Build.0 = Debug|Any CPU {1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Debug|ARM64.ActiveCfg = Debug|Any CPU {1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Debug|ARM64.Build.0 = Debug|Any CPU {1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Debug|x64.ActiveCfg = Debug|Any CPU {1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Debug|x64.Build.0 = Debug|Any CPU {1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Debug|x86.ActiveCfg = Debug|Any CPU {1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Debug|x86.Build.0 = Debug|Any CPU {1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Release|Any CPU.ActiveCfg = Release|Any CPU {1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Release|Any CPU.Build.0 = Release|Any CPU {1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Release|ARM.ActiveCfg = Release|Any CPU {1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Release|ARM.Build.0 = Release|Any CPU {1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Release|ARM64.ActiveCfg = Release|Any CPU {1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Release|ARM64.Build.0 = Release|Any CPU {1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Release|x64.ActiveCfg = Release|Any CPU {1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Release|x64.Build.0 = Release|Any CPU {1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Release|x86.ActiveCfg = Release|Any CPU {1A3285D7-5DC5-4135-9F38-503D6DB6469A}.Release|x86.Build.0 = Release|Any CPU {EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Debug|Any CPU.Build.0 = Debug|Any CPU {EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Debug|ARM.ActiveCfg = Debug|Any CPU {EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Debug|ARM.Build.0 = Debug|Any CPU {EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Debug|ARM64.ActiveCfg = Debug|Any CPU {EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Debug|ARM64.Build.0 = Debug|Any CPU {EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Debug|x64.ActiveCfg = Debug|Any CPU {EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Debug|x64.Build.0 = Debug|Any CPU {EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Debug|x86.ActiveCfg = Debug|Any CPU {EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Debug|x86.Build.0 = Debug|Any CPU {EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Release|Any CPU.ActiveCfg = Release|Any CPU {EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Release|Any CPU.Build.0 = Release|Any CPU {EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Release|ARM.ActiveCfg = Release|Any CPU {EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Release|ARM.Build.0 = Release|Any CPU {EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Release|ARM64.ActiveCfg = Release|Any CPU {EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Release|ARM64.Build.0 = Release|Any CPU {EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Release|x64.ActiveCfg = Release|Any CPU {EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Release|x64.Build.0 = Release|Any CPU {EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Release|x86.ActiveCfg = Release|Any CPU {EDD82FFB-2811-4364-AE3F-FD3EA0C54312}.Release|x86.Build.0 = Release|Any CPU {58B80047-B051-49F8-99E0-2FC3FB34F39A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {58B80047-B051-49F8-99E0-2FC3FB34F39A}.Debug|Any CPU.Build.0 = Debug|Any CPU {58B80047-B051-49F8-99E0-2FC3FB34F39A}.Debug|ARM.ActiveCfg = Debug|Any CPU {58B80047-B051-49F8-99E0-2FC3FB34F39A}.Debug|ARM.Build.0 = Debug|Any CPU {58B80047-B051-49F8-99E0-2FC3FB34F39A}.Debug|ARM64.ActiveCfg = Debug|Any CPU {58B80047-B051-49F8-99E0-2FC3FB34F39A}.Debug|ARM64.Build.0 = Debug|Any CPU {58B80047-B051-49F8-99E0-2FC3FB34F39A}.Debug|x64.ActiveCfg = Debug|Any CPU {58B80047-B051-49F8-99E0-2FC3FB34F39A}.Debug|x64.Build.0 = Debug|Any CPU {58B80047-B051-49F8-99E0-2FC3FB34F39A}.Debug|x86.ActiveCfg = Debug|Any CPU {58B80047-B051-49F8-99E0-2FC3FB34F39A}.Debug|x86.Build.0 = Debug|Any CPU {58B80047-B051-49F8-99E0-2FC3FB34F39A}.Release|Any CPU.ActiveCfg = Release|Any CPU {58B80047-B051-49F8-99E0-2FC3FB34F39A}.Release|Any CPU.Build.0 = Release|Any CPU {58B80047-B051-49F8-99E0-2FC3FB34F39A}.Release|ARM.ActiveCfg = Release|Any CPU {58B80047-B051-49F8-99E0-2FC3FB34F39A}.Release|ARM.Build.0 = Release|Any CPU {58B80047-B051-49F8-99E0-2FC3FB34F39A}.Release|ARM64.ActiveCfg = Release|Any CPU {58B80047-B051-49F8-99E0-2FC3FB34F39A}.Release|ARM64.Build.0 = Release|Any CPU {58B80047-B051-49F8-99E0-2FC3FB34F39A}.Release|x64.ActiveCfg = Release|Any CPU {58B80047-B051-49F8-99E0-2FC3FB34F39A}.Release|x64.Build.0 = Release|Any CPU {58B80047-B051-49F8-99E0-2FC3FB34F39A}.Release|x86.ActiveCfg = Release|Any CPU {58B80047-B051-49F8-99E0-2FC3FB34F39A}.Release|x86.Build.0 = Release|Any CPU {BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Debug|Any CPU.Build.0 = Debug|Any CPU {BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Debug|ARM.ActiveCfg = Debug|Any CPU {BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Debug|ARM.Build.0 = Debug|Any CPU {BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Debug|ARM64.ActiveCfg = Debug|Any CPU {BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Debug|ARM64.Build.0 = Debug|Any CPU {BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Debug|x64.ActiveCfg = Debug|Any CPU {BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Debug|x64.Build.0 = Debug|Any CPU {BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Debug|x86.ActiveCfg = Debug|Any CPU {BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Debug|x86.Build.0 = Debug|Any CPU {BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Release|Any CPU.ActiveCfg = Release|Any CPU {BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Release|Any CPU.Build.0 = Release|Any CPU {BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Release|ARM.ActiveCfg = Release|Any CPU {BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Release|ARM.Build.0 = Release|Any CPU {BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Release|ARM64.ActiveCfg = Release|Any CPU {BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Release|ARM64.Build.0 = Release|Any CPU {BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Release|x64.ActiveCfg = Release|Any CPU {BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Release|x64.Build.0 = Release|Any CPU {BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Release|x86.ActiveCfg = Release|Any CPU {BB70AF68-FE47-4A2C-A1A3-BF3A4ED83251}.Release|x86.Build.0 = Release|Any CPU {55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Debug|Any CPU.Build.0 = Debug|Any CPU {55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Debug|ARM.ActiveCfg = Debug|Any CPU {55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Debug|ARM.Build.0 = Debug|Any CPU {55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Debug|ARM64.ActiveCfg = Debug|Any CPU {55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Debug|ARM64.Build.0 = Debug|Any CPU {55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Debug|x64.ActiveCfg = Debug|Any CPU {55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Debug|x64.Build.0 = Debug|Any CPU {55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Debug|x86.ActiveCfg = Debug|Any CPU {55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Debug|x86.Build.0 = Debug|Any CPU {55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Release|Any CPU.ActiveCfg = Release|Any CPU {55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Release|Any CPU.Build.0 = Release|Any CPU {55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Release|ARM.ActiveCfg = Release|Any CPU {55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Release|ARM.Build.0 = Release|Any CPU {55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Release|ARM64.ActiveCfg = Release|Any CPU {55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Release|ARM64.Build.0 = Release|Any CPU {55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Release|x64.ActiveCfg = Release|Any CPU {55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Release|x64.Build.0 = Release|Any CPU {55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Release|x86.ActiveCfg = Release|Any CPU {55C8BE35-B770-4FFF-92F8-1FD1792150F7}.Release|x86.Build.0 = Release|Any CPU {BABA96A7-BEF2-450E-8502-11D36163B691}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BABA96A7-BEF2-450E-8502-11D36163B691}.Debug|Any CPU.Build.0 = Debug|Any CPU {BABA96A7-BEF2-450E-8502-11D36163B691}.Debug|ARM.ActiveCfg = Debug|Any CPU {BABA96A7-BEF2-450E-8502-11D36163B691}.Debug|ARM.Build.0 = Debug|Any CPU {BABA96A7-BEF2-450E-8502-11D36163B691}.Debug|ARM64.ActiveCfg = Debug|Any CPU {BABA96A7-BEF2-450E-8502-11D36163B691}.Debug|ARM64.Build.0 = Debug|Any CPU {BABA96A7-BEF2-450E-8502-11D36163B691}.Debug|x64.ActiveCfg = Debug|Any CPU {BABA96A7-BEF2-450E-8502-11D36163B691}.Debug|x64.Build.0 = Debug|Any CPU {BABA96A7-BEF2-450E-8502-11D36163B691}.Debug|x86.ActiveCfg = Debug|Any CPU {BABA96A7-BEF2-450E-8502-11D36163B691}.Debug|x86.Build.0 = Debug|Any CPU {BABA96A7-BEF2-450E-8502-11D36163B691}.Release|Any CPU.ActiveCfg = Release|Any CPU {BABA96A7-BEF2-450E-8502-11D36163B691}.Release|Any CPU.Build.0 = Release|Any CPU {BABA96A7-BEF2-450E-8502-11D36163B691}.Release|ARM.ActiveCfg = Release|Any CPU {BABA96A7-BEF2-450E-8502-11D36163B691}.Release|ARM.Build.0 = Release|Any CPU {BABA96A7-BEF2-450E-8502-11D36163B691}.Release|ARM64.ActiveCfg = Release|Any CPU {BABA96A7-BEF2-450E-8502-11D36163B691}.Release|ARM64.Build.0 = Release|Any CPU {BABA96A7-BEF2-450E-8502-11D36163B691}.Release|x64.ActiveCfg = Release|Any CPU {BABA96A7-BEF2-450E-8502-11D36163B691}.Release|x64.Build.0 = Release|Any CPU {BABA96A7-BEF2-450E-8502-11D36163B691}.Release|x86.ActiveCfg = Release|Any CPU {BABA96A7-BEF2-450E-8502-11D36163B691}.Release|x86.Build.0 = Release|Any CPU {F85D2EEC-5C85-4443-B046-769F511ACB6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F85D2EEC-5C85-4443-B046-769F511ACB6F}.Debug|Any CPU.Build.0 = Debug|Any CPU {F85D2EEC-5C85-4443-B046-769F511ACB6F}.Debug|ARM.ActiveCfg = Debug|Any CPU {F85D2EEC-5C85-4443-B046-769F511ACB6F}.Debug|ARM.Build.0 = Debug|Any CPU {F85D2EEC-5C85-4443-B046-769F511ACB6F}.Debug|ARM64.ActiveCfg = Debug|Any CPU {F85D2EEC-5C85-4443-B046-769F511ACB6F}.Debug|ARM64.Build.0 = Debug|Any CPU {F85D2EEC-5C85-4443-B046-769F511ACB6F}.Debug|x64.ActiveCfg = Debug|Any CPU {F85D2EEC-5C85-4443-B046-769F511ACB6F}.Debug|x64.Build.0 = Debug|Any CPU {F85D2EEC-5C85-4443-B046-769F511ACB6F}.Debug|x86.ActiveCfg = Debug|Any CPU {F85D2EEC-5C85-4443-B046-769F511ACB6F}.Debug|x86.Build.0 = Debug|Any CPU {F85D2EEC-5C85-4443-B046-769F511ACB6F}.Release|Any CPU.ActiveCfg = Release|Any CPU {F85D2EEC-5C85-4443-B046-769F511ACB6F}.Release|Any CPU.Build.0 = Release|Any CPU {F85D2EEC-5C85-4443-B046-769F511ACB6F}.Release|ARM.ActiveCfg = Release|Any CPU {F85D2EEC-5C85-4443-B046-769F511ACB6F}.Release|ARM.Build.0 = Release|Any CPU {F85D2EEC-5C85-4443-B046-769F511ACB6F}.Release|ARM64.ActiveCfg = Release|Any CPU {F85D2EEC-5C85-4443-B046-769F511ACB6F}.Release|ARM64.Build.0 = Release|Any CPU {F85D2EEC-5C85-4443-B046-769F511ACB6F}.Release|x64.ActiveCfg = Release|Any CPU {F85D2EEC-5C85-4443-B046-769F511ACB6F}.Release|x64.Build.0 = Release|Any CPU {F85D2EEC-5C85-4443-B046-769F511ACB6F}.Release|x86.ActiveCfg = Release|Any CPU {F85D2EEC-5C85-4443-B046-769F511ACB6F}.Release|x86.Build.0 = Release|Any CPU {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|Any CPU.Build.0 = Debug|Any CPU {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|Any CPU.Deploy.0 = Debug|Any CPU {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|ARM.ActiveCfg = Debug|ARM {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|ARM.Build.0 = Debug|ARM {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|ARM.Deploy.0 = Debug|ARM {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|ARM64.ActiveCfg = Debug|ARM64 {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|ARM64.Build.0 = Debug|ARM64 {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|ARM64.Deploy.0 = Debug|ARM64 {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|x64.ActiveCfg = Debug|x64 {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|x64.Build.0 = Debug|x64 {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|x64.Deploy.0 = Debug|x64 {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|x86.ActiveCfg = Debug|x86 {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|x86.Build.0 = Debug|x86 {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Debug|x86.Deploy.0 = Debug|x86 {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|Any CPU.ActiveCfg = Release|Any CPU {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|Any CPU.Build.0 = Release|Any CPU {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|Any CPU.Deploy.0 = Release|Any CPU {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|ARM.ActiveCfg = Release|ARM {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|ARM.Build.0 = Release|ARM {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|ARM.Deploy.0 = Release|ARM {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|ARM64.ActiveCfg = Release|ARM64 {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|ARM64.Build.0 = Release|ARM64 {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|ARM64.Deploy.0 = Release|ARM64 {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|x64.ActiveCfg = Release|x64 {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|x64.Build.0 = Release|x64 {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|x64.Deploy.0 = Release|x64 {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|x86.ActiveCfg = Release|x86 {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|x86.Build.0 = Release|x86 {080A374C-D430-4FCB-96B8-889FDEBF58F2}.Release|x86.Deploy.0 = Release|x86 {17C5019E-53C9-4566-BAA0-9E2E139D6529}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {17C5019E-53C9-4566-BAA0-9E2E139D6529}.Debug|Any CPU.Build.0 = Debug|Any CPU {17C5019E-53C9-4566-BAA0-9E2E139D6529}.Debug|ARM.ActiveCfg = Debug|Any CPU {17C5019E-53C9-4566-BAA0-9E2E139D6529}.Debug|ARM.Build.0 = Debug|Any CPU {17C5019E-53C9-4566-BAA0-9E2E139D6529}.Debug|ARM64.ActiveCfg = Debug|Any CPU {17C5019E-53C9-4566-BAA0-9E2E139D6529}.Debug|ARM64.Build.0 = Debug|Any CPU {17C5019E-53C9-4566-BAA0-9E2E139D6529}.Debug|x64.ActiveCfg = Debug|Any CPU {17C5019E-53C9-4566-BAA0-9E2E139D6529}.Debug|x64.Build.0 = Debug|Any CPU {17C5019E-53C9-4566-BAA0-9E2E139D6529}.Debug|x86.ActiveCfg = Debug|Any CPU {17C5019E-53C9-4566-BAA0-9E2E139D6529}.Debug|x86.Build.0 = Debug|Any CPU {17C5019E-53C9-4566-BAA0-9E2E139D6529}.Release|Any CPU.ActiveCfg = Release|Any CPU {17C5019E-53C9-4566-BAA0-9E2E139D6529}.Release|Any CPU.Build.0 = Release|Any CPU {17C5019E-53C9-4566-BAA0-9E2E139D6529}.Release|ARM.ActiveCfg = Release|Any CPU {17C5019E-53C9-4566-BAA0-9E2E139D6529}.Release|ARM.Build.0 = Release|Any CPU {17C5019E-53C9-4566-BAA0-9E2E139D6529}.Release|ARM64.ActiveCfg = Release|Any CPU {17C5019E-53C9-4566-BAA0-9E2E139D6529}.Release|ARM64.Build.0 = Release|Any CPU {17C5019E-53C9-4566-BAA0-9E2E139D6529}.Release|x64.ActiveCfg = Release|Any CPU {17C5019E-53C9-4566-BAA0-9E2E139D6529}.Release|x64.Build.0 = Release|Any CPU {17C5019E-53C9-4566-BAA0-9E2E139D6529}.Release|x86.ActiveCfg = Release|Any CPU {17C5019E-53C9-4566-BAA0-9E2E139D6529}.Release|x86.Build.0 = Release|Any CPU {EA92AA97-BC63-4691-8483-39E9643D2086}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EA92AA97-BC63-4691-8483-39E9643D2086}.Debug|Any CPU.Build.0 = Debug|Any CPU {EA92AA97-BC63-4691-8483-39E9643D2086}.Debug|ARM.ActiveCfg = Debug|Any CPU {EA92AA97-BC63-4691-8483-39E9643D2086}.Debug|ARM.Build.0 = Debug|Any CPU {EA92AA97-BC63-4691-8483-39E9643D2086}.Debug|ARM64.ActiveCfg = Debug|Any CPU {EA92AA97-BC63-4691-8483-39E9643D2086}.Debug|ARM64.Build.0 = Debug|Any CPU {EA92AA97-BC63-4691-8483-39E9643D2086}.Debug|x64.ActiveCfg = Debug|Any CPU {EA92AA97-BC63-4691-8483-39E9643D2086}.Debug|x64.Build.0 = Debug|Any CPU {EA92AA97-BC63-4691-8483-39E9643D2086}.Debug|x86.ActiveCfg = Debug|Any CPU {EA92AA97-BC63-4691-8483-39E9643D2086}.Debug|x86.Build.0 = Debug|Any CPU {EA92AA97-BC63-4691-8483-39E9643D2086}.Release|Any CPU.ActiveCfg = Release|Any CPU {EA92AA97-BC63-4691-8483-39E9643D2086}.Release|Any CPU.Build.0 = Release|Any CPU {EA92AA97-BC63-4691-8483-39E9643D2086}.Release|ARM.ActiveCfg = Release|Any CPU {EA92AA97-BC63-4691-8483-39E9643D2086}.Release|ARM.Build.0 = Release|Any CPU {EA92AA97-BC63-4691-8483-39E9643D2086}.Release|ARM64.ActiveCfg = Release|Any CPU {EA92AA97-BC63-4691-8483-39E9643D2086}.Release|ARM64.Build.0 = Release|Any CPU {EA92AA97-BC63-4691-8483-39E9643D2086}.Release|x64.ActiveCfg = Release|Any CPU {EA92AA97-BC63-4691-8483-39E9643D2086}.Release|x64.Build.0 = Release|Any CPU {EA92AA97-BC63-4691-8483-39E9643D2086}.Release|x86.ActiveCfg = Release|Any CPU {EA92AA97-BC63-4691-8483-39E9643D2086}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {61D2474A-EDC5-4792-A4E6-7E935856617A} = {F556CBD8-76F3-45A3-9619-8FB81FA64C22} {9ECB58D2-3790-4693-8A40-FF2584F263E6} = {F556CBD8-76F3-45A3-9619-8FB81FA64C22} {2F15C257-7E50-42B5-ADB4-7534B88F466B} = {F556CBD8-76F3-45A3-9619-8FB81FA64C22} {F6E4E1DF-ACC6-4DDE-912F-C6465CB3D393} = {F556CBD8-76F3-45A3-9619-8FB81FA64C22} {F37CC0C9-BFE1-4563-87D8-960FE630E601} = {A69D32C8-AA20-4871-858F-31D84193FA1C} {52E2ACD1-845A-41DC-8318-22A0A7274677} = {A69D32C8-AA20-4871-858F-31D84193FA1C} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {BEB14EB2-578B-40D4-88D1-5B497F2967F4} EndGlobalSection EndGlobal ================================================ FILE: KHSave/Attributes/AbilityAttribute.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace KHSave.Attributes { public class AbilityAttribute : InfoAttribute { public AbilityAttribute(string name = null) : base(name) { } } public class AbilityActionAttribute : AbilityAttribute { public AbilityActionAttribute(string name = null) : base(name) { } } public class AbilityMobilityAttribute : AbilityAttribute { public AbilityMobilityAttribute(string name = null) : base(name) { } } public class AbilitySupportAttribute : AbilityAttribute { public AbilitySupportAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/AccessoryAttribute.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace KHSave.Attributes { public class AccessoryAttribute : InfoAttribute { public AccessoryAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/ArmorAttribute.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace KHSave.Attributes { public class ArmorAttribute : InfoAttribute { public ArmorAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/BoostAttribute.cs ================================================ namespace KHSave.Attributes { public class BoostAttribute : TentAttribute { public BoostAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/CombatStyleAttribute.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace KHSave.Attributes { public class CombatStyleAttribute : InfoAttribute { public CombatStyleAttribute(string name) : base(name) { } } } ================================================ FILE: KHSave/Attributes/CommandAttribute.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace KHSave.Attributes { public class CommandAttribute : InfoAttribute { public CommandAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/ConsumableAttribute.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace KHSave.Attributes { public class ConsumableAttribute : InfoAttribute { public ConsumableAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/FoodAttribute.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace KHSave.Attributes { public class FoodAttribute : InfoAttribute { public FoodAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/FormAttribute.cs ================================================ namespace KHSave.Attributes { public class FormAttribute : KeyItemAttribute { public FormAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/GummiBlockAttribute.cs ================================================ using System; using System.Collections.Generic; using System.Text; namespace KHSave.Attributes { public class GummiBlockAttribute : InfoAttribute { public GummiBlockAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/InfoAttribute.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Extensions; using KHSave.Services; using System; using System.Collections.Generic; using System.Linq; namespace KHSave.Attributes { public class InfoAttribute : Attribute { private static CacheService cache = new CacheService(); public string Info { get; } public InfoAttribute() { } public InfoAttribute(string info) { Info = info; } public static string GetInfo(object value) => cache.Get(value, x => value.GetAttribute()?.Info ?? x?.ToString() ?? ""); public static string[] GetItemTypes(object value) { var memberValue = value.ToString(); var memberInfo = value.GetType().GetMember(memberValue).FirstOrDefault(); if (memberInfo != null) { return memberInfo.CustomAttributes .Select(x => GetTypeRecursive(x.AttributeType)) .SelectMany(x => x) .Where(x => x != null) .Select(x => { var name = x.Name; var indexAttributeStr = name.IndexOf("Attribute"); return indexAttributeStr > 0 ? name.Substring(0, indexAttributeStr) : null; }).Where(x => !string.IsNullOrEmpty(x)).ToArray(); } return new string[0]; } private static IEnumerable GetTypeRecursive(Type type) => new Type[] { type, }.Concat(type != null ? GetTypeRecursive(type.BaseType) : new Type[] { }); } } ================================================ FILE: KHSave/Attributes/IngredientAttribute.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace KHSave.Attributes { public class IngredientAttribute : InfoAttribute { public IngredientAttribute(string name) : base(name) { } } } ================================================ FILE: KHSave/Attributes/KeyItemAttribute.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace KHSave.Attributes { public class KeyItemAttribute : InfoAttribute { public KeyItemAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/KeybladeAttribute.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace KHSave.Attributes { public class KeybladeAttribute : InfoAttribute { public KeybladeAttribute(string name) : base(name) { } } } ================================================ FILE: KHSave/Attributes/LinkAttribute.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace KHSave.Attributes { public class LinkAttribute : InfoAttribute { public LinkAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/MagicAttribute.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace KHSave.Attributes { public class MagicAttribute : InfoAttribute { public MagicAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/ManuscriptAttribute.cs ================================================ namespace KHSave.Attributes { public class ManuscriptAttribute : InfoAttribute { public ManuscriptAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/MapAttribute.cs ================================================ namespace KHSave.Attributes { public class MapAttribute : KeyItemAttribute { public MapAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/MapInfo.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using System.Linq; namespace KHSave.Attributes { public class MapInfoAttribute : InfoAttribute { public string Id { get; set; } public MapInfoAttribute(string id, string name) : base(string.IsNullOrEmpty(name) ? id : name) { Id = id; } public static string GetMapId(object value) { var memberValue = value.ToString(); var memberInfo = value.GetType().GetMember(memberValue).FirstOrDefault(); if (memberInfo != null) { if (memberInfo.GetCustomAttributes(typeof(MapInfoAttribute), false) .FirstOrDefault() is MapInfoAttribute attribute && !string.IsNullOrEmpty(attribute.Info)) { return attribute.Id; } } return null; } } } ================================================ FILE: KHSave/Attributes/MateriaAttribute.cs ================================================ namespace KHSave.Attributes { public class MateriaAttribute : MagicAttribute { public MateriaAttribute(string name = null) : base(name) { } } public class MagicMateriaAttribute : MateriaAttribute { public MagicMateriaAttribute(string name = null) : base(name) { } } public class CommandMateriaAttribute : MateriaAttribute { public CommandMateriaAttribute(string name = null) : base(name) { } } public class SupportMateriaAttribute : MateriaAttribute { public SupportMateriaAttribute(string name = null) : base(name) { } } public class CompleteMateriaAttribute : MateriaAttribute { public CompleteMateriaAttribute(string name = null) : base(name) { } } public class SummonMateriaAttribute : MateriaAttribute { public SummonMateriaAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/MogItemAttribute.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace KHSave.Attributes { public class MogItemAttribute : InfoAttribute { public MogItemAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/MoneyAttribute.cs ================================================ namespace KHSave.Attributes { public class MoneyAttribute : InfoAttribute { public MoneyAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/RecipeAttribute.cs ================================================ namespace KHSave.Attributes { public class RecipeAttribute : MogItemAttribute { public RecipeAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/ReportAttribute.cs ================================================ namespace KHSave.Attributes { public class ReportAttribute : KeyItemAttribute { public ReportAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/ShieldAttribute.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace KHSave.Attributes { public class ShieldAttribute : InfoAttribute { public ShieldAttribute(string name) : base(name) { } } } ================================================ FILE: KHSave/Attributes/SnackAttribute.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace KHSave.Attributes { public class SnackAttribute : InfoAttribute { public SnackAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/StaffAttribute.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace KHSave.Attributes { public class StaffAttribute : InfoAttribute { public StaffAttribute(string name) : base(name) { } } } ================================================ FILE: KHSave/Attributes/SummonAttribute.cs ================================================ namespace KHSave.Attributes { public class SummonAttribute : KeyItemAttribute { public SummonAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/SynthesisAttribute.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace KHSave.Attributes { public class SynthesisAttribute : InfoAttribute { public SynthesisAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/TentAttribute.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace KHSave.Attributes { public class TentAttribute : InfoAttribute { public TentAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/TrackAttribute.cs ================================================ namespace KHSave.Attributes { public class TrackAttribute : InfoAttribute { public TrackAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/UnusedAttribute.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Services; using System; using System.Linq; namespace KHSave.Attributes { public class UnusedAttribute : Attribute { private static CacheService cache = new CacheService(); public static bool IsUnused(object value) => cache.Get(value, x => { var memberValue = value.ToString(); var memberInfo = value .GetType() .GetMember(memberValue) .FirstOrDefault(); if (memberInfo != null) { if (memberInfo.GetCustomAttributes(typeof(UnusedAttribute), false).Length > 0) return true; if (memberInfo.GetCustomAttributes(typeof(InfoAttribute), false).Length > 0) return false; } return true; }); } } ================================================ FILE: KHSave/Attributes/WeaponAttribute.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace KHSave.Attributes { public class WeaponAttribute : InfoAttribute { public WeaponAttribute(string name = null) : base(name) { } } public class WeaponCloudAttribute : WeaponAttribute { public WeaponCloudAttribute(string name = null) : base(name) { } } public class WeaponBarretAttribute : WeaponAttribute { public WeaponBarretAttribute(string name = null) : base(name) { } } public class WeaponTifaAttribute : WeaponAttribute { public WeaponTifaAttribute(string name = null) : base(name) { } } public class WeaponAerithAttribute : WeaponAttribute { public WeaponAerithAttribute(string name = null) : base(name) { } } public class WeaponYuffieAttribute : WeaponAttribute { public WeaponYuffieAttribute(string name = null) : base(name) { } } public class WeaponSononAttribute : WeaponAttribute { public WeaponSononAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave/Attributes/WorldInfoAttribute.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Extensions; namespace KHSave.Attributes { public class WorldAttribute : InfoAttribute { public string Id { get; set; } public WorldAttribute(string id, string name) : base(name) { Id = id; } public static string GetWorldId(object value) => value.GetAttribute()?.Id; } } ================================================ FILE: KHSave/Extensions/AttributeExtensions.cs ================================================ using KHSave.Services; using System; using System.Linq; namespace KHSave.Extensions { public static class AttributeExtensions { private static CacheService cache = new CacheService(); public static T GetAttribute(this object value) where T : Attribute => (T)cache.Get(value, x => { var memberValue = x.ToString(); var memberInfo = x.GetType().GetMember(memberValue).FirstOrDefault(); if (memberInfo != null) { if (memberInfo.GetCustomAttributes(typeof(T), false) .FirstOrDefault() is T attribute) return attribute; } return null; }); } } ================================================ FILE: KHSave/Extensions/BitExtensions.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using System; using System.Collections.Generic; using System.Text; namespace KHSave.Extensions { public static class BitExtensions { public static bool GetFlag(this int value, int bit) { return (value & (1 << bit)) != 0; } public static int SetFlag(this int value, int bit, bool set) { if (set) { value |= 1 << bit; } else { value &= ~(1 << bit); } return value; } } } ================================================ FILE: KHSave/Extensions/DateTimeExtensions.cs ================================================ using System; namespace KHSave.Extensions { public static class DateTimeExtensions { private static DateTime _baseDateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); public static DateTime FromUnixEpoch(this int timestamp) => FromUnixEpoch((uint)timestamp); public static DateTime FromUnixEpoch(this uint timestamp) => _baseDateTime.AddSeconds(timestamp); public static uint ToUnixEpoch(this DateTime dateTime) => (uint)((dateTime.Ticks - _baseDateTime.Ticks) / TimeSpan.TicksPerSecond); } } ================================================ FILE: KHSave/KHSave.csproj ================================================  net6 ================================================ FILE: KHSave/Services/CacheService.cs ================================================ using System; using System.Collections.Generic; namespace KHSave.Services { public class CacheService { private Dictionary _cache = new Dictionary(); public T Get(object value, Func getter) { if (_cache.TryGetValue(value, out var response)) return (T)response; response = getter(value); _cache.Add(value, response); return (T)response; } } } ================================================ FILE: KHSave/Services/TransferServiceLL.cs ================================================ using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Reflection; namespace KHSave.Services { public static class TransferServiceLL { public static Dictionary> DefaultMappings = new Dictionary>() { [typeof(byte[])] = new Action((dst, src, prop) => CopyArray(dst, src, prop)), [typeof(short[])] = new Action((dst, src, prop) => CopyArray(dst, src, prop)), [typeof(ushort[])] = new Action((dst, src, prop) => CopyArray(dst, src, prop)), [typeof(int[])] = new Action((dst, src, prop) => CopyArray(dst, src, prop)), [typeof(uint[])] = new Action((dst, src, prop) => CopyArray(dst, src, prop)), [typeof(float[])] = new Action((dst, src, prop) => CopyArray(dst, src, prop)), }; public static void CopySave(object dst, object src, Dictionary> mappings) where T : class => CopySave(typeof(T), dst, src, mappings); public static void CopySave(Type type, object dst, object src, Dictionary> mappings) { foreach (var property in type.GetProperties().Where(x => x.GetMethod != null)) { if (mappings.TryGetValue(property.PropertyType, out var action)) action(dst, src, property); else if (property.PropertyType.IsPrimitive || property.PropertyType.IsEnum) { if (property.SetMethod != null) property?.SetValue(dst, property.GetValue(src)); } else if (property.PropertyType.IsArray || property.PropertyType.IsAssignableFrom(typeof(IList))) { var dstList = property.GetValue(dst) as IList; var srcList = property.GetValue(src) as IList; if (dstList != null && srcList != null) { var length = Math.Min(dstList.Count, srcList.Count); var itemType = property.PropertyType.IsArray ? property.PropertyType.GetElementType() : property.PropertyType.GetGenericArguments().FirstOrDefault(); for (var i = 0; i < length; i++) { if (dstList[i] != null && srcList[i] != null) CopySave(itemType, dstList[i], srcList[i], mappings); } if (property.SetMethod != null) property.SetValue(dst, dstList); } } else if (property.PropertyType.IsInterface || property.PropertyType.IsClass) { CopySave(property.PropertyType, property.GetValue(dst), property.GetValue(src), mappings); } } } public static void CopyArray(object dst, object src, PropertyInfo prop) { var srcValue = prop.GetValue(src) as T[]; var dstValue = prop.GetValue(dst) as T[]; if (dstValue != null) Array.Copy(srcValue, dstValue, Math.Min(srcValue.Length, dstValue.Length)); else dstValue = srcValue; prop.SetValue(dst, dstValue); } } } ================================================ FILE: KHSave/StreamHelpers.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using System; using System.IO; using System.Text; namespace KHSave { public static class StreamHelpers { public static T FromBegin(this T stream) where T : Stream => stream.SetPosition(0); public static T SetPosition(this T stream, int position) where T : Stream { stream.Seek(position, SeekOrigin.Begin); return stream; } public static bool ReadFlag(this BinaryReader reader, int offset, int bit) { reader.BaseStream.Seek(offset, SeekOrigin.Begin); return reader.ReadByte().HasFlag(bit); } public static int ReadInt32(this BinaryReader reader, int offset) { reader.BaseStream.Seek(offset, SeekOrigin.Begin); return reader.ReadInt32(); } public static byte[] ReadBytes(this Stream stream) => stream.ReadBytes((int)(stream.Length - stream.Position)); public static byte[] ReadBytes(this Stream stream, int length) { var data = new byte[length]; stream.Read(data, 0, length); return data; } public static byte[] ReadAllBytes(this Stream stream) { var data = stream.SetPosition(0).ReadBytes(); stream.Position = 0; return data; } public static string ReadString(this BinaryReader reader, int length) { var data = reader.ReadBytes(length); var terminatorIndex = Array.FindIndex(data, x => x == 0); return Encoding.UTF8.GetString(data, 0, terminatorIndex); } public static string ReadString(this BinaryReader reader, int offset, int length) { reader.BaseStream.Seek(offset, SeekOrigin.Begin); return reader.ReadString(length); } public static bool HasFlag(this byte c, int offset) { return (c & (1 << offset)) != 0; } public static void Write(this BinaryWriter writer, string str, int length) { var data = Encoding.UTF8.GetBytes(str); if (data.Length <= length) { writer.Write(data, 0, data.Length); int remainsBytes = length = data.Length; if (remainsBytes > 0) { writer.Write(new byte[remainsBytes]); } } else { writer.Write(data, 0, length); } } public static void Copy(this Stream source, Stream destination, int length, int bufferSize = 65536) { int read; byte[] buffer = new byte[Math.Min(length, bufferSize)]; while ((read = source.Read(buffer, 0, Math.Min(length, bufferSize))) != 0) { destination.Write(buffer, 0, read); length -= read; } } } } ================================================ FILE: KHSave.Archives/ArchiveFactories.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Archives.Factories; using System.IO; namespace KHSave.Archives { public static class ArchiveFactories { public static readonly IArchiveFactory Ps4Kh1 = new Ps4Kh1Factory(); public static readonly IArchiveFactory Ps4Kh2 = new Ps4Kh2Factory(); public static readonly IArchiveFactory Ps4KhRecom = new Ps4KhRecomFactory(); public static readonly IArchiveFactory Ps4KhDdd = new Ps4KhDddFactory(); public static readonly IArchiveFactory PcKh1 = new PcKh1Factory(); public static readonly IArchiveFactory PcKh2 = new PcKh2Factory(); public static readonly IArchiveFactory PcKhRecom = new PcKhRecomFactory(); public static readonly IArchiveFactory PcKhBbs = new PcKhBbsactory(); public static readonly IArchiveFactory PcKhDdd = new PcKhDddFactory(); public static readonly IArchiveFactory Ps2Psu = new Ps2PsuFactory(); public static readonly IArchiveFactory Ps2Cbs = new Ps2CbsFactory(); public static readonly IArchiveFactory Ps3Psv = new Ps3PsvFactory(); public static bool TryGetFactory(Stream stream, out IArchiveFactory archiveFactory) { if (Ps4Kh1.IsValid(stream)) archiveFactory = Ps4Kh1; else if (Ps4Kh2.IsValid(stream)) archiveFactory = Ps4Kh2; else if (Ps4KhRecom.IsValid(stream)) archiveFactory = Ps4KhRecom; else if (Ps4KhDdd.IsValid(stream)) archiveFactory = Ps4KhDdd; else if (PcKh1.IsValid(stream)) archiveFactory = PcKh1; else if (PcKh2.IsValid(stream)) archiveFactory = PcKh2; else if (PcKhRecom.IsValid(stream)) archiveFactory = PcKhRecom; else if (PcKhBbs.IsValid(stream)) archiveFactory = PcKhBbs; else if (PcKhDdd.IsValid(stream)) archiveFactory = PcKhDdd; else if (Ps2Psu.IsValid(stream)) archiveFactory = Ps2Psu; else if (Ps2Cbs.IsValid(stream)) archiveFactory = Ps2Cbs; else if (Ps3Psv.IsValid(stream)) archiveFactory = Ps3Psv; else archiveFactory = null; return archiveFactory != null; } } } ================================================ FILE: KHSave.Archives/Factories/PcKh1Factory.cs ================================================ using System.IO; namespace KHSave.Archives.Factories { internal class PcKh1Factory : IArchiveFactory { private const int EntryCount = 200; private const int Stride = 0x16C40; private const int Size = 0x11EB09D; public string Name => "PC KH1FM"; public string Description => "Kingdom Hearts Final Mix (PC)"; public IArchive Create() => new PcSaveArchive(EntryCount, Stride); public IArchiveEntry CreateEntry() => new PcSaveArchive.Entry(); public bool IsValid(Stream stream) => stream.Length == Size; public IArchive Read(Stream stream) { var archive = PcSaveArchive.Read(stream, EntryCount, Stride); archive.Name = Description; return archive; } } } ================================================ FILE: KHSave.Archives/Factories/PcKh2Factory.cs ================================================ using System.IO; namespace KHSave.Archives.Factories { internal class PcKh2Factory : IArchiveFactory { private const int EntryCount = 100; private const int Stride = 0x10FC0; private const int Size = 0x6BED08; public string Name => "PC KH2FM"; public string Description => "Kingdom Hearts II Final Mix (PC)"; public IArchive Create() => new PcSaveArchive(EntryCount, Stride); public IArchiveEntry CreateEntry() => new PcSaveArchive.Entry(); public bool IsValid(Stream stream) => stream.Length == Size; public IArchive Read(Stream stream) { var archive = PcSaveArchive.Read(stream, EntryCount, Stride); archive.Name = Description; return archive; } } } ================================================ FILE: KHSave.Archives/Factories/PcKhBbsFactory.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using System.IO; namespace KHSave.Archives.Factories { public class PcKhBbsactory : IArchiveFactory { private const int EntryCount = 100; private const int Stride = 0x13C00; private const int Size = 0x7D3B94; public string Name => "PC KHBBS"; public string Description => "Kingdom Hearts Birth By Sleep (PC)"; public IArchive Create() => new PcSaveArchive(EntryCount, Stride); public IArchive Read(Stream stream) { var archive = PcSaveArchive.Read(stream, EntryCount, Stride); archive.Name = Description; return archive; } public bool IsValid(Stream stream) => stream.Length == Size; public IArchiveEntry CreateEntry() => new PcSaveArchive.Entry(); } } ================================================ FILE: KHSave.Archives/Factories/PcKhDddFactory.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using System.IO; namespace KHSave.Archives.Factories { public class PcKhDddFactory : IArchiveFactory { private const int EntryCount = 100; private const int Stride = 0x16600; private const int Size = 0x8DAE8F; public string Name => "PC KHDDD"; public string Description => "Kingdom Hearts Dream Drop Distance (PC)"; public IArchive Create() => new PcSaveArchive(EntryCount, Stride); public IArchive Read(Stream stream) { var archive = PcSaveArchive.Read(stream, EntryCount, Stride); archive.Name = Description; return archive; } public bool IsValid(Stream stream) => stream.Length == Size; public IArchiveEntry CreateEntry() => new PcSaveArchive.Entry(); } } ================================================ FILE: KHSave.Archives/Factories/PcKhRecomFactory.cs ================================================ using System.IO; namespace KHSave.Archives.Factories { internal class PcKhRecomFactory : IArchiveFactory { private const int EntryCount = 100; private const int Stride = 0x3a30; private const int Size = 0x188F5F; public string Name => "PC RECOM"; public string Description => "Kingdom Hearts Re: Chain of Memories (PC)"; public IArchive Create() => new PcSaveArchive(EntryCount, Stride); public IArchiveEntry CreateEntry() => new PcSaveArchive.Entry(); public bool IsValid(Stream stream) => stream.Length == Size; public IArchive Read(Stream stream) { var archive = PcSaveArchive.Read(stream, EntryCount, Stride); archive.Name = Description; return archive; } } } ================================================ FILE: KHSave.Archives/Factories/Ps2CbsFactory.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace KHSave.Archives.Factories { public class Ps2CbsFactory : IArchiveFactory { public string Name => throw new NotImplementedException(); public string Description => throw new NotImplementedException(); public IArchive Create() { throw new NotImplementedException(); } public IArchiveEntry CreateEntry() { throw new NotImplementedException(); } public bool IsValid(Stream stream) { var currentPosition = stream.Position; stream.Position = 0; var result = BitConverter.ToUInt32(stream.ReadBytes(4)); stream.SetPosition((int)currentPosition); return result == 0x00554643; } public IArchive Read(Stream stream) { var archive = Ps2CbsArchive.Read(stream, 10); return archive; } } } ================================================ FILE: KHSave.Archives/Factories/Ps2PsuFactory.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace KHSave.Archives.Factories { public class Ps2PsuFactory : IArchiveFactory { public string Name => throw new NotImplementedException(); public string Description => throw new NotImplementedException(); public IArchive Create() { throw new NotImplementedException(); } public IArchiveEntry CreateEntry() { throw new NotImplementedException(); } public bool IsValid(Stream stream) { var currentPosition = stream.Position; stream.Position = 0x240; var b1 = stream.ReadByte(); stream.Position = 0x440; var b2 = stream.ReadByte(); var b3 = stream.ReadByte(); stream.SetPosition((int)currentPosition); return stream.Length > 0x600 && (byte)b1 == '.' && (byte)b2 == '.' && (byte)b3 == '.'; } public IArchive Read(Stream stream) { var archive = Ps2PsuArchive.Read(stream, 10); return archive; } } } ================================================ FILE: KHSave.Archives/Factories/Ps3PsvFactory.cs ================================================ using System; using System.IO; namespace KHSave.Archives.Factories { public class Ps3PsvFactory : IArchiveFactory { public string Name => throw new NotImplementedException(); public string Description => throw new NotImplementedException(); public IArchive Create() { throw new NotImplementedException(); } public IArchiveEntry CreateEntry() { throw new NotImplementedException(); } public bool IsValid(Stream stream) { var currentPosition = stream.Position; stream.Position = 0; var result = BitConverter.ToUInt32(stream.ReadBytes(4)); stream.SetPosition((int)currentPosition); return result == 0x50535600; } public IArchive Read(Stream stream) { return Ps3PsvArchive.Read(stream); } } } ================================================ FILE: KHSave.Archives/Factories/Ps4Kh1Factory.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using System.IO; namespace KHSave.Archives.Factories { internal class Ps4Kh1Factory : IArchiveFactory { private const int EntryCount = 200; private const int Stride = 0x16C40; private const int Size = 0x11cd800; public string Name => "PS4 KH1"; public string Description => "Kingdom Hearts Final Mix (PS4)"; public IArchive Create() => new Ps4SaveArchive(EntryCount, Stride); public IArchive Read(Stream stream) { var archive = Ps4SaveArchive.Read(stream, EntryCount, Stride); archive.Name = Description; return archive; } public bool IsValid(Stream stream) => stream.Length == Size; public IArchiveEntry CreateEntry() => new Ps4SaveArchive.Entry(); } } ================================================ FILE: KHSave.Archives/Factories/Ps4Kh2Factory.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using System.IO; namespace KHSave.Archives.Factories { internal class Ps4Kh2Factory : IArchiveFactory { private const int EntryCount = 100; private const int Stride = 0x10FC0; private const int Size = 0x6a4c00; public string Name => "PS4 KH2"; public string Description => "Kingdom Hearts II Final Mix (PS4)"; public IArchive Create() => new Ps4SaveArchive(EntryCount, Stride); public IArchive Read(Stream stream) { var archive = Ps4SaveArchive.Read(stream, EntryCount, Stride); archive.Name = Description; return archive; } public bool IsValid(Stream stream) => stream.Length == Size; public IArchiveEntry CreateEntry() => new Ps4SaveArchive.Entry(); } } ================================================ FILE: KHSave.Archives/Factories/Ps4KhDddFactory.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using System.IO; namespace KHSave.Archives.Factories { public class Ps4KhDddFactory : IArchiveFactory { private const int EntryCount = 100; private const int Stride = 0x16600; private const int Size = 0x8bfc00; public string Name => "PS4 KHDDD"; public string Description => "Kingdom Hearts Dream Drop Distance (PS4)"; public IArchive Create() => new Ps4SaveArchive(EntryCount, Stride); public IArchive Read(Stream stream) { var archive = Ps4SaveArchive.Read(stream, EntryCount, Stride); archive.Name = Description; return archive; } public bool IsValid(Stream stream) => stream.Length == Size; public IArchiveEntry CreateEntry() => new Ps4SaveArchive.Entry(); } } ================================================ FILE: KHSave.Archives/Factories/Ps4KhRecomFactory.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using System.IO; namespace KHSave.Archives.Factories { public class Ps4KhRecomFactory : IArchiveFactory { private const int EntryCount = 100; private const int Stride = 0x3a30; private const int Size = 0x16e000; public string Name => "PS4 RECOM"; public string Description => "Kingdom Hearts Re: Chain of Memories (PS4)"; public IArchive Create() => new Ps4SaveArchive(EntryCount, Stride); public IArchive Read(Stream stream) { var archive = Ps4SaveArchive.Read(stream, EntryCount, Stride); archive.Name = Description; return archive; } public bool IsValid(Stream stream) => stream.Length == Size; public IArchiveEntry CreateEntry() => new Ps4SaveArchive.Entry(); } } ================================================ FILE: KHSave.Archives/IArchive.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using System.Collections.Generic; using System.IO; namespace KHSave.Archives { public interface IArchive { string Name { get; } int MaxEntryCount { get; } IList Entries { get; } void Write(Stream stream); } } ================================================ FILE: KHSave.Archives/IArchiveEntry.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using System; namespace KHSave.Archives { public interface IArchiveEntry { string Name { get; set; } DateTime DateCreated { get; set; } int FlagCreated { get; set; } DateTime DateModified { get; set; } int FlagModified { get; set; } byte[] Data { get; set; } } } ================================================ FILE: KHSave.Archives/IArchiveFactory.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using System.IO; namespace KHSave.Archives { public interface IArchiveFactory { string Name { get; } string Description { get; } IArchive Create(); IArchive Read(Stream stream); bool IsValid(Stream stream); IArchiveEntry CreateEntry(); } } ================================================ FILE: KHSave.Archives/KHSave.Archives.csproj ================================================ net6 ================================================ FILE: KHSave.Archives/PcSaveArchive.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using Xe.BinaryMapper; namespace KHSave.Archives { internal class PcSaveArchive : IArchive { public class Entry : IArchiveEntry { private static readonly long UnixTimeBase = new DateTime(1970, 1, 1).Ticks; [Data(Count = 0x40)] public string Name { get; set; } [Data(0x40)] public int RawDateCreated { get; set; } [Data(0x44)] public int FlagCreated { get; set; } [Data(0x48)] public int RawDateModified { get; set; } [Data(0x4c)] public int FlagModified { get; set; } [Data(0x50)] public int Length { get; set; } [Data(0x54)] public int SomeKindOfFlag { get; set; } [Data(0x58, Count = 0x100)] public byte[] Padding { get; set; } public DateTime DateCreated { get => Map(RawDateCreated); set => RawDateCreated = Map(value); } public DateTime DateModified { get => Map(RawDateModified); set => RawDateModified = Map(value); } public byte[] Data { get; set; } private static DateTime Map(int ticks) => new DateTime(ticks * TimeSpan.TicksPerSecond + UnixTimeBase); private static int Map(DateTime dateTime) => (int)((dateTime.Ticks - UnixTimeBase) / TimeSpan.TicksPerSecond); } private const int PngHeaderLength = 0x70; private const int EncryptedLength = 0xF0; private const int KeyLength = 0x10; private const int KeyOffset = EncryptedLength - KeyLength; private const int EntryLength = 0x158; private readonly int _stride; private readonly byte[] _encryptionKey; private byte[] _pngHeader; private byte[] _pngFooter; internal PcSaveArchive(int entryCount, int stride) { MaxEntryCount = entryCount; _stride = stride; _encryptionKey = new byte[KeyLength]; Entries = new List(MaxEntryCount); } private PcSaveArchive(Stream stream, int entryCount, int stride) { MaxEntryCount = entryCount; _stride = stride; _pngHeader = new byte[PngHeaderLength]; stream.Read(_pngHeader); var entryData = new byte[entryCount * EntryLength]; stream.Read(entryData); _encryptionKey = new byte[KeyLength]; Array.Copy(entryData, KeyOffset, _encryptionKey, 0, KeyLength); for (var i = 0; i < EncryptedLength; i++) entryData[i] ^= _encryptionKey[i & 15]; var entryStream = new MemoryStream(entryData); Entries = Enumerable.Range(0, entryCount) .Select(i => BinaryMapping.ReadObject(entryStream, i * EntryLength)) .ToArray(); var baseOffset = stream.Position; foreach (var entry in Entries.Cast()) { entry.Data = new byte[entry.Length]; stream.Read(entry.Data, 0, entry.Length); baseOffset += _stride; stream.Position = baseOffset; } var remainingByteCount = stream.Length - stream.Position; _pngFooter = new byte[remainingByteCount]; stream.Read(_pngFooter); } public string Name { get; internal set; } = "Kingdom Hearts PC Save Archive"; public int MaxEntryCount { get; } public IList Entries { get; } public void Write(Stream stream) { var entries = Entries .Select(x => new Entry { Name = x.Name, DateCreated = x.DateCreated, FlagCreated = x.FlagCreated, DateModified = x.DateModified, FlagModified = x.FlagModified, Length = x.Data.Length, Data = x.Data, Padding = new byte[0x100] }) .Take(MaxEntryCount) .ToList(); while (entries.Count < MaxEntryCount) entries.Add(new Entry { Name = string.Empty, Data = new byte[0] }); stream.Position = 0; stream.Write(_pngHeader); var entryData = new byte[entries.Count * EntryLength]; using var entryStream = new MemoryStream(entryData); foreach (var entry in entries) BinaryMapping.WriteObject(entryStream, entry, (int)entryStream.Position); for (var i = 0; i < EncryptedLength; i++) entryData[i] ^= _encryptionKey[i & 15]; stream.Write(entryData); var baseOffset = (int)stream.Position; foreach (var entry in entries) { stream.Write(entry.Data, 0, (int)entry.Length); var padding = _stride - entry.Length; while (--padding > 0) stream.WriteByte(0); baseOffset += _stride; stream.Position = baseOffset; } stream.Write(_pngFooter); } public static PcSaveArchive Read(Stream stream, int entryCount, int stride) => new PcSaveArchive(stream, entryCount, stride); } } ================================================ FILE: KHSave.Archives/Ps2CbsArchive.cs ================================================ // https://github.com/root670/PS2SaveUtility/blob/master/src/CBSFile.cpp using ICSharpCode.SharpZipLib.Zip.Compression.Streams; using System; using System.Collections.Generic; using System.IO; using Xe.BinaryMapper; namespace KHSave.Archives { public class Ps2CbsArchive : IArchive { private class Header { [Data(Count = 4)] public uint Magic { get; set; } [Data] public uint Unk1 { get; set; } [Data] public uint DataOffset { get; set; } [Data] public uint DecompressedSize { get; set; } [Data] public uint CompressedSize { get; set; } [Data(Count = 32)] public string Name { get; set; } [Data] public sceMcStDateTime Created { get; set; } [Data] public sceMcStDateTime Modified { get; set; } [Data] public uint Unk2 { get; set; } [Data] public uint Mode { get; set; } [Data(Count = 16)] public byte[] Unk3 { get; set; } [Data(Count = 72)] public string Title { get; set; } [Data(Count = 132)] public string Description { get; set; } } public class Entry : IArchiveEntry { [Data] public sceMcStDateTime Created { get; set; } [Data] public sceMcStDateTime Modified { get; set; } [Data] public uint Length { get; set; } [Data] public uint Mode { get; set; } [Data(Count = 8)] public byte[] Unk1 { get; set; } [Data(Count = 32)] public string Name { get; set; } public byte[] Data { get; set; } public DateTime DateCreated { get => Map(Created); set => throw new NotImplementedException(); } public int FlagCreated { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } public DateTime DateModified { get => Map(Modified); set => throw new NotImplementedException(); } public int FlagModified { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } private static DateTime Map(sceMcStDateTime date) => new(date.Year, date.Month, date.Day, date.Hour, date.Min, date.Sec); } internal Ps2CbsArchive(int entryCount) { MaxEntryCount = entryCount; Entries = new List(MaxEntryCount); } private Ps2CbsArchive(Stream stream, int entryCount) { MaxEntryCount = entryCount; Entries = new List(MaxEntryCount); var header = BinaryMapping.ReadObject
(stream); var len = stream.Length - stream.Position; var buff = new byte[len]; stream.Read(buff, 0, (int)len); rc4Crypt(buff, (int)len); using var decompressedStream = new MemoryStream(Decompress(buff, (int)header.DecompressedSize)); long offset = 0; while (offset < (header.DecompressedSize - 64)) { var entry = BinaryMapping.ReadObject(decompressedStream); entry.Data = new byte[entry.Length]; decompressedStream.Read(entry.Data, 0, (int)entry.Length); offset = decompressedStream.Position; Entries.Add(entry); } } public string Name => "PS2 CBS Archive"; public int MaxEntryCount { get; } public IList Entries { get; } public void Write(Stream stream) { throw new NotImplementedException(); } public static Ps2CbsArchive Read(Stream stream, int entryCount) => new Ps2CbsArchive(stream, entryCount); private static byte[] Decompress(byte[] buffer, int length) { using var compressedStream = new MemoryStream(buffer); using var inflater = new InflaterInputStream(compressedStream); var decomp = new byte[length]; inflater.Read(decomp); return decomp; } private static void rc4Crypt(byte[] buf, int bufLen) { byte j = 0; byte k = 0; byte temp; byte[] s = new byte[] { 0x5f, 0x1f, 0x85, 0x6f, 0x31, 0xaa, 0x3b, 0x18, 0x21, 0xb9, 0xce, 0x1c, 0x07, 0x4c, 0x9c, 0xb4, 0x81, 0xb8, 0xef, 0x98, 0x59, 0xae, 0xf9, 0x26, 0xe3, 0x80, 0xa3, 0x29, 0x2d, 0x73, 0x51, 0x62, 0x7c, 0x64, 0x46, 0xf4, 0x34, 0x1a, 0xf6, 0xe1, 0xba, 0x3a, 0x0d, 0x82, 0x79, 0x0a, 0x5c, 0x16, 0x71, 0x49, 0x8e, 0xac, 0x8c, 0x9f, 0x35, 0x19, 0x45, 0x94, 0x3f, 0x56, 0x0c, 0x91, 0x00, 0x0b, 0xd7, 0xb0, 0xdd, 0x39, 0x66, 0xa1, 0x76, 0x52, 0x13, 0x57, 0xf3, 0xbb, 0x4e, 0xe5, 0xdc, 0xf0, 0x65, 0x84, 0xb2, 0xd6, 0xdf, 0x15, 0x3c, 0x63, 0x1d, 0x89, 0x14, 0xbd, 0xd2, 0x36, 0xfe, 0xb1, 0xca, 0x8b, 0xa4, 0xc6, 0x9e, 0x67, 0x47, 0x37, 0x42, 0x6d, 0x6a, 0x03, 0x92, 0x70, 0x05, 0x7d, 0x96, 0x2f, 0x40, 0x90, 0xc4, 0xf1, 0x3e, 0x3d, 0x01, 0xf7, 0x68, 0x1e, 0xc3, 0xfc, 0x72, 0xb5, 0x54, 0xcf, 0xe7, 0x41, 0xe4, 0x4d, 0x83, 0x55, 0x12, 0x22, 0x09, 0x78, 0xfa, 0xde, 0xa7, 0x06, 0x08, 0x23, 0xbf, 0x0f, 0xcc, 0xc1, 0x97, 0x61, 0xc5, 0x4a, 0xe6, 0xa0, 0x11, 0xc2, 0xea, 0x74, 0x02, 0x87, 0xd5, 0xd1, 0x9d, 0xb7, 0x7e, 0x38, 0x60, 0x53, 0x95, 0x8d, 0x25, 0x77, 0x10, 0x5e, 0x9b, 0x7f, 0xd8, 0x6e, 0xda, 0xa2, 0x2e, 0x20, 0x4f, 0xcd, 0x8f, 0xcb, 0xbe, 0x5a, 0xe0, 0xed, 0x2c, 0x9a, 0xd4, 0xe2, 0xaf, 0xd0, 0xa9, 0xe8, 0xad, 0x7a, 0xbc, 0xa8, 0xf2, 0xee, 0xeb, 0xf5, 0xa6, 0x99, 0x28, 0x24, 0x6c, 0x2b, 0x75, 0x5d, 0xf8, 0xd3, 0x86, 0x17, 0xfb, 0xc0, 0x7b, 0xb3, 0x58, 0xdb, 0xc7, 0x4b, 0xff, 0x04, 0x50, 0xe9, 0x88, 0x69, 0xc9, 0x2a, 0xab, 0xfd, 0x5b, 0x1b, 0x8a, 0xd9, 0xec, 0x27, 0x44, 0x0e, 0x33, 0xc8, 0x6b, 0x93, 0x32, 0x48, 0xb6, 0x30, 0x43, 0xa5 }; for (int i = 0; i < bufLen; i++) { j += 1; k += s[j]; temp = s[j]; s[j] = s[k]; s[k] = temp; buf[i] ^= s[(s[j] + s[k]) & 0xFF]; } } } } ================================================ FILE: KHSave.Archives/Ps2PsuArchive.cs ================================================ // https://github.com/root670/PS2SaveUtility/blob/master/src/PSUFile.cpp using System; using System.Collections.Generic; using System.IO; using Xe.BinaryMapper; namespace KHSave.Archives { public class Ps2PsuArchive : IArchive { private const int Alignment = 1024; public class Entry : IArchiveEntry { [Data] public uint Mode { get; set; } [Data] public uint Length { get; set; } [Data] public sceMcStDateTime Created { get; set; } [Data] public uint Cluster { get; set; } [Data] public uint DirIndex { get; set; } [Data] public sceMcStDateTime Modified { get; set; } [Data] public uint Attr { get; set; } [Data(Count = 28)] public byte[] Padding { get; set; } [Data(Count = 32)] public string Name { get; set; } [Data(Count = 0x1A0)] public byte[] Padding2 { get; set; } public byte[] Data { get; set; } public DateTime DateCreated { get => Map(Created); set => throw new NotImplementedException(); } public int FlagCreated { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } public DateTime DateModified { get => Map(Modified); set => throw new NotImplementedException(); } public int FlagModified { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } private static DateTime Map(sceMcStDateTime date) => new(date.Year, date.Month, date.Day, date.Hour, date.Min, date.Sec); } internal Ps2PsuArchive(int entryCount) { MaxEntryCount = entryCount; Entries = new List(MaxEntryCount); } private Ps2PsuArchive(Stream stream, int entryCount) { MaxEntryCount = entryCount; Entries = new List(MaxEntryCount); var header = BinaryMapping.ReadObject(stream); for (int i = 0; i < header.Length; i++) { var file = BinaryMapping.ReadObject(stream); file.Data = new byte[file.Length]; stream.Read(file.Data, 0, (int)file.Length); var offset_shift = file.Length % Alignment; var pos2 = offset_shift > 0 ? stream.Position + Alignment - offset_shift : stream.Position; stream.Position = pos2; Entries.Add(file); } } public string Name => "PS2 PSU Archive"; public int MaxEntryCount { get; } public IList Entries { get; } public void Write(Stream stream) { throw new NotImplementedException(); } public static Ps2PsuArchive Read(Stream stream, int entryCount) => new Ps2PsuArchive(stream, entryCount); } public class sceMcStDateTime { [Data] public byte Resv2 { get; set; } [Data] public byte Sec { get; set; } [Data] public byte Min { get; set; } [Data] public byte Hour { get; set; } [Data] public byte Day { get; set; } [Data] public byte Month { get; set; } [Data] public ushort Year { get; set; } } } ================================================ FILE: KHSave.Archives/Ps3PsvArchive.cs ================================================ // https://github.com/PMStanley/PSV-Exporter/blob/master/PSVFormat.pas using System; using System.Collections.Generic; using System.IO; using System.Linq; using Xe.BinaryMapper; namespace KHSave.Archives { public class Ps3PsvArchive : IArchive { private class Header { [Data] public uint Magic { get; set; } [Data] public int Padding { get; set; } [Data(Count = 0x14)] public byte[] KeySeed { get; set; } [Data(Count = 0x14)] public byte[] Signature { get; set; } [Data(Count = 8)] public byte[] Padding2 { get; set; } [Data] public int HeaderSize { get; set; } [Data] public int SaveType { get; set; } } private class Ps2Header { [Data] public int DisplaySize { get; set; } [Data] public int SysPos { get; set; } [Data] public int SysSize { get; set; } [Data] public int Icon1Pos { get; set; } [Data] public int Icon1Size { get; set; } [Data] public int Icon2Pos { get; set; } [Data] public int Icon2Size { get; set; } [Data] public int Icon3Pos { get; set; } [Data] public int Icon3Size { get; set; } [Data] public int NumFiles { get; set; } } private class Ps2MainDirInfo { [Data] public sceMcStDateTime Created { get; set; } [Data] public sceMcStDateTime Modified { get; set; } [Data] public int NumFilesInDir { get; set; } [Data] public int Attr { get; set; } [Data(Count = 32)] public string Name { get; set; } } private class Ps2FileEntry : IArchiveEntry { [Data] public sceMcStDateTime Created { get; set; } [Data] public sceMcStDateTime Modified { get; set; } [Data] public int Size { get; set; } [Data] public int Attr { get; set; } [Data(Count = 32)] public string Name { get; set; } [Data] public int Offset { get; set; } public byte[] Data { get; set; } public DateTime DateCreated { get => Map(Created); set => throw new NotImplementedException(); } public int FlagCreated { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } public DateTime DateModified { get => Map(Modified); set => throw new NotImplementedException(); } public int FlagModified { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } private static DateTime Map(sceMcStDateTime date) => new(date.Year, date.Month, date.Day, date.Hour, date.Min, date.Sec); } internal Ps3PsvArchive() { Entries = new List(MaxEntryCount); } private Ps3PsvArchive(Stream stream) { Entries = new List(MaxEntryCount); var header = BinaryMapping.ReadObject
(stream); //psv could also store ps1 saves //i'm ignoring that fact right now and only implement the ps2 side if (header.SaveType == 1) return; var ps2Header = BinaryMapping.ReadObject(stream); stream.Position += 0x38; var entries = Enumerable.Range(0, ps2Header.NumFiles) .Select(x => BinaryMapping.ReadObject(stream, (int)stream.Position)) .ToArray(); foreach (var entry in entries) { stream.Position = entry.Offset; entry.Data = new byte[entry.Size]; stream.Read(entry.Data, 0, entry.Size); } Entries = entries; } public string Name => "PS3 PSV"; public int MaxEntryCount { get; } public IList Entries { get; } public void Write(Stream stream) { throw new NotImplementedException(); } public static Ps3PsvArchive Read(Stream stream) => new Ps3PsvArchive(stream); } } ================================================ FILE: KHSave.Archives/Ps4SaveArchive.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using System; using System.Collections.Generic; using System.IO; using System.Linq; using Xe.BinaryMapper; namespace KHSave.Archives { internal class Ps4SaveArchive : IArchive { private const int Alignment = 0x400; public class Entry : IArchiveEntry { private static readonly long UnixTimeBase = new DateTime(1970, 1, 1).Ticks; [Data(Count = 0x40)] public string Name { get; set; } [Data(0x40)] public int RawDateCreated { get; set; } [Data(0x44)] public int FlagCreated { get; set; } [Data(0x48)] public int RawDateModified { get; set; } [Data(0x4c)] public int FlagModified { get; set; } [Data(0x50)] public int Length { get; set; } [Data(0x54)] public int SomeKindOfFlag { get; set; } public DateTime DateCreated { get => Map(RawDateCreated); set => RawDateCreated = Map(value); } public DateTime DateModified { get => Map(RawDateModified); set => RawDateModified = Map(value); } public byte[] Data { get; set; } private static DateTime Map(int ticks) => new DateTime(ticks * TimeSpan.TicksPerSecond + UnixTimeBase); private static int Map(DateTime dateTime) => (int)((dateTime.Ticks - UnixTimeBase) / TimeSpan.TicksPerSecond); } private readonly int _stride; internal Ps4SaveArchive(int entryCount, int stride) { MaxEntryCount = entryCount; _stride = stride; Entries = new List(MaxEntryCount); } private Ps4SaveArchive(Stream stream, int entryCount, int stride) { MaxEntryCount = entryCount; _stride = stride; var entries = Enumerable.Range(0, entryCount) .Select(x => BinaryMapping.ReadObject(stream, (int)stream.Position)) .ToArray(); var baseOffset = stream.Position; foreach (var entry in entries) { stream.Position = baseOffset; entry.Data = new byte[entry.Length]; stream.Read(entry.Data, 0, (int)entry.Length); baseOffset += _stride; } Entries = entries; } public string Name { get; internal set; } = "PS4 Save Archive"; public int MaxEntryCount { get; } public IList Entries { get; } public void Write(Stream stream) { var entries = Entries .Select(x => new Entry { Name = x.Name, DateCreated = x.DateCreated, FlagCreated = x.FlagCreated, DateModified = x.DateModified, FlagModified = x.FlagModified, Length = x.Data.Length, Data = x.Data }) .Take(MaxEntryCount) .ToList(); while (entries.Count < MaxEntryCount) entries.Add(new Entry { Name = string.Empty, Data = new byte[0] }); stream.Position = 0; foreach (var entry in entries) { BinaryMapping.WriteObject(stream, entry, (int)stream.Position); } var baseOffset = (int)stream.Position; foreach (var entry in entries) { stream.Position = baseOffset; baseOffset += _stride; stream.Write(entry.Data, 0, (int)entry.Length); var padding = _stride - entry.Length; while (--padding > 0) stream.WriteByte(0); } stream.SetLength(baseOffset + Alignment - (baseOffset % Alignment)); } public static Ps4SaveArchive Read(Stream stream, int entryCount, int stride) => new Ps4SaveArchive(stream, entryCount, stride); } } ================================================ FILE: KHSave.Lib02/KHSave.Lib02.csproj ================================================  net6 ================================================ FILE: KHSave.Lib02/Models/Objective.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using Xe.BinaryMapper; namespace KHSave.Trssv.Models { public class Objective { // bit 0: unlocked // bit 4: unread [Data] public short Flags { get; set; } [Data] public short Progress { get; set; } } } ================================================ FILE: KHSave.Lib02/Models/PlayableCharacter.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using Xe.BinaryMapper; namespace KHSave.Trssv.Models { public class PlayableCharacter { [Data(0, 0x200)] public byte[] Data { get; set; } [Data(0x08C)] public int Hp { get; set; } [Data(0x090)] public int Mp { get; set; } [Data(0x094)] public int Focus { get; set; } } } ================================================ FILE: KHSave.Lib02/Models/Slot.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Trssv.Types; using System.Collections.Generic; using Xe.BinaryMapper; namespace KHSave.Trssv.Models { public class Slot { [Data(0, 0x3B40)] public byte[] Data { get; set; } //[Data(0x00)] public bool IsDataExists { get; set; } // Bit 0 //[Data(0x00)] public bool SaveClear { get; set; } // Bit 2 [Data(0x04)] public DifficultyType Difficulty { get; set; } [Data(0x18)] public int Experience { get; set; } [Data(0x20)] public byte Level { get; set; } [Data(0x24)] public LocationType Location { get; set; } [Data(0x30)] public int EnemiesDefeated { get; set; } [Data(0x34)] public int StyleChangesPerformed { get; set; } [Data(0x3C)] public int MagicFiragaUses { get; set; } [Data(0x44)] public int MagicBlizzardUses { get; set; } [Data(0x4C)] public int MagicThundagaUses { get; set; } [Data(0x54)] public int MagicUnknown1Uses { get; set; } [Data(0x5C)] public int MagicUnknown2Uses { get; set; } [Data(0x64)] public int MagicCuragaUses { get; set; } [Data(0xA30, 52, 4)] public List Objectives { get; set; } [Data(0x2384, 5, 0x200)] public List Pc { get; set; } [Data(0x2e10)] public int StoryProgression { get; set; } [Data(0x3324, 0x100)] public string MapPath { get; set; } [Data(0x3424, 0x40)] public string MapSpawn { get; set; } [Data(0x3464, 0x100)] public string PlayerScript { get; set; } [Data(0x3564, 0x100)] public string PlayerCharacter { get; set; } [Data(0x3664, 0x100)] public string SupportCharacter { get; set; } [Data(0x3a78)] public CommandType Shortcut1Circle { get; set; } [Data(0x3a7c)] public CommandType Shortcut1Triangle { get; set; } [Data(0x3a80)] public CommandType Shortcut1Square { get; set; } [Data(0x3a84)] public CommandType Shortcut1Cross { get; set; } [Data(0x3a88)] public CommandType Shortcut2Circle { get; set; } [Data(0x3a8c)] public CommandType Shortcut2Triangle { get; set; } [Data(0x3a90)] public CommandType Shortcut2Square { get; set; } [Data(0x3a94)] public CommandType Shortcut2Cross { get; set; } } } ================================================ FILE: KHSave.Lib02/SaveKh02.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Trssv.Models; using System.Collections.Generic; using System.IO; using Xe.BinaryMapper; namespace KHSave.Trssv { public class SaveKh02 { [Data(0, 0x1725B0)] public byte[] Data { get; set; } [Data(0x10)] public bool IsVibrationEnable { get; set; } [Data] public bool InvertCameraVertical { get; set; } [Data] public bool InvertCameraHorizontal { get; set; } [Data] public bool IsMapVisible { get; set; } [Data] public bool IsSubtitlesVisible { get; set; } [Data] public bool Unk10_Bit5 { get; set; } [Data] public bool CanEarnExp { get; set; } [Data(0x14)] public int CameraSpeed { get; set; } [Data(0x18)] public int Brightness { get; set; } [Data(0x1C)] public int TheaterModeWatched { get; set; } [Data(0x38)] public int TheaterMode { get; set; } [Data(0xB0, 100, 0x3B40)] public List Slots { get; set; } public static bool IsValid(Stream stream) { var prevPosition = stream.Position; var magicCode = new BinaryReader(stream).ReadInt32(); stream.Position = prevPosition; return magicCode == 0x45564153; // SAVE } public void Write(Stream stream) => BinaryMapping.WriteObject(stream, this); public static SaveKh02 Read(Stream stream) => BinaryMapping.ReadObject(stream); } } ================================================ FILE: KHSave.Lib02/Types/CommandType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Trssv.Types { public enum CommandType { [Info("Empty")] Empty = 0, [Info("Counter Blast")] CounterBlast = 26, [Info("Attack")] Attack = 46, [Info("Magic")] Magic = 49, [Magic("Firaga")] Firaga = 51, [Magic("Firaja")] Firaja = 52, [Magic("Blizzaga")] Blizzaga = 55, [Magic("Blizzaja")] Blizzaja = 56, [Magic("Thundaga")] Thundaga = 59, [Magic("Thundaja")] Thundaja = 60, [Magic("Curaga")] Curaga = 71, [Info("Items")] Items = 77, [Consumable("Potion")] Potion, [Consumable("Hi-Potion")] HiPotion, [Consumable("Mega-Potion")] MegaPotion, [Consumable("Ether")] Ether, [Consumable("Mega-Ether")] MegaEther, [Consumable("Elixir")] Elixir, [Consumable("Megalixir")] Megalixir, [Info("Talk")] Talk = 88, [Info("Open")] Open, [Info("Examine")] Examine, [Info("Spellweaver")] Spellweaver = 112, [Info("Wayfinder")] Wayfinder, [Info("Finish Spellweaver")] Finish1 = 134, [Info("Finish Wayfinder")] Finish2, [Info("Wayfinder (final boss)")] WayfinderAlt = 167, [Info("Prism Rain")] PrismRain = 210, } } ================================================ FILE: KHSave.Lib02/Types/DifficultyType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Trssv.Types { public enum DifficultyType : byte { [Info] Beginner, [Info] Normal, [Info] Proud, [Info] Critical } } ================================================ FILE: KHSave.Lib02/Types/LocationType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Trssv.Types { public enum LocationType : byte { [Info("Main Road")] Location00, [Info("Castle Town (variant #1)")] Location01, [Info("Castle Town (variant #2)")] Location02, [Info("Castle Town (variant #3)")] Location03, [Info("The World Within (variant #1)")] Location04, [Info("The World Within (variant #2)")] Location05, [Info("The World Within (variant #3)")] Location06, [Info("The World Within (variant #4)")] Location07, [Info("The World Within (variant #5)")] Location08, [Info("The World Within (variant #6)")] Location09, [Info("The World Within (variant #7)")] Location0a, [Info("The World Within (variant #8)")] Location0b, [Info("The World Within (variant #9)")] Location0c, [Info("The World Within (variant #10)")] Location0d, [Info("The World Within (variant #11)")] Location0e, [Info("The World Within (variant #12)")] Location0f, [Info("The World Within (variant #13)")] Location10, [Info("The World Within (variant #14)")] Location11, [Info("The World Within (variant #15)")] Location12, [Info("Uncertain Path")] Location13, [Info("Rocky Path (variant #1)")] Location14, [Info("Rocky Path (variant #2)")] Location15, [Info("Path's End")] Location16, [Info("Depths of Darkness (variant #1)")] Location17, [Info("Depths of Darkness (variant #2)")] Location18, [Info("Destiny Islands")] Location19, } } ================================================ FILE: KHSave.Lib02/Types/MapType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Trssv.Types { public enum MapType { [MapInfo("dw_01", "Main Road")] dw_01, [MapInfo("dw_02", "Castle Town")] dw_02, [MapInfo("dw_03", "The World Within")] dw_03, [MapInfo("dw_04", "Inside the mirror (Road)")] dw_04, [MapInfo("dw_05", "Inside the mirror (Colums)")] dw_05, [MapInfo("dw_06", "Inside the mirror (Dwarf)")] dw_06, [MapInfo("dw_07", "Inside the mirror (Battle)")] dw_07, [MapInfo("dw_08", "Forest of Thorns")] dw_08, [MapInfo("dw_09", "Depths of Darkness")] dw_09, [MapInfo("dw_10", "Destiny Island")] dw_10, [MapInfo("dw_11", "Boss Rush (vs. Darkside)")] dw_11, [MapInfo("dw_12", "Boss Rush (Columns room)")] dw_12, [MapInfo("dw_58", "Opening")] dw_58, [MapInfo("dw_59", "dw59 (infinite loading screen)")] dw_59, [MapInfo("dw_60", "Ending")] dw_60, } } ================================================ FILE: KHSave.Lib02/Types/SpawnType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Trssv.Types { public enum SpawnType { [Info] dw_01_Lv_AutoSave_01, [Info] dw_01_Lv_AutoSave_02, [Info] dw_01_Lv_AutoSave_03, [Info] dw_01_Lv_AutoSave_04, [Info] dw_01_Lv_AutoSave_05, [Info] dw_01_Lv_AutoSave_06, [Info] dw_01_Lv_Debug_01, [Info] dw_01_Lv_Debug_02, [Info] dw_01_Lv_Debug_03, [Info] dw_01_Lv_Skip_dw004, [Info] dw_01_Lv_Skip_dw005, [Info] dw_01_Lv_Skip_dw006, [Info] dw_01_Lv_Skip_dw007, [Info] dw_01_Lv_Skip_dw008, [Info] dw_01_Lv_Start_01, [Info] dw_01_Lv_Start_04, [Info] dw_01_Lv_Start_05, [Info] dw_02_Lv_AutoSave_01, [Info] dw_02_Lv_AutoSave_02, [Info] dw_02_Lv_AutoSave_03, [Info] dw_02_Lv_AutoSave_04, [Info] dw_02_Lv_AutoSave_05, [Info] dw_02_Lv_AutoSave_06, [Info] dw_02_Lv_AutoSave_07, [Info] dw_02_Lv_Debug_01, [Info] dw_02_Lv_Debug_02, [Info] dw_02_Lv_Debug_03, [Info] dw_02_Lv_Debug_04, [Info] dw_02_Lv_Debug_ReStart, [Info] dw_02_Lv_Retry_01, [Info] dw_02_Lv_Save_01, [Info] dw_02_Lv_Skip_dw011, [Info] dw_02_Lv_Skip_dw012, [Info] dw_02_Lv_Start_01, [Info] dw_02_Lv_Start_02, [Info] dw_02_Lv_Start_03, [Info] dw_03_Lv_AutoSave, [Info] dw_03_Lv_AutoSave_01, [Info] dw_03_Lv_AutoSave_02, [Info] dw_03_Lv_AutoSave_03, [Info] dw_03_Lv_AutoSave_04, [Info] dw_03_Lv_AutoSave_05, [Info] dw_03_Lv_AutoSave_06, [Info] dw_03_Lv_AutoSave_07, [Info] dw_03_Lv_AutoSave_08, [Info] dw_03_Lv_AutoSave_09, [Info] dw_03_Lv_ChallengeClear, [Info] dw_03_Lv_Clear_dw_04, [Info] dw_03_Lv_Clear_dw_05, [Info] dw_03_Lv_Clear_dw_06, [Info] dw_03_Lv_Debug_01, [Info] dw_03_Lv_Save_01, [Info] dw_03_Lv_Start, [Info] dw_03_Lv_Start_01, [Info] dw_03_Lv_Start_02, [Info] dw_03_Lv_Start_03, [Info] dw_03_Lv_Start_04, [Info] dw_03_Lv_Start_05, [Info] dw_03_Lv_Start_06, [Info] dw_03_Lv_Start_07, [Info] dw_03_Lv_Start_08, [Info] dw_03_Lv_Start_09, [Info] dw_04_Lv_AutoSave_01, [Info] dw_04_Lv_AutoSave_02, [Info] dw_04_Lv_Start_01, [Info] dw_04_Lv_Start_02, [Info] dw_04_Lv_Start_03, [Info] dw_04_Lv_Start_04, [Info] dw_05_Lv_AutoSave_01, [Info] dw_05_Lv_AutoSave_02, [Info] dw_05_Lv_Returned_01, [Info] dw_05_Lv_Returned_02, [Info] dw_05_Lv_Returned_03, [Info] dw_05_Lv_Returned_04, [Info] dw_05_Lv_Start_01, [Info] dw_05_Lv_Start_02, [Info] dw_05_Lv_Start_03, [Info] dw_05_Lv_Start_04, [Info] dw_05_Normal, [Info] dw_06_Lv_AutoSave_01, [Info] dw_06_Lv_AutoSave_02, [Info] dw_06_Lv_AutoSave_03, [Info] dw_06_Lv_Restart_A1, [Info] dw_06_Lv_Restart_A2, [Info] dw_06_Lv_Restart_B, [Info] dw_06_Lv_Restart_C, [Info] dw_06_Lv_Restart_D, [Info] dw_06_Lv_Restart_E, [Info] dw_06_Lv_Restart_F, [Info] dw_06_Lv_Start_01, [Info] dw_08_debug_Start_01, [Info] dw_08_debug_Start_02, [Info] dw_08_debug_Start_03, [Info] dw_08_debug_Start_04, // [Info] dw_08_Lv_Save_03, [Info] dw_09_Lv_AutoSave_02, [Info] dw_09_Lv_Retry_01, [Info] dw_09_Lv_Save_01, [Info] dw_09_Lv_skip_dw025, [Info] dw_09_Lv_skip_dw026, [Info] dw_09_Lv_Start_01, [Info] dw_09_Lv_Start_02, [Info] dw_10_Bt_Start_02, [Info] dw_11_Lv_Start_01, [Info] dw_12_Lv_Start_01, [Info] dw_52_Lv_Start_01, [Info] dw_53_Lv_Start_01, [Info] dw_59_Lv_Start_01, } } ================================================ FILE: KHSave.Lib1/Attributes/ArmorGummiAttribute.cs ================================================ using KHSave.Attributes; using System; using System.Collections.Generic; using System.Text; namespace KHSave.Lib1.Attributes { public class ArmorGummiAttribute : GummiBlockAttribute { public ArmorGummiAttribute(string info, int sizeX, int sizeY, int sizeZ, int armor, int max, int price = 0, int sell = 0, string description = null) : base(info, sizeX, sizeY, sizeZ, armor, max, price, sell, description) { } } } ================================================ FILE: KHSave.Lib1/Attributes/BlueprintGummiAttribute.cs ================================================ using KHSave.Attributes; using KHSave.Lib1.Types; using System; using System.Collections.Generic; using System.Text; namespace KHSave.Lib1.Attributes { public class BlueprintGummiAttribute : InfoAttribute { public GameTypes GameType { get; set; } public BlueprintGummiAttribute(string info, GameTypes gameType) : base(info) { GameType = gameType; } } } ================================================ FILE: KHSave.Lib1/Attributes/CockpitGummiAttribute.cs ================================================ using System; using System.Collections.Generic; using System.Text; namespace KHSave.Lib1.Attributes { public class CockpitGummiAttribute : GummiBlockAttribute { public CockpitGummiAttribute(string info, int sizeX, int sizeY, int sizeZ, int armor, int max, int price = 0, int sell = 0, string description = null) : base(info, sizeX, sizeY, sizeZ, armor, max, price, sell, description) { } } } ================================================ FILE: KHSave.Lib1/Attributes/EngineGummiAttribute.cs ================================================ using System; using System.Collections.Generic; using System.Text; namespace KHSave.Lib1.Attributes { public class EngineGummiAttribute : GummiBlockAttribute { public int TopSpeed { get; set; } public int LowSpeed { get; set; } public int Horsepower { get; set; } public EngineGummiAttribute(string info, int sizeX, int sizeY, int sizeZ, int armor, int max, int topSpeed, int lowSpeed, int horsepower, int price = 0, int sell = 0, string description = null) : base(info, sizeX, sizeY, sizeZ, armor, max, price, sell, description) { TopSpeed = topSpeed; LowSpeed = lowSpeed; Horsepower = horsepower; } } } ================================================ FILE: KHSave.Lib1/Attributes/ExtraGummiAttribute.cs ================================================ using KHSave.Attributes; using System; using System.Collections.Generic; using System.Text; namespace KHSave.Lib1.Attributes { public class ExtraGummiAttribute : InfoAttribute { public int Max { get; set; } public int Price { get; set; } public int Sell { get; set; } public string Description { get; set; } public ExtraGummiAttribute(string info, int max, int price = 0, int sell = 0, string description = null) : base(info) { Max = max; Price = price; Sell = sell; Description = description; } } } ================================================ FILE: KHSave.Lib1/Attributes/GummiBlockAttribute.cs ================================================ using KHSave.Attributes; using System; using System.Collections.Generic; using System.Text; namespace KHSave.Lib1.Attributes { public class GummiBlockAttribute : InfoAttribute { public int SizeX { get; set; } public int SizeY { get; set; } public int SizeZ { get; set; } public int Armor { get; set; } public int Max { get; set; } public int Price { get; set; } public int Sell { get; set; } public string Description { get; set; } public GummiBlockAttribute(string info, int sizeX, int sizeY, int sizeZ, int armor, int max, int price = 0, int sell = 0, string description = null) : base(info) { SizeX = sizeX; SizeY = sizeY; SizeZ = sizeZ; Armor = armor; Max = max; Price = price; Sell = sell; Description = description; } } } ================================================ FILE: KHSave.Lib1/Attributes/SpecialGummiAttribute.cs ================================================ using System; using System.Collections.Generic; using System.Text; namespace KHSave.Lib1.Attributes { public class SpecialGummiAttribute : GummiBlockAttribute { public float EnergyUse { get; set; } public SpecialGummiAttribute(string info, int sizeX, int sizeY, int sizeZ, int armor, int max, float energyUse, int price = 0, int sell = 0, string description = null) : base(info, sizeX, sizeY, sizeZ, armor, max, price, sell, description) { EnergyUse = energyUse; } } } ================================================ FILE: KHSave.Lib1/Attributes/WeaponGummiAttribute.cs ================================================ using System; using System.Collections.Generic; using System.Text; namespace KHSave.Lib1.Attributes { public class WeaponGummiAttribute : GummiBlockAttribute { public int Power { get; set; } public float PowerUse { get; set; } public WeaponGummiAttribute(string info, int sizeX, int sizeY, int sizeZ, int armor, int max, int power, float powerUse, int price = 0, int sell = 0, string description = null) : base(info, sizeX, sizeY, sizeZ, armor, max, price, sell, description) { Power = power; PowerUse = powerUse; } } } ================================================ FILE: KHSave.Lib1/Attributes/WingGummiAttribute.cs ================================================ using System; using System.Collections.Generic; using System.Text; namespace KHSave.Lib1.Attributes { public class WingGummiAttribute : GummiBlockAttribute { public int Handling { get; set; } public WingGummiAttribute(string info, int sizeX, int sizeY, int sizeZ, int armor, int max, int handling, int price = 0, int sell = 0, string description = null) : base(info, sizeX, sizeY, sizeZ, armor, max, price, sell, description) { Handling = handling; } } } ================================================ FILE: KHSave.Lib1/Constants.cs ================================================ namespace KHSave.Lib1 { public class Constants { public const uint MagicCodeFm = 0x05; public const uint MagicCodeEverythingElse = 0x04; } } ================================================ FILE: KHSave.Lib1/ISaveKh1.cs ================================================ using KHSave.Lib1.Types; using KHSave.Lib1.Models; using System.IO; namespace KHSave.Lib1 { public interface ISaveKh1 { bool IsFinalMix { get; } uint MagicCode { get; set; } byte[] SharedAbilities { get; } CommandType ShortcutCircle { get; set; } CommandType ShortcutTriangle { get; set; } CommandType ShortcutSquare { get; set; } uint Munny { get; set; } byte Difficulty { get; set; } PlayableCharacterType PlayableCharacter { get; set; } PlayableCharacterType CompanionCharacter1 { get; set; } PlayableCharacterType CompanionCharacter2 { get; set; } PlayableCharacterType CompanionCharacter3 { get; set; } byte[] InventoryCount { get; set; } Character[] Characters { get; set; } WorldType World { get; set; } uint Room { get; set; } uint SpawnLocation { get; set; } void Write(Stream stream); } } ================================================ FILE: KHSave.Lib1/KHSave.Lib1.csproj ================================================  net6 ================================================ FILE: KHSave.Lib1/Models/Character.cs ================================================ using KHSave.Lib1.Types; using Xe.BinaryMapper; namespace KHSave.Lib1.Models { public class Character { [Data] public byte Level { get; set; } [Data] public byte HpCur { get; set; } [Data] public byte HpMax { get; set; } [Data] public byte MpCur { get; set; } [Data] public byte MpMax { get; set; } [Data] public byte ApMax { get; set; } [Data] public byte Strength { get; set; } [Data] public byte Defense { get; set; } [Data(Count = 16)] public byte[] Unk08 { get; set; } [Data] public byte AccessoryCount { get; set; } [Data(Count = 8)] public byte[] Accessories { get; set; } [Data] public byte ItemCount { get; set; } [Data(Count = 0xC)] public byte[] Items { get; set; } [Data] public int Unk2e { get; set; } [Data] public EquipmentType Weapon { get; set; } [Data] public byte Unk33 { get; set; } [Data] public byte Unk34 { get; set; } [Data] public byte Unk35 { get; set; } [Data] public byte Unk36 { get; set; } [Data] public byte Unk37 { get; set; } [Data] public int Unk38 { get; set; } [Data] public int Experience { get; set; } [Data(Count = 0x30)] public byte[] Abilities { get; set; } [Data(0x70, BitIndex = 0)] public bool FireAvailable { get; set; } [Data(0x70, BitIndex = 1)] public bool BlizzardAvailable { get; set; } [Data(0x70, BitIndex = 2)] public bool ThunderAvailable { get; set; } [Data(0x70, BitIndex = 3)] public bool CureAvailable { get; set; } [Data(0x70, BitIndex = 4)] public bool GravityAvailable { get; set; } [Data(0x70, BitIndex = 5)] public bool StopAvailable { get; set; } [Data(0x70, BitIndex = 6)] public bool AeroAvailable { get; set; } [Data(0x71)] public byte Unk71 { get; set; } [Data(0x72)] public byte Unk72 { get; set; } [Data(0x73)] public byte Unk73 { get; set; } } } ================================================ FILE: KHSave.Lib1/Models/GummiBlock.cs ================================================ using KHSave.Lib1.Types; using System; using Xe.BinaryMapper; namespace KHSave.Lib1.Models { public class GummiBlock { //0xYX with Y and X having a value between 0-9, A-F will place the block outside the editor [Data] public byte BlockPositionYX { get; set; } //Range 0-9 [Data] public byte BlockPositionZ { get; set; } [Data] public byte Unknown2 { get; set; } [Data] public byte Unknown3 { get; set; } [Data] public GummiBlocksType BlockID { get; set; } [Data] public byte Unknown4 { get; set; } [Data] public byte Unknown5 { get; set; } [Data] public byte Unknown6 { get; set; } [Data] public byte ColorID { get; set; } [Data] public byte Unknown7 { get; set; } [Data] public byte Unknown8 { get; set; } [Data] public byte Unknown9 { get; set; } } } ================================================ FILE: KHSave.Lib1/Models/Gummiship.cs ================================================ using KHSave.Lib1.Types; using System.Threading; using Xe.BinaryMapper; namespace KHSave.Lib1.Models { public class Gummiship { [Data] public byte BlocksUsed { get; set; } //probably the other statistics [Data(Count = 75)] public byte[] Unk01 { get; set; } [Data(Count = 10)] public byte[] ShipName { get; set; } [Data(Count = 22)] public byte[] Unk02 { get; set; } [Data(Count = 200)] public GummiBlock[] GummiBlocks { get; set; } [Data(Count = 1466)] public byte[] Unk03 { get; set; } } } ================================================ FILE: KHSave.Lib1/SaveKh1.EU.cs ================================================ using KHSave.Lib1.Models; using KHSave.Lib1.Types; using System.IO; using Xe.BinaryMapper; namespace KHSave.Lib1 { public partial class SaveKh1 { public class SaveEU : ISaveKh1 { public bool IsFinalMix => false; [Data(0, 0x16C00)] public byte[] Data { get; set; } [Data(0)] public uint MagicCode { get; set; } [Data(Count = 10, Stride = 0x74)] public Character[] Characters { get; set; } [Data(0x48E)] public PlayableCharacterType PlayableCharacter { get; set; } [Data(0x48F)] public PlayableCharacterType CompanionCharacter1 { get; set; } [Data(0x490)] public PlayableCharacterType CompanionCharacter2 { get; set; } [Data(0x491)] public PlayableCharacterType CompanionCharacter3 { get; set; } [Data(0x499, Count = 0x100)] public byte[] InventoryCount { get; set; } [Data(0x599, Count = 4)] public byte[] SharedAbilities { get; set; } [Data(0x82C)] public CommandType ShortcutTriangle { get; set; } [Data(0x82D)] public CommandType ShortcutCircle { get; set; } [Data(0x82E)] public CommandType ShortcutSquare { get; set; } [Data(0x2040)] public WorldType World { get; set; } [Data(0x2044)] public uint Room { get; set; } [Data(0x2048)] public uint SpawnLocation { get; set; } //Gummiships [Data(0x241C, Count = 10)] public Gummiship[] Gummiships { get; set; } //Needs testing [Data(0x16A30)] public int AutoLock { get; set; } [Data(0x16A34)] public int TargetLock { get; set; } [Data(0x16A38)] public int Camera { get; set; } [Data(0x16A40)] public int Vibration { get; set; } [Data(0x16A44)] public int Sound { get; set; } [Data(0x16418)] public byte Difficulty { get; set; } [Data(0x1641C)] public uint Munny { get; set; } public void Write(Stream stream) => BinaryMapping.WriteObject(stream.FromBegin(), this); } } } ================================================ FILE: KHSave.Lib1/SaveKh1.FinalMix.cs ================================================ using KHSave.Lib1.Models; using KHSave.Lib1.Types; using System.IO; using Xe.BinaryMapper; namespace KHSave.Lib1 { public partial class SaveKh1 { public class SaveFinalMix : ISaveKh1 { public bool IsFinalMix => true; [Data(0, 0x16C00)] public byte[] Data { get; set; } [Data(0)] public uint MagicCode { get; set; } [Data(Count = 10, Stride = 0x74)] public Character[] Characters { get; set; } [Data(0x48E)] public PlayableCharacterType PlayableCharacter { get; set; } [Data(0x48F)] public PlayableCharacterType CompanionCharacter1 { get; set; } [Data(0x490)] public PlayableCharacterType CompanionCharacter2 { get; set; } [Data(0x491)] public PlayableCharacterType CompanionCharacter3 { get; set; } [Data(0x499, Count = 0x100)] public byte[] InventoryCount { get; set; } [Data(0x599, Count = 4)] public byte[] SharedAbilities { get; set; } [Data(0x844)] public CommandType ShortcutCircle { get; set; } [Data(0x845)] public CommandType ShortcutTriangle { get; set; } [Data(0x846)] public CommandType ShortcutSquare { get; set; } [Data(0x2040)] public WorldType World { get; set; } [Data(0x2044)] public uint Room { get; set; } [Data(0x2048)] public uint SpawnLocation { get; set; } [Data(0x16400)] public int AutoLock { get; set; } [Data(0x16404)] public int TargetLock { get; set; } [Data(0x16408)] public int Camera { get; set; } [Data(0x16410)] public int Vibration { get; set; } [Data(0x16414)] public int Sound { get; set; } [Data(0x1641C)] public uint Munny { get; set; } [Data(0x1642C)] public byte Difficulty { get; set; } public void Write(Stream stream) => BinaryMapping.WriteObject(stream.FromBegin(), this); } } } ================================================ FILE: KHSave.Lib1/SaveKh1.cs ================================================ using System; using System.IO; using Xe.BinaryMapper; namespace KHSave.Lib1 { public partial class SaveKh1 { internal static IBinaryMapping Mapper; static SaveKh1() { Mapper = MappingConfiguration .DefaultConfiguration() .ForType( x => new TimeSpan(0, 0, 0, x.Reader.ReadInt32(), 0), x => x.Writer.Write((int)((TimeSpan)x.Item).TotalSeconds) ) .Build(); } public static bool IsValid(Stream stream) { var prevPosition = stream.Position; var magicCode = new BinaryReader(stream).ReadUInt32(); stream.Position = prevPosition; switch (magicCode) { case Constants.MagicCodeFm: case Constants.MagicCodeEverythingElse: return true; default: return false; } } public static uint GetGameVersion(Stream stream) { if (!IsValid(stream)) return 0; var prevPosition = stream.Position; stream.Position = 0; var version = new BinaryReader(stream).ReadUInt32(); stream.Position = prevPosition; return version; } private static TSaveKh1 Read(Stream stream) where TSaveKh1 : class, ISaveKh1 => BinaryMapping.ReadObject(stream.SetPosition(0)); public static ISaveKh1 Read(Stream stream) { switch (GetGameVersion(stream)) { case Constants.MagicCodeFm: return Read(stream); case Constants.MagicCodeEverythingElse: return Read(stream); default: throw new NotSupportedException("The version is not supported."); } } } } ================================================ FILE: KHSave.Lib1/Types/AbilityType.cs ================================================ // https://pastebin.com/ZH0L3XXi using KHSave.Attributes; namespace KHSave.Lib1.Types { public enum AbilityType : byte { [Info] Empty, [Ability("High Jump")] HighJump = 0x01, [Ability("Mermaid Kick")] MermaidKick = 0x02, [Ability("Glide")] Glide = 0x03, [Ability("Superglide")] Superglide = 0x04, [Ability("Treasure Magnet")] TreasureMagnet = 0x05, [Ability("Combo Plus")] ComboPlus = 0x06, [Ability("Air Combo Plus")] AirComboPlus = 0x07, [Ability("Critical Plus")] CriticalPlus = 0x08, [Ability("Second Wind")] SecondWind = 0x09, [Ability("Scan")] Scan = 0x0A, [Ability("Sonic Blade")] SonicBlade = 0x0B, [Ability("Ars Arcanum")] ArsArcanum = 0x0C, [Ability("Strike Raid")] StrikeRaid = 0x0D, [Ability("Ragnarok")] Ragnarok = 0x0E, [Ability("Trinity Limit")] TrinityLimit = 0x0F, [Ability("Cheer")] Cheer = 0x10, [Ability("Vortex")] Vortex = 0x11, [Ability("Aerial Sweep")] AerialSweep = 0x12, [Ability("Counterattack")] Counterattack = 0x13, [Ability("Blitz")] Blitz = 0x14, [Ability("Guard")] Guard = 0x15, [Ability("Dodge Roll")] DodgeRoll = 0x16, [Ability("MP Haste")] MPHaste = 0x17, [Ability("MP Rage")] MPRage = 0x18, [Ability("Second Chance")] SecondChance = 0x19, [Ability("Berserk")] Berserk = 0x1A, [Ability("Jackpot")] Jackpot = 0x1B, [Ability("Lucky Strike")] LuckyStrike = 0x1C, [Ability("Charge")] Charge = 0x1D, [Ability("Rocket")] Rocket = 0x1E, [Ability("Tornado")] Tornado = 0x1F, [Ability("MP Gift")] MPGift = 0x20, [Ability("Raging Boar")] RagingBoar = 0x21, [Ability("Asp's Bite")] AspsBite = 0x22, [Ability("Healing Herb")] HealingHerb = 0x23, [Ability("Wind Armor")] WindArmor = 0x24, [Ability("Crescent")] Crescent = 0x25, [Ability("Sandstorm")] Sandstorm = 0x26, [Ability("Applause!")] Applause = 0x27, [Ability("Blazing Fury")] BlazingFury = 0x28, [Ability("Icy Terror")] IcyTerror = 0x29, [Ability("Bolts Of Sorrow")] BoltsOfSorrow = 0x2A, [Ability("Ghostly Scream")] GhostlyScream = 0x2B, [Ability("Hummingbird")] Hummingbird = 0x2C, [Ability("Time-Out")] TimeOut = 0x2D, [Ability("Storm's Eye")] StormsEye = 0x2E, [Ability("Ferocious Lunge")] FerociousLunge = 0x2F, [Ability("Furious Bellow")] FuriousBellow = 0x30, [Ability("Spiral Wave")] SpiralWave = 0x31, [Ability("Thunder Potion")] ThunderPotion = 0x32, [Ability("Cure Potion")] CurePotion = 0x33, [Ability("Aero Potion")] AeroPotion = 0x34, [Ability("Slapshot")] Slapshot = 0x35, [Ability("Sliding Dash")] SlidingDash = 0x36, [Ability("Hurricane Blast")] HurricaneBlast = 0x37, [Ability("Ripple Drive")] RippleDrive = 0x38, [Ability("Stun Impact")] StunImpact = 0x39, [Ability("Gravity Break")] GravityBreak = 0x3A, [Ability("Zantetsuken")] Zantetsuken = 0x3B, [Ability("Tech Boost")] TechBoost = 0x3C, [Ability("Encounter Plus")] EncounterPlus = 0x3D, [Ability("Leaf Bracer")] LeafBracer = 0x3E, [Ability("Evolution")] Evolution = 0x3F, [Ability("EXP Zero")] EXPZero = 0x40, [Ability("Combo Master")] ComboMaster = 0x41, } } ================================================ FILE: KHSave.Lib1/Types/CommandType.cs ================================================ using KHSave.Attributes; namespace KHSave.Lib1.Types { public enum CommandType : byte { [Magic] Fire, [Magic] Blizzard, [Magic] Thunder, [Magic] Cure, [Magic] Gravity, [Magic] Stop, [Magic] Aero, Empty = 0xFF } } ================================================ FILE: KHSave.Lib1/Types/DifficultyType.cs ================================================ using KHSave.Attributes; namespace KHSave.Lib1.Types { public enum Difficulty : byte { [Info("Normal")] Normal, [Info("Expert")] Expert } public enum DifficultyFm : byte { [Info("Final Mix: Beginner Mode")] Beginner, [Info("Final Mix Mode")] Standard, [Info("Final Mix: Proud Mode")] Proud } } ================================================ FILE: KHSave.Lib1/Types/EquipmentType.cs ================================================ // https://pastebin.com/dfARF8ui using KHSave.Attributes; namespace KHSave.Lib1.Types { public enum EquipmentType : byte { [Info] Empty, [Consumable("Potion")] Potion, [Consumable("Hi-Potion")] HiPotion, [Consumable("Ether")] Ether, [Consumable("Elixir")] Elixir, [Unused] BO5, [Consumable("Mega-Potion")] MegaPotion, [Consumable("Mega-Ether")] MegaEther, [Consumable("Megalixir")] Megalixir, [Synthesis("Fury Stone")] FuryStone, [Synthesis("Power Stone")] PowerStone, [Synthesis("Energy Stone")] EnergyStone, [Synthesis("Blazing Stone")] BlazingStone, [Synthesis("Frost Stone")] FrostStone, [Synthesis("Lightning Stone")] LightningStone, [Synthesis("Dazzling Stone")] DazzlingStone, [Synthesis("Stormy Stone")] StormyStone, [Accessory("Protect Chain")] ProtectChain, [Accessory("Protera Chain")] ProteraChain, [Accessory("Protega Chain")] ProtegaChain, [Accessory("Fire Ring")] FireRing, [Accessory("Fira Ring")] FiraRing, [Accessory("Firaga Ring")] FiragaRing, [Accessory("Blizzard Ring")] BlizzardRing, [Accessory("Blizzara Ring")] BlizzaraRing, [Accessory("Blizzaga Ring")] BlizzagaRing, [Accessory("Thunder Ring")] ThunderRing, [Accessory("Thundara Ring")] ThundaraRing, [Accessory("Thundaga Ring")] ThundagaRing, [Accessory("Ability Stud")] AbilityStud, [Accessory("Guard Earring")] GuardEarring, [Accessory("Master Earring")] MasterEarring, [Accessory("Chaos Ring")] ChaosRing, [Accessory("Dark Ring")] DarkRing, [Accessory("Element Ring")] ElementRing, [Accessory("Three Stars")] ThreeStars, [Accessory("Power Chain")] PowerChain, [Accessory("Golem Chain")] GolemChain, [Accessory("Titan Chain")] TitanChain, [Accessory("Energy Bangle")] EnergyBangle, [Accessory("Angel Bangle")] AngelBangle, [Accessory("Gaia Bangle")] GaiaBangle, [Accessory("Magic Armlet")] MagicArmlet, [Accessory("Rune Armlet")] RuneArmlet, [Accessory("Atlas Armlet")] AtlasArmlet, [Accessory("Heartguard")] Heartguard, [Accessory("Ribbon")] Ribbon, [Accessory("Crystal Crown")] CrystalCrown, [Accessory("Brave Warrior")] BraveWarrior, [Accessory("Ifrit's Horn")] IfritsHorn, [Accessory("Inferno Band")] InfernoBand, [Accessory("White Fang")] WhiteFang, [Accessory("Ray of Light")] RayofLight, [Accessory("Holy Circlet")] HolyCirclet, [Accessory("Raven's Claw")] RavensClaw, [Accessory("Omega Arts")] OmegaArts, [Accessory("EXP Earring")] EXPEarring, [Unused] A41, [Accessory("EXP Ring")] EXPRing, [Accessory("EXP Bracelet")] EXPBracelet, [Accessory("EXP Necklace")] EXPNecklace, [Accessory("Firagun Band")] FiragunBand, [Accessory("Blizzagun Band")] BlizzagunBand, [Accessory("Thundagun Band")] ThundagunBand, [Accessory("Ifrit Belt")] IfritBelt, [Accessory("Shiva Belt")] ShivaBelt, [Accessory("Ramuh Belt")] RamuhBelt, [Accessory("Moogle Badge")] MoogleBadge, [Accessory("Cosmic Arts")] CosmicArts, [Accessory("Royal Crown")] RoyalCrown, [Accessory("Prime Cap")] PrimeCap, [Accessory("Obsidian Ring")] ObsidianRing, [Unused] A56, [Unused] A57, [Unused] A58, [Unused] A59, [Unused] A60, [Unused] A61, [Unused] A62, [Unused] A63, [Unused] A64, [Keyblade("Kingdom Key")] KingdomKey, [Keyblade("Dream Sword")] DreamSword, [Keyblade("Dream Shield (Sora)")] DreamShieldSora, [Keyblade("Dream Rod (Sora)")] DreamRodSora, [Keyblade("Wooden Sword")] WoodenSword, [Keyblade("Jungle King")] JungleKing, [Keyblade("Three Wishes")] ThreeWishes, [Keyblade("Fairy Harp")] FairyHarp, [Keyblade("Pumpkinhead")] Pumpkinhead, [Keyblade("Crabclaw")] Crabclaw, [Keyblade("Divine Rose")] DivineRose, [Keyblade("Spellbinder")] Spellbinder, [Keyblade("Olympia")] Olympia, [Keyblade("Lionheart")] Lionheart, [Keyblade("Metal Chocobo")] MetalChocobo, [Keyblade("Oathkeeper")] Oathkeeper, [Keyblade("Oblivion")] Oblivion, [Keyblade("Lady Luck")] LadyLuck, [Keyblade("Wishing Star")] WishingStar, [Keyblade("Ultima Weapon")] UltimaWeapon, [Keyblade("Diamond Dust")] DiamondDust, [Keyblade("One-Winged Angel")] OneWingedAngel, [Staff("Mage's Staff")] MagesStaff, [Staff("Morning Star")] MorningStar, [Staff("Shooting Star")] ShootingStar, [Staff("Magus Staff")] MagusStaff, [Staff("Wisdom Staff")] WisdomStaff, [Staff("Warhammer")] Warhammer, [Staff("Silver Mallet")] SilverMallet, [Staff("Grand Mallet")] GrandMallet, [Staff("Lord Fortune")] LordFortune, [Staff("Violetta")] Violetta, [Staff("Dream Rod (Donald)")] DreamRodDonald, [Staff("Save the Queen")] SavetheQueen, [Staff("Wizard's Relic")] WizardsRelic, [Staff("Meteor Strike")] MeteorStrike, [Staff("Fantasista")] Fantasista, [Staff("???? (Donald Weapon)")] DonaldWeapon, [Shield("Knight's Shield")] KnightsShield, [Shield("Mythril Shield")] MythrilShield, [Shield("Onyx Shield")] OnyxShield, [Shield("Stout Shield")] StoutShield, [Shield("Golem Shield")] GolemShield, [Shield("Adamant Shield")] AdamantShield, [Shield("Smasher")] Smasher, [Shield("Gigas Fist")] GigasFist, [Shield("Genji Shield")] GenjiShield, [Shield("Herc's Shield")] HercsShield, [Shield("Dream Shield (Goofy)")] DreamShieldGoofy, [Shield("Save the King")] SavetheKing, [Shield("Defender")] Defender, [Shield("Mighty Shield")] MightyShield, [Shield("Seven Elements")] SevenElements, [Shield("???? (Goofy Weapon)")] GoofyWeapon, [Weapon("Spear")] Spear, [Weapon("No Weapon (Pooh)")] NoWeaponPooh, [Weapon("Scimitar")] Scimitar, [Weapon("No Weapon (Ariel)")] NoWeaponAriel, [Weapon("No Weapon (Jack)")] NoWeaponJack, [Weapon("Dagger")] Dagger, [Weapon("Claws")] Claws, [Boost("Tent")] Tent, [Boost("Camping Set")] CampingSet, [Boost("Cottage")] Cottage, [Unused] C04, [Unused] C05, [Unused] C06, [Unused] C07, [Report("Ansem's Report 11")] AnsemsReport11, [Report("Ansem's Report 12")] AnsemsReport12, [Report("Ansem's Report 13")] AnsemsReport13, [Boost("Power Up")] PowerUp, [Boost("Defense Up")] DefenseUp, [Boost("AP Up")] APUp, [Synthesis("Serenity Power")] SerenityPower, [Synthesis("Dark Matter")] DarkMatter, [Synthesis("Mythril Stone")] MythrilStone, [Recipe("Fire Arts")] FireArts, [Recipe("Blizzard Arts")] BlizzardArts, [Recipe("Thunder Arts")] ThunderArts, [Recipe("Cure Arts")] CureArts, [Recipe("Gravity Arts")] GravityArts, [Recipe("Stop Arts")] StopArts, [Recipe("Aero Arts")] AeroArts, [Recipe("Shiitank Rank")] ShiitankRank, [Recipe("Matsutake Rank")] MatsutakeRank, [Recipe("Mystery Mold")] MysteryMold, [Report("Ansem's Report 1")] AnsemsReport1, [Report("Ansem's Report 2")] AnsemsReport2, [Report("Ansem's Report 3")] AnsemsReport3, [Report("Ansem's Report 4")] AnsemsReport4, [Report("Ansem's Report 5")] AnsemsReport5, [Report("Ansem's Report 6")] AnsemsReport6, [Report("Ansem's Report 7")] AnsemsReport7, [Report("Ansem's Report 8")] AnsemsReport8, [Report("Ansem's Report 9")] AnsemsReport9, [Report("Ansem's Report 10")] AnsemsReport10, [KeyItem("Khama Vol. 8")] KhamaVol8, [KeyItem("Salegg Vol. 6")] SaleggVol6, [KeyItem("Azal Vol. 3")] AzalVol3, [KeyItem("Mava Vol. 3")] MavaVol3, [KeyItem("Mava Vol. 6")] MavaVol6, [KeyItem("Theon Vol. 6")] TheonVol6, [KeyItem("Nahara Vol. 5")] NaharaVol5, [KeyItem("Hafet Vol. 4")] HafetVol4, [KeyItem("Empty Bottle")] EmptyBottle, [KeyItem("Old Book")] OldBook, [KeyItem("Emblem Piece")] EmblemPiece, [KeyItem("Emblem Piece 2")] EmblemPiece2, [KeyItem("Emblem Piece 3")] EmblemPiece3, [KeyItem("Emblem Piece 4")] EmblemPiece4, [KeyItem("Log")] Log, [KeyItem("Cloth")] Cloth, [KeyItem("Rope")] Rope, [KeyItem("Seagull Egg")] SeagullEgg, [KeyItem("Fish")] Fish, [KeyItem("Mushroom")] Mushroom, [KeyItem("Coconut")] Coconut, [KeyItem("Drinking Water")] DrinkingWater, [KeyItem("Navi-G Piece 1")] NaviGPiece1, [KeyItem("Navi-G Piece 2")] NaviGPiece2, [KeyItem("Navi-Gummi 1")] NaviGummi1, [KeyItem("Navi-G Piece 3")] NaviGPiece3, [KeyItem("Navi-G Piece 4")] NaviGPiece4, [KeyItem("Navi-Gummi 2")] NaviGummi2, [Summon("Watergleam")] Watergleam, [Summon("Naturespark")] Naturespark, [Summon("Fireglow")] Fireglow, [Summon("Earthshine")] Earthshine, [KeyItem("Crystal Trident")] CrystalTrident, [KeyItem("Postcard")] Postcard, [KeyItem("Torn Page 1")] TornPage1, [KeyItem("Torn Page 2")] TornPage2, [KeyItem("Torn Page 3")] TornPage3, [KeyItem("Torn Page 4")] TornPage4, [KeyItem("Torn Page 5")] TornPage5, [KeyItem("Slide 1")] Slide1, [KeyItem("Slide 2")] Slide2, [KeyItem("Slide 3")] Slide3, [KeyItem("Slide 4")] Slide4, [KeyItem("Slide 5")] Slide5, [KeyItem("Slide 6")] Slide6, [KeyItem("Footprints")] Footprints, [KeyItem("Claw Marks")] ClawMarks, [KeyItem("Stench")] Stench, [KeyItem("Antenna")] Antenna, [KeyItem("Forget-Me-Not")] ForgetMeNot, [KeyItem("Jack-In-The-Box")] JackInTheBox, [KeyItem("Entry Pass")] EntryPass, [KeyItem("Hero License")] HeroLicense, [Synthesis("Pretty Stone")] PrettyStone, [Unused] N41, [Synthesis("Lucid Shard")] LucidShard, [Synthesis("Lucid Gem")] LucidGem, [Synthesis("Lucid Crystal")] LucidCrystal, [Synthesis("Spirit Shard")] SpiritShard, [Synthesis("Spirit Gem")] SpiritGem, [Synthesis("Power Shard")] PowerShard, [Synthesis("Power Gem")] PowerGem, [Synthesis("Power Crystal")] PowerCrystal, [Synthesis("Blaze Shard")] BlazeShard, [Synthesis("Blaze Gem")] BlazeGem, [Synthesis("Frost Shard")] FrostShard, [Synthesis("Frost Gem")] FrostGem, [Synthesis("Thunder Shard")] ThunderShard, [Synthesis("Thunder Gem")] ThunderGem, [Synthesis("Shiny Crystal")] ShinyCrystal, [Synthesis("Bright Shard")] BrightShard, [Synthesis("Bright Gem")] BrightGem, [Synthesis("Bright Crystal")] BrightCrystal, [Synthesis("Mystery Goo")] MysteryGoo, [Synthesis("Gale")] Gale, [Synthesis("Mythril Shard")] MythrilShard, [Synthesis("Mythril")] Mythril, [Synthesis("Orichalcum")] Orichalcum } } ================================================ FILE: KHSave.Lib1/Types/GameTypes.cs ================================================ using System; namespace KHSave.Lib1.Types { [Flags] public enum GameTypes { None, Jp = 1, EuUs = 2, Fm = 4, All = Jp | EuUs | Fm } } ================================================ FILE: KHSave.Lib1/Types/GummiBlocksType.cs ================================================ using KHSave.Attributes; using KHSave.Lib1.Attributes; namespace KHSave.Lib1.Types { public enum GummiBlocksType : byte { [CockpitGummi("Cure-G", 2, 2, 2, 200, 1)] CureG = 0x1, [CockpitGummi("Curaga-G", 2, 2, 2, 200, 1, 500)] CuragaG, [CockpitGummi("Life-G", 2, 2, 2, 200, 1, 750)] LifeG, [CockpitGummi("Full-Life-G", 2, 2, 2, 200, 1)] FullLifeG, [EngineGummi("Fire-G", 1, 1, 1, 10, 6, 80, 60, 10, 120)] FireG, [EngineGummi("Fira-G", 1, 1, 2, 20, 6, 90, 70, 20, 250)] FiraG, [EngineGummi("Firaga-G", 2, 2, 2, 30, 4, 100, 80, 30, 500)] FiragaG, [EngineGummi("Flara-G", 1, 1, 3, 40, 4, 110, 90, 50, 1000)] FlaraG, [EngineGummi("Holy-G", 2, 2, 2, 1500, 2, 120, 100, 80, 1500)] HolyG, [ArmorGummi("Protect-G (Cube)", 1, 1, 1, 5, 99, 20, 2)] ProtectGCube, [ArmorGummi("Protect-G (Triangular Prism)", 1, 1, 1, 3, 99, 20, 2)] ProtectGTriangularPrism, [ArmorGummi("Protect-G (Pyramid)", 1, 1, 1, 3, 99, 20, 2)] ProtectGPyramid, [ArmorGummi("Protect-G (Cylinder)", 1, 1, 1, 4, 30, 20, 2)] ProtectGCylinder, [ArmorGummi("Protect-G (Half-Cylinder)", 1, 1, 1, 4, 30, 20, 2)] ProtectGHalfCylinder, [ArmorGummi("Protect-G (Quarter-Sphere)", 1, 1, 1, 3, 10, 20, 2)] ProtectGQuarterSphere, [ArmorGummi("Protect-G (Unproportional Cylinder)", 1, 1, 1, 3, 10, 20, 2)] ProtectGUnproportionalCylinder, [ArmorGummi("Protect-G (Half-Sphere)", 1, 1, 1, 3, 10, 20, 2)] ProtectGHalfSphere, [ArmorGummi("Shell-G (Cube)", 1, 1, 1, 10, 99, 0, 3)] ShellGCube, [ArmorGummi("Shell-G (Triangular Prism)", 1, 1, 1, 5, 99, 0, 3)] ShellGTriangularPrism, [ArmorGummi("Shell-G (Pyramid)", 1, 1, 1, 5, 99, 0, 3)] ShellGPyramid, [ArmorGummi("Shell-G (Cylinder)", 1, 1, 1, 7, 20, 0, 3)] ShellGCylinder, [ArmorGummi("Shell-G (Half-Cylinder)", 1, 1, 1, 7, 20, 0, 3)] ShellGHalfCylinder, [ArmorGummi("Shell-G (Quarter-Sphere)", 1, 1, 1, 5, 8, 0, 3)] ShellGQuarterSphere, [ArmorGummi("Shell-G (Unproportional Cylinder)", 1, 1, 1, 5, 8, 0, 3)] ShellG1UnproportionalCylinder, [ArmorGummi("Shell-G (Half-Sphere)", 1, 1, 1, 5, 8, 0, 3)] ShellGHalfSphere, [ArmorGummi("Dispel-G (Cube)", 1, 1, 1, 15, 99, 0, 4)] DispelGCube, [ArmorGummi("Dispel-G (Triangular Prism)", 1, 1, 1, 7, 99, 0, 4)] DispelGTriangularPrism, [ArmorGummi("Dispel-G (Pyramid)", 1, 1, 1, 7, 99, 0, 4)] DispelGPyramid, [ArmorGummi("Dispel-G (Cylinder)", 1, 1, 1, 12, 10, 0, 4)] DispelGCylinder, [ArmorGummi("Dispel-G (Half-Cylinder)", 1, 1, 1, 12, 10, 0, 4)] DispelGHalfCylinder, [ArmorGummi("Dispel-G (Quarter-Sphere)", 1, 1, 1, 7, 6, 0, 4)] DispelGQuarterSphere, [ArmorGummi("Dispel-G (Unproportional Cylinder)", 1, 1, 1, 7, 6, 0, 4)] DispelGUnproportionalCylinder, [ArmorGummi("Dispel-G (Half-Sphere)", 1, 1, 1, 7, 6, 0, 4)] DispelGHalfSphere, [WingGummi("Aerora-G (L)", 1, 1, 2, 15, 30, 105, 40, 2)] AeroraGL, [WingGummi("Aerora-G (R)", 1, 1, 2, 15, 30, 105, 40, 2)] AeroraGR, [WingGummi("Aeroga-G (L)", 1, 1, 3, 12, 20, 110, 0, 3)] AerogaGL, [WingGummi("Aeroga-G (R)", 1, 1, 3, 12, 20, 110, 0, 3)] AerogaGR, [WingGummi("Tornado-G (L)", 2, 1, 2, 10, 10, 120, 0, 5)] TornadoGL, [WingGummi("Tornado-G (R)", 2, 1, 2, 10, 10, 120, 0, 5)] TornadoGR, [WingGummi("Float-G (L)", 1, 1, 3, 8, 10, 110, 0, 4)] FloatGL, [WingGummi("Float-G (R)", 1, 1, 3, 8, 10, 110, 0, 4)] FloatGR, [WingGummi("Aero-G (L)", 1, 1, 1, 5, 99, 98, 20, 1)] AeroGL, [WingGummi("Aero-G (R)", 1, 1, 1, 5, 99, 98, 20, 1)] AeroGR, [WingGummi("Aero-G (Half-Triangle)", 1, 1, 1, 5, 99, 98, 20, 1)] AeroGHalfTriangle, [SpecialGummi("Drain-G (L)", 4, 1, 1, 15, 4, 1, 500)] DrainGL, [SpecialGummi("Drain-G (R)", 4, 1, 1, 15, 4, 1, 500)] DrainGR, [SpecialGummi("Osmose-G (L)", 4, 1, 1, 15, 2, 1, 1000)] OsmoseGL, [SpecialGummi("Osmose-G (R)", 4, 1, 1, 15, 2, 1, 1000)] OsmoseGR, [SpecialGummi("Transform-G", 1, 1, 1, 10, 1, 1)] TransformG, [SpecialGummi("Warp-G (You can't select this block in the editor normally)", 1, 1, 1, 0, 1, 0)] WarpG, [SpecialGummi("Scan-G (Uni-Directional)", 1, 2, 1, 15, 2, 0, 250)] ScanG1, [SpecialGummi("Scan-G (All-Directional)", 1, 2, 1, 15, 2, 0, 500)] ScanG2, [SpecialGummi("Haste-G", 1, 1, 2, 30, 2, 0, 1000)] HasteG, [SpecialGummi("Haste2-G", 1, 1, 2, 30, 2, 0, 1500)] Haste2G, [SpecialGummi("Shield-G", 1, 1, 2, 10, 1, 0, 500)] ShieldG, [SpecialGummi("Shield2-G", 1, 1, 2, 10, 1, 0, 1500)] Shield2G, [SpecialGummi("Ensuna-G (Circle)", 1, 1, 1, 10, 6, 0, 400)] EnsunaGCircle, [SpecialGummi("Ensuna-G (Square)", 1, 1, 1, 10, 10, 0, 250)] EnsunaGSquare, [WeaponGummi("Thunder-G", 1, 1, 2, 25, 10, 50, 0, 500)] ThunderG, [WeaponGummi("Thundara-G", 1, 1, 2, 30, 8, 75, 0, 1000)] ThundaraG, [WeaponGummi("Thundaga-G", 1, 1, 3, 35, 6, 100, 0, 1500)] ThundagaG, [WeaponGummi("Comet-G", 1, 1, 2, 30, 8, 100, 0.1f, 500)] CometG, [WeaponGummi("Meteor-G", 1, 1, 2, 35, 6, 300, 0.1f, 1500)] MeteorG, [WeaponGummi("Ultima-G", 1, 1, 3, 40, 4, 1000, 0.1f, 2500)] UltimaG, //Other Gummi items that aren't blocks [ExtraGummi("Spray", 1, 250, 0, "Adds color to gummi blocks.")] Spray, [ExtraGummi("Pallete", 1, 400, 0, "Provides a variety of paint colors.")] Pallete, [ExtraGummi("Sys.UP1", 1, 400, 0, "Assembly area (8).")] SysUP1, [ExtraGummi("Sys.UP2", 1, 750, 0, "Assembly area (10).")] SysUP2, [ExtraGummi("Com. LV1", 1, 0, 0, "1 blueprint. 100 blocks. Power level 3.")] ComLV1, [ExtraGummi("Com. LV2", 1, 500, 0, "5 blueprints. 150 blocks. Power level 5.")] ComLV2, [ExtraGummi("Com. LV3", 1, 1000, 0, "10 blueprints. 200 blocks. Power level 8.")] ComLV3, [BlueprintGummi("Kingdom", GameTypes.All)] Kingdom, [BlueprintGummi("Hyperion", GameTypes.All)] Hyperion, [BlueprintGummi("Geppetto", GameTypes.All)] Geppetto, [BlueprintGummi("Cid", GameTypes.All)] Cid, [BlueprintGummi("Leon", GameTypes.All)] Leon, [BlueprintGummi("Yuffie", GameTypes.All)] Yuffie, [BlueprintGummi("Aerith", GameTypes.All)] Aerith, [BlueprintGummi("Cactuar", GameTypes.All)] Cactuar, [BlueprintGummi("Chocobo", GameTypes.All)] Chocobo, [BlueprintGummi("Cindy", GameTypes.All)] Cindy, [BlueprintGummi("Shiva", GameTypes.All)] Shiva, [BlueprintGummi("Lamia", GameTypes.All)] Lamia, [BlueprintGummi("Sandy", GameTypes.All)] Sandy, [BlueprintGummi("Sylph", GameTypes.All)] Sylph, [BlueprintGummi("Carbuncle", GameTypes.All)] Carbuncle, [BlueprintGummi("Mindy", GameTypes.All)] Mindy, Unknown58, [BlueprintGummi("Bomb", GameTypes.All)] Bomb, [BlueprintGummi("Remora", GameTypes.All)] Remora, [BlueprintGummi("Ahriman", GameTypes.All)] Ahriman, [BlueprintGummi("Imp", GameTypes.All)] Imp, [BlueprintGummi("Siren", GameTypes.All)] Siren, [BlueprintGummi("Stingray", GameTypes.All)] Stingray, Unknown5f, [BlueprintGummi("Adamant", GameTypes.All)] Adamant, Unknown61, [BlueprintGummi("Ifrit", GameTypes.All)] Ifrit, Unknown63, Unknown64, Unknown65, Unknown66, [BlueprintGummi("Deathguise", GameTypes.All)] Deathguise } } ================================================ FILE: KHSave.Lib1/Types/PlayableCharacterType.cs ================================================ using KHSave.Attributes; namespace KHSave.Lib1.Types { public enum PlayableCharacterType : byte { [Info] Sora, [Info] Donald, [Info] Goofy, [Info] Tarzan, [Info("Pooh (not playable)")] Pooh, [Info] Aladdin, [Info] Ariel, [Info] Jack, [Info("Peter Pan")] PeterPan, [Info] Beast, [Info] Empty = 0xFF } } ================================================ FILE: KHSave.Lib1/Types/WorldType.cs ================================================ using KHSave.Attributes; namespace KHSave.Lib1.Types { public enum WorldType : uint { [Info("Dive into the Heart")] DiveIntoHeart = 0x00, [Info("Destiny Island")] DestinyIsland = 0x01, [Info("Disney Castle")] DisneyCastle = 0x02, [Info("Traverse Town")] TraverseTown = 0x03, [Info("Wonderland")] Wonderland = 0x04, [Info("Deep Jungle")] DeepJungle = 0x05, [Info("100 Acre Wood")] HundredAcreWood = 0x06, [Unused] Crash07 = 0x07, [Info("Agrabah")] Agrahbah = 0x08, [Info("Atlantica")] Atlantica = 0x09, [Info("Halloween Town")] HalloweenTown = 0x0a, [Info("Olympus Coliseum")] OlympusColiseum = 0x0b, [Info("Monstro")] Monstro = 0x0c, [Info("Neverland")] Neverland = 0x0d, [Unused] Crash0e = 0x0e, [Info("Hollow Bastion")] HollowBastion = 0x0f, [Info("End of the world")] Endoftheworld = 0x10, } } ================================================ FILE: KHSave.Lib2/Constants.cs ================================================ using KHSave.Attributes; using KHSave.Lib2.Types; using System; using System.Collections.Generic; using System.Linq; namespace KHSave.Lib2 { public class Constants { public const uint MagicCodeJp = 0x4a32484b; public const uint MagicCodeUs = 0x5532484b; public const uint MagicCodeEu = 0x4532484b; public const int WorldCount = 19; public static readonly string[] WorldNames = Enum .GetValues(typeof(WorldType)) .Cast() .Select(x => InfoAttribute.GetInfo(x)) .ToArray(); public static readonly Dictionary Progress = new Dictionary() { [0x0000] = "ZZ_START", [0x0001] = "ZZ_E_003_A17_IN", [0x0002] = "ZZ_E_005_A10_IN", [0x0003] = "ZZ_E_009_END", [0x0004] = "ZZ_E_010_END", [0x0005] = "ZZ_E_012_END", [0x0006] = "ZZ_E_013_END", [0x0007] = "ZZ_E_014_END", [0x0008] = "ZZ_E_015_END", [0x0009] = "ZZ_E_018_END", [0x000A] = "ZZ_E_021_END", [0x000B] = "ZZ_S_BTL_SEIFER", [0x000C] = "ZZ_START2", [0x000D] = "ZZ_SCENARIO_1_OPEN", [0x000E] = "ZZ_SCENARIO_1_START", [0x000F] = "ZZ_ALL_WORLD_LV99", [0x0010] = "ZZ_NEW_MICKEY_COME", [0x0011] = "ZZ_ALL_WORLD_LV60", [0x0403] = "ES_999_END", [0x0404] = "ES_EH_eh21_ms107", [0x0405] = "ES_995_END", [0x0406] = "ES_996_END", [0x0407] = "ES_997_END", [0x0408] = "ES_998_END", [0x0409] = "ES_FM_URA_MOVIE", [0x040A] = "ES_FM_URA_MOVIE_COMP", [0x0800] = "TT_START_1", [0x0814] = "TT_INIT", [0x0815] = "TT_SCENARIO_1_OPEN", [0x0816] = "TT_MOVIE_101_END_L", [0x0817] = "TT_SCENARIO_1_START", [0x0818] = "TT_101_END_L", [0x0819] = "TT_102_END_L", [0x081A] = "TT_103_END_L", [0x081B] = "TT_104_END_L", [0x081C] = "TT_105_END_L", [0x081D] = "TT_106_END_L", [0x081E] = "TT_107_END_L", [0x081F] = "TT_108_END_L", [0x0820] = "TT_109_END_L", [0x0821] = "TT_110_END_L", [0x0822] = "TT_111_END_L", [0x0823] = "TT_112_END_L", [0x0824] = "TT_113_END_L", [0x0825] = "TT_114_END", [0x0826] = "TT_115_END_L", [0x0827] = "TT_116_END_L", [0x0828] = "TT_117_END_L", [0x0829] = "TT_118_END_L", [0x082A] = "TT_119_END_L", [0x082B] = "TT_SCENARIO_1_END", [0x082C] = "TT_MOVIE_201_END_L", [0x082D] = "TT_SCENARIO_2_OPEN", [0x082E] = "TT_201_END_L", [0x082F] = "TT_SCENARIO_2_START", [0x0830] = "TT_202_END_L", [0x0831] = "TT_203_END_L", [0x0832] = "TT_204_END_L", [0x0833] = "TT_205_END", [0x0834] = "TT_206_END", [0x0835] = "TT_207_END_L", [0x0836] = "TT_208_END", [0x0837] = "TT_209_END", [0x0838] = "TT_210_END_L", [0x0839] = "TT_211_END_L", [0x083A] = "TT_SCENARIO_2_END", [0x083B] = "TT_MOVIE_301_END_L", [0x083C] = "TT_SCENARIO_3_OPEN", [0x083D] = "TT_301_END_L", [0x083E] = "TT_SCENARIO_3_START", [0x083F] = "TT_302_END_L", [0x0840] = "TT_303_END_L", [0x0841] = "TT_304_END_L", [0x0842] = "TT_305_END", [0x0843] = "TT_306_END", [0x0844] = "TT_307_END", [0x0845] = "TT_308_END_L", [0x0846] = "TT_309_END_L", [0x0847] = "TT_310_END_L", [0x0848] = "TT_311_END", [0x0849] = "TT_312_END_L", [0x084A] = "TT_313_END_L", [0x084B] = "TT_314_END", [0x084C] = "TT_315_END_L", [0x084D] = "TT_316_END_L", [0x084E] = "TT_317_END_L", [0x084F] = "TT_318_END_L", [0x0850] = "TT_319_END_L", [0x0851] = "TT_SCENARIO_3_END", [0x0852] = "TT_MOVIE_401_END_L", [0x0853] = "TT_SCENARIO_4_OPEN", [0x0854] = "TT_401_END_L", [0x0855] = "TT_SCENARIO_4_START", [0x0856] = "TT_402_END", [0x0857] = "TT_403_END", [0x0858] = "TT_404_END", [0x0859] = "TT_405_END", [0x085A] = "TT_406_LOSE_L", [0x085B] = "TT_406_END_L", [0x085C] = "TT_407_END", [0x085D] = "TT_408_LOSE_L", [0x085E] = "TT_408_END_L", [0x085F] = "TT_409_END_L", [0x0860] = "TT_410_END_L", [0x0861] = "TT_411_END", [0x0862] = "TT_412_END_L", [0x0863] = "TT_413_END_L", [0x0864] = "TT_414_END_L", [0x0865] = "TT_415_END_L", [0x0866] = "TT_SCENARIO_4_END", [0x0867] = "TT_501_END_L", [0x0868] = "TT_SCENARIO_5_OPEN", [0x0869] = "TT_502_END_L", [0x086A] = "TT_SCENARIO_5_START", [0x086B] = "TT_503_END", [0x086C] = "TT_504_END_L", [0x086D] = "TT_505_END_L", [0x086E] = "TT_MISTERY_A_END", [0x086F] = "TT_MISTERY_B_END", [0x0870] = "TT_MISTERY_C_END", [0x0871] = "TT_MISTERY_D_END", [0x0872] = "TT_506_END_L", [0x0873] = "TT_507_END", [0x0874] = "TT_508_END_L", [0x0875] = "TT_509_END_L", [0x0876] = "TT_510_END", [0x0877] = "TT_511_END_L", [0x0878] = "TT_512_END_L", [0x0879] = "TT_513_END_L", [0x087A] = "TT_514_END", [0x087B] = "TT_515_END_L", [0x087C] = "TT_SCENARIO_5_END", [0x087D] = "TT_MOVIE_601_END_L", [0x087E] = "TT_SCENARIO_6_OPEN", [0x087F] = "TT_601_END_L", [0x0880] = "TT_602_END_L", [0x0881] = "TT_603_END", [0x0882] = "TT_604_END_L", [0x0883] = "TT_605_END", [0x0884] = "TT_606_END", [0x0885] = "TT_607_END", [0x0886] = "TT_608_END_L", [0x0887] = "TT_609_END", [0x0888] = "TT_610_END", [0x0889] = "TT_611_END_L", [0x088A] = "TT_612_END", [0x088B] = "TT_613_END_L", [0x088C] = "TT_614_END_L", [0x088D] = "TT_615_END_L", [0x088E] = "TT_615_OUT", [0x088F] = "TT_616_END", [0x0890] = "TT_617_END", [0x0891] = "TT_618_END", [0x0892] = "TT_SCENARIO_6_END", [0x0893] = "TT_701_END_L", [0x0894] = "TT_SCENARIO_7_OPEN", [0x0895] = "TT_702_END_L", [0x0896] = "TT_SCENARIO_7_START", [0x0898] = "TT_704_END", [0x0899] = "TT_705_END", [0x089A] = "TT_706_END", [0x089B] = "TT_707_END_L", [0x089C] = "TT_708_END_L", [0x089D] = "TT_709_END", [0x089E] = "TT_710_END", [0x089F] = "TT_711_END_L", [0x08A0] = "TT_SCENARIO_7_END", [0x08A1] = "TT_801_END_L", [0x08A2] = "TT_SCENARIO_8_OPEN", [0x08A3] = "TT_802_END", [0x08A4] = "TT_803_END_L", [0x08A5] = "TT_MS802_CLEAR_L", [0x08A6] = "TT_804_END_L", [0x08A7] = "TT_805_END", [0x08A8] = "TT_806_END", [0x08A9] = "TT_807_END", [0x08AA] = "TT_808_END", [0x08AB] = "TT_809_END", [0x08AC] = "TT_810_END_L", [0x08AD] = "TT_SCENARIO_8_END", [0x08AE] = "TT_901_END_L", [0x08AF] = "TT_SCENARIO_9_OPEN", [0x08B0] = "TT_902_END_L", [0x08B1] = "TT_SCENARIO_9_START", [0x08B3] = "TT_903_END", [0x08B4] = "TT_904_END_L", [0x08B6] = "TT_905_END", [0x08B7] = "TT_906_END_L", [0x08B8] = "TT_907_END_L", [0x08B9] = "TT_SCENARIO_9_END", [0x08BA] = "TT_001_END_L", [0x08BB] = "TT_SCENARIO_10_OPEN", [0x08BC] = "TT_002_END", [0x08BD] = "TT_003_END_L", [0x08BF] = "TT_004_END", [0x08C0] = "TT_005_END", [0x08C1] = "TT_006_END", [0x08C2] = "TT_007_END", [0x08C3] = "TT_008_END_L", [0x08C6] = "TT_009_END", [0x08C7] = "TT_010_END", [0x08C8] = "TT_011_END_L", [0x08C9] = "TT_012_END_L", [0x08CA] = "TT_013_END", [0x08CB] = "TT_SCENARIO_10_END", [0x08CC] = "TT_tt20_ms603_end_l", [0x08CD] = "TT_908_END_L", [0x08CE] = "TT_ROXAS2_START", [0x08CF] = "TT_ROXAS2_END Let Roxas to equip two keyblades", [0x08D0] = "TT_ROXAS_END", [0x08D1] = "TT_SORA_OLD_END Use KH1 Sora", [0x08D2] = "TT_tt06_work_letter_END", [0x08D3] = "TT_tt06_work_baggage_END", [0x08D4] = "TT_FM_KINOKO_LAR_PLAYED", [0x08D5] = "TT_tt07_work_poster_END", [0x08D6] = "TT_tt07_work_cook_END", [0x08D7] = "TT_FM_KINOKO_AXE_PLAYED", [0x08D8] = "TT_tt07_work_clean_END", [0x08D9] = "TT_tt07_work_worm_END", [0x08DA] = "TT_tt06_work_perform_END", [0x08DB] = "TT_ROXAS_START", [0x08DC] = "TT_FM_AXE_RE_CLEAR", [0x08DD] = "TT_206_END_work01", [0x08DE] = "TT_FM_091_END", [0x08DF] = "TT_206_END_work03", [0x08E0] = "TT_206_END_work02_01", [0x08E1] = "TT_206_END_work02_02", [0x08E2] = "TT_206_END_work02_03", [0x08E3] = "TT_MIX_SHOP_OPEN", [0x08E4] = "TT_MISTERY_A_LOSE", [0x08E5] = "TT_MISTERY_B_LOSE", [0x08E6] = "TT_MISTERY_C_LOSE", [0x08E7] = "TT_MISTERY_D_LOSE", [0x08E9] = "TT_STRUGGLE_ON2", [0x08EA] = "TT_STRUGGLE_ON3", [0x08EB] = "TT_702_OUT", [0x08EC] = "TT_START_01", [0x08ED] = "TT_START_02", [0x08EE] = "TT_SCENARIO_10_START", [0x08EF] = "TT_PLAY_STRUGGLE_01", [0x08F0] = "TT_PLAY_STRUGGLE_02", [0x08F1] = "TT_PLAY_STRUGGLE_03", [0x08F2] = "TT_TT21_REAL", [0x08F3] = "TT_TT21_FAKE", [0x08F4] = "TT_FM_COM_OBJ_OFF", [0x08F5] = "TT_FM_KINOKO_SAI_PLAYED", [0x08F6] = "TT_STRUGGLE_ON", [0x08F7] = "TT_BATTLE2_OPEN", [0x08F8] = "TT_113_IN", [0x08F9] = "TT_TT29_OUT", [0x08FA] = "TT_TT30_OUT", [0x08FB] = "TT_REAL_TT_EVENT", [0x08FC] = "TT_REAL_TT_FREE", [0x08FD] = "TT_FAKE_TT_EVENT", [0x08FE] = "TT_FAKE_TT_FREE", [0x08FF] = "TT_MISTERY_C_OUT", [0x0C00] = "DI_START", [0x0C01] = "DI_555_END", [0x1000] = "HB_START", [0x1001] = "HB_101_END", [0x1002] = "HB_102_END", [0x1003] = "HB_103_END", [0x1004] = "HB_104_END", [0x1006] = "HB_106_END", [0x1007] = "HB_107_END", [0x1009] = "HB_START1_2", [0x100A] = "HB_201_END", [0x100B] = "HB_202_END", [0x100C] = "HB_203_END", [0x100D] = "HB_204_END", [0x100E] = "HB_205_END", [0x100F] = "HB_206_END", [0x1010] = "HB_207_END", [0x1011] = "HB_208_END", [0x1012] = "HB_209_END", [0x1013] = "HB_tr_107_END", [0x1014] = "HB_301_END", [0x1015] = "HB_302_END", [0x1016] = "HB_303_END", [0x1017] = "HB_304_END", [0x1018] = "HB_tr_117_END", [0x1019] = "HB_401_END", [0x101A] = "HB_402_END", [0x101C] = "HB_404_END", [0x101E] = "HB_406_END", [0x101F] = "HB_407_END", [0x1021] = "HB_409_END", [0x1022] = "HB_410_END", [0x1023] = "HB_411_END", [0x1026] = "HB_413_END", [0x1027] = "HB_414_END", [0x1028] = "HB_415_END", [0x1029] = "HB_416_END", [0x102B] = "HB_418_END", [0x102C] = "HB_START2", [0x102D] = "HB_START_wi_dc", [0x102E] = "HB_801_END", [0x102F] = "HB_dc_108_END", [0x1030] = "HB_802_END", [0x1031] = "HB_START_pooh", [0x1032] = "HB_901_END", [0x1033] = "HB_902_END", [0x1034] = "HB_po_004_END", [0x1035] = "HB_903_END", [0x1036] = "HB_904_END", [0x1038] = "HB_905_END", [0x1039] = "HB_po_008_END", [0x103B] = "HB_907_END", [0x103C] = "HB_hb09_ms101", [0x103D] = "HB_hb08_ms102", [0x1040] = "HB_hb04_ms403", [0x1043] = "HB_hb09_ms901", [0x1045] = "HB_210_END", [0x1046] = "HB_HB_EVENT_403", [0x1047] = "HB_hb16_ms404a", [0x1048] = "HB_hb16_ms404b", [0x1049] = "HB_hb16_ms404c", [0x104A] = "HB_hb16_ms404d", [0x104B] = "HB_417_END", [0x104C] = "HB_508_END", [0x104D] = "HB_TR_202_END", [0x104E] = "HB_501_END", [0x1051] = "HB_TR_tr04_ms202", [0x1052] = "HB_503_END", [0x1053] = "HB_TR_tr09_ms205", [0x1054] = "HB_504_END", [0x1055] = "HB_505_END", [0x1056] = "HB_506_END", [0x105A] = "HB_hb17_ms405", [0x105B] = "HB_INIT", [0x105C] = "HB_SCENARIO_1_OPEN", [0x105D] = "HB_SCENARIO_1_START", [0x105E] = "HB_SCENARIO_1_END", [0x105F] = "HB_SCENARIO_2_OPEN", [0x1060] = "HB_SCENARIO_2_START", [0x1061] = "HB_SCENARIO_2_END", [0x1062] = "HB_SCENARIO_5_OPEN", [0x1063] = "HB_SCENARIO_5_START", [0x1064] = "HB_509_END", [0x1065] = "HB_hb09_ms501", [0x1066] = "HB_511_END", [0x1068] = "HB_513_END", [0x1069] = "HB_514_END", [0x106B] = "HB_516_END", [0x106C] = "HB_517_END", [0x106D] = "HB_518_END", [0x106E] = "HB_519_END", [0x106F] = "HB_520_END", [0x1070] = "HB_dc_END", [0x1071] = "HB_SCENARIO_3_OPEN", [0x1072] = "HB_SCENARIO_3_START", [0x1073] = "HB_SCENARIO_3_END", [0x1074] = "HB_SCENARIO_4_OPEN", [0x1075] = "HB_SCENARIO_4_START", [0x1076] = "HB_SCENARIO_4_END", [0x1077] = "HB_SCENARIO_5_END", [0x1078] = "HB_109_END", [0x1079] = "HB_110_END", [0x107A] = "HB_hb18_ms402", [0x107B] = "HB_419_END", [0x107C] = "HB_601_END", [0x107D] = "HB_hb01_ms601", [0x107E] = "HB_604_ON", [0x107F] = "HB_607_END", [0x1080] = "HB_605_END", [0x1081] = "HB_421_END", [0x1082] = "HB_422_END", [0x1083] = "HB_NEW_MICKEY_START", [0x1084] = "HB_POOH_CLEAR", [0x1086] = "HB_hb20_ms401", [0x1087] = "HB_202_ON", [0x1088] = "HB_203_ON", [0x108A] = "HB_hb_event_502", [0x108B] = "HB_hb_event_507", [0x108C] = "HB_RTN_ON", [0x108D] = "HB_TRON_OUT", [0x108E] = "HB_TRON_IN", [0x108F] = "HB_TR05_HIDDEN_ON", [0x1090] = "HB_TR05_HIDDEN_OFF", [0x1091] = "HB_TR08_HIDDEN_ON", [0x1092] = "HB_TR08_HIDDEN_OFF", [0x1095] = "HB_hb_event_512", [0x1096] = "HB_hb_event_515", [0x1097] = "HB_RTN_ON_OFF", [0x1098] = "HB_420_END", [0x1099] = "HB_607_OUT", [0x109A] = "HB_CLOUD_ON", [0x109B] = "HB_FM_COM_VEX_END", [0x109C] = "HB_FM_COM_LEX_END", [0x109D] = "HB_FM_COM_LAR_END", [0x109E] = "HB_FM_COM_ZEX_END", [0x109F] = "HB_FM_COM_MAR_END", [0x10A1] = "HB_ROXAS_KINOKO_ON", [0x10A3] = "HB_FM_711_END", [0x10A4] = "HB_FM_MAP1_ROCK_OFF", [0x10A5] = "HB_FM_TSUURO1_CLEAR", [0x10A7] = "HB_FM_TSUURO2_CLEAR", [0x10A8] = "HB_FM_13TSUURO_READY", [0x10A9] = "HB_FM_712_END", [0x10AA] = "HB_FM_13TSUURO1_CLEAR", [0x10AB] = "HB_FM_13TSUURO2_CLEAR", [0x10AC] = "HB_FM_13TSUURO3_CLEAR", [0x10B0] = "HB_FM_VEX_RE_CLEAR", [0x10B1] = "HB_FM_LEX_RE_CLEAR", [0x10B2] = "HB_FM_ZEX_RE_CLEAR", [0x10B5] = "HB_FM_DEM_RE_CLEAR", [0x10B7] = "HB_FM_MAR_RE_CLEAR", [0x10B8] = "HB_FM_LAR_RE_CLEAR", [0x10BA] = "HB_FM_13TSUURO_OUT", [0x10BB] = "HB_FM_713_END", [0x10BC] = "HB_FM_714_END", [0x10BD] = "HB_ROXAS_KINOKO_CLEAR", [0x10BE] = "HB_FM_13TSUURO1_CLEAR_OUT", [0x10BF] = "HB_FM_13TSUURO2_CLEAR_OUT", [0x10C0] = "HB_FM_TSUURO1_CLEAR_EXIT", [0x10C1] = "HB_FM_TSUURO2_CLEAR_EXIT", [0x10C2] = "HB_FM_13RE_COMPLETE", [0x10C3] = "HB_FM_KINOKO_DEM_PLAYED", [0x10C4] = "HB_FM_KINOKO_ROX_PLAYED", [0x1400] = "BB_START", [0x1401] = "BB_101_END", [0x1402] = "BB_102_END", [0x1405] = "BB_bb05_ms104a", [0x1406] = "BB_bb05_ms104b", [0x1407] = "BB_124_END", [0x1408] = "BB_108_END", [0x1409] = "BB_104_END", [0x140A] = "BB_bb15_ms203", [0x140B] = "BB_INIT", [0x140C] = "BB_SCENARIO_1_OPEN", [0x140D] = "BB_SCENARIO_1_START", [0x140E] = "BB_114_END", [0x140F] = "BB_SCENARIO_1_END", [0x1410] = "BB_SCENARIO_2_OPEN", [0x1411] = "BB_SCENARIO_2_START", [0x1412] = "BB_SCENARIO_2_END", [0x1415] = "BB_119_END", [0x1418] = "BB_START2", [0x1419] = "BB_201_END", [0x141C] = "BB_204_END", [0x141D] = "BB_205_END", [0x141F] = "BB_207_END", [0x1421] = "BB_208_OUT", [0x1422] = "BB_210_END", [0x1424] = "BB_FM_COM_OBJ_OFF", [0x1425] = "BB_213_END", [0x1426] = "BB_214_END", [0x1427] = "BB_FM_XAL_RE_CLEAR", [0x1428] = "BB_216_END", [0x1429] = "BB_bb01_ms101", [0x142A] = "BB_bb11_ms102", [0x142B] = "BB_bb03_ms103", [0x142D] = "BB_FM_KINOKO_XAL_PLAYED", [0x1432] = "BB_105_END", [0x1433] = "BB_106_END", [0x1434] = "BB_107_END", [0x1436] = "BB_110_END", [0x1437] = "BB_111_END", [0x1438] = "BB_112_END", [0x1439] = "BB_113_END", [0x143B] = "BB_116_END", [0x143C] = "BB_117_END", [0x143D] = "BB_118_END", [0x1443] = "BB_202_END", [0x1447] = "BB_208_END", [0x1448] = "BB_209_END", [0x144A] = "BB_212_END", [0x144E] = "BB_111_OUT", [0x144F] = "BB_bb04_ms201", [0x1450] = "BB_bb00_ms202", [0x1452] = "BB_107_OUT", [0x1453] = "BB_113_OUT", [0x1454] = "BB_117_OUT", [0x1455] = "BB_bb00_ms202_OUT", [0x1800] = "HE_START", [0x1801] = "HE_101_END", [0x1804] = "HE_104_END", [0x1806] = "HE_HE_EvEMT_106", [0x1807] = "HE_START2A", [0x1808] = "HE_108_END", [0x1809] = "HE_START2B", [0x180E] = "HE_HE_EvENT_114", [0x180F] = "HE_115_END", [0x1811] = "HE_117_END", [0x1813] = "HE_HE_EvENT_119", [0x1814] = "HE_120_END", [0x1816] = "HE_122_END", [0x1817] = "HE_he00_ms104a", [0x1818] = "HE_123_END", [0x1819] = "HE_ms104a_FAILED", [0x181A] = "HE_he00_ms104b", [0x181B] = "HE_ms104b_FAILED", [0x181C] = "HE_HE_EvENT_127", [0x181D] = "HE_INIT", [0x181E] = "HE_129_END", [0x181F] = "HE_SCENARIO_1_OPEN", [0x1820] = "HE_SCENARIO_1_START", [0x1821] = "HE_132_END", [0x1822] = "HE_SCENARIO_1_END", [0x1823] = "HE_SCENARIO_2_OPEN", [0x1824] = "HE_135_END", [0x1825] = "HE_SCENARIO_2_START", [0x1826] = "HE_SCENARIO_2_END", [0x1827] = "HE_138_END", [0x1829] = "HE_W_COL_ON", [0x182F] = "HE_he18_ms108", [0x1831] = "HE_205_END", [0x1833] = "HE_HE_EVENT_102", [0x1834] = "HE_HE_EVENT_118", [0x1835] = "HE_HE_EVENT_216", [0x1836] = "HE_NO_AURON01_START", [0x1837] = "HE_NO_AURON01_END", [0x1838] = "HE_HE_EvENT_210", [0x1839] = "HE_211_END", [0x183A] = "HE_NO_AURON02_START", [0x183B] = "HE_213_END", [0x183C] = "HE_NO_AURON02_END", [0x183D] = "HE_214_END", [0x183E] = "HE_he_colosseum_1_CLEAR", [0x1840] = "HE_he_colosseum_2_CLEAR", [0x1841] = "HE_he_colosseum_3_CLEAR", [0x1843] = "HE_103_END", [0x1844] = "HE_he_colosseum_4_CLEAR", [0x1845] = "HE_105_END", [0x1846] = "HE_107_END", [0x1847] = "HE_he_colosseum_5_CLEAR", [0x1848] = "HE_109_END", [0x1849] = "HE_he06_ms101", [0x184A] = "HE_112_END", [0x184B] = "HE_he05_ms102", [0x184C] = "HE_113_END", [0x184D] = "HE_he_colosseum_6_CLEAR", [0x184E] = "HE_he07_ms103", [0x184F] = "HE_he_colosseum_7_CLEAR", [0x1851] = "HE_he_colosseum_8_CLEAR", [0x1852] = "HE_121_END", [0x1853] = "HE_he19_ms204", [0x1854] = "HE_140_END", [0x1855] = "HE_he19_ms205", [0x1857] = "HE_125_END", [0x1858] = "HE_126_END", [0x1859] = "HE_128_END", [0x185B] = "HE_he17_ms105", [0x185C] = "HE_131_END", [0x185E] = "HE_he08_ms106", [0x185F] = "HE_134_END", [0x1861] = "HE_he08_ms107", [0x1862] = "HE_137_END", [0x1865] = "HE_201_END", [0x1866] = "HE_201202_END", [0x1867] = "HE_202_END", [0x186D] = "HE_207_END", [0x186E] = "HE_208_END", [0x186F] = "HE_209_END", [0x1872] = "HE_HADES_ON", [0x1873] = "HE_125_OUT", [0x1874] = "HE_125_In", [0x1875] = "HE_FM_COM_OBJ_OFF", [0x1876] = "HE_FM_KINOKO_ZEX_PLAYED", [0x1877] = "HE_217_END", [0x1878] = "HE_he09_ms201", [0x1879] = "HE_he09_ms202", [0x187A] = "HE_he06_ms203", [0x187D] = "HE_203_END", [0x187E] = "HE_204_LOSE", [0x187F] = "HE_206_LOSE", [0x1C00] = "AL_START", [0x1C01] = "AL_CARPET_01_JUMP", [0x1C02] = "AL_102_END_L", [0x1C03] = "AL_CARPET_01_END", [0x1C04] = "AL_CARPET_02_END_L", [0x1C05] = "AL_CARPET_03_JUMP", [0x1C06] = "AL_106_END", [0x1C07] = "AL_CARPET_03_END", [0x1C09] = "AL_109_END", [0x1C0A] = "AL_CARPET_04_JUMP", [0x1C0B] = "AL_CARPET_04_END", [0x1C0C] = "AL_110_END", [0x1C0D] = "AL_CARPET_05_END_L", [0x1C12] = "AL_115_END_L", [0x1C13] = "AL_116_END", [0x1C14] = "AL_117_END", [0x1C15] = "AL_START2", [0x1C16] = "AL_201_END", [0x1C19] = "AL_INIT", [0x1C1A] = "AL_SCENARIO_1_OPEN", [0x1C1B] = "AL_SCENARIO_1_START", [0x1C1C] = "AL_SCENARIO_1_END", [0x1C1D] = "AL_SCENARIO_2_OPEN", [0x1C1E] = "AL_SCENARIO_2_START", [0x1C1F] = "AL_207_END", [0x1C20] = "AL_SCENARIO_2_END", [0x1C21] = "AL_ESCAPE_END_L", [0x1C22] = "AL_111_END_L", [0x1C23] = "AL_101_END", [0x1C24] = "AL_103_END", [0x1C25] = "AL_104_END", [0x1C26] = "AL_105_END", [0x1C27] = "AL_107_END", [0x1C28] = "AL_108_END", [0x1C29] = "AL_109_OUT", [0x1C2A] = "AL_GIMMICK_PRE", [0x1C2B] = "AL_GIMMICK_START", [0x1C2C] = "AL_GIMMICK_CLEAR", [0x1C2D] = "AL_TRAP_CLEAR", [0x1C2E] = "AL_TRAP_DOOR", [0x1C2F] = "AL_112_END", [0x1C30] = "AL_113_END", [0x1C31] = "AL_114_END", [0x1C32] = "AL_202_END", [0x1C33] = "AL_203_END", [0x1C34] = "AL_204_END", [0x1C36] = "AL_205_END", [0x1C38] = "AL_206_END", [0x1C39] = "AL_212_END", [0x1C3A] = "AL_208_END", [0x1C3B] = "AL_209_END_L", [0x1C3C] = "AL_210_END", [0x1C47] = "AL_152_END", [0x1C4A] = "AL_CARPET_05_CLEAR", [0x1C4B] = "AL_CARPET_06_CLEAR", [0x1C4C] = "AL_al14_ms202_free", [0x1C4D] = "AL_al13_trap_free", [0x1C4E] = "AL_212_OUT", [0x1C4F] = "AL_CARPET_05_OUT", [0x1C50] = "AL_FM_COM_OBJ_OFF", [0x1C51] = "AL_FM_KINOKO_LEX_PLAYED", [0x2000] = "MU_START", [0x2001] = "MU_102_END", [0x2002] = "MU_119_END", [0x2003] = "MU_119_OUT", [0x2008] = "MU_INIT", [0x2009] = "MU_SCENARIO_1_START", [0x200A] = "MU_SCENARIO_1_OPEN", [0x200B] = "MU_SCENARIO_1_END", [0x200C] = "MU_SCENARIO_2_START", [0x200D] = "MU_SCENARIO_2_OPEN", [0x200E] = "MU_114_END", [0x200F] = "MU_SCENARIO_2_END", [0x2010] = "MU_116_END_L", [0x2012] = "MU_118_END_L", [0x2013] = "MU_START2", [0x2015] = "MU_202_END", [0x2017] = "MU_204_END_L", [0x2018] = "MU_MULAN_START", [0x2019] = "MU_206_END", [0x201B] = "MU_208_END_L", [0x201E] = "MU_211_END_L", [0x2020] = "MU_213_END", [0x2021] = "MU_MS103A_CLEAR_END", [0x2022] = "MU_215_END_L", [0x2023] = "MU_216_END", [0x2024] = "MU_101_END", [0x2025] = "MU_103_END", [0x2026] = "MU_104_END_L", [0x202C] = "MU_MS103A_CLEAR", [0x2030] = "MU_MS103C_CLEAR", [0x2031] = "MU_MS103B_CLEAR_END", [0x2032] = "MU_MS103_COMPLETE", [0x2033] = "MU_105_END", [0x2034] = "MU_106_END", [0x2035] = "MU_107_END_L", [0x2036] = "MU_108_END", [0x2037] = "MU_109_END", [0x2038] = "MU_110_END_L", [0x2039] = "MU_111_END", [0x203A] = "MU_112_END", [0x203B] = "MU_113_END_L", [0x203C] = "MU_114_OUT", [0x203D] = "MU_115_END", [0x203E] = "MU_116_OUT", [0x203F] = "MU_117_END", [0x2040] = "MU_201_END", [0x2041] = "MU_203_END", [0x2042] = "MU_205_END", [0x2043] = "MU_207_END", [0x2044] = "MU_207A_END", [0x2045] = "MU_209_END", [0x2046] = "MU_210A_END", [0x2047] = "MU_210_END", [0x2049] = "MU_212_END", [0x204A] = "MU_214_END", [0x204E] = "MU_MS103B_CLEAR", [0x2055] = "MU_202_OUT", [0x2057] = "MU_113_OUT", [0x2058] = "MU_FM_KINOKO_VEX_PLAYED", [0x2400] = "PO_START", [0x2401] = "PO_001_END", [0x2402] = "PO_003_END", [0x2403] = "PO_004_END", [0x2404] = "PO_HB_BATTLE_END", [0x2405] = "PO_005_END", [0x2406] = "PO_007_END", [0x2407] = "PO_008_END", [0x2408] = "PO_PAGE_1", [0x2409] = "PO_101_END", [0x240A] = "PO_102_END", [0x240B] = "PO_103_END", [0x240E] = "PO_MS101_END_L", [0x240F] = "PO_105_END", [0x2410] = "PO_PAGE_2", [0x2411] = "PO_201_END", [0x2412] = "PO_202_END", [0x2413] = "PO_203_END", [0x2416] = "PO_MS201_END_L", [0x2417] = "PO_205_END", [0x2418] = "PO_PAGE_3", [0x2419] = "PO_301_END", [0x241A] = "PO_302_END", [0x241B] = "PO_303_END", [0x241E] = "PO_MS301_END_L", [0x241F] = "PO_305_END", [0x2420] = "PO_PAGE_4", [0x2421] = "PO_401_END", [0x2422] = "PO_402_END", [0x2425] = "PO_MS401_END_L", [0x2426] = "PO_404_END", [0x2427] = "PO_PAGE_5", [0x2428] = "PO_501_END", [0x2429] = "PO_502_END", [0x242C] = "PO_MS501_END_L", [0x242D] = "PO_504_END", [0x2434] = "PO_106_END", [0x2435] = "PO_206_END", [0x2436] = "PO_307_END", [0x2437] = "PO_405_END", [0x2438] = "PO_INIT", [0x2439] = "PO_SCENARIO_0_START", [0x243A] = "PO_SCENARIO_0_OPEN", [0x243B] = "PO_SCENARIO_0_END", [0x243C] = "PO_SCENARIO_1_START", [0x243D] = "PO_SCENARIO_1_OPEN", [0x243E] = "PO_SCENARIO_1_END", [0x243F] = "PO_SCENARIO_2_START", [0x2440] = "PO_SCENARIO_2_OPEN", [0x2441] = "PO_SCENARIO_3_END", [0x2442] = "PO_SCENARIO_3_START", [0x2443] = "PO_SCENARIO_3_OPEN", [0x2444] = "PO_SCENARIO_4_START", [0x2445] = "PO_SCENARIO_4_OPEN", [0x2446] = "PO_SCENARIO_4_END", [0x2447] = "PO_SCENARIO_5_START", [0x2448] = "PO_SCENARIO_5_OPEN", [0x2449] = "PO_SCENARIO_5_END", [0x244A] = "PO_SCENARIO_2_END", [0x2450] = "PO_402_END_L", [0x2451] = "PO_402_END_ON", [0x2452] = "PO_FREE_ON", [0x2453] = "PO_FREE_OFF", [0x2800] = "LK_START", [0x2801] = "LK_101_END", [0x2802] = "LK_102_END", [0x2803] = "LK_103_END", [0x2804] = "LK_104_END", [0x2805] = "LK_lk05_ms101", [0x2806] = "LK_106_END", [0x2807] = "LK_107_END", [0x2808] = "LK_108_END", [0x2809] = "LK_109_END", [0x280A] = "LK_110_END", [0x280B] = "LK_111_END", [0x280C] = "LK_112_END", [0x280D] = "LK_113_END", [0x280E] = "LK_114_END", [0x280F] = "LK_115_END", [0x2810] = "LK_116_END", [0x2811] = "LK_117_END", [0x2812] = "LK_118_END", [0x2813] = "LK_119_END", [0x2814] = "LK_lk02_ms102", [0x2815] = "LK_121_END", [0x2816] = "LK_lk14_ms103", [0x2818] = "LK_START2", [0x2819] = "LK_201_END", [0x281A] = "LK_202_END", [0x281B] = "LK_203_END", [0x281C] = "LK_204_END", [0x281D] = "LK_205_END", [0x281E] = "LK_206_END", [0x2820] = "LK_208_END", [0x2821] = "LK_209_END", [0x2822] = "LK_210_END", [0x2823] = "LK_211_END", [0x2825] = "LK_212_END", [0x2827] = "LK_123_END", [0x2828] = "LK_lk05_ms201", [0x282A] = "LK_INIT", [0x282B] = "LK_SCENARIO_1_OPEN", [0x282C] = "LK_SCENARIO_1_START", [0x282D] = "LK_SCENARIO_1_END", [0x282E] = "LK_SCENARIO_2_OPEN", [0x282F] = "LK_SCENARIO_2_START", [0x2830] = "LK_SCENARIO_2_END", [0x2831] = "LK_214_END", [0x2832] = "LK_lk06_ms100", [0x2833] = "LK_lk15_ms202", [0x2C00] = "LM_START", [0x2C01] = "LM_101_END", [0x2C02] = "LM_102_END", [0x2C03] = "LM_103_END_L", [0x2C04] = "LM_START_1", [0x2C08] = "LM_107_END", [0x2C09] = "LM_108_END", [0x2C0A] = "LM_START_2", [0x2C0B] = "LM_201_END", [0x2C0C] = "LM_202_END", [0x2C0D] = "LM_203_END_L", [0x2C0E] = "LM_204_END", [0x2C0F] = "LM_205_END", [0x2C10] = "LM_START_3", [0x2C11] = "LM_301_END", [0x2C12] = "LM_302_END_L", [0x2C13] = "LM_303_END", [0x2C14] = "LM_START_4", [0x2C15] = "LM_401_END", [0x2C16] = "LM_402_END", [0x2C17] = "LM_403_END", [0x2C18] = "LM_404_END", [0x2C1A] = "LM_405_END", [0x2C1B] = "LM_406_END", [0x2C1D] = "LM_408_END", [0x2C1F] = "LM_START_5", [0x2C20] = "LM_501_END", [0x2C21] = "LM_502_END_L", [0x2C22] = "LM_104_END_L", [0x2C23] = "LM_105_END", [0x2C24] = "LM_106_END_L", [0x2C25] = "LM_109_END", [0x2C26] = "LM_GET_ITEM_2", [0x2C27] = "LM_GET_ITEM_3", [0x2C28] = "LM_GET_ITEM_4", [0x2C29] = "LM_407_END", [0x2C2A] = "LM_409_END_L", [0x2C2B] = "LM_410_END", [0x2C2C] = "LM_411_END", [0x2C2D] = "LM_GET_ITEM_5", [0x2C2E] = "LM_INIT", [0x2C2F] = "LM_SCENARIO_1_START", [0x2C30] = "LM_SCENARIO_1_OPEN", [0x2C31] = "LM_SCENARIO_1_END", [0x2C32] = "LM_SCENARIO_2_START", [0x2C33] = "LM_SCENARIO_2_OPEN", [0x2C34] = "LM_SCENARIO_2_END", [0x2C35] = "LM_SCENARIO_3_START", [0x2C36] = "LM_SCENARIO_3_OPEN", [0x2C37] = "LM_SCENARIO_3_END", [0x2C38] = "LM_SCENARIO_4_START", [0x2C39] = "LM_SCENARIO_4_OPEN", [0x2C3A] = "LM_SCENARIO_4_END", [0x2C3B] = "LM_SCENARIO_5_START", [0x2C3C] = "LM_SCENARIO_5_OPEN", [0x2C3D] = "LM_SCENARIO_5_END", [0x2C3E] = "LM_lm04_ms103_failed", [0x2C3F] = "LM_lm01_ms201_failed", [0x2C40] = "LM_lm03_ms301_failed", [0x2C41] = "LM_lm09_ms401_failed", [0x2C42] = "LM_lm04_ms501_failed", [0x2C43] = "LM_lm04_ms103_FREE", [0x2C44] = "LM_lm01_ms201_FREE", [0x2C45] = "LM_lm03_ms301_FREE", [0x2C46] = "LM_lm09_ms401_FREE", [0x2C47] = "LM_lm04_ms501_FREE", [0x2C48] = "LM_lm02_ms102_failed", [0x3000] = "DC_DC_OPEN_L", [0x3001] = "DC_START", [0x3002] = "DC_102_END", [0x3003] = "DC_103_END", [0x3004] = "DC_104_END", [0x3005] = "DC_MINNIE_CANCEL", [0x3006] = "DC_105_END", [0x3008] = "DC_106_END", [0x3009] = "DC_107_END_L", [0x300A] = "DC_108_END", [0x300B] = "DC_SCENARIO_1_OPEN", [0x300C] = "DC_109_END", [0x300D] = "DC_110_END", [0x300E] = "DC_WI_CLEAR", [0x300F] = "DC_111_END", [0x3010] = "DC_SCENARIO_1_START", [0x3011] = "DC_HB_MERLIN_MEET", [0x3012] = "DC_SCENARIO_1_END", [0x3013] = "DC_INIT", [0x301D] = "DC_MINNIE_GET", [0x301E] = "DC_105_OUT", [0x301F] = "DC_FM_NAZO_ON", [0x3021] = "DC_FM_NAZO_BTL_READY", [0x3022] = "DC_FM_NAZO_BTL_CLEAR", [0x3400] = "WI_START", [0x3401] = "WI_101_END", [0x3402] = "WI_102_END", [0x3403] = "WI_103_END_L", [0x3404] = "WI_104_END", [0x3406] = "WI_106_END_L", [0x3408] = "WI_108_END_L", [0x340A] = "WI_110_END_L", [0x340C] = "WI_112_END_L", [0x340D] = "WI_VISION_1_END_L", [0x340E] = "WI_VISION_2_END_L", [0x340F] = "WI_VISION_3_END_L", [0x3410] = "WI_VISION_4_END_L", [0x3411] = "WI_113_END", [0x3412] = "WI_114_END", [0x3413] = "WI_115_END", [0x3414] = "WI_116_END", [0x3415] = "WI_117_END", [0x3416] = "WI_118_END_L", [0x3417] = "WI_118_OUT", [0x3418] = "WI_119_END", [0x3419] = "WI_120_END_L", [0x341A] = "WI_121_END", [0x341B] = "WI_122_END", [0x341C] = "WI_105_END_A", [0x341D] = "WI_105_END_B", [0x341E] = "WI_107_END_A", [0x341F] = "WI_107_END_B", [0x3420] = "WI_109_END_A", [0x3421] = "WI_109_END_B", [0x3422] = "WI_111_END_A", [0x3423] = "WI_111_END_B", [0x3424] = "WI_INIT", [0x3425] = "WI_SCENARIO_1_OPEN", [0x3426] = "WI_SCENARIO_1_START", [0x3427] = "WI_SCENARIO_1_END", [0x3428] = "WI_START2", [0x3429] = "WI_SCENARIO_2_OPEN", [0x342A] = "WI_FM_KINOKO_MAR_PLAYED", [0x3800] = "NM_START", [0x3801] = "NM_START2", [0x3802] = "NM_102_END", [0x3803] = "NM_103_END", [0x3804] = "NM_104_END", [0x3805] = "NM_105_END", [0x3806] = "NM_nm00_ms101", [0x3807] = "NM_107_END", [0x3808] = "NM_108_END", [0x3809] = "NM_109_END", [0x380A] = "NM_110_END", [0x380B] = "NM_111_END", [0x380C] = "NM_201_END", [0x380D] = "NM_113_END", [0x380E] = "NM_114_END", [0x380F] = "NM_115_END", [0x3810] = "NM_NM_EVENT_116", [0x3811] = "NM_117_END", [0x3812] = "NM_118_END", [0x3813] = "NM_nm03_ms103", [0x3814] = "NM_NM_EVENT_120", [0x3815] = "NM_121_END", [0x3816] = "NM_NM_EVENT_122", [0x3817] = "NM_123_END", [0x3818] = "NM_124_END", [0x3819] = "NM_nm09_ms104", [0x381A] = "NM_126_END", [0x381B] = "NM_nm06_ms102", [0x381C] = "NM_101_END", [0x381D] = "NM_108_OUT", [0x3820] = "NM_117_OUT", [0x3821] = "NM_202_END", [0x3822] = "NM_121_OUT", [0x3823] = "NM_203_END", [0x3824] = "NM_204_END", [0x3825] = "NM_205_END", [0x3826] = "NM_nm10_ms201", [0x3827] = "NM_207_END", [0x3828] = "NM_208_END", [0x3829] = "NM_nm00_ms202", [0x382A] = "NM_210_END", [0x382B] = "NM_211_END", [0x382C] = "NM_nm10_ms203", [0x382D] = "NM_213_END", [0x382E] = "NM_214_END", [0x382F] = "NM_215_END", [0x3830] = "NM_nm07_ms204", [0x3831] = "NM_217_END", [0x3832] = "NM_NM_EVENT_214", [0x3833] = "NM_INIT", [0x3834] = "NM_SCENARIO_1_END", [0x3835] = "NM_SCENARIO_2_OPEN", [0x3836] = "NM_SCENARIO_2_START", [0x3837] = "NM_SCENARIO_2_END", [0x3838] = "NM_SCENARIO_1_OPEN", [0x3839] = "NM_SCENARIO_1_START", [0x383A] = "NM_SANTA_START", [0x383C] = "NM_112_OUT", [0x383D] = "NM_NM_EVENT_122_OUT", [0x383E] = "NM_NM_EVENT_122_IN", [0x383F] = "NM_FM_KINOKO_XIG_PLAYED", [0x3C00] = "WM_TT8_CLEAR", [0x3C01] = "WM_HB1_CLEAR", [0x3C02] = "WM_MU1_CLEAR", [0x3C03] = "WM_BB1_CLEAR", [0x3C04] = "WM_EVENT_DC_DARK", [0x3C05] = "WM_EVENT_DC_OPEN", [0x3C06] = "WM_DC_CLEAR", [0x3C07] = "WM_CA1_CLEAR", [0x3C08] = "WM_NM1_CLEAR", [0x3C09] = "WM_AL1_CLEAR", [0x3C0A] = "WM_EVENT_HB_BATTLE", [0x3C0B] = "WM_HB2_CLEAR", [0x3C0C] = "WM_MU2_CLEAR", [0x3C0D] = "WM_CA2_CLEAR", [0x3C0E] = "WM_NM2_CLEAR", [0x3C0F] = "WM_AL2_CLEAR", [0x3C10] = "WM_EVENT_EH_APPEAR", [0x3C11] = "FA_EVENT_DC_DARK", [0x4000] = "CA_START", [0x4002] = "CA_START2", [0x4004] = "CA_101_END", [0x4005] = "CA_102_END", [0x4006] = "CA_ca01_ms101", [0x4007] = "CA_ca01_ms102", [0x4008] = "CA_105_END", [0x4009] = "CA_ca02_ms103", [0x400A] = "CA_107_END", [0x400B] = "CA_109_END", [0x4010] = "CA_112_END", [0x4011] = "CA_ca_event_113", [0x4012] = "CA_114_END", [0x4013] = "CA_ca09_ms104", [0x4014] = "CA_116_END", [0x4016] = "CA_118_END", [0x4017] = "CA_119_END", [0x4018] = "CA_ca07_ms105", [0x4019] = "CA_121_END", [0x401A] = "CA_ca03_ms106", [0x401B] = "CA_126_END", [0x401C] = "CA_123_END", [0x401D] = "CA_ca10_ms107", [0x401E] = "CA_125_END", [0x401F] = "CA_201_END", [0x4020] = "CA_202_END", [0x4021] = "CA_203_END", [0x4022] = "CA_ca01_ms201", [0x4024] = "CA_205_END", [0x4025] = "CA_206_END", [0x4026] = "CA_207_END", [0x4028] = "CA_209_END", [0x4029] = "CA_210_END", [0x402A] = "CA_ca14_ms203", [0x402B] = "CA_212_END", [0x402D] = "CA_213_END", [0x402E] = "CA_214_END", [0x402F] = "CA_ca01_ms204", [0x4030] = "CA_216_END", [0x4032] = "CA_ca09_ms_ht", [0x4034] = "CA_ca10_ms_ht", [0x4036] = "CA_ca12_ms_ht", [0x4038] = "CA_ca13_ms_ht", [0x403A] = "CA_ca14_ms_ht", [0x403C] = "CA_ca15_ms_ht", [0x403D] = "CA_mission_success", [0x4040] = "CA_ca01_on", [0x4042] = "CA_ca08_on", [0x4043] = "CA_ca14_on", [0x4044] = "CA_EVENT_111", [0x4045] = "CA_EVENT_117", [0x4047] = "CA_EVENT_205", [0x4049] = "CA_ca16_on", [0x404A] = "CA_INIT", [0x404B] = "CA_SCENARIO_1_OPEN", [0x404C] = "CA_SCENARIO_1_START", [0x404D] = "CA_SCENARIO_1_END", [0x404E] = "CA_SCENARIO_2_OPEN", [0x404F] = "CA_SCENARIO_2_START", [0x4050] = "CA_SCENARIO_2_END", [0x4051] = "CA_104_OUT", [0x405A] = "CA_JACK01_START", [0x405B] = "CA_JACK01_END", [0x405C] = "CA_JACK02_START", [0x405D] = "CA_JACK02_END", [0x405E] = "CA_NO_JACK01_START", [0x405F] = "CA_NO_JACK01_END", [0x4060] = "CA_NO_JACK02_START", [0x4061] = "CA_NO_JACK02_END", [0x4062] = "CA_ca18_ms202", [0x4063] = "CA_FM_COM_OBJ_OFF", [0x4064] = "CA_FM_KINOKO_LUX_PLAYED", [0x4400] = "TR_START", [0x4401] = "TR_101_END", [0x4402] = "TR_102_END", [0x4403] = "TR_103_END", [0x4404] = "TR_104_END", [0x4405] = "TR_105_END", [0x4406] = "TR_tr01_ms101", [0x4407] = "TR_107_END", [0x4409] = "TR_108_END", [0x440A] = "TR_109_END", [0x440C] = "TR_110_END", [0x440D] = "TR_111_END", [0x440E] = "TR_tr03_ms103", [0x440F] = "TR_113_END", [0x4410] = "TR_114_END", [0x4411] = "TR_tr04_ms104", [0x4412] = "TR_116_END", [0x4413] = "TR_117_END", [0x4414] = "TR_START2", [0x4415] = "TR_201_END", [0x4416] = "TR_202_END", [0x4417] = "TR_203_END", [0x4418] = "TR_tr02_ms210", [0x4419] = "TR_204_END", [0x441A] = "TR_205_END", [0x441B] = "TR_tr04_ms202", [0x441C] = "TR_206_END", [0x441D] = "TR_207_END", [0x441E] = "TR_208_END", [0x441F] = "TR_tr07_ms203", [0x4420] = "TR_209_END", [0x4421] = "TR_210_END", [0x4422] = "TR_tr09_ms204", [0x4423] = "TR_tr09_ms205", [0x4424] = "TR_hb_304_END", [0x4426] = "TR_117_tr05_jump", [0x4428] = "TR_hb_501_END", [0x4429] = "TR_hb_502_END", [0x442A] = "TR_503_END", [0x442B] = "TR_tr02_ms102a", [0x442C] = "TR_tr02_ms102b", [0x442D] = "TR_INIT", [0x442E] = "TR_SCENARIO_1_OPEN", [0x442F] = "TR_SCENARIO_1_START", [0x4430] = "TR_SCENARIO_1_END", [0x4431] = "TR_SCENARIO_2_OPEN", [0x4432] = "TR_SCENARIO_2_START", [0x4433] = "TR_SCENARIO_2_END", [0x4434] = "TR_tr01_ms101_EXIT", [0x4436] = "TR_RTN_ON", [0x4437] = "TR_113_OUT", [0x4438] = "TR_113_IN", [0x443A] = "TR_HB05_HIDDEN_OFF", [0x443B] = "TR_FRAG_OFF", [0x4800] = "EH_START", [0x4804] = "EH_INIT", [0x4805] = "EH_eh_event_101", [0x4806] = "EH_eh_event_102", [0x4807] = "EH_eh_event_103", [0x4809] = "EH_eh_event_105", [0x480A] = "EH_eh_event_106", [0x480B] = "EH_eh_event_107", [0x480C] = "EH_eh_event_108", [0x480D] = "EH_eh_event_109", [0x480E] = "EH_eh_event_110", [0x480F] = "EH_eh_event_111", [0x4810] = "EH_eh_event_112", [0x4811] = "EH_eh_event_113", [0x4812] = "EH_eh10_ms102", [0x4813] = "EH_eh_event_115", [0x4814] = "EH_eh_event_116", [0x4815] = "EH_eh_event_117", [0x4816] = "EH_eh_event_118", [0x4817] = "EH_eh14_ms103", [0x4818] = "EH_eh_event_120", [0x4819] = "EH_eh_event_121", [0x481A] = "EH_eh15_ms104", [0x481B] = "EH_eh_event_123", [0x481C] = "EH_eh_event_124", [0x481D] = "EH_eh_event_125", [0x481E] = "EH_eh_event_126", [0x481F] = "EH_eh_event_127", [0x4820] = "EH_eh_event_128", [0x4821] = "EH_eh_event_129", [0x4822] = "EH_eh_event_130", [0x4823] = "EH_eh_event_131", [0x4824] = "EH_eh19_ms105", [0x4825] = "EH_eh_event_133", [0x4826] = "EH_eh_event_134", [0x4827] = "EH_eh_event_135", [0x4829] = "EH_eh_event_136", [0x482B] = "EH_eh_event_201", [0x482C] = "EH_eh_event_202", [0x482D] = "EH_eh_event_203", [0x482E] = "EH_eh_event_204", [0x482F] = "EH_SCENARIO_1_OPEN", [0x4830] = "EH_SCENARIO_1_START", [0x4831] = "EH_start_ev301", [0x4832] = "EH_eh01_ev301", [0x4837] = "EH_JIMMNY_FULL_OPEN", [0x483A] = "EH_eh27_ms106", [0x483B] = "EH_eh28_ms107", [0x483C] = "EH_eh26_ms108", [0x483D] = "EH_eh25_ms109", [0x483E] = "EH_eh24_ms110", [0x483F] = "EH_eh22_ms111", [0x4840] = "EH_eh23_ms112", [0x4841] = "EH_eh20_ms113", [0x4842] = "EH_FINAL_CHANCE_START", [0x4843] = "EH_NO_RIKU_START", [0x4844] = "EH_NO_RIKU_END", [0x4845] = "EH_RIKU_LAST_START", [0x4846] = "EH_EH_OUT", [0x4847] = "EH_EH_IN", [0x4848] = "EH_GAME_COMPLETE", [0x4849] = "EH_EH_LASTBOSS_RESET", [0x484A] = "EH_NO_RIKU_START_RE", [0x484B] = "EH_NO_RIKU_END_RE", [0x484C] = "EH_RIKU_LAST_RE", [0x484D] = "EH_RIKU_LAST_END_RE", [0x484E] = "EH_FM_ROX_RE_CLEAR", [0x484F] = "EH_FM_XIG_RE_CLEAR", [0x4850] = "EH_FM_SAI_RE_CLEAR", [0x4851] = "EH_FM_LUX_RE_CLEAR", [0x4852] = "EH_FM_XEM_RE_CLEAR", [0x4853] = "EH_FM_KINOKO_ZEM_PLAYED", }; } public enum GameVersion { Japanese = 0x2a, American = 0x2d, FinalMix = 0x3a } } ================================================ FILE: KHSave.Lib2/ISaveKh2.cs ================================================ using KHSave.Lib2.Models; using KHSave.Lib2.Types; using System.IO; namespace KHSave.Lib2 { public interface ISaveKh2 { bool IsFinalMix { get; } uint MagicCode { get; set; } int Version { get; set; } uint Checksum { get; set; } WorldType WorldId { get; set; } byte RoomId { get; set; } byte SpawnId { get; set; } byte Unused0f { get; set; } IPlaceScript[] PlaceScripts { get; } Progress[] StoryProgress { get; set; } byte[] RoomVisitedFlag { get; set; } // There might be a chance that it starts from 0x2300 int MunnyAmount { get; set; } int Timer { get; set; } Difficulty Difficulty { get; set; } byte[] PuzzlePieceFlags { get; set; } ICharacter[] Characters { get; } IDriveForm[] DriveForms { get; } PartyMembers[] WorldPartyMembers { get; set; } byte[] InventoryCount { get; set; } int Experience { get; set; } CommandType ShortcutCircle { get; set; } CommandType ShortcutTriangle { get; set; } CommandType ShortcutSquare { get; set; } CommandType ShortcutCross { get; set; } int BonusLevel { get; set; } bool Vibration { get; set; } bool Unknown41a4_1 { get; set; } bool Unknown41a4_2 { get; set; } bool NavigationalMap { get; set; } bool FieldCameraManual { get; set; } bool RightAnalogStickCommand { get; set; } bool CommandMenuClassic { get; set; } bool CameraLeftRightReversed { get; set; } bool CameraUpDownReversed { get; set; } bool Unknown41a5_1 { get; set; } bool Unknown41a5_2 { get; set; } short ProgressTutorialMenu { get; set; } bool NewStatusValor { get; set; } bool NewStatusWisdom { get; set; } bool NewStatusLimit { get; set; } bool NewStatusMaster { get; set; } bool NewStatusFinal { get; set; } bool NewStatusSummonStitch { get; set; } bool NewStatusSummonGenie { get; set; } bool NewStatusSummonPeterPan { get; set; } bool NewStatusSummonChickenLittle { get; set; } void Write(Stream stream); } } ================================================ FILE: KHSave.Lib2/KHSave.Lib2.csproj ================================================  net6 ================================================ FILE: KHSave.Lib2/Models/CharacterFinalMix.cs ================================================ using KHSave.Lib2.Types; using Xe.BinaryMapper; namespace KHSave.Lib2.Models { public class CharacterFinalMix : ICharacter { [Data(Count = 0x114)] public byte[] Data { get; set; } [Data(0)] public EquipmentType Weapon { get; set; } [Data] public short Unk02 { get; set; } [Data] public byte HpCur { get; set; } [Data] public byte HpMax { get; set; } [Data] public byte MpCur { get; set; } [Data] public byte MpMax { get; set; } [Data] public byte ApBoost { get; set; } [Data] public byte StrengthBoost { get; set; } [Data] public byte MagicBoost { get; set; } [Data] public byte DefenseBoost { get; set; } [Data] public byte Unk0c { get; set; } [Data] public byte Unk0d { get; set; } [Data] public byte Unk0e { get; set; } [Data] public byte Level { get; set; } [Data] public byte ArmorCount { get; set; } [Data] public byte AccessoryCount { get; set; } [Data] public byte ItemCount { get; set; } [Data] public byte UnknownCount { get; set; } [Data(Count = 8)] public short[] Armors { get; set; } [Data(Count = 8)] public short[] Accessories { get; set; } [Data(Count = 8)] public short[] Items { get; set; } [Data(Count = 8)] public short[] ItemAutoReload { get; set; } [Data(Count = 0x50)] public ushort[] Abilities { get; set; } [Data] public BattleStyleType BattleStyle { get; set; } [Data] public AbilityStyleType AbilityStyle1 { get; set; } [Data] public AbilityStyleType AbilityStyle2 { get; set; } [Data] public AbilityStyleType AbilityStyle3 { get; set; } [Data] public AbilityStyleType AbilityStyle4 { get; set; } } } ================================================ FILE: KHSave.Lib2/Models/CharacterVanilla.cs ================================================ using KHSave.Lib2.Types; using Xe.BinaryMapper; namespace KHSave.Lib2.Models { public class CharacterVanilla : ICharacter { [Data(Count = 0xf4)] public byte[] Data { get; set; } [Data(0)] public EquipmentType Weapon { get; set; } [Data] public short Unk02 { get; set; } [Data] public byte HpCur { get; set; } [Data] public byte HpMax { get; set; } [Data] public byte MpCur { get; set; } [Data] public byte MpMax { get; set; } [Data] public byte ApBoost { get; set; } [Data] public byte StrengthBoost { get; set; } [Data] public byte MagicBoost { get; set; } [Data] public byte DefenseBoost { get; set; } [Data] public byte Unk0c { get; set; } [Data] public byte Unk0d { get; set; } [Data] public byte Unk0e { get; set; } [Data] public byte Level { get; set; } [Data] public byte ArmorCount { get; set; } [Data] public byte AccessoryCount { get; set; } [Data] public byte ItemCount { get; set; } [Data] public byte UnknownCount { get; set; } [Data(Count = 8)] public short[] Armors { get; set; } [Data(Count = 8)] public short[] Accessories { get; set; } [Data(Count = 8)] public short[] Items { get; set; } [Data(Count = 8)] public short[] ItemAutoReload { get; set; } [Data(0x54, Count = 0x30)] public ushort[] Abilities { get; set; } [Data] public BattleStyleType BattleStyle { get; set; } [Data] public AbilityStyleType AbilityStyle1 { get; set; } [Data] public AbilityStyleType AbilityStyle2 { get; set; } [Data] public AbilityStyleType AbilityStyle3 { get; set; } [Data] public AbilityStyleType AbilityStyle4 { get; set; } } } ================================================ FILE: KHSave.Lib2/Models/DriveFormFinalMix.cs ================================================ using KHSave.Lib2.Types; using Xe.BinaryMapper; namespace KHSave.Lib2.Models { public class DriveFormFinalMix : IDriveForm { [Data(0)] public EquipmentType Weapon { get; set; } [Data] public byte Level { get; set; } [Data] public byte AbilityLevel { get; set; } [Data] public int Experience { get; set; } [Data(Count = 0x18)] public ushort[] Abilities { get; set; } } } ================================================ FILE: KHSave.Lib2/Models/DriveFormVanilla.cs ================================================ using KHSave.Lib2.Types; using Xe.BinaryMapper; namespace KHSave.Lib2.Models { public class DriveFormVanilla : IDriveForm { [Data(0)] public EquipmentType Weapon { get; set; } [Data] public byte Level { get; set; } [Data] public byte AbilityLevel { get; set; } [Data] public int Experience { get; set; } [Data(Count = 0x10)] public ushort[] Abilities { get; set; } } } ================================================ FILE: KHSave.Lib2/Models/ICharacter.cs ================================================ using KHSave.Lib2.Types; namespace KHSave.Lib2.Models { public interface ICharacter { EquipmentType Weapon { get; set; } short Unk02 { get; set; } byte HpCur { get; set; } byte HpMax { get; set; } byte MpCur { get; set; } byte MpMax { get; set; } byte ApBoost { get; set; } byte StrengthBoost { get; set; } byte MagicBoost { get; set; } byte DefenseBoost { get; set; } byte Unk0c { get; set; } byte Unk0d { get; set; } byte Unk0e { get; set; } byte Level { get; set; } byte ArmorCount { get; set; } byte AccessoryCount { get; set; } byte ItemCount { get; set; } byte UnknownCount { get; set; } short[] Armors { get; set; } short[] Accessories { get; set; } short[] Items { get; set; } short[] ItemAutoReload { get; set; } ushort[] Abilities { get; set; } BattleStyleType BattleStyle { get; set; } AbilityStyleType AbilityStyle1 { get; set; } AbilityStyleType AbilityStyle2 { get; set; } AbilityStyleType AbilityStyle3 { get; set; } AbilityStyleType AbilityStyle4 { get; set; } } } ================================================ FILE: KHSave.Lib2/Models/IDriveForm.cs ================================================ using KHSave.Lib2.Types; namespace KHSave.Lib2.Models { public interface IDriveForm { EquipmentType Weapon { get; set; } byte Level { get; set; } byte AbilityLevel { get; set; } int Experience { get; set; } ushort[] Abilities { get; set; } } } ================================================ FILE: KHSave.Lib2/Models/IPlaceScript.cs ================================================ namespace KHSave.Lib2.Models { public interface IPlaceScript { byte Map { get; set; } byte Battle { get; set; } byte Event { get; set; } } } ================================================ FILE: KHSave.Lib2/Models/PartyMembers.cs ================================================ using KHSave.Lib2.Types; using Xe.BinaryMapper; namespace KHSave.Lib2.Models { public class PartyMembers { [Data] public PlayableCharacterType PlayableCharacter { get; set; } [Data] public PlayableCharacterType CompanionCharacter1 { get; set; } [Data] public PlayableCharacterType CompanionCharacter2 { get; set; } [Data] public PlayableCharacterType CompanionCharacter3 { get; set; } } } ================================================ FILE: KHSave.Lib2/Models/PlaceScriptFinalMix.cs ================================================ using Xe.BinaryMapper; namespace KHSave.Lib2.Models { public class PlaceScriptFinalMix : IPlaceScript { [Data] public byte Map { get; set; } [Data] public byte MapSecondary { get; set; } [Data] public byte Battle { get; set; } [Data] public byte BattleSecondary { get; set; } [Data] public byte Event { get; set; } [Data] public byte EventSecondary { get; set; } } } ================================================ FILE: KHSave.Lib2/Models/PlaceScriptVanilla.cs ================================================ using Xe.BinaryMapper; namespace KHSave.Lib2.Models { public class PlaceScriptVanilla : IPlaceScript { [Data] public byte Map { get; set; } [Data] public byte Battle { get; set; } [Data] public byte Event { get; set; } } } ================================================ FILE: KHSave.Lib2/Models/Progress.cs ================================================ using Xe.BinaryMapper; namespace KHSave.Lib2.Models { public class Progress { [Data(Count = 0x20)] public byte[] Flags { get; set; } public bool GetFlag(int index) => (Flags[index / 8] & (1 << (index % 8))) != 0; public void SetFlag(int index, bool value) { var mask = (byte)(1 << (index % 8)); if (value) Flags[index / 8] |= mask; else Flags[index / 8] &= (byte)~mask; } } } ================================================ FILE: KHSave.Lib2/SaveKh2.European.cs ================================================ using KHSave.Lib2.Models; using KHSave.Lib2.Types; using System; using System.IO; using Xe.BinaryMapper; namespace KHSave.Lib2 { public partial class SaveKh2 { public class SaveEuropean : ISaveKh2 { public bool IsFinalMix => false; [Data(0, 0xb4e0)] public byte[] Data { get; set; } [Data(0)] public uint MagicCode { get; set; } [Data] public int Version { get; set; } [Data] public uint Checksum { get; set; } [Data] public WorldType WorldId { get; set; } [Data] public byte RoomId { get; set; } [Data] public byte SpawnId { get; set; } [Data] public byte Unused0f { get; set; } [Data(0x13, Count = 64 * 19, Stride = 3)] public PlaceScriptVanilla[] PlaceScripts { get; set; } [Data(0xe50, Count = 20, Stride = 0x20)] public Progress[] StoryProgress { get; set; } [Data(0x14b8, Count = 8 * Constants.WorldCount)] public byte[] RoomVisitedFlag { get; set; } [Data(0x1600)] public int MunnyAmount { get; set; } [Data(0x1604, Count = Constants.WorldCount + 2)] public int Timer { get; set; } [Data(0x1658)] public Difficulty Difficulty { get; set; } [Data(Count = 0)] public byte[] PuzzlePieceFlags { get; set; } [Data(0x1660, Count = 13, Stride = 0xf4)] public CharacterVanilla[] Characters { get; set; } [Data(0x22c4, Count = 9, Stride = 0x28)] public DriveFormVanilla[] DriveForms { get; set; } [Data(0x3534, Count = Constants.WorldCount)] public PartyMembers[] WorldPartyMembers { get; set; } [Data(0x2488, Count = 280)] public byte[] InventoryCount { get; set; } [Data(0x25E8)] public int Experience { get; set; } [Data(0x2600)] public CommandType ShortcutCircle { get; set; } [Data] public CommandType ShortcutTriangle { get; set; } [Data] public CommandType ShortcutSquare { get; set; } [Data] public CommandType ShortcutCross { get; set; } [Data] public int BonusLevel { get; set; } public bool Vibration { get; set; } public bool Unknown41a4_1 { get; set; } public bool Unknown41a4_2 { get; set; } public bool NavigationalMap { get; set; } public bool FieldCameraManual { get; set; } public bool RightAnalogStickCommand { get; set; } public bool CommandMenuClassic { get; set; } public bool CameraLeftRightReversed { get; set; } public bool CameraUpDownReversed { get; set; } public bool Unknown41a5_1 { get; set; } public bool Unknown41a5_2 { get; set; } public short ProgressTutorialMenu { get; set; } public bool NewStatusValor { get; set; } public bool NewStatusWisdom { get; set; } public bool NewStatusLimit { get; set; } public bool NewStatusMaster { get; set; } public bool NewStatusFinal { get; set; } public bool NewStatusSummonStitch { get; set; } public bool NewStatusSummonGenie { get; set; } public bool NewStatusSummonPeterPan { get; set; } public bool NewStatusSummonChickenLittle { get; set; } IPlaceScript[] ISaveKh2.PlaceScripts => Array.ConvertAll(PlaceScripts, x => (IPlaceScript)x); ICharacter[] ISaveKh2.Characters => Array.ConvertAll(Characters, x => (ICharacter)x); IDriveForm[] ISaveKh2.DriveForms => Array.ConvertAll(DriveForms, x => (IDriveForm)x); public void Write(Stream stream) => BinaryMapping.WriteObject(stream.FromBegin(), this); } } } ================================================ FILE: KHSave.Lib2/SaveKh2.FinalMix.cs ================================================ using KHSave.Lib2.Models; using KHSave.Lib2.Types; using System; using System.IO; using Xe.BinaryMapper; namespace KHSave.Lib2 { public partial class SaveKh2 { public class SaveFinalMix : ISaveKh2 { public bool IsFinalMix => true; [Data(0, 0x10FC0)] public byte[] Data { get; set; } [Data(0)] public uint MagicCode { get; set; } [Data] public int Version { get; set; } [Data] public uint Checksum { get; set; } [Data] public WorldType WorldId { get; set; } [Data] public byte RoomId { get; set; } [Data] public byte SpawnId { get; set; } [Data] public byte Unused0f { get; set; } [Data(0x10, Count = 64 * 19, Stride = 6)] public PlaceScriptFinalMix[] PlaceScripts { get; set; } [Data(0x1c90, Count = 20, Stride = 0x20)] public Progress[] StoryProgress { get; set; } // 3e8 of what? [Data(0x22f8, Count = 8 * Constants.WorldCount)] public byte[] RoomVisitedFlag { get; set; } // There might be a chance that it starts from 0x2300 [Data(0x2440)] public int MunnyAmount { get; set; } [Data(0x2444, Count = Constants.WorldCount + 2)] public int Timer { get; set; } [Data(0x2498)] public Difficulty Difficulty { get; set; } [Data(0x24a0, Count = 0x30)] public byte[] PuzzlePieceFlags { get; set; } [Data(0x24f0, Count = 13, Stride = 0x114)] public CharacterFinalMix[] Characters { get; set; } [Data(0x32f4, Count = 10, Stride = 0x38)] public DriveFormFinalMix[] DriveForms { get; set; } [Data(0x3526)] public byte SummonLevel { get; set; } [Data(0x3529)] public byte DriveBarCurrent { get; set; } [Data(0x352a)] public byte DriveBarMax { get; set; } [Data(0x3534, Count = Constants.WorldCount)] public PartyMembers[] WorldPartyMembers { get; set; } [Data(0x3580, Count = 320)] public byte[] InventoryCount { get; set; } [Data(0x36E0)] public int Experience { get; set; } [Data(0x36f8)] public CommandType ShortcutCircle { get; set; } [Data(0x36fa)] public CommandType ShortcutTriangle { get; set; } [Data(0x36fc)] public CommandType ShortcutSquare { get; set; } [Data(0x36fe)] public CommandType ShortcutCross { get; set; } [Data(0x3700)] public int BonusLevel { get; set; } [Data(0x41a4, BitIndex = 0)] public bool Vibration { get; set; } [Data(0x41a4, BitIndex = 1)] public bool Unknown41a4_1 { get; set; } [Data(0x41a4, BitIndex = 2)] public bool Unknown41a4_2 { get; set; } [Data(0x41a4, BitIndex = 3)] public bool NavigationalMap { get; set; } [Data(0x41a4, BitIndex = 4)] public bool FieldCameraManual { get; set; } [Data(0x41a4, BitIndex = 5)] public bool RightAnalogStickCommand { get; set; } [Data(0x41a4, BitIndex = 6)] public bool CommandMenuClassic { get; set; } [Data(0x41a4, BitIndex = 7)] public bool CameraLeftRightReversed { get; set; } [Data(0x41a5, BitIndex = 0)] public bool CameraUpDownReversed { get; set; } [Data(0x41a5, BitIndex = 1)] public bool Unknown41a5_1 { get; set; } [Data(0x41a5, BitIndex = 2)] public bool Unknown41a5_2 { get; set; } // WRONG. // [Data(0x41aa, BitIndex = 0)] public bool NewMagicUnk1_0 { get; set; } // [Data(0x41aa, BitIndex = 1)] public bool NewMagicUnk1_1 { get; set; } // [Data(0x41aa, BitIndex = 2)] public bool NewMagicUnk1_2 { get; set; } // [Data(0x41aa, BitIndex = 3)] public bool NewMagicUnk1_4 { get; set; } // [Data(0x41aa, BitIndex = 4)] public bool NewMagicUnk1_8 { get; set; } // [Data(0x41aa, BitIndex = 5)] public bool NewMagicFiraga { get; set; } // [Data(0x41aa, BitIndex = 6)] public bool NewMagicBlizzaga { get; set; } // [Data(0x41aa, BitIndex = 7)] public bool NewMagicThundaga { get; set; } // [Data(0x41ab, BitIndex = 0)] public bool NewMagicCuraga { get; set; } // [Data(0x41ab, BitIndex = 1)] public bool NewMagicUnkUnk { get; set; } // [Data(0x41b2, BitIndex = 0)] public bool NewMagicUnk2_0 { get; set; } // [Data(0x41b2, BitIndex = 1)] public bool NewMagicUnk2_1 { get; set; } // [Data(0x41b2, BitIndex = 2)] public bool NewMagicUnk2_2 { get; set; } // [Data(0x41b2, BitIndex = 3)] public bool NewMagicUnk2_4 { get; set; } // [Data(0x41b2, BitIndex = 4)] public bool NewMagicUnk2_8 { get; set; } // [Data(0x41b2, BitIndex = 5)] public bool NewMagicUnk2_10 { get; set; } // [Data(0x41b2, BitIndex = 6)] public bool NewMagicUnk2_20 { get; set; } // [Data(0x41b2, BitIndex = 7)] public bool NewMagicMagnega { get; set; } // [Data(0x41b3)] public bool NewMagicReflega { get; set; } [Data(0x4270)] public short ProgressTutorialMenu { get; set; } [Data(0x4274)] public bool NewStatusValor { get; set; } [Data(0x4274)] public bool NewStatusWisdom { get; set; } [Data(0x4274)] public bool NewStatusLimit { get; set; } [Data(0x4274)] public bool NewStatusMaster { get; set; } [Data(0x4274)] public bool NewStatusFinal { get; set; } [Data(0x4274)] public bool NewStatusSummonStitch { get; set; } [Data(0x4274)] public bool NewStatusSummonGenie { get; set; } [Data(0x4274)] public bool NewStatusSummonPeterPan { get; set; } [Data(0x4275)] public bool NewStatusSummonChickenLittle { get; set; } IPlaceScript[] ISaveKh2.PlaceScripts => Array.ConvertAll(PlaceScripts, x => (IPlaceScript)x); ICharacter[] ISaveKh2.Characters => Array.ConvertAll(Characters, x => (ICharacter)x); IDriveForm[] ISaveKh2.DriveForms => Array.ConvertAll(DriveForms, x => (IDriveForm)x); public void Write(Stream stream) => BinaryMapping.WriteObject(stream.FromBegin(), this); } } } ================================================ FILE: KHSave.Lib2/SaveKh2.TransferMappings.cs ================================================ using KHSave.Lib2.Models; using KHSave.Lib2.Types; using KHSave.Services; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; namespace KHSave.Lib2 { public partial class SaveKh2 { public static Dictionary> TransferMappings = new Dictionary>() { [typeof(Difficulty)] = new Action((dst, src, prop) => { var value = (Difficulty)prop.GetValue(src); if (((ISaveKh2)dst).IsFinalMix == false && value == Difficulty.Critical) value = Difficulty.Proud; // Downgrade difficulty for non-FinalMix prop.SetValue(dst, value); }), [typeof(IDriveForm[])] = new Action((dst, src, prop) => { var isDstFinalMix = ((ISaveKh2)dst).IsFinalMix; var isSrcFinalMix = ((ISaveKh2)src).IsFinalMix; if (isDstFinalMix == isSrcFinalMix) CopySame(((ISaveKh2)dst).DriveForms, ((ISaveKh2)src).DriveForms); else if (isDstFinalMix) CopyFromVanilla(((ISaveKh2)dst).DriveForms, ((ISaveKh2)src).DriveForms); else if (isSrcFinalMix) CopyFromFinalMix(((ISaveKh2)dst).DriveForms, ((ISaveKh2)src).DriveForms); }), } .Concat(TransferServiceLL.DefaultMappings) .GroupBy(x => x.Key) .ToDictionary(x => x.Key, x => x.First().Value); private static void CopySame(IDriveForm[] dst, IDriveForm[] src) { var length = Math.Min(dst.Length, src.Length); for (var i = 0; i < length; i++) TransferServiceLL.CopySave(dst[i], src[i], TransferMappings); } private static void CopyFromVanilla(IDriveForm[] dst, IDriveForm[] src) { var limitDriveForm = new DriveFormFinalMix(); // creates a default Limit limitDriveForm.Level = 1; limitDriveForm.Abilities = new ushort[0x18]; limitDriveForm.Abilities[0] = 0x8234; limitDriveForm.Abilities[1] = 0x8239; limitDriveForm.Abilities[2] = 0x823A; limitDriveForm.Abilities[3] = 0x823B; limitDriveForm.Abilities[4] = 0x823C; limitDriveForm.Abilities[5] = 0x823D; limitDriveForm.Abilities[6] = 0x823E; limitDriveForm.Abilities[7] = 0x823F; limitDriveForm.Abilities[8] = 0x824B; limitDriveForm.Abilities[9] = 0x824C; limitDriveForm.Abilities[10] = 0x824D; limitDriveForm.Abilities[11] = 0x8052; limitDriveForm.Abilities[12] = 0x8106; limitDriveForm.Abilities[13] = 0x8108; limitDriveForm.Abilities[14] = 0x810D; limitDriveForm.Abilities[15] = 0x819C; limitDriveForm.Abilities[16] = 0x8195; limitDriveForm.Abilities[17] = 0x8197; limitDriveForm.Abilities[18] = 0x819D; dst[2] = limitDriveForm; TransferServiceLL.CopySave(dst[0], src[0], TransferMappings); TransferServiceLL.CopySave(dst[1], src[1], TransferMappings); TransferServiceLL.CopySave(dst[3], src[2], TransferMappings); TransferServiceLL.CopySave(dst[4], src[3], TransferMappings); TransferServiceLL.CopySave(dst[5], src[4], TransferMappings); TransferServiceLL.CopySave(dst[6], src[5], TransferMappings); TransferServiceLL.CopySave(dst[7], src[6], TransferMappings); TransferServiceLL.CopySave(dst[8], src[7], TransferMappings); TransferServiceLL.CopySave(dst[9], src[8], TransferMappings); } private static void CopyFromFinalMix(IDriveForm[] dst, IDriveForm[] src) { TransferServiceLL.CopySave(dst[0], src[0], TransferMappings); TransferServiceLL.CopySave(dst[1], src[1], TransferMappings); TransferServiceLL.CopySave(dst[2], src[3], TransferMappings); TransferServiceLL.CopySave(dst[3], src[4], TransferMappings); TransferServiceLL.CopySave(dst[4], src[5], TransferMappings); TransferServiceLL.CopySave(dst[5], src[6], TransferMappings); TransferServiceLL.CopySave(dst[6], src[7], TransferMappings); TransferServiceLL.CopySave(dst[7], src[8], TransferMappings); TransferServiceLL.CopySave(dst[8], src[9], TransferMappings); } } } ================================================ FILE: KHSave.Lib2/SaveKh2.cs ================================================ using System; using System.Collections.Generic; using System.IO; using System.Linq; using Xe.BinaryMapper; namespace KHSave.Lib2 { public partial class SaveKh2 { internal static IBinaryMapping Mapper; static SaveKh2() { Mapper = MappingConfiguration .DefaultConfiguration() .ForType( x => new TimeSpan(0, 0, 0, x.Reader.ReadInt32(), 0), x => x.Writer.Write((int)((TimeSpan)x.Item).TotalSeconds) ) .Build(); } public static bool IsValid(Stream stream) { var prevPosition = stream.Position; var magicCode = new BinaryReader(stream).ReadUInt32(); stream.Position = prevPosition; switch (magicCode) { case Constants.MagicCodeJp: case Constants.MagicCodeUs: case Constants.MagicCodeEu: return true; default: return false; } } public static GameVersion? GetGameVersion(Stream stream) { if (!IsValid(stream)) return null; var prevPosition = stream.Position; stream.Position = 4; var version = new BinaryReader(stream).ReadUInt32(); stream.Position = prevPosition; switch ((GameVersion)version) { case GameVersion.Japanese: case GameVersion.American: case GameVersion.FinalMix: return (GameVersion)version; default: return null; } } private static TSaveKh2 Read(Stream stream) where TSaveKh2 : class, ISaveKh2 => BinaryMapping.ReadObject(stream.FromBegin()); public static ISaveKh2 Read(Stream stream) { switch (GetGameVersion(stream)) { case GameVersion.Japanese: throw new NotImplementedException("Japanese save file is not yet supported."); case GameVersion.American: return Read(stream); case GameVersion.FinalMix: return Read(stream); case null: throw new NotImplementedException("An invalid version has been specified."); default: throw new NotImplementedException("The version has been recognized but it is not supported."); } } public static void Write(Stream stream, TSaveKh2 save) where TSaveKh2 : class, ISaveKh2 { uint checksum; using (var tempStream = new MemoryStream()) { save.Write(tempStream); var rawData = tempStream.SetPosition(0xc).ReadBytes(); // Calculate checksum of Magiccode and Version. checksum = CalculateChecksum(tempStream.FromBegin().ReadBytes(8), 8, uint.MaxValue); // Calculate checksum of the rest of the gamedata. checksum = CalculateChecksum(rawData, rawData.Length, checksum ^ uint.MaxValue); } save.Checksum = checksum; save.Write(stream.FromBegin()); } private const int CrcPolynomial = 0x04c11db7; private static uint[] crc_table = GetCrcTable(CrcPolynomial) .Take(0x100) .ToArray(); public static uint CalculateChecksum(byte[] data, int offset, uint checksum) { for (var i = 0; i < offset; i++) checksum = crc_table[(checksum >> 24) ^ data[i]] ^ (checksum << 8); return checksum ^ uint.MaxValue; } private static IEnumerable GetCrcTable(int polynomial) { for (var x = 0; ; x++) { var r = x << 24; for (var j = 0; j < 0xff; j++) r = r << 1 ^ (r < 0 ? polynomial : 0); yield return (uint)r; } } } } ================================================ FILE: KHSave.Lib2/Types/AbilityStyleType.cs ================================================ using KHSave.Attributes; namespace KHSave.Lib2.Types { public enum AbilityStyleType : byte { [Info("Free")] Free, [Info("Well-Balanced")] WellBalanced, [Info("Rare")] Rare, } } ================================================ FILE: KHSave.Lib2/Types/BattleStyleType.cs ================================================ using KHSave.Attributes; namespace KHSave.Lib2.Types { public enum BattleStyleType : byte { [CombatStyle("Technic Attack")] TechnicAttack, [CombatStyle("Target Attack")] TargetAttack, [CombatStyle("Huddle Attack")] HuddleAttack, [CombatStyle("Party Attack")] PartyAttack, [CombatStyle("Sora Attack")] SoraAttack, [CombatStyle("Relentless Attack")] RentlessAttack, } } ================================================ FILE: KHSave.Lib2/Types/CharacterType.cs ================================================ using KHSave.Attributes; namespace KHSave.Lib2.Types { public enum CharacterType { [Info] Sora, [Info] Donald, [Info] Goofy, [Info] Mickey, [Info] Auron, [Info] Mulan, [Info] Aladdin, [Info("Jack Sparrow")] JackSparrow, [Info] Beast, [Info] Jack, [Info] Simba, [Info] Tron, [Info] Riku, } } ================================================ FILE: KHSave.Lib2/Types/CommandType.cs ================================================ using KHSave.Attributes; namespace KHSave.Lib2.Types { public enum CommandType : short { Empty, Attack, Magic, Items, Drive, Revert, ValorForm, WisdomForm, Talk = 10, MasterForm, FinalForm, Antiform, Examine, [Consumable("Hi-Potion")] HiPotion = 0x14, [Consumable("Ether")] Ether, [Consumable("Elixir")] Elixir, [Consumable("Potion")] Potion, Reversal, FullSwing, Tackle, Snag, SparkleRay, [Magic("Firaga")] Firaga = 0x78, [Magic("Blizzaga")] Blizzaga = 0x7a, [Magic("Thundaga")] Thundaga = 0x7c, [Magic("Curaga")] Curaga = 0x7e, [Magic("Magnega")] Magnega = 0xb0, [Magic("Reflega")] Reflega = 0xb3, [Consumable("Mega-Potion")] MegaPotion = 0xf2, [Consumable("Mega-Ether")] MegaEther = 0xf3, [Consumable("Megalixir")] Megalixir = 0xf4, LimitForm = 673 } } ================================================ FILE: KHSave.Lib2/Types/DifficultyType.cs ================================================ using KHSave.Attributes; namespace KHSave.Lib2.Types { public enum Difficulty : byte { [Info] Beginner, [Info] Standard, [Info] Proud, [Info] Critical } } ================================================ FILE: KHSave.Lib2/Types/DriveFormType.cs ================================================ namespace KHSave.Lib2.Types { public enum DriveFormType { Valor, Wisdom, Limit, Master, Final, Antiform, Lion, Unused7, Unused8, Roxas } } ================================================ FILE: KHSave.Lib2/Types/EquipmentType.cs ================================================ using KHSave.Attributes; namespace KHSave.Lib2.Types { public enum EquipmentType : short { [Info] Empty, [Consumable("Potion")] Potion, [Consumable("Hi-Potion")] HiPotion, [Consumable("Ether")] Ether, [Consumable("Elixir")] Elixir, [Consumable("Mega-Potion")] MegaPotion, [Consumable("Mega-Ether")] MegaEther, [Consumable("Megalixir")] Megalixir, [Accessory("Ability Ring")] AbilityRing, [Accessory("Engineer´s Ring")] EngineersRing, [Accessory("Technician´s Ring")] TechniciansRing, [Accessory("Expert´s Ring")] ExpertsRing, [Accessory("Sardonyx Ring")] SardonyxRing, [Accessory("Tourmaline Ring")] TourmalineRing, [Accessory("Aquamarine Ring")] AquamarineRing, [Accessory("Garnet Ring")] GarnetRing, [Accessory("Diamond Ring")] DiamondRing, [Accessory("Silver Ring")] SilverRing, [Accessory("Gold Ring")] GoldRing, [Accessory("Platinum Ring")] PlatinumRing, [Accessory("Mythril Ring")] MythrilRing, [Magic("Fire Element")] FireElement, [Magic("Blizzard Element")] BlizzardElement, [Magic("Thunder Element")] ThunderElement, [Magic("Cure Element")] CureElement, [Summon("Ukulele Charm")] UkuleleCharm, [Form("Valor Form")] ValorForm, [Form("Wisdom Form")] WisdomForm, [Accessory("Orichalcum Ring")] OrichalcumRing, [Form("Final Form")] FinalForm, [Form("Antiform")] Antiform, [Form("Master Form")] MasterForm, [Recipe("Torn Pages")] TornPages, [Unused] Unused021, [Accessory("Master´s Ring")] MastersRing, [Accessory("Moon Amulet")] MoonAmulet, [Accessory("Star Charm")] StarCharm, [Unused] Unused025, [Accessory("Skill Ring")] SkillRing, [Accessory("Skillful Ring")] SkillfulRing, [Accessory("Soldier Earring")] SoldierEarring, [Keyblade("Kingdom Key")] KingdomKey, [Keyblade("Oathkeeper")] Oathkeeper, [Keyblade("Oblivion")] Oblivion, [Keyblade("Detection Saber")] DetectionSaber, [Keyblade("Frontier of Ultima")] FrontierOfUltima, [Accessory("Fencer Earring")] FencerEarring, [Accessory("Mage Earring")] MageEarring, [Accessory("Slayer Earring")] SlayerEarring, [Shield("Knight´s Shield")] KnightsShield, [Shield("Detection Shield")] DetectionShield, [Shield("Test the King")] TestTheKing, [Accessory("Cosmic Ring")] CosmicRing, [Accessory("Medal")] Medal, [Weapon("Battlefields of War")] BattlefieldsOfWar, [Weapon("Sword of the Ancestor")] SwordOfTheAncestor, [Accessory("Cosmic Arts")] CosmicArts, [Accessory("Shadow Archive")] ShadowArchive, [Accessory("Shadow Archive+")] ShadowArchivePlus, [Weapon("Beast´s Claw")] BeastsClaw, [Weapon("Bone Fist")] BoneFist, [Weapon("Proud Fang")] ProudFang, [Weapon("Skill and Crossbones")] SkillAndCrossbones, [Accessory("Lucky Ring")] LuckyRing, [Accessory("Full Bloom")] FullBloom, [Accessory("Draw Ring")] DrawRing, [Accessory("Full Bloom+")] FullBloomPlus, [Armor("Elven Bandanna")] ElvenBandanna, [Armor("Divine Bandanna")] DivineBandanna, [Armor("Power Band")] PowerBand, [Armor("Buster Band")] BusterBand, [Keyblade("Antiform Dummy")] AntiformDummy, [Weapon("Scimitar")] Scimitar, [Weapon("Way to the Dawn")] WayToTheDawn, [Weapon("Identity Disk")] IdentityDisk, [Staff("Mage´s Staff")] MagesStaff, [Unused] Unused04C, [Unused] Unused04D, [Armor("Protect Belt")] ProtectBelt, [Armor("Gaia Belt")] GaiaBelt, [Weapon("Unused Weapon")] Unused050, [Keyblade("Kingdom Key W")] KingdomKeyW, [AbilityAction("Guard")] Guard, [Unused] Unused053, [Unused] Unused054, [Unused] Unused055, [Unused] Unused056, [Magic("Magnet Element")] MagnetElement, [Magic("Reflect Element")] ReflectElement, [Map("Navigational Map")] NavigationalMap, [Map("Castle Map")] CastleMap, [Map("Basement Map")] BasementMap, [Map("Castle Walls Map")] CastleWallsMap, [Unused] Unused05D, [AbilityMobility("High Jump LV1")] HighJumpLV1, [AbilityMobility("High Jump LV2")] HighJumpLV2, [AbilityMobility("High Jump LV3")] HighJumpLV3, [AbilityMobility("High Jump MAX")] HighJumpMAX, [AbilityMobility("Quick Run LV1")] QuickRunLV1, [AbilityMobility("Quick Run LV2")] QuickRunLV2, [AbilityMobility("Quick Run LV3")] QuickRunLV3, [AbilityMobility("Quick Run MAX")] QuickRunMAX, [AbilityMobility("Aerial Dodge LV1")] AerialDodgeLV1, [AbilityMobility("Aerial Dodge LV2")] AerialDodgeLV2, [AbilityMobility("Aerial Dodge LV3")] AerialDodgeLV3, [AbilityMobility("Aerial Dodge MAX")] AerialDodgeMAX, [AbilityMobility("Glide LV1")] GlideLV1, [AbilityMobility("Glide LV2")] GlideLV2, [AbilityMobility("Glide LV3")] GlideLV3, [AbilityMobility("Glide MAX")] GlideMAX, [Unused] Unused06E, [Armor("Cosmic Belt")] CosmicBelt, [Map("Encampment Area Map")] EncampmentAreaMap, [Map("Village Area Map")] VillageAreaMap, [Map("Cornerstone Hill Map")] CornerstoneHillMap, [Map("Window of Time Map 2")] WindowOfTimeMap2, [Map("Lilliput Map")] LilliputMap, [Map("Building Site Map")] BuildingSiteMap, [Map("Mickey´s House Map")] MickeysHouseMap, [Map("Disney Castle Map")] DisneyCastleMap, [Map("Agrabah Map")] AgrabahMap, [Map("Cave of Wonders Map")] CaveOfWondersMap, [Map("Ruins Map")] RuinsMap, [Map("Undersea Kingdom Map")] UnderseaKingdomMap, [Map("Starry Hill")] StarryHill, [Map("100 Acre Wood Map")] HundredAcreWoodMap, [Map("Rabbit´s Howse Map")] RabbitsHowseMap, [Map("Piglet´s Howse Map")] PigletsHowseMap, [Map("Kanga´s Howse Map")] KangasHowseMap, [Map("Spooky Cave Map")] SpookyCaveMap, [Map("Palace Map")] PalaceMap, [Boost("Tent")] Tent, [Armor("Shock Charm")] ShockCharm, [Armor("Shock Charm+")] ShockCharmPlus, [Map("Coliseum Map")] ColiseumMap, [Map("Underworld Map")] UnderworldMap, [Map("Caverns Map")] CavernsMap, [AbilityAction("Upper Slash")] UpperSlash, [AbilitySupport("Scan")] Scan, [Shield("Adamant Shield")] AdamantShield, [Shield("Chain Gear")] ChainGear, [Shield("Ogre Shield")] OgreShield, [Shield("Falling Star")] FallingStar, [Shield("Dreamcloud")] Dreamcloud, [Shield("Knight Defender")] KnightDefender, [Shield("Genji Shield")] GenjiShield, [Shield("Akashic Record")] AkashicRecord, [Shield("Nobody Guard")] NobodyGuard, [Staff("Hammer Staff")] HammerStaff, [Staff("Victory Bell")] VictoryBell, [Staff("Meteor Staff")] MeteorStaff, [Staff("Comet Staff")] CometStaff, [Staff("Lord´s Broom")] LordsBroom, [Staff("Wisdom Wand")] WisdomWand, [Staff("Rising Dragon")] RisingDragon, [Staff("Nobody Lance")] NobodyLance, [Staff("Shaman´s Relic")] ShamansRelic, [Armor("Grand Ribbon")] GrandRibbon, [AbilitySupport("Aerial Recovery")] AerialRecovery, [Summon("Lamp Charm")] LampCharm, [Summon("Feather Charm")] FeatherCharm, [Staff("Staff of Detection")] StaffOfDetection, [AbilitySupport("Combo Plus")] ComboPlus, [AbilitySupport("Air Combo Plus")] AirComboPlus, [Unused] Unused0A4, [AbilityAction("Donald Fire")] DonaldFire, [AbilityAction("Donald Blizzard")] DonaldBlizzard, [AbilityAction("Donald Thunder")] DonaldThunder, [AbilityAction("Donald Cure")] DonaldCure, [Unused] Unused0A9, [Unused] Unused0AA, [Unused] Unused0AB, [Unused] Unused0AC, [Armor("Fire Bangle")] FireBangle, [Armor("Fira Bangle")] FiraBangle, [Unused] Unused0AF, [AbilityAction("Healing Water")] HealingWater, [AbilityAction("Furious Shout")] FuriousShout, [Unused] Unused0B2, [Unused] Unused0B3, [Unused] Unused0B4, [Unused] Unused0B5, [Unused] Unused0B6, [Unused] Unused0B7, [Unused] Unused0B8, [Unused] Unused0B9, [Unused] Unused0BA, [AbilityAction("Cure Potion")] CurePotion, [Unused] Unused0BC, [Unused] Unused0BD, [AbilityAction("Healing Herb")] HealingHerb, [Unused] Unused0BF, [Unused] Unused0C0, [Unused] Unused0C1, [Unused] Unused0C2, [AbilityAction("Slow 3")] Slow3, [Unused] Unused0C4, [Armor("Firaga Bangle")] FiragaBangle, [AbilityAction("Trinity Limit")] TrinityLimit, [AbilityAction("Fantasia")] Fantasia, [AbilityAction("Flare Force")] FlareForce, [AbilityAction("Tornado Fusion")] TornadoFusion, [AbilityAction("Teamwork")] Teamwork, [AbilityAction("Trick Fantasy")] TrickFantasy, [AbilityAction("Overdrive")] Overdrive, [AbilityAction("Howling Moon")] HowlingMoon, [AbilityAction("Applause, Applause")] ApplauseApplause, [AbilityAction("Dragonblaze")] Dragonblaze, [AbilityAction("Eternal Session")] EternalSession, [AbilityAction("King´s Pride")] KingsPride, [AbilityAction("Treasure Isle")] TreasureIsle, [AbilityAction("Complete Compilement")] CompleteCompilement, [Unused] Unused0D4, [Unused] Unused0D5, [Unused] Unused0D6, [AbilityAction("Pulsing Thunder")] PulsingThunder, [AbilityAction("Brave Shot")] BraveShot, [AbilityAction("Brave Beat")] BraveBeat, [AbilityAction("Sonic Strike")] SonicStrike, [AbilityAction("Sonic End")] SonicEnd, [AbilityAction("Wisdom Shot")] WisdomShot, [AbilityAction("Mobile Action")] MobileAction, [Unused] Unused0DE, [AbilityAction("Synch Blade")] SynchBlade, [AbilityAction("Magic Haste")] MagicHaste, [AbilityAction("Magic Spice")] MagicSpice, [Report("Secret Ansem Report 1")] SecretAnsemReport1, [Report("Secret Ansem Report 2")] SecretAnsemReport2, [Report("Secret Ansem Report 3")] SecretAnsemReport3, [Report("Secret Ansem Report 4")] SecretAnsemReport4, [Report("Secret Ansem Report 5")] SecretAnsemReport5, [Report("Secret Ansem Report 6")] SecretAnsemReport6, [Report("Secret Ansem Report 7")] SecretAnsemReport7, [Report("Secret Ansem Report 8")] SecretAnsemReport8, [Report("Secret Ansem Report 9")] SecretAnsemReport9, [Report("Secret Ansem Report 10")] SecretAnsemReport10, [Report("Secret Ansem Report 11")] SecretAnsemReport11, [Report("Secret Ansem Report 12")] SecretAnsemReport12, [Report("Secret Ansem Report 13")] SecretAnsemReport13, [Unused] Unused0EF, [Unused] Unused0F0, [Unused] Unused0F1, [Unused] Unused0F2, [Unused] Unused0F3, [Unused] Unused0F4, [Unused] Unused0F5, [AbilityAction("Over the Horizon")] OverTheHorizon, [AbilityAction("Omega Finale")] OmegaFinale, [AbilityAction("Reflect Dummy")] ReflectDummy, [AbilityAction("Upper Dummy")] UpperDummy, [Map("Halloween Town Map")] HalloweenTownMap, [Map("Naval Map")] NavalMap, [Map("Pride Rock Map")] PrideRockMap, [Map("Marketplace Map")] MarketplaceMap, [Map("Pit Cell Area Map")] PitCellAreaMap, [Map("Twilight Town Map")] TwilightTownMap, [Map("Dark City Map")] DarkCityMap, [AbilityAction("Master Strike")] MasterStrike, [AbilityAction("Disaster")] Disaster, [AbilitySupport("Endless Magic")] EndlessMagic, [Unused] Unused104, [AbilityAction("Master Magic")] MasterMagic, [AbilityAction("Slapshot")] Slapshot, [AbilityAction("Dodge Slash")] DodgeSlash, [AbilityAction("Slide Dash")] SlideDash, [AbilityAction("Guard Break")] GuardBreak, [AbilityAction("Explosion")] Explosion, [AbilityAction("Finishing Leap")] FinishingLeap, [AbilityAction("Counterguard")] Counterguard, [AbilityAction("Aerial Sweep")] AerialSweep, [AbilityAction("Aerial Spiral")] AerialSpiral, [AbilityAction("Horizontal Slash")] HorizontalSlash, [AbilityAction("Aerial Finish")] AerialFinish, [AbilityAction("Retaliating Slash")] RetaliatingSlash, [Boost("Drive Recovery")] DriveRecovery, [Boost("High Drive Recovery")] HighDriveRecovery, [Boost("Power Boost")] PowerBoost, [Boost("Magic Boost")] MagicBoost, [Boost("Defense Boost")] DefenseBoost, [Boost("AP Boost")] APBoost, [Synthesis("Dark Shard")] DarkShard, [Synthesis("Dark Stone")] DarkStone, [Synthesis("Dark Gem")] DarkGem, [Synthesis("Dark Crystal")] DarkCrystal, [Armor("Firagun Bangle")] FiragunBangle, [Unused] Unused11D, [Armor("Blizzard Armlet")] BlizzardArmlet, [Armor("Blizzara Armlet")] BlizzaraArmlet, [Armor("Blizzaga Armlet")] BlizzagaArmlet, [Armor("Blizzagun Armlet")] BlizzagunArmlet, [Unused] Unused122, [Armor("Thunder Trinket")] ThunderTrinket, [Armor("Thundara Trinket")] ThundaraTrinket, [Armor("Thundaga Trinket")] ThundagaTrinket, [Armor("Thundagun Trinket")] ThundagunTrinket, [Unused] Unused127, [Armor("Shadow Anklet")] ShadowAnklet, [Armor("Dark Anklet")] DarkAnklet, [Armor("Midnight Anklet")] MidnightAnklet, [Armor("Chaos Anklet")] ChaosAnklet, [Unused] Unused12C, [Armor("Abas Chain")] AbasChain, [Armor("Aegis Chain")] AegisChain, [Armor("Acrisius")] Acrisius, [Armor("Ribbon")] Ribbon, [Armor("Champion Belt")] ChampionBelt, [Armor("Petite Ribbon")] PetiteRibbon, [Armor("Acrisius+")] AcrisiusPlus, [Armor("Cosmic Chain")] CosmicChain, [Unused] Unused135, [Unused] Unused136, [Unused] Unused137, [Unused] Unused138, [Unused] Unused139, [Unused] Unused13A, [Unused] Unused13B, [Unused] Unused13C, [Synthesis("Blazing Shard")] BlazingShard, [Synthesis("Blazing Stone")] BlazingStone, [Synthesis("Blazing Gem")] BlazingGem, [Synthesis("Blazing Crystal")] BlazingCrystal, [Unused] Unused141, [Unused] Unused142, [Unused] Unused143, [Unused] Unused144, [Synthesis("Lightning Shard")] LightningShard, [Synthesis("Lightning Stone")] LightningStone, [Synthesis("Lightning Gem")] LightningGem, [Synthesis("Lightning Crystal")] LightningCrystal, [Synthesis("Power Shard")] PowerShard, [Synthesis("Power Stone")] PowerStone, [Synthesis("Power Gem")] PowerGem, [Synthesis("Power Crystal")] PowerCrystal, [Synthesis("Lucid Shard")] LucidShard, [Synthesis("Lucid Stone")] LucidStone, [Synthesis("Lucid Gem")] LucidGem, [Synthesis("Lucid Crystal")] LucidCrystal, [Synthesis("Dense Shard")] DenseShard, [Synthesis("Dense Stone")] DenseStone, [Synthesis("Dense Gem")] DenseGem, [Synthesis("Dense Crystal")] DenseCrystal, [Synthesis("Twilight Shard")] TwilightShard, [Synthesis("Twilight Stone")] TwilightStone, [Synthesis("Twilight Gem")] TwilightGem, [Synthesis("Twilight Crystal")] TwilightCrystal, [Synthesis("Mythril Shard")] MythrilShard, [Synthesis("Mythril Stone")] MythrilStone, [Synthesis("Mythril Gem")] MythrilGem, [Synthesis("Mythril Crystal")] MythrilCrystal, [Synthesis("Bright Shard")] BrightShard, [Synthesis("Bright Stone")] BrightStone, [Synthesis("Bright Gem")] BrightGem, [Synthesis("Bright Crystal")] BrightCrystal, [Synthesis("Energy Shard")] EnergyShard, [Synthesis("Energy Stone")] EnergyStone, [Synthesis("Energy Gem")] EnergyGem, [Synthesis("Energy Crystal")] EnergyCrystal, [Synthesis("Serenity Shard")] SerenityShard, [Synthesis("Serenity Stone")] SerenityStone, [Synthesis("Serenity Gem")] SerenityGem, [Synthesis("Serenity Crystal")] SerenityCrystal, [Synthesis("Orichalcum+")] OrichalcumPlus, [Recipe("Munny Pouch")] MunnyPouch, [Recipe("Crystal Orb")] CrystalOrb, [Recipe("Seifer´s Trophy")] SeifersTrophy, [Recipe("Tournament Poster")] TournamentPoster, [Recipe("Poster")] Poster, [Recipe("Letter")] Letter, [Recipe("Naminé´s Sketches")] NaminésSketches, [Recipe("Membership Card")] MembershipCard, [Recipe("Olympus Stone")] OlympusStone, [Recipe("Auron´s Statue")] AuronsStatue, [Recipe("Cursed Medallion")] CursedMedallion, [Recipe("Present")] Present, [Recipe("Decoy Presents")] DecoyPresents, [Recipe("Ice Cream")] IceCream, [Recipe("Picture")] Picture, [Synthesis("Orichalcum")] Orichalcum, [Synthesis("Frost Shard")] FrostShard, [Synthesis("Frost Stone")] FrostStone, [Synthesis("Frost Gem")] FrostGem, [Synthesis("Frost Crystal")] FrostCrystal, [Recipe("Mega-Recipe")] MegaRecipe, [Summon("Baseball Charm")] BaseballCharm, [Keyblade("Struggle Sword")] StruggleSword, [AbilityAction("Auto Valor")] AutoValor, [AbilityAction("Auto Wisdom")] AutoWisdom, [AbilityAction("Auto Master")] AutoMaster, [AbilityAction("Auto Final")] AutoFinal, [AbilityAction("Auto Summon")] AutoSummon, [AbilitySupport("Combo Boost")] ComboBoost, [AbilitySupport("Air Combo Boost")] AirComboBoost, [AbilitySupport("Reaction Boost")] ReactionBoost, [AbilitySupport("Finishing Plus")] FinishingPlus, [AbilitySupport("Negative Combo")] NegativeCombo, [AbilitySupport("Berserk Charge")] BerserkCharge, [AbilitySupport("Damage Drive")] DamageDrive, [AbilitySupport("Drive Boost")] DriveBoost, [AbilitySupport("Form Boost")] FormBoost, [AbilitySupport("Summon Boost")] SummonBoost, [AbilitySupport("Combination Boost")] CombinationBoost, [AbilitySupport("Experience Boost")] ExperienceBoost, [AbilitySupport("Leaf Bracer")] LeafBracer, [AbilitySupport("Magic Lock-On")] MagicLockOn, [AbilitySupport("No Experience")] NoExperience, [AbilitySupport("Draw")] Draw, [AbilitySupport("Jackpot")] Jackpot, [AbilitySupport("Lucky Lucky")] LuckyLucky, [AbilitySupport("Fire Boost")] FireBoost, [AbilitySupport("Blizzard Boost")] BlizzardBoost, [AbilitySupport("Thunder Boost")] ThunderBoost, [AbilitySupport("Item Boost")] ItemBoost, [AbilitySupport("MP Rage")] MPRage, [AbilitySupport("MP Haste")] MPHaste, [AbilitySupport("Defender")] Defender, [AbilitySupport("Second Chance")] SecondChance, [AbilitySupport("Once More")] OnceMore, [AbilitySupport("Auto Limit")] AutoLimit, [AbilitySupport("Auto Change")] AutoChange, [AbilitySupport("Hyper Healing")] HyperHealing, [AbilitySupport("Auto Healing")] AutoHealing, [AbilitySupport("MP Hastera")] MPHastera, [AbilitySupport("MP Hastega")] MPHastega, [AbilityAction("Goofy Tornado")] GoofyTornado, [Unused] Unused1A8, [AbilityAction("Goofy Turbo")] GoofyTurbo, [AbilityAction("Slash Frenzy")] SlashFrenzy, [AbilityAction("Quickplay")] Quickplay, [AbilityAction("Divider")] Divider, [AbilityAction("Goofy Bash")] GoofyBash, [AbilityAction("Ferocious Rush")] FerociousRush, [AbilityAction("Blazing Fury")] BlazingFury, [AbilityAction("Icy Terror")] IcyTerror, [AbilityAction("Bolts of Sorrow")] BoltsOfSorrow, [AbilityAction("Mushu Fire")] MushuFire, [AbilityAction("Flametongue")] Flametongue, [AbilityAction("Dark Shield")] DarkShield, [Unused] Unused1B5, [AbilityAction("Dark Aura")] DarkAura, [AbilityAction("Fierce Claw")] FierceClaw, [AbilityAction("Groundshaker")] Groundshaker, [Unused] Unused1B9, [Unused] Unused1BA, [Unused] Unused1BB, [AbilityAction("Scouting Disk")] ScoutingDisk, [AbilityAction("Slow 2")] Slow2, [AbilityAction("No Mercy")] NoMercy, [AbilityAction("Rain Storm")] RainStorm, [AbilityAction("Bone Smash")] BoneSmash, [Recipe("Star Recipe")] StarRecipe, [Recipe("Recovery Recipe")] RecoveryRecipe, [Recipe("Skill Recipe")] SkillRecipe, [Recipe("Guard Recipe")] GuardRecipe, [Recipe("Dummy 06")] Dummy06, [Recipe("Dummy 07")] Dummy07, [Recipe("Dummy 08")] Dummy08, [Recipe("Dummy 09")] Dummy09, [Recipe("Dummy 10")] Dummy10, [Recipe("Dummy 11")] Dummy11, [Recipe("Dummy 12")] Dummy12, [Recipe("Dummy 13")] Dummy13, [Recipe("Dummy 14")] Dummy14, [Recipe("Dummy 15")] Dummy15, [Recipe("Dummy 16")] Dummy16, [Recipe("Road to Discovery")] RoadToDiscovery, [Recipe("Strength Beyond Strength")] StrengthBeyondStrength, [Recipe("Book of Shadows")] BookOfShadows, [Recipe("Cloaked Thunder")] CloakedThunder, [Recipe("Eternal Blossom")] EternalBlossom, [Recipe("Rare Document")] RareDocument, [Recipe("Dummy 23")] Dummy23, [Recipe("Dummy 24")] Dummy24, [Recipe("Dummy 25")] Dummy25, [Recipe("Dummy 26")] Dummy26, [Recipe("Dummy 27")] Dummy27, [Recipe("Style Recipe")] StyleRecipe, [Recipe("Moon Recipe")] MoonRecipe, [Recipe("Queen Recipe")] QueenRecipe, [Recipe("King Recipe")] KingRecipe, [Recipe("Ultimate Recipe")] UltimateRecipe, [Keyblade("Star Seeker")] StarSeeker, [Keyblade("Hidden Dragon")] HiddenDragon, [Staff("Save the Queen")] SaveTheQueen, [Shield("Save the King")] SaveTheKing, [Keyblade("Hero´s Crest")] HerosCrest, [Keyblade("Monochrome")] Monochrome, [Keyblade("Follow the Wind")] FollowTheWind, [Keyblade("Circle of Life")] CircleOfLife, [Keyblade("Photon Debugger")] PhotonDebugger, [Keyblade("Gull Wing")] GullWing, [Keyblade("Rumbling Rose")] RumblingRose, [Keyblade("Guardian Soul")] GuardianSoul, [Keyblade("Wishing Lamp")] WishingLamp, [Keyblade("Decisive Pumpkin")] DecisivePumpkin, [Keyblade("Sleeping Lion")] SleepingLion, [Keyblade("Sweet Memories")] SweetMemories, [Keyblade("Mysterious Abyss")] MysteriousAbyss, [Keyblade("Fatal Crest")] FatalCrest, [Keyblade("Bond of Flame")] BondOfFlame, [Keyblade("Fenrir")] Fenrir, [Keyblade("Ultima Weapon")] UltimaWeapon, [Keyblade("Struggle Wand")] StruggleWand, [Keyblade("Struggle Hammer")] StruggleHammer, [Staff("Save the Queen+")] SaveTheQueenPlus, [Shield("Save the King+")] SaveTheKingPlus, [Map("The Interceptor Map")] TheInterceptorMap, [Map("The Black Pearl Map")] TheBlackPearlMap, [Map("Isla de Muerta Map")] IslaDeMuertaMap, [Map("Ship Graveyard Map")] ShipGraveyardMap, [Map("Christmas Town Map")] ChristmasTownMap, [Map("Curly Hill Map")] CurlyHillMap, [Map("Oasis Map")] OasisMap, [Map("Savannah Map")] SavannahMap, [Map("Castle Perimeter Map")] CastlePerimeterMap, [Map("The Great Maw Map")] TheGreatMawMap, [Map("I/O Tower Map")] IOTowerMap, [Map("Central Computer Core Map")] CentralComputerCoreMap, [Map("Solar Sailer Simulation Map")] SolarSailerSimulationMap, [Map("Window of Time Map")] WindowOfTimeMap, [AbilityAction("Auto Assault")] AutoAssault, [AbilityAction("Finishing Blast")] FinishingBlast, [AbilityAction("Combo Upper")] ComboUpper, [AbilityAction("Aerial Impulse")] AerialImpulse, [AbilityAction("Retaliating Smash")] RetaliatingSmash, [Recipe("Promise Charm")] PromiseCharm, [AbilityAction("Running Tackle")] RunningTackle, [AbilityAction("Dash")] Dash, [AbilityAction("Final Arcana")] FinalArcana, [AbilityAction("Final Strike")] FinalStrike, [AbilityAction("Final Arts")] FinalArts, [AbilityAction("Crime & Punishment")] CrimeAndPunishment, [Map("Sunset Hill Map")] SunsetHillMap, [Map("Mansion Map")] MansionMap, [Map("Tower Map")] TowerMap, [Map("DH Map")] DHMap, [Recipe("Munny Pouch")] MunnyPouch2, [Map("Castle That Never Was Map")] CastleThatNeverWasMap, [Recipe("Hades Cup Trophy")] HadesCupTrophy, [Recipe("The Struggle Trophy")] TheStruggleTrophy, [AbilitySupport("Combo Master")] ComboMaster, [AbilitySupport("Drive Converter")] DriveConverter, [AbilitySupport("Light & Darkness")] LightAndDarkness, [AbilitySupport("Damage Control")] DamageControl, [Keyblade("Two Become One")] TwoBecomeOne, [Keyblade("Winner's Proof")] WinnersProof, [Staff("Centurion")] Centurion, [Staff("Centurion+")] CenturionPlus, [Staff("Plain Mushroom")] PlainMushroom, [Staff("Plain Mushroom+")] PlainMushroomPlus, [Staff("Precious Mushroom")] PreciousMushroom, [Staff("Precious Mushroom+")] PreciousMushroomPlus, [Staff("Premium Mushroom")] PremiumMushroom, [Shield("Frozen Pride")] FrozenPride, [Shield("Frozen Pride+")] FrozenPridePlus, [Shield("Joyous Mushroom")] JoyousMushroom, [Shield("Joyous Mushroom+")] JoyousMushroomPlus, [Shield("Majestic Mushroom")] MajesticMushroom, [Shield("Majestic Mushroom+")] MajesticMushroomPlus, [Shield("Ultimate Mushroom")] UltimateMushroom, [AbilityAction("Flash Step")] FlashStep, [AbilityAction("Aerial Dive")] AerialDive, [AbilityAction("Magnet Burst")] MagnetBurst, [AbilityAction("Vicinity Break")] VicinityBreak, [Form("Limit Form")] LimitForm, [AbilityMobility("Dodge Roll LV 1")] DodgeRollLV1, [AbilityMobility("Dodge Roll LV 2")] DodgeRollLV2, [AbilityMobility("Dodge Roll LV 3")] DodgeRollLV3, [AbilityMobility("Dodge Roll MAX")] DodgeRollMAX, [AbilitySupport("Auto Limit")] AutoLimit2, [AbilityAction("Sonic Rave")] SonicRave, [AbilityAction("Last Arcanum")] LastArcanum, [AbilityAction("Strike Raid")] StrikeRaid, [AbilityAction("Infinity")] Infinity, [AbilityAction("Zantetsuken")] Zantetsuken, [AbilityAction("Ripple Drive")] RippleDrive, [AbilityAction("Hurricane Period")] HurricanePeriod, [Synthesis("Remembrance Shard")] RemembranceShard, [Synthesis("Remembrance Stone")] RemembranceStone, [Synthesis("Remembrance Gem")] RemembranceGem, [Synthesis("Remembrance Crystal")] RemembranceCrystal, [Synthesis("Tranquility Shard")] TranquilityShard, [Synthesis("Tranquility Stone")] TranquilityStone, [Synthesis("Tranquility Gem")] TranquilityGem, [Synthesis("Tranquility Crystal")] TranquilityCrystal, [Synthesis("Lost Illusion")] LostIllusion, [Synthesis("Manifest Illusion")] ManifestIllusion, [Map("Dark Remembrance Map")] DarkRemembranceMap, [AbilityAction("Zantetsu Counter")] ZantetsuCounter, [AbilityAction("Reflect Combo")] ReflectCombo, [AbilitySupport("HP Gain")] HPGain, [Map("Depths of Remembrance Map")] DepthsOfRemembranceMap, [Unused] Unused24F, [Map("Garden of Assemblage Map")] GardenOfAssemblageMap, [Recipe("Proof of Connection")] ProofOfConnection, [Recipe("Proof of Nonexistence")] ProofOfNonexistence, [Recipe("Proof of Peace")] ProofOfPeace, [AbilitySupport("Protect")] Protect, [AbilitySupport("Protectra")] Protectra, [AbilitySupport("Protectga")] Protectga, [Accessory("Executive's Ring")] ExecutivesRing, [Staff("Shaman's Relic+")] ShamansRelicPlus, [Shield("Akashic Record+")] AkashicRecordPlus, } } ================================================ FILE: KHSave.Lib2/Types/GameType.cs ================================================ using System; namespace KHSave.Lib2.Types { [Flags] public enum GameType { None, Jp = 1, EuUs = 2, Fm = 4, All = Jp | EuUs | Fm } } ================================================ FILE: KHSave.Lib2/Types/InventoryType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib2.Types { public enum InventoryType : int { [Consumable("Potion")] Potion, [Consumable("Hi-Potion")] HiPotion, [Consumable("Ether")] Ether, [Consumable("Elixir")] Elixir, [Consumable("Mega-Potion")] MegaPotion, [Consumable("Mega-Ether")] MegaEther, [Consumable("Megalixir")] Megalixir, [Accessory("Ability Ring")] AbilityRing, [Accessory("Engineer's Ring")] EngineerRing, [Accessory("Technician's Ring")] TechnicianRing, [Accessory("Expert Ring")] ExpertRing, [Accessory("Sardonyx Ring")] SardonyxRing, [Accessory("Tourmaline Ring")] TourmalineRing, [Accessory("Aquamarine Ring")] AquamarineRing, [Accessory("Garnet Ring")] GarnetRing, [Accessory("Diamond Ring")] DiamondRing, [Accessory("Silver Ring")] SilverRing, [Accessory("Gold Ring")] GoldRing, [Accessory("Platinum Ring")] PlatinumRing, [Accessory("Mythril Ring")] MythrilRing, [Unused] Unused20, [Unused] Unused21, [Unused] Unused22, [Unused] Unused23, [KeyItem("Torn Pages")] TornPages, [Unused] Unused25, [Accessory("Orichalcum Ring")] OrichalcumRing, [Accessory("Master's Ring")] MasterRing, [Accessory("Moon Amulet")] MoonAmulet, [Unused] Unused29, [Accessory("Star Charm")] StarCharm, [Accessory("Skill Ring")] SkillRing, [Accessory("Skillful Ring")] SkillfulRing, [Keyblade("Kingdom Key")] KingdomKey, [Keyblade("Oathkeeper")] Oathkeeper, [Keyblade("Oblivion")] Oblivion, [Keyblade("Detection Saber")] DetectionSaber, [Keyblade("Frontier of Ultima")] FrontierOfUltima, [Accessory("Soldier Earring")] SoldierEarring, [Accessory("Fencer Earring")] FencerEarring, [Accessory("Mage Earring")] MageEarring, [Shield("Knight's Shield")] KnightShield, [Shield("Detection Shield")] DetectionShield, [Shield("Test the King")] TestTheKing, [Accessory("Slayer Earring")] SlayerEarring, [Accessory("Cosmic Ring")] CosmicRing, [Weapon("Battlefields of War")] BattlefieldsOfWar, [Weapon("Sword of the Ancestor")] SwordOfTheAncestor, [Accessory("Medal")] Medal, [Accessory("Cosmic Arts")] CosmicArts, [Accessory("Shadow Archive")] ShadowArchive, [Weapon("Beast's Claw")] BeastClaw, [Weapon("Bone Fist")] BoneFist, [Weapon("Proud Fang")] ProudFang, [Weapon("Skill and Crossbones")] SkillAndCrossbones, [Accessory("Shadow Archive+")] ShadowArchivePlus, [Accessory("Lucky Ring")] LuckyRing, [Accessory("Full Bloom")] FullBloom, [Accessory("Draw Ring")] DrawRing, [Accessory("Full Bloom+")] FullBloomPlus, [Armor("ElvenBandanna")] ElvenBandanna, [Armor("Divine Bandanna")] DivineBandanna, [Armor("Power Band")] PowerBand, [Keyblade("Antiform Dummy")] AntiformDummy, [Weapon("Scimitar")] Scimitar, [Weapon("Way to the Dawn")] WayToTheDawn, [Weapon("Identity Disk")] IdentityDisk, [Staff("Mage's Staff")] MageStaff, [Unused] Unused68, [Unused] Unused69, [Armor("Buster Band")] BusterBand, [Armor("Protect Belt")] ProtectBelt, [Weapon("ID not found")] Unused72, [Keyblade("ID not found")] Unused73, [Armor("Gaia Belt")] GaiaBelt, [Unused] Unused75, [Unused] Unused76, [Unused] Unused77, [Unused] Unused78, [Unused] Unused79, [Unused] Unused80, [Armor("Cosmic Belt")] CosmicBelt, [Armor("Shock Charm")] ShockCharm, [Armor("Shock Charm+")] ShockCharmPlus, [Armor("Grand Ribbon")] GrandRibbon, [Unused] Unused85, [Unused] Unused86, [Armor("Fire Bangle")] FireBangle, [Armor("Fira Bangle")] FiraBangle, [Armor("Firaga Bangle")] FiragaBangle, [Armor("Firagun Bangle")] FiragunBangle, [Unused] Unused91, [Armor("Blizzard Armlet")] BlizzardArmlet, [Armor("Blizzara Armlet")] BlizzaraArmlet, [Armor("Blizzaga Armlet")] BlizzagaArmlet, [Armor("Blizzagun Armlet")] BlizzagunArmlet, [Unused] Unused96, [Tent("Tent")] Tent, [Armor("Thunder Trinket")] ThunderTrinket, [Armor("Thundara Trinket")] ThundaraTrinket, [Armor("Thundaga Trinket")] ThundagaTrinket, [Armor("Thundagun Trinket")] ThundagunTrinket, [Shield("Adamant Shield")] AdamantShield, [Shield("Chain Gear")] ChainGear, [Shield("Ogre Shield")] OgreShield, [Shield("Falling Star")] FallingStar, [Shield("Dreamcloud")] Dreamcloud, [Shield("Knight Defender")] KnightDefender, [Shield("Genji Shield")] GenjiShield, [Shield("Akashic Record")] AkashicRecord, [Shield("Nobody Guard")] NobodyGuard, [Staff("Hammer Staff")] HammerStaff, [Staff("Victory Bell")] VictoryBell, [Staff("Meteor Staff")] MeteorStaff, [Staff("CometStuff")] CometStuff, [Staff("Lord's Broom")] LordBroom, [Staff("Wisdom Wand")] WisdomWand, [Staff("Rising Dragon")] RisingDragon, [Staff("Nobody Lance")] NobodyLance, [Staff("Shaman's Relic")] ShamanRelic, [Unused] Unused120, [Armor("Shadow Anklet")] ShadowAnklet, [Staff("Staff of Detection")] StaffOfDetection, [Armor("Dark Anklet")] DarkAnklet, [Armor("Midnight Anklet")] MidnightAnklet, [Armor("Chaos Anklet")] ChaosAnklet, [Unused] Unused126, [Armor("Abas Chain")] AbasChain, [Armor("Aegis Chain")] AegisChain, [Armor("Arcisius")] Arcisius, [Armor("Ribbon")] Ribbon, [Armor("Champion Belt")] ChampionBelt, [Armor("Petite Ribbon")] PetiteRibbon, [Armor("Arcisius+")] ArcisiusPlus, [Armor("Cosmic Chain")] CosmicChain, [Unused] Unused135, [Unused] Unused136, [Unused] Unused137, [Unused] Unused138, [Unused] Unused139, [Unused] Unused140, [Unused] Unused141, [Unused] Unused142, [Synthesis("Blazing Shard")] BlazingShard, [Synthesis("Blazing Stone")] BlazingStone, [Synthesis("Blazing Gem")] BlazingGem, [Synthesis("Blazing Crystal")] BlazingCrystal, [Unused] Unused147, [Unused] Unused148, [Unused] Unused149, [Unused] Unused150, [Synthesis("Lightning Shard")] LightningShard, [Synthesis("Lightning Stone")] LightningStone, [Synthesis("Lightning Gem")] LightningGem, [Synthesis("Lightning Crystal")] LightningCrystal, [Synthesis("Power Shard")] PowerShard, [Synthesis("Power Stone")] PowerStone, [Synthesis("Power Gem")] PowerGem, [Synthesis("Power Crystal")] PowerCrystal, [Synthesis("Lucid Shard")] LucidShard, [Synthesis("Lucid Stone")] LucidStone, [Synthesis("Lucid Gem")] LucidGem, [Synthesis("Lucid Crystal")] LucidCrystal, [Synthesis("Dense Shard")] DenseShard, [Synthesis("Dense Stone")] DenseStone, [Synthesis("Dense Gem")] DenseGem, [Synthesis("Dense Crystal")] DenseCrystal, [Synthesis("Twilight Shard")] TwilightShard, [Synthesis("Twilight Stone")] TwilightStone, [Synthesis("Twilight Gem")] TwilightGem, [Synthesis("Twilight Crystal")] TwilightCrystal, [Synthesis("Mythril Shard")] MythrilShard, [Synthesis("Mythril Stone")] MythrilStone, [Synthesis("Mythril Gem")] MythrilGem, [Synthesis("Mythril Crystal")] MythrilCrystal, [Synthesis("Bright Shard")] BrightShard, [Synthesis("Bright Stone")] BrightStone, [Synthesis("Bright Gem")] BrightGem, [Synthesis("Bright Crystal")] BrightCrystal, [Synthesis("Energy Shard")] EnergyShard, [Synthesis("Energy Stone")] EnergyStone, [Synthesis("Energy Gem")] EnergyGem, [Synthesis("Energy Crystal")] EnergyCrystal, [Synthesis("Serenity Shard")] SerenityShard, [Synthesis("Serenity Stone")] SerenityStone, [Synthesis("Serenity Gem")] SerenityGem, [Synthesis("Serenity Crystal")] SerenityCrystal, [Synthesis("Orichalcum+")] OrichalcumPlus, [KeyItem("Munny Pouch")] MunnyPouch, [KeyItem("Crystal Orb")] CrystalOrb, [KeyItem("Seifer's Trophy")] SeiferTrophy, [KeyItem("Tournament Poster")] TournamentPoster, [KeyItem("Poster")] Poster, [KeyItem("Letter")] Letter, [KeyItem("Naminé's Sketches")] NamineSketches, [KeyItem("Membership Card")] MembershipCard, [KeyItem("Olympus Stone")] OlympusStone, [KeyItem("Auron's Statue")] AuronStatue, [KeyItem("Cursed Medallion")] CursedMedallion, [KeyItem("Present")] Present, [KeyItem("Decoy Presents")] DecoyPresents, [KeyItem("Ice Cream")] IceCream, [KeyItem("Picture")] Picture, [Synthesis("Orichalcum")] Orichalcum, [Synthesis("Frost Shard")] FrostShard, [Synthesis("Frost Stone")] FrostStone, [Synthesis("Frost Gem")] FrostGem, [Synthesis("Frost Crystal")] FrostCrystal, [KeyItem("Mega-Recipe")] MegaRecipe, [Unused] Unused209, [KeyItem("Star Recipe")] StarRecipe, [KeyItem("Recovery Recipe")] RecoveryRecipe, [KeyItem("Skill Recipe")] SkillRecipe, [KeyItem("Guard Recipe")] GuardRecipe, [KeyItem("Dummy 06")] Dummy06, [KeyItem("Dummy 07")] Dummy07, [KeyItem("Dummy 08")] Dummy08, [KeyItem("Dummy 09")] Dummy09, [KeyItem("Dummy 10")] Dummy10, [KeyItem("Dummy 11")] Dummy11, [KeyItem("Dummy 12")] Dummy12, [KeyItem("Dummy 13")] Dummy13, [KeyItem("Dummy 14")] Dummy14, [KeyItem("Dummy 15")] Dummy15, [KeyItem("Dummy 16")] Dummy16, [KeyItem("Road to Discovery")] RoadToDiscovery, [KeyItem("Strength Beyond Strength")] StrengthBeyondStrength, [KeyItem("Book of Shadows")] BookOfShadows, [Tent("Drive Recovery")] DriveRecovery, [Tent("High Drive Recovery")] HighDriveRecovery, [Tent("Power Boost")] PowerBoost, [Tent("Magic Boost")] MagicBoost, [Tent("Defense Boost")] DefenseBoost, [Tent("AP Boost")] APBoost, [Synthesis("Dark Shard")] DarkShard, [Synthesis("Dark Stone")] DarkStone, [Synthesis("Dark Gem")] DarkGem, [Synthesis("Dark Crystal")] DarkCrystal, [KeyItem("Cloaked Thunder")] CloakedThunder, [KeyItem("Eternal Blossom")] EternalBlossom, [KeyItem("Rare Document")] RareDocument, [KeyItem("Dummy 23")] Dummy23, [KeyItem("Dummy 24")] Dummy24, [KeyItem("Dummy 25")] Dummy25, [KeyItem("Dummy 26")] Dummy26, [KeyItem("Dummy 27")] Dummy27, [KeyItem("Style Recipe")] StyleRecipe, [KeyItem("Moon Recipe")] MoonRecipe, [KeyItem("Queen Recipe")] QueenRecipe, [KeyItem("King Recipe")] KingRecipe, [KeyItem("Ultimate Recipe")] UltimateRecipe, [Keyblade("StarSeeker")] StarSeeker, [Keyblade("Hidden Dragon")] HiddenDragon, [Staff("Save the Queen")] SaveTheQueen, [Shield("Save the King")] SaveTheKing, [Keyblade("Hero's Crest")] HeroCrest, [Keyblade("Monochrome")] Monochrome, [Keyblade("Follow the Wind")] FollowTheWind, [Keyblade("Circle of Life")] CircleOfLife, [Keyblade("Photon Debugger")] PhotonDebugger, [Keyblade("Gull Wing")] GullWing, [Keyblade("Rumbling Rose")] RumblingRose, [Keyblade("Guardian Soul")] GuardianSoul, [Keyblade("Wishing Lamp")] WishingLamp, [Keyblade("Decisive Pumpkin")] DecisivePumpkin, [Keyblade("Sleeping Lion")] SleepingLion, [Keyblade("Sweet Memories")] SweetMemories, [Keyblade("Mysterious Abyss")] MysteriousAbyss, [Keyblade("Fatal Crest")] FatalCrest, [Keyblade("Bond of Flame")] BondOfFlame, [Keyblade("Fenrir")] Fenrir, [Keyblade("Ultima Weapon")] UltimaWeapon, [Unused] Unused272, [Unused] Unused273, [Keyblade("Save the Queen+")] SaveTheQueenPlys, [Shield("Save the King+")] SaveTheKingPlus, [KeyItem("Promise Charm")] PromiseCharm, [KeyItem("Munny Pouch")] MunnyPouch2, [KeyItem("Hades Cup Trophy")] HadesCupTrophy, [KeyItem("\"The Struggle\" Trophy")] TheStruggleTrophy, [Unused] Unused280, [Keyblade("Winner's Proof")] WinnerProof, [Staff("Centurion")] Centurion, [Staff("Centurion+")] CenturionPlus, [Staff("Plain Mushroom")] PlainMushroom, [Staff("Plain Mushroom+")] PlainMushroomPlus, [Staff("Precious Mushroom")] PreciousMushroom, [Staff("Precious Mushroom+")] PreciousMushroomPlus, [Staff("Premium Mushroom")] PremiumMushroom, [Shield("Frozen Pride")] FrozenPride, [Shield("Frozen Pride+")] FrozenPridePlus, [Shield("Joyous Mushroom")] JoyousMushroom, [Shield("Joyous Mushroom+")] JoyousMushroomPlus, [Shield("Majestic Mushroom")] MajesticMushroom, [Shield("Majestic Mushroom+")] MajesticMushroomPlus, [Shield("Ultimate Mushroom")] UltimateMushroom, [Synthesis("Remembrance Shard")] RemembranceShard, [Synthesis("Remembrance Stone")] RemembranceStone, [Synthesis("Remembrance Gem")] RemembranceGem, [Synthesis("Remembrance Crystal")] RemembranceCrystal, [Synthesis("Tranquility Shard")] TranquilityShard, [Synthesis("Tranquility Stone")] TranquilityStone, [Synthesis("Tranquility Gem")] TranquilityGem, [Synthesis("Tranquility Crystal")] TranquilityCrystalss, [Synthesis("Lost Illusion")] LostIllusion, [Synthesis("Manifest Illusion")] ManifestIllusion, [KeyItem("Proof of Connection")] ProofOfConnection, [KeyItem("Proof of Nonexistence")] ProofOfNonexistence, [KeyItem("Proof of Peace")] ProofOfPeace, [Accessory("Executive's Ring")] ExecutiveRing, [Staff("Shaman's Relic+")] ShamanRelicPlus, [Shield("Akashic Record+")] AkashicRecordPlus, } } ================================================ FILE: KHSave.Lib2/Types/PlayableCharacterType.cs ================================================ using KHSave.Attributes; namespace KHSave.Lib2.Types { public enum PlayableCharacterType : byte { [Info] Sora, [Info] Donald, [Info] Goofy, [Info("World character")] WorldCharacter, [Info] Valor, [Info] Wisdom, [Info] Limit, [Info] Trinity, [Info] Final, [Info] Antiform, [Info] Mickey, [Info] None = 18, } } ================================================ FILE: KHSave.Lib2/Types/WorldType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib2.Types { // https://openkh.dev/kh2/worlds.html public enum WorldType : byte { [World("zz", "World ZZ")] WorldZZ, [World("es", "End of Sea")] EndOfSea, [World("tt", "Twilight Town")] TwilightTown, [World("di", "Destiny Island")] DestinyIsland, [World("hb", "Hollow Bastion")] HollowBastion, [World("bb", "Beast's Castle")] BestCastle, [World("he", "Olympus Coliseum")] OlympusColiseum, [World("al", "Agrabah")] Agrabah, [World("mu", "The Land of Dragons")] LandOfDragons, [World("po", "100 Acre Wood")] HundredsAcreWood, [World("lk", "Pride Land")] PrideLand, [World("lm", "Atlantica")] Atlantica, [World("dc", "Disney Castle")] DisneyCastle, [World("wi", "Timeless River")] TimelessRiver, [World("nm", "Halloween Town")] HalloweenTown, [World("wm", "World Map")] WorldMap, [World("ca", "Port Royal")] PortRoyal, [World("tr", "Space Paranoids")] SpaceParanoids, [World("eh", "The World That Never Was")] TheWorldThatNeverWas, } } ================================================ FILE: KHSave.Lib3/ISaveKh3.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Lib3.Models; using KHSave.Lib3.Types; using System; using System.Collections.Generic; using System.IO; namespace KHSave.Lib3 { public interface ISaveKh3 { int MagicCode { get; set; } int FileSize { get; set; } short MajorVersion { get; set; } short MinorVersion { get; set; } uint Checksum { get; set; } DifficultyType Difficulty { get; set; } WorldType WorldLogo { get; set; } int TotalExp { get; set; } int Munny { get; set; } byte Level { get; set; } DesireChoice DesireChoice { get; set; } PowerChoice PowerChoice { get; set; } List Party { get; set; } bool SaveClear { get; set; } LocationType LocationName { get; set; } int Unknown00058 { get; set; } // Changes every time int Unknown0005C { get; set; } // Changes every time CharacterIconType BaseSaveIcon { get; set; } CharacterIconType DlcSaveIcon { get; set; } int EnemiesDefeated { get; set; } short SavesCount { get; set; } List RecordAttractionsUseCount { get; set; } List RecordShotlocksUseCount { get; set; } List Inventory { get; set; } List MaterialsCount { get; set; } int CrabsCollected { get; set; } List Pc { get; set; } int BonusHp { get; set; } int BonusMp { get; set; } int BonusStrength { get; set; } int BonusMagic { get; set; } int BonusDefense { get; set; } List Storyflags { get; set; } string MapPath { get; set; } string MapSpawn { get; set; } string PlayerScript { get; set; } string PlayerCharacter { get; set; } List Shortcuts { get; set; } List Magics { get; set; } List Links { get; set; } Records Records { get; set; } int PhotoMaxCount { get; set; } List Photos { get; set; } string DlcMapPath { get; set; } string DlcSpawnPoint { get; set; } void Write(Stream stream); } } ================================================ FILE: KHSave.Lib3/KHSave.Lib3.csproj ================================================  net6 ================================================ FILE: KHSave.Lib3/Models/Ability.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Extensions; using Xe.BinaryMapper; namespace KHSave.Lib3.Models { public class Ability { [Data] public int Data { get; set; } public bool Unlocked { get => Data.GetFlag(0); set => Data = BitExtensions.SetFlag(Data, 0, value); } public bool Enabled { get => Data.GetFlag(1); set => Data = BitExtensions.SetFlag(Data, 1, value); } public bool Unseen { get => Data.GetFlag(2); set => Data = BitExtensions.SetFlag(Data, 2, value); } public bool Flag3 { get => Data.GetFlag(3); set => Data = BitExtensions.SetFlag(Data, 3, value); } public override string ToString() { return $"{Enabled} {Data:X08}"; } } } ================================================ FILE: KHSave.Lib3/Models/AiModel.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Lib3.Types; using Xe.BinaryMapper; namespace KHSave.Lib3.Models { public class AiModel { [Data] public AiCombatStyleType CombatStyle { get; set; } [Data] public AiAbilityType Abilitiy { get; set; } [Data] public AiRecoveryType Recovery { get; set; } [Data] public byte RecoveryTargets { get; set; } } } ================================================ FILE: KHSave.Lib3/Models/EquipmentItem.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Lib3.Types; using Xe.BinaryMapper; namespace KHSave.Lib3.Models { public class EquipmentItem { [Data] public byte Id { get; set; } [Data] public ItemType ItemType { get; set; } [Data(4)] public byte Enabled { get; set; } } public class WeaponEquipmentItem : EquipmentItem { public WeaponType WeaponId { get => (WeaponType)Id; set => Id = (byte)value; } } public class ArmorEquipmentItem : EquipmentItem { public ArmorType ArmorId { get => (ArmorType)Id; set => Id = (byte)value; } } public class AccessoryEquipmentItem : EquipmentItem { public AccessoryType AccessoryId { get => (AccessoryType)Id; set => Id = (byte)value; } } public class ConsumableEquipmentItem : EquipmentItem { public ConsumableType ConsumableId { get => (ConsumableType)Id; set => Id = (byte)value; } } } ================================================ FILE: KHSave.Lib3/Models/FlantasticRecord.cs ================================================ using Xe.BinaryMapper; namespace KHSave.Lib3.Models { public class FlantasticRecord { [Data] public int HighScore { get; set; } [Data] public int HighScore2 { get; set; } [Data] public int AttemptCount { get; set; } } } ================================================ FILE: KHSave.Lib3/Models/InventoryEntry.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using Xe.BinaryMapper; namespace KHSave.Lib3.Models { public class InventoryEntry { [Data] public byte Count { get; set; } [Data] public bool Obtained { get; set; } [Data] public bool Unseen { get; set; } [Data] public bool ShopFlag1 { get; set; } [Data] public bool ShopFlag2 { get; set; } [Data] public bool Flag4 { get; set; } [Data] public bool Flag5 { get; set; } [Data] public bool Flag6 { get; set; } [Data] public bool Flag7 { get; set; } } } ================================================ FILE: KHSave.Lib3/Models/MagicGroup.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Lib3.Types; using Xe.BinaryMapper; namespace KHSave.Lib3.Models { public class MagicGroup { [Data] public CommandType Magic1 { get; set; } [Data] public CommandType Magic2 { get; set; } [Data] public CommandType Magic3 { get; set; } [Data] public CommandType Magic4 { get; set; } [Data] public CommandType Magic5 { get; set; } [Data] public CommandType Magic6 { get; set; } [Data] public CommandType Magic7 { get; set; } [Data] public CommandType Magic8 { get; set; } [Data] public CommandType Magic9 { get; set; } } } ================================================ FILE: KHSave.Lib3/Models/PhotoEntry.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using Xe.BinaryMapper; namespace KHSave.Lib3.Models { public class PhotoEntry { [Data] public int Length { get; set; } [Data(Count = 0x19000)] public byte[] Data { get; set; } } } ================================================ FILE: KHSave.Lib3/Models/PlayableCharacter.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using System.Collections.Generic; using Xe.BinaryMapper; namespace KHSave.Lib3.Models { public class PlayableCharacter { [Data(0x6)] public byte CurrentWeaponIndex { get; set; } [Data(0x80, 3, 8)] public List Weapons { get; set; } [Data(0x98, 8, 8)] public List Armors { get; set; } [Data(0xD8, 8, 8)] public List Accessories { get; set; } [Data(0x118, 8, 8)] public List Items { get; set; } [Data(0x158)] public byte AiCombatStyle { get; set; } [Data(0x158)] public byte AiAbilities { get; set; } [Data(0x158)] public AiModel Ai { get; set; } [Data(0x160, 512, 4)] public List Abilities { get; set; } [Data(0x980)] public byte AtkBoost { get; set; } [Data] public byte MagBoost { get; set; } [Data] public byte DefBoost { get; set; } [Data] public byte ApBoost { get; set; } [Data] public int Hp { get; set; } [Data] public int Mp { get; set; } [Data] public int Focus { get; set; } public override string ToString() { return $"HP {Hp} MP {Mp}"; } } } ================================================ FILE: KHSave.Lib3/Models/Records.cs ================================================ using System.Collections.Generic; using Xe.BinaryMapper; namespace KHSave.Lib3.Models { public class Records { [Data] public int VerumRexHighScore { get; set; } [Data] public int VerumRexTimer { get; set; } [Data] public int FlashTracer1HighScore { get; set; } [Data] public int FlashTracer2HighScore { get; set; } [Data] public int FlashTracer1Timer { get; set; } [Data] public int FlashTracer2Timer { get; set; } [Data] public int FrozenSliderHighScore { get; set; } [Data] public int FrozenSliderTimer { get; set; } [Data] public int FrozenSliderMedals { get; set; } [Data] public int FestivalDanceHighScore { get; set; } [Data] public int FestivalDanceLongestChain { get; set; } [Data] public FlantasticRecord CherryFlan { get; set; } [Data] public FlantasticRecord StrawberryFlan { get; set; } [Data] public FlantasticRecord BananaFlan { get; set; } [Data] public FlantasticRecord HoneydewFlan { get; set; } [Data] public FlantasticRecord GrapeFlan { get; set; } [Data] public FlantasticRecord WatermelonFlan { get; set; } [Data] public FlantasticRecord OrangeFlan { get; set; } [Data(Count = 0x1e)] public List ShotlocksHighScore { get; set; } [Data(Count = 5)] public List AttractionsHighScore { get; set; } } } ================================================ FILE: KHSave.Lib3/Models/ShortcutGroup.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Lib3.Types; using Xe.BinaryMapper; namespace KHSave.Lib3.Models { public class ShortcutGroup { [Data] public CommandType Circle { get; set; } [Data] public CommandType Triangle { get; set; } [Data] public CommandType Square { get; set; } [Data] public CommandType Cross { get; set; } } } ================================================ FILE: KHSave.Lib3/Presets/Preset.Pawn.cs ================================================ using System.Collections.Generic; namespace KHSave.Lib3.Presets { public static partial class Presets { public class Pawn { public string Name { get; set; } } public static readonly string PlayablePawnPath = "/Game/Blueprints/Player/{0}/{0}_Pawn.{0}_Pawn_C"; public static readonly string NpcPawnPath = "/Game/Blueprints/Npc/{0}/{0}_Pawn.{0}_Pawn_C"; public static readonly string EnemyPawnPath = "/Game/Blueprints/Enemy/{0}/{0}_Pawn.{0}_Pawn_C"; public static readonly Dictionary PlayablePawns = new Dictionary { ["p_ex001"] = new Pawn { Name = "Sora (KH3)" }, ["p_dl001"] = new Pawn { Name = "Sora (Shibuya)" }, ["p_zz001"] = new Pawn { Name = "Sora (Debug mode)" }, ["p_ex002"] = new Pawn { Name = "Aqua" }, ["p_ex003"] = new Pawn { Name = "Riku (KH2)" }, ["p_ex004"] = new Pawn { Name = "Riku (KH3)" }, ["p_ex005"] = new Pawn { Name = "Sora (KH1)" }, ["p_ex006"] = new Pawn { Name = "Kairi" }, ["p_ex007"] = new Pawn { Name = "Roxas" }, ["p_ex011"] = new Pawn { Name = "Sora (KH2)" }, ["p_bx001"] = new Pawn { Name = "Sora (Baymax)" }, ["p_ca001"] = new Pawn { Name = "Sora (Caribbean)" }, ["p_ew001"] = new Pawn { Name = "Sora (Final World)" }, ["p_mi001"] = new Pawn { Name = "Sora (Monstropolis)" }, ["p_po001"] = new Pawn { Name = "Sora (100 Acre Wood)" }, ["p_re001"] = new Pawn { Name = "Sora (Remy)" }, ["p_ts001"] = new Pawn { Name = "Sora (Toy Story)" }, }; public static readonly Dictionary PlayableDlcPawns = new Dictionary { ["/Game/Blueprints/ReMind/MiRx/p_ex008/p_ex008_MiRxPawn.p_ex008_MiRxPawn_C"] = new Pawn { Name = "Mickey (ReMind)" }, ["/Game/Blueprints/ReMind/SoKc/Player/p_ex001_SoKcPawn.p_001_SoKcPawn_C"] = new Pawn { Name = "Sora (Keyholes ver.)" }, ["/Game/Blueprints/ReMind/LgRx/p_ex004/p_ex004_LgRxPawn.p_ex004_LgRxPawn_C"] = new Pawn { Name = "Guardians of Light (ReMind)" }, }; public static readonly Dictionary NpcPawns = new Dictionary { ["n_bt201"] = new Pawn { Name = "Young Xehanort (Chess)" }, ["n_bt202"] = new Pawn { Name = "Young Eraqus (Chess)" }, ["n_dw202"] = new Pawn { Name = "Riku (KH1)" }, ["n_dw208"] = new Pawn { Name = "Ansem the Wise" }, ["n_ex001"] = new Pawn { Name = "Donald" }, ["n_ex002"] = new Pawn { Name = "Goofy" }, ["n_ex003"] = new Pawn { Name = "Mickey" }, ["n_ex004"] = new Pawn { Name = "Riku" }, ["n_ex005"] = new Pawn { Name = "Kairi" }, ["n_ex006"] = new Pawn { Name = "Ventus" }, ["n_ex007"] = new Pawn { Name = "Terra" }, ["n_ex008"] = new Pawn { Name = "Roxas" }, ["n_ex009"] = new Pawn { Name = "Roxas (Coat)" }, ["n_ex010"] = new Pawn { Name = "Lea" }, ["n_ex011"] = new Pawn { Name = "Aquanort" }, ["n_ex013"] = new Pawn { Name = "Naminé" }, ["n_ex024"] = new Pawn { Name = "Eraqus" }, ["n_ex029"] = new Pawn { Name = "Lingering Will" }, ["n_ex033"] = new Pawn { Name = "Xion (Coat)" }, }; public static readonly Dictionary EnemyPawns = new Dictionary { ["e_dw401"] = new Pawn { Name = "Demon Tide" }, ["e_ex301"] = new Pawn { Name = "Xehanort" }, ["e_ex302"] = new Pawn { Name = "Young Xehanort" }, ["e_ex303"] = new Pawn { Name = "Ansem" }, ["e_ex304"] = new Pawn { Name = "Xemnas" }, }; } } ================================================ FILE: KHSave.Lib3/Presets/Presets.Map.cs ================================================ using System.Collections.Generic; namespace KHSave.Lib3.Presets { public static partial class Presets { public class Map { public string Name { get; set; } } public static readonly Dictionary MAPS = new Dictionary { ["/Game/Levels/he/he_01/he_01"] = new Map { Name = "Realm of the Gods" }, ["/Game/Levels/he/he_02/he_02"] = new Map { Name = "Mount Olympus" }, ["/Game/Levels/he/he_03/he_03"] = new Map { Name = "Thebes (in flames)" }, ["/Game/Levels/he/he_04/he_04"] = new Map { Name = "Thebes" }, ["/Game/Levels/he/he_05/he_05"] = new Map { Name = "Titans battle arena" }, ["/Game/Levels/he/he_06/he_06"] = new Map { Name = "Titans battle tornado" }, ["/Game/Levels/he/he_50/he_50"] = new Map { Name = "Cutscene map" }, ["/Game/Levels/he_DLC/he_52/he"] = new Map { Name = "DLC cutscene map" }, ["/Game/Maps/he_DLC/umap/he_52/he_52_CheckMap"] = new Map { Name = "Thebes cutscene map (playable)" }, ["/Game/Levels/tt/tt_01/tt_01"] = new Map { Name = "The Neighborhood" }, ["/Game/Levels/tt/tt_40/tt_40"] = new Map { Name = "Bistro" }, ["/Game/Levels/tt/tt_50/tt_50"] = new Map { Name = "Computer Laboratory" }, ["/Game/Maps/tt/umap/tt_01/tt_01_CheckMap"] = new Map { Name = "Twilight Town (out of bounds)" }, ["/Game/Levels/ts/ts_01/ts_01"] = new Map { Name = "Andy’s House" }, ["/Game/Levels/ts/ts_02/ts_02"] = new Map { Name = "Galaxy Toys" }, ["/Game/Levels/ts/ts_03/ts_03"] = new Map { Name = "Verux Rem Minigame" }, ["/Game/Levels/ts/ts_04/ts_04"] = new Map { Name = "UFO battle arena" }, ["/Game/Levels/ra/ra_01/ra_01"] = new Map { Name = "The Forest" }, ["/Game/Levels/ra/ra_02/ra_02"] = new Map { Name = "The Kingdom" }, ["/Game/Levels/ra/ra_50/ra_50"] = new Map { Name = "Cutscene map" }, ["/Game/Maps/ra/umap/ra_02/ra_02_CheckMap"] = new Map { Name = "Lantern map (explorable)" }, ["/Game/Levels/mi/mi_01/mi_01"] = new Map { Name = "Monsters. Inc." }, ["/Game/Levels/mi/mi_02/mi_02"] = new Map { Name = "The Factory" }, ["/Game/Levels/mi/mi_03/mi_03"] = new Map { Name = "The Powerplant" }, ["/Game/Levels/mi/mi_04/mi_04"] = new Map { Name = "The Door Vault" }, ["/Game/Levels/mi/mi_50/mi_50"] = new Map { Name = "Outside the factory" }, ["/Game/Levels/ca/ca_01/ca_01"] = new Map { Name = "Port Royal" }, ["/Game/Levels/ca/ca_02/ca_02"] = new Map { Name = "The High Seas" }, ["/Game/Levels/ca/ca_03/ca_03"] = new Map { Name = "Unused map?" }, ["/Game/Levels/ca/ca_04/ca_04"] = new Map { Name = "Davy Jones' Locker" }, ["/Game/Levels/ca/ca_05/ca_05"] = new Map { Name = "Over the Edge" }, ["/Game/Levels/ca/ca_50/ca_50"] = new Map { Name = "Cutscene map, no collision" }, ["/Game/Levels/fz/fz_01/fz_01"] = new Map { Name = "The North Mountain" }, ["/Game/Maps/fz/umap/fz_01/fz_01_CheckMap"] = new Map { Name = "The North Mountain" }, ["/Game/Levels/fz/fz_02/fz_02"] = new Map { Name = "The Labyrinth of Ice" }, ["/Game/Maps/fz/umap/fz_02/fz_02_CheckMap"] = new Map { Name = "The Labyrinth of Ice" }, ["/Game/Levels/fz/fz_03/fz_03"] = new Map { Name = "Trinity Sled Minigame" }, ["/Game/Levels/fz/fz_04/fz_04"] = new Map { Name = "" }, ["/Game/Levels/fz/fz_05/fz_05"] = new Map { Name = "Sköl fight arena" }, ["/Game/Levels/fz/fz_06/fz_06"] = new Map { Name = "" }, ["/Game/Levels/bx/bx_01/bx_01"] = new Map { Name = "The Bridge" }, ["/Game/Levels/bx/bx_02/bx_02"] = new Map { Name = "The City" }, ["/Game/Levels/bx/bx_03/bx_03"] = new Map { Name = "Hiro's Garage" }, ["/Game/Maps/dp/umap/dp_01/dp_01_CheckMap_Mezame"] = new Map { Name = "Station of Awakening (playable)" }, ["/Game/Levels/dp/dp_01/dp_01"] = new Map { Name = "Land of Departure" }, ["/Game/Levels/dp_DLC/dp_50/dp_50"] = new Map { Name = "DLC unused map" }, ["/Game/Levels/dp_DLC/dp_50/dp"] = new Map { Name = "DLC cutscene" }, ["/Game/Levels/kg/kg_01/kg_01"] = new Map { Name = "" }, ["/Game/Levels/kg/kg_02/kg_02"] = new Map { Name = "" }, ["/Game/Levels/kg/kg_03/kg_03"] = new Map { Name = "" }, ["/Game/Levels/kg_DLC/kg_04/kg_04"] = new Map { Name = "" }, ["/Game/Levels/kg_DLC/kg_04/kg_05"] = new Map { Name = "" }, ["/Game/Levels/kg_DLC/kg_06/kg_06"] = new Map { Name = "Group Fight with Replica Xehanorts" }, ["/Game/Levels/kg_DLC/kg_07/kg_07"] = new Map { Name = "Connect the Dots/Keyholes" }, ["/Game/Levels/kg_DLC/kg_08/kg_08"] = new Map { Name = "Terranort fight" }, ["/Game/Levels/kg/kg_50/kg_50"] = new Map { Name = "" }, ["/Game/Levels/kg/kg_51/kg_51"] = new Map { Name = "" }, ["/Game/Levels/kg_DLC/kg_52/kg_52"] = new Map { Name = "" }, ["/Game/Levels/kg_DLC/kg_52/kg"] = new Map { Name = "" }, ["/Game/Maps/kg_DLC/umap/kg_06/kg_06_CheckMap"] = new Map { Name = "Group Fight with Replica Xehanorts (explorable)" }, ["/Game/Maps/kg_DLC/umap/kg_07/kg_07_CheckMap"] = new Map { Name = "Connect the Dots/Keyholes (explorable)" }, ["/Game/Maps/kg_DLC/umap/kg_08/kg_08_CheckMap"] = new Map { Name = "Terranort fight (explorable)" }, ["/Game/Levels/bt/bt_01/bt_01"] = new Map { Name = "The Stairway to the Sky" }, ["/Game/Maps/bt/umap/bt_01/bt_01_CheckMap"] = new Map { Name = "The Stairway to the Sky (explorable)" }, ["/Game/Levels/bt/bt_02/bt_02"] = new Map { Name = "The Stairway to the Sky - Deformed" }, ["/Game/Maps/bt/umap/bt_02/bt_02_CheckMap"] = new Map { Name = "The Stairway to the Sky - Deformed (explorable)" }, ["/Game/Levels/bt/bt_03/bt_03"] = new Map { Name = "The Stairway to the Sky - Underwater" }, ["/Game/Maps/bt/umap/bt_03/bt_03_CheckMap"] = new Map { Name = "The Stairway to the Sky - Underwater (explorable)" }, ["/Game/Levels/bt/bt_04/bt_04"] = new Map { Name = "The Stairway to the Sky - Destroyed" }, ["/Game/Maps/bt/umap/bt_04/bt_04_CheckMap"] = new Map { Name = "The Stairway to the Sky - Destroyed (explorable)" }, ["/Game/Levels/bt_DLC/bt_07/bt_07"] = new Map { Name = "Breezy Quarter" }, ["/Game/Maps/bt_DLC/umap/bt_07/bt_07_CheckMap"] = new Map { Name = "Breezy Quarter (explorable)" }, ["/Game/Levels/bt_DLC/bt_08/bt_08"] = new Map { Name = "The Stairway to the Sky (ReMind)" }, ["/Game/Levels/bt/bt_50/bt_50"] = new Map { Name = "Chess room (cutscene)" }, ["/Game/Maps/bt/umap/bt_50/bt_50"] = new Map { Name = "Chess room (explorable)" }, ["/Game/Levels/bt_DLC/bt_51/bt_51"] = new Map { Name = "Blank screen" }, ["/Game/Levels/yt/yt_50/yt_50"] = new Map { Name = "Yen Sid Tower (cutscene)" }, ["/Game/Maps/yt/umap/yt_50/yt_50_CheckMap"] = new Map { Name = "Yen Sid Tower - Room" }, ["/Game/Maps/yt/umap/yt_50/yt_50_tower"] = new Map { Name = "Yen Sid Tower - Tower garden" }, ["/Game/Maps/dc/umap/dc_50/dc_50_basemap"] = new Map { Name = "Disney Castle (keep falling to explore)" }, ["/Game/Levels/ew/ew_01/ew_01"] = new Map { Name = "" }, ["/Game/Levels/ew/ew_02/ew_02"] = new Map { Name = "" }, ["/Game/Levels/ew_DLC/ew_03/ew_03"] = new Map { Name = "" }, ["/Game/Levels/ew_DLC/ew_04/ew_04"] = new Map { Name = "" }, ["/Game/Levels/ew/ew_21/ew_21"] = new Map { Name = "" }, ["/Game/Levels/ew/ew_22/ew_22"] = new Map { Name = "" }, ["/Game/Levels/ew/ew_23/ew_23"] = new Map { Name = "" }, ["/Game/Levels/ew/ew_24/ew_24"] = new Map { Name = "" }, ["/Game/Levels/ew/ew_25/ew_25"] = new Map { Name = "" }, ["/Game/Levels/ew/ew_26/ew_26"] = new Map { Name = "" }, ["/Game/Levels/ew/ew_27/ew_27"] = new Map { Name = "" }, ["/Game/Levels/ew/ew_28/ew_28"] = new Map { Name = "" }, ["/Game/Maps/ew/umap/ew_01/ew_01_CheckMap_WaterWorld"] = new Map { Name = "Water world (explorable)" }, ["/Game/Maps/ew/umap/ew_02/ew_02_CheckMap_Heart"] = new Map { Name = "Water world heart fragmented (explorable)" }, ["/Game/Maps/ew/umap/ew_28/ew_28_CheckMap"] = new Map { Name = "Dive into world hearts" }, ["/Game/Levels/rg_DLC/rg_01/rg_01"] = new Map { Name = "Merlin's House" }, ["/Game/Levels/rg_DLC/rg_03/rg_03"] = new Map { Name = "Garden of Assemblage" }, ["/Game/Levels/rg_DLC/rg_10/rg_10"] = new Map { Name = "Xehanort Data Battle" }, ["/Game/Levels/rg_DLC/rg_11/rg_11"] = new Map { Name = "Ansem Data Battle" }, ["/Game/Levels/rg_DLC/rg_12/rg_12"] = new Map { Name = "Xemnas Data Battle" }, ["/Game/Levels/rg_DLC/rg_13/rg_13"] = new Map { Name = "Xigbar Data Battle" }, ["/Game/Levels/rg_DLC/rg_14/rg_14"] = new Map { Name = "Luxord Data Battle" }, ["/Game/Levels/rg_DLC/rg_15/rg_15"] = new Map { Name = "Larxene Data Battle" }, ["/Game/Levels/rg_DLC/rg_16/rg_16"] = new Map { Name = "Marluxia Data Battle" }, ["/Game/Levels/rg_DLC/rg_17/rg_17"] = new Map { Name = "Saix Data Battle" }, ["/Game/Levels/rg_DLC/rg_18/rg_18"] = new Map { Name = "Terranort Data Battle" }, ["/Game/Levels/rg_DLC/rg_19/rg_19"] = new Map { Name = "Riku Data Battle" }, ["/Game/Levels/rg_DLC/rg_20/rg_20"] = new Map { Name = "Vanitas Data Battle" }, ["/Game/Levels/rg_DLC/rg_21/rg_21"] = new Map { Name = "Young Xehanort Data Battle" }, ["/Game/Levels/rg_DLC/rg_22/rg_22"] = new Map { Name = "Xion Data Battle" }, ["/Game/Levels/rg/rg_50/rg_50"] = new Map { Name = "Radiant Garden (cutscene)" }, ["/Game/Levels/rg/rg_51/rg_51"] = new Map { Name = "Radiant Garden (cutscene)" }, ["/Game/Maps/rg_DLC/umap/rg_01/rg_01_CheckMap"] = new Map { Name = "Radiant Garden (explorable)" }, ["/Game/Maps/rg_DLC/umap/rg_10/rg_10_CheckMap"] = new Map { Name = "Organization XIII Battle Map (explorable)" }, ["/Game/Levels/dw/dw_21/dw_21"] = new Map { Name = "" }, ["/Game/Maps/dw/umap/dw_21/dw_21_CheckMap"] = new Map { Name = "Dark World (playable)" }, ["/Game/Levels/dw_DLC/dw_22/dw_22"] = new Map { Name = "" }, ["/Game/Levels/dw_DLC/dw_22/dw"] = new Map { Name = "" }, ["/Game/Levels/dw/dw_71/dw_71"] = new Map { Name = "" }, ["/Game/Levels/dw/dw_71/dw"] = new Map { Name = "" }, ["/Game/Maps/dw/umap/dw_71/dw_71_CheckMap"] = new Map { Name = "Dark World (playable cutscene)" }, ["/Game/Levels/wm/wm_01/wm_01"] = new Map { Name = "World Map" }, ["/Game/Levels/po/po_01/po_01"] = new Map { Name = "" }, ["/Game/Levels/po/po_02/po_02"] = new Map { Name = "" }, ["/Game/Levels/po/po_03/po_03"] = new Map { Name = "" }, ["/Game/Levels/po/po_04/po_04"] = new Map { Name = "" }, ["/Game/Levels/di/di_50/di_50"] = new Map { Name = "Destiny Island (infinite loading)" }, ["/Game/Levels/di/di_50/di"] = new Map { Name = "Destiny Island (cutscene)" }, ["/Game/Maps/di/umap/di_50/di_50_CheckMap"] = new Map { Name = "Destiny Island (playable)" }, ["/Game/Levels/gm/gm_01/gm_01"] = new Map { Name = "Starlight Way" }, ["/Game/Levels/gm/gm_02/gm_02"] = new Map { Name = "Misty Stream" }, ["/Game/Levels/gm/gm_03/gm_03"] = new Map { Name = "Eclipse Galaxy" }, ["/Game/Levels/gm/gm_50/gm"] = new Map { Name = "Gummiship (cutscene)" }, ["/Game/Maps/gm/umap/gm_50/gm_50_CheckMap"] = new Map { Name = "Gummiship (explorable)" }, ["/Game/Maps/gm/umap/gm_02/gm_02_Tornado_Map"] = new Map { Name = "Gummiship - Tornado map" }, ["/Game/Levels/sf/sf_50/sf_50"] = new Map { Name = "" }, ["/Game/Levels/sf/sf_50/sf"] = new Map { Name = "" }, ["/Game/Levels/sp/sp_01/sp_01"] = new Map { Name = "" }, ["/Game/Levels/ss/ss"] = new Map { Name = "" }, ["/Game/Levels/ss_DLC/ss_01/ss_01"] = new Map { Name = "Shibuya - Yozora Fight" }, ["/Game/Maps/ss_DLC/umap/ss_01/ss_01_CheckMap"] = new Map { Name = "Shibuya (explorable)" }, ["/Game/Levels/ss/ss_50/ss_50"] = new Map { Name = "" }, ["/Game/Levels/ss/ss_50/ss"] = new Map { Name = "" }, ["/Game/Levels/ss_DLC/ss_51/ss"] = new Map { Name = "DLC secret ending" }, ["/Game/Levels/ex/ex_21/ex_21"] = new Map { Name = "Battlegate 1, Olympus" }, ["/Game/Levels/ex/ex_22/ex_22"] = new Map { Name = "Battlegate 2, Olympus" }, ["/Game/Levels/ex/ex_23/ex_23"] = new Map { Name = "Battlegate 3, Twilight Town" }, ["/Game/Levels/ex/ex_24/ex_24"] = new Map { Name = "Battlegate 4, Toy Box" }, ["/Game/Levels/ex/ex_25/ex_25"] = new Map { Name = "Battlegate 5, Toy Box" }, ["/Game/Levels/ex/ex_26/ex_26"] = new Map { Name = "Battlegate 6, Kingdom of Corona" }, ["/Game/Levels/ex/ex_27/ex_27"] = new Map { Name = "Battlegate 7, Kingdom of Corona" }, ["/Game/Levels/ex/ex_28/ex_28"] = new Map { Name = "Unused battlegate" }, ["/Game/Levels/ex/ex_29/ex_29"] = new Map { Name = "Battlegate 8, Monstropolis" }, ["/Game/Levels/ex/ex_30/ex_30"] = new Map { Name = "Unused battlegate" }, ["/Game/Levels/ex/ex_31/ex_31"] = new Map { Name = "Battlegate 9, Arendelle" }, ["/Game/Levels/ex/ex_32/ex_32"] = new Map { Name = "Unused battlegate" }, ["/Game/Levels/ex/ex_33/ex_33"] = new Map { Name = "Battlegate 10, Caribbean" }, ["/Game/Levels/ex/ex_34/ex_34"] = new Map { Name = "Battlegate 11, San Fransokyo" }, ["/Game/Levels/ex/ex_35/ex_35"] = new Map { Name = "Battlegate 12, San Fransokyo" }, ["/Game/Levels/ex/ex_36/ex_36"] = new Map { Name = "Unused battlegate" }, ["/Game/Levels/ex/ex_37/ex_37"] = new Map { Name = "Battlegate 13, Keyblade Graveyard" }, ["/Game/Levels/ex/ex_38/ex_38"] = new Map { Name = "Battlegate 14, Keyblade Graveyard" }, ["/Game/Levels/ex/ex_39/ex_39"] = new Map { Name = "Battlegate 0, Battlegate at Keyblade Graveyard" }, ["/Game/Levels/ex/ex_40/ex_40"] = new Map { Name = "Unused battlegate" }, }; } } ================================================ FILE: KHSave.Lib3/Presets/Presets.Story.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Lib3.Types; using System.Collections.Generic; using System.Linq; using static KHSave.Lib3.Types.StoryLabelTypeBt; using static KHSave.Lib3.Types.StoryLabelTypeBx; using static KHSave.Lib3.Types.StoryLabelTypeCa; using static KHSave.Lib3.Types.StoryLabelTypeCaChartLastAccess; using static KHSave.Lib3.Types.StoryLabelTypeCaShipRide; using static KHSave.Lib3.Types.StoryLabelTypeCaPortroyalSearch; using static KHSave.Lib3.Types.StoryLabelTypeCs; using static KHSave.Lib3.Types.StoryLabelTypeDi; using static KHSave.Lib3.Types.StoryLabelTypeDp; using static KHSave.Lib3.Types.StoryLabelTypeDw; using static KHSave.Lib3.Types.StoryLabelTypeEw; using static KHSave.Lib3.Types.StoryLabelTypeEwSub; using static KHSave.Lib3.Types.StoryLabelTypeEwMission; using static KHSave.Lib3.Types.StoryLabelTypeEwRa; using static KHSave.Lib3.Types.StoryLabelTypeEwMi; using static KHSave.Lib3.Types.StoryLabelTypeEwTs; using static KHSave.Lib3.Types.StoryLabelTypeEwCa; using static KHSave.Lib3.Types.StoryLabelTypeEwFz; using static KHSave.Lib3.Types.StoryLabelTypeFz; using static KHSave.Lib3.Types.StoryLabelTypeFzMinigame; using static KHSave.Lib3.Types.StoryLabelTypeGm; using static KHSave.Lib3.Types.StoryLabelTypeGm1; using static KHSave.Lib3.Types.StoryLabelTypeGm2; using static KHSave.Lib3.Types.StoryLabelTypeGm3; using static KHSave.Lib3.Types.StoryLabelTypeGm3sub; using static KHSave.Lib3.Types.StoryLabelTypeGmSys; using static KHSave.Lib3.Types.StoryLabelTypeGmLevelUp; using static KHSave.Lib3.Types.StoryLabelTypeHe; using static KHSave.Lib3.Types.StoryLabelTypeHeSub; using static KHSave.Lib3.Types.StoryLabelTypeKg; using static KHSave.Lib3.Types.StoryLabelTypeKgA; using static KHSave.Lib3.Types.StoryLabelTypeKgB; using static KHSave.Lib3.Types.StoryLabelTypeKgC; using static KHSave.Lib3.Types.StoryLabelTypeKgD; using static KHSave.Lib3.Types.StoryLabelTypeMi; using static KHSave.Lib3.Types.StoryLabelTypePo; using static KHSave.Lib3.Types.StoryLabelTypeRa; using static KHSave.Lib3.Types.StoryLabelTypeRaDandelion; using static KHSave.Lib3.Types.StoryLabelTypeRaRabbit; using static KHSave.Lib3.Types.StoryLabelTypeRaRainbow; using static KHSave.Lib3.Types.StoryLabelTypeRaBird; using static KHSave.Lib3.Types.StoryLabelTypeRg; using static KHSave.Lib3.Types.StoryLabelTypeSf; using static KHSave.Lib3.Types.StoryLabelTypeTs; using static KHSave.Lib3.Types.StoryLabelTypeTsSub; using static KHSave.Lib3.Types.StoryLabelTypeTt; using static KHSave.Lib3.Types.StoryLabelTypeTtPo; using static KHSave.Lib3.Types.StoryLabelTypeTtRemy; using static KHSave.Lib3.Types.StoryLabelTypeWmHe; using static KHSave.Lib3.Types.StoryLabelTypeWmTt; using static KHSave.Lib3.Types.StoryLabelTypeWmRa; using static KHSave.Lib3.Types.StoryLabelTypeWmTs; using static KHSave.Lib3.Types.StoryLabelTypeWmMi; using static KHSave.Lib3.Types.StoryLabelTypeWmFz; using static KHSave.Lib3.Types.StoryLabelTypeWmCa; using static KHSave.Lib3.Types.StoryLabelTypeWmBx; using static KHSave.Lib3.Types.StoryLabelTypeWmKg; using static KHSave.Lib3.Types.StoryLabelTypeGameBattle; using static KHSave.Lib3.Types.StoryLabelTypeGameShop; using static KHSave.Lib3.Types.StoryLabelTypeYt; using static KHSave.Lib3.Types.StoryLabelTypeBtDlc8; using static KHSave.Lib3.Types.StoryLabelTypeBtDlc7; using static KHSave.Lib3.Types.StoryLabelTypeBtDlc7Monument; using static KHSave.Lib3.Types.StoryLabelTypeKgDlc; using static KHSave.Lib3.Types.StoryLabelTypeKgDlc5c; using static KHSave.Lib3.Types.StoryLabelTypeKgDlc5d; using static KHSave.Lib3.Types.StoryLabelTypeKgDlcCharSelect; using static KHSave.Lib3.Types.StoryLabelTypeRgDlc; using static KHSave.Lib3.Types.StoryLabelTypeSsDlc; using static KHSave.Lib3.Types.StoryLabelTypeSsDlcSub; namespace KHSave.Lib3.Presets { public static partial class Presets { private static Dictionary ToStoryLabel(this Dictionary dictionary) where T : struct => dictionary.ToDictionary( x => (int)(object)x.Key, x => string.IsNullOrEmpty(x.Value) ? x.Key.ToString() : x.Value ); public static Dictionary> STORY { get; } = new Dictionary> { [StoryFlagType.gameflow_BT] = new Dictionary { [BT_INIT] = "Beginning", [BT_EVENT_bt901] = "Before Mysterious Adversaries", [BT_EVENT_bt902] = "Mysterious Adversaries", [BT_BATTLE_REPLICA] = "Stairway to the Sky (Part 1)", [BT_EVENT_bt903] = "Confront Armored Xehanort once you are duly prepared!", [BT_EVENT_bt904] = "Stairway to the Sky (Part 2)", [BT_EVENT_RTEV_ms020s] = "Cutscene before Armored Xehanort (1st Phase)", [BT_EVENT_RTEV_ms020s] = "Armored Xehanort (1st Phase)", [BT_EVENT_RTEV_ms020e] = "Armored Xehanort (2nd Phase) [Cutscene before fight]", [BT_EVENT_RTEV_ms030s] = "Cutscene before Armored Xehanort (2nd Phase)", [BT_BATTLE_ARMOR_02] = "Armored Xehanort (2nd Phase)", [BT_EVENT_RTEV_ms030e] = "Armored Xehanort (3rd Phase) [Cutscene before fight]", [BT_EVENT_RTEV_ms040s] = "Armored Xehanort (3rd Phase)", [BT_EVENT_bt905] = "One Sky, One Destiny cutscene", [BT_BATTLE_MASTER_01] = "Final battle pt. 1", [BT_EVENT_RTEV_ms060] = "Final battle middle cutscene", [BT_BATTLE_MASTER_02] = "Final battle pt. 2", [BT_EVENT_bt906] = "End of battle", [BT_EVENT_bt907] = "Checkmate (Part 2)", [BT_EVENT_bt908] = "Checkmate (Part 3)", [BT_END] = "Story Done", }.ToStoryLabel(), [StoryFlagType.gameflow_BX] = new Dictionary { [BX_INIT] = "Beginning", [BX_WORLD_VISIT1] = "First visit", [BX_BRIDGE_MISSION1] = "Mission 1", [BX_BRIDGE_RTEV1] = "Bridge Heartless", [BX_BRIDGE_MISSION2] = "Mission 2", [BX_BRIDGE_RTEV2] = "Rock Troll II", [BX_BRIDGE_MISSION3] = "The AR Device", [BX_GARAGE_EVENT1] = "Before Flash Tracer", [BX_CENTRAL_RTEV1] = "", [BX_CENTRAL_MISSON1] = "", [BX_CENTRAL_MISSON1] = "", [BX_CENTRAL_EVENT1] = "", [BX_GARAGE_EVENT2] = "", [BX_CENTRAL_RTEV2] = "", [BX_CENTRAL_MISSON2] = "", [BX_CENTRAL_RTEV2_2] = "", [BX_CENTRAL_MISSON2_2] = "", [BX_CENTRAL_RTEV3] = "", [BX_CENTRAL_BATTLE1] = "", [BX_CENTRAL_EVENT2] = "", [BX_BRIDGE_EVENT1] = "Microbots", [BX_CENTRAL_EVENT3] = "Before Darkubes I", [BX_CENTRAL_RTEV4] = "Darkubes I", [BX_CENTRAL_BATTLE2] = "After Darkubes I", [BX_CENTRAL_EVENT4] = "", [BX_CENTRAL_MISSON3] = "Rescue Big Hero 6", [BX_CENTRAL_EVENT5] = "Darkubes II", [BX_CENTRAL_BATTLE3] = "A Riku From the Past?", [BX_CENTRAL_EVENT6] = "The First Baymax", [BX_GARAGE_EVENT3] = "Friend of Yours?", [BX_GARAGE_EVENT3b] = "Before Dark Baymax", [BX_CENTRAL_EVENT7] = "", [BX_CENTRAL_BATTLE4] = "", [BX_CENTRAL_EVENT7_2] = "", [BX_CENTRAL_EVENT7] = "", [BX_GARAGE_EVENT4] = "Subdue Dark Baymax!", [BX_END] = "Story Done (night)", [BX_END_DAY] = "Story Done (day)", }.ToStoryLabel(), [StoryFlagType.gameflow_CA] = new Dictionary { [CA_INIT] = "Beginning", [CA_WORLD_VISIT1] = "Start of the World", [CA_WORLD_VISIT2] = "Don't let the black pearl escape", [CA_DAVY_JONES_ROCKER_MISSION_CHASE] = "", [CA_DAVY_JONES_ROCKER_MISSION_CHASE_BOSS] = "", [CA_WORLDEND_EVENT1] = "Sail to the island with the two peaks!", [CA_WORLDEND_SHIP_TUTORIAL] = "Ship tutorial", [CA_WORLDEND_SHIPBATTLE] = "Ship first battle", [CA_WORLDEND_EVENT2] = "", [CA_WORLDEND_EVENT3] = "", [CA_WORLDEND_EVENT3] = "", [CA_SEA_EVENT1] = "", [CA_SEA_BATTLE_FLYING] = "", [CA_SEA_EVENT2A] = "", [CA_SEA_EVENT2B] = "", [CA_SEA_EVENT2C] = "", [CA_ISLAND_EVENT1] = "", [CA_ISLAND_EVENT2] = "", [CA_ISLAND_BATTLE_BIGFISH] = "", [CA_ISLAND_EVENT3] = "", [CA_ISLAND_EVENT4] = "", [CA_SEA_EVENT3] = "", [CA_SEA_MISSION_SHIPRACE] = "Ship race", [CA_SEA_EVENT4] = "", [CA_SEA_BATTLE_SHIP1] = "", [CA_SEA_BATTLE_SHIPBOARD] = "", [CA_PORTROYAL_EVENT1] = "", [CA_PORTROYAL_MISSION_CLEAR] = "", [CA_PORTROYAL_EVENT2] = "", [CA_PORTROYAL_EVENT3] = "", [CA_SEA_WATCH_DESTINATION] = "", [CA_SEA_EVENT6] = "", [CA_SEA_BATTLE_SHIP2] = "", [CA_SEA_EVENT7] = "", [CA_MAELSTROM_EVENT1] = "", [CA_MAELSTROM_BATTLE1] = "", [CA_MAELSTROM_EVENT2] = "", [CA_MAELSTROM_BATTLE2] = "", [CA_MAELSTROM_EVENT3] = "", [CA_END] = "Story Done", }.ToStoryLabel(), [StoryFlagType.gameflow_CA_chart_last_access] = new Dictionary { [CA_chart_last_access_01] = "", [CA_chart_last_access_02] = "", [CA_chart_last_access_03] = "", [CA_chart_last_access_04] = "", [CA_chart_last_access_05] = "", [CA_chart_last_access_06] = "", [CA_chart_last_access_07] = "", [CA_chart_last_access_08] = "", [CA_chart_last_access_09] = "", [CA_chart_last_access_10] = "", [CA_chart_last_access_11] = "", [CA_chart_last_access_12] = "", [CA_chart_last_access_13] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_CA_ship_ride_type] = new Dictionary { [CA_ship_ride_type_01] = "", [CA_ship_ride_type_02] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_CA_Sub_Portroyal_Search] = new Dictionary { [CA_Sub_Portroyal_Search_STEP_01] = "", [CA_Sub_Portroyal_Search_STEP_02] = "", [CA_Sub_Portroyal_Search_STEP_03] = "", [CA_Sub_Portroyal_Search_STEP_04] = "", [CA_Sub_Portroyal_Search_STEP_05] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_CS] = new Dictionary { [CS_INIT] = "", [CS_EVENT_10] = "", [CS_MISSION_10] = "", [CS_EVENT_20] = "", [CS_MISSION_20] = "", [CS_EVENT_30] = "", [CS_EVENT_40] = "", [CS_MISSION_30] = "", [CS_EVENT_50] = "", [CS_EVENT_60] = "", [CS_MISSION_40] = "", [CS_EVENT_70] = "", [CS_END] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_DI] = new Dictionary { [DI_INIT] = "A Guiding Key (Part 2)", [DI_EVENT1] = "Return to the Light (Part 2)", [DI_EVENT2] = "A Replica's Resolve Pt. 1", [DI_EVENT3] = "The Papou Fruit", [DI_EVENT4] = "Last cutscene", [DI_END] = "Story Done", }.ToStoryLabel(), [StoryFlagType.gameflow_DP] = new Dictionary { [DP_INIT] = "Beginning", [DP_EVENT1] = "Castle Oblivion Is Unlocked", [DP_EVENT2] = "Before Vanitas fight", [DP_EVENT3] = "Cutscene before Vanitas fight", [DP_BATTLE_1] = "Vanitas fight", [DP_EVENT4] = "An End to Slumber (Part 1) (After Vanitas)", [DP_EVENT5] = "An End to Slumber (Part 2)", [DP_EVENT6] = "An End to Slumber (Part 3)", [DP_END] = "Story Done", }.ToStoryLabel(), [StoryFlagType.gameflow_DW] = new Dictionary { [DW_INIT] = "A Dwindling Trail", [DW_EVENT1] = "The Dark Margin", [DW_EVENT2] = "Demon Tower cutscene", [DW_BATTLE_TOWER] = "Demon Tower battle I", [DW_EVENT3] = "An Unexpected Encounter", [DW_EVENT4] = "Riku and the King's Peril", [DW_EVENT5] = "Too Late", [DW_EVENT6] = "Demon Tower cutscene II", [DW_BATTLE_AntiAQUA_RIKU] = "Demon Tower battle II", [DW_EVENT7] = "Sora arrives", [DW_BATTLE_AntiAQUA_SORA] = "Anti-Aqua fight (Sora)", [DW_EVENT8] = "Return to the Light (Part 1)", [DW_END] = "Story Done", }.ToStoryLabel(), [StoryFlagType.gameflow_EW] = new Dictionary { [EW_INIT] = "Beginning", [EW_BASE_TUTORIAL] = "Base tutorial", [EW_FIRST_CHOICE1] = "Choice", [EW_FIRST_EVENT1] = "Cutscene before question 1", [EW_FIRST_QUESTION1] = "Question 1", [EW_FIRST_EVENT2] = "Cutscene before question 2", [EW_FIRST_QUESTION2] = "Question 2", [EW_FIRST_EVENT3] = "", [EW_FIRST_EVENT4] = "", [EW_ACTION_TUTORIAL] = "Darkside Boss Battle", [EW_FIRST_EVENT5] = "End of tutorial", [EW_SECOND_EVENT1] = "", [EW_SECOND_MISSION1] = "", [EW_END] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_EW_Sub_TESTB] = new Dictionary { [EW_Sub_INT] = "Beginning", [EW_Sub_EVENT1] = "", [EW_Sub_EVENT2] = "", [EW_Sub_EVENT3] = "", [EW_Sub_EVENT4] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_EW_MISSION] = new Dictionary { [EW_MISSION_INIT] = "", [EW_MISSION_EVENT_01] = "", [EW_MISSION_EVENT_02] = "", [EW_MISSION_EVENT_02_2] = "", [EW_MISSION_EVENT_03] = "", [EW_MISSION_BATTLE_HE] = "", [EW_MISSION_EVENT_04] = "", [EW_MISSION_EVENT_05] = "", [EW_MISSION_EVENT_06] = "", [EW_MISSION_EVENT_07] = "", [EW_MISSION_BATTLE_BX] = "", [EW_MISSION_EVENT_08] = "", [EW_MISSION_EVENT_09] = "", [EW_MISSION_END] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_EW_MISSION_RA] = new Dictionary { [EW_MISSION_RA_START] = "", [EW_MISSION_RA_EVENT_01] = "", [EW_MISSION_RA_BATTLE_01] = "", [EW_MISSION_RA_EVENT_02] = "", [EW_MISSION_RA_END] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_EW_MISSION_MI] = new Dictionary { [EW_MISSION_MI_START] = "", [EW_MISSION_MI_EVENT_01] = "", [EW_MISSION_MI_BATTLE_01] = "", [EW_MISSION_MI_EVENT_02] = "", [EW_MISSION_MI_END] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_EW_MISSION_TS] = new Dictionary { [EW_MISSION_TS_START] = "", [EW_MISSION_TS_EVENT_01] = "", [EW_MISSION_TS_BATTLE_01] = "", [EW_MISSION_TS_EVENT_02] = "", [EW_MISSION_TS_END] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_EW_MISSION_CA] = new Dictionary { [EW_MISSION_CA_START] = "", [EW_MISSION_CA_EVENT_01] = "", [EW_MISSION_CA_BATTLE_01] = "", [EW_MISSION_CA_EVENT_02] = "", [EW_MISSION_CA_END] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_EW_MISSION_FZ] = new Dictionary { [EW_MISSION_FZ_START] = "", [EW_MISSION_FZ_EVENT_01] = "", [EW_MISSION_FZ_BATTLE_01] = "", [EW_MISSION_FZ_EVENT_02] = "", [EW_MISSION_FZ_END] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_EX] = new Dictionary { }.ToStoryLabel(), [StoryFlagType.gameflow_FZ] = new Dictionary { [FZ_INIT] = "Beginning", [FZ_WORLD_VISIT1] = "", [FZ_MOUNTAIN_RTEV1] = "", [FZ_MOUNTAIN_EVENT1] = "", [FZ_MOUNTAIN_BATTLE1] = "", [FZ_MOUNTAIN_EVENT2] = "", [FZ_LABYRINTH_EVENT1] = "", [FZ_ICICLE_AREA_C_EVENT1] = "", [FZ_ICICLE_AREA_C_BATTLE1] = "", [FZ_ICICLE_AREA_C_EVENT2] = "", [FZ_ICICLE_AREA_E_EVENT1] = "", [FZ_ICICLE_AREA_E_BATTLE1] = "", [FZ_ICICLE_AREA_E_EVENT2] = "", [FZ_ICICLE_AREA_F_EVENT1] = "", [FZ_ICICLE_AREA_F_BATTLE1] = "", [FZ_ICICLE_AREA_F_EVENT2] = "", [FZ_ICICLE_AREA_H_EVENT1] = "", [FZ_ICICLE_AREA_H_BATTLE1] = "", [FZ_ICICLE_AREA_H_EVENT2] = "", [FZ_LABYRINTH_WORMHOLE] = "", [FZ_LABYRINTH_EVENT2] = "", [FZ_CASTLE_EVENT1] = "", [FZ_MOUNTAIN_EVENT3] = "", [FZ_MOUNTAIN_MISSION1] = "", [FZ_STEEP_RTEV1] = "", [FZ_MOUNTAIN_BATTLE2] = "", [FZ_MOUNTAIN_EVENT4] = "", [FZ_MOUNTAIN_EVENT5] = "", [FZ_MOUNTAIN_EVENT6] = "", [FZ_MOUNTAIN_EVENT7] = "", [FZ_MOUNTAIN_EVENT8] = "", [FZ_MOUNTAIN_MISSION2] = "", [FZ_MOUNTAIN_EVENT9] = "", [FZ_MOUNTAIN_BATTLE3] = "", [FZ_MOUNTAIN_EVENT10] = "", [FZ_CASTLE_EVENT2] = "", [FZ_MOUNTAIN_BATTLE4] = "", [FZ_MOUNTAIN_EVENT11] = "", [FZ_MOUNTAIN_EVENT12] = "", [FZ_MOUNTAIN_EVENT13] = "", [FZ_MOUNTAIN_EVENT14] = "", [FZ_MOUNTAIN_MISSION3] = "", [FZ_MOUNTAIN_RTEV2] = "", [FZ_SEA_EVENT1] = "", [FZ_SEA_BATTLE1] = "", [FZ_SEA_EVENT2] = "After last cutscene", [FZ_END] = "Story Done", }.ToStoryLabel(), [StoryFlagType.gameflow_FZ_Sub_SLIDEMISSION] = new Dictionary { [FZ_Sub_SLIDEMISSION_INIT] = "Beginning", [FZ_Sub_SLIDEMISSION_CHASE] = "", [FZ_Sub_SLIDEMISSION_SLIDE1] = "", [FZ_Sub_SLIDEMISSION_SLIDE2] = "", [FZ_Sub_SLIDEMISSION_SLIDE3] = "", [FZ_Sub_SLIDEMISSION_END] = "Complete" }.ToStoryLabel(), [StoryFlagType.gameflow_GM] = new Dictionary { [GM_INIT] = "Beginning", [GM_EVENT1] = "", [GM_EVENT2] = "", [GM_EVENT3] = "", [GM_EVENT4] = "", [GM_EVENT5] = "", [GM_EVENT6] = "", [GM_EVENT7] = "", [GM_END] = "Story Done" }.ToStoryLabel(), [StoryFlagType.gameflow_GM_01] = new Dictionary { [GM_01_INIT] = "", [GM_01_END] = "" }.ToStoryLabel(), [StoryFlagType.gameflow_GM_02] = new Dictionary { [GM_02_INIT] = "", [GM_02_END] = "" }.ToStoryLabel(), [StoryFlagType.gameflow_GM_03] = new Dictionary { [GM_03_INIT] = "", [GM_03_VISIT1] = "", [GM_03_BOSS_01_START] = "", [GM_03_BOSS_01_END] = "", [GM_03_END] = "", [GM_03_VISIT10] = "" }.ToStoryLabel(), [StoryFlagType.gameflow_GM_03_SUB] = new Dictionary { [GM_03_SUB_INIT] = "", [GM_03_SUB_START] = "", [GM_03_SUB_CAMERA_01] = "", [GM_03_SUB_ARENA_02] = "", [GM_03_SUB_ARENA_03] = "", [GM_03_SUB_CAMERA_10] = "", [GM_03_SUB_BOSS] = "", [GM_03_SUB_END] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_GM_SYS] = new Dictionary { [GM_SYS_INIT] = "", [GM_SYS_EVENT1] = "", [GM_SYS_EVENT2] = "", [GM_SYS_EVENT3] = "", [GM_SYS_EVENT4] = "", [GM_SYS_EVENT5] = "", [GM_SYS_EVENT6] = "", [GM_SYS_END] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_GM_SYS_LEVELUP] = new Dictionary { [0] = "Beginning", [GM_SYS_LEVELUP_STEP_01] = "", [GM_SYS_LEVELUP_STEP_02] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_HE] = new Dictionary { [HE_INIT] = "Beginning", [HE_OLYMPUS_OPENING_EVENT] = "", [HE_OLYMPUS_VISIT1_1] = "", [HE_OLYMPUS_RTEV1_1] = "", [HE_TUTO_MAGIC_PLAY] = "", [HE_OLYMPUS_BATTLE1_1] = "", [HE_OLYMPUS_RTEV1_2] = "", [HE_TUTO_FREERUN_PLAY] = "", [HE_OLYMPUS_EVENT1_1] = "", [HE_THEBES_VISIT1] = "", [HE_THEBES_EVENT1] = "", [HE_TUTO_FREEFLOW_PLAY] = "", [HE_THEBES_BATTLE1] = "After Agora heartless", [HE_THEBES_EVENT2] = "", [HE_THEBES_RTEV1] = "", [HE_THEBES_BATTLE1_5] = "", [HE_THEBES_EVENT2_5] = "", [HE_THEBES_RTEV3] = "", [HE_THEBES_EVENT4] = "", [HE_THEBES_BATTLE2] = "", [HE_THEBES_EVENT5] = "", [HE_THEBES_EVENT6] = "", [HE_TUTO_FORMCHANGE_PLAY] = "", [HE_THEBES_BATTLE3] = "", [HE_THEBES_EVENT7] = "", [HE_THEBES_RTEV4] = "", [HE_TUTO_ATTRACTION_PLAY] = "", [HE_THEBES_BATTLE4] = "", [HE_THEBES_EVENT8] = "", [HE_OLYMPUS_EVENT1_2] = "", [HE_OLYMPUS_EVENT1] = "", [HE_OLYMPUS_RTEV1] = "", [HE_OLYMPUS_RTEV1_5] = "", [HE_OLYMPUS_RTEV2] = "", [HE_OLYMPUS_BATTLE1] = "", [HE_OLYMPUS_EVENT2] = "", [HE_OLYMPUS_EVENT3] = "Start of Realm of Gods", [HE_HEAVENLY_RTEV1] = "", [HE_HEAVENLY_BATTLE1] = "", [HE_TUTO_SHOOTFLOW_PLAY] = "", [HE_HEAVENLY_RTEV2] = "", [HE_TUTO_ATHLETICFLOW_PLAY] = "", [HE_HEAVENLY_EVENT1] = "", [HE_BOSS_BATTLE_01] = "", [HE_HEAVENLY_RTEV3] = "", [HE_BOSS_BATTLE_02] = "", [HE_HEAVENLY_EVENT2] = "", [HE_OLYMPUS_EVENT4] = "", [HE_THEBES_EVENT9] = "", [HE_END] = "Story Done", }.ToStoryLabel(), [StoryFlagType.gameflow_HE_Sub_HeraculesBoy] = new Dictionary { [HE_Sub_HeraculesBoy_Init] = "", [HE_Sub_HeraculesBoy_Start] = "", [HE_Sub_HeraculesBoy_Item_01] = "", [HE_Sub_HeraculesBoy_Item_02] = "", [HE_Sub_HeraculesBoy_Item_03] = "", [HE_Sub_HeraculesBoy_Item_04] = "", [HE_Sub_HeraculesBoy_Item_05] = "", [HE_Sub_HeraculesBoy_End] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_KG] = new Dictionary { [StoryLabelTypeKg.KG_INTERVAL_00] = "Interval - Vexen's Return", [StoryLabelTypeKg.KG_INTERVAL_01] = "Interval - The Organization's Origins", [StoryLabelTypeKg.KG_INTERVAL_02] = "Interval - cutscene", [StoryLabelTypeKg.KG_INIT] = "Beginning", [StoryLabelTypeKg.KG_WORLD_VISIT] = "1 Million Heartless", [StoryLabelTypeKg.KG_01_BATTLE1] = "KG01 Before The Final World", [StoryLabelTypeKg.KG_01_CS_KG702] = "KG01 Light Expires", [StoryLabelTypeKg.KG_END] = "Go Toward the Light (Part 1)", [StoryLabelTypeKg.KG_01_CS_KG801] = "Go Toward the Light (Part 2)", [StoryLabelTypeKg.KG_01_CS_KG802] = "Light in the Darkness", [StoryLabelTypeKg.KG_01_CS_KG851] = "Thanks, Kairi", [StoryLabelTypeKg.KG_01_CS_KG851b] = "Before Demon Tide II", [StoryLabelTypeKg.KG_01_CS_KG852] = "Demon Tide II", [StoryLabelTypeKg.KG_01_BATTLE2] = "The Light of the Past", [StoryLabelTypeKg.KG_01_CS_KG852b] = "Demon Tide II (Union Cross)", [StoryLabelTypeKg.KG_01_BATTLE3] = "A Corridor of Light", [StoryLabelTypeKg.KG_01_CS_KG853] = "The X-Blade", [StoryLabelTypeKg.KG_50_CS_KG854] = "Start of The Skein of Severance", [StoryLabelTypeKg.KG_02_CS_KG855] = "Before 1st Set of Organization XIII Fights", [StoryLabelTypeKg.KG_02_BATTLE_AB] = "Towards the end of the labyrinth", [StoryLabelTypeKg.KG_02_LABYRINTH_END] = "Before 2nd Set of Organization XIII Fights", [StoryLabelTypeKg.KG_02_RTEV_CD] = "", [StoryLabelTypeKg.KG_02_BATTLE_CD] = "Before Young Master Xehanort, Ansem, & Xemnas", [StoryLabelTypeKg.KG_02_EVENT_E_START] = "Xehanort Trio start battle", [StoryLabelTypeKg.KG_02_BATTLE_E_PHASE_01] = "Xehanort Trio phase 1", [StoryLabelTypeKg.KG_02_EVENT_E_PHASE_01_END] = "Xehanort Trio end phase 1", [StoryLabelTypeKg.KG_02_BATTLE_E_PHASE_02] = "Xehanort Trio phase 2", [StoryLabelTypeKg.KG_02_EVENT_E_PHASE_02_END] = "Xehanort Trio end phase 2", [StoryLabelTypeKg.KG_02_BATTLE_E_PHASE_03] = "Xehanort Trio phase 3", [StoryLabelTypeKg.KG_02_EVENT_E_PHASE_03_END] = "Xehanort Trio end phase 3", [StoryLabelTypeKg.KG_02_EVENT_E_END] = "Xehanort Trio end battle", [StoryLabelTypeKg.KG_END2] = "Story Done", }.ToStoryLabel(), [StoryFlagType.gameflow_KG_13_A] = new Dictionary { [KG_02_EVENT_A_INIT] = "Beginning", [KG_02_EVENT_A_START] = "", [KG_02_BATTLE_A_PHASE_01] = "", [KG_02_EVNET_A_PHASE_01_END] = "", [KG_02_BATTLE_A_PHASE_02] = "", [KG_02_EVNET_A_PHASE_02_END] = "", [KG_02_BATTLE_A_PHASE_03] = "", [KG_02_EVNET_A_PHASE_03_END] = "", [KG_02_EVENT_A_END] = "Fight Done", }.ToStoryLabel(), [StoryFlagType.gameflow_KG_13_B] = new Dictionary { [KG_02_EVENT_B_INIT] = "Beginning", [KG_02_EVENT_B_START] = "", [KG_02_BATTLE_B_PHASE_01] = "", [KG_02_EVENT_B_PHASE_01_END] = "", [KG_02_BATTLE_B_PHASE_02] = "", [KG_02_EVENT_B_PHASE_02_END] = "", [KG_02_BATTLE_B_PHASE_03] = "", [KG_02_EVENT_B_PHASE_03_END] = "", [KG_02_BATTLE_B_PHASE_04] = "", [KG_02_EVENT_B_PHASE_04_END] = "", [KG_02_EVENT_B_END] = "Fight Done", }.ToStoryLabel(), [StoryFlagType.gameflow_KG_13_C] = new Dictionary { [StoryLabelTypeKgC.KG_02_EVENT_C_INIT] = "Beginning", [StoryLabelTypeKgC.KG_02_EVENT_C_START] = "", [StoryLabelTypeKgC.KG_02_BATTLE_C_PHASE_01] = "", [StoryLabelTypeKgC.KG_02_EVENT_C_PHASE_01_END] = "", [StoryLabelTypeKgC.KG_02_BATTLE_C_PHASE_02] = "", [StoryLabelTypeKgC.KG_02_EVENT_C_PHASE_02_END] = "", [StoryLabelTypeKgC.KG_02_EVENT_C_END] = "Fight Done", }.ToStoryLabel(), [StoryFlagType.gameflow_KG_13_D] = new Dictionary { [StoryLabelTypeKgD.KG_02_EVENT_D_INIT] = "Beginning", [StoryLabelTypeKgD.KG_02_EVENT_D_START] = "", [StoryLabelTypeKgD.KG_02_BATTLE_D_PHASE1_01] = "", [StoryLabelTypeKgD.KG_02_EVENT_D_PHASE_01_END] = "", [StoryLabelTypeKgD.KG_02_BATTLE_D_PHASE1_02] = "", [StoryLabelTypeKgD.KG_02_EVENT_D_PHASE_02_END] = "", [StoryLabelTypeKgD.KG_02_EVENT_D_END] = "Fight Done", }.ToStoryLabel(), [StoryFlagType.gameflow_MI] = new Dictionary { [MI_INIT] = "Beginning", [MI_WORLD_VISIT1] = "", [MI_ENTRANCE_EVENT1] = "", [MI_ENTRANCE_BATTLE1] = "", [MI_ENTRANCE_EVENT2] = "", [MI_SCARE_EVENT1] = "", [MI_SCARE_BATTLE1] = "", [MI_SCARE_EVENT2] = "", [MI_SCARE_EVENT3] = "", [MI_DOOR_REAL1] = "", [MI_DOOR_MISSION1] = "", [MI_DOOR_EVENT1] = "", [MI_DOOR_MISSION2] = "", [MI_DOOR_EVENT2] = "", [MI_DOOR_REAL2] = "", [MI_DOOR_MISSION3] = "", [MI_DOOR_EVENT3] = "", [MI_FACTORY_EVENT1] = "", [MI_FACTORY_EVENT2] = "", [MI_FACTORY_MISSION1] = "", [MI_FACTORY_REAL1] = "", [MI_FACTORY_EVENT3] = "", [MI_FACTORY_LIFT] = "", [MI_FACTORY_REAL2] = "", [MI_FACTORY_BATTLE1] = "", [MI_FACTORY_REAL3] = "", [MI_FACTORY_BATTLE2] = "", [MI_FACTORY_REAL4] = "", [MI_FACTORY_REAL5] = "", [MI_FACTORY_MISSION2] = "", [MI_FACTORY_REAL6] = "", [MI_FACTORY_EVENT4] = "", [MI_FACTORY_MISSION3] = "", [MI_FACTORY_EVENT5] = "", [MI_PLANT_EVENT1] = "", [MI_PLANT_EVENT2] = "", [MI_PLANT_BATTLE1] = "", [MI_PLANT_EVENT3] = "", [MI_PLANT_REAL1] = "", [MI_PLANT_BATTLE2] = "", [MI_PLANT_EVENT4] = "", [MI_PLANT_REAL2] = "", [MI_PLANT_BATTLE3] = "", [MI_PLANT_EVENT5] = "", [MI_DOORBOSS_EVENT1] = "", [MI_DOORBOSS_BATTLE1] = "", [MI_DOORBOSS_EVENT2] = "", [MI_SCARE_EVENT4] = "", [MI_ENTRANCE_EVENT3] = "", [MI_END] = "Story Done", }.ToStoryLabel(), [StoryFlagType.gameflow_MI_Sub_INT] = new Dictionary { [0] = "Beginning", }.ToStoryLabel(), [StoryFlagType.gameflow_PO] = new Dictionary { [PO_INIT] = "Beginning", [PO_EVENT_01] = "First minigame beaten", [PO_VEGETABLE_MINIGAME_01] = "Before second minigame", [PO_EVENT_02] = "Second minigame beaten", [PO_ORCHARD_MINIGAME_01] = "Before third minigame", [PO_EVENT_03] = "Third minigame beaten", [PO_FLOWER_MINIGAME_01] = "Before fourth minigame", [PO_EVENT_04] = "Fourth minigame beaten", [PO_END] = "Story Done", }.ToStoryLabel(), [StoryFlagType.gameflow_RA] = new Dictionary { [RA_INIT] = "Beginning", [RA_WORLD_VISIT1] = "", [RA_FOREST_EVENT1] = "", [RA_FOREST_BATTLE1] = "", [RA_FOREST_EVENT2] = "", [RA_FOREST_EVENT3] = "", [RA_TOWER_EVENT1] = "", [RA_FOREST_EVENT4] = "", [RA_FOREST_EVENT5] = "", [RA_FOREST_EVENT6] = "", [RA_FOREST_BATTLE2] = "", [RA_TOWER_EVENT2] = "", [RA_FOREST_REAL10] = "", [RA_FOREST_EVENT20] = "", [RA_FOREST_BATTLE10] = "", [RA_FOREST_EVENT21] = "", [RA_FOREST_EVENT22] = "", [RA_FOREST_EVENT23] = "", [RA_FOREST_REAL22] = "", [RA_FOREST_REAL25] = "", [RA_FOREST_BATTLE20] = "", [RA_FOREST_BATTLE21] = "", [RA_FOREST_REAL30] = "", [RA_FOREST_REAL40] = "", [RA_CASTLE_EVENT1] = "", [RA_CASTLE_EVENT2] = "", [RA_CASTLE_MISSION1] = "", [RA_CASTLE_EVENT3] = "", [RA_CASTLE_BATTLE1] = "", [RA_FOREST_EVENT30] = "", [RA_TOWER_EVENT3] = "", [RA_FOREST_EVENT31] = "", [RA_FOREST_EVENT32] = "Going back to Rapunzel's Tower", [RA_FOREST_REAL50] = "", [RA_FOREST_BATTLE30] = "", [RA_TOWER_EVENT4] = "", [RA_TOWER_EVENT5] = "", [RA_FOREST_EVENT41] = "", [RA_FOREST_BATTLEBOSS] = "", [RA_TOWER_EVENT6] = "", [RA_FOREST_EVENT42] = "", [RA_FOREST_EVENT50] = "", [RA_END] = "Story Done", }.ToStoryLabel(), [StoryFlagType.gameflow_RA_Dandelion] = new Dictionary { [RA_DANDELION_INIT] = "", [RA_DANDELION_START] = "", [RA_DANDELION_END] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_RA_Rabbit] = new Dictionary { [RA_RABBIT_INIT] = "", [RA_RABBIT_START] = "", [RA_RABBIT_FINISH] = "", [RA_RABBIT_END] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_RA_Rainbow] = new Dictionary { [RA_RAINBOW_INIT] = "", [RA_RAINBOW_START] = "", [RA_RAINBOW_END] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_RA_Bird] = new Dictionary { [RA_BIRD_INIT] = "", [RA_BIRD_START] = "", [RA_BIRD_END] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_RG] = new Dictionary { [RG_INIT] = "Terra's Whereabouts", [RG_EVENT1] = "The Missing Scientist", [RG_EVENT2] = "The Benched Enact a Plan", [RG_EVENT3] = "A Present from Vexen", [RG_EVENT4] = "Last cutscene", [RG_END] = "Story Done", }.ToStoryLabel(), [StoryFlagType.gameflow_SF] = new Dictionary { [SF_INIT] = "Beginning", [SF_EVENT1] = "Nothing's As It Should Be", [SF_EVENT2] = "Second cutscene", [SF_END] = "Story Done", }.ToStoryLabel(), [StoryFlagType.gameflow_TS] = new Dictionary { [TS_INIT] = "Beginning", [TS_GAME_CM1] = "", [TS_WORLD_VISIT1] = "", [TS_ANDY_BATTLE1] = "", [TS_ANDY_EVENT1] = "", [TS_ANDY_EVENT2] = "", [TS_ANDY_TO_TOYSHOP] = "", [TS_HOLE_EVENT1] = "", [TS_HOLE_BATTLE1] = "", [TS_HOLE_EVENT2] = "", [TS_KAIJU_EVENT1] = "", [TS_KAIJU_BATTLE1] = "", [TS_KAIJU_EVENT2] = "", [TS_NUIGURUMI_EVENT1] = "", [TS_NUIGURUMI_EVENT2] = "", [TS_NUIGURUMI_EVENT3] = "", [TS_NUIGURUMI_EVENT4] = "", [TS_NUIGURUMI_BATTLE1] = "", [TS_NUIGURUMI_EVENT5] = "", [TS_BABYTOY_EVENT1] = "", [TS_BABYTOY_MISSION1] = "", [TS_BABYTOY_EVENT2] = "", [TS_HOLE_EVENT3] = "", [TS_GAME_EVENT1] = "", [TS_GAME_EVENT2] = "", [TS_GAME_MISSION1] = "", [TS_GAME_EVENT3] = "", [TS_ATHLETIC_EVENT1] = "", [TS_ATHLETIC_EVENT2] = "", [TS_ATHLETIC_EVENT3] = "", [TS_BOSS_EVENT1] = "", [TS_BOSS_BATTLE1] = "", [TS_HOLE_EVENT4] = "", [TS_END] = "Story Done", }.ToStoryLabel(), [StoryFlagType.gameflow_TS_Sub_GAM1] = new Dictionary { [0] = "Beginning", [TS_Sub_GAM1_EVENT1] = "", [TS_Sub_GAM1_EVENT2] = "", [TS_Sub_GAM1_EVENT3] = "", [TS_Sub_GAM1_EVENT4] = "", [TS_Sub_GAM1_EVENT5] = "", [TS_Sub_GAM1_EVENT6] = "", [TS_Sub_GAM1_EVENT7] = "", [TS_Sub_GAM1_EVENT8] = "", [TS_Sub_GAM1_EVENT9] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_TT] = new Dictionary { [TT_INIT] = "Beginning", [TT_TRM_EVENT01] = "The Neighborhood Nobodies", [TT_TRM_MISSION01] = "Hello, Good-bye", [TT_TRM_EVENT02] = "Demon Tide I", [TT_TRM_MISSION02] = "Defeat the Demon Tide!", [TT_TRM_EVENT03] = "Before The Woods Powerwilds", [TT_WODS_EVENT01] = "The Woods Powerwilds", [TT_WODS_MISSION01] = "", [TT_WODS_EVENT02] = "Before Entering the Mansion", [TT_COMP_EVENT01] = "Datascapes (Part 2)", [TT_COMP_EVENT02] = "Before The Old Mansion Fight", [TT_MANS_EVENT01] = "After The Old Mansion Fight", [TT_MANS_MISSION01] = "", [TT_MANS_EVENT02] = "The Old Mansion Fight", [TT_TRM2_EVENT01] = "Collect Ingredients", [TT_TRM2_MISSION01] = "End ingredients collection mission", [TT_TRM2_EVENT02] = "", [TT_END] = "Story Done", }.ToStoryLabel(), [StoryFlagType.gameflow_TT_PO] = new Dictionary { [TT_PO_INIT] = "", [TT_PO_TRM_EVENT01] = "", [TT_PO_TRM_EVENT02] = "", [TT_PO_END] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_TT_Remy] = new Dictionary { [0] = "Beginning", [TT_Remy_EVENT01] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_WM_WORLD_HE] = new Dictionary { [WM_WORLD_HE_CLOSED] = "", [WM_WORLD_HE_STARTED] = "", [WM_WORLD_HE_CLEARED] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_WM_WORLD_TT] = new Dictionary { [WM_WORLD_TT_CLOSED] = "", [WM_WORLD_TT_STARTED] = "", [WM_WORLD_TT_CLEARED] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_WM_WORLD_RA] = new Dictionary { [WM_WORLD_RA_CLOSED] = "", [WM_WORLD_RA_STARTED] = "", [WM_WORLD_RA_CLEARED] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_WM_WORLD_TS] = new Dictionary { [WM_WORLD_TS_CLOSED] = "", [WM_WORLD_TS_STARTED] = "", [WM_WORLD_TS_CLEARED] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_WM_WORLD_MI] = new Dictionary { [WM_WORLD_MI_CLOSED] = "", [WM_WORLD_MI_STARTED] = "", [WM_WORLD_MI_CLEARED] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_WM_WORLD_FZ] = new Dictionary { [WM_WORLD_FZ_CLOSED] = "", [WM_WORLD_FZ_STARTED] = "", [WM_WORLD_FZ_CLEARED] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_WM_WORLD_CA] = new Dictionary { [WM_WORLD_CA_CLOSED] = "", [WM_WORLD_CA_STARTED] = "", [WM_WORLD_CA_CLEARED] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_WM_WORLD_BX] = new Dictionary { [WM_WORLD_BX_CLOSED] = "", [WM_WORLD_BX_STARTED] = "", [WM_WORLD_BX_CLEARED] = "", }.ToStoryLabel(), [StoryFlagType.gameflow_WM_WORLD_KG] = new Dictionary { [WM_WORLD_KG_CLOSED] = "", [WM_WORLD_KG_STARTED] = "", [WM_WORLD_KG_CLEARED] = "", }.ToStoryLabel(), [StoryFlagType.global_GameBattleLV] = new Dictionary { [GLOBAL_GAMEBATTLELv_01] = "Lv. 1 (beginning)", [GLOBAL_GAMEBATTLELv_02] = "Lv. 2", [GLOBAL_GAMEBATTLELv_03] = "Lv. 3", [GLOBAL_GAMEBATTLELv_04] = "Lv. 4", [GLOBAL_GAMEBATTLELv_05] = "Lv. 5 (endgame)", [GLOBAL_GAMEBATTLELv_06] = "Lv. 6 (DLC beginning", [GLOBAL_GAMEBATTLELv_07] = "Lv. 7", [GLOBAL_GAMEBATTLELv_08] = "Lv. 8 (endgame)", [GLOBAL_GAMEBATTLELv_09] = "Lv. 9 (DLC endgame)", }.ToStoryLabel(), [StoryFlagType.global_GameShopLV] = new Dictionary { [GLOBAL_GAMESHOPLv_01] = "Lv. 1 (beginning)", [GLOBAL_GAMESHOPLv_02] = "Lv. 2", [GLOBAL_GAMESHOPLv_03] = "Lv. 3", [GLOBAL_GAMESHOPLv_04] = "Lv. 4", [GLOBAL_GAMESHOPLv_05] = "Lv. 5", [GLOBAL_GAMESHOPLv_06] = "Lv. 6", [GLOBAL_GAMESHOPLv_07] = "Lv. 7", [GLOBAL_GAMESHOPLv_END] = "Lv. 8 (endgame)", }.ToStoryLabel(), [StoryFlagType.gameflow_YT] = new Dictionary { [YT_INIT] = "Prelude to Adventure", [YT_EVENT1] = "A Fresh Start", [YT_EVENT2] = "A Quick Review", [YT_EVENT3] = "The Guardians of Light Gather", [YT_EVENT4] = "Beneath the Same Stars", [YT_EVENT5] = "Last cutscene", [YT_END] = "Story Done", }.ToStoryLabel(), [StoryFlagType.gameflow_BT_DLC] = new Dictionary { [BT_DLC_INIT] = "Beginning", [BT_DLC_08_EVENT_01] = "", [BT_DLC_08_EVENT_02] = "", [BT_DLC_08_BATTLE_01] = "", [BT_DLC_07_MISSION_01] = "", [BT_DLC_08_EVENT_03] = "", [BT_DLC_08_BATTLE_02] = "", [BT_DLC_08_EVENT_04] = "", [BT_DLC_END] = "Story Done", }.ToStoryLabel(), [StoryFlagType.gameflow_BT_DLC_07_BT_01] = new Dictionary { [BT_DLC_07_BT_01_INIT] = "Beginning", [BT_DLC_07_BT_01_EVENT_01] = "", [BT_DLC_07_BT_01_EVENT_02] = "", [BT_DLC_07_BT_01_BATTLE_01] = "", [BT_DLC_07_BT_01_END] = "Story Done", }.ToStoryLabel(), [StoryFlagType.gim_BT_DLC_monument] = new Dictionary { [BT_DLC_07_MONUMENT_START] = "Beginning", [BT_DLC_07_MONUMENT_STEP01] = "Step 1", [BT_DLC_07_MONUMENT_STEP02] = "Step 2", [BT_DLC_07_MONUMENT_STEP03] = "Step 3", }.ToStoryLabel(), [StoryFlagType.gameflow_KG_DLC] = new Dictionary { [StoryLabelTypeKgDlc.KG_DLC_INIT] = "Beginning", [StoryLabelTypeKgDlc.KG_DLC_WORLD_VISIT] = "", [StoryLabelTypeKgDlc.KG_DLC_04_EVENT_01] = "", [StoryLabelTypeKgDlc.KG_DLC_04_BATTLE_01] = "", [StoryLabelTypeKgDlc.KG_DLC_04_EVENT_02] = "", [StoryLabelTypeKgDlc.KG_DLC_04_BATTLE_02] = "", [StoryLabelTypeKgDlc.KG_DLC_04_EVENT_03] = "", [StoryLabelTypeKgDlc.KG_DLC_04_EVENT_05] = "", [StoryLabelTypeKgDlc.KG_DLC_04_EVENT_06] = "", [StoryLabelTypeKgDlc.KG_DLC_04_BATTLE_03] = "", [StoryLabelTypeKgDlc.KG_DLC_04_EVENT_07] = "", [StoryLabelTypeKgDlc.KG_02_EVENT_E_END] = "Between Main story and DLC", [StoryLabelTypeKgDlc.KG_DLC_06_EVENT_01] = "", [StoryLabelTypeKgDlc.KG_DLC_06_BATTLE_01] = "", [StoryLabelTypeKgDlc.KG_DLC_06_BATTLE_02] = "", [StoryLabelTypeKgDlc.KG_DLC_07_BATTLE_01] = "", [StoryLabelTypeKgDlc.KG_DLC_06_2_EVENT_01] = "", [StoryLabelTypeKgDlc.KG_DLC_06_2_BATTLE_01] = "", [StoryLabelTypeKgDlc.KG_DLC_06_2_BATTLE_02] = "", [StoryLabelTypeKgDlc.KG_DLC_05_3_EVENT_01] = "", [StoryLabelTypeKgDlc.KG_DLC_END] = "Story Done", }.ToStoryLabel(), [StoryFlagType.gameflow_KG_DLC_13_A] = new Dictionary { [KG_02_EVENT_A_INIT] = "Beginning", [KG_02_EVENT_A_START] = "", [KG_02_BATTLE_A_PHASE_01] = "", [KG_02_EVNET_A_PHASE_01_END] = "", [KG_02_BATTLE_A_PHASE_02] = "", [KG_02_EVNET_A_PHASE_02_END] = "", [KG_02_BATTLE_A_PHASE_03] = "", [KG_02_EVNET_A_PHASE_03_END] = "", [KG_02_EVENT_A_END] = "Fight Done", }.ToStoryLabel(), [StoryFlagType.gameflow_KG_DLC_13_B] = new Dictionary { [KG_02_EVENT_B_INIT] = "Beginning", [KG_02_EVENT_B_START] = "", [KG_02_BATTLE_B_PHASE_01] = "", [KG_02_EVENT_B_PHASE_01_END] = "", [KG_02_BATTLE_B_PHASE_02] = "", [KG_02_EVENT_B_PHASE_02_END] = "", [KG_02_BATTLE_B_PHASE_03] = "", [KG_02_EVENT_B_PHASE_03_END] = "", [KG_02_BATTLE_B_PHASE_04] = "", [KG_02_EVENT_B_PHASE_04_END] = "", [KG_02_EVENT_B_END] = "Fight Done", }.ToStoryLabel(), [StoryFlagType.gameflow_KG_DLC_13_C] = new Dictionary { [StoryLabelTypeKgDlc5c.KG_02_EVENT_C_INIT] = "Beginning", [StoryLabelTypeKgDlc5c.KG_02_EVENT_C_START] = "", [StoryLabelTypeKgDlc5c.KG_DLC_05_BATTLE_C_PHASE_0a] = "", [StoryLabelTypeKgDlc5c.KG_DLC_05_EVENT_C_PHASE_0a_END] = "", [StoryLabelTypeKgDlc5c.KG_02_BATTLE_C_PHASE_01] = "", [StoryLabelTypeKgDlc5c.KG_02_EVENT_C_PHASE_01_END] = "", [StoryLabelTypeKgDlc5c.KG_02_BATTLE_C_PHASE_02] = "", [StoryLabelTypeKgDlc5c.KG_02_EVENT_C_PHASE_02_END] = "", [StoryLabelTypeKgDlc5c.KG_02_EVENT_C_END] = "Fight Done", }.ToStoryLabel(), [StoryFlagType.gameflow_KG_DLC_13_D] = new Dictionary { [StoryLabelTypeKgDlc5d.KG_02_EVENT_D_INIT] = "Beginning", [StoryLabelTypeKgDlc5d.KG_02_EVENT_D_START] = "", [StoryLabelTypeKgDlc5d.KG_DLC_05_EVENT_D_EVENT_01] = "", [StoryLabelTypeKgDlc5d.KG_02_BATTLE_D_PHASE1_01] = "", [StoryLabelTypeKgDlc5d.KG_02_EVENT_D_PHASE_01_END] = "", [StoryLabelTypeKgDlc5d.KG_DLC_05_EVENT_D_PHASE_01a_END] = "", [StoryLabelTypeKgDlc5d.KG_DLC_05_BATTLE_D_PHASE_0a] = "", [StoryLabelTypeKgDlc5d.KG_DLC_05_EVENT_D_PHASE_0a_END] = "", [StoryLabelTypeKgDlc5d.KG_02_BATTLE_D_PHASE1_02] = "", [StoryLabelTypeKgDlc5d.KG_02_EVENT_D_PHASE_02_END] = "", [StoryLabelTypeKgDlc5d.KG_02_EVENT_D_END] = "Fight Done", }.ToStoryLabel(), [StoryFlagType.gameflow_KG_DLC_05_AREA_A_CHARSEL] = new Dictionary { [KG_DLC_05_AREA_A_CHARSEL_01] = "Sora", [KG_DLC_05_AREA_A_CHARSEL_02] = "Riku", }.ToStoryLabel(), [StoryFlagType.gameflow_KG_DLC_05_AREA_B_CHARSEL] = new Dictionary { [KG_DLC_05_AREA_B_CHARSEL_01] = "Sora", [KG_DLC_05_AREA_B_CHARSEL_02] = "???", }.ToStoryLabel(), [StoryFlagType.gameflow_KG_DLC_05_AREA_C_CHARSEL] = new Dictionary { [KG_DLC_05_AREA_C_CHARSEL_01] = "Sora", [KG_DLC_05_AREA_C_CHARSEL_02] = "Aqua", }.ToStoryLabel(), [StoryFlagType.gameflow_KG_DLC_05_AREA_D_CHARSEL] = new Dictionary { [KG_DLC_05_AREA_D_CHARSEL_01] = "Sora", [KG_DLC_05_AREA_D_CHARSEL_02] = "Roxas", }.ToStoryLabel(), [StoryFlagType.gameflow_KG_DLC_06_LAST_CHARSEL] = new Dictionary { [KG_DLC_06_LAST_CHARSEL_01] = "Sora", [KG_DLC_06_LAST_CHARSEL_02] = "Kairi", }.ToStoryLabel(), [StoryFlagType.gameflow_RG_DLC] = new Dictionary { [RG_DLC_INIT] = "Beginning", [RG_DLC_EVENT_01] = "", [RG_DLC_EVENT_02] = "", [RG_DLC_MAR_EVENT_01] = "", [RG_DLC_SHU_EVENT_01] = "", [RG_DLC_SHU_EVENT_02] = "", [RG_DLC_SHU_BATTLE_01] = "", [RG_DLC_MAR2_EVENT_01] = "", [RG_DLC_END] = "Story Done", }.ToStoryLabel(), [StoryFlagType.gameflow_SS_DLC] = new Dictionary { [SS_DLC_INIT] = "Beginning", [SS_DLC_EVENT_01] = "", [SS_DLC_BATTLE_01] = "", [SS_DLC_END] = "Story Done", }.ToStoryLabel(), [StoryFlagType.gameflow_SS_DLC_Sub_BadEnd] = new Dictionary { [0] = "Not seen", [SS_DLC_SUB_BADEND_END] = "Seen" }.ToStoryLabel(), [StoryFlagType.gameflow_SS_DLC_Sub_TrueEnd] = new Dictionary { [0] = "Not seen", [SS_DLC_SUB_BADEND_END] = "Seen" }.ToStoryLabel(), }; } } ================================================ FILE: KHSave.Lib3/SaveKh3.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using System; using System.Collections.Generic; using System.IO; using Force.Crc32; using KHSave.Lib3.Models; using KHSave.Lib3.Types; using Xe.BinaryMapper; namespace KHSave.Lib3 { public class SaveKh3 : ISaveKh3 { internal static IBinaryMapping Mapper; static SaveKh3() { Mapper = MappingConfiguration .DefaultConfiguration() .Build(); } [Data(0, 0x94E8F0)] public byte[] Data { get; set; } [Data(0x0)] public int MagicCode { get; set; } [Data] public int FileSize { get; set; } [Data] public short MajorVersion { get; set; } [Data] public short MinorVersion { get; set; } [Data(0xC)] public uint Checksum { get; set; } [Data(0x14)] public DifficultyType Difficulty { get; set; } [Data(0x18)] public WorldType WorldLogo { get; set; } [Data(0x24)] public int TotalExp { get; set; } [Data(0x28)] public int Munny { get; set; } [Data(0x2C)] public byte Level { get; set; } [Data(0x30)] public DesireChoice DesireChoice { get; set; } [Data(0x31)] public PowerChoice PowerChoice { get; set; } [Data(0x32, Count = 5)] public List Party { get; set; } [Data(0x39)] public bool SaveClear { get; set; } [Data(0x54)] public LocationType LocationName { get; set; } [Data(0x58)] public int Unknown00058 { get; set; } [Data(0x5C)] public int Unknown0005C { get; set; } [Data(0x60)] public CharacterIconType BaseSaveIcon { get; set; } public CharacterIconType DlcSaveIcon { get => default(CharacterIconType); set { } } [Data(0x68)] public int EnemiesDefeated { get; set; } [Data(0x5B0)] public short SavesCount { get; set; } [Data(0x68e, 5)] public List RecordAttractionsUseCount { get; set; } [Data(0x6C8, 0x1e, 2)] public List RecordShotlocksUseCount { get; set; } [Data(0x86c, 0x400, 2)] public List Inventory { get; set; } [Data(0x15d6, 100)] public List MaterialsCount { get; set; } [Data(0x1764)] public int CrabsCollected { get; set; } [Data(0x17F8, 16, 0x9C0)] public List Pc { get; set; } [Data(0xB414)] public int BonusHp { get; set; } [Data(0xB418)] public int BonusMp { get; set; } [Data(0xB41C)] public int BonusStrength { get; set; } [Data(0xB420)] public int BonusMagic { get; set; } [Data(0xB424)] public int BonusDefense { get; set; } [Data(0xB43C, 0x40, 4)] public List Storyflags { get; set; } [Data(0xBB18, 0x100)] public string MapPath { get; set; } [Data(0xBC18, 0x40)] public string MapSpawn { get; set; } [Data(0xBC58, 0x100)] public string PlayerScript { get; set; } [Data(0xBD58, 0x100)] public string PlayerCharacter { get; set; } [Data(0xBE98, 3)] public List Shortcuts { get; set; } [Data(0xBEC8, 6, 4)] public List Magics { get; set; } [Data(0xBEE0, 5, 4)] public List Links { get; set; } [Data(0x83a70)] public Records Records { get; set; } [Data(0x84770)] public int PhotoMaxCount { get; set; } [Data(0x84784, 90, 0x19004)] public List Photos { get; set; } public string DlcMapPath { get => string.Empty; set { } } public string DlcSpawnPoint { get => string.Empty; set { } } internal static bool IsValidInternal(Stream stream) { var prevPosition = stream.Position; var reader = new BinaryReader(stream.SetPosition(0)); var magicCode = reader.ReadInt32(); var length = reader.ReadInt32(); stream.Position = prevPosition; return magicCode == 0x45764053 && length == 0x94E8E0; } public void Write(Stream stream) { using (var tempStream = new MemoryStream()) { BinaryMapping.WriteObject(tempStream, this); Checksum = CalculateChecksum(tempStream); } Mapper.WriteObject(stream.SetPosition(0), this); } internal static SaveKh3 ReadInternal(Stream stream) => Mapper.ReadObject(stream, new SaveKh3()) as SaveKh3; public static bool IsValid(Stream stream) => SaveKh3.IsValidInternal(stream) || SaveKh3u109.IsValidInternal(stream); public static ISaveKh3 Read(Stream stream) { if (SaveKh3.IsValidInternal(stream)) return ReadInternal(stream); if (SaveKh3u109.IsValidInternal(stream)) return SaveKh3u109.ReadInternal(stream); throw new InvalidDataException("Input not recognized as a valid or supported Kingdom Hearts III save game."); } public static uint CalculateChecksum(Stream stream) { stream.Position = 0x10; var buffer = stream.ReadBytes((int)(stream.Length - stream.Position)); return Crc32Algorithm.Compute(buffer); } } } ================================================ FILE: KHSave.Lib3/SaveKh3u109.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Lib3.Models; using KHSave.Lib3.Types; using System; using System.Collections.Generic; using System.IO; using Xe.BinaryMapper; namespace KHSave.Lib3 { public class SaveKh3u109 : ISaveKh3 { [Data(0, 0x94F308)] public byte[] Data { get; set; } [Data(0x0)] public int MagicCode { get; set; } [Data] public int FileSize { get; set; } [Data] public short MajorVersion { get; set; } [Data] public short MinorVersion { get; set; } [Data(0xC)] public uint Checksum { get; set; } [Data(0x14)] public DifficultyType Difficulty { get; set; } [Data(0x18)] public WorldType WorldLogo { get; set; } [Data(0x24)] public int TotalExp { get; set; } [Data(0x28)] public int Munny { get; set; } [Data(0x2C)] public byte Level { get; set; } [Data(0x30)] public DesireChoice DesireChoice { get; set; } [Data(0x31)] public PowerChoice PowerChoice { get; set; } [Data(0x32, Count = 5)] public List Party { get; set; } [Data(0x39)] public bool SaveClear { get; set; } [Data(0x54)] public LocationType LocationName { get; set; } [Data(0x58)] public int Unknown00058 { get; set; } [Data(0x5C)] public int Unknown0005C { get; set; } [Data(0x60)] public CharacterIconType BaseSaveIcon { get; set; } [Data(0x68)] public CharacterIconType DlcSaveIcon { get; set; } [Data(0x70)] public int EnemiesDefeated { get; set; } [Data(0x5B8)] public short SavesCount { get; set; } [Data(0x696, 5)] public List RecordAttractionsUseCount { get; set; } [Data(0x6D0, 0x1e, 2)] public List RecordShotlocksUseCount { get; set; } [Data(0x8F4, 0x400, 2)] public List Inventory { get; set; } [Data(0x165E, 100)] public List MaterialsCount { get; set; } [Data(0x17EC)] public int CrabsCollected { get; set; } [Data(0x1880, 16, 0x9C0)] public List Pc { get; set; } [Data(0xB49C)] public int BonusHp { get; set; } [Data(0xB4A0)] public int BonusMp { get; set; } [Data(0xB4A4)] public int BonusStrength { get; set; } [Data(0xB4A8)] public int BonusMagic { get; set; } [Data(0xB4AC)] public int BonusDefense { get; set; } [Data(0xB4C4, 0x50, 4)] public List Storyflags { get; set; } [Data(0xBBA0, 0x100)] public string MapPath { get; set; } [Data(0xBCA0, 0x40)] public string MapSpawn { get; set; } [Data(0xBCE0, 0x100)] public string PlayerScript { get; set; } [Data(0xBDE0, 0x100)] public string PlayerCharacter { get; set; } [Data(0xBF20, 3)] public List Shortcuts { get; set; } [Data(0xBF50, 6, 4)] public List Magics { get; set; } [Data(0xBF68, 5, 4)] public List Links { get; set; } [Data(0x83AF8)] public Records Records { get; set; } [Data(0x84E48)] public int PhotoMaxCount { get; set; } [Data(0x84E5C, 90, 0x19004)] public List Photos { get; set; } [Data(0x94EFC4, Count = 0x100)] public string DlcMapPath { get; set; } [Data(0x94F0C4, Count = 0x40)] public string DlcSpawnPoint { get; set; } internal static bool IsValidInternal(Stream stream) { var prevPosition = stream.Position; var reader = new BinaryReader(stream.SetPosition(0)); var magicCode = reader.ReadInt32(); var length = reader.ReadInt32(); stream.Position = prevPosition; return magicCode == 0x45764053 && length == 0x94F2F8; } public void Write(Stream stream) { using (var tempStream = new MemoryStream()) { BinaryMapping.WriteObject(tempStream, this); Checksum = SaveKh3.CalculateChecksum(tempStream); } SaveKh3.Mapper.WriteObject(stream.SetPosition(0), this); } internal static SaveKh3u109 ReadInternal(Stream stream) => SaveKh3.Mapper.ReadObject(stream.SetPosition(0), new SaveKh3u109()) as SaveKh3u109; } } ================================================ FILE: KHSave.Lib3/Types/AbilityType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum AbilityType { [Info("")] Ability000, [AbilityAction("Aerial Recovery")] Ability001, [AbilityAction("Payback Strike")] Ability002, [AbilityAction("Block")] Ability003, [AbilityAction("Counter Slash")] Ability004, [AbilityAction("Counter Impact")] Ability005, [AbilityAction("Counter Kick")] Ability006, [AbilityAction("Final Blow")] Ability007, [AbilityAction("Risk Dodge")] Ability008, [AbilityAction("")] Ability009, [AbilityAction("Rising Spiral")] Ability00A, [AbilityAction("Groundbreaker")] Ability00B, [AbilityAction("Falling Slash")] Ability00C, [AbilityAction("Speed Slash")] Ability00D, [AbilityAction("Triple Rush")] Ability00E, [AbilityAction("Magic Flash")] Ability00F, [AbilityMobility("High Jump")] Ability010, [AbilityMobility("Doubleflight")] Ability011, [AbilityMobility("Superjump")] Ability012, [AbilityMobility("Superslide")] Ability013, [AbilityMobility("Glide")] Ability014, [AbilitySupport("Scan")] Ability015, [AbilityMobility("Dodge Roll")] Ability016, [AbilityMobility("Air Slide")] Ability017, [AbilityMobility("Aerial Dodge")] Ability018, [AbilitySupport("MP Safety")] Ability019, [AbilitySupport("Zero EXP")] Ability01A, [AbilitySupport("Assist Friends")] Ability01B, [AbilitySupport("Combo Plus")] Ability01C, [AbilitySupport("Air Combo Plus")] Ability01D, [AbilitySupport("Combo Master")] Ability01E, [AbilitySupport("Combo Boost")] Ability01F, [AbilitySupport("Air Combo Boost")] Ability020, [AbilitySupport("Fire Boost")] Ability021, [AbilitySupport("Blizzard Boost")] Ability022, [AbilitySupport("Thunder Boost")] Ability023, [AbilitySupport("Water Boost")] Ability024, [AbilitySupport("Aero Boost")] Ability025, [AbilitySupport("Wizard´s Ruse")] Ability026, [AbilitySupport("Lucky Strike")] Ability027, [AbilitySupport("Item Boost")] Ability028, [AbilitySupport("Treasure Magnet")] Ability029, [AbilitySupport("No name")] Ability02A, [AbilitySupport("Leaf Bracer")] Ability02B, [AbilitySupport("Second Chance")] Ability02C, [AbilitySupport("Withstand Combo")] Ability02D, [AbilityAction("Focus Syphon")] Ability02E, [AbilitySupport("Attraction Extender")] Ability02F, [AbilitySupport("Link Extender")] Ability030, [AbilitySupport("Formchange Extender")] Ability031, [AbilitySupport("Defender")] Ability032, [AbilitySupport("Damage Control")] Ability033, [AbilitySupport("Damage Syphon")] Ability034, [AbilitySupport("MP Haste")] Ability035, [AbilitySupport("MP Hastera")] Ability036, [AbilitySupport("MP Hastega")] Ability037, [AbilitySupport("Magic Combo Thrift")] Ability038, [AbilitySupport("Magic Galvanizer")] Ability039, [AbilitySupport("MP Walker")] Ability03A, [AbilitySupport("HP Walker")] Ability03B, [AbilitySupport("Magic Treasure Magnet")] Ability03C, [AbilitySupport("Master Treasure Magnet")] Ability03D, [AbilitySupport("Attraction Enhancer")] Ability03E, [AbilitySupport("Burn Protection")] Ability03F, [AbilitySupport("Cloud Protection")] Ability040, [AbilitySupport("Sneeze Protection")] Ability041, [AbilitySupport("Freeze Protection")] Ability042, [AbilitySupport("Electric Protection")] Ability043, [AbilitySupport("Stun Protection")] Ability044, [AbilitySupport("Reprisal Boost")] Ability045, [AbilitySupport("Auto-Finish")] Ability046, [AbilitySupport("Situation Boost")] Ability047, [AbilitySupport("Grand Magic Extender")] Ability048, [AbilitySupport("Magic Lock-On")] Ability049, [AbilitySupport("Block Replenisher")] Ability04A, [AbilitySupport("MP Thrift")] Ability04B, [AbilitySupport("Extra Cast")] Ability04C, [AbilitySupport("Full MP Blast")] Ability04D, [AbilitySupport("Harvester")] Ability04E, [AbilitySupport("HP Converter")] Ability04F, [AbilitySupport("MP Converter")] Ability050, [AbilitySupport("Munny Converter")] Ability051, [AbilitySupport("Endless Magic")] Ability052, [AbilitySupport("Focus Converter")] Ability053, [AbilitySupport("Fire Syphon")] Ability054, [AbilitySupport("Blizzard Syphon")] Ability055, [AbilitySupport("Thunder Syphon")] Ability056, [AbilitySupport("Water Syphon")] Ability057, [AbilitySupport("Aero Syphon")] Ability058, [AbilitySupport("Dark Syphon")] Ability059, [AbilitySupport("Team Effort")] Ability05A, [AbilityAction("Sonic Slash")] Ability05B, [AbilityAction("Sonic Cleave")] Ability05C, [AbilityAction("Buzz Saw")] Ability05D, [AbilityAction("Somersault")] Ability05E, [AbilityMobility("Pole Spin")] Ability05F, [AbilityMobility("Pole Swing")] Ability060, [AbilityMobility("Wall Kick")] Ability061, [AbilitySupport("Frontline Photographer")] Ability062, [AbilitySupport("Chef Extraordinaire")] Ability063, [AbilitySupport("Double Team")] Ability064, [AbilitySupport("Heartless Buster")] Ability065, [AbilitySupport("Nobody Buster")] Ability066, [AbilitySupport("Cure Converter")] Ability067, [AbilitySupport("Critical Counter")] Ability068, [AbilitySupport("Critical Recharge")] Ability069, [AbilitySupport("Critical Converter")] Ability06A, [Unused] Ability06B, [Unused] Ability06C, [Unused] Ability06D, [Unused] Ability06E, [Unused] Ability06F, [Unused] Ability070, [Unused] Ability071, [Unused] Ability072, [Unused] Ability073, [Unused] Ability074, [Unused] Ability075, [Unused] Ability076, [Unused] Ability077, [Unused] Ability078, [Unused] Ability079, [Unused] Ability07A, [Unused] Ability07B, [Unused] Ability07C, [Unused] Ability07D, [Unused] Ability07E, [Unused] Ability07F, [Unused] Ability080, [Unused] Ability081, [Unused] Ability082, [Unused] Ability083, [Unused] Ability084, [Unused] Ability085, [Unused] Ability086, [Unused] Ability087, [Unused] Ability088, [Unused] Ability089, [Unused] Ability08A, [Unused] Ability08B, [Unused] Ability08C, [Unused] Ability08D, [Unused] Ability08E, [Unused] Ability08F, [Unused] Ability090, [Unused] Ability091, [Unused] Ability092, [Unused] Ability093, [Unused] Ability094, [Unused] Ability095, [Unused] Ability096, [Unused] Ability097, [Unused] Ability098, [Unused] Ability099, [Unused] Ability09A, [Unused] Ability09B, [Unused] Ability09C, [Unused] Ability09D, [Unused] Ability09E, [Unused] Ability09F, [Unused] Ability0A0, [Unused] Ability0A1, [Unused] Ability0A2, [Unused] Ability0A3, [Unused] Ability0A4, [Unused] Ability0A5, [Unused] Ability0A6, [Unused] Ability0A7, [Unused] Ability0A8, [Unused] Ability0A9, [AbilitySupport("Cuisine Extender")] Ability0AA, [AbilitySupport("Hearty Meal")] Ability0AB, [AbilitySupport("Overtime")] Ability0AC, [AbilitySupport("Top Condition")] Ability0AD, [AbilitySupport("EXP Incentive")] Ability0AE, [AbilitySupport("Prize Proliferator")] Ability0AF, [AbilitySupport("Rags to Riches")] Ability0B0, [AbilitySupport("Curaza")] Ability0B1, [AbilitySupport("Berserk Change")] Ability0B2, [AbilitySupport("Hidden Potential")] Ability0B3, [AbilitySupport("More Grand Magic")] Ability0B4, [AbilitySupport("Firaza")] Ability0B5, [AbilitySupport("Blizzaza")] Ability0B6, [AbilitySupport("Thundaza")] Ability0B7, [AbilitySupport("Waterza")] Ability0B8, [AbilitySupport("Aeroza")] Ability0B9, [Unused] Ability0BA, [Unused] Ability0BB, [Unused] Ability0BC, [Unused] Ability0BD, [AbilityAction("Unison Fire")] Ability0BE, [AbilityAction("Unison Blizzard")] Ability0BF, [AbilityAction("Unison Thunder")] Ability0C0, [AbilityAction("Fusion Spin")] Ability0C1, [AbilityAction("Fusion Rocket")] Ability0C2, [AbilitySupport("Hyper Healing")] Ability0C3, [AbilitySupport("More Team Attacks")] Ability0C4, [AbilitySupport("Team Attack Extender")] Ability0C5, [AbilitySupport("Share Prizes")] Ability0C6, [AbilityAction("")] Ability0C7, [AbilityAction("")] Ability0C8, [AbilityAction("Donald Fire")] Ability0C9, [AbilityAction("Donald Blizzard")] Ability0CA, [AbilityAction("Donald Thunder")] Ability0CB, [AbilityAction("Donald Aero")] Ability0CC, [AbilityAction("Donald Cure")] Ability0CD, [AbilityAction("Goofy Tornado")] Ability0CE, [AbilityAction("Goofy Turbo")] Ability0CF, [AbilityAction("Goofy Discus")] Ability0D0, [AbilityAction("Boulder Toss")] Ability0D1, [AbilityAction("Burst of Energy")] Ability0D2, [AbilityAction("Shoulder Tackle")] Ability0D3, [AbilityAction("Lasso Attack")] Ability0D4, [AbilityAction("Laser Beam")] Ability0D5, [AbilityAction("Spinning Lariat")] Ability0D6, [AbilityAction("")] Ability0D7, [AbilityAction("")] Ability0D8, [AbilityAction("Frying Pan Toss")] Ability0D9, [AbilityAction("Barrel Bash")] Ability0DA, [AbilityAction("Monster Roar")] Ability0DB, [AbilityAction("Takedown")] Ability0DC, [AbilityAction("Googly Appeal")] Ability0DD, [AbilityAction("Pep Talk")] Ability0DE, [AbilityAction("Bone Crusher")] Ability0DF, [AbilityAction("Rolling Lunge")] Ability0E0, [AbilityAction("Leaping Smash")] Ability0E1, [AbilityAction("Cold Breath")] Ability0E2, [AbilityAction("Booster Punch")] Ability0E3, [AbilityAction("Care Spray")] Ability0E4, [AbilityAction("")] Ability0E5, [AbilityAction("")] Ability0E6, [AbilityAction("")] Ability0E7, [AbilityAction("")] Ability0E8, [AbilityAction("")] Ability0E9, [AbilityAction("")] Ability0EA, [AbilityAction("")] Ability0EB, [AbilityAction("")] Ability0EC, [AbilityAction("")] Ability0ED, [AbilityAction("")] Ability0EE, [Unused] Ability0EF, [AbilityAction("")] Ability0F0, [AbilityAction("")] Ability0F1, [Unused] Ability0F2, [Unused] Ability0F3, [Unused] Ability0F4, [Unused] Ability0F5, [Unused] Ability0F6, [Unused] Ability0F7, [Unused] Ability0F8, [Unused] Ability0F9, [Unused] Ability0FA, [Unused] Ability0FB, [Unused] Ability0FC, [Unused] Ability0FD, [Unused] Ability0FE, [Unused] Ability0FF, [Unused] Ability100, Ability101, Ability102, Ability103, Ability104, Ability105, Ability106, Ability107, Ability108, Ability109, Ability10A, Ability10B, Ability10C, Ability10D, Ability10E, Ability10F, Ability110, Ability111, Ability112, Ability113, Ability114, Ability115, Ability116, Ability117, Ability118, Ability119, Ability11A, Ability11B, Ability11C, Ability11D, Ability11E, Ability11F, Ability120, Ability121, Ability122, Ability123, Ability124, Ability125, Ability126, Ability127, Ability128, Ability129, Ability12A, Ability12B, Ability12C, Ability12D, Ability12E, Ability12F, Ability130, Ability131, Ability132, Ability133, Ability134, Ability135, Ability136, Ability137, Ability138, Ability139, Ability13A, Ability13B, Ability13C, Ability13D, Ability13E, Ability13F, Ability140, Ability141, Ability142, Ability143, Ability144, Ability145, Ability146, Ability147, Ability148, Ability149, Ability14A, Ability14B, Ability14C, Ability14D, Ability14E, Ability14F, Ability150, Ability151, Ability152, Ability153, Ability154, Ability155, Ability156, Ability157, Ability158, Ability159, Ability15A, Ability15B, Ability15C, Ability15D, [Unused] Ability15E, [Unused] Ability15F, [Unused] Ability160, Ability161, Ability162, Ability163, Ability164, Ability165, Ability166, Ability167, Ability168, [Unused] Ability169, [Unused] Ability16A, [Unused] Ability16B, [Unused] Ability16C, [Unused] Ability16D, [Unused] Ability16E, [Unused] Ability16F, [Unused] Ability170, [Unused] Ability171, [Unused] Ability172, [Unused] Ability173, [Unused] Ability174, [Unused] Ability175, [Unused] Ability176, [Unused] Ability177, [Unused] Ability178, [Unused] Ability179, [Unused] Ability17A, [Unused] Ability17B, [Unused] Ability17C, [Unused] Ability17D, [Unused] Ability17E, [Unused] Ability17F, [Unused] Ability180, [Unused] Ability181, [Unused] Ability182, [Unused] Ability183, [Unused] Ability184, [Unused] Ability185, [Unused] Ability186, [Unused] Ability187, [Unused] Ability188, [Unused] Ability189, [Unused] Ability18A, [Unused] Ability18B, [Unused] Ability18C, [Unused] Ability18D, [Unused] Ability18E, [Unused] Ability18F, [Unused] Ability190, [Unused] Ability191, [Unused] Ability192, [Unused] Ability193, [Unused] Ability194, [Unused] Ability195, [Unused] Ability196, [Unused] Ability197, [Unused] Ability198, [Unused] Ability199, [Unused] Ability19A, [Unused] Ability19B, [Unused] Ability19C, [Unused] Ability19D, [Unused] Ability19E, [Unused] Ability19F, [Unused] Ability1A0, [Unused] Ability1A1, [Unused] Ability1A2, [Unused] Ability1A3, [Unused] Ability1A4, [Unused] Ability1A5, [Unused] Ability1A6, [Unused] Ability1A7, [Unused] Ability1A8, [Unused] Ability1A9, [Unused] Ability1AA, [Unused] Ability1AB, [Unused] Ability1AC, [Unused] Ability1AD, [Unused] Ability1AE, [Unused] Ability1AF, [Unused] Ability1B0, [Unused] Ability1B1, [Unused] Ability1B2, [Unused] Ability1B3, [Unused] Ability1B4, [Unused] Ability1B5, [Unused] Ability1B6, [Unused] Ability1B7, [Unused] Ability1B8, [Unused] Ability1B9, [Unused] Ability1BA, [Unused] Ability1BB, [Unused] Ability1BC, [Unused] Ability1BD, [Unused] Ability1BE, [Unused] Ability1BF, [Unused] Ability1C0, [Unused] Ability1C1, [Unused] Ability1C2, [Unused] Ability1C3, [Unused] Ability1C4, [Unused] Ability1C5, [Unused] Ability1C6, [Unused] Ability1C7, [Unused] Ability1C8, [Unused] Ability1C9, [Unused] Ability1CA, [Unused] Ability1CB, [Unused] Ability1CC, [Unused] Ability1CD, [Unused] Ability1CE, [Unused] Ability1CF, [Unused] Ability1D0, [Unused] Ability1D1, [Unused] Ability1D2, [Unused] Ability1D3, [Unused] Ability1D4, [Unused] Ability1D5, [Unused] Ability1D6, [Unused] Ability1D7, [Unused] Ability1D8, [Unused] Ability1D9, [Unused] Ability1DA, [Unused] Ability1DB, [Unused] Ability1DC, [Unused] Ability1DD, [Unused] Ability1DE, [Unused] Ability1DF, [Unused] Ability1E0, [Unused] Ability1E1, [Unused] Ability1E2, [Unused] Ability1E3, [Unused] Ability1E4, [Unused] Ability1E5, [Unused] Ability1E6, [Unused] Ability1E7, [Unused] Ability1E8, [Unused] Ability1E9, [Unused] Ability1EA, [Unused] Ability1EB, [Unused] Ability1EC, [Unused] Ability1ED, [Unused] Ability1EE, [Unused] Ability1EF, [Unused] Ability1F0, [Unused] Ability1F1, [Unused] Ability1F2, [Unused] Ability1F3, [Unused] Ability1F4, [Unused] Ability1F5, [Unused] Ability1F6, [Unused] Ability1F7, [Unused] Ability1F8, [Unused] Ability1F9, [Unused] Ability1FA, [Unused] Ability1FB, [Unused] Ability1FC, [Unused] Ability1FD, [Unused] Ability1FE, [Unused] Ability1FF, } } ================================================ FILE: KHSave.Lib3/Types/AccessoryType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum AccessoryType : byte { [Info] Empty, [Accessory("Laughter Pin")] LaughterPin, [Accessory("Forest Clasp")] ForestClasp, [Accessory("Ability Ring")] AbilityRing, [Accessory("Ability Ring+")] AbilityRingPlus, [Accessory("Technician's Ring")] TechnicianRing, [Accessory("Technician's Ring+")] TechnicianRingPlus, [Accessory("Skill Ring")] SkillRing, [Accessory("Skill Ring+")] SkillRingPlus, [Accessory("Expert's Ring")] ExpertRing, [Accessory("Master's Ring")] MasterRing, [Accessory("Cosmic Ring")] CosmicRing, [Accessory("Power Ring")] PowerRing, [Accessory("Buster Ring")] BusterRing, [Accessory("Valor Ring")] ValorRing, [Accessory("Phantom Ring")] PhantomRing, [Accessory("Orichalcum Ring")] OrichalcumRing, [Accessory("Magic Ring")] MagicRing, [Accessory("Rune Ring")] RuneRing, [Accessory("Force Ring")] ForceRing, [Accessory("Sorcerer's Ring")] SorcererRing, [Accessory("Wisdom Ring")] WisdomRing, [Accessory("Bronze Necklace")] BronzeNecklace, [Accessory("Silver Necklace")] SilverNecklace, [Accessory("Master's Necklace")] MasterNecklace, [Accessory("Bronze Amulet")] BronzeAmulet, [Accessory("Silver Amulet")] SilverAmulet, [Accessory("Gold Amulet")] GoldAmulet, [Accessory("Junior Medal")] JuniorMedal, [Accessory("Master Medal")] MasterMedal, [Accessory("Star Medal")] StarMedal, [Accessory("Mickey Clasp")] MickeyClasp, [Accessory("Soldier's Earring")] SoldierEarring, [Accessory("Fencer's Earring")] FencerEarring, [Accessory("Mage's Earring")] MageEarring, [Accessory("Slayer's Earring")] SlayerEarring, [Accessory("Moon Amulet")] MoonAmulet, [Accessory("Star Charm")] StarCharm, [Accessory("Cosmic Arts")] CosmicArts, [Accessory("Crystal Regalia")] CrystalRegalia, [Accessory("Water Cufflink")] WaterCufflink, [Accessory("Thunder Cufflink")] ThunderCufflink, [Accessory("Fire Cufflink")] FireCufflink, [Accessory("Aero Cufflink")] AeroCufflink, [Accessory("Blizzard Cufflink")] BlizzardCufflink, [Accessory("Celestriad")] Celestriad, [Accessory("Yin-Yang Cufflink")] YinYangCufflink, [Accessory("Gourmand's Ring")] GourmandRing, [Accessory("Draw Ring")] DrawRing, [Accessory("Lucky Ring")] LuckyRing, [Accessory("Flanniversary Badge")] FlanniversaryBadge, [Accessory("Bronze Necklace")] BronzeNecklace_33, [Accessory("Bronze Necklace")] BronzeNecklace_34, [Accessory("Bronze Necklace")] BronzeNecklace_35, [Accessory("Bronze Necklace")] BronzeNecklace_36, [Accessory("Bronze Necklace")] BronzeNecklace_37, [Accessory("Bronze Necklace")] BronzeNecklace_38, [Accessory("Bronze Necklace")] BronzeNecklace_39, [Accessory("Bronze Necklace")] BronzeNecklace_3A, [Accessory("Bronze Necklace")] BronzeNecklace_3B, [Accessory("Bronze Necklace")] BronzeNecklace_3C, [Accessory("Bronze Necklace")] BronzeNecklace_3D, [Accessory("Bronze Necklace")] BronzeNecklace_3E, [Accessory("Silver Necklace")] SilverNecklace_3F, [Accessory("Silver Necklace")] SilverNecklace_40, [Accessory("Silver Necklace")] SilverNecklace_41, [Accessory("Silver Necklace")] SilverNecklace_42, [Accessory("Silver Necklace")] SilverNecklace_43, [Accessory("Silver Necklace")] SilverNecklace_44, [Accessory("Silver Necklace")] SilverNecklace_45, [Accessory("Silver Necklace")] SilverNecklace_46, [Accessory("Silver Necklace")] SilverNecklace_47, [Accessory("Silver Necklace")] SilverNecklace_48, [Accessory("Silver Necklace")] SilverNecklace_49, [Accessory("Master's Necklace")] MasterNecklace_4A, [Accessory("Master's Necklace")] MasterNecklace_4B, [Accessory("Master's Necklace")] MasterNecklace_4C, [Accessory("Master's Necklace")] MasterNecklace_4D, [Accessory("Master's Necklace")] MasterNecklace_4E, [Accessory("Master's Necklace")] MasterNecklace_4F, [Accessory("Master's Necklace")] MasterNecklace_50, [Accessory("Master Medal")] MasterMedal_51, [Accessory("Master Medal")] MasterMedal_52, [Accessory("Junior Medal")] JuniorMedal_53, [Accessory("Master Medal")] MasterMedal_54, [Accessory("Junior Medal")] JuniorMedal_55, [Accessory("Junior Medal")] JuniorMedal_56, [Accessory("Junior Medal")] JuniorMedal_57, [Accessory("Junior Medal")] JuniorMedal_58, [Accessory("Junior Medal")] JuniorMedal_59, [Accessory("Junior Medal")] JuniorMedal_5A, [Accessory("Junior Medal")] JuniorMedal_5B, [Accessory("Junior Medal")] JuniorMedal_5C, [Accessory("Star Medal")] StarMedal_5D, [Accessory("Master Medal")] MasterMedal_5E, [Accessory("Master Medal")] MasterMedal_5F, [Accessory("Star Medal")] StarMedal_60, [Accessory("Master Medal")] MasterMedal_61, [Accessory("Star Medal")] StarMedal_62, [Accessory("Master Medal")] MasterMedal_63, [Accessory("Master Medal")] MasterMedal_64, [Accessory("Master Medal")] MasterMedal_65, [Accessory("Master Medal")] MasterMedal_66, [Accessory("Master Medal")] MasterMedal_67, [Accessory("Master Medal")] MasterMedal_68, [Accessory("Star Medal")] StarMedal_69, [Accessory("Star Medal")] StarMedal_6A, [Accessory("Star Medal")] StarMedal_6B, [Accessory("Star Medal")] StarMedal_6C, [Accessory("Star Medal")] StarMedal_6D, [Accessory("Star Medal")] StarMedal_6E, [Accessory("Breakthrough")] Item6f, [Accessory("Crystal Regalia+")] Item70, Item71, Item72, Item73, Item74, Item75, Item76, Item77, Item78, Item79, Item7a, Item7b, Item7c, Item7d, Item7e, Item7f, Item80, Item81, Item82, Item83, Item84, Item85, Item86, Item87, Item88, Item89, Item8a, Item8b, Item8c, Item8d, Item8e, Item8f, Item90, Item91, Item92, Item93, Item94, Item95, Item96, Item97, Item98, Item99, Item9a, Item9b, Item9c, Item9d, Item9e, Item9f, Itema0, Itema1, Itema2, Itema3, Itema4, Itema5, Itema6, Itema7, Itema8, Itema9, Itemaa, Itemab, Itemac, Itemad, Itemae, Itemaf, Itemb0, Itemb1, Itemb2, Itemb3, Itemb4, Itemb5, Itemb6, Itemb7, Itemb8, Itemb9, Itemba, Itembb, Itembc, Itembd, Itembe, Itembf, Itemc0, Itemc1, Itemc2, Itemc3, Itemc4, Itemc5, Itemc6, Itemc7, Itemc8, Itemc9, Itemca, Itemcb, Itemcc, Itemcd, Itemce, Itemcf, Itemd0, Itemd1, Itemd2, Itemd3, Itemd4, Itemd5, Itemd6, Itemd7, Itemd8, Itemd9, Itemda, Itemdb, Itemdc, Itemdd, Itemde, Itemdf, Iteme0, Iteme1, Iteme2, Iteme3, Iteme4, Iteme5, Iteme6, Iteme7, Iteme8, Iteme9, Itemea, Itemeb, Itemec, Itemed, Itemee, Itemef, Itemf0, Itemf1, Itemf2, Itemf3, Itemf4, Itemf5, Itemf6, Itemf7, Itemf8, Itemf9, Itemfa, Itemfb, Itemfc, Itemfd, Itemfe, Itemff, } } ================================================ FILE: KHSave.Lib3/Types/AiAbilityType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum AiAbilityType : byte { [CombatStyle("Go Wild")] GoWild, [CombatStyle("Watch MP")] WatchMP, [CombatStyle("Conserve")] Conserve, } } ================================================ FILE: KHSave.Lib3/Types/AiCombatStyleType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum AiCombatStyleType : byte { [CombatStyle("Stick By Sora")] StickBySora, [CombatStyle("Be Yourself")] BeYourself, [CombatStyle("Hands Off")] HandsOff, [CombatStyle("Finish the Job")] FinishTheJob, } } ================================================ FILE: KHSave.Lib3/Types/AiRecoveryType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum AiRecoveryType : byte { [CombatStyle("Use As Needed")] UseAsNeeded, [CombatStyle("Use in Emergencies")] UseInEmergencies, [CombatStyle("Use Like Crazy")] UseLikeCrazy, } } ================================================ FILE: KHSave.Lib3/Types/ArmorType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum ArmorType : byte { [Info] Empty, [Armor("Hero's Belt")] HerosBelt, [Armor("Hero's Glove")] HerosGlove, [Armor("Shield Belt")] ShieldBelt, [Armor("DefenseBelt")] DefenseBelt, [Armor("Guardian Belt")] GuardianBelt, [Armor("Power Band")] PowerBand, [Armor("Buster Band")] BusterBand, [Armor("Buster Band+")] BusterBandPlus, [Armor("Cosmic Belt")] CosmicBelt, [Armor("Cosmic Belt+")] CosmicBeltPlus, [Armor("Fire Bangle")] FireBangle, [Armor("Firaga Bangle")] FiragaBangle, [Armor("Firaza Bangle")] FirazaBangle, [Armor("Fire Chain")] FireChain, [Armor("Blizzard Choker")] BlizzardChoker, [Armor("Blizzara Choker")] BlizzaraChoker, [Armor("Blizzaga Choker")] BlizzagaChoker, [Armor("Blizzard Chain")] BlizzardChain, [Armor("Thunder Trinket")] ThunderTrinket, [Armor("Thundaga Trinket")] ThundagaTrinket, [Armor("Thundaza Trinket")] ThundazaTrinket, [Armor("Thunder Chain")] ThunderChain, [Armor("Dark Anklet")] DarkAnklet, [Armor("Midnight Anklet")] MidnightAnklet, [Armor("Chaos Anklet")] ChaosAnklet, [Armor("Dark Chain")] DarkChain, [Armor("Divine Bandanna")] DivineBandanna, [Armor("Elven Bandanna")] ElvenBandanna, [Armor("Aqua Chaplet")] AquaChaplet, [Armor("Wind Fan")] WindFan, [Armor("Storm Fan")] StormFan, [Armor("Aero Armlet")] AeroArmlet, [Armor("Aegis Chain")] AegisChain, [Armor("Acrisius")] Acrisius, [Armor("Cosmic Chain")] CosmicChain, [Armor("Petite Ribbon")] PetiteRibbon, [Armor("Ribbon")] Ribbon, [Armor("Fira Bangle")] FiraBangle, [Armor("Blizzaza Choker")] BlizzazaChoker, [Armor("Thundara Trinket")] ThundaraTrinket, [Armor("Shadow Anklet")] ShadowAnklet, [Armor("Abas Chain")] AbasChain, [Armor("Acrisius+")] AcrisiusPlus, [Armor("Royal Ribbon")] RoyalRibbon, [Armor("Firefighter Rosette")] FirefighterRosette, [Armor("Umbrella Rosette")] UmbrellaRosette, [Armor("Snowman Rosette")] SnowmanRosette, [Armor("Insulator Rosette")] InsulatorRosette, [Armor("Power Weight")] PowerWeight, [Armor("Magic Weight")] MagicWeight, [Armor("Master Belt")] MasterBelt, Item34, Item35, Item36, Item37, Item38, Item39, Item3a, Item3b, Item3c, Item3d, Item3e, Item3f, Item40, Item41, Item42, Item43, Item44, Item45, Item46, Item47, Item48, Item49, Item4a, Item4b, Item4c, Item4d, Item4e, Item4f, Item50, Item51, Item52, Item53, Item54, Item55, Item56, Item57, Item58, Item59, Item5a, Item5b, Item5c, Item5d, Item5e, Item5f, Item60, Item61, Item62, Item63, Item64, Item65, Item66, Item67, Item68, Item69, Item6a, Item6b, Item6c, Item6d, Item6e, Item6f, Item70, Item71, Item72, Item73, Item74, Item75, Item76, Item77, Item78, Item79, Item7a, Item7b, Item7c, Item7d, Item7e, Item7f, Item80, Item81, Item82, Item83, Item84, Item85, Item86, Item87, Item88, Item89, Item8a, Item8b, Item8c, Item8d, Item8e, Item8f, Item90, Item91, Item92, Item93, Item94, Item95, Item96, Item97, Item98, Item99, Item9a, Item9b, Item9c, Item9d, Item9e, Item9f, Itema0, Itema1, Itema2, Itema3, Itema4, Itema5, Itema6, Itema7, Itema8, Itema9, Itemaa, Itemab, Itemac, Itemad, Itemae, Itemaf, Itemb0, Itemb1, Itemb2, Itemb3, Itemb4, Itemb5, Itemb6, Itemb7, Itemb8, Itemb9, Itemba, Itembb, Itembc, Itembd, Itembe, Itembf, Itemc0, Itemc1, Itemc2, Itemc3, Itemc4, Itemc5, Itemc6, Itemc7, Itemc8, Itemc9, Itemca, Itemcb, Itemcc, Itemcd, Itemce, Itemcf, Itemd0, Itemd1, Itemd2, Itemd3, Itemd4, Itemd5, Itemd6, Itemd7, Itemd8, Itemd9, Itemda, Itemdb, Itemdc, Itemdd, Itemde, Itemdf, Iteme0, Iteme1, Iteme2, Iteme3, Iteme4, Iteme5, Iteme6, Iteme7, Iteme8, Iteme9, Itemea, Itemeb, Itemec, Itemed, Itemee, Itemef, Itemf0, Itemf1, Itemf2, Itemf3, Itemf4, Itemf5, Itemf6, Itemf7, Itemf8, Itemf9, Itemfa, Itemfb, Itemfc, Itemfd, Itemfe, Itemff, } } ================================================ FILE: KHSave.Lib3/Types/CharacterIconType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum CharacterIconType : byte { [Info] Empty, [Info] Sora, [Info] Riku, [Info] Kairi, [Info] Terra, [Info] Ventus, [Info] Aqua, [Info] Roxas, [Info] Axel, [Info] Xion, [Info] Mickey, [Info] Donald, [Info] Goofy, [Info] Jack, [Info] Woody, [Info] Buzz, [Info] Hercules, [Info] Rapunzel, [Info] Flynn, [Info] Sulley, [Info] Mike, [Info] Empty20, [Info] Marshmallow, [Info] Baymax, [Info] Leon = 0x96, [Info] Aerith = 0x97, [Info] Yuffie = 0x98, [Info] Cid = 0x99, } } ================================================ FILE: KHSave.Lib3/Types/ChoiceType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum DesireChoice : byte { [Info] Vitality, [Info] Wisdom, [Info] Balance, } public enum PowerChoice : byte { [Info] Warrior, [Info] Mystic, [Info] Guardian, } } ================================================ FILE: KHSave.Lib3/Types/CommandType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum CommandType : int { [Info] Empty, [Command(" ")] Empty_1 = 0x1, [Command("Payback Strike")] PaybackStrike = 0x2, [Command("Counter Slash")] CounterSlash = 0x3, [Command("Counter Impact")] CounterImpact = 0x4, [Command("Counter Kick")] CounterKick = 0x5, [Command("Counter Blast")] CounterBlast = 0x6, [Command("Rising Hook")] RisingHook = 0x7, [Command("Risk Raid")] RiskRaid = 0x8, Backslash = 0x9, [Command("Teleport Slash")] TeleportSlash = 0xa, [Command("Diving Strike")] DivingStrike = 0xb, [Command("Final Blow")] FinalBlow = 0xc, Raid = 0xd, [Command("Nano Counter")] NanoCounter = 0xe, [Command("Counter Blade")] CounterBlade = 0xf, [Command("Wrathful Fist")] WrathfulFist = 0x10, [Command("Wrathful Flurry")] WrathfulFlurry = 0x11, [Command("Flame Torrent")] FlameTorrent = 0x12, [Command("Flame Barrage")] FlameBarrage = 0x13, Lightning = 0x14, Sneeze = 0x15, [Command("Unison Fire")] UnisonFire = 0x16, [Command("Unison Blizzard")] UnisonBlizzard = 0x17, [Command("Unison Thunder")] UnisonThunder = 0x18, [Command("Fusion Spin")] FusionSpin, [Command("Fusion Rocket")] FusionRocket, Attack, [Command(" ")] Empty_1C, [Magic] Fire, [Magic] Fira, [Magic] Firaga, [Magic("Firaza [Doesn't work]")] Firaza, [Magic] Blizzard, [Magic] Blizzara, [Magic] Blizzaga, [Magic("Blizzaza [Doesn't work]")] Blizzaza, [Magic] Thunder, [Magic] Thundara, [Magic] Thundaga, [Magic("Thundaza [Doesn't work]")] Thundaza, [Magic] Water, [Magic] Watera, [Magic] Waterga, [Magic("Waterza [Doesn't work]")] Waterza, [Magic] Aero, [Magic] Aerora, [Magic] Aeroga, [Magic("Aeroza [Doesn't work]")] Aeroza, [Magic] Cure, [Magic] Cura, [Magic] Curaga, [Magic("Curaza [Doesn't work]")] Curaza, [Magic("Sea-Fire")] SeaFire, [Magic("Sea-Blizzard")] SeaBlizzard, [Magic("Sea-Thunder")] SeaThunder, [Magic("Sea-Aero")] SeaAero, Unused, [Consumable("Potion")] Potion, [Consumable("Hi-Potion")] HiPotion, [Consumable("Mega-Potion")] MegaPotion, [Consumable("Ether")] Ether, [Consumable("Hi-Ether")] HiEther, [Consumable("Mega-Ether")] MegaEther, [Consumable("Elixir")] Elixir, [Consumable("Megalixir")] Megalixir, [Consumable("Refocuser")] Refocuser, [Consumable("Hi-Refocuser")] HiRefocuser, [Consumable("Panacea")] Panacea, Unused40, [Link("Meow Wow Balloon")] MeowWowBaloon, [Link("8-Bit Blast")] EightBitBlast, [Link("King's Flare")] KingFlare, [Link("Plasma Encounter")] PlasmaEncounter, [Link("Sea Spectacle")] SeaSpectacle, Finish, Save, Talk, Open, [Command("Examine")] Unused41, [Command("Shop")] Unused42, [Command("Help")] Unused43, [Command("Board")] Unused44, [Command("Take the Helm")] Unused45, [Command("Ride")] Unused46, [Command("Eject")] Unused47, [Command("Mag Assemble")] Unused48, [Command("Get On")] GetOn, [Command("Ride")] Ride_58, [Command("Cover Shot")] Unused51, [Command("Cover Slide")] Unused52, [Command("Perform")] Unused53, [Command("Splash")] Unused54, [Command("Reach Out")] Unused55, [Command("Board")] Unused56, [Command("Raging Cannons")] RagingCannons, [Command("Wind Chasers")] WindChasers, [Command("Tidal Wave")] TidalWave, Tailwind, Swing, [Command("Boinnng!")] Boinnng, [Command("")] Empty_65, [Command("Send Postcard")] SendPostcard, [Command("Choose Vitality")] ChooseVitality, [Command("Choose Wisdom")] ChooseWisdom, [Command("Choose Balance")] ChooseBalance, [Command("Choose the Warrior")] ChooseTheWarrior, [Command("Choose the Mystic")] ChooseTheMystic, [Command("Choose the Guardian")] ChooseTheGuardian, [Command("Return to the Light")] ReturnToTheLight, [Magic("Fira")] Fira_6E, [Magic("Firaga")] Firaga_6F, [Magic("Firaza")] Firaza_70, [Magic("Blizzara")] Blizzara_71, [Magic("Blizzaga")] Blizzaga_72, [Magic("Blizzaza")] Blizzaza_73, [Magic("Thundara")] Thundara_74, [Magic("Thundaga")] Thundaga_75, [Magic("Thundaza")] Thundaza_76, [Magic("Watera")] Watera_77, [Magic("Waterga")] Waterga_78, [Magic("Waterza")] Waterza_79, [Magic("Aerora")] Aerora_7A, [Magic("Aeroga")] Aeroga_7B, [Magic("Aeroza")] Aeroza_7C, [Magic("Curaza")] Curaza_7D, [Command("Dark Firaga")] DarkFiraga, [Command(" ")] Empty_7F, [Command("Double Arrowguns")] DoubleArrowguns, [Command("Hyper Hammer")] HyperHammer, [Command("Twin Yo-Yos")] TwinYoYos, [Command("Magic Launcher")] MagicLauncher, [Command("Drill Punch")] DrillPunch, [Command("Blizzard Blades")] BlizzardBlades, [Command("Nano Arms")] NanoArms, [Command("Ultimate Form")] UltimateForm, [Command("Mirage Staff")] MirageStaff, Countershield, [Command("Agile Claws")] AgileClaws, [Command("Rage Form")] RageForm, Highwind, [Command("Storm Flag")] StormFlag, [Command("Hunny Blasters")] HunnyBlasters, [Command("Hunny Launcher")] HunnyLauncher, [Command("Blizzard Claws")] BlizzardClaws, [Command("Frying Pan")] FryingPan, [Command("Boom Hammer")] BoomHammer, [Command("Clock Drill")] ClockDrill, [Command("Second Form")] SecondForm, [Command("Second Form S (Starlight)")] SecondFormS, [Command("Second Form M (Midnight Blue)")] SecondFormM, [Command("Second Form P (Phantom Green)")] SecondFormP, [Command("Second Form D (Dusk til Dawn)")] SecondFormD, Spellweaver, [Command(" ")] Empty_9A, [Command("Finish")] Finish_9B, [Command("Finish")] Finish_9C, [Command("Finish")] Finish_9D, [Command("Finish")] Finish_9E, [Command("Finish")] Finish_9F, [Command("Finish")] Finish_A0, [Command("Finish")] Finish_A1, [Command("Finish")] Finish_A2, [Command("Finish")] Finish_A3, [Command("Finish")] Finish_A4, [Command("Finish")] Finish_A5, [Command("Finish")] Finish_A6, [Command("Finish")] Finish_A7, [Command("Finish")] Finish_A8, [Command("Double Duel")] DoubleDuel, [Command("Thunder")] Thunder_AA, [Command("Stun Impact")] StunImpact, [Command("Sonic Blade")] SonicBlade, [Command("Ars Arcanum")] ArsArcanum, [Command("Ancient Light")] AncientLight, [Command("Rave")] Unused137, [Command("Blast")] Unused138, [Command("Bash")] Unused139, [Command("Finish")] Unused140, [Command("Riskcharge")] Unused141, [Command("Union x")] UnionX, [Command("USERNAME")] USERNAME_1, [Command("USERNAME")] USERNAME_2, [Command("USERNAME")] USERNAME_3, [Command("USERNAME")] USERNAME_4, [Command("USERNAME")] USERNAME_5, [Command("Mountain Coaster")] MountainCoaster, [Command("Pirate Ship")] PirateShip, [Command("Mad Tea Cups")] MadTeaCups, [Command("Blaster Blaze")] BlasterBlaze, [Command("Magic Carousel")] MagicCarrousel, [Command("Splash Run")] SplashRun, [Command("Finish")] Finish_C0, [Command("Trinity Guard")] TrinityGuard, [Info("Infinite jump")] TrinitySled, [Command("Goofy Bombardier")] GoofyBombardier, [Command(" ")] Empty_C4, [Command(" ")] Empty_C5, [Info("Infinite jump")] Empty_C6, [Command("Scream Strike")] ScreamStrike, [Command("Never Fear")] NeverFear, [Info("Infinite jump")] Empty_C9, [Command("Heroic Swing")] HeroicSwing, [Command("Mighty Avalanche")] MightyAvalanche, [Command("Rocket Ruckus")] RocketRuckus, [Command("Tangled Twist")] TangledTwist, [Command("Tree Whip")] TreeWhip, [Command("Donald Meteor")] DonaldMeteor, [Command("Flare Force")] FlareForce, [Command("Interceptor Wing")] InterceptorWing, [Command("Subzero Impact")] SubzeroImpact, [Command("Last Ray")] LastRay, Trinity, Sora, [Command("Finish")] Finish_D7, [Command("Light Burst")] Unused177, [Command("Dark Burst")] Unused178, [Command("Dual Smasher")] Unused179, [Command("Dual Counter")] Unused180, [Command("Starcracker")] Unused181, [Command("Reversal")] Unused182, [Command("Light Form")] Unused183, [Command("Dark Form")] Unused184, [Command("Double Form OKP")] Unused185, [Command("Double Form OBV")] Unused186, [Command("Finish")] Unused187, [Command("Finish")] Unused233, [Command("Dual Shot")] Unused188, [Command("Seven Wishes")] Unused189, [Command("Dispel")] Unused190, [Command("Showdown")] Unused191, [Command("Dual Shot")] Unused192, [Command("Sora")] Unused193, [Command("Help")] Unused194, [Command("Help")] Unused195, [Command("Help")] Unused196, [Command("Help")] Unused197, [Command("Faith Volley")] Unused198, [Command("Icy Slider")] Unused199, [Command("Thinking of You")] Unused200, [Command("True End")] Unused201, [Command("Connecting Hearts")] Unused202, [Command("One Heart")] Unused203, [Command("Blitz")] Unused204, [Command("Usual Adventure")] Unused205, [Command("Easy Adventure")] Unused206, [Command("Challenging Adventure")] Unused207, [Command("Draw Card")] Unused208, [Command(" ")] Unused209, [Command(" ")] Unused210, [Command(" ")] Unused211, [Command(" ")] Unused212, [Command(" ")] Unused213, [Command(" ")] Unused214, [Command(" ")] Unused215, [Command("Crash")] Crash, } } ================================================ FILE: KHSave.Lib3/Types/ConsumableType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum ConsumableType : byte { [Info] Empty, [Consumable("Potion")] Potion, [Consumable("Hi-Potion")] HiPotion, [Consumable("Mega-Potion")] MegaPotion, [Consumable("Ether")] Ether, [Consumable("Mega-Ether")] MegaEther, [Consumable("Elixir")] Elixir, [Consumable("Megalixir")] Megalixir, [Consumable("Refocuser")] Refocuser, [Consumable("Hi-Refocuser")] HiRefocuser, [Consumable("Panacea")] Panacea, [Consumable("Hi-Ether")] HiEther, Item0c, Item0d, Item0e, Item0f, Item10, Item11, Item12, Item13, Item14, Item15, Item16, Item17, Item18, Item19, Item1a, Item1b, Item1c, Item1d, Item1e, Item1f, Item20, Item21, Item22, Item23, Item24, Item25, Item26, Item27, Item28, Item29, Item2a, Item2b, Item2c, Item2d, Item2e, Item2f, Item30, Item31, Item32, Item33, Item34, Item35, Item36, Item37, Item38, Item39, Item3a, Item3b, Item3c, Item3d, Item3e, Item3f, Item40, Item41, Item42, Item43, Item44, Item45, Item46, Item47, Item48, Item49, Item4a, Item4b, Item4c, Item4d, Item4e, Item4f, Item50, Item51, Item52, Item53, Item54, Item55, Item56, Item57, Item58, Item59, Item5a, Item5b, Item5c, Item5d, Item5e, Item5f, Item60, Item61, Item62, Item63, Item64, Item65, Item66, Item67, Item68, Item69, Item6a, Item6b, Item6c, Item6d, Item6e, Item6f, Item70, Item71, Item72, Item73, Item74, Item75, Item76, Item77, Item78, Item79, Item7a, Item7b, Item7c, Item7d, Item7e, Item7f, Item80, Item81, Item82, Item83, Item84, Item85, Item86, Item87, Item88, Item89, Item8a, Item8b, Item8c, Item8d, Item8e, Item8f, Item90, Item91, Item92, Item93, Item94, Item95, Item96, Item97, Item98, Item99, Item9a, Item9b, Item9c, Item9d, Item9e, Item9f, Itema0, Itema1, Itema2, Itema3, Itema4, Itema5, Itema6, Itema7, Itema8, Itema9, Itemaa, Itemab, Itemac, Itemad, Itemae, Itemaf, Itemb0, Itemb1, Itemb2, Itemb3, Itemb4, Itemb5, Itemb6, Itemb7, Itemb8, Itemb9, Itemba, Itembb, Itembc, Itembd, Itembe, Itembf, Itemc0, Itemc1, Itemc2, Itemc3, Itemc4, Itemc5, Itemc6, Itemc7, Itemc8, Itemc9, Itemca, Itemcb, Itemcc, Itemcd, Itemce, Itemcf, Itemd0, Itemd1, Itemd2, Itemd3, Itemd4, Itemd5, Itemd6, Itemd7, Itemd8, Itemd9, Itemda, Itemdb, Itemdc, Itemdd, Itemde, Itemdf, Iteme0, Iteme1, Iteme2, Iteme3, Iteme4, Iteme5, Iteme6, Iteme7, Iteme8, Iteme9, Itemea, Itemeb, Itemec, Itemed, Itemee, Itemef, Itemf0, Itemf1, Itemf2, Itemf3, Itemf4, Itemf5, Itemf6, Itemf7, Itemf8, Itemf9, Itemfa, Itemfb, Itemfc, Itemfd, Itemfe, Itemff, } } ================================================ FILE: KHSave.Lib3/Types/DifficultyType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum DifficultyType : byte { [Info] Beginner, [Info] Normal, [Info] Proud, [Info] Critical } } ================================================ FILE: KHSave.Lib3/Types/FoodType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum FoodType : byte { [Info] Empty, [Food("Crab")] Item01, Item02, Item03, Item04, Item05, Item06, Item07, Item08, Item09, Item0a, Item0b, Item0c, Item0d, Item0e, Item0f, Item10, Item11, Item12, Item13, Item14, Item15, Item16, Item17, Item18, Item19, Item1a, Item1b, Item1c, Item1d, Item1e, Item1f, Item20, Item21, Item22, Item23, Item24, Item25, Item26, Item27, Item28, Item29, Item2a, Item2b, Item2c, Item2d, Item2e, Item2f, Item30, Item31, Item32, Item33, Item34, Item35, Item36, Item37, Item38, Item39, Item3a, Item3b, Item3c, Item3d, Item3e, Item3f, Item40, Item41, Item42, Item43, Item44, Item45, Item46, Item47, Item48, Item49, Item4a, Item4b, Item4c, Item4d, Item4e, Item4f, Item50, Item51, Item52, Item53, Item54, Item55, Item56, Item57, Item58, Item59, Item5a, Item5b, Item5c, Item5d, Item5e, Item5f, Item60, Item61, Item62, Item63, Item64, Item65, Item66, Item67, Item68, Item69, Item6a, Item6b, Item6c, Item6d, Item6e, Item6f, Item70, Item71, Item72, Item73, Item74, Item75, Item76, Item77, Item78, Item79, Item7a, Item7b, Item7c, Item7d, Item7e, Item7f, Item80, Item81, Item82, Item83, Item84, Item85, Item86, Item87, Item88, Item89, Item8a, Item8b, Item8c, Item8d, Item8e, Item8f, Item90, Item91, Item92, Item93, Item94, Item95, Item96, Item97, Item98, Item99, Item9a, Item9b, Item9c, Item9d, Item9e, Item9f, Itema0, Itema1, Itema2, Itema3, Itema4, Itema5, Itema6, Itema7, Itema8, Itema9, Itemaa, Itemab, Itemac, Itemad, Itemae, Itemaf, Itemb0, Itemb1, Itemb2, Itemb3, Itemb4, Itemb5, Itemb6, Itemb7, Itemb8, Itemb9, Itemba, Itembb, Itembc, Itembd, Itembe, Itembf, Itemc0, Itemc1, Itemc2, Itemc3, Itemc4, Itemc5, Itemc6, Itemc7, Itemc8, Itemc9, Itemca, Itemcb, Itemcc, Itemcd, Itemce, Itemcf, Itemd0, Itemd1, Itemd2, Itemd3, Itemd4, Itemd5, Itemd6, Itemd7, Itemd8, Itemd9, Itemda, Itemdb, Itemdc, Itemdd, Itemde, Itemdf, Iteme0, Iteme1, Iteme2, Iteme3, Iteme4, Iteme5, Iteme6, Iteme7, Iteme8, Iteme9, Itemea, Itemeb, Itemec, Itemed, Itemee, Itemef, Itemf0, Itemf1, Itemf2, Itemf3, Itemf4, Itemf5, Itemf6, Itemf7, Itemf8, Itemf9, Itemfa, Itemfb, Itemfc, Itemfd, Itemfe, Itemff, } } ================================================ FILE: KHSave.Lib3/Types/InventoryType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum InventoryType { Empty, [Consumable("Potion")] Potion, [Consumable("Hi-Potion")] HiPotion, [Consumable("Mega-Potion")] MegaPotion, [Consumable("Ether")] Ether, [Consumable("Mega-Ether")] MegaEther, [Consumable("Elixir")] Elixir, [Consumable("Megalixir")] Megalixir, [Consumable("Refocuser")] Refocuser, [Consumable("Hi-Refocuser")] HiRefocuser, [Consumable("Panacea")] Panacea, [Consumable("Hi-Ether")] HiEther, [Unused] UnusedItem0d, [Unused] UnusedItem0e, [Unused] UnusedItem0f, [Unused] UnusedItem10, [Unused] UnusedItem11, [Tent("Tent")] Tent, [Tent("Strength boost")] StrengthBoost, [Tent("Magic boost")] MagicBoost, [Tent("Defense boost")] DefenseBoost, [Tent("AP boost")] ApBoost, [Unused] UnusedBoost17, [Unused] UnusedBoost18, [Unused] UnusedBoost19, [Keyblade("Kingdom Key")] KingdomKey, [Keyblade("Hero's Origin")] HeroOrigin, [Keyblade("Shooting Star")] ShootingStar, [Keyblade("Favorite Deputy")] FavoriteDeputy, [Keyblade("Ever After")] EvenAfter, [Keyblade("Happy Gear")] HappyGear, [Keyblade("Crystal Snow")] CrystalSnow, [Keyblade("Hunny Spout")] HunnySpout, [Keyblade("Nano Gear")] NanoGear, [Keyblade("Wheel of Fate")] WheelOfFate, [Keyblade("Grand Chef")] GrandChef, [Keyblade("Classic Tone")] ClassicTone, [Keyblade("Oathkeeper")] Oathkeeper, [Keyblade("Oblivion")] Oblivion, [Keyblade("Ultima Weapon")] UltimaWeapon, [Keyblade("Midnight Blue")] MidnightBlue, [Keyblade("Phantom Green")] PhantomGreen, [Keyblade("Starlight")] Starlight, [Keyblade("Dawn Till Dusk")] DawnTillDusk, [Unused] UnusedKeyblade2b, [Staff("Mage's Staff")] Weapon15, [Staff("Mage's Staff+")] Weapon16, [Staff("Warhammer")] Weapon17, [Staff("Warhammer+")] Weapon18, [Staff("Magician's Wand")] Weapon19, [Staff("Magician's Wand+")] Weapon1a, [Staff("Nirvana")] Weapon1b, [Staff("Nirvana+")] Weapon1c, [Staff("Astrolabe")] Weapon1d, [Staff("Astrolabe+")] Weapon1e, [Staff("Heartless Maul")] Weapon1f, [Staff("Heartless Maul+")] Weapon20, [Staff("Save the Queen")] Weapon21, [Staff("Save the Queen+")] SaveTheQueenPlus, [Unused] UnusedStaff3c, [Unused] UnusedStaff3d, [Unused] UnusedStaff3e, [Unused] UnusedStaff3f, [Unused] UnusedStaff40, [Unused] UnusedStaff41, [Shield("Knight's Shield")] Weapon29, [Shield("Knight's Shield+")] Weapon2a, [Shield("Clockwork Shield")] Weapon2b, [Shield("Clockwork Shield+")] Weapon2c, [Shield("Star Shield")] Weapon2d, [Shield("Star Shield+")] Weapon2e, [Shield("Aegis Shield")] Weapon2f, [Shield("Aegis Shield+")] Weapon30, [Shield("Storm Anchor")] Weapon31, [Shield("Storm Anchor+")] Weapon32, [Shield("Nobody Guard")] Weapon33, [Shield("Nobody Guard+")] Weapon34, [Shield("Save the King")] Weapon35, [Shield("Save the King+")] SaveTheKingPlus, [Unused] Unused50, [Unused] Unused51, [Unused] Unused52, [Unused] Unused53, [Unused] Unused54, [Unused] Unused55, [Unused] Unused56, [Unused] Unused57, [Unused] Unused58, [Unused] Unused59, [Unused] Unused5a, [Unused] Unused5b, [Unused] Unused5c, [Unused] Unused5d, [Weapon("Heart of a Hero")] HeartOfHero, [Weapon("Cowboy's Pride")] CowboyPride, [Weapon("Space Ranger Suit")] SpaceRangerSuit, [Weapon("Golden Hair")] GoldenHair, [Weapon("Frying Pan")] FryingPan, [Weapon("Skill & Crossbones")] SkillAndCrossbones, [Weapon("Ice Claws")] IceClaws, [Weapon("Powered Suit")] PoweredSuit, [Weapon("Claws")] Claws, [Weapon("Knockout Body")] KnockoutBody, [Armor("Hero's Belt")] HeroBelt = 125, [Armor("Hero's Glove")] HeroGlove, [Armor("Shield Belt")] ShieldBelt, [Armor("Defense Belt")] DefensedBelt, [Armor("Guardian's Belt")] GuardianBelt, [Armor("Power Band")] PowerBand, [Armor("Buster Band")] BusterBand, [Armor("Buster Band+")] BusterBandPlus, [Armor("Cosmic Belt")] CosmicBelt, [Armor("Cosmic Belt+")] CosmicBeltPlus, [Armor("Fire Bangle")] FireBangle, [Armor("Firaga Bangle")] FiragaBangle, [Armor("Firaza Bangle")] FirazaBangle, [Armor("Fire Chain")] FireChain, [Armor("Blizzard Choker")] BlizzardChocker, [Armor("Blizzara Choker")] BlizzaraChocker, [Armor("Blizzaga Choker")] BlizzagaChocker, [Armor("Blizzard Chain")] BlizzardChain, [Armor("Thunder Trinket")] ThunderTrinker, [Armor("Thundaga Trinket")] ThundagaTrinker, [Armor("Thundaza Trinket")] ThundazaTrinker, [Armor("Thunder Chain")] ThunderChain, [Armor("Dark Anklet")] DarkAnklet, [Armor("Midnight Anklet")] MidnightAnklet, [Armor("Chaos Anklet")] ChaosAnklet, [Armor("Dark Chain")] DarkChain, [Armor("Divine Bandanna")] DivineBandanna, [Armor("Elven Bandanna")] ElvenBandanna, [Armor("Aqua Chaplet")] AquaChaplet, [Armor("Wind Fan")] WindFan, [Armor("Storm Fan")] StormFan, [Armor("Aero Armlet")] AeroArmlet, [Armor("Aegis Chain")] AegisChain, [Armor("Acrisius")] Acrisius, [Armor("Cosmic Chain")] CosmicChain, [Armor("Petite Ribbon")] PetiteRibbon, [Armor("Ribbon")] Ribbon, [Armor("Fira Bangle")] FiraBangle, [Armor("Blizzaza Choker")] BlizzazaChocker, [Armor("Thundara Trinket")] BlizzazaTrinker, [Armor("Shadow Anklet")] ShadowAnklet, [Armor("Abas Chain")] AbasChain, [Armor("Acrisius+")] AcrisiusPlus, [Armor("Royal Ribbon")] RoyalRibbon, [Armor("Firefighter Rosette")] FirefighterRosette, [Armor("Umbrella Rosette")] UmbrellaRosette, [Armor("Mask Rosette")] MaskRosette, [Armor("Snowman Rosette")] SnowmanRosette, [Armor("Insulator Rosette")] InsulatorRosette, Item174, [Armor("Power Weight")] en, [Armor("Magic Weight")] en2, [Armor("Master Belt")] en3, [Accessory("Laughter Pin")] LaughterPin = 225, [Accessory("Forest Clasp")] ForestClasp, [Accessory("Ability Ring")] AbilityRing, [Accessory("Ability Ring+")] AbilityRingPlus, [Accessory("Technician's Ring")] TechnicianRing, [Accessory("Technician's Ring+")] TechnicianRingPlus, [Accessory("Skill Ring")] SkillRing, [Accessory("Skill Ring+")] SkillRingPlus, [Accessory("Expert's Ring")] ExpertRing, [Accessory("Master's Ring")] MasterRing, [Accessory("Cosmic Ring")] CosmicRing, [Accessory("Power Ring")] PowerRing, [Accessory("Buster Ring")] BusterRing, [Accessory("Valor Ring")] ValorRing, [Accessory("Phantom Ring")] PhantomRing, [Accessory("Orichalcum Ring")] OrichalcumRing, [Accessory("Magic Ring")] MagicRing, [Accessory("Rune Ring")] RuneRing, [Accessory("Force Ring")] ForceRing, [Accessory("Sorcerer's Ring")] SorcererRing, [Accessory("Wisdom Ring")] WisdomRing, [Accessory("Bronze Necklace")] BronzeNecklace, [Accessory("Silver Necklace")] SilverNecklace, [Accessory("Master's Necklace")] MasterNecklace, [Accessory("Bronze Amulet")] BronzeAmulet, [Accessory("Silver Amulet")] SilverAmulet, [Accessory("Gold Amulet")] GoldAmulet, [Accessory("Junior Medal")] JuniorMedal, [Accessory("Master Medal")] MasterMedal, [Accessory("Star Medal")] StarMedal, [Accessory("Mickey Clasp")] MickeyClasp, [Accessory("Soldier's Earring")] SoldierEarring, [Accessory("Fencer's Earring")] FencerEarring, [Accessory("Mage's Earring")] MageEarring, [Accessory("Slayer's Earring")] SlayerEarring, [Accessory("Moon Amulet")] MoonAmulet, [Accessory("Star Charm")] StarCharm, [Accessory("Cosmic Arts")] CosmicArts, [Accessory("Crystal Regalia")] CrystalRegalia, [Accessory("Water Cufflink")] WaterCufflink, [Accessory("Thunder Cufflink")] ThunderCufflink, [Accessory("Fire Cufflink")] FireCufflink, [Accessory("Aero Cufflink")] AeroCufflink, [Accessory("Blizzard Cufflink")] BlizzardCufflink, [Accessory("Celestriad")] Celestriad, [Accessory("Yin-Yang Cufflink")] YinYangCufflink, [Accessory("Gourmand's Ring")] GourmandRing, [Accessory("Draw Ring")] DrawRing, [Accessory("Lucky Ring")] LuckyRing, [Accessory("Flanniversary Badge")] FlanniversaryBadge, [Accessory("Bronze Necklace")] BronzeNecklace_33, [Accessory("Bronze Necklace")] BronzeNecklace_34, [Accessory("Bronze Necklace")] BronzeNecklace_35, [Accessory("Bronze Necklace")] BronzeNecklace_36, [Accessory("Bronze Necklace")] BronzeNecklace_37, [Accessory("Bronze Necklace")] BronzeNecklace_38, [Accessory("Bronze Necklace")] BronzeNecklace_39, [Accessory("Bronze Necklace")] BronzeNecklace_3A, [Accessory("Bronze Necklace")] BronzeNecklace_3B, [Accessory("Bronze Necklace")] BronzeNecklace_3C, [Accessory("Bronze Necklace")] BronzeNecklace_3D, [Accessory("Bronze Necklace")] BronzeNecklace_3E, [Accessory("Silver Necklace")] SilverNecklace_3F, [Accessory("Silver Necklace")] SilverNecklace_40, [Accessory("Silver Necklace")] SilverNecklace_41, [Accessory("Silver Necklace")] SilverNecklace_42, [Accessory("Silver Necklace")] SilverNecklace_43, [Accessory("Silver Necklace")] SilverNecklace_44, [Accessory("Silver Necklace")] SilverNecklace_45, [Accessory("Silver Necklace")] SilverNecklace_46, [Accessory("Silver Necklace")] SilverNecklace_47, [Accessory("Silver Necklace")] SilverNecklace_48, [Accessory("Silver Necklace")] SilverNecklace_49, [Accessory("Master's Necklace")] MasterNecklace_4A, [Accessory("Master's Necklace")] MasterNecklace_4B, [Accessory("Master's Necklace")] MasterNecklace_4C, [Accessory("Master's Necklace")] MasterNecklace_4D, [Accessory("Master's Necklace")] MasterNecklace_4E, [Accessory("Master's Necklace")] MasterNecklace_4F, [Accessory("Master's Necklace")] MasterNecklace_50, [Accessory("Master Medal")] MasterMedal_51, [Accessory("Master Medal")] MasterMedal_52, [Accessory("Junior Medal")] JuniorMedal_53, [Accessory("Master Medal")] MasterMedal_54, [Accessory("Junior Medal")] JuniorMedal_55, [Accessory("Junior Medal")] JuniorMedal_56, [Accessory("Junior Medal")] JuniorMedal_57, [Accessory("Junior Medal")] JuniorMedal_58, [Accessory("Junior Medal")] JuniorMedal_59, [Accessory("Junior Medal")] JuniorMedal_5A, [Accessory("Junior Medal")] JuniorMedal_5B, [Accessory("Junior Medal")] JuniorMedal_5C, [Accessory("Star Medal")] StarMedal_5D, [Accessory("Master Medal")] MasterMedal_5E, [Accessory("Master Medal")] MasterMedal_5F, [Accessory("Star Medal")] StarMedal_60, [Accessory("Master Medal")] MasterMedal_61, [Accessory("Star Medal")] StarMedal_62, [Accessory("Master Medal")] MasterMedal_63, [Accessory("Master Medal")] MasterMedal_64, [Accessory("Master Medal")] MasterMedal_65, [Accessory("Master Medal")] MasterMedal_66, [Accessory("Master Medal")] MasterMedal_67, [Accessory("Master Medal")] MasterMedal_68, [Accessory("Star Medal")] StarMedal_69, [Accessory("Star Medal")] StarMedal_6A, [Accessory("Star Medal")] StarMedal_6B, [Accessory("Star Medal")] StarMedal_6C, [Accessory("Star Medal")] StarMedal_6D, [Accessory("Star Medal")] StarMedal_6E, [Accessory("Breakthrough")] Item6f, [Accessory("Crystal Regalia+")] Item70, [Snack("Pumpkin Velouté")] PumpkinVeloute = 425, [Snack("Consomé")] Consome, [Snack("Carrot Potage")] CarrotPotage, [Snack("Crab Bisque")] CrabBisque, [Snack("Cold Tomato Soup")] ColdTomatoSoup, [Snack("Scallop Poêlé")] ScallopPoele, [Snack("Lobster Mousse")] LobsterMousse, [Snack("Mushroom Terrine")] MushroomTerrine, [Snack("Ratatouille")] Ratatouille, [Snack("Caprese Salad")] CapreseSalad, [Snack("Sole Meunière")] SoleMeuniere, [Snack("Eel Matelote")] EelMatelote, [Snack("Sea Bass en Papillote")] SeaBassEnPapillote, [Snack("Bouillabaisse")] Bouillabaisse, [Snack("Seafood Tartare")] SeafoodTartare, [Snack("Sea Bass Poêlé")] SeaBassPoele, [Snack("Sweetbread Poêlé")] SweetbreadPoele, [Snack("Beef Sauté")] BeefSaute, [Snack("Beef Bourguignon")] BeefBourguignon, [Snack("Stuffed Quail")] StuffedQuail, [Snack("Filet Mignon Poêlé")] FiletMignonPoele, [Snack("Crêpes Suzette")] CrepesSuzette, [Snack("Chocolate Mousse")] ChocolateMousse, [Snack("Fresh Fruit Compote")] FreshFruitCompote, [Snack("Berries au Fromage")] BerriesAuFromage, [Snack("Warm Banana Soufflé")] WarmBananaSouffle, [Snack("Fruit Gelée")] FruitGelee, [Snack("Tarte aux Fruits")] TarteAuxFruits, [Snack("Pumpkin Velouté+")] PumpkinVeloutePlus, [Snack("Consomé+")] ConsomePlus, [Snack("Carrot Potage+")] CarrotPotagePlus, [Snack("Crab Bisque+")] CrabBisquePlus, [Snack("Cold Tomato Soup+")] ColdTomatoSoupPlus, [Snack("Scallop Poêlé+")] ScallopPoelePlus, [Snack("Lobster Mousse+")] LobsterMoussePlus, [Snack("Mushroom Terrine+")] MushroomTerrinePlus, [Snack("Ratatouille+")] RatatouillePlus, [Snack("Caprese Salad+")] CapreseSaladPlus, [Snack("Sole Meunière+")] SoleMeunierePlus, [Snack("Eel Matelote+")] EelMatelotePlus, [Snack("Sea Bass en Papillote+")] SeaBassEnPapillotePlus, [Snack("Bouillabaisse+")] BouillabaissePlus, [Snack("Seafood Tartare+")] SeafoodTartarePlus, [Snack("Sea Bass Poêlé+")] SeaBassPoelePlus, [Snack("Sweetbread Poêlé+")] SweetbreadPoelePlus, [Snack("Beef Sauté+")] BeefSautePlus, [Snack("Beef Bourguignon+")] BeefBourguignonPlus, [Snack("Stuffed Quail+")] StuffedQuailPlus, [Snack("Filet Mignon Poêlé+")] FiletMignonPoelePlus, [Snack("Crêpes Suzette+")] CrepesSuzettePlus, [Snack("Chocolate Mousse+")] ChocolateMoussePlus, [Snack("Fresh Fruit Compote+")] FreshFruitCompotePlus, [Snack("Berries au Fromage+")] BerriesAuFromagePlus, [Snack("Warm Banana Soufflé+")] WarmBananaSoufflePlus, [Snack("Fruit Gelée+")] FruitGeleePlus, [Snack("Tarte aux Fruits+")] TarteAuxFruitsPlus, [Synthesis("Blazing Shard")] BlazingShard = 489, [Synthesis("Blazing Stone")] BlazingStone, [Synthesis("Blazing Gem")] BlazingGem, [Synthesis("Blazing Crystal")] BlazingCrystal, [Synthesis("Frost Shard")] FrostShard, [Synthesis("Frost Stone")] FrostStone, [Synthesis("Frost Gem")] FrostGem, [Synthesis("Frost Crystal")] FrostCrystal, [Synthesis("Lightning Shard")] LightningShard, [Synthesis("Lightning Stone")] LightningStone, [Synthesis("Lightning Gem")] LightningGem, [Synthesis("Lightning Crystal")] LightningCrystal = 500, [Synthesis("Lucid Shard")] LucidShard, [Synthesis("Lucid Stone")] LucidStone, [Synthesis("Lucid Gem")] LucidGem, [Synthesis("Lucid Crystal")] LucidCrystal, [Synthesis("Pulsing Shard")] PulsingShard, [Synthesis("Pulsing Stone")] PulsingStone, [Synthesis("Pulsing Gem")] PulsingGem, [Synthesis("Pulsing Crystal")] PulsingCrystal, [Synthesis("Writhing Shard")] WrithingShard, [Synthesis("Writhing Stone")] WrithingStone, [Synthesis("Writhing Gem")] WrithingGem, [Synthesis("Writhing Crystal")] WrithingCrystal, [Synthesis("Betwixt Shard")] BetwixtShard, [Synthesis("Betwixt Stone")] BetwixtStone, [Synthesis("Betwixt Gem")] BetwixtGem, [Synthesis("Betwixt Crystal")] BetwixtCrystal, [Synthesis("Twilight Shard")] TwilightShard, [Synthesis("Twilight Stone")] TwilightStone, [Synthesis("Twilight Gem")] TwilightGem, [Synthesis("Twilight Crystal")] TwilightCrystal, [Synthesis("Mythril Shard")] MythrilShard, [Synthesis("Mythril Stone")] MythrilStone, [Synthesis("Mythril Gem")] MythrilGem, [Synthesis("Mythril Crystal")] MythrilCrystal, [Synthesis("Sinister Shard")] SinisterShard, [Synthesis("Sinister Stone")] SinisterStone, [Synthesis("Sinister Gem")] SinisterGem, [Synthesis("Sinister Crystal")] SinisterCrystal, [Synthesis("Soothing Shard")] SoothingShard, [Synthesis("Soothing Stone")] SoothingStone, [Synthesis("Soothing Gem")] SoothingGem, [Synthesis("Soothing Crystal")] SoothingCrystal, [Synthesis("Wellspring Shard")] WellspringShard, [Synthesis("Wellspring Stone")] WellspringStone, [Synthesis("Wellspring Gem")] WellspringGem, [Synthesis("Wellspring Crystal")] WellspringCrystal, [Synthesis("Hungry Shard")] HungryShard, [Synthesis("Hungry Stone")] HungryStone, [Synthesis("Hungry Gem")] HungryGem, [Synthesis("Hungry Crystal")] HungryCrystal, [Synthesis("Fluorite")] Fluorite, [Synthesis("Damascus")] Damascus, [Synthesis("Adamantite")] Adamantite, [Synthesis("Orichalcum")] Orichalcum, [Synthesis("Orichalcum+")] OrichalcumPlus, [Synthesis("Electrum")] Electrum, [Synthesis("Evanescent Crystal")] EvanescentCrystal, [Synthesis("Illusory Crystal")] IllusoryCrystal, [Food("Crab")] Crab = 589, [Food("Scallop")] Scallop, [Food("Lobster")] Lobster, [Food("Sole")] Sole, [Food("Eel")] Eel, [Food("Sea Bass")] SeaBass, [Food("Mussel")] Mussel, [Food("Cod")] Cod, [Food("Pumpkin")] Pumpkin, [Food("Zucchini")] Zucchini, [Food("Onion")] Onion, [Food("Tomato")] Tomato, [Food("Eggplant")] Eggplant, [Food("Carrot")] Carrot, [Food("Garlic")] Garlic, [Food("Celery")] Celery, [Food("Morel")] Morel, [Food("Porcini")] Porcini, [Food("Chanterelle")] Chanterelle, [Food("Portobello")] Portobello, [Food("Black Truffle")] BlackTruffle, [Food("King Oyster Mushroom")] KingOysterMushroom, [Food("Black Trumpet")] BlackTrumpet, [Food("Miller Mushroom")] MillerMushroom, [Food("Cloves")] Cloves, [Food("Rosemary")] Rosemary, [Food("Thyme")] Thyme, [Food("Bay Leaf")] BayLeaf, [Food] Basil, [Food] Dill, [Food] Parsley, [Food] Saffron, [Food] Apricot, [Food] Gooseberry, [Food] Lemon, [Food] Orange, [Food] Raspberry, [Food] Pear, [Food] Blackberry, [Food] Apple, [Food] Cheese, [Food] Chocolate, [Food] Caviar, [Food] Butter, [Food("Olive Oil")] OliveOil, [Food] Cornichon, [Food] Rice, [Food] Honey, [Food("Sour Cherry")] SourCherry, [Food] Strawberry, [Food("Blood Orange")] BloodOrange, [Food] Banana, [Food] Grapes, [Food] Melon, [Food] Watermelon, [Food] Veal, [Food] Beef, [Food] Quail, [Food("Filet Mignon")] FiletMignon, [KeyItem("Gummiphone")] Gummiphone = 654, [KeyItem("AR Device")] ARDevice, [KeyItem("Prize Postcard")] PrizePostcard, [KeyItem("M.O.G. Card")] MOGCard, [KeyItem("Dream Heartbinder")] DreamHeartbinder, [KeyItem("Pixel Heartbinder")] PixelHeartbinder, [KeyItem("'Ohana Heartbinder")] OhanaHeartbinder, [KeyItem("Pride Heartbinder")] PrideHeartbinder, [KeyItem("Ocean Heartbinder")] OceanHeartbinder, [KeyItem("Golden Herc Figure")] GoldenHercFigure, [KeyItem("Proof of Promises")] Item664, [KeyItem("Proof of Times Past")] Item665, [MogItem("Kupo Coin")] KupoCoin = 677, [KeyItem("Giantland")] Minigame01 = 681, [KeyItem("Mickey, the mail pilot")] Minigame02, [KeyItem("The musical farmer")] Minigame03, [KeyItem("Building a building")] Minigame04, [KeyItem("The mad doctor")] Minigame05, [KeyItem("Mickey´s kitten catch")] Minigame06, [KeyItem("The klondike kid")] Minigame07, [KeyItem("Fishin´frenzy")] Minigame08, [KeyItem("The karnival kid")] Minigame09, [KeyItem("Mickey cuts up")] Minigame10, [KeyItem("Mickey´s prison escape")] Minigame11, [KeyItem("How to play baseball")] Minigame12, [KeyItem("How to play golf")] Minigame13, [KeyItem("Mickey´s circus")] Minigame14, [KeyItem("Camping out")] Minigame15, [KeyItem("Taxi troubles")] Minigame16, [KeyItem("Beach party")] Minigame17, [KeyItem("The wayward canary")] Minigame18, [KeyItem("Mickey´s mechanical")] Minigame19, [KeyItem("The barnyard battle")] Minigame20, [KeyItem("Cast out to sea")] Minigame21, [KeyItem("Barnyard sports")] Minigame22, [KeyItem("Mickey steps out")] Minigame23, [KeyItem("Secret Report 1")] SecretReport1 = 814, [KeyItem("Secret Report 2")] SecretReport2, [KeyItem("Secret Report 3")] SecretReport3, [KeyItem("Secret Report 4")] SecretReport4, [KeyItem("Secret Report 5")] SecretReport5, [KeyItem("Secret Report 6")] SecretReport6, [KeyItem("Secret Report 7")] SecretReport7, [KeyItem("Secret Report 8")] SecretReport8, [KeyItem("Secret Report 9")] SecretReport9, [KeyItem("Secret Report 10")] SecretReport10, [KeyItem("Secret Report 11")] SecretReport11, [KeyItem("Secret Report 12")] SecretReport12, [KeyItem("Secret Report 13")] SecretReport13, [Info("Angular/G-01")] Item833 = 833, [Info("Angular/G-02")] Item834, [Info("Angular/G-03")] Item835, [Info("Angular/G-04")] Item836, [Info("Angular/G-05")] Item837, [Info("Angular/G-06")] Item838, [Info("Angular/G-07")] Item839, [Info("Angular/G-08")] Item840, [Info("Angular/G-09")] Item841, [Info("Angular/G-10")] Item842, [Info("Angular/G-11")] Item843, [Info("Angular/G-12")] Item844, [Info("Rounded/G-01")] Item845, [Info("Rounded/G-02")] Item846, [Info("Rounded/G-03")] Item847, [Info("Rounded/G-04")] Item848, [Info("Rounded/G-05")] Item849, [Info("Rounded/G-06")] Item850, [Info("Rounded/G-07")] Item851, [Info("Rounded/G-08")] Item852, [Info("Rounded/G-09")] Item853, [Info("Rounded/G-10")] Item854, [Info("Rounded/G-11")] Item855, [Info("Rounded/G-12")] Item856, [Info("Rounded/G-13")] Item857, [Info("Rounded/G-14")] Item858, [Info("Rounded/G-15")] Item859, [Info("Cylindrical/G-01")] Item860, [Info("Cylindrical/G-02")] Item861, [Info("Cylindrical/G-03")] Item862, [Info("Cylindrical/G-04")] Item863, [Info("Cylindrical/G-05")] Item864, [Info("Cylindrical/G-06")] Item865, [Info("Cylindrical/G-07")] Item866, [Info("Cylindrical/G-08")] Item867, [Info("Cylindrical/G-09")] Item868, [Info("Aero/G-01")] Item869, [Info("Aero/G-02")] Item870, [Info("Aero/G-03")] Item871, [Info("Aero/G-04")] Item872, [Info("Aero/G-05")] Item873, [Info("Aero/G-06")] Item874, [Info("Aero/G-07")] Item875, [Info("Aero/G-08")] Item876, [Info("Aero/G-09")] Item877, [Info("Aero/G-10")] Item878, [Info("Aero/G-11")] Item879, [Info("Aero/G-12")] Item880, [Info("Fire/G")] Item907 = 907, [Info("Fira/G")] Item908, [Info("Firaga/G-01")] Item909, [Info("Firaga/G-02")] Item910, [Info("Blizzard/G")] Item911, [Info("Blizzara/G")] Item912, [Info("Blizzaga/G-01")] Item913, [Info("Blizzaga/G-02")] Item914, [Info("Gravity/G")] Item915, [Info("Gravira/G")] Item916, [Info("Graviga/G-01")] Item917, [Info("Graviga/G-02")] Item918, [Info("Water/G")] Item919, [Info("Watera/G")] Item920, [Info("Waterga/G-01")] Item921, [Info("Waterga/G-02")] Item922, [Info("Comet/G")] Item923, [Info("Meteor/G")] Item924, [Info("Thunder/G")] Item925, [Info("Thundara/G")] Item926, [Info("Thundaga/G")] Item927, [Info("Ultima/G")] Item928, [Info("Masamune/G")] Item929, [Info("Excalibur/G")] Item930, [Info("Drill/G")] Item931, [Info("Saw/G")] Item932, [Info("Gungnir/G")] Item933, [Info("Laser Blade/G")] Item934, [Info("Knuckle/G")] Item935, [Info("Manipulator/G")] Item936, [Info("Vernier/G")] Item937, [Info("Thruster/G")] Item938, [Info("Booster/G")] Item939, [Info("Rocket/G")] Item940, [Info("Mini-Propeller/G")] Item941, [Info("Propeller/G")] Item942, [Info("Screw Propeller/G")] Item943, [Info("Small Rotor/G")] Item944, [Info("Rotor/G")] Item945, [Info("Large Rotor/G")] Item946, [Info("Mast/G")] Item947, [Info("Cyclone/G")] Item948, [Info("Storm/G")] Item949, [Info("Tempest/G")] Item950, [Info("Typhoon/G")] Item951, [Info("Hurricane/G")] Item952, [Info("Vortex/G")] Item953, [Info("Sonic Turbo/G")] Item954, [Info("Darkness/G")] Item955, [Info("Angel/G")] Item956, [Info("Butterfly/G")] Item957, [Unused] Item958, [Info("Tire/G")] Item959, [Info("Caterpillar/G")] Item960, [Info("Triple Wheel/G")] Item961, [Info("Bubble Helm/G")] Item962, [Info("Flat Helm/G")] Item963, [Info("Solid Helm/G")] Item964, [Info("Sphere Helm/G")] Item965, [Info("Bridge/G")] Item966, [Info("Big Bridge/G")] Item967, [Info("Mini-Helm/G")] Item968, [Info("Long Helm/G")] Item969, [Unused] Item970, [Info("Wall/G")] Item971, [Info("Large Wall/G")] Item972, [Info("Shield/G")] Item973, [Info("Large Shield/G")] Item974, [Info("Radome/G")] Item975, [Info("Antenna/G")] Item976, [Info("Parabola/G")] Item977, [Info("Neon Orb/G")] Item978, [Info("Neon Bar/G")] Item979, [Info("Neon Chain/G")] Item980, [Info("Round Light/G")] Item981, [Info("Square Light/G")] Item982, [Info("Strobe Light/G")] Item983, [Info("Flag/G")] Item984, [Info("Muffler/G")] Item985, [Info("Chimney/G")] Item986, [Info("Beetle Horn/G")] Item987, [Info("Cat Ear/G")] Item988, [Info("Cat Tail/G")] Item989, [Info("")] Item990, [Info("Dog/G-01")] Item991, [Info("Cat/G")] Item992, [Info("Chocochick/G")] Item993, [Info("Dog/G-02")] Item994, [Info("Bunny/G")] Item995, [Info("Bird/G")] Item996, [Info("Meow Wow/G")] Item997, [Info("Flantastic Seven/G-01")] Item998, [Info("Flantastic Seven/G-02")] Item999, [Info("Flantastic Seven/G-03")] Item1000, [Info("Present/G")] Item1001, [Info("Cake/G")] Item1002, [Info("Treasure Chest/G")] Item1003, [Info("Lantern/G")] Item1004, } } ================================================ FILE: KHSave.Lib3/Types/ItemType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum ItemType : byte { [Consumable] Consumable, [Consumable("Consumable (same)")] ConsumableMirrored, [Tent] Tent, [Weapon] Weapon, [Armor] Armor, [Accessory] Accessory, [Snack] Snack, [Synthesis] Synthesis, [Food] Food, [KeyItem] KeyItem, [MogItem] Mog, [KeyItem("Gummiphone game")] Type0b, [Info] Untested0c, [KeyItem("Secret Report")] AnsemReport, [Info("Gummi Block")] GummiBlock, [Info("Gummi related?")] GummiRelated, [Info] Untested10, [Info] Untested11, [Info] Untested12, [Info] Untested13, } } ================================================ FILE: KHSave.Lib3/Types/KeyItemType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum KeyItemType : byte { [Info] Empty, [KeyItem("")] Item01, [KeyItem("Gummiphone")] Gummiphone, [KeyItem("AR Device")] ARDevice, [KeyItem("Prize Postcard")] PrizePostcard, [KeyItem("M.O.G. Card")] MOGCard, [KeyItem("Dream Heartbinder")] DreamHeartbinder, [KeyItem("Pixel Heartbinder")] PixelHeartbinder, [KeyItem("'Ohana Heartbinder")] OhanaHeartbinder, [KeyItem("Pride Heartbinder")] PrideHeartbinder, [KeyItem("Ocean Heartbinder")] OceanHeartbinder, [KeyItem("Golden Herc Figure")] GoldenHercFigure, Item0c, Item0d, Item0e, Item0f, Item10, Item11, Item12, Item13, Item14, Item15, Item16, Item17, Item18, Item19, Item1a, Item1b, Item1c, Item1d, Item1e, Item1f, Item20, Item21, Item22, Item23, Item24, Item25, Item26, Item27, Item28, Item29, Item2a, Item2b, Item2c, Item2d, Item2e, Item2f, Item30, Item31, Item32, Item33, Item34, Item35, Item36, Item37, Item38, Item39, Item3a, Item3b, Item3c, Item3d, Item3e, Item3f, Item40, Item41, Item42, Item43, Item44, Item45, Item46, Item47, Item48, Item49, Item4a, Item4b, Item4c, Item4d, Item4e, Item4f, Item50, Item51, Item52, Item53, Item54, Item55, Item56, Item57, Item58, Item59, Item5a, Item5b, Item5c, Item5d, Item5e, Item5f, Item60, Item61, Item62, Item63, Item64, Item65, Item66, Item67, Item68, Item69, Item6a, Item6b, Item6c, Item6d, Item6e, Item6f, Item70, Item71, Item72, Item73, Item74, Item75, Item76, Item77, Item78, Item79, Item7a, Item7b, Item7c, Item7d, Item7e, Item7f, Item80, Item81, Item82, Item83, Item84, Item85, Item86, Item87, Item88, Item89, Item8a, Item8b, Item8c, Item8d, Item8e, Item8f, Item90, Item91, Item92, Item93, Item94, Item95, Item96, Item97, Item98, Item99, Item9a, Item9b, Item9c, Item9d, Item9e, Item9f, Itema0, Itema1, Itema2, Itema3, Itema4, Itema5, Itema6, Itema7, Itema8, Itema9, Itemaa, Itemab, Itemac, Itemad, Itemae, Itemaf, Itemb0, Itemb1, Itemb2, Itemb3, Itemb4, Itemb5, Itemb6, Itemb7, Itemb8, Itemb9, Itemba, Itembb, Itembc, Itembd, Itembe, Itembf, Itemc0, Itemc1, Itemc2, Itemc3, Itemc4, Itemc5, Itemc6, Itemc7, Itemc8, Itemc9, Itemca, Itemcb, Itemcc, Itemcd, Itemce, Itemcf, Itemd0, Itemd1, Itemd2, Itemd3, Itemd4, Itemd5, Itemd6, Itemd7, Itemd8, Itemd9, Itemda, Itemdb, Itemdc, Itemdd, Itemde, Itemdf, Iteme0, Iteme1, Iteme2, Iteme3, Iteme4, Iteme5, Iteme6, Iteme7, Iteme8, Iteme9, Itemea, Itemeb, Itemec, Itemed, Itemee, Itemef, Itemf0, Itemf1, Itemf2, Itemf3, Itemf4, Itemf5, Itemf6, Itemf7, Itemf8, Itemf9, Itemfa, Itemfb, Itemfc, Itemfd, Itemfe, Itemff, } } ================================================ FILE: KHSave.Lib3/Types/LocationType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum LocationType : byte { [Info("The City / North District")] Location00, [Info("The City / Central District")] Location01, [Info("The City / South District")] Location02, [Info("Hiro's Garage")] Location03, [Info("The High Seas / Port Royal Waters")] Location04, [Info("The High Seas / Northern Waters")] Location05, [Info("The High Seas / Southern Waters")] Location06, [Info("The High Seas / Huddled Isles")] Location07, [Info("The High Seas / Undersea Cavern")] Location08, [Info("The High Seas / Sandbar Isle")] Location09, [Info("The High Seas / Forsaken Isle")] Location0a, [Info("The High Seas / Isla Verdemontaña")] Location0b, [Info("The High Seas / Isla de los Mástiles")] Location0c, [Info("Port Royal / Docks")] Location0d, [Info("Port Royal / Seaport")] Location0e, [Info("Port Royal / Fort")] Location0f, [Info("Port Royal / Settlement")] Location10, [Info("Port Royal / Dockside Path")] Location11, [Info("Port Royal")] Location12, [Info("Over the Edge")] Location13, [Info("The Labyrinth of Ice / Lower Tier")] Location14, [Info("The Labyrinth of Ice / Middle Tier")] Location15, [Info("The Labyrinth of Ice / Upper Tier")] Location16, [Info("The North Mountain / Mountain Ridge")] Location17, [Info("The North Mountain / Ice Palace")] Location18, [Info("The North Mountain / Treescape")] Location19, [Info("The North Mountain / Gorge")] Location1a, [Info("The North Mountain / Valley of Ice")] Location1b, [Info("The North Mountain / Frozen Wall")] Location1c, [Info("The North Mountain / Snowfield")] Location1d, [Info("The North Mountain / Fjord")] Location1e, [Info("The North Mountain / Foothills")] Location1f, [Info("Monsters. Inc. / Lobby & Offices")] Location20, [Info("Monsters. Inc. / Laugh Room")] Location21, [Info("The Factory / Basement")] Location22, [Info("The Factory / Ground Floor")] Location23, [Info("The Factory / Second Floor")] Location24, [Info("The Power Plant / Accessway")] Location25, [Info("The Power Plant / Tank Yard")] Location26, [Info("The Power Plant / Vault Passage")] Location27, [Info("The Door Vault / Upper Level")] Location28, [Info("The Door Vault / Lower Level")] Location29, [Info("The Door Vault / Service Area")] Location2a, [Info("Andy's House")] Location2b, [Info("Galaxy Toys / Main Floor: 1F")] Location2c, [Info("Galaxy Toys / Main Floor: 2F")] Location2d, [Info("Galaxy Toys / Main Floor: 3F")] Location2e, [Info("Galaxy Toys / Babies & Toddlers: Dolls")] Location2f, [Info("Galaxy Toys / Babies & Toddlers: Outdoors")] Location30, [Info("Galaxy Toys / Lower Vents")] Location31, [Info("Galaxy Toys / Upper Vents")] Location32, [Info("Galaxy Toys / Action Figures")] Location33, [Info("Galaxy Toys / Video Games")] Location34, [Info("Galaxy Toys / Kid Korral")] Location35, [Info("Galaxy Toys / Rest Area")] Location36, [Info("The Neighborhood / Tram Common")] Location37, [Info("The Neighborhood / Underground Conduit")] Location38, [Info("The Neighborhood / The Woods")] Location39, [Info("The Neighborhood / The Old Mansion")] Location3a, [Info("Realm of the Gods / Courtyard")] Location3b, [Info("Realm of the Gods / Corridors")] Location3c, [Info("Realm of the Gods / Secluded Forge")] Location3d, [Info("Realm of the Gods / Cloud Ridge")] Location3e, [Info("Realm of the Gods / Apex")] Location3f, [Info("Mount Olympus / Ravine")] Location40, [Info("Mount Olympus / Cliff Ascent")] Location41, [Info("Mount Olympus / Mountainside")] Location42, [Info("Mount Olympus / Summit")] Location43, [Info("Thebes / Agora")] Location44, [Info("Thebes / Gardens")] Location45, [Info("Thebes / Overlook")] Location46, [Info("Thebes / The Big Olive")] Location47, [Info("Thebes / Alleyway")] Location48, [Info("The Forest / Tower")] Location49, [Info("The Forest / Hills")] Location4a, [Info("The Forest / Marsh")] Location4b, [Info("The Forest / Campsite")] Location4c, [Info("The Forest / Wetlands")] Location4d, [Info("The Forest / Wildflower Clearing")] Location4e, [Info("The Forest / Shore")] Location4f, [Info("The Kingdom / Thoroughfare")] Location50, [Info("The Kingdom / Wharf")] Location51, [Info("The Badlands")] Location52, [Info("The Skein of Severance / Trail of Valediction")] Location53, [Info("The Skein of Severance / Twist of Isolation")] Location54, [Info("The Skein of Severance / Tower of Endings")] Location55, [Info("Rabbit's House")] Location56, [Info("The Stairway to the Sky")] Location57, [Info("The Realm of Darkness")] Location58, [Info("Worldmap")] Location59, [Info("The Final World")] Location5a, [Info("The Land of Departure")] Location5b, [Info("The Bridge")] Location5c, [Info("Davy Jones' Locker")] Location5d, [Info("The Realm of Darkness")] Location5e, } } ================================================ FILE: KHSave.Lib3/Types/MaterialType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum MaterialType { [Synthesis("Blazing Shard")] BlazingShard, [Synthesis("Blazing Stone")] BlazingStone, [Synthesis("Blazing Gem")] BlazingGem, [Synthesis("Blazing Crystal")] BlazingCrystal, [Synthesis("Frost Shard")] FrostShard, [Synthesis("Frost Stone")] FrostStone, [Synthesis("Frost Gem")] FrostGem, [Synthesis("Frost Crystal")] FrostCrystal, [Synthesis("Lightning Shard")] LightningShard, [Synthesis("Lightning Stone")] LightningStone, [Synthesis("Lightning Gem")] LightningGem, [Synthesis("Lightning Crystal")] LightningCrystal, [Synthesis("Lucid Shard")] LucidShard, [Synthesis("Lucid Stone")] LucidStone, [Synthesis("Lucid Gem")] LucidGem, [Synthesis("Lucid Crystal")] LucidCrystal, [Synthesis("Pulsing Shard")] PulsingShard, [Synthesis("Pulsing Stone")] PulsingStone, [Synthesis("Pulsing Gem")] PulsingGem, [Synthesis("Pulsing Crystal")] PulsingCrystal, [Synthesis("Writhing Shard")] WrithingShard, [Synthesis("Writhing Stone")] WrithingStone, [Synthesis("Writhing Gem")] WrithingGem, [Synthesis("Writhing Crystal")] WrithingCrystal, [Synthesis("Betwixt Shard")] BetwixtShard, [Synthesis("Betwixt Stone")] BetwixtStone, [Synthesis("Betwixt Gem")] BetwixtGem, [Synthesis("Betwixt Crystal")] BetwixtCrystal, [Synthesis("Twilight Shard")] TwilightShard, [Synthesis("Twilight Stone")] TwilightStone, [Synthesis("Twilight Gem")] TwilightGem, [Synthesis("Twilight Crystal")] TwilightCrystal, [Synthesis("Mythril Shard")] MythrilShard, [Synthesis("Mythril Stone")] MythrilStone, [Synthesis("Mythril Gem")] MythrilGem, [Synthesis("Mythril Crystal")] MythrilCrystal, [Synthesis("Sinister Shard")] SinisterShard, [Synthesis("Sinister Stone")] SinisterStone, [Synthesis("Sinister Gem")] SinisterGem, [Synthesis("Sinister Crystal")] SinisterCrystal, [Synthesis("Soothing Shard")] SoothingShard, [Synthesis("Soothing Stone")] SoothingStone, [Synthesis("Soothing Gem")] SoothingGem, [Synthesis("Soothing Crystal")] SoothingCrystal, [Synthesis("Wellspring Shard")] WellspringShard, [Synthesis("Wellspring Stone")] WellspringStone, [Synthesis("Wellspring Gem")] WellspringGem, [Synthesis("Wellspring Crystal")] WellspringCrystal, [Synthesis("Hungry Shard")] HungryShard, [Synthesis("Hungry Stone")] HungryStone, [Synthesis("Hungry Gem")] HungryGem, [Synthesis("Hungry Crystal")] HungryCrystal, [Synthesis("Fluorite")] Fluorite, [Synthesis("Damascus")] Damascus, [Synthesis("Adamantite")] Adamantite, [Synthesis("Orichalcum")] Orichalcum, [Synthesis("Orichalcum+")] OrichalcumPlus, [Synthesis("Electrum")] Electrum, [Synthesis("Evanescent Crystal")] EvanescentCrystal, [Synthesis("Illusory Crystal")] IllusoryCrystal, } } ================================================ FILE: KHSave.Lib3/Types/MogType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum MogType : byte { [Info] Empty, [MogItem("Kupo Coin")] Item01, Item02, Item03, Item04, Item05, Item06, Item07, Item08, Item09, Item0a, Item0b, Item0c, Item0d, Item0e, Item0f, Item10, Item11, Item12, Item13, Item14, Item15, Item16, Item17, Item18, Item19, Item1a, Item1b, Item1c, Item1d, Item1e, Item1f, Item20, Item21, Item22, Item23, Item24, Item25, Item26, Item27, Item28, Item29, Item2a, Item2b, Item2c, Item2d, Item2e, Item2f, Item30, Item31, Item32, Item33, Item34, Item35, Item36, Item37, Item38, Item39, Item3a, Item3b, Item3c, Item3d, Item3e, Item3f, Item40, Item41, Item42, Item43, Item44, Item45, Item46, Item47, Item48, Item49, Item4a, Item4b, Item4c, Item4d, Item4e, Item4f, Item50, Item51, Item52, Item53, Item54, Item55, Item56, Item57, Item58, Item59, Item5a, Item5b, Item5c, Item5d, Item5e, Item5f, Item60, Item61, Item62, Item63, Item64, Item65, Item66, Item67, Item68, Item69, Item6a, Item6b, Item6c, Item6d, Item6e, Item6f, Item70, Item71, Item72, Item73, Item74, Item75, Item76, Item77, Item78, Item79, Item7a, Item7b, Item7c, Item7d, Item7e, Item7f, Item80, Item81, Item82, Item83, Item84, Item85, Item86, Item87, Item88, Item89, Item8a, Item8b, Item8c, Item8d, Item8e, Item8f, Item90, Item91, Item92, Item93, Item94, Item95, Item96, Item97, Item98, Item99, Item9a, Item9b, Item9c, Item9d, Item9e, Item9f, Itema0, Itema1, Itema2, Itema3, Itema4, Itema5, Itema6, Itema7, Itema8, Itema9, Itemaa, Itemab, Itemac, Itemad, Itemae, Itemaf, Itemb0, Itemb1, Itemb2, Itemb3, Itemb4, Itemb5, Itemb6, Itemb7, Itemb8, Itemb9, Itemba, Itembb, Itembc, Itembd, Itembe, Itembf, Itemc0, Itemc1, Itemc2, Itemc3, Itemc4, Itemc5, Itemc6, Itemc7, Itemc8, Itemc9, Itemca, Itemcb, Itemcc, Itemcd, Itemce, Itemcf, Itemd0, Itemd1, Itemd2, Itemd3, Itemd4, Itemd5, Itemd6, Itemd7, Itemd8, Itemd9, Itemda, Itemdb, Itemdc, Itemdd, Itemde, Itemdf, Iteme0, Iteme1, Iteme2, Iteme3, Iteme4, Iteme5, Iteme6, Iteme7, Iteme8, Iteme9, Itemea, Itemeb, Itemec, Itemed, Itemee, Itemef, Itemf0, Itemf1, Itemf2, Itemf3, Itemf4, Itemf5, Itemf6, Itemf7, Itemf8, Itemf9, Itemfa, Itemfb, Itemfc, Itemfd, Itemfe, Itemff, } } ================================================ FILE: KHSave.Lib3/Types/PartyCharacter.cs ================================================ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum PartyCharacter : byte { [Info("Default")] Sora, [Info("Sora (Caribbean)")] SoraCaribbean, [Info("Sora (Monstropolis)")] SoraMonstropolis, [Info("Sora (Toy Box)")] SoraToyBox, [Info("Sora (Baymax)")] SoraBaymax, Char05, [Info("Sora (KH2)")] SoraKh2, Char07, Char08, [Info("Riku (KH2)")] RikuKh2, [Info("Mickey")] Mickey, [Info("Donald")] Donald, [Info("Goofy")] Goofy, [Info("Jack")] Jack, [Info("Woody")] Woody, [Info("Buzz")] Buzz, [Info("Hercules")] Hercules, [Info("Rapunzel")] Rapunzel, [Info("Eugene")] Eugene, [Info("Sulley")] Sulley, [Info("Mike")] Mike, Char15, [Info("Marshmallow")] Marshmallow, [Info("Baymax")] Baymax, } } ================================================ FILE: KHSave.Lib3/Types/PlayableCharacterType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace KHSave.Lib3.Types { public enum PlayableCharacterType { Sora, Donald, Goofy, Hercules, Woody, Buzz, Rapunzel, Flynn, Sulley, Mike, Marshmallow, Baymax, Jack, Riku, Mickey, Unused } } ================================================ FILE: KHSave.Lib3/Types/RecordAttractionType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum RecordAttractionType { [Info("Pirate Ship")] Usage00, [Info("Mad Tea Cups")] Usage01, [Info("Blaster Blaze")] Usage02, [Info("Magic Carousel")] Usage03, [Info("Splash Run")] Usage04, } } ================================================ FILE: KHSave.Lib3/Types/RecordShotlockType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum RecordShotlockType { [Info("Kingdom Key / King of Hearts Total Uses")] Usage00, [Info("Kingdom Key / Ragnarok Total Uses")] Usage01, [Info("Hero's Origin / Drain Shock Total Uses")] Usage02, [Info("Hero's Origin / Atomic Deluge Total Uses")] Usage03, [Info("Shooting Star / Meteor Shower Total Uses")] Usage04, [Info("Shooting Star / Diving Barrage Total Uses")] Usage05, [Info("Shooting Star / Cluster Cannonade Total Uses")] Usage06, [Info("Favorite Deputy / Ghost Horde Total Uses")] Usage07, [Info("Favorite Deputy / Drill Dive Total Uses")] Usage08, [Info("Ever After / Shimmering Drops Total Uses")] Usage09, [Info("Ever After / Spectral Rays Total Uses")] Usage0a, [Info("Happy Gear / Snakebite Total Uses")] Usage0b, [Info("Happy Gear / Warp Trick Total Uses")] Usage0c, [Info("Crystal Snow / Diamond Dust Total Uses")] Usage0d, [Info("Crystal Snow / Frozen Crescents Total Uses")] Usage0e, [Info("Wheel of Fate / Blade Storm Total Uses")] Usage0f, [Info("Wheel of Fate / Flag Rampage Total Uses")] Usage10, [Info("Nano Gear / Cubic Stream Total Uses")] Usage11, [Info("Nano Gear / Zone Connector Total Uses")] Usage12, [Info("Hunny Spout / Hunny Burst Total Uses")] Usage13, [Info("Hunny Spout / Hunny Drizzle Total Uses")] Usage14, [Info("Hunny Spout / Sweet Surprise Total Uses")] Usage15, [Info("Grand Chef / Steam Spiral Total Uses")] Usage16, [Info("Grand Chef / Fruit Crusher Total Uses")] Usage17, [Info("Classic Tone / Phantom Rush Total Uses")] Usage18, [Info("Classic Tone / Noise Flux Total Uses")] Usage19, [Info("Starlight / Knights of the Round Total Uses")] Usage1a, [Info("Starlight / Union Ragnarok Total Uses")] Usage1b, [Info("Ultima Weapon / Infinity Circle Total Uses")] Usage1c, [Unused] [Info("")] Usage1d, [Unused] [Info("")] Usage1e, [Unused] [Info("")] Usage1f, } } ================================================ FILE: KHSave.Lib3/Types/SnackType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum SnackType : byte { [Info] Empty, [Snack("Pumpkin Velouté")] Item01, Item02, Item03, Item04, Item05, Item06, Item07, Item08, Item09, Item0a, Item0b, Item0c, Item0d, Item0e, Item0f, Item10, Item11, Item12, Item13, Item14, Item15, Item16, Item17, Item18, Item19, Item1a, Item1b, Item1c, Item1d, Item1e, Item1f, Item20, Item21, Item22, Item23, Item24, Item25, Item26, Item27, Item28, Item29, Item2a, Item2b, Item2c, Item2d, Item2e, Item2f, Item30, Item31, Item32, Item33, Item34, Item35, Item36, Item37, Item38, Item39, Item3a, Item3b, Item3c, Item3d, Item3e, Item3f, Item40, Item41, Item42, Item43, Item44, Item45, Item46, Item47, Item48, Item49, Item4a, Item4b, Item4c, Item4d, Item4e, Item4f, Item50, Item51, Item52, Item53, Item54, Item55, Item56, Item57, Item58, Item59, Item5a, Item5b, Item5c, Item5d, Item5e, Item5f, Item60, Item61, Item62, Item63, Item64, Item65, Item66, Item67, Item68, Item69, Item6a, Item6b, Item6c, Item6d, Item6e, Item6f, Item70, Item71, Item72, Item73, Item74, Item75, Item76, Item77, Item78, Item79, Item7a, Item7b, Item7c, Item7d, Item7e, Item7f, Item80, Item81, Item82, Item83, Item84, Item85, Item86, Item87, Item88, Item89, Item8a, Item8b, Item8c, Item8d, Item8e, Item8f, Item90, Item91, Item92, Item93, Item94, Item95, Item96, Item97, Item98, Item99, Item9a, Item9b, Item9c, Item9d, Item9e, Item9f, Itema0, Itema1, Itema2, Itema3, Itema4, Itema5, Itema6, Itema7, Itema8, Itema9, Itemaa, Itemab, Itemac, Itemad, Itemae, Itemaf, Itemb0, Itemb1, Itemb2, Itemb3, Itemb4, Itemb5, Itemb6, Itemb7, Itemb8, Itemb9, Itemba, Itembb, Itembc, Itembd, Itembe, Itembf, Itemc0, Itemc1, Itemc2, Itemc3, Itemc4, Itemc5, Itemc6, Itemc7, Itemc8, Itemc9, Itemca, Itemcb, Itemcc, Itemcd, Itemce, Itemcf, Itemd0, Itemd1, Itemd2, Itemd3, Itemd4, Itemd5, Itemd6, Itemd7, Itemd8, Itemd9, Itemda, Itemdb, Itemdc, Itemdd, Itemde, Itemdf, Iteme0, Iteme1, Iteme2, Iteme3, Iteme4, Iteme5, Iteme6, Iteme7, Iteme8, Iteme9, Itemea, Itemeb, Itemec, Itemed, Itemee, Itemef, Itemf0, Itemf1, Itemf2, Itemf3, Itemf4, Itemf5, Itemf6, Itemf7, Itemf8, Itemf9, Itemfa, Itemfb, Itemfc, Itemfd, Itemfe, Itemff, } } ================================================ FILE: KHSave.Lib3/Types/StoryFlagType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum StoryFlagType { [Info("Scala ad Caelum")] gameflow_BT, [Info("San Fransokyo")] gameflow_BX, [Info("Caribbean")] gameflow_CA, [Info("Caribbean - Chart last access")] gameflow_CA_chart_last_access, [Info("Caribbean - Ship ride type")] gameflow_CA_ship_ride_type, [Info("Caribbean - Port Royal search")] gameflow_CA_Sub_Portroyal_Search, [Info("World CS (unused)")] gameflow_CS, [Info("Destiny Island")] gameflow_DI, [Info("Land of Departure")] gameflow_DP, [Info("Dark World")] gameflow_DW, [Info("Dark World (unused)")] gameflow_DW_Sub_INT, [Info("Final World")] gameflow_EW, [Info("Final World - Test")] gameflow_EW_Sub_TESTB, [Info("Final World - Dive")] gameflow_EW_MISSION, [Info("Final World - Kingdom of Corona")] gameflow_EW_MISSION_RA, [Info("Final World - Monstropolis")] gameflow_EW_MISSION_MI, [Info("Final World - Toy Box")] gameflow_EW_MISSION_TS, [Info("Final World - Caribbean")] gameflow_EW_MISSION_CA, [Info("Final World - Frozen")] gameflow_EW_MISSION_FZ, [Info("System (unused)")] gameflow_EX, [Info("Arendelle")] gameflow_FZ, [Info("Arendelle - Minigame")] gameflow_FZ_Sub_SLIDEMISSION, [Info("Gummiship")] gameflow_GM, [Info("Gummiship - Area 1")] gameflow_GM_01, [Info("Gummiship - Area 2")] gameflow_GM_02, [Info("Gummiship - Area 3A")] gameflow_GM_03, [Info("Gummiship - Area 3B")] gameflow_GM_03_SUB, [Info("Gummiship - System")] gameflow_GM_SYS, [Info("Gummiship - Level up")] gameflow_GM_SYS_LEVELUP, [Info("Olympus")] gameflow_HE, [Info("Olympus #2")] gameflow_HE_Sub_HeraculesBoy, [Info("Keyblade Graveyard")] gameflow_KG, [Info("KG - Dark Riku, Xigbar")] gameflow_KG_13_A, [Info("KG - Luxord, Marluxia, Larxene")] gameflow_KG_13_B, [Info("KG - Vanitas, Terra-Xehanort")] gameflow_KG_13_C, [Info("KG - Xion, Saix")] gameflow_KG_13_D, [Info("Monstropolis")] gameflow_MI, [Info("Monstropolis (unused)")] gameflow_MI_Sub_INT, [Info("100 Acre Wood")] gameflow_PO, [Info("Kingdom of Corona")] gameflow_RA, [Info("Kingdom of Corona - Dandelion")] gameflow_RA_Dandelion, [Info("Kingdom of Corona - Rabbit")] gameflow_RA_Rabbit, [Info("Kingdom of Corona - Rainbow")] gameflow_RA_Rainbow, [Info("Kingdom of Corona - Bird")] gameflow_RA_Bird, [Info("Radiant Garden")] gameflow_RG, [Info("Secret Forest")] gameflow_SF, [Info("Toy Box")] gameflow_TS, [Info("Toy Box - Minigame")] gameflow_TS_Sub_GAM1, [Info("Twilight Town")] gameflow_TT, [Info("Twilight Town - Winnie the Pooh")] gameflow_TT_PO, [Info("Twilight Town - Remy")] gameflow_TT_Remy, [Info("World map - Olympus")] gameflow_WM_WORLD_HE, [Info("World map - Twilight Town")] gameflow_WM_WORLD_TT, [Info("World map - Kingdom of Corona")] gameflow_WM_WORLD_RA, [Info("World map - Toy Story")] gameflow_WM_WORLD_TS, [Info("World map - Monstropolis")] gameflow_WM_WORLD_MI, [Info("World map - Arendelle")] gameflow_WM_WORLD_FZ, [Info("World map - Caribbean")] gameflow_WM_WORLD_CA, [Info("World map - San Fransokyo")] gameflow_WM_WORLD_BX, [Info("World map - Keyblade Graveyard")] gameflow_WM_WORLD_KG, [Info("Game battle level")] global_GameBattleLV, [Info("Game shop level")] global_GameShopLV, [Info("The Mysterious Tower")] gameflow_YT, [Info("Scala ad Caelum (DLC) main map")] gameflow_BT_DLC, [Info("Scala ad Caelum (DLC) second map")] gameflow_BT_DLC_07_BT_01, [Info("Scala ad Caelum (DLC) Monument")] gim_BT_DLC_monument, [Info("Keyblade Graveyard (DLC)")] gameflow_KG_DLC, [Info("KG (DLC) - Dark Riku, Xigbar")] gameflow_KG_DLC_13_A, [Info("KG (DLC) - Luxord, Marluxia, Larxene")] gameflow_KG_DLC_13_B, [Info("KG (DLC) - Vanitas, Terra-Xehanort")] gameflow_KG_DLC_13_C, [Info("KG (DLC) - Xion, Saix")] gameflow_KG_DLC_13_D, [Info("KG (DLC) Character Select 1")] gameflow_KG_DLC_05_AREA_A_CHARSEL, [Info("KG (DLC) Character Select 2")] gameflow_KG_DLC_05_AREA_B_CHARSEL, [Info("KG (DLC) Character Select 3")] gameflow_KG_DLC_05_AREA_C_CHARSEL, [Info("KG (DLC) Character Select 4")] gameflow_KG_DLC_05_AREA_D_CHARSEL, [Info("Keyblade Graveyard (DLC) Last fight")] gameflow_KG_DLC_06_LAST_CHARSEL, [Info("Radiant Garden (DLC)")] gameflow_RG_DLC, [Info("Yozora Fight")] gameflow_SS_DLC, [Info("Yozora Fight - Bad ending")] gameflow_SS_DLC_Sub_BadEnd, [Info("Yozora Fight - True ending")] gameflow_SS_DLC_Sub_TrueEnd, } } ================================================ FILE: KHSave.Lib3/Types/StoryLabelType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ namespace KHSave.Lib3.Types { public enum StoryLabelTypeBt { BT_INIT = 0, BT_EVENT_bt901 = 100, BT_EVENT_bt902 = 200, BT_BATTLE_REPLICA = 210, BT_EVENT_bt903 = 220, BT_EVENT_bt904 = 230, BT_EVENT_RTEV_ms020s = 300, BT_BATTLE_ARMOR_01 = 310, BT_EVENT_RTEV_ms020e = 320, BT_EVENT_RTEV_ms030s = 400, BT_BATTLE_ARMOR_02 = 410, BT_EVENT_RTEV_ms030e = 420, BT_EVENT_RTEV_ms040s = 500, BT_BATTLE_ARMOR_03 = 510, BT_EVENT_bt905 = 600, BT_BATTLE_MASTER_01 = 610, BT_EVENT_RTEV_ms060 = 700, BT_BATTLE_MASTER_02 = 710, BT_EVENT_bt906 = 800, BT_EVENT_bt907 = 810, BT_EVENT_bt908 = 820, BT_END = 9999, } public enum StoryLabelTypeBx { BX_INIT = 0, BX_WORLD_VISIT1 = 10, BX_BRIDGE_MISSION1 = 20, BX_BRIDGE_RTEV1 = 30, BX_BRIDGE_MISSION2 = 40, BX_BRIDGE_RTEV2 = 50, BX_BRIDGE_MISSION3 = 60, BX_GARAGE_EVENT1 = 100, BX_CENTRAL_RTEV1 = 200, BX_CENTRAL_MISSON1 = 210, BX_CENTRAL_EVENT1 = 220, BX_GARAGE_EVENT2 = 300, BX_CENTRAL_RTEV2 = 400, BX_CENTRAL_MISSON2 = 410, BX_CENTRAL_RTEV2_2 = 412, BX_CENTRAL_MISSON2_2 = 415, BX_CENTRAL_RTEV3 = 420, BX_CENTRAL_BATTLE1 = 430, BX_CENTRAL_EVENT2 = 440, BX_BRIDGE_EVENT1 = 500, BX_CENTRAL_EVENT3 = 600, BX_CENTRAL_RTEV4 = 610, BX_CENTRAL_BATTLE2 = 620, BX_CENTRAL_EVENT4 = 630, BX_CENTRAL_MISSON3 = 640, BX_CENTRAL_EVENT5 = 650, BX_CENTRAL_BATTLE3 = 660, BX_CENTRAL_EVENT6 = 670, BX_GARAGE_EVENT3 = 700, BX_GARAGE_EVENT3b = 710, BX_CENTRAL_EVENT7 = 800, BX_CENTRAL_BATTLE4 = 810, BX_CENTRAL_EVENT7_2 = 811, BX_CENTRAL_BATTLE5 = 812, BX_CENTRAL_EVENT8 = 820, BX_GARAGE_EVENT4 = 900, BX_END = 9999, BX_END_DAY = 10000, } public enum StoryLabelTypeCa { CA_INIT = 0, CA_WORLD_VISIT1 = 100, CA_WORLD_VISIT2 = 200, CA_DAVY_JONES_ROCKER_MISSION_CHASE = 300, CA_DAVY_JONES_ROCKER_MISSION_CHASE_BOSS = 350, CA_WORLDEND_EVENT1 = 400, CA_WORLDEND_SHIP_TUTORIAL = 450, CA_WORLDEND_SHIPBATTLE = 500, CA_WORLDEND_EVENT2 = 1000, CA_WORLDEND_EVENT3 = 1100, CA_SEA_EVENT1 = 1200, CA_SEA_BATTLE_FLYING = 1300, CA_SEA_EVENT2A = 1400, CA_SEA_EVENT2B = 1500, CA_SEA_EVENT2C = 1600, CA_ISLAND_EVENT1 = 2000, CA_ISLAND_EVENT2 = 2100, CA_ISLAND_BATTLE_BIGFISH = 2200, CA_ISLAND_EVENT3 = 2300, CA_ISLAND_EVENT4 = 2400, CA_SEA_EVENT3 = 3000, CA_SEA_MISSION_SHIPRACE = 3100, CA_SEA_EVENT4 = 3200, CA_SEA_BATTLE_SHIP1 = 3300, CA_SEA_BATTLE_SHIPBOARD = 3400, CA_PORTROYAL_EVENT1 = 3600, CA_PORTROYAL_MISSION_CLEAR = 3700, CA_PORTROYAL_EVENT2 = 4000, CA_PORTROYAL_EVENT3 = 4100, CA_SEA_WATCH_DESTINATION = 4150, CA_SEA_EVENT6 = 4200, CA_SEA_BATTLE_SHIP2 = 4300, CA_SEA_EVENT7 = 4400, CA_MAELSTROM_EVENT1 = 5000, CA_MAELSTROM_BATTLE1 = 5100, CA_MAELSTROM_EVENT2 = 5200, CA_MAELSTROM_BATTLE2 = 5300, CA_MAELSTROM_EVENT3 = 5400, CA_END = 9999, } public enum StoryLabelTypeCaChartLastAccess { CA_chart_last_access_01 = 100, CA_chart_last_access_02 = 200, CA_chart_last_access_03 = 300, CA_chart_last_access_04 = 400, CA_chart_last_access_05 = 500, CA_chart_last_access_06 = 600, CA_chart_last_access_07 = 700, CA_chart_last_access_08 = 800, CA_chart_last_access_09 = 900, CA_chart_last_access_10 = 1000, CA_chart_last_access_11 = 1100, CA_chart_last_access_12 = 1200, CA_chart_last_access_13 = 1300, } public enum StoryLabelTypeCaShipRide { CA_ship_ride_type_01 = 100, CA_ship_ride_type_02 = 200, } public enum StoryLabelTypeCaPortroyalSearch { CA_Sub_Portroyal_Search_STEP_01 = 1000, CA_Sub_Portroyal_Search_STEP_02 = 2000, CA_Sub_Portroyal_Search_STEP_03 = 3000, CA_Sub_Portroyal_Search_STEP_04 = 4000, CA_Sub_Portroyal_Search_STEP_05 = 5000, } public enum StoryLabelTypeCs { CS_INIT = 0, CS_EVENT_10 = 1000, CS_MISSION_10 = 1010, CS_EVENT_20 = 1020, CS_MISSION_20 = 1030, CS_EVENT_30 = 1040, CS_EVENT_40 = 2000, CS_MISSION_30 = 2010, CS_EVENT_50 = 2020, CS_EVENT_60 = 3000, CS_MISSION_40 = 3010, CS_EVENT_70 = 3020, CS_END = 9999, } public enum StoryLabelTypeDi { DI_INIT = 0, DI_EVENT1 = 10, DI_EVENT2 = 100, DI_EVENT3 = 200, DI_EVENT4 = 300, DI_END = 9999, } public enum StoryLabelTypeDp { DP_INIT = 0, DP_EVENT1 = 10, DP_EVENT2 = 100, DP_EVENT3 = 200, DP_BATTLE_1 = 300, DP_EVENT4 = 400, DP_EVENT5 = 500, DP_EVENT6 = 600, DP_END = 9999, } public enum StoryLabelTypeDw { DW_INIT = 0, DW_EVENT1 = 10, DW_EVENT2 = 20, DW_BATTLE_TOWER = 30, DW_EVENT3 = 100, DW_EVENT4 = 200, DW_EVENT5 = 300, DW_EVENT6 = 400, DW_BATTLE_AntiAQUA_RIKU = 500, DW_EVENT7 = 600, DW_BATTLE_AntiAQUA_SORA = 700, DW_EVENT8 = 800, DW_END = 9999, } public enum StoryLabelTypeEw { EW_INIT = 0, EW_BASE_TUTORIAL = 1000, EW_FIRST_CHOICE1 = 1100, EW_FIRST_EVENT1 = 1200, EW_FIRST_QUESTION1 = 1300, EW_FIRST_EVENT2 = 1400, EW_FIRST_QUESTION2 = 1500, EW_FIRST_EVENT3 = 1600, EW_FIRST_EVENT4 = 2000, EW_ACTION_TUTORIAL = 2100, EW_FIRST_EVENT5 = 2300, EW_SECOND_EVENT1 = 5000, EW_SECOND_MISSION1 = 5100, EW_END = 9999, } public enum StoryLabelTypeEx { } public enum StoryLabelTypeEwSub { EW_Sub_INT = 0, EW_Sub_EVENT1 = 10, EW_Sub_EVENT2 = 20, EW_Sub_EVENT3 = 30, EW_Sub_EVENT4 = 40, } public enum StoryLabelTypeEwMission { EW_MISSION_INIT = 0, EW_MISSION_EVENT_01 = 100, EW_MISSION_EVENT_02 = 110, EW_MISSION_EVENT_02_2 = 115, EW_MISSION_EVENT_03 = 120, EW_MISSION_BATTLE_HE = 130, EW_MISSION_EVENT_04 = 140, EW_MISSION_EVENT_05 = 200, EW_MISSION_EVENT_06 = 300, EW_MISSION_EVENT_07 = 310, EW_MISSION_BATTLE_BX = 320, EW_MISSION_EVENT_08 = 330, EW_MISSION_EVENT_09 = 340, EW_MISSION_END = 9999, } public enum StoryLabelTypeEwRa { EW_MISSION_RA_START = 0, EW_MISSION_RA_EVENT_01 = 100, EW_MISSION_RA_BATTLE_01 = 200, EW_MISSION_RA_EVENT_02 = 300, EW_MISSION_RA_END = 9999, } public enum StoryLabelTypeEwMi { EW_MISSION_MI_START = 0, EW_MISSION_MI_EVENT_01 = 100, EW_MISSION_MI_BATTLE_01 = 200, EW_MISSION_MI_EVENT_02 = 300, EW_MISSION_MI_END = 9999, } public enum StoryLabelTypeEwTs { EW_MISSION_TS_START = 0, EW_MISSION_TS_EVENT_01 = 100, EW_MISSION_TS_BATTLE_01 = 200, EW_MISSION_TS_EVENT_02 = 300, EW_MISSION_TS_END = 9999, } public enum StoryLabelTypeEwCa { EW_MISSION_CA_START = 0, EW_MISSION_CA_EVENT_01 = 100, EW_MISSION_CA_BATTLE_01 = 200, EW_MISSION_CA_EVENT_02 = 300, EW_MISSION_CA_END = 9999, } public enum StoryLabelTypeEwFz { EW_MISSION_FZ_START = 0, EW_MISSION_FZ_EVENT_01 = 100, EW_MISSION_FZ_BATTLE_01 = 200, EW_MISSION_FZ_EVENT_02 = 300, EW_MISSION_FZ_END = 9999, } public enum StoryLabelTypeFz { FZ_INIT = 0, FZ_WORLD_VISIT1 = 10, FZ_MOUNTAIN_RTEV1 = 1100, FZ_MOUNTAIN_EVENT1 = 1110, FZ_MOUNTAIN_BATTLE1 = 1120, FZ_MOUNTAIN_EVENT2 = 1130, FZ_LABYRINTH_EVENT1 = 2000, FZ_ICICLE_AREA_C_EVENT1 = 2010, FZ_ICICLE_AREA_C_BATTLE1 = 2020, FZ_ICICLE_AREA_C_EVENT2 = 2030, FZ_ICICLE_AREA_E_EVENT1 = 2110, FZ_ICICLE_AREA_E_BATTLE1 = 2120, FZ_ICICLE_AREA_E_EVENT2 = 2130, FZ_ICICLE_AREA_F_EVENT1 = 2210, FZ_ICICLE_AREA_F_BATTLE1 = 2220, FZ_ICICLE_AREA_F_EVENT2 = 2230, FZ_ICICLE_AREA_H_EVENT1 = 2310, FZ_ICICLE_AREA_H_BATTLE1 = 2320, FZ_ICICLE_AREA_H_EVENT2 = 2330, FZ_LABYRINTH_WORMHOLE = 2500, FZ_LABYRINTH_EVENT2 = 3300, FZ_CASTLE_EVENT1 = 3310, FZ_MOUNTAIN_EVENT3 = 4400, FZ_MOUNTAIN_MISSION1 = 4410, FZ_STEEP_RTEV1 = 4420, FZ_MOUNTAIN_BATTLE2 = 4430, FZ_MOUNTAIN_EVENT4 = 4440, FZ_MOUNTAIN_EVENT5 = 5500, FZ_MOUNTAIN_EVENT6 = 5510, FZ_MOUNTAIN_EVENT7 = 5520, FZ_MOUNTAIN_EVENT8 = 5530, FZ_MOUNTAIN_MISSION2 = 5540, FZ_MOUNTAIN_EVENT9 = 5550, FZ_MOUNTAIN_BATTLE3 = 5560, FZ_MOUNTAIN_EVENT10 = 5570, FZ_CASTLE_EVENT2 = 5580, FZ_MOUNTAIN_BATTLE4 = 6600, FZ_MOUNTAIN_EVENT11 = 6610, FZ_MOUNTAIN_EVENT12 = 7700, FZ_MOUNTAIN_EVENT13 = 7710, FZ_MOUNTAIN_EVENT14 = 7720, FZ_MOUNTAIN_MISSION3 = 7730, FZ_MOUNTAIN_RTEV2 = 7750, FZ_SEA_EVENT1 = 8800, FZ_SEA_BATTLE1 = 8810, FZ_SEA_EVENT2 = 8820, FZ_END = 9999, } public enum StoryLabelTypeFzMinigame { FZ_Sub_SLIDEMISSION_INIT = 0, FZ_Sub_SLIDEMISSION_CHASE = 2000, FZ_Sub_SLIDEMISSION_SLIDE1 = 2100, FZ_Sub_SLIDEMISSION_SLIDE2 = 2110, FZ_Sub_SLIDEMISSION_SLIDE3 = 2120, FZ_Sub_SLIDEMISSION_END = 2999, } public enum StoryLabelTypeGm { GM_INIT = 0, GM_EVENT1 = 10, GM_EVENT2 = 100, GM_EVENT3 = 200, GM_EVENT4 = 300, GM_EVENT5 = 400, GM_EVENT6 = 500, GM_EVENT7 = 600, GM_END = 9999, } public enum StoryLabelTypeGm1 { GM_01_INIT = 0, GM_01_END = 9999, } public enum StoryLabelTypeGm2 { GM_02_INIT = 0, GM_02_END = 9999, } public enum StoryLabelTypeGm3 { GM_03_INIT = 0, GM_03_VISIT1 = 10, GM_03_BOSS_01_START = 100, GM_03_BOSS_01_END = 200, GM_03_END = 999, GM_03_VISIT10 = 1010, } public enum StoryLabelTypeGm3sub { GM_03_SUB_INIT = 0, GM_03_SUB_START = 10, GM_03_SUB_CAMERA_01 = 100, GM_03_SUB_ARENA_02 = 110, GM_03_SUB_ARENA_03 = 120, GM_03_SUB_CAMERA_10 = 200, GM_03_SUB_BOSS = 500, GM_03_SUB_END = 9999, } public enum StoryLabelTypeGmSys { GM_SYS_INIT = 0, GM_SYS_EVENT1 = 10, GM_SYS_EVENT2 = 100, GM_SYS_EVENT3 = 200, GM_SYS_EVENT4 = 300, GM_SYS_EVENT5 = 400, GM_SYS_EVENT6 = 500, GM_SYS_END = 9999, } public enum StoryLabelTypeGmLevelUp { GM_SYS_LEVELUP_STEP_01 = 100, GM_SYS_LEVELUP_STEP_02 = 200, } public enum StoryLabelTypeHe { HE_INIT = 0, HE_OLYMPUS_OPENING_EVENT = 2, HE_OLYMPUS_VISIT1_1 = 5, HE_OLYMPUS_RTEV1_1 = 10, HE_TUTO_MAGIC_PLAY = 11, HE_OLYMPUS_BATTLE1_1 = 15, HE_OLYMPUS_RTEV1_2 = 20, HE_TUTO_FREERUN_PLAY = 21, HE_OLYMPUS_EVENT1_1 = 25, HE_THEBES_VISIT1 = 30, HE_THEBES_EVENT1 = 40, HE_TUTO_FREEFLOW_PLAY = 41, HE_THEBES_BATTLE1 = 50, HE_THEBES_EVENT2 = 60, HE_THEBES_RTEV1 = 100, HE_THEBES_BATTLE1_5 = 110, HE_THEBES_EVENT2_5 = 120, HE_THEBES_RTEV3 = 300, HE_THEBES_EVENT4 = 400, HE_THEBES_BATTLE2 = 410, HE_THEBES_EVENT5 = 420, HE_THEBES_EVENT6 = 500, HE_TUTO_FORMCHANGE_PLAY = 501, HE_THEBES_BATTLE3 = 510, HE_THEBES_EVENT7 = 520, HE_THEBES_RTEV4 = 530, HE_TUTO_ATTRACTION_PLAY = 531, HE_THEBES_BATTLE4 = 540, HE_THEBES_EVENT8 = 600, HE_OLYMPUS_EVENT1_2 = 910, HE_OLYMPUS_EVENT1 = 1000, HE_OLYMPUS_RTEV1 = 1010, HE_OLYMPUS_RTEV1_5 = 1015, HE_OLYMPUS_RTEV2 = 1100, HE_OLYMPUS_BATTLE1 = 1110, HE_OLYMPUS_EVENT2 = 1120, HE_OLYMPUS_EVENT3 = 1200, HE_HEAVENLY_RTEV1 = 2000, HE_HEAVENLY_BATTLE1 = 2010, HE_TUTO_SHOOTFLOW_PLAY = 2011, HE_HEAVENLY_RTEV2 = 2100, HE_TUTO_ATHLETICFLOW_PLAY = 2101, HE_HEAVENLY_EVENT1 = 2200, HE_BOSS_BATTLE_01 = 2210, HE_HEAVENLY_RTEV3 = 2215, HE_BOSS_BATTLE_02 = 2216, HE_HEAVENLY_EVENT2 = 2220, HE_OLYMPUS_EVENT4 = 2230, HE_THEBES_EVENT9 = 2240, HE_END = 9999, } public enum StoryLabelTypeHeSub { HE_Sub_HeraculesBoy_Init = 0, HE_Sub_HeraculesBoy_Start = 100, HE_Sub_HeraculesBoy_Item_01 = 200, HE_Sub_HeraculesBoy_Item_02 = 300, HE_Sub_HeraculesBoy_Item_03 = 400, HE_Sub_HeraculesBoy_Item_04 = 500, HE_Sub_HeraculesBoy_Item_05 = 600, HE_Sub_HeraculesBoy_End = 9999, } public enum StoryLabelTypeKg { KG_INTERVAL_00 = 0, KG_INTERVAL_01 = 10, KG_INTERVAL_02 = 20, KG_INIT = 50, KG_WORLD_VISIT = 100, KG_01_BATTLE1 = 200, KG_01_CS_KG702 = 500, KG_END = 9999, KG_01_CS_KG801 = 10000, KG_01_CS_KG802 = 10100, KG_01_CS_KG851 = 10500, KG_01_CS_KG851b = 11000, KG_01_CS_KG852 = 11100, KG_01_BATTLE2 = 11300, KG_01_CS_KG852b = 11400, KG_01_BATTLE3 = 11410, KG_01_CS_KG853 = 11420, KG_50_CS_KG854 = 11500, KG_02_CS_KG855 = 11600, KG_02_BATTLE_AB = 13000, KG_02_LABYRINTH_END = 13050, KG_02_RTEV_CD = 13100, KG_02_BATTLE_CD = 13500, KG_02_EVENT_E_START = 14000, KG_02_BATTLE_E_PHASE_01 = 14100, KG_02_EVENT_E_PHASE_01_END = 14200, KG_02_BATTLE_E_PHASE_02 = 14300, KG_02_EVENT_E_PHASE_02_END = 14400, KG_02_BATTLE_E_PHASE_03 = 14500, KG_02_EVENT_E_PHASE_03_END = 14600, KG_02_EVENT_E_END = 14700, KG_END2 = 99999, } public enum StoryLabelTypeKgA { KG_02_EVENT_A_INIT = 0, KG_02_EVENT_A_START = 1000, KG_02_BATTLE_A_PHASE_01 = 1100, KG_02_EVNET_A_PHASE_01_END = 1200, KG_02_BATTLE_A_PHASE_02 = 1300, KG_02_EVNET_A_PHASE_02_END = 1400, KG_02_BATTLE_A_PHASE_03 = 1500, KG_02_EVNET_A_PHASE_03_END = 1600, KG_02_EVENT_A_END = 9999, } public enum StoryLabelTypeKgB { KG_02_EVENT_B_INIT = 0, KG_02_EVENT_B_START = 1000, KG_02_BATTLE_B_PHASE_01 = 1100, KG_02_EVENT_B_PHASE_01_END = 1200, KG_02_BATTLE_B_PHASE_02 = 1300, KG_02_EVENT_B_PHASE_02_END = 1400, KG_02_BATTLE_B_PHASE_03 = 1500, KG_02_EVENT_B_PHASE_03_END = 1600, KG_02_BATTLE_B_PHASE_04 = 1700, KG_02_EVENT_B_PHASE_04_END = 1800, KG_02_EVENT_B_END = 9999, } public enum StoryLabelTypeKgC { KG_02_EVENT_C_INIT = 0, KG_02_EVENT_C_START = 1000, KG_02_BATTLE_C_PHASE_01 = 1100, KG_02_EVENT_C_PHASE_01_END = 1200, KG_02_BATTLE_C_PHASE_02 = 1300, KG_02_EVENT_C_PHASE_02_END = 1400, KG_02_EVENT_C_END = 9999, } public enum StoryLabelTypeKgD { KG_02_EVENT_D_INIT = 0, KG_02_EVENT_D_START = 1000, KG_02_BATTLE_D_PHASE1_01 = 1100, KG_02_EVENT_D_PHASE_01_END = 1200, KG_02_BATTLE_D_PHASE1_02 = 1300, KG_02_EVENT_D_PHASE_02_END = 1400, KG_02_EVENT_D_END = 9999, } public enum StoryLabelTypeMi { MI_INIT = 0, MI_WORLD_VISIT1 = 10, MI_ENTRANCE_EVENT1 = 1010, MI_ENTRANCE_BATTLE1 = 1020, MI_ENTRANCE_EVENT2 = 1030, MI_SCARE_EVENT1 = 1110, MI_SCARE_BATTLE1 = 1120, MI_SCARE_EVENT2 = 1130, MI_SCARE_EVENT3 = 1140, MI_DOOR_REAL1 = 1210, MI_DOOR_MISSION1 = 1220, MI_DOOR_EVENT1 = 1230, MI_DOOR_MISSION2 = 1240, MI_DOOR_EVENT2 = 1250, MI_DOOR_REAL2 = 1251, MI_DOOR_MISSION3 = 1260, MI_DOOR_EVENT3 = 1270, MI_FACTORY_EVENT1 = 3010, MI_FACTORY_EVENT2 = 3020, MI_FACTORY_MISSION1 = 3030, MI_FACTORY_REAL1 = 3040, MI_FACTORY_EVENT3 = 3050, MI_FACTORY_LIFT = 3060, MI_FACTORY_REAL2 = 3110, MI_FACTORY_BATTLE1 = 3120, MI_FACTORY_REAL3 = 3130, MI_FACTORY_BATTLE2 = 3140, MI_FACTORY_REAL4 = 3150, MI_FACTORY_REAL5 = 3160, MI_FACTORY_MISSION2 = 3170, MI_FACTORY_REAL6 = 3180, MI_FACTORY_EVENT4 = 3190, MI_FACTORY_MISSION3 = 3200, MI_FACTORY_EVENT5 = 3210, MI_PLANT_EVENT1 = 5010, MI_PLANT_EVENT2 = 5020, MI_PLANT_BATTLE1 = 5030, MI_PLANT_EVENT3 = 5040, MI_PLANT_REAL1 = 5050, MI_PLANT_BATTLE2 = 5060, MI_PLANT_EVENT4 = 5070, MI_PLANT_REAL2 = 5080, MI_PLANT_BATTLE3 = 5090, MI_PLANT_EVENT5 = 5100, MI_DOORBOSS_EVENT1 = 7010, MI_DOORBOSS_BATTLE1 = 7020, MI_DOORBOSS_EVENT2 = 7030, MI_SCARE_EVENT4 = 7040, MI_ENTRANCE_EVENT3 = 7050, MI_END = 9999, } public enum StoryLabelTypeMiSub { } public enum StoryLabelTypePo { PO_INIT = 0, PO_EVENT_01 = 100, PO_VEGETABLE_MINIGAME_01 = 110, PO_EVENT_02 = 200, PO_ORCHARD_MINIGAME_01 = 210, PO_EVENT_03 = 300, PO_FLOWER_MINIGAME_01 = 310, PO_EVENT_04 = 400, PO_END = 9999, } public enum StoryLabelTypeRa { RA_INIT = 0, RA_WORLD_VISIT1 = 10, RA_FOREST_EVENT1 = 100, RA_FOREST_BATTLE1 = 110, RA_FOREST_EVENT2 = 120, RA_FOREST_EVENT3 = 200, RA_TOWER_EVENT1 = 210, RA_FOREST_EVENT4 = 220, RA_FOREST_EVENT5 = 300, RA_FOREST_EVENT6 = 400, RA_FOREST_BATTLE2 = 410, RA_TOWER_EVENT2 = 420, RA_FOREST_REAL10 = 500, RA_FOREST_EVENT20 = 1000, RA_FOREST_BATTLE10 = 1010, RA_FOREST_EVENT21 = 1020, RA_FOREST_EVENT22 = 1100, RA_FOREST_EVENT23 = 1200, RA_FOREST_REAL22 = 2020, RA_FOREST_REAL25 = 2025, RA_FOREST_BATTLE20 = 2030, RA_FOREST_BATTLE21 = 2031, RA_FOREST_REAL30 = 2500, RA_FOREST_REAL40 = 2900, RA_CASTLE_EVENT1 = 3000, RA_CASTLE_EVENT2 = 3100, RA_CASTLE_MISSION1 = 3110, RA_CASTLE_EVENT3 = 3120, RA_CASTLE_BATTLE1 = 3130, RA_FOREST_EVENT30 = 3140, RA_TOWER_EVENT3 = 3150, RA_FOREST_EVENT31 = 3160, RA_FOREST_EVENT32 = 3170, RA_FOREST_REAL50 = 4000, RA_FOREST_BATTLE30 = 4010, RA_TOWER_EVENT4 = 4020, RA_TOWER_EVENT5 = 4100, RA_FOREST_EVENT41 = 4110, RA_FOREST_BATTLEBOSS = 4120, RA_TOWER_EVENT6 = 4200, RA_FOREST_EVENT42 = 4210, RA_FOREST_EVENT50 = 4300, RA_END = 9999, } public enum StoryLabelTypeRaDandelion { RA_DANDELION_INIT = 0, RA_DANDELION_START = 10, RA_DANDELION_END = 100, } public enum StoryLabelTypeRaRabbit { RA_RABBIT_INIT = 0, RA_RABBIT_START = 10, RA_RABBIT_FINISH = 50, RA_RABBIT_END = 100, } public enum StoryLabelTypeRaRainbow { RA_RAINBOW_INIT = 0, RA_RAINBOW_START = 10, RA_RAINBOW_END = 100, } public enum StoryLabelTypeRaBird { RA_BIRD_INIT = 0, RA_BIRD_START = 10, RA_BIRD_END = 100, } public enum StoryLabelTypeRg { RG_INIT = 0, RG_EVENT1 = 10, RG_EVENT2 = 100, RG_EVENT3 = 200, RG_EVENT4 = 300, RG_END = 9999, } public enum StoryLabelTypeSf { SF_INIT = 0, SF_EVENT1 = 10, SF_EVENT2 = 100, SF_END = 9999, } public enum StoryLabelTypeTs { TS_INIT = 0, TS_GAME_CM1 = 500, TS_WORLD_VISIT1 = 1000, TS_ANDY_BATTLE1 = 1010, TS_ANDY_EVENT1 = 1020, TS_ANDY_EVENT2 = 1030, TS_ANDY_TO_TOYSHOP = 1040, TS_HOLE_EVENT1 = 1500, TS_HOLE_BATTLE1 = 1520, TS_HOLE_EVENT2 = 1530, TS_KAIJU_EVENT1 = 1600, TS_KAIJU_BATTLE1 = 1610, TS_KAIJU_EVENT2 = 1620, TS_NUIGURUMI_EVENT1 = 1700, TS_NUIGURUMI_EVENT2 = 1710, TS_NUIGURUMI_EVENT3 = 1720, TS_NUIGURUMI_EVENT4 = 1730, TS_NUIGURUMI_BATTLE1 = 1740, TS_NUIGURUMI_EVENT5 = 1750, TS_BABYTOY_EVENT1 = 1800, TS_BABYTOY_MISSION1 = 1810, TS_BABYTOY_EVENT2 = 1820, TS_HOLE_EVENT3 = 1900, TS_GAME_EVENT1 = 3000, TS_GAME_EVENT2 = 3010, TS_GAME_MISSION1 = 3020, TS_GAME_EVENT3 = 3030, TS_ATHLETIC_EVENT1 = 3100, TS_ATHLETIC_EVENT2 = 3200, TS_ATHLETIC_EVENT3 = 3300, TS_BOSS_EVENT1 = 3500, TS_BOSS_BATTLE1 = 3510, TS_HOLE_EVENT4 = 4000, TS_END = 9999, } public enum StoryLabelTypeTsSub { TS_Sub_GAM1_EVENT1 = 1000, TS_Sub_GAM1_EVENT2 = 1100, TS_Sub_GAM1_EVENT3 = 1200, TS_Sub_GAM1_EVENT4 = 1300, TS_Sub_GAM1_EVENT5 = 1400, TS_Sub_GAM1_EVENT6 = 1500, TS_Sub_GAM1_EVENT7 = 1600, TS_Sub_GAM1_EVENT8 = 1700, TS_Sub_GAM1_EVENT9 = 1800, } public enum StoryLabelTypeTt { TT_INIT = 0, TT_TRM_EVENT01 = 100, TT_TRM_MISSION01 = 110, TT_TRM_EVENT02 = 120, TT_TRM_MISSION02 = 130, TT_TRM_EVENT03 = 140, TT_WODS_EVENT01 = 200, TT_WODS_MISSION01 = 210, TT_WODS_EVENT02 = 220, TT_COMP_EVENT01 = 300, TT_COMP_EVENT02 = 310, TT_MANS_EVENT01 = 400, TT_MANS_MISSION01 = 410, TT_MANS_EVENT02 = 420, TT_TRM2_EVENT01 = 500, TT_TRM2_MISSION01 = 510, TT_TRM2_EVENT02 = 520, TT_END = 9999, } public enum StoryLabelTypeTtPo { TT_PO_INIT = 0, TT_PO_TRM_EVENT01 = 100, TT_PO_TRM_EVENT02 = 110, TT_PO_END = 9999, } public enum StoryLabelTypeTtRemy { TT_Remy_EVENT01 = 100, } public enum StoryLabelTypeWmHe { WM_WORLD_HE_CLOSED = 0, WM_WORLD_HE_STARTED = 1000, WM_WORLD_HE_CLEARED = 2000, } public enum StoryLabelTypeWmTt { WM_WORLD_TT_CLOSED = 0, WM_WORLD_TT_STARTED = 1000, WM_WORLD_TT_CLEARED = 2000, } public enum StoryLabelTypeWmRa { WM_WORLD_RA_CLOSED = 0, WM_WORLD_RA_STARTED = 1000, WM_WORLD_RA_CLEARED = 2000, } public enum StoryLabelTypeWmTs { WM_WORLD_TS_CLOSED = 0, WM_WORLD_TS_STARTED = 1000, WM_WORLD_TS_CLEARED = 2000, } public enum StoryLabelTypeWmMi { WM_WORLD_MI_CLOSED = 0, WM_WORLD_MI_STARTED = 1000, WM_WORLD_MI_CLEARED = 2000, } public enum StoryLabelTypeWmFz { WM_WORLD_FZ_CLOSED = 0, WM_WORLD_FZ_STARTED = 1000, WM_WORLD_FZ_CLEARED = 2000, } public enum StoryLabelTypeWmCa { WM_WORLD_CA_CLOSED = 0, WM_WORLD_CA_STARTED = 1000, WM_WORLD_CA_CLEARED = 2000, } public enum StoryLabelTypeWmBx { WM_WORLD_BX_CLOSED = 0, WM_WORLD_BX_STARTED = 1000, WM_WORLD_BX_CLEARED = 2000, } public enum StoryLabelTypeWmKg { WM_WORLD_KG_CLOSED = 0, WM_WORLD_KG_STARTED = 1000, WM_WORLD_KG_CLEARED = 2000, } public enum StoryLabelTypeGameBattle { GLOBAL_GAMEBATTLELv_01 = 0, GLOBAL_GAMEBATTLELv_02 = 1000, GLOBAL_GAMEBATTLELv_03 = 2000, GLOBAL_GAMEBATTLELv_04 = 3000, GLOBAL_GAMEBATTLELv_05 = 4000, GLOBAL_GAMEBATTLELv_06 = 5000, GLOBAL_GAMEBATTLELv_07 = 6000, GLOBAL_GAMEBATTLELv_08 = 7000, GLOBAL_GAMEBATTLELv_09 = 8000, } public enum StoryLabelTypeGameShop { GLOBAL_GAMESHOPLv_01 = 0, GLOBAL_GAMESHOPLv_02 = 1000, GLOBAL_GAMESHOPLv_03 = 2000, GLOBAL_GAMESHOPLv_04 = 3000, GLOBAL_GAMESHOPLv_05 = 4000, GLOBAL_GAMESHOPLv_06 = 5000, GLOBAL_GAMESHOPLv_07 = 6000, GLOBAL_GAMESHOPLv_END = 7000, } public enum StoryLabelTypeYt { YT_INIT = 0, YT_EVENT1 = 10, YT_EVENT2 = 100, YT_EVENT3 = 200, YT_EVENT4 = 300, YT_EVENT5 = 400, YT_END = 9999, } public enum StoryLabelTypeBtDlc8 { BT_DLC_INIT = 0, BT_DLC_08_EVENT_01 = 110, BT_DLC_08_EVENT_02 = 210, BT_DLC_08_BATTLE_01 = 220, BT_DLC_07_MISSION_01 = 310, BT_DLC_08_EVENT_03 = 410, BT_DLC_08_BATTLE_02 = 420, BT_DLC_08_EVENT_04 = 430, BT_DLC_END = 9999, } public enum StoryLabelTypeBtDlc7 { BT_DLC_07_BT_01_INIT = 0, BT_DLC_07_BT_01_EVENT_01 = 110, BT_DLC_07_BT_01_EVENT_02 = 120, BT_DLC_07_BT_01_BATTLE_01 = 130, BT_DLC_07_BT_01_END = 9999, } public enum StoryLabelTypeBtDlc7Monument { BT_DLC_07_MONUMENT_START = 0, BT_DLC_07_MONUMENT_STEP01 = 110, BT_DLC_07_MONUMENT_STEP02 = 120, BT_DLC_07_MONUMENT_STEP03 = 130, } public enum StoryLabelTypeKgDlc { KG_DLC_INIT = 0, KG_DLC_WORLD_VISIT = 110, KG_DLC_04_EVENT_01 = 410, KG_DLC_04_BATTLE_01 = 420, KG_DLC_04_EVENT_02 = 430, KG_DLC_04_BATTLE_02 = 440, KG_DLC_04_EVENT_03 = 450, KG_DLC_04_EVENT_05 = 510, KG_DLC_04_EVENT_06 = 520, KG_DLC_04_BATTLE_03 = 530, KG_DLC_04_EVENT_07 = 540, KG_DLC_06_EVENT_01 = 20100, KG_DLC_06_BATTLE_01 = 21200, KG_DLC_06_BATTLE_02 = 21300, KG_DLC_07_BATTLE_01 = 21400, KG_DLC_06_2_EVENT_01 = 22100, KG_DLC_06_2_BATTLE_01 = 22200, KG_DLC_06_2_BATTLE_02 = 22250, KG_DLC_05_3_EVENT_01 = 22300, KG_02_EVENT_E_END = 14700, KG_DLC_END = 99999, } public enum StoryLabelTypeKgDlc5c { KG_02_EVENT_C_INIT = 0, KG_02_EVENT_C_START = 1000, KG_DLC_05_BATTLE_C_PHASE_0a = 1050, KG_DLC_05_EVENT_C_PHASE_0a_END = 1060, KG_02_BATTLE_C_PHASE_01 = 1100, KG_02_EVENT_C_PHASE_01_END = 1200, KG_02_BATTLE_C_PHASE_02 = 1300, KG_02_EVENT_C_PHASE_02_END = 1400, KG_02_EVENT_C_END = 9999, } public enum StoryLabelTypeKgDlc5d { KG_02_EVENT_D_INIT = 0, KG_02_EVENT_D_START = 1000, KG_DLC_05_EVENT_D_EVENT_01 = 1050, KG_02_BATTLE_D_PHASE1_01 = 1100, KG_02_EVENT_D_PHASE_01_END = 1200, KG_DLC_05_EVENT_D_PHASE_01a_END = 1250, KG_DLC_05_BATTLE_D_PHASE_0a = 1260, KG_DLC_05_EVENT_D_PHASE_0a_END = 1270, KG_02_BATTLE_D_PHASE1_02 = 1300, KG_02_EVENT_D_PHASE_02_END = 1400, KG_02_EVENT_D_END = 9999, } public enum StoryLabelTypeKgDlcCharSelect { KG_DLC_05_AREA_A_CHARSEL_01 = 0, KG_DLC_05_AREA_A_CHARSEL_02 = 1, KG_DLC_05_AREA_B_CHARSEL_01 = 0, KG_DLC_05_AREA_B_CHARSEL_02 = 1, KG_DLC_05_AREA_C_CHARSEL_01 = 0, KG_DLC_05_AREA_C_CHARSEL_02 = 1, KG_DLC_05_AREA_D_CHARSEL_01 = 0, KG_DLC_05_AREA_D_CHARSEL_02 = 1, KG_DLC_06_LAST_CHARSEL_01 = 0, KG_DLC_06_LAST_CHARSEL_02 = 1, } public enum StoryLabelTypeRgDlc { RG_DLC_INIT = 0, RG_DLC_EVENT_01 = 110, RG_DLC_EVENT_02 = 120, RG_DLC_MAR_EVENT_01 = 210, RG_DLC_SHU_EVENT_01 = 310, RG_DLC_SHU_EVENT_02 = 320, RG_DLC_SHU_BATTLE_01 = 330, RG_DLC_MAR2_EVENT_01 = 410, RG_DLC_END = 9999, } public enum StoryLabelTypeSsDlc { SS_DLC_INIT = 0, SS_DLC_EVENT_01 = 110, SS_DLC_BATTLE_01 = 120, SS_DLC_END = 9999, } public enum StoryLabelTypeSsDlcSub { SS_DLC_SUB_BADEND_END = 100, SS_DLC_SUB_TRUEEND_END = 100, } } ================================================ FILE: KHSave.Lib3/Types/SyntesisType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum SynthesisType : byte { [Info] Empty, [Synthesis("Blazing Shard")] Item01, Item02, Item03, Item04, Item05, Item06, Item07, Item08, Item09, Item0a, Item0b, Item0c, Item0d, Item0e, Item0f, Item10, Item11, Item12, Item13, Item14, Item15, Item16, Item17, Item18, Item19, Item1a, Item1b, Item1c, Item1d, Item1e, Item1f, Item20, Item21, Item22, Item23, Item24, Item25, Item26, Item27, Item28, Item29, Item2a, Item2b, Item2c, Item2d, Item2e, Item2f, Item30, Item31, Item32, Item33, Item34, Item35, Item36, Item37, Item38, Item39, Item3a, Item3b, Item3c, Item3d, Item3e, Item3f, Item40, Item41, Item42, Item43, Item44, Item45, Item46, Item47, Item48, Item49, Item4a, Item4b, Item4c, Item4d, Item4e, Item4f, Item50, Item51, Item52, Item53, Item54, Item55, Item56, Item57, Item58, Item59, Item5a, Item5b, Item5c, Item5d, Item5e, Item5f, Item60, Item61, Item62, Item63, Item64, Item65, Item66, Item67, Item68, Item69, Item6a, Item6b, Item6c, Item6d, Item6e, Item6f, Item70, Item71, Item72, Item73, Item74, Item75, Item76, Item77, Item78, Item79, Item7a, Item7b, Item7c, Item7d, Item7e, Item7f, Item80, Item81, Item82, Item83, Item84, Item85, Item86, Item87, Item88, Item89, Item8a, Item8b, Item8c, Item8d, Item8e, Item8f, Item90, Item91, Item92, Item93, Item94, Item95, Item96, Item97, Item98, Item99, Item9a, Item9b, Item9c, Item9d, Item9e, Item9f, Itema0, Itema1, Itema2, Itema3, Itema4, Itema5, Itema6, Itema7, Itema8, Itema9, Itemaa, Itemab, Itemac, Itemad, Itemae, Itemaf, Itemb0, Itemb1, Itemb2, Itemb3, Itemb4, Itemb5, Itemb6, Itemb7, Itemb8, Itemb9, Itemba, Itembb, Itembc, Itembd, Itembe, Itembf, Itemc0, Itemc1, Itemc2, Itemc3, Itemc4, Itemc5, Itemc6, Itemc7, Itemc8, Itemc9, Itemca, Itemcb, Itemcc, Itemcd, Itemce, Itemcf, Itemd0, Itemd1, Itemd2, Itemd3, Itemd4, Itemd5, Itemd6, Itemd7, Itemd8, Itemd9, Itemda, Itemdb, Itemdc, Itemdd, Itemde, Itemdf, Iteme0, Iteme1, Iteme2, Iteme3, Iteme4, Iteme5, Iteme6, Iteme7, Iteme8, Iteme9, Itemea, Itemeb, Itemec, Itemed, Itemee, Itemef, Itemf0, Itemf1, Itemf2, Itemf3, Itemf4, Itemf5, Itemf6, Itemf7, Itemf8, Itemf9, Itemfa, Itemfb, Itemfc, Itemfd, Itemfe, Itemff, } } ================================================ FILE: KHSave.Lib3/Types/TentType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum TentType : byte { [Info] Empty, [Tent("Tent")] Tent, [Tent("Strength boost")] StrengthBoost, [Tent("Magic boost")] MagicBoost, [Tent("Defense boost")] DefenseBoost, [Tent("AP boost")] ApBoost, Item06, Item07, Item08, Item09, Item0a, Item0b, Item0c, Item0d, Item0e, Item0f, Item10, Item11, Item12, Item13, Item14, Item15, Item16, Item17, Item18, Item19, Item1a, Item1b, Item1c, Item1d, Item1e, Item1f, Item20, Item21, Item22, Item23, Item24, Item25, Item26, Item27, Item28, Item29, Item2a, Item2b, Item2c, Item2d, Item2e, Item2f, Item30, Item31, Item32, Item33, Item34, Item35, Item36, Item37, Item38, Item39, Item3a, Item3b, Item3c, Item3d, Item3e, Item3f, Item40, Item41, Item42, Item43, Item44, Item45, Item46, Item47, Item48, Item49, Item4a, Item4b, Item4c, Item4d, Item4e, Item4f, Item50, Item51, Item52, Item53, Item54, Item55, Item56, Item57, Item58, Item59, Item5a, Item5b, Item5c, Item5d, Item5e, Item5f, Item60, Item61, Item62, Item63, Item64, Item65, Item66, Item67, Item68, Item69, Item6a, Item6b, Item6c, Item6d, Item6e, Item6f, Item70, Item71, Item72, Item73, Item74, Item75, Item76, Item77, Item78, Item79, Item7a, Item7b, Item7c, Item7d, Item7e, Item7f, Item80, Item81, Item82, Item83, Item84, Item85, Item86, Item87, Item88, Item89, Item8a, Item8b, Item8c, Item8d, Item8e, Item8f, Item90, Item91, Item92, Item93, Item94, Item95, Item96, Item97, Item98, Item99, Item9a, Item9b, Item9c, Item9d, Item9e, Item9f, Itema0, Itema1, Itema2, Itema3, Itema4, Itema5, Itema6, Itema7, Itema8, Itema9, Itemaa, Itemab, Itemac, Itemad, Itemae, Itemaf, Itemb0, Itemb1, Itemb2, Itemb3, Itemb4, Itemb5, Itemb6, Itemb7, Itemb8, Itemb9, Itemba, Itembb, Itembc, Itembd, Itembe, Itembf, Itemc0, Itemc1, Itemc2, Itemc3, Itemc4, Itemc5, Itemc6, Itemc7, Itemc8, Itemc9, Itemca, Itemcb, Itemcc, Itemcd, Itemce, Itemcf, Itemd0, Itemd1, Itemd2, Itemd3, Itemd4, Itemd5, Itemd6, Itemd7, Itemd8, Itemd9, Itemda, Itemdb, Itemdc, Itemdd, Itemde, Itemdf, Iteme0, Iteme1, Iteme2, Iteme3, Iteme4, Iteme5, Iteme6, Iteme7, Iteme8, Iteme9, Itemea, Itemeb, Itemec, Itemed, Itemee, Itemef, Itemf0, Itemf1, Itemf2, Itemf3, Itemf4, Itemf5, Itemf6, Itemf7, Itemf8, Itemf9, Itemfa, Itemfb, Itemfc, Itemfd, Itemfe, Itemff, } } ================================================ FILE: KHSave.Lib3/Types/WeaponType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum WeaponType : byte { [Info] Empty, [Keyblade("Kingdom Key")] KingdomKey, [Keyblade("Hero's Origin")] HeroOrigin, [Keyblade("Shooting Star")] ShootingStar, [Keyblade("Favorite Deputy")] FavoriteDeputy, [Keyblade("Ever After")] EvenAfter, [Keyblade("Happy Gear")] HappyGear, [Keyblade("Crystal Snow")] CrystalSnow, [Keyblade("Hunny Spout")] HunnySpout, [Keyblade("Nano Gear")] NanoGear, [Keyblade("Wheel of Fate")] WheelOfFate, [Keyblade("Grand Chef")] GrandChef, [Keyblade("Classic Tone")] ClassicTone, [Keyblade("Oathkeeper")] Oathkeeper, [Keyblade("Oblivion")] Oblivion, [Keyblade("Ultima Weapon")] UltimaWeapon, [Keyblade("Midnight Blue")] MidnightBlue, [Keyblade("Phantom Green")] PhantomGreen, [Keyblade("Starlight")] Starlight, [Keyblade("Dawn Till Dusk")] DawnTillDusk, [Unused] UnusedKeyblade2b, [Staff("Mage's Staff")] Weapon15, [Staff("Mage's Staff+")] Weapon16, [Staff("Warhammer")] Weapon17, [Staff("Warhammer+")] Weapon18, [Staff("Magician's Wand")] Weapon19, [Staff("Magician's Wand+")] Weapon1a, [Staff("Nirvana")] Weapon1b, [Staff("Nirvana+")] Weapon1c, [Staff("Astrolabe")] Weapon1d, [Staff("Astrolabe+")] Weapon1e, [Staff("Heartless Maul")] Weapon1f, [Staff("Heartless Maul+")] Weapon20, [Staff("Save the Queen")] Weapon21, [Staff("Save the Queen+")] SaveTheQueenPlus, [Unused] UnusedStaff3c, [Unused] UnusedStaff3d, [Unused] UnusedStaff3e, [Unused] UnusedStaff3f, [Unused] UnusedStaff40, [Unused] UnusedStaff41, [Shield("Knight's Shield")] Weapon29, [Shield("Knight's Shield+")] Weapon2a, [Shield("Clockwork Shield")] Weapon2b, [Shield("Clockwork Shield+")] Weapon2c, [Shield("Star Shield")] Weapon2d, [Shield("Star Shield+")] Weapon2e, [Shield("Aegis Shield")] Weapon2f, [Shield("Aegis Shield+")] Weapon30, [Shield("Storm Anchor")] Weapon31, [Shield("Storm Anchor+")] Weapon32, [Shield("Nobody Guard")] Weapon33, [Shield("Nobody Guard+")] Weapon34, [Shield("Save the King")] Weapon35, [Shield("Save the King+")] SaveTheKingPlus, [Unused] Weapon37, [Unused] Weapon38, [Unused] Weapon39, [Unused] Weapon3a, [Unused] Weapon3b, [Unused] Weapon3c, [Weapon("Master's Defender")] EraqusKeyblade, Weapon3e, Weapon3f, Weapon40, Weapon41, [Weapon("Kingdom Key D")] KingdomKeyD, [Weapon("Kingdom Key W")] KingdomKeyDPlus, Weapon44, [Weapon("Heart of a Hero")] HeartOfHero, [Weapon("Cowboy's Pride")] CowboyPride, [Weapon("Space Ranger Suit")] SpaceRangerSuit, [Weapon("Golden Hair")] GoldenHair, [Weapon("Frying Pan")] FryingPan, [Weapon("Skill & Crossbones")] SkillAndCrossbones, [Weapon("Ice Claws")] IceClaws, [Weapon("Powered Suit")] PoweredSuit, [Weapon("Claws")] Claws, [Weapon("Knockout Body")] KnockoutBody, [Keyblade("Way to the Dawn")] WayToDawn, [Keyblade("Braveheart")] Braveheart, Weapon51, Weapon52, Weapon53, Weapon54, Weapon55, Weapon56, Weapon57, [Weapon("Kingdom Key (FAKE)")] FakeKingdomKey, [Weapon("Kingdom Key (FAKE)")] FakeKingdomKey2, Weapon5a, Weapon5b, Weapon5c, Weapon5d, Weapon5e, Weapon5f, Item60, Item61, Item62, Item63, Item64, Item65, Item66, Item67, Item68, Item69, Item6a, Item6b, Item6c, Item6d, Item6e, Item6f, Item70, Item71, Item72, Item73, Item74, Item75, Item76, Item77, Item78, Item79, Item7a, Item7b, Item7c, Item7d, Item7e, Item7f, Item80, Item81, Item82, Item83, Item84, Item85, Item86, Item87, Item88, Item89, Item8a, Item8b, Item8c, Item8d, Item8e, Item8f, Item90, Item91, Item92, Item93, Item94, Item95, Item96, Item97, Item98, Item99, Item9a, Item9b, Item9c, Item9d, Item9e, Item9f, Itema0, Itema1, Itema2, Itema3, Itema4, Itema5, Itema6, Itema7, Itema8, Itema9, Itemaa, Itemab, Itemac, Itemad, Itemae, Itemaf, Itemb0, Itemb1, Itemb2, Itemb3, Itemb4, Itemb5, Itemb6, Itemb7, Itemb8, Itemb9, Itemba, Itembb, Itembc, Itembd, Itembe, Itembf, Itemc0, Itemc1, Itemc2, Itemc3, Itemc4, Itemc5, Itemc6, Itemc7, Itemc8, Itemc9, Itemca, Itemcb, Itemcc, Itemcd, Itemce, Itemcf, Itemd0, Itemd1, Itemd2, Itemd3, Itemd4, Itemd5, Itemd6, Itemd7, Itemd8, Itemd9, Itemda, Itemdb, Itemdc, Itemdd, Itemde, Itemdf, Iteme0, Iteme1, Iteme2, Iteme3, Iteme4, Iteme5, Iteme6, Iteme7, Iteme8, Iteme9, Itemea, Itemeb, Itemec, Itemed, Itemee, Itemef, Itemf0, Itemf1, Itemf2, Itemf3, Itemf4, Itemf5, Itemf6, Itemf7, Itemf8, Itemf9, Itemfa, Itemfb, Itemfc, Itemfd, Itemfe, Itemff, } } ================================================ FILE: KHSave.Lib3/Types/WorldType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.Lib3.Types { public enum WorldType : byte { [World("bt", "Scala Ad Caelum")] ScalaAdCaelum = 1, [World("dw", "Dark World")] DarkWorld = 3, [World("he", "Olympus")] Olympus = 4, [World("ts", "Toy Box")] ToyBox = 5, [World("ra", "Kingdom of Corona")] KingdomOfCorona = 7, [World("fz", "Arendelle")] Arendelle = 8, [World("ca", "Caribbean")] Caribbean = 9, [World("po", "100 Acre Wood")] AcreWood = 10, [World("mi", "Monstropolis")] Monstropolis = 11, [World("tt", "Twilight Town")] TwilightTown = 12, [World("yt", "The Mysterious Tower")] MysteriousTower = 13, [World("kg", "Keyblade Graveyard")] KeybladeGraveyard = 14, [World("bx", "San Fransokyo")] SanFransokyo = 19, [World("ew", "The Final World")] FinalWorld = 22, [World("rg", "Radiant Garden")] RadiantGarden = 24, [World("dp", "Land of Departure")] LandOfDeparture = 25, [World("wm", "World Map")] WorldMap = 28, [World("di", "Destiny Island")] DestinyIsland = 0xF0, [World("rg", "Radiant Garden")] RadiantGarden2 = 0xF1, [World("gm", "Gummiship")] Gummiship = 0xF2, [World("dc", "Disney Castle")] DisneyCastle = 0xF3, [World("sp", "SP world")] Sp = 0xF4, } } ================================================ FILE: KHSave.LibBbs/Attributes/AbilityAttribute.cs ================================================ using KHSave.Attributes; namespace KHSave.LibBbs.Attributes { public class AbilityStatusAttribute : AbilityAttribute { public AbilityStatusAttribute(string name = null) : base(name) { } } public class AbilityPriceAttribute : AbilityAttribute { public AbilityPriceAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave.LibBbs/Attributes/ActionAttribute.cs ================================================ using KHSave.Attributes; namespace KHSave.LibBbs.Attributes { public class MovementAttribute : InfoAttribute { public MovementAttribute(string name = null) : base(name) { } } public class DefenseAttribute : InfoAttribute { public DefenseAttribute(string name = null) : base(name) { } } public class ReprisalAttribute : InfoAttribute { public ReprisalAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave.LibBbs/Attributes/CommandAttribute.cs ================================================ using KHSave.Attributes; namespace KHSave.LibBbs.Attributes { public class AttackAttribute : InfoAttribute { public AttackAttribute(string name = null) : base(name) { } } public class FinisherAttribute : InfoAttribute { public FinisherAttribute(string name = null) : base(name) { } } public class ShotlockAttribute : InfoAttribute { public ShotlockAttribute(string name = null) : base(name) { } } public class DlinkAttribute : InfoAttribute { public DlinkAttribute(string name = null) : base(name) { } } public class FriendshipAttribute : InfoAttribute { public FriendshipAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave.LibBbs/Attributes/CommandStyleAttribute.cs ================================================ using KHSave.Attributes; namespace KHSave.LibBbs.Attributes { public class CommandStyleLevel1Attribute : InfoAttribute { public CommandStyleLevel1Attribute(string name = null) : base(name) { } } public class CommandStyleLevel2Attribute : InfoAttribute { public CommandStyleLevel2Attribute(string name = null) : base(name) { } } public class CommandStyleOtherAttribute : InfoAttribute { public CommandStyleOtherAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave.LibBbs/Constants.cs ================================================ namespace KHSave.LibBbs { internal class Constants { public const uint MagicCode = 1146307138; } public enum GameVersion { Japanese = 0x18, AmericanEuropean = 0x1C, FinalMix = 0x1D, } } ================================================ FILE: KHSave.LibBbs/ISaveKhBbs.cs ================================================ using KHSave.LibBbs.Models; using KHSave.LibBbs.Types; namespace KHSave.LibBbs { public interface ISaveKhBbs { uint MagicCode { get; set; } int Version { get; set; } uint Size { get; set; } uint Checksum { get; set; } byte Report { get; set; } byte Dummy1 { get; set; } byte Dummy2 { get; set; } byte Dummy3 { get; set; } WorldType World { get; set; } byte Room { get; set; } byte Location { get; set; } CharacterType PlayableCharacter { get; set; } int Timer { get; set; } Command[] CommandList { get; set; } Character Character { get; set; } Deck[] Decks { get; set; } DifficultyType Difficulty { get; set; } } } ================================================ FILE: KHSave.LibBbs/KHSave.LibBbs.csproj ================================================  net6 ================================================ FILE: KHSave.LibBbs/Models/Ability.cs ================================================ using Xe.BinaryMapper; namespace KHSave.LibBbs.Models { public class Ability { [Data] public byte NumberActivated { get; set; } [Data] public byte Slots { get; set; } [Data] public byte Unk2 { get; set; } [Data] public byte Unk3 { get; set; } } } ================================================ FILE: KHSave.LibBbs/Models/Character.cs ================================================ using KHSave.LibBbs.Types; using Xe.BinaryMapper; namespace KHSave.LibBbs.Models { public class Character { [Data] public uint Experience { get; set; } [Data] public uint Money { get; set; } [Data] public uint Medals { get; set; } [Data] public ushort Level { get; set; } [Data] public ushort Hp1 { get; set; } [Data] public ushort Hp2 { get; set; } [Data] public ushort Unk12 { get; set; } [Data] public ushort Unk14 { get; set; } [Data] public ushort Unk16 { get; set; } [Data] public ushort Magic { get; set; } [Data] public ushort Defense { get; set; } [Data] public ushort ArenaLevel { get; set; } [Data] public ushort Strength { get; set; } [Data] public ushort Unk20 { get; set; } [Data] public ushort Unk22 { get; set; } [Data] public ushort Unk24 { get; set; } [Data] public ushort Unk26 { get; set; } [Data] public ushort Unk28 { get; set; } [Data] public WeaponType Weapon { get; set; } [Data] public ushort Unk2C { get; set; } [Data] public ushort Unk2E { get; set; } } } ================================================ FILE: KHSave.LibBbs/Models/Command.cs ================================================ using KHSave.LibBbs.Types; using Xe.BinaryMapper; namespace KHSave.LibBbs.Models { public class Command { [Data] public CommandType Id { get; set; } [Data] public ushort Level { get; set; } [Data] public ushort Experience { get; set; } [Data] public AbilityType Ability { get; set; } [Data] public ushort Flags { get; set; } } } ================================================ FILE: KHSave.LibBbs/Models/Deck.cs ================================================ using Xe.BinaryMapper; namespace KHSave.LibBbs.Models { public class Deck { [Data(Count = 8)] public Command[] BattleCommands { get; set; } [Data(Count = 10)] public Command[] ActionCommands { get; set; } [Data] public Command Shotlock { get; set; } [Data(Count = 0x14)] public byte[] Unk72 { get; set; } [Data(Count = 16)] public byte[] Name { get; set; } [Data(Count = 46)] public byte[] Unk90 { get; set; } //Padding? public class Command { [Data] public ushort Id { get; set; } // Id in CommandList [Data] public ushort Unk02 { get; set; } [Data] public ushort Unk04 { get; set; } } } } ================================================ FILE: KHSave.LibBbs/Models/Dlink.cs ================================================ using KHSave.LibBbs.Types; using Xe.BinaryMapper; namespace KHSave.LibBbs.Models { public class Dlink { [Data] public CommandType Id { get; set; } [Data] public ushort Status { get; set; } [Data] public uint Dummy { get; set; } } } ================================================ FILE: KHSave.LibBbs/Models/Finisher.cs ================================================ using KHSave.LibBbs.Types; using Xe.BinaryMapper; namespace KHSave.LibBbs.Models { public class Finisher { [Data] public CommandType Id { get; set; } [Data] public ushort Status { get; set; } [Data] public uint Experience { get; set; } } } ================================================ FILE: KHSave.LibBbs/SaveKhBbs.European.cs ================================================ using KHSave.LibBbs.Models; using KHSave.LibBbs.Types; using Xe.BinaryMapper; namespace KHSave.LibBbs { public partial class SaveKhBbs { public class SaveEuropean : ISaveKhBbs { [Data(0, 0x11B40)] public byte[] Data { get; set; } [Data(0)] public uint MagicCode { get; set; } [Data] public int Version { get; set; } [Data] public uint Size { get; set; } [Data] public uint Checksum { get; set; } [Data] public byte Report { get; set; } [Data] public byte Dummy1 { get; set; } [Data] public byte Dummy2 { get; set; } [Data] public byte Dummy3 { get; set; } [Data] public WorldType World { get; set; } [Data] public byte Room { get; set; } [Data] public byte Location { get; set; } [Data] public CharacterType PlayableCharacter { get; set; } [Data] public int Timer { get; set; } [Data(0x3488, Count = 0x200)] public Command[] CommandList { get; set; } [Data(0x59A8)] public Character Character { get; set; } [Data(0x5A04, Count = 0x3)] public Deck[] Decks { get; set; } [Data(0x5C84)] public DifficultyType Difficulty { get; set; } } } } ================================================ FILE: KHSave.LibBbs/SaveKhBbs.FinalMix.cs ================================================ using KHSave.LibBbs.Models; using KHSave.LibBbs.Types; using Xe.BinaryMapper; namespace KHSave.LibBbs { public partial class SaveKhBbs { public class SaveFinalMix : ISaveKhBbs { [Data(0, 0x11E50)] public byte[] Data { get; set; } [Data(0)] public uint MagicCode { get; set; } [Data] public int Version { get; set; } [Data] public uint Size { get; set; } [Data] public uint Checksum { get; set; } [Data] public byte Report { get; set; } [Data] public byte Dummy1 { get; set; } [Data] public byte Dummy2 { get; set; } [Data] public byte Dummy3 { get; set; } [Data] public WorldType World { get; set; } [Data] public byte Room { get; set; } [Data] public byte Location { get; set; } [Data] public CharacterType PlayableCharacter { get; set; } [Data] public int Timer { get; set; } [Data(0x3498, Count = 0x200)] public Command[] CommandList { get; set; } [Data(0x4D64, Count = 0x1E)] public Ability[] Abilities { get; set; } [Data(0x5644, Count = 0xF)] public Finisher[] Finishers { get; set; } [Data(0x5746, Count = 0xC)] public Dlink[] Dlinks { get; set; } [Data(0x59D0)] public Character Character { get; set; } [Data(0x5A2C, Count = 0x3)] public Deck[] Decks { get; set; } [Data(0x5CAC)] public DifficultyType Difficulty { get; set; } } } } ================================================ FILE: KHSave.LibBbs/SaveKhBbs.cs ================================================ using System.IO; using Xe.BinaryMapper; namespace KHSave.LibBbs { public partial class SaveKhBbs { public static bool IsValid(Stream stream) { var prevPosition = stream.Position; var magicCode = new BinaryReader(stream).ReadUInt32(); stream.Position = prevPosition; return magicCode == Constants.MagicCode; } public static GameVersion? GetGameVersion(Stream stream) { if (!IsValid(stream)) return null; var prevPosition = stream.Position; stream.Position = 4; var version = new BinaryReader(stream).ReadUInt32(); stream.Position = prevPosition; switch ((GameVersion)version) { case GameVersion.Japanese: case GameVersion.AmericanEuropean: case GameVersion.FinalMix: return (GameVersion)version; default: return null; } } public static TSaveKhBbs Read(Stream stream) where TSaveKhBbs : class, ISaveKhBbs => BinaryMapping.ReadObject(stream.SetPosition(0)); public static void Write(Stream stream, TSaveKhBbs save) where TSaveKhBbs : class, ISaveKhBbs { uint checksum; using (var tempStream = new MemoryStream()) { BinaryMapping.WriteObject(tempStream, save); checksum = CalculateChecksum(tempStream); } save.Checksum = checksum; BinaryMapping.WriteObject(stream.FromBegin(), save); } public static uint CalculateChecksum(Stream stream) { uint checksum = 0; using (BinaryReader reader = new BinaryReader(stream)) { reader.BaseStream.Seek(0x10, SeekOrigin.Begin); for (int i = 0; i < reader.BaseStream.Length / 4 - 4; i++) checksum += reader.ReadUInt32(); } return checksum; } } } ================================================ FILE: KHSave.LibBbs/Types/AbilityType.cs ================================================ using KHSave.Attributes; using KHSave.LibBbs.Attributes; namespace KHSave.LibBbs.Types { public enum AbilityType : ushort { [AbilityPrice("Treasure Magnet")] TreasureMagnet = 0x01C4, [AbilityPrice("HP Prize Plus")] HpPrizePlus = 0x01C5, [AbilityPrice("Link Prize Plus")] LinkPrizePlus = 0x01C6, [AbilityPrice("Lucky Strike")] LuckyStrike = 0x01C7, [AbilityStatus("HP Boost")] HpBoost = 0x01C8, [AbilitySupport("EXP Zero")] ExpZero = 0x01C9, [AbilityStatus("Fire Boost")] FireBoost = 0x01CA, [AbilityStatus("Blizzard Boost")] BlizzardBoost = 0x01CB, [AbilityStatus("Thunder Boost")] ThunderBoost = 0x01CC, [AbilityStatus("Cure Boost")] CureBoost = 0x01CD, [AbilityStatus("Item Boost")] ItemBoost = 0x01CE, [AbilityStatus("Attack Haste")] AttackHaste = 0x01CF, [AbilityStatus("Magic Haste")] MagicHaste = 0x01D0, [AbilityStatus("Combo F Boost")] ComboFBoost = 0x01D1, [AbilityStatus("Finish Boost")] FinishBoost = 0x01D2, [AbilitySupport("Combo Plus")] ComboPlus = 0x01D3, [AbilitySupport("Air Combo Plus")] AirComboPlus = 0x01D4, [AbilityStatus("Fire Screen")] FireScreen = 0x01D5, [AbilityStatus("Blizzard Screen")] BlizzardScreen = 0x01D6, [AbilityStatus("Thunder Screen")] ThunderScreen = 0x01D7, [AbilityStatus("Dark Screen")] DarkScreen = 0x01D8, [AbilityStatus("Reload Boost")] ReloadBoost = 0x01D9, [AbilityStatus("Defender")] Defender = 0x01DA, [AbilitySupport("EXP Chance")] ExpChance = 0x01DB, [AbilitySupport("EXP Walker")] ExpWalker = 0x01DC, [AbilitySupport("Damage Syphon")] DamageSyphon = 0x01DD, [AbilitySupport("Second Chance")] SecondChance = 0x01DE, [AbilitySupport("Once More")] OnceMore = 0x01DF, [AbilitySupport("Scan")] Scan = 0x01E0, [AbilitySupport("Leaf Bracer")] LeafBracer = 0x01E1, } } ================================================ FILE: KHSave.LibBbs/Types/CharacterType.cs ================================================ using KHSave.Attributes; namespace KHSave.LibBbs.Types { public enum CharacterType : byte { [Unused] Crash00, [Info] Ventus, [Info] Aqua, [Info] Terra, [Unused] Crash04, [Info("Ventus (full armor)")] ArmoredVentus, [Info("Aqua (full armor)")] ArmoredAqua, [Info("Terra (full armor)")] ArmoredTerra, } } ================================================ FILE: KHSave.LibBbs/Types/CommandType.cs ================================================ using KHSave.Attributes; using KHSave.LibBbs.Attributes; namespace KHSave.LibBbs.Types { public enum CommandType : ushort { [Info] Empty = 0, [Finisher("Finish")] Finish = 0x003F, [Finisher("Air Flair 1")] AirFlair1 = 0x0040, [Finisher("Magic Pulse 1")] MagicPulse1 = 0x0041, [Finisher("Rising Rock 1")] RisingRock1 = 0x0042, [Finisher("Heat Slash 1")] HeatSlash1 = 0x0043, [Finisher("Gold Rush")] GoldRush = 0x0044, [Finisher("Air Flair 2")] AirFlair2 = 0x0045, [Finisher("Magic Pulse 2")] MagicPulse2 = 0x0046, [Finisher("Rising Rock 2")] RisingRock2 = 0x0047, [Finisher("Heat Slash 2")] HeatSlash2 = 0x0048, [Finisher("Ramuh's Judgement")] RamuhsJudgement = 0x0049, [Finisher("Twisted Hours")] TwistedHours = 0x004A, [Finisher("Surprise! 1")] Surprise1 = 0x004B, [Finisher("Air Flair 3")] AirFlair3 = 0x004C, [Finisher("Magic Pulse 3")] MagicPulse3 = 0x004D, [Finisher("Dark Star 1")] DarkStar1 = 0x004E, [Finisher("Heal Strike")] HealStrike = 0x004F, [Finisher("Random End")] RandomEnd = 0x0050, [Finisher("Surprise! 2")] Surprise2 = 0x0051, [Finisher("Air Flair 4")] AirFlair4 = 0x0052, [Finisher("Magic Pulse 4")] MagicPulse4 = 0x0053, [Finisher("Dark Star 2")] DarkStar2 = 0x0054, [Finisher("Explosion")] Explosion = 0x0055, [Finisher("Ice Burst")] IceBurst = 0x0056, [Finisher("Celebration")] Celebration = 0x0057, [Finisher("Stratosphere")] Stratosphere = 0x0058, [Finisher("Teleport Spike")] TeleportSpike = 0x0059, [Finisher("Demolition")] Demolition = 0x005A, [Attack("Quick Blitz")] QuickBlitz = 0x005B, [Attack("Blitz")] Blitz = 0x005C, [Attack("Magic Hour")] MagicHour = 0x005D, [Attack("Meteor Crash")] MeteorCrash = 0x005E, [Attack("Sliding Dash")] SlidingDash = 0x005F, [Attack("Fire Dash")] FireDash = 0x0060, [Attack("Dark Haze")] DarkHaze = 0x0061, [Attack("Sonic Blade")] SonicBlade = 0x0062, [Attack("Chaos Blade")] ChaosBlade = 0x0063, [Attack("Zantetsuken")] Zantetsuken = 0x0064, [Attack("Strike Raid")] StrikeRaid = 0x0065, [Attack("Freeze Raid")] FreezeRaid = 0x0066, [Attack("Treasure Raid")] TreasureRaid = 0x0067, [Attack("Spark Raid")] SparkRaid = 0x0068, [Attack("Wind Raid")] WindRaid = 0x0069, [Attack("Fire Surge")] FireSurge = 0x006A, [Attack("Barrier Surge")] BarrierSurge = 0x006B, [Attack("Thunder Surge")] ThunderSurge = 0x006C, [Attack("Aerial Slam")] AerialSlam = 0x006D, [Attack("Ars Solum")] ArsSolum = 0x006E, [Attack("Ars Arcanum")] ArsArcanum = 0x006F, [Attack("Time Splicer")] TimeSplicer = 0x0070, [Attack("Poison Edge")] PoisonEdge = 0x0071, [Attack("Wishing Edge")] WishingEdge = 0x0072, [Attack("Blizzard Edge")] BlizzardEdge = 0x0073, [Attack("Stun Edge")] StunEdge = 0x0074, [Attack("Slot Edge")] SlotEdge = 0x0075, [Attack("Fire Strike")] FireStrike = 0x0076, [Attack("Confusion Strike")] ConfusionStrike = 0x0077, [Attack("Binding Strike")] BindingStrike = 0x0078, [Attack("Tornado Strike")] TornadoStrike = 0x0079, [Attack("Brutal Blast")] BrutalBlast = 0x007A, [Attack("Magnet Spiral")] MagnetSpiral = 0x007B, [Attack("Salvation")] Salvation = 0x007C, [Attack("Windcutter")] Windcutter = 0x007D, [Attack("Limit Storm")] LimitStorm = 0x007E, [Attack("Collision Magnet")] CollisionMagnet = 0x007F, [Attack("Geo Impact")] GeoImpact = 0x0080, [Attack("Sacrifice")] Sacrifice = 0x0081, [Attack("Break Time")] BreakTime = 0x0082, [Magic("Fire")] Fire = 0x0083, [Magic("Fira")] Fira = 0x0084, [Magic("Firaga")] Firaga = 0x0085, [Magic("Dark Firaga")] DarkFiraga = 0x0086, [Magic("Fission Firaga")] FissionFiraga = 0x0087, [Magic("Triple Firaga")] TripleFiraga = 0x0088, [Magic("Crawling Fire")] CrawlingFire = 0x0089, [Magic("Blizzard")] Blizzard = 0x008A, [Magic("Blizzara")] Blizzara = 0x008B, [Magic("Blizzaga")] Blizzaga = 0x008C, [Magic("Triple Blizzaga")] TripleBlizzaga = 0x008D, [Magic("Thunder")] Thunder = 0x008E, [Magic("Thundara")] Thundara = 0x008F, [Magic("Thundaga")] Thundaga = 0x0090, [Magic("Thundaga Shot")] ThundagaShot = 0x0091, [Magic("Cure")] Cure = 0x0092, [Magic("Cura")] Cura = 0x0093, [Magic("Curaga")] Curaga = 0x0094, [Magic("Esuna")] Esuna = 0x0095, [Magic("Mine Shield")] MineShield = 0x0096, [Magic("Mine Square")] MineSquare = 0x0097, [Magic("Seeker Mine")] SeekerMine = 0x0098, [Magic("Zero Gravity")] ZeroGravity = 0x0099, [Magic("Zero Gravira")] ZeroGravira = 0x009A, [Magic("Zero Graviga")] ZeroGraviga = 0x009B, [Magic("Magnet")] Magnet = 0x009C, [Magic("Magnera")] Magnera = 0x009D, [Magic("Magnega")] Magnega = 0x009E, [Magic("Munny Magnet")] MunnyMagnet = 0x009F, [Magic("Energy Magnet")] EnergyMagnet = 0x00A0, [Magic("D-Link Magnet")] DLinkMagnet = 0x00A1, [Magic("Aero")] Aero = 0x00A2, [Magic("Aerora")] Aerora = 0x00A3, [Magic("Aeroga")] Aeroga = 0x00A4, [Magic("Warp")] Warp = 0x00A5, [Magic("Faith")] Faith = 0x00A6, [Magic("Deep Freeze")] DeepFreeze = 0x00A7, [Magic("Glacier")] Glacier = 0x00A8, [Magic("Ice Barrage")] IceBarrage = 0x00A9, [Magic("Firaga Burst")] FiragaBurst = 0x00AA, [Magic("Raging Storm")] RagingStorm = 0x00AB, [Magic("Mega Flare")] MegaFlare = 0x00AC, [Magic("Quake")] Quake = 0x00AD, [Magic("Tornado")] Tornado = 0x00AE, [Magic("Meteor")] Meteor = 0x00AF, [Magic("Transcendence")] Transcendence = 0x00B0, [Magic("Mini")] Mini = 0x00B1, [Magic("Blackout")] Blackout = 0x00B2, [Magic("Ignite")] Ignite = 0x00B3, [Magic("Confuse")] Confuse = 0x00B4, [Magic("Bind")] Bind = 0x00B5, [Magic("Poison")] Poison = 0x00B6, [Magic("Slow")] Slow = 0x00B7, [Magic("Stop")] Stop = 0x00B8, [Magic("Stopra")] Stopra = 0x00B9, [Magic("Stopga")] Stopga = 0x00BA, [Magic("Sleep")] Sleep = 0x00BB, [Consumable("Potion")] Potion = 0x00BC, [Consumable("Hi-Potion")] HiPotion = 0x00BD, [Consumable("Mega-Potion")] MegaPotion = 0x00BE, [Consumable("Ether")] Ether = 0x00BF, [Consumable("Mega-Ether")] MegaEther = 0x00C0, [Consumable("Panacea")] Panacea = 0x00C1, [Consumable("Elixir")] Elixir = 0x00C2, [Consumable("Megalixir")] Megalixir = 0x00C3, [Consumable("Balloon Letter")] BalloonLetter = 0x00C4, [Consumable("Vanilla Glitz")] VanillaGlitz = 0x00C5, [Consumable("Fabracadabra")] Fabracadabra = 0x00C6, [Consumable("Honeybunny")] Honeybunny = 0x00C7, [Consumable("Bueno Volcano")] BuenoVolcanoFirestorm = 0x00C8, [Consumable("Snow Bear")] SnowBearDiamondDust = 0x00C9, [Consumable("Spark Lemon")] SparkLemonThunderbolt = 0x00CA, [Consumable("Goofy Parfait")] GoofyParfait = 0x00CB, [Consumable("Royalberry")] Royalberry = 0x00CC, [Consumable("Sugary Skies")] SugarySkies = 0x00CD, [Consumable("Rockin' Crunch")] RockinCrunch = 0x00CE, [Consumable("Donald Fizz")] DonaldFizz = 0x00CF, [Consumable("Daisy Sorbet")] DaisySorbet = 0x00D0, [Consumable("Big Bad Pete")] BigBadPete = 0x00D1, [Consumable("Double Crunch")] DoubleCrunch = 0x00D2, [Friendship("Group Cure")] GroupCure = 0x00D3, [Friendship("Group Cura")] GroupCura = 0x00D4, [Friendship("Group Curaga")] GroupCuraga = 0x00D5, [Friendship("Group Esuna")] GroupEsuna = 0x00D6, [Friendship("Confetti")] Confetti = 0x00D7, [Friendship("Fireworks")] Fireworks = 0x00D8, [Friendship("Taunt")] Taunt = 0x00D9, [Friendship("Victory Pose")] VictoryPose = 0x00DA, [Info("Deck Scramble")] DeckScramble = 0x00DB, [Friendship("Vanish")] Vanish = 0x00DC, [Friendship("Unison Rush")] UnisonRush = 0x00DD, [Friendship("Voltage Stack")] VoltageStack = 0x00DE, [Friendship("Trinity Limit")] TrinityLimit = 0x00DF, [Info("Gold")] Gold = 0x00E0, [Info("Black")] Black = 0x00E1, [Info("Finish (Finish Command)")] FinishFinishCommand = 0x00E2, [Info("Wrath of Darkness (No Heart Fight)")] WrathofDarkness = 0x00E3, [Friendship("Sign of Faith (Mickey D-Link)")] SignofFaith = 0x00E4, [Friendship("Wish Circle (Cinderella D-Link)")] WishCircle = 0x00E5, [Friendship("Enchanted Step (Cinderella D-Link)")] EnchantedStep = 0x00E6, [Friendship("Wish Shot (Cinderella D-Link)")] WishShot = 0x00E7, [Friendship("Magic Mending (Cinderella D-Link)")] MagicMending = 0x00E8, [Friendship("Doc (Snow White D-Link)")] Doc = 0x00E9, [Friendship("Grumpy (Snow White D-Link)")] Grumpy = 0x00EA, [Friendship("Sneezy (Snow White D-Link)")] Sneezy = 0x00EB, [Friendship("Happy (Snow White D-Link)")] Happy = 0x00EC, [Friendship("Sleepy (Snow White D-Link)")] Sleepy = 0x00ED, [Friendship("Bashful (Snow White D-Link)")] Bashful = 0x00EE, [Friendship("Dopey (Snow White D-Link)")] Dopey = 0x00EF, [Friendship("Dark Spiral (Vanitas D-Link)")] DarkSpiral = 0x00F0, [Friendship("Dark Splicer (Vanitas D-Link)")] DarkSplicer = 0x00F1, [Friendship("Illusion-F")] IllusionF = 0x00F2, [Friendship("Illusion-L")] IllusionL = 0x00F3, [Friendship("Illusion-V")] IllusionV = 0x00F4, [Friendship("Illusion-R")] IllusionR = 0x00F5, [Friendship("Illusion-B")] IllusionB = 0x00F6, [Movement("Slide")] Slide = 0x00F8, [Movement("Jump")] Jump = 0x00F9, [Movement("High Jump")] HighJump = 0x00FA, [Movement("Dodge Roll")] DodgeRoll = 0x00FB, [Movement("Thunder Roll")] ThunderRoll = 0x00FC, [Movement("Cartwheel")] Cartwheel = 0x00FD, [Movement("Firewheel")] Firewheel = 0x00FE, [Movement("Air Slide")] AirSlide = 0x00FF, [Movement("Ice Slide")] IceSlide = 0x0100, [Movement("Reversal")] Reversal = 0x0101, [Movement("Glide")] Glide = 0x0102, [Movement("Superglide")] Superglide = 0x0103, [Movement("Fire Glide")] FireGlide = 0x0104, [Movement("Homing Slide")] HomingSlide = 0x0105, [Movement("Teleport")] Teleport = 0x0106, [Movement("Sonic Impact")] SonicImpact = 0x0107, [Movement("Doubleflight")] Doubleflight = 0x0108, [Defense("Block")] Block = 0x0109, [Defense("Renewal Block")] RenewalBlock = 0x010A, [Defense("Focus Guard")] FocusGuard = 0x010B, [Defense("Stun Block")] StunBlock = 0x010C, [Defense("Poison Block")] PoisonBlock = 0x010D, [Defense("Barrier")] Barrier = 0x010E, [Defense("Renewal Barrier")] RenewalBarrier = 0x010F, [Defense("Focus Barrier")] FocusBarrier = 0x0110, [Defense("Confuse Barrier")] ConfuseBarrier = 0x0111, [Defense("Stop Barrier")] StopBarrier = 0x0112, [Reprisal("Counter Rush")] CounterRush = 0x0113, [Reprisal("Counter Hammer")] CounterHammer = 0x0114, [Reprisal("Reversal Slash")] ReversalSlash = 0x0115, [Reprisal("Counter Barrier")] CounterBarrier = 0x0116, [Reprisal("Payback Raid")] PaybackRaid = 0x0117, [Reprisal("Payback Surge")] PaybackSurge = 0x0118, [Reprisal("Payback Fang")] PaybackFang = 0x0119, [Reprisal("Aerial Recovery")] AerialRecovery = 0x011A, [Shotlock("Shotlock")] Shotlock = 0x011B, [Shotlock("Meteor Shower")] MeteorShower = 0x011C, [Shotlock("Flame Salvo")] FlameSalvo = 0x011D, [Shotlock("Chaos Snake")] ChaosSnake = 0x011E, [Shotlock("Bubble Blaster")] BubbleBlaster = 0x011F, [Shotlock("Dark Volley")] DarkVolley = 0x0120, [Shotlock("Ragnarok")] Ragnarok = 0x0121, [Shotlock("Thunderstorm")] Thunderstorm = 0x0122, [Shotlock("Bio Barrage")] BioBarrage = 0x0123, [Shotlock("Prism Rain")] PrismRain = 0x0124, [Shotlock("Pulse Bomb")] PulseBomb = 0x0125, [Shotlock("Photon Charge")] PhotonCharge = 0x0126, [Shotlock("Absolute Zero")] AbsoluteZero = 0x0127, [Shotlock("Lightning Ray")] LightningRay = 0x0128, [Shotlock("Sonic Shadow")] SonicShadow = 0x0129, [Shotlock("Dark Link")] DarkLink = 0x012A, [Shotlock("Ultima Cannon")] UltimaCannon = 0x012B, [Shotlock("Lightbloom")] Lightbloom = 0x012C, [Shotlock("Multivortex")] Multivortex = 0x012D, [Info("Call")] Call = 0x0137, [Info("Last Dance")] LastDance = 0x0138, [Info("Saber Counter")] SaberCounter = 0x0139, [Info("Tornado Counter")] TornadoCounter = 0x013A, [Info("Rush Counter")] RushCounter = 0x013B, [Info("White Calm")] WhiteCalm = 0x013C, [Info("Selfless Prince")] SelflessPrince = 0x013D, [Info("Swing Slash")] SwingSlash = 0x013E, [Info("Astro Shot")] AstroShot = 0x013F, [Info("Astro Strike")] AstroStrike = 0x0140, [Info("Holy Burst")] HolyBurstVentus = 0x0141, [Info("Dual Limit")] DualLimit = 0x0142, [Info("Grab")] Grab = 0x0143, [Info("Bronco Strike")] BroncoStrike = 0x0144, [Info("Joint Force")] JointForce = 0x0145, [Info("Turn Over")] TurnOver = 0x0146, [Info("Heal Light")] HealLight = 0x0149, [Info("Nothing")] Nothing = 0x0151, [CommandStyleLevel1("Critical Impact")] CriticalImpact = 0x0152, [CommandStyleLevel1("Spellweaver")] Spellweaver = 0x0153, [CommandStyleLevel1("Fever Pitch")] FeverPitch = 0x0154, [CommandStyleLevel1("Firestorm")] Firestorm = 0x0155, [CommandStyleLevel1("Diamond Dust")] DiamondDust = 0x0156, [CommandStyleLevel1("Thunderbolt")] Thunderbolt = 0x0157, [CommandStyleLevel2("Cyclone")] Cyclone = 0x0158, [CommandStyleLevel2("Bladecharge")] Bladecharge = 0x0159, [CommandStyleLevel2("Sky Climber")] SkyClimber = 0x015A, [CommandStyleLevel2("Rockbreaker")] Rockbreaker = 0x015B, [CommandStyleLevel2("Ghost Drive")] GhostDrive = 0x015C, [CommandStyleLevel2("Rhythm Mixer")] RhythmMixer = 0x015D, [CommandStyleLevel2("Dark Impulse")] DarkImpulse = 0x015E, [CommandStyleLevel2("Wingblade")] Wingblade = 0x015F, [CommandStyleOther("Frozen Fortune")] FrozenFortune = 0x0160, [Info("-")] Empty2 = 0x0161, [Info("Nothing")] Nothing2 = 0x0162, [Dlink("Mickey")] Mickey = 0x0163, [Dlink("Donald")] Donald = 0x0164, [Dlink("Goofy")] Goofy = 0x0165, [Dlink("Experiment 626")] Experiment626 = 0x0166, [Dlink("Peter Pan")] PeterPan = 0x0167, [Dlink("Maleficent")] Maleficent = 0x0168, [Dlink("Cinderella")] Cinderella = 0x0169, [Dlink("Snow White")] SnowWhite = 0x016A, [Dlink("Zack")] Zack = 0x016B, [Dlink("Pete")] Pete = 0x016C, [Dlink("Aqua")] Aqua = 0x016D, [Dlink("Ventus")] Ventus = 0x016E, [Dlink("Terra")] Terra = 0x016F, [Dlink("X Aqua")] XAqua = 0x0170, [Dlink("X Ventus")] XVentus = 0x0171, [Dlink("X Terra")] XTerra = 0x0172, [Dlink("Vanitas")] Vanitas = 0x0173, [Dlink("Mickey")] Mickey2 = 0x0174, [Dlink("Donald")] Donald2 = 0x0175, [Dlink("Goofy")] Goofy2 = 0x0176, [Dlink("Experiment 626")] Experiment6262 = 0x0177, [Dlink("Peter Pan")] PeterPan2 = 0x0178, [Dlink("Maleficent")] Maleficent2 = 0x0179, [Dlink("Cinderella")] Cinderella2 = 0x017A, [Dlink("Snow White")] SnowWhite2 = 0x017B, [Dlink("Zack")] Zack2 = 0x017C, [Dlink("Pete")] Pete2 = 0x017D, [Dlink("Aqua")] Aqua2 = 0x017E, [Dlink("Ventus")] Ventus2 = 0x017F, [Dlink("Terra")] Terra2 = 0x0180, [Dlink("Player 1's Mirage Arena Name")] Player1sMirageArenaName = 0x0181, [Dlink("Player 2's Mirage Arena Name")] Player2sMirageArenaName = 0x0182, [Dlink("Player 3's Mirage Arena Name")] Player3sMirageArenaName = 0x0183, [Dlink("Player 4's Mirage Arena Name")] Player4sMirageArenaName = 0x0184, [Dlink("Player 5's Mirage Arena Name")] Player5sMirageArenaName = 0x0185, [Dlink("Player 6's Mirage Arena Name")] Player6sMirageArenaName = 0x0186, [Dlink("Player 7's Mirage Arena Name")] Player7sMirageArenaName = 0x0187, [Dlink("Player 8's Mirage Arena Name")] Player8sMirageArenaName = 0x0188, [Info("Return")] Return = 0x0189, [Info("Nothing")] Nothing3 = 0x018A, [Info("Illusion lvl")] Illusionlvl = 0x018B, [Info("Illusion-S")] IllusionS = 0x018C, [Info("Illusion-B")] IllusionB2 = 0x018D, [Info("Illusion-P")] IllusionP = 0x018E, [Info("Illusion-I")] IllusionI = 0x018F, [Friendship("Borrow/Surface")] BorrowSurface = 0x019B, [Attack("Stomp")] Stomp = 0x019C, [Magic("Aromatherapy")] Aromatherapy = 0x019D, [Attack("Bloody Bounce")] BloodyBounce = 0x019F, [Info("Avoid Jump")] AvoidJump = 0x01A0, [Info("Block")] Block2 = 0x01A1, //Move abilities into seperate enum for better accessibility } } ================================================ FILE: KHSave.LibBbs/Types/DifficultyType.cs ================================================ using KHSave.Attributes; namespace KHSave.LibBbs.Types { public enum DifficultyType : byte { [Info] Beginner = 0x8, [Info] Standard = 0x48, //[Info("Standard")] Standard2 = 0x49, //weird thing on the european games, save this for now [Info] Proud = 0x88, [Info] Critical = 0xC8, } } ================================================ FILE: KHSave.LibBbs/Types/WeaponType.cs ================================================ using KHSave.Attributes; namespace KHSave.LibBbs.Types { public enum WeaponType : ushort { [Keyblade("Wayward Wind")] WaywardWind = 0x0001, [Keyblade("Rainfell")] Rainfell = 0x0002, [Keyblade("Earthshaker")] Earthshaker = 0x0003, [Keyblade("Treasure Trove (Ventus)")] TreasureTroveVentus = 0x0004, [Keyblade("Treasure Trove (Aqua)")] TreasureTroveAqua = 0x0005, [Keyblade("Treasure Trove (Terra)")] TreasureTroveTerra = 0x0006, [Keyblade("Stroke of Midnight (Ventus)")] StrokeofMidnightVentus = 0x0007, [Keyblade("Stroke of Midnight (Aqua)")] StrokeofMidnightAqua = 0x0008, [Keyblade("Stroke of Midnight (Terra)")] StrokeofMidnightTerra = 0x0009, [Keyblade("Fairy Stars (Ventus)")] FairyStarsVentus = 0x000A, [Keyblade("Fairy Stars (Aqua)")] FairyStarsAqua = 0x000B, [Keyblade("Fairy Stars (Terra)")] FairyStarsTerra = 0x000C, [Keyblade("Victory Line (Ventus)")] VictoryLineVentus = 0x000D, [Keyblade("Victory Line (Aqua)")] VictoryLineAqua = 0x000E, [Keyblade("Victory Line (Terra)")] VictoryLineTerra = 0x000F, [Keyblade("Mark of a Hero (Ventus)")] MarkofaHeroVentus = 0x0010, [Keyblade("Mark of a Hero (Aqua)")] MarkofaHeroAqua = 0x0011, [Keyblade("Mark of a Hero (Terra)")] MarkofaHeroTerra = 0x0012, [Keyblade("Hyperdrive (Ventus)")] HyperdriveVentus = 0x0013, [Keyblade("Hyperdrive (Aqua)")] HyperdriveAqua = 0x0014, [Keyblade("Hyperdrive (Terra)")] HyperdriveTerra = 0x0015, [Keyblade("Pixie Petal (Ventus)")] PixiePetalVentus = 0x0016, [Keyblade("Pixie Petal (Aqua)")] PixiePetalAqua = 0x0017, [Keyblade("Pixie Petal (Terra)")] PixiePetalTerra = 0x0018, [Keyblade("Ultima Weapon (Ventus)")] UltimaWeaponVentus = 0x0019, [Keyblade("Ultima Weapon (Aqua)")] UltimaWeaponAqua = 0x001A, [Keyblade("Ultima Weapon (Terra)")] UltimaWeaponTerra = 0x001B, [Keyblade("Sweetstack (Ventus)")] SweetstackVentus = 0x001C, [Keyblade("Sweetstack (Aqua)")] SweetstackAqua = 0x001D, [Keyblade("Sweetstack (Terra)")] SweetstackTerra = 0x001E, [Keyblade("Frolic Flame")] FrolicFlame = 0x0021, [Keyblade("Lost Memory")] LostMemory = 0x0022, [Keyblade("Destiny's Embrace")] DestinysEmbrace = 0x0023, [Keyblade("Stormfall")] Stormfall = 0x0024, [Keyblade("Brightcrest")] Brightcrest = 0x0025, [Keyblade("Darkgnaw")] Darkgnaw = 0x0026, [Keyblade("Ends of the Earth")] EndsoftheEarth = 0x0027, [Keyblade("Chaos Ripper")] ChaosRipper = 0x0028, [Keyblade("Void Gear (Ventus)")] VoidGearVentus = 0x0029, [Keyblade("Void Gear (Aqua)")] VoidGearAqua = 0x002A, [Keyblade("Void Gear (Terra)")] VoidGearTerra = 0x002B, [Keyblade("No Name (Ventus)")] NoNameVentus = 0x002C, [Keyblade("No Name (Aqua)")] NoNameAqua = 0x002D, [Keyblade("No Name (Terra)")] NoNameTerra = 0x002E, [Keyblade("Royal Radiance (Ventus)")] RoyalRadianceVentus = 0x002F, [Keyblade("Royal Radiance (Aqua)")] RoyalRadianceAqua = 0x0030, [Keyblade("Royal Radiance (Terra)")] RoyalRadianceTerra = 0x0031, [Keyblade("Master's Defender")] MastersDefender = 0x0032, [Keyblade("Ultima Cannon")] UltimaCannon = 0x0033, } } ================================================ FILE: KHSave.LibBbs/Types/WorldType.cs ================================================ using KHSave.Attributes; namespace KHSave.LibBbs.Types { // https://openkh.dev/bbs/worlds.html public enum WorldType : byte { [World("ex", "Generic")] Generic = 0x0, [World("dp", "Land of Departure")] LandofDeparture = 0x1, [World("sw", "Dwarf Woodlands")] DwarfWoodlands = 0x2, [World("cd", "Castle of Dreams")] CastleofDreams = 0x3, [World("sb", "Enchanted Dominion")] EnchantedDominion = 0x4, [World("yt", "The Mysterious Tower")] MysteriousTower = 0x5, [World("rg", "Radiant Garden")] RadiantGarden = 0x6, [World("jb", "Jungle Book (JP) / Miscellaneous / Realm of Darkness (FM)")] RealmOfDarkness = 0x7, [World("he", "Olympus Coliseum")] Olympus = 0x8, [World("ls", "Deep Space")] DeepSpace = 0x9, [World("di", "Destiny Island")] DestinyIsland = 0xA, [World("pp", "Neverland")] Neverland = 0xB, [World("dc", "Disney Town")] DisneyTown = 0xC, [World("kg", "Keyblade Graveyard")] KeybladeGraveyard = 0xD, [World("vs", "Mirage Arena")] MirageArena = 0xF, [World("bd", "Command Board")] CommandBoard = 0x10, [World("wm", "World Map")] WorldMap = 0x11, } } ================================================ FILE: KHSave.LibDDD/Attributes/CommandAttributes.cs ================================================ using KHSave.Attributes; namespace KHSave.LibDDD.Attributes { public class AttackAttribute : InfoAttribute { public AttackAttribute(string name = null) : base(name) { } } public class MovementAttribute : InfoAttribute { public MovementAttribute(string name = null) : base(name) { } } public class DefenseAttribute : InfoAttribute { public DefenseAttribute(string name = null) : base(name) { } } public class ReprisalAttribute : InfoAttribute { public ReprisalAttribute(string name = null) : base(name) { } } public class FlowMotionAttribute : InfoAttribute { public FlowMotionAttribute(string name = null) : base(name) { } } public class AbilityStatsAttribute : InfoAttribute { public AbilityStatsAttribute(string name = null) : base(name) { } } public class AbilitySpiritsAttribute : InfoAttribute { public AbilitySpiritsAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave.LibDDD/Attributes/DreamPiecesAttribute.cs ================================================ using KHSave.Attributes; namespace KHSave.LibDDD.Attributes { public class DreamPiecesAttribute : InfoAttribute { public DreamPiecesAttribute(string info) : base(info) { } } } ================================================ FILE: KHSave.LibDDD/Attributes/GlossaryAttribute.cs ================================================ using KHSave.Attributes; namespace KHSave.LibDDD.Attributes { public class GlossaryAttribute : InfoAttribute { public GlossaryAttribute(string info) : base(info) { } } } ================================================ FILE: KHSave.LibDDD/Attributes/MementoEntriesAttribute.cs ================================================ using KHSave.Attributes; namespace KHSave.LibDDD.Attributes { public class MementoEntriesAttribute : InfoAttribute { public MementoEntriesAttribute(string info) : base(info) { } } } ================================================ FILE: KHSave.LibDDD/Attributes/TrainingToysAttribute.cs ================================================ using KHSave.Attributes; namespace KHSave.LibDDD.Attributes { public class TrainingToysAttribute : InfoAttribute { public TrainingToysAttribute(string info) : base(info) { } } public class TrainingFoodAttribute : InfoAttribute { public TrainingFoodAttribute(string info) : base(info) { } } } ================================================ FILE: KHSave.LibDDD/Attributes/TrainingToysFoodAttribute.cs ================================================ using KHSave.Attributes; namespace KHSave.LibDDD.Attributes { public class TrainingToysFoodAttribute : InfoAttribute { public TrainingToysFoodAttribute(string info) : base(info) { } } } ================================================ FILE: KHSave.LibDDD/Constants.cs ================================================ namespace KHSave.LibDDD { class Constants { public const uint MagicCode3DSEu = 0x444d4f53; public const byte Version3DS = 0x10; public const byte VersionPS4 = 0x14; } } ================================================ FILE: KHSave.LibDDD/ISaveKhDDD.cs ================================================ using KHSave.LibDDD.Model; using KHSave.LibDDD.Types; using System; using System.IO; namespace KHSave.LibDDD { public interface ISaveKhDDD { uint GameTimeLoading { get; set; } DifficultyType DifficultyLoading { get; set; } uint SoraXpLoading { get; set; } DifficultyType Difficulty { get; set; } WorldType WorldId { get; set; } byte RoomId { get; set; } byte SpawnId { get; set; } uint GameTime { get; set; } DreamEater[] DreamEaters { get; set; } CommandEntry[] CommandInventory { get; } UInt32 SoraXp { get; set; } ushort SoraDroplets { get; set; } byte SoraLv { get; set; } UInt32 RikuXp { get; set; } ushort RikuDroplets { get; set; } byte RikuLv { get; set; } EquipmentType SoraKeyblade { get; set; } EquipmentType RikuKeyblade { get; set; } UInt32 Munny { get; set; } IDeck[] SoraDecks { get; } IDeck[] RikuDecks { get; } void Write(Stream stream); } } ================================================ FILE: KHSave.LibDDD/KHSave.LibDDD.csproj ================================================  net6 ================================================ FILE: KHSave.LibDDD/Model/CommandEntry.cs ================================================ using KHSave.LibDDD.Types; using Xe.BinaryMapper; namespace KHSave.LibDDD.Model { public class CommandEntry { [Data] public EquipmentType Id { get; set; } [Data] public byte SoraEquipFlags { get; set; } [Data] public byte RikuEquipFlags { get; set; } [Data] public byte Unk04 { get; set; } [Data] public byte Amount { get; set; } [Data] public ushort Padding06 { get; set; } } } ================================================ FILE: KHSave.LibDDD/Model/Deck.cs ================================================ using Xe.BinaryMapper; namespace KHSave.LibDDD.Model { public class Deck : IDeck { [Data(Count = 220)] public byte[] Unk01 { get; set; } [Data(Count = 16)] public byte[] Name { get; set; } [Data(Count = 24)] public byte[] Unk02 { get; set; } } } ================================================ FILE: KHSave.LibDDD/Model/DeckPS4.cs ================================================ using Xe.BinaryMapper; namespace KHSave.LibDDD.Model { public class DeckPS4 : IDeck { [Data(Count = 220)] public byte[] Unk01 { get; set; } [Data(Count = 43)] public byte[] Name { get; set; } [Data(Count = 55)] public byte[] Unk02 { get; set; } } } ================================================ FILE: KHSave.LibDDD/Model/DreamEater.cs ================================================ using KHSave.LibDDD.Types; using Xe.BinaryMapper; namespace KHSave.LibDDD.Model { public class DreamEater { [Data] public DreamEaterType DreamEaterType { get; set; } [Data(Count = 5)] public byte[] Unk01 { get; set; } [Data(Count = 22)] public byte[] Name { get; set; } [Data(Count = 33)] public byte[] Unk02 { get; set; } [Data] public byte Attack { get; set; } [Data] public byte Magic { get; set; } [Data] public byte Defence { get; set; } [Data(Count = 192)] public byte[] Unk03 { get; set; } } } ================================================ FILE: KHSave.LibDDD/Model/IDeck.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace KHSave.LibDDD.Model { public interface IDeck { public byte[] Unk01 { get; set; } public byte[] Name { get; set; } public byte[] Unk02 { get; set; } } } ================================================ FILE: KHSave.LibDDD/SaveKhDDD.3DS.cs ================================================ using KHSave.LibDDD.Types; using System; using System.IO; using Xe.BinaryMapper; using KHSave.LibDDD.Model; // A thank you to Hollow_Dragonite, darkmanwe4ever, Bweep, delebile and all the other people who found parts of the values // https://gbatemp.net/threads/kingdom-hearts-3d-dream-drop-distance-save-hack.398408/ namespace KHSave.LibDDD { public partial class SaveKhDDD { public class SaveKhDDD3DS : ISaveKhDDD { [Data(0, 0x163FF)] public byte[] Data { get; set; } [Data(0x10)] public uint GameTimeLoading { get; set; } [Data(0x20)] public DifficultyType DifficultyLoading { get; set; } [Data(0x28)] public uint SoraXpLoading { get; set; } [Data(0x92)] public DifficultyType Difficulty { get; set; } [Data(0x94)] public WorldType WorldId { get; set; } [Data] public byte RoomId { get; set; } [Data] public byte SpawnId { get; set; } [Data(0x98)] public uint GameTime { get; set; } //3 in party and 99 on the bank [Data(0x53a0, Count = 102)] public DreamEater[] DreamEaters { get; set; } [Data(0xBFE0, Count = 511)] public CommandEntry[] CommandInventory { get; set; } //SoraXp max value 786680? [Data(0xd1cc)] public uint SoraXp { get; set; } [Data(0xd1e0)] public ushort SoraDroplets { get; set; } [Data(0xd1f0)] public byte SoraLv { get; set; } //RikuXp max value 786680? [Data(0xd248)] public uint RikuXp { get; set; } [Data(0xd25c)] public ushort RikuDroplets { get; set; } [Data(0xd26c)] public byte RikuLv { get; set; } [Data(0xd2c4)] public EquipmentType SoraKeyblade { get; set; } [Data(0xd2c6)] public EquipmentType RikuKeyblade { get; set; } //Munny max value 999999? [Data(0xd2c8)] public uint Munny { get; set; } [Data(0xd2f0, Count = 3)] public Deck[] SoraDecks { get; set; } [Data(0xd5fc, Count = 3)] public Deck[] RikuDecks { get; set; } IDeck[] ISaveKhDDD.SoraDecks => Array.ConvertAll(SoraDecks, x => (IDeck)x); IDeck[] ISaveKhDDD.RikuDecks => Array.ConvertAll(SoraDecks, x => (IDeck)x); public void Write(Stream stream) => BinaryMapping.WriteObject(stream.FromBegin(), this); } } } ================================================ FILE: KHSave.LibDDD/SaveKhDDD.PS4.cs ================================================ using KHSave.LibDDD.Types; using System; using System.IO; using Xe.BinaryMapper; using KHSave.LibDDD.Model; namespace KHSave.LibDDD { public partial class SaveKhDDD { public class SaveKhDDDPS4 : ISaveKhDDD { [Data(0, 0x165FF)] public byte[] Data { get; set; } [Data(0x10)] public uint GameTimeLoading { get; set; } [Data(0x20)] public DifficultyType DifficultyLoading { get; set; } [Data(0x28)] public uint SoraXpLoading { get; set; } [Data(0x92)] public DifficultyType Difficulty { get; set; } [Data(0x94)] public WorldType WorldId { get; set; } [Data] public byte RoomId { get; set; } [Data] public byte SpawnId { get; set; } [Data(0x98)] public uint GameTime { get; set; } //3 in party and 99 on the bank [Data(0x53a0, Count = 102)] public DreamEater[] DreamEaters { get; set; } [Data(0xc004, Count = 511)] public CommandEntry[] CommandInventory { get; set; } //SoraXp max value 786680? [Data(0xd1f0)] public uint SoraXp { get; set; } [Data(0xd204)] public ushort SoraDroplets { get; set; } [Data(0xd214)] public byte SoraLv { get; set; } //RikuXp max value 786680? [Data(0xd26c)] public uint RikuXp { get; set; } [Data(0xd280)] public ushort RikuDroplets { get; set; } [Data(0xd290)] public byte RikuLv { get; set; } [Data(0xd2e8)] public EquipmentType SoraKeyblade { get; set; } [Data(0xd2ea)] public EquipmentType RikuKeyblade { get; set; } //Munny max value 999999? [Data(0xd2ec)] public uint Munny { get; set; } [Data(0xd314, Count = 3)] public DeckPS4[] SoraDecks { get; set; } [Data(0xd620, Count = 3)] public DeckPS4[] RikuDecks { get; set; } IDeck[] ISaveKhDDD.SoraDecks => Array.ConvertAll(SoraDecks, x => (IDeck)x); IDeck[] ISaveKhDDD.RikuDecks => Array.ConvertAll(SoraDecks, x => (IDeck)x); public void Write(Stream stream) => BinaryMapping.WriteObject(stream.FromBegin(), this); } } } ================================================ FILE: KHSave.LibDDD/SaveKhDDD.cs ================================================ using System; using System.IO; using Xe.BinaryMapper; namespace KHSave.LibDDD { public partial class SaveKhDDD { internal static IBinaryMapping Mapper; public static bool IsValid(Stream stream) { var prevPosition = stream.Position; var magicCode = new BinaryReader(stream).ReadUInt32(); stream.Position = prevPosition; switch (magicCode) { case Constants.MagicCode3DSEu: return true; default: return false; } } public static uint GetGameVersion(Stream stream) { if (!IsValid(stream)) return 0; var prevPosition = stream.Position; stream.Position = 0; var version = new BinaryReader(stream).ReadUInt32(); stream.Position = prevPosition; return version; } // File magic is the same for 3DS/PS4 version so check for save version number public static byte GetFileVersion(Stream stream) { var prevPosition = stream.Position; stream.Position = 4; var version = new BinaryReader(stream).ReadByte(); stream.Position = prevPosition; return version; } public static TSaveKhDDD Read(Stream stream) where TSaveKhDDD : class, ISaveKhDDD => BinaryMapping.ReadObject(stream.SetPosition(0)); public static ISaveKhDDD Read(Stream stream) { switch (GetGameVersion(stream)) { case Constants.MagicCode3DSEu: return ReadVersion(stream); default: throw new NotSupportedException("The version is not supported."); } } public static ISaveKhDDD ReadVersion(Stream stream) { switch (GetFileVersion(stream)) { case Constants.Version3DS: return Read(stream); case Constants.VersionPS4: return Read(stream); default: throw new NotSupportedException("The version is not supported."); } } public static void Write(Stream stream, TSaveKhDDD save) where TSaveKhDDD : class, ISaveKhDDD { BinaryMapping.WriteObject(stream.FromBegin(), save); } } } ================================================ FILE: KHSave.LibDDD/Types/DifficultyType.cs ================================================ using KHSave.Attributes; namespace KHSave.LibDDD.Types { public enum DifficultyType : byte { [Info] Beginner, [Info] Standard, [Info] Proud, [Info] Critical } } ================================================ FILE: KHSave.LibDDD/Types/DreamEaterType.cs ================================================ using KHSave.Attributes; namespace KHSave.LibDDD.Types { public enum DreamEaterType : byte { [Info("Not Used")] NotUsed, [Info("Meow Wow")] MeomWow, [Info("Tama Sheep")] TamaSheep, [Info("Yoggy Ram")] YoggyRam, [Info("Komory Bat")] KomoryBat, [Info("Pricklemane")] Pricklemane, [Info("Hebby Repp")] HebbyRepp, [Info("Sir Kyroo")] SirKyroo, [Info("Toximander")] Toximander, [Info("Fin Fatale")] FinFatale, [Info("Tatsu Steed")] TatsuSteed, [Info("Necho Cat")] NechoCat, [Info("Thunderaffe")] Thunderaffe, [Info("Kooma Panda")] KoomaPanda, [Info("Pegaslick")] Pegaslick, [Info("Iceguin Ace")] IceguinAce, [Info("Peepsta Hoo")] PeepstaHoo, [Info("Escarglow")] Escarglow, [Info("KO Kabuto")] KOKabuto, [Info("Wheeflower")] Wheeflower, [Info("Ghostabocky")] Ghostabocky, [Info("Zolephant")] Zolephant, [Info("Juggle Pup")] JugglePup, [Info("Halbird")] Halbird, [Info("Staggerceps")] Staggerceps, [Info("Fishbone")] Fishbone, [Info("Flowbermeow")] Flowbermeow, [Info("Cyber Yog")] CyberYog, [Info("Chef Kyroo")] ChefKyroo, [Info("Lord Kyroo")] LordKyroo, [Info("Tatsu Blaze")] TatsuBlaze, [Info("Electricorn")] Electricorn, [Info("Woeflower")] Woeflower, [Info("Jestabocky")] Jestabocky, [Info("Eaglider")] Eaglider, [Info("Me Me Bunny")] MemeBunny, [Info("Drill Sye")] DrillSye, [Info("Tyranto Rex")] TyrantoRex, [Info("Majik Lapin")] MajikLapin, [Info("Cera Terror")] CeraTerror, [Info("Skelterwild")] Skelterwild, [Info("Ducky Goose")] DuckyGoose, [Info("Aura Lion")] AuraLion, [Info("Ryu Dragon")] RyuDragon, [Info("Drak Quack")] DrakQuack, [Info("Keeba Tiger")] KeebaTiger, [Info("Meowjesty")] Meowjesty, [Info("Sudo Neku")] SudoNeku, [Info("Frootz Cat")] FrootzCat, [Info("Ursa Circus")] UrsaCircus, [Info("Kab Kannon")] KabKannon, [Info("R & R Seal")] RRSeal, [Info("Spellican [Disabled, becomes R & R Seal.]")] Spellican, [Info("Commantis [Disabled, becomes R & R Seal.]")] Commantis, [Info("Char Clawbster [Disabled, becomes R & R Seal.]")] CharClawbster, [Info("Chill Clawbster [Disabled, becomes R & R Seal.]")] ChillClawbster, [Info("Hockomonkey [Disabled, becomes R & R Seal.]")] Hockomonkey, [Info("Holey Moley [Disabled, becomes R & R Seal.]")] HoleyMoley, [Info("Wargoyle [Disabled, becomes R & R Seal.]")] Wargoyle, [Info("Brawlamari [Disabled, becomes R & R Seal.]")] Brawlamari, [Info("Queen Buzzerfly [Disabled, becomes R & R Seal.]")] QueenBuzzerfly, [Info("Anti Black Coat [Disabled, becomes R & R Seal.]")] AntiBlackCoat } } ================================================ FILE: KHSave.LibDDD/Types/EquipmentType.cs ================================================ using KHSave.Attributes; using KHSave.LibDDD.Attributes; using System; // thank you HOLLOW_DRAGONITE for this list of ID's you made my life a lot easier namespace KHSave.LibDDD.Types { internal enum ItemType { CommandDeck = 0 << 8, Keyblade = 2 << 8, Recipe = 3 << 8, KeyItem = 4 << 8, Glossary = 5 << 8, DreamPiece = 6 << 8, TrainingFood = 7 << 8, TrainingToy = 8 << 8, Memento = 9 << 8, } public enum EquipmentType : short { [Info("Empty")] Empty, [Movement("Jump")] Jump, [Movement("High Jump")] HighJump, [Movement("Dodge Roll")] DodgeRoll, [Movement("Slide Roll")] SlideRoll, [Movement("Dark Roll")] DarkRoll, [Movement("Air Slide")] AirSlide, [Movement("Sonic Impact")] SonicImpact, [Movement("Double Impact")] DoubleImpact, [Movement("Glide")] Glide, [Movement("Superglide")] Superglide, [Movement("Shadow Slide")] ShadowSlide, [Movement("Doubleflight")] Doubleflight, [Defense("Block")] Block, [Defense("Wake-Up Block")] WakeUpBlock, [Defense("Link Block")] LinkBlock, [Defense("Sliding Block")] SlidingBlock, [Defense("Dark Barrier")] DarkBarrier, [Reprisal("Counter Rush")] CounterRush, [Reprisal("Counter Aura")] CounterAura, [Reprisal("Shadow Strike")] ShadowStrike, [Reprisal("Payback Raid")] PaybackRaid, [Reprisal("Payback Blast")] PaybackBlast, [Reprisal("Aerial Recovery")] AerialRecovery, [Reprisal("Steep Climb")] SteepClimb, [Reprisal("Rapid Descent")] RapidDescent, [Reprisal("Sliding Sidewinder")] SlidingSidewinder, [Reprisal("Sliding Crescent")] SlidingCrescent, [FlowMotion("Wall Kick")] WallKick, [FlowMotion("Pole Spin")] PoleSpin, [FlowMotion("Pole Swing")] PoleSwing, [FlowMotion("Rail Slide")] RailSlide, [FlowMotion("Superslide")] Superslide, [FlowMotion("Superjump")] Superjump, [FlowMotion("Kick Dive")] KickDive, [FlowMotion("Buzz Saw")] BuzzSaw, [FlowMotion("Blow-Off")] BlowOff, [FlowMotion("Wheel Rush")] WheelRush, [FlowMotion("Sliding Dive")] SlidingDive, [FlowMotion("Shock Dive")] ShockDive, [Attack("Quick Blitz")] QuickBlitz, [Attack("Blizzard Edge")] BlizzardEdge, [Attack("Dark Break")] DarkBreak, [Attack("Slot Edge")] SlotEdge, [Attack("Blitz")] Blitz, [Attack("Meteor Crash")] MeteorCrash, [Attack("Spark Dive")] SparkDive, [Attack("Poison Dive")] PoisonDive, [Attack("Drain Dive")] DrainDive, [Attack("Sliding Dash")] SlidingDash, [Attack("Thunder Dash")] ThunderDash, [Attack("Sonic Blade")] SonicBlade, [Attack("Dark Aura")] DarkAura, [Attack("Zantetsuken")] Zantetsuken, [Attack("Strike Raid")] StrikeRaid, [Attack("Spark Raid")] SparkRaid, [Attack("Circle Raid")] CircleRaid, [Attack("Aerial Slam")] AerialSlam, [Attack("Ars Arcanum")] ArsArcanum, [Attack("Dark Splicer")] DarkSplicer, [Attack("Gravity Strike")] GravityStrike, [Attack("Confusing Strike")] ConfusingStrike, [Attack("Tornado Strike")] TornadoStrike, [Attack("Prism Windmill")] PrismWindmill, [Attack("Timestorm")] Timestorm, [Attack("Fire Windmill")] FireWindmill, [Attack("Icebreaker")] Icebreaker, [Attack("Shadowbreaker")] Shadowbreaker, [Attack("Magnet Spiral")] MagnetSpiral, [Attack("Salvation")] Salvation, [Attack("Limit Storm")] LimitStorm, [Attack("Collision Magnet")] CollisionMagnet, [Attack("Sacrifice")] Sacrifice, [Attack("Break Time")] BreakTime, [Magic("Fire")] Fire, [Magic("Fira")] Fira, [Magic("Firaga")] Firaga, [Magic("Dark Firaga")] DarkFiraga, [Magic("Firaga Burst")] FiragaBurst, [Magic("Mega Flare")] MegaFlare, [Magic("Blizzard")] Blizzard, [Magic("Blizzara")] Blizzara, [Magic("Blizzaga")] Blizzaga, [Magic("Icicle Splitter")] IcicleSplitter, [Magic("Deep Freeze")] DeepFreeze, [Magic("Ice Barrage")] IceBarrage, [Magic("Thunder")] Thunder, [Magic("Thundara")] Thundara, [Magic("Thundaga")] Thundaga, [Magic("Triple Plasma")] TriplePlasma, [Magic("Cure")] Cure, [Magic("Cura")] Cura, [Magic("Curaga")] Curaga, [Magic("Esuna")] Esuna, [Magic("Zero Gravity")] ZeroGravity, [Magic("Zero Gravira")] ZeroGravira, [Magic("Zero Graviga")] ZeroGraviga, [Magic("Zero Graviza")] ZeroGraviza, [Magic("Balloon")] Balloon, [Magic("Balloonra")] Balloonra, [Magic("Balloonga")] Balloonga, [Magic("Spark")] Spark, [Magic("Sparkra")] Sparkra, [Magic("Sparkga")] Sparkga, [Magic("Faith")] Faith, [Magic("Tornado")] Tornado, [Magic("Meteor")] Meteor, [Magic("Mini")] Mini, [Magic("Blackout")] Blackout, [Magic("Time Bomb")] TimeBomb, [Magic("Confuse")] Confuse, [Magic("Bind")] Bind, [Magic("Poison")] Poison, [Magic("Slow")] Slow, [Magic("Sleep")] Sleep, [Magic("Sleepra")] Sleepra, [Magic("Sleepga")] Sleepga, [Magic("Stop")] Stop, [Magic("Vanish")] Vanish, [Consumable("Potion")] Potion, [Consumable("Hi-Potion")] HiPotion, [Consumable("Mega-Potion")] MegaPotion, [Consumable("Drop-Me-Not")] DropMeNot, [Consumable("Drop-Me-Never")] DropMeNever, [Consumable("Panacea")] Panacea, [Consumable("Elixir")] Elixir, [Consumable("Megalixir")] Megalixir, [Consumable("Dream Candy")] DreamCandy, [Info("Protect")] Protect, [Info("Shell")] Shell, [Info("Regen")] Regen, [Info("Haste")] Haste, [Info("Drain")] Drain, [Info("Combo Assist")] ComboAssist, [Info("Auto-Life")] AutoLife, [Info("Spirit Roar")] SpiritRoar, [Info("DUMMY")] DUMMY, [Info("Attack")] Attack, [Info("Save")] Save, [Info("Talk")] Talk, [Info("Open")] Open, [Info("Examine")] Examine, [Info("Shop")] Shop, [Info("Rescue")] Rescue, [Info("Finish")] Finish, [Info("Nightmare Clash")] NightmareClash, [Info("Finish")] Finish146, [Info("DUMMY")] DUMMY147, [Info("Link Portal")] LinkPortal, [Info("Meow Wounce")] MeowWounce, [Info("Berserker Bronco")] BerserkerBronco, [Info("Unwind")] Unwind, [Info("Debug Jump")] DebugJump, [Info("? ? ?")] Unnamed153, [Info("Meow Wounce")] MeowWounce154, [Info("Roll Call")] RollCall, [Info("Whirling Bronco")] WhirlingBronco, [Info("Fly-By Knight")] FlyByKnight, [Info("Hammer Throw")] HammerThrow, [Info("Flame Thrower")] FlameThrower, [Info("Decussation")] Decussation, [Info("Poison Dash")] PoisonDash, [Info("Water Blaster")] WaterBlaster, [Info("Bubble Blaster")] BubbleBlaster, [Info("Paw Groove")] PawGroove, [Info("Equestrian Raid")] EquestrianRaid, [Info("Swing Fling")] SwingFling, [Info("Equestrian Raid")] EquestrianRaid167, [Info("Belly Raid")] BellyRaid, [Info("Fly-By Knight")] FlyByKnight169, [Info("Roll Call")] RollCall170, [Info("Target Shot")] TargetShot, [Info("Cure Sun")] CureSun, [Info("Vacuum Ghost")] VacuumGhost, [Info("Berserker Bronco")] BerserkerBronco174, [Info("Lucky Dice")] LuckyDice, [Info("Fly-By Knight")] FlyByKnight176, [Info("Trap Shot")] TrapShot, [Info("Water Blaster")] WaterBlaster178, [Info("Meow Wounce")] MeowWounce179, [Info("Whirling Bronco")] WhirlingBronco180, [Info("Decussation")] Decussation181, [Info("Decussation")] Decussation182, [Info("Fire Blaster")] FireBlaster, [Info("Equestrian Raid")] EquestrianRaid184, [Info("Poison Rain")] PoisonRain, [Info("Vacuum Ghost")] VacuumGhost186, [Info("Fly-By Knight")] FlyByKnight187, [Info("Swing Fling")] SwingFling188, [Info("Roll Call")] RollCall189, [Info("Flame Raid")] FlameRaid, [Info("Swing Fling")] SwingFling191, [Info("Roll Call")] RollCall192, [Info("Ice Raid")] IceRaid, [Info("Tail Groove")] TailGroove, [Info("Aura Raid")] AuraRaid, [Info("Decussation")] Decussation196, [Info("Tail Groove")] TailGroove197, [Info("Aura Raid")] AuraRaid198, [Info("Meow Wounce")] MeowWounce199, [Info("Flame Thrower")] FlameThrower200, [Info("Paw Groove")] PawGroove201, [Info("Swing Fling")] SwingFling202, [Info("Target Shot")] TargetShot203, [Info("Lucky Dice")] LuckyDice204, [Info("Ragnarok")] Ragnarok, [Info("Prism Light")] PrismLight, [Info("Chaos Snake")] ChaosSnake, [Info("Trinity Limit")] TrinityLimit, [Info("Ice Wave")] IceWave, [Info("Whomperstomp")] Whomperstomp, [Info("Comet")] Comet, [Info("Unison Rush")] UnisonRush, [Info("Dream Shot")] DreamShot, [Info("Shadowblade")] Shadowblade, [Info("? ? ?")] Unknown215, [Info("Shining Hammer")] ShiningHammer, [Info("Fire Raid")] FireRaid, [Info("Wavesurfer")] Wavesurfer, [Info("Thunderstorm")] Thunderstorm, [Info("Darkest Fears")] DarkestFears, [Info("Rising Wing")] RisingWing, [Info("Bladecharge")] Bladecharge, [Info("Ghost Drive")] GhostDrive, [Info("Tron")] Tron, [Info("Code Break")] CodeBreak, [Info("Wonder Comic")] WonderComic, [Info("Bubble Burst")] BubbleBurst, [Info("Melody Catcher")] MelodyCatcher, [Info("Slingshot")] Slingshot, [Info("Faithline")] Faithline, [Info("Nightmare's End")] NightmareEnd, [Info("Mirage Split")] MirageSplit, [Info("? ? ?")] Unnamed232, [Info("? ? ?")] Unnamed233, [Info("? ? ?")] Unnamed234, [AbilityStats("HP Boost")] HPBoost, [AbilityStats("Fire Boost")] FireBoost, [AbilityStats("Blizzard Boost")] BlizzardBoost, [AbilityStats("Thunder Boost")] ThunderBoost, [AbilityStats("Water Boost")] WaterBoost, [AbilityStats("Cure Boost")] CureBoost, [AbilityStats("Item Boost")] ItemBoost, [AbilityStats("Attack Haste")] AttackHaste, [AbilityStats("Magic Haste")] MagicHaste, [AbilityStats("Attack Boost")] AttackBoost, [AbilityStats("Magic Boost")] MagicBoost, [AbilityStats("Defense Boost")] DefenseBoost, [AbilityStats("Fire Screen")] FireScreen, [AbilityStats("Blizzard Screen")] BlizzardScreen, [AbilityStats("Thunder Screen")] ThunderScreen, [AbilityStats("Water Screen")] WaterScreen, [AbilityStats("Dark Screen")] DarkScreen, [AbilityStats("Light Screen")] LightScreen, [AbilityStats("Mini Block")] MiniBlock, [AbilityStats("Blindness Block")] BlindnessBlock, [AbilityStats("Confusion Block")] ConfusionBlock, [AbilityStats("Bind Block")] BindBlock, [AbilityStats("Poison Block")] PoisonBlock, [AbilityStats("Slow Block")] SlowBlock, [AbilityStats("Sleep Block")] SleepBlock, [AbilityStats("Stop Block")] StopBlock, [AbilityStats("Reload Boost")] ReloadBoost, [AbilityStats("Defender")] Defender, [AbilitySupport("Combo Plus")] ComboPlus, [AbilitySupport("Air Combo Plus")] AirComboPlus, [AbilitySupport("Combo Master")] ComboMaster, [AbilitySupport("EXP Boost")] EXPBoost, [AbilitySupport("EXP Walker")] EXPWalker, [AbilitySupport("EXP Zero")] EXPZero, [AbilitySupport("Damage Syphon")] DamageSyphon, [AbilitySupport("Second Chance")] SecondChance, [AbilitySupport("Once More")] OnceMore, [AbilitySupport("Scan")] Scan, [AbilitySupport("Leaf Bracer")] LeafBracer, [AbilitySupport("Treasure Magnet")] TreasureMagnet, [AbilitySpirits("Link Critical")] LinkCritical, [AbilitySpirits("Support Boost")] SupportBoost, [AbilitySpirits("Waking Dream")] WakingDream, [Info("? ? ?")] Unknown279, [Info("? ? ?")] Unknown280, [Info("Link Accelerator")] LinkAccelerator, [Info("Flowmotion Turbo")] FlowmotionTurbo, [Info("Drop Decelerator")] DropDecelerator, [Info("Attack Gain")] AttackGain, [Info("Magic Gain")] MagicGain, [Info("Defense Gain")] DefenseGain, [Info("Affinity Gain")] AffinityGain, [Info("Spirit Auto-Life")] SpiritAutoLife, [Info("Ordinary Day")] OrdinaryDay, [Info("HP Showers")] HPShowers, [Info("Munnystorm")] Munnystorm, [Info("Treasure Front")] TreasureFront, [Info("Bargain Flurry")] BargainFlurry, [Info("Risky Winds")] RiskyWinds, [Info("Overcast")] Overcast, [Info("? ? ?")] Unknown296, [Info("HP Prize S")] HPPrizeS, [Info("HP Prize L")] HPPrizeL, [Info("Munny Prize S")] MunnyPrizeS, [Info("Munny Prize M")] MunnyPrizeM, [Info("Munny Prize L")] MunnyPrizeL, [Info("Droplet S")] DropletS, [Info("Droplet L")] DropletL, [Info("Prize Box")] PrizeBox, [Info("Rare Prize Box")] RarePrizeBox, [Info("PRIZE_ID_Dream1")] PRIZE_ID_Dream1, [Info("PRIZE_ID_Dream2")] PRIZE_ID_Dream2, [Info("PRIZE_ID_Dream3")] PRIZE_ID_Dream3, [Info("PRIZE_ID_Dream4")] PRIZE_ID_Dream4, [Info("PRIZE_ID_Dream5")] PRIZE_ID_Dream5, [Info("PRIZE_ID_Dream6")] PRIZE_ID_Dream6, [Info("PRIZE_ID_Dream7")] PRIZE_ID_Dream7, [Info("PRIZE_ID_Dream8")] PRIZE_ID_Dream8, [Info("PRIZE_ID_Dream9")] PRIZE_ID_Dream9, [Info("PRIZE_ID_Dream10")] PRIZE_ID_Dream10, [Info("PRIZE_ID_Dream11")] PRIZE_ID_Dream11, [Info("PRIZE_ID_Dream12")] PRIZE_ID_Dream12, [Info("PRIZE_ID_Dream13")] PRIZE_ID_Dream13, [Info("PRIZE_ID_Dream14")] PRIZE_ID_Dream14, [Info("PRIZE_ID_Dream15")] PRIZE_ID_Dream15, [Info("PRIZE_ID_Dream16")] PRIZE_ID_Dream16, [Info("PRIZE_ID_Dream17")] PRIZE_ID_Dream17, [Info("PRIZE_ID_Dream18")] PRIZE_ID_Dream18, [Info("PRIZE_ID_Dream19")] PRIZE_ID_Dream19, [Info("PRIZE_ID_Dream20")] PRIZE_ID_Dream20, [Info("PRIZE_ID_Dream21")] PRIZE_ID_Dream21, [Info("PRIZE_ID_Dream22")] PRIZE_ID_Dream22, [Info("PRIZE_ID_Dream23")] PRIZE_ID_Dream23, [Info("PRIZE_ID_Dream24")] PRIZE_ID_Dream24, [Info("PRIZE_ID_Dream25")] PRIZE_ID_Dream25, [Info("PRIZE_ID_Dream26")] PRIZE_ID_Dream26, [Info("PRIZE_ID_Dream27")] PRIZE_ID_Dream27, [Info("PRIZE_ID_Dream28")] PRIZE_ID_Dream28, [Info("PRIZE_ID_Dream29")] PRIZE_ID_Dream29, [Info("PRIZE_ID_Dream30")] PRIZE_ID_Dream30, [Info("PRIZE_ID_Dream31")] PRIZE_ID_Dream31, [Info("PRIZE_ID_Dream32")] PRIZE_ID_Dream32, [Info("PRIZE_ID_Dream33")] PRIZE_ID_Dream33, [Info("PRIZE_ID_Dream34")] PRIZE_ID_Dream34, [Info("PRIZE_ID_Dream35")] PRIZE_ID_Dream35, [Info("PRIZE_ID_Dream36")] PRIZE_ID_Dream36, [Info("PRIZE_ID_Dream37")] PRIZE_ID_Dream37, //[Info("? ? ?")] ???, //[Info("? ? ?")] ???, //[Magic("Fire")] Fire, //[Magic("Fira")] Fira, //[Magic("Firaga")] Firaga, //[Magic("Dark Firaga")] DarkFiraga, //[Magic("Firaga Burst")] FiragaBurst, //[Magic("Mega Flare")] MegaFlare, //[Magic("Blizzard")] Blizzard, //[Magic("Blizzara")] Blizzara, //[Magic("Blizzaga")] Blizzaga, //[Magic("Icicle Splitter")] IcicleSplitter, //[Magic("Deep Freeze")] DeepFreeze, //[Magic("Ice Barrage")] IceBarrage, //[Magic("Thunder")] Thunder, //[Magic("Thundara")] Thundara, //[Magic("Thundaga")] Thundaga, //[Magic("Triple Plasma")] TriplePlasma, //[Magic("Cure")] Cure, //[Magic("Cura")] Cura, //[Magic("Curaga")] Curaga, //[Magic("Esuna")] Esuna, //[Magic("Zero Gravity")] ZeroGravity, //[Magic("Zero Gravira")] ZeroGravira, //[Magic("Zero Graviga")] ZeroGraviga, //[Magic("Zero Graviza")] ZeroGraviza, //[Magic("Balloon")] Balloon, //[Magic("Balloonra")] Balloonra, //[Magic("Balloonga")] Balloonga, //[Magic("Spark")] Spark, //[Magic("Sparkra")] Sparkra, //[Magic("Sparkga")] Sparkga, //[Magic("Faith")] Faith, //[Magic("Tornado")] Tornado, //[Magic("Meteor")] Meteor, //[Magic("Mini")] Mini, //[Magic("Blackout")] Blackout, //[Magic("Time Bomb")] TimeBomb, //[Magic("Confuse")] Confuse, //[Magic("Bind")] Bind, //[Magic("Poison")] Poison, //[Magic("Slow")] Slow, //[Magic("Sleep")] Sleep, //[Magic("Sleepra")] Sleepra, //[Magic("Sleepga")] Sleepga, //[Magic("Stop")] Stop, //[Magic("Vanish")] Vanish, //[Consumable("Potion")] Potion, //[Consumable("Hi-Potion")] HiPotion, //[Consumable("Mega-Potion")] MegaPotion, //[Consumable("Wakey Waker")] WakeyWaker, //[Consumable("Wakey Wham")] WakeyWham, //[Consumable("Panacea")] Panacea, //[Consumable("Elixir")] Elixir, //[Consumable("Megalixir")] Megalixir, //[Consumable("Dream Candy")] DreamCandy, //[Info("Protect")] Protect, //[Info("Shell")] Shell, //[Info("Regen")] Regen, //[Info("Haste")] Haste, //[Info("Drain")] Drain, //[Info("Combo Assist")] ComboAssist, //[Info("Auto-Life")] AutoLife, //[Info("Spirit Roar")] SpiritRoar, //[Info("Faith")] Faith, //[Info("Dark Mist")] DarkMist, //[Consumable("Elixir")] Elixir, //[Magic("Ice Zone")] IceZone, //[Magic("Thundaga")] Thundaga, //[Magic("Mega Flare")] MegaFlare, //[Magic("Waterga")] Waterga, //[Magic("Magnet Freeze")] MagnetFreeze, //[Magic("Laser Spin")] LaserSpin, //[Magic("Mega Flare")] MegaFlare, // xx02 - keyblades [Keyblade("Kingdom Key")] KingdomKey = ItemType.Keyblade, [Keyblade("Skull Noise (Sora)")] SkullNoiseS, [Keyblade("Guardian Bell (Sora)")] GuardianBellS, [Keyblade("Ferris Gear")] FerrisGear, [Keyblade("Dual Disc (Sora)")] DualDiscS, [Keyblade("All for One (Sora)")] AllForOneS, [Keyblade("Counterpoint (Sora)")] CounterpointS, [Keyblade("Sweet Dreams (Sora)")] SweetDreamsS, [Keyblade("Ultima Weapon (Sora)")] UltimaWeaponS, [Keyblade("Unbound (Sora)")] UnboundS, [Keyblade("Divewing (Sora)")] DiveWingS, [Keyblade("End of Pain (Sora)")] EndOfPainS, [Keyblade("Knockout Punch (Sora)")] KnockoutPunchS, [Keyblade("UNNAMED (RS-READY LARGE KEYBLADE ROSE HELP)")] UnnamedK1, [Keyblade("UNNAMED (RS-READY LARGE KEYBLADE ASSEMBLY HELP)")] UnnamedK2, [Keyblade("SORA UNUSED KBLADE (SORA UNUSED KEYBLADE 3 HELP)")] UnusedK1, [Keyblade("Soul Eater")] SoulEater, [Keyblade("Skull Noise (Riku)")] SkullNoiseR, [Keyblade("Guardian Bell (Riku)")] GuardianBellR, [Keyblade("Ocean's Rage")] OceansRage, [Keyblade("Dual Disc (Riku)")] DualDiscR, [Keyblade("All for One (Riku)")] AllForOneR, [Keyblade("Counterpoint (Riku)")] CounterpointR, [Keyblade("Sweet Dreams (Riku)")] SweetDreamsR, [Keyblade("Ultima Weapon (Riku)")] UltimaWeaponR, [Keyblade("Unbound (Riku)")] UnboundR, [Keyblade("Divewing (Riku)")] DiveWingR, [Keyblade("End of Pain (Riku)")] EndOfPainR, [Keyblade("Knockout Punch (Riku)")] KnockoutPunchR, [Keyblade("UNNAMED")] Unused1D02, [Keyblade("UNNAMED")] Unused1E02, [Keyblade("Way to the Dawn")] WayToTheDawn, [Recipe("Meow Wow Recipe")] MeowWowRecipe = ItemType.Recipe, [Recipe("Tama Sheep Recipe")] TamaSheepRecipe, [Recipe("Yoggy Ram Recipe")] YoggyRamRecipe, [Recipe("Komory Bat Recipe")] KomoryBatRecipe, [Recipe("Pricklemane Recipe")] PricklemaneRecipe, [Recipe("Hebby Repp Recipe")] HebbyReppRecipe, [Recipe("Sir Kyroo Recipe")] SirKyrooRecipe, [Recipe("Toximander Recipe")] ToximanderRecipe, [Recipe("Fin Fatale Recipe")] FinFataleRecipe, [Recipe("Tatsu Steed Recipe")] TatsuSteedRecipe, [Recipe("Necho Cat Recipe")] NechoCatRecipe, [Recipe("Thunderaffe Recipe")] ThunderaffeRecipe, [Recipe("Kooma Panda Recipe")] KoomaPandaRecipe, [Recipe("Pegaslick Recipe")] PegaslickRecipe, [Recipe("Iceguin Ace Recipe")] IceguinAceRecipe, [Recipe("Peepsta Hoo Recipe")] PeepstaHooRecipe, [Recipe("Escarglow Recipe")] EscarglowRecipe, [Recipe("KO Kabuto Recipe")] KOKabutoRecipe, [Recipe("Wheeflower Recipe")] WheeflowerRecipe, [Recipe("Ghostabocky Recipe")] GhostabockyRecipe, [Recipe("Zolephant Recipe")] ZolephantRecipe, [Recipe("Juggle Pup Recipe")] JugglePupRecipe, [Recipe("Halbird Recipe")] HalbirdRecipe, [Recipe("Staggerceps Recipe")] StaggercepsRecipe, [Recipe("Fishbon")] Fishbon, [Recipe("Unused Recipe")] UnusedRecipe, [Recipe("Flowbermeow Recipe")] FlowbermeowRecipe, [Recipe("Cyber Yog Recipe")] CyberYogRecipe, [Recipe("Chef Kyroo Recipe")] ChefKyrooRecipe, [Recipe("Lord Kyroo Recipe")] LordKyrooRecipe, [Recipe("Tatsu Blaze Recipe")] TatsuBlazeRecipe, [Recipe("Electricorn Recipe")] ElectricornRecipe, [Recipe("Woeflower Recipe")] WoeflowerRecipe, [Recipe("Jestabocky Recipe")] JestabockyRecipe, [Recipe("Eaglider Recipe")] EagliderRecipe, [Recipe("Me Me Bunny Recipe")] MeMeBunnyRecipe, [Recipe("Drill Sye Recipe")] DrillSyeRecipe, [Recipe("Tyranto Rex Recipe")] TyrantoRexRecipe, [Recipe("Majik Lapin Recipe")] MajikLapinRecipe, [Recipe("Cera Terror Recipe")] CeraTerrorRecipe, [Recipe("Skelterwild Recipe")] SkelterwildRecipe, [Recipe("Ducky Goose Recipe")] DuckyGooseRecipe, [Recipe("Aura Lion Recipe")] AuraLionRecipe, [Recipe("Ryu Dragon Recipe")] RyuDragonRecipe, [Recipe("Drak Quack Recipe")] DrakQuackRecipe, [Recipe("Keeba Tiger Recipe")] KeebaTigerRecipe, [Recipe("Meowjesty Recipe")] MeowjestyRecipe, [Recipe("Sudo Neku Recipe")] SudoNekuRecipe, [Recipe("Frootz Cat Recipe")] FrootzCatRecipe, [Recipe("Ursa Circus Recipe")] UrsaCircusRecipe, [Recipe("Kab Kannon Recipe")] KabKannonRecipe, [Recipe("R & R Seal Recipe")] RAndRSealRecipe, [Recipe("Catanuki Recipe")] CatanukiRecipe, [Recipe("Beatalike Recipe")] BeatalikeRecipe, [Recipe("Tubguin Ace Recipe")] TubguinAceRecipe, [Recipe("RECIPE 55")] RECIPE_55, [Recipe("RECIPE 56")] RECIPE_56, [Recipe("RECIPE 57")] RECIPE_57, [Recipe("RECIPE 58")] RECIPE_58, [Recipe("RECIPE 59")] RECIPE_59, [Recipe("RECIPE 60")] RECIPE_60, [KeyItem("Stage Gadget")] StageGadget = ItemType.KeyItem, [KeyItem("KEY ITEM 2")] KEY_ITEM_2, [KeyItem("KEY ITEM 3")] KEY_ITEM_3, [KeyItem("KEY ITEM 4")] KEY_ITEM_4, [KeyItem("KEY ITEM 5")] KEY_ITEM_5, [KeyItem("KEY ITEM 6")] KEY_ITEM_6, [KeyItem("KEY ITEM 7")] KEY_ITEM_7, [KeyItem("KEY ITEM 8")] KEY_ITEM_8, [KeyItem("KEY ITEM 9")] KEY_ITEM_9, [KeyItem("KEY ITEM 10")] KEY_ITEM_10, [KeyItem("KEY ITEM 11")] KEY_ITEM_11, [KeyItem("KEY ITEM 12")] KEY_ITEM_12, [KeyItem("KEY ITEM 13")] KEY_ITEM_13, [KeyItem("KEY ITEM 14")] KEY_ITEM_14, [KeyItem("KEY ITEM 15")] KEY_ITEM_15, [KeyItem("KEY ITEM 16")] KEY_ITEM_16, [KeyItem("KEY ITEM 17")] KEY_ITEM_17, [KeyItem("KEY ITEM 18")] KEY_ITEM_18, [KeyItem("KEY ITEM 19")] KEY_ITEM_19, [KeyItem("KEY ITEM 20")] KEY_ITEM_20, [KeyItem("KEY ITEM 21")] KEY_ITEM_21, [KeyItem("KEY ITEM 22")] KEY_ITEM_22, [KeyItem("KEY ITEM 23")] KEY_ITEM_23, [KeyItem("KEY ITEM 24")] KEY_ITEM_24, [KeyItem("KEY ITEM 25")] KEY_ITEM_25, [KeyItem("KEY ITEM 26")] KEY_ITEM_26, [KeyItem("KEY ITEM 27")] KEY_ITEM_27, [KeyItem("KEY ITEM 28")] KEY_ITEM_28, [KeyItem("KEY ITEM 29")] KEY_ITEM_29, [KeyItem("KEY ITEM 30")] KEY_ITEM_30, [KeyItem("KEY ITEM 31")] KEY_ITEM_31, [KeyItem("KEY ITEM 32")] KEY_ITEM_32, [KeyItem("KEY ITEM 33")] KEY_ITEM_33, [KeyItem("KEY ITEM 34")] KEY_ITEM_34, [KeyItem("KEY ITEM 35")] KEY_ITEM_35, [KeyItem("KEY ITEM 36")] KEY_ITEM_36, [KeyItem("KEY ITEM 37")] KEY_ITEM_37, [KeyItem("KEY ITEM 38")] KEY_ITEM_38, [KeyItem("KEY ITEM 39")] KEY_ITEM_39, [KeyItem("KEY ITEM 40")] KEY_ITEM_40, [Glossary("Keyblades")] Keyblades = ItemType.Glossary, [Glossary("Keyblade Masters")] KeybladeMasters, [Glossary("Master Xehanort")] MasterXehanort, [Glossary("The Keyblade War")] TheKeybladeWar, [Glossary("Heartless")] Heartless, [Glossary("Kingdom Hearts")] KingdomHearts, [Glossary("Nobodies")] Nobodies, [Glossary("Organization ")] Organization, [Glossary("Seven Princesses")] SevenPrincesses, [Glossary("Recusant's Sigil")] RecusantSigil, [Glossary("χ-blade")] XBlade, [Glossary("Hearts Tied to Sora")] HeartsTiedtoSora, [Glossary("Secret Message")] SecretMessage, [Glossary("GLOSSARY 14")] GLOSSARY_14, [Glossary("GLOSSARY 15")] GLOSSARY_15, [Glossary("GLOSSARY 16")] GLOSSARY_16, [Glossary("GLOSSARY 17")] GLOSSARY_17, [Glossary("GLOSSARY 18")] GLOSSARY_18, [Glossary("GLOSSARY 19")] GLOSSARY_19, [Glossary("GLOSSARY 20")] GLOSSARY_20, [DreamPieces("Fleeting Figment")] FleetingFigment = ItemType.DreamPiece, [DreamPieces("Fleeting Fancy")] FleetingFancy, [DreamPieces("Fleeting Fantasy")] FleetingFantasy, [DreamPieces("Lofty Figment")] LoftyFigment, [DreamPieces("Lofty Fancy")] LoftyFancy, [DreamPieces("Lofty Fantasy")] LoftyFantasy, [DreamPieces("Rampant Figment")] RampantFigment, [DreamPieces("Rampant Fancy")] RampantFancy, [DreamPieces("Rampant Fantasy")] RampantFantasy, [DreamPieces("Dulcet Figment")] DulcetFigment, [DreamPieces("Dulcet Fancy")] DulcetFancy, [DreamPieces("Dulcet Fantasy")] DulcetFantasy, [DreamPieces("Malleable Fantasy")] MalleableFantasy, [DreamPieces("Prickly Fantasy")] PricklyFantasy, [DreamPieces("Wild Fantasy")] WildFantasy, [DreamPieces("Epic Fantasy")] EpicFantasy, [DreamPieces("Charming Fantasy")] CharmingFantasy, [DreamPieces("Brilliant Fantasy")] BrilliantFantasy, [DreamPieces("Intrepid Figment")] IntrepidFigment, [DreamPieces("Intrepid Fancy")] IntrepidFancy, [DreamPieces("Intrepid Fantasy")] IntrepidFantasy, [DreamPieces("Savage Fantasy")] SavageFantasy, [DreamPieces("Noble Figment")] NobleFigment, [DreamPieces("Noble Fancy")] NobleFancy, [DreamPieces("Noble Fantasy")] NobleFantasy, [DreamPieces("Grim Figment")] GrimFigment, [DreamPieces("Grim Fancy")] GrimFancy, [DreamPieces("Grim Fantasy")] GrimFantasy, [DreamPieces("Vibrant Figment")] VibrantFigment, [DreamPieces("Vibrant Fancy")] VibrantFancy, [DreamPieces("Vibrant Fantasy")] VibrantFantasy, [DreamPieces("Troubling Figment")] TroublingFigment, [DreamPieces("Troubling Fancy")] TroublingFancy, [DreamPieces("Troubling Fantasy")] TroublingFantasy, [DreamPieces("Wondrous Figment")] WondrousFigment, [DreamPieces("Wondrous Fancy")] WondrousFancy, [DreamPieces("Wondrous Fantasy")] WondrousFantasy, [TrainingFood("Confetti Candy")] ConfettiCandy = ItemType.TrainingFood, [TrainingFood("Shield Cookie")] ShieldCookie, [TrainingFood("Block-It Chocolate")] BlockItChocolate, [TrainingFood("Ice Dream Cone")] IceDreamCone, [TrainingFood("Royal Cake")] RoyalCake, [TrainingFood("Confetti Candy 2")] ConfettiCandy2, [TrainingFood("Shield Cookie 2")] ShieldCookie2, [TrainingFood("Block-It Chocolate 2")] BlockItChocolate2, [TrainingFood("Ice Dream Cone 2")] IceDreamCone2, [TrainingFood("Confetti Candy 3")] ConfettiCandy3, [TrainingFood("Shield Cookie 3")] ShieldCookie3, [TrainingFood("Block-It Chocolate 3")] BlockItChocolate3, [TrainingFood("Ice Dream Cone 3")] IceDreamCone3, [TrainingFood("FOOD ITEM 16")] FOOD_ITEM_16, [TrainingFood("FOOD ITEM 17")] FOOD_ITEM_17, [TrainingFood("FOOD ITEM 18")] FOOD_ITEM_18, [TrainingFood("FOOD ITEM 19")] FOOD_ITEM_19, [TrainingFood("FOOD ITEM 20")] FOOD_ITEM_20, [TrainingToys("Balloon")] BalloonToy = ItemType.TrainingToy, [TrainingToys("Candy Goggles")] CandyGoggles, [TrainingToys("Water Barrel")] WaterBarrel, [TrainingToys("Paint Gun: Red")] PaintGun_Red, [TrainingToys("Paint Gun: Blue")] PaintGun_Blue, [TrainingToys("Paint Gun: Green")] PaintGun_Green, [TrainingToys("Paint Gun: Yellow")] PaintGun_Yellow, [TrainingToys("Paint Gun: White")] PaintGun_White, [TrainingToys("Paint Gun: Black")] PaintGun_Black, [TrainingToys("Paint Gun: Purple")] PaintGun_Purple, [TrainingToys("Paint Gun: Sky Blue")] PaintGun_SkyBlue, [TrainingToys("TOY 14")] TOY_14, [TrainingToys("TOY 15")] TOY_15, [TrainingToys("TOY 16")] TOY_16, [TrainingToys("TOY 17")] TOY_17, [TrainingToys("TOY 18")] TOY_18, [TrainingToys("TOY 19")] TOY_19, [TrainingToys("TOY 20")] TOY_20, // xx09 - Memento Entries } } ================================================ FILE: KHSave.LibDDD/Types/WorldType.cs ================================================ using KHSave.Attributes; namespace KHSave.LibDDD.Types { public enum WorldType : byte { [World("ex", "ex")] WorldEx, [World("de", "Destiny Island")] DestinyIsland, [World("yt", "Mysterious Tower")] MysteriousTower, [World("tw", "Traverse Town")] TraverseTown, [World("tm", "Country of the Musketeers")] CountryOfTheMusketeers, [World("fa", "Symphony of Sorcery")] SymphonyOfSorcery, [World("pi", "Pranksters Paradise")] PrankstersParadise, [World("rg", "Radiant Garden")] RadiantGarden, [World("nd", "La Cite des Cloches")] LaCiteDesCloches, [World("tl", "The Grid")] TheGrid, [World("eh", "The World That Never Was")] TheWorldThatNeverWas, [World("wm", "World Map")] WorldMap, [World("di", "Spirit Space")] SpiritSpace, [World("zz", "World ZZ")] WorldZz, [World("unk1", "Traverse Town (Revisited)")] TraverseTownRevisited, [World("unk2", "Ending")] Ending, } } ================================================ FILE: KHSave.LibFf7Remake/Chunks/Chunk.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using System.IO; using Xe.BinaryMapper; namespace KHSave.LibFf7Remake.Chunks { public class ChunkHeader { [Data] public byte Unknown00 { get; set; } [Data] public byte Unknown01 { get; set; } [Data] public byte Unknown02 { get; set; } [Data] public byte Unused03 { get; set; } [Data] public int NextChunkOffset { get; set; } [Data] public int Unused08 { get; set; } [Data] public int Unused0c { get; set; } public bool IsTail => NextChunkOffset == 0 && Unknown00 == 4 && Unknown01 == 0 && Unknown02 == 1; } public class ChunkContent { [Data(Count = 0x10)] public string MagicCode { get; set; } [Data] public int Unknown10 { get; set; } [Data] public int ChunkLength { get; set; } public byte[] RawData { get; set; } } public class Chunk { public enum Type { RESD = 0x0004ffe8, LOSD = 0x660e8, TAIL = 0 } public const int HeaderLength = 0x10; public const int ContentHeaderLength = 0x18; public const int TotalHeaderLength = HeaderLength + ContentHeaderLength; public ChunkHeader Header { get; } public ChunkContent Content { get; } public bool IsLastChunk => Header.IsTail; public bool IsEmpty => Content.ChunkLength == 0; public Chunk(ChunkHeader header, ChunkContent content) { Header = header; Content = content; } public static Chunk Read(Stream stream, Type type) { var header = BinaryMapping.ReadObject(stream); if (header.IsTail) return new Chunk(header, null); var content = BinaryMapping.ReadObject(stream); var expectedSize = (int)type; content.RawData = stream.ReadBytes(expectedSize); if (header.NextChunkOffset > 0) stream.Position = header.NextChunkOffset; return new Chunk(header, content); } public void Write(Stream stream) { BinaryMapping.WriteObject(stream, Header); if (!IsLastChunk) { BinaryMapping.WriteObject(stream, Content); stream.Write(Content.RawData, 0, Content.RawData.Length); } } public override string ToString() { var h = $"H({Header.Unknown00:X02}, {Header.Unknown01:X02}, {Header.Unknown02:X02})"; if (IsEmpty) return $"{h} EMPTY"; if (!IsLastChunk) return $"{h} C({Content.MagicCode}, {Content.Unknown10:X}"; else return $"{h} END"; } } } ================================================ FILE: KHSave.LibFf7Remake/Chunks/ChunkChapter.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.LibFf7Remake.Models; using KHSave.LibFf7Remake.Types; using System.Linq; using Xe.BinaryMapper; namespace KHSave.LibFf7Remake.Chunks { public class ChunkChapter { private const int Length = 0x660E8; private const int MaxNpcEntryCount = 0x800; private const int MaxObjectEntryCount = 0x100; private const int MaxEnemyEntryCount = 0x400; [Data(Count = Length)] public byte[] Data { get; set; } [Data(0)] public byte IsChapterInPlay { get; set; } [Data(1)] public byte ChapterId { get; set; } [Data(3)] public byte PlayableCharacter { get; set; } [Data(4, Count = SaveFf7Remake.CharacterCount)] public CharacterStatusType[] CharacterStatus { get; set; } [Data(0xc, Count = SaveFf7Remake.CharacterCount)] public Vector3f[] Positions { get; set; } [Data(0x6c, Count = SaveFf7Remake.CharacterCount)] public Vector3f[] Rotations { get; set; } [Data(0x1a2)] public ushort Bgm { get; set; } [Data(0xcbd8, Count = MaxNpcEntryCount, Stride = 0x20)] public ChapterObject[] Npc { get; set; } [Data(0x2abd8, Count = MaxObjectEntryCount, Stride = 0x20)] public ChapterObject[] Objects { get; set; } [Data(0x2cbd8, Count = MaxEnemyEntryCount, Stride = 0x20)] public ChapterObject[] Enemies { get; set; } public ChunkChapter() { Data = new byte[Length]; CharacterStatus = new CharacterStatusType[SaveFf7Remake.CharacterCount]; Positions = Enumerable.Range(0, SaveFf7Remake.CharacterCount).Select(x => new Vector3f()).ToArray(); Rotations = Enumerable.Range(0, SaveFf7Remake.CharacterCount).Select(x => new Vector3f()).ToArray(); Npc = Enumerable.Range(0, MaxNpcEntryCount).Select(x => new ChapterObject()).ToArray(); Objects = Enumerable.Range(0, MaxObjectEntryCount).Select(x => new ChapterObject()).ToArray(); Enemies = Enumerable.Range(0, MaxEnemyEntryCount).Select(x => new ChapterObject()).ToArray(); } } } ================================================ FILE: KHSave.LibFf7Remake/Chunks/ChunkCommon.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.LibFf7Remake.Models; using Xe.BinaryMapper; namespace KHSave.LibFf7Remake.Chunks { public class ChunkCommon { [Data(Count = 0x4FFE8)] public byte[] Data { get; set; } [Data(0)] public byte CurrentChapterChunk { get; set; } [Data] public byte Unk01 { get; set; } [Data] public byte Unk02 { get; set; } [Data] public byte Unk03 { get; set; } [Data] public byte Unk04 { get; set; } [Data] public byte Unk05 { get; set; } [Data(6)] public byte CurrentChapterId { get; set; } [Data(7)] public byte CurrentChapterChunk2 { get; set; } [Data(8, Count = SaveFf7Remake.CharacterCount, Stride = 0x40)] public Character[] Characters { get; set; } [Data(0x208, Count = SaveFf7Remake.CharacterCount, Stride = 0x10)] public CharacterStats[] CharactersStats { get; set; } [Data(0x288)] public int Unk288 { get; set; } [Data(0x28c)] public int Unk28c { get; set; } [Data(0x290)] public float Unk290 { get; set; } [Data(0x294)] public int Unk294 { get; set; } [Data(0x298, Count = SaveFf7Remake.CharacterCount)] public Vector3f[] Positions { get; set; } [Data(0x2F8, Count = SaveFf7Remake.CharacterCount)] public Vector3f[] Rotations { get; set; } [Data(0x358, Count = 0x340)] public byte[] Unk358 { get; set; } [Data(0x698, Count = SaveFf7Remake.CharacterCount, Stride = 0x10)] public UnknownStructure[] CharactersUnknown { get; set; } [Data(0x718, Count = 0x80, Stride = 0x10)] public UnknownStructure2[] UnknownStructure2 { get; set; } [Data(0xf18, Count = 0x80, Stride = 0x10)] public WeaponFound[] WeaponFound { get; set; } [Data(0x1718, Count = SaveFf7Remake.CharacterCount, Stride = 0x20)] public CharacterEquipment[] CharactersEquipment { get; set; } [Data(0x1818, Count = 1000, Stride = 0x20)] public Materia[] Materia { get; set; } // [...] [Data(0x34DA8, Count = 0x800, Stride = 0x18)] public Inventory[] Inventory { get; set; } [Data(0x40DA8, Count = SaveFf7Remake.CharacterCount, Stride = 0x30)] public MateriaEquipment[] CharacterMateria { get; set; } [Data(0x40F28, Count = 0x78, Stride = 0x30)] public MateriaEquipment[] WeaponMateria { get; set; } // [425A8...] // 0x42862 Cloud Dress [Data(0x42F5C)] public byte PlayableCharacter { get; set; } [Data(0x42F5D)] public byte CurrentChapter { get; set; } [Data(0x44EAC, Count = SaveFf7Remake.CharacterCount)] public int[] SummonMateria { get; set; } [Data(0x46DC4, Count = 100, Stride = 0x30)] public UnknownStructure3[] UnknownStructure3 { get; set; } } } ================================================ FILE: KHSave.LibFf7Remake/KHSave.LibFf7Remake.csproj ================================================  net6 ================================================ FILE: KHSave.LibFf7Remake/Models/ChapterObject.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using Xe.BinaryMapper; namespace KHSave.LibFf7Remake.Models { public class ChapterObject { [Data] public int Index { get; set; } [Data] public float Unknown04 { get; set; } [Data] public int Unknown08 { get; set; } [Data] public float Unknown0c { get; set; } [Data] public float PositionX { get; set; } [Data] public float PositionY { get; set; } [Data] public float PositionZ { get; set; } [Data] public float Rotation { get; set; } public override string ToString() => $"{Index} {Unknown08} POS({PositionX:F0}, {PositionY:F0}, {PositionZ:F0} {Unknown0c:F0} A({Unknown04:F0}, {Rotation:F0})"; } } ================================================ FILE: KHSave.LibFf7Remake/Models/Character.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using Xe.BinaryMapper; namespace KHSave.LibFf7Remake.Models { public class Character { [Data] public byte Level { get; set; } [Data] public bool IsUnlocked { get; set; } [Data] public byte AtbBarCount { get; set; } [Data] public byte Speed { get; set; } [Data] public int Limit { get; set; } [Data] public int Unknown08 { get; set; } [Data] public int Unknown0c { get; set; } [Data] public int CurrentHp { get; set; } [Data] public int MaxHp { get; set; } [Data] public int CurrentMp { get; set; } [Data] public int MaxMp { get; set; } [Data] public int Experience { get; set; } [Data] public int Unknown14 { get; set; } [Data] public int Attack { get; set; } [Data] public int MagicAttack { get; set; } [Data] public int Defense { get; set; } [Data] public int MagicDefense { get; set; } [Data] public int Luck { get; set; } [Data] public int Unknown3c { get; set; } } } ================================================ FILE: KHSave.LibFf7Remake/Models/CharacterEquipment.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using Xe.BinaryMapper; namespace KHSave.LibFf7Remake.Models { public class CharacterEquipment { [Data] public int Weapon { get; set; } [Data] public int Armor { get; set; } [Data] public int Accessory { get; set; } [Data] public int Unused0c { get; set; } [Data] public int Unused10 { get; set; } [Data] public int Unused14 { get; set; } [Data] public int Unused18 { get; set; } [Data] public int Unused1c { get; set; } } } ================================================ FILE: KHSave.LibFf7Remake/Models/CharacterStats.cs ================================================ using Xe.BinaryMapper; namespace KHSave.LibFf7Remake.Models { public class CharacterStats { [Data] public int Strength { get; set; } [Data] public int Magic { get; set; } [Data] public int Vitality { get; set; } [Data] public int Spirit { get; set; } } } ================================================ FILE: KHSave.LibFf7Remake/Models/Inventory.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.LibFf7Remake.Types; using Xe.BinaryMapper; namespace KHSave.LibFf7Remake.Models { public class Inventory { [Data] public uint UnixTimestamp { get; set; } [Data] public int Unused04 { get; set; } [Data] public InventoryType Type { get; set; } [Data] public int Count { get; set; } [Data] public int Unknown10 { get; set; } [Data] public int Unused14 { get; set; } } } ================================================ FILE: KHSave.LibFf7Remake/Models/Materia.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.LibFf7Remake.Types; using Xe.BinaryMapper; namespace KHSave.LibFf7Remake.Models { public class Materia { [Data] public byte Level { get; set; } [Data] public byte Character { get; set; } [Data] public byte IsObtained { get; set; } [Data] public byte Unused03 { get; set; } [Data] public int ItemId { get; set; } [Data] public int AbilityPoint { get; set; } [Data] public int Unknown0c { get; set; } [Data] public uint UnixTimestamp { get; set; } [Data] public int Unknown14 { get; set; } [Data] public int Index { get; set; } [Data] public int Unknown1c { get; set; } } } ================================================ FILE: KHSave.LibFf7Remake/Models/MateriaEquipment.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using Xe.BinaryMapper; namespace KHSave.LibFf7Remake.Models { public class MateriaEquipment { [Data] public int Character { get; set; } [Data] public int ItemId { get; set; } [Data] public int Unknown08 { get; set; } [Data] public int Unknown0c { get; set; } [Data(0x10, Count = 8)] public int[] MateriaIndex { get; set; } } } ================================================ FILE: KHSave.LibFf7Remake/Models/UnknownStructure.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using Xe.BinaryMapper; namespace KHSave.LibFf7Remake.Models { public class UnknownStructure { [Data] public byte Unknown00 { get; set; } [Data] public byte Unknown01 { get; set; } [Data] public byte Unknown02 { get; set; } [Data] public byte Unknown03 { get; set; } [Data] public int Unknown04 { get; set; } [Data] public int Unknown08 { get; set; } [Data] public int KillCount { get; set; } } } ================================================ FILE: KHSave.LibFf7Remake/Models/UnknownStructure2.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using Xe.BinaryMapper; namespace KHSave.LibFf7Remake.Models { public class UnknownStructure2 { [Data] public byte Unknown00 { get; set; } [Data] public byte Unknown01 { get; set; } [Data] public byte Unknown02 { get; set; } [Data] public byte Unknown03 { get; set; } [Data] public int ItemId { get; set; } [Data] public int Unknown08 { get; set; } [Data] public int Unknown0c { get; set; } } } ================================================ FILE: KHSave.LibFf7Remake/Models/UnknownStructure3.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using Xe.BinaryMapper; namespace KHSave.LibFf7Remake.Models { public class UnknownStructure3 { [Data] public byte Character { get; set; } [Data] public byte Unknown01 { get; set; } [Data] public byte Unknown02 { get; set; } [Data] public byte Unused03 { get; set; } [Data] public int Unknown04 { get; set; } [Data] public int Unknown08 { get; set; } [Data] public int Unknown0c { get; set; } [Data] public int Unknown10 { get; set; } [Data(Count = 12)] public byte[] Characters { get; set; } [Data] public int Unused20 { get; set; } [Data] public int Unused24 { get; set; } [Data] public int Unused28 { get; set; } [Data] public int Unused2c { get; set; } } } ================================================ FILE: KHSave.LibFf7Remake/Models/Vector3f.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using Xe.BinaryMapper; namespace KHSave.LibFf7Remake.Models { public class Vector3f { [Data] public float X { get; set; } [Data] public float Y { get; set; } [Data] public float Z { get; set; } } } ================================================ FILE: KHSave.LibFf7Remake/Models/WeaponFound.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using Xe.BinaryMapper; namespace KHSave.LibFf7Remake.Models { public class WeaponFound { [Data] public int ItemId { get; set; } [Data] public int Index { get; set; } [Data] public int Unused08 { get; set; } [Data] public int Unused0c { get; set; } } } ================================================ FILE: KHSave.LibFf7Remake/SaveFf7Remake.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.LibFf7Remake.Chunks; using KHSave.LibFf7Remake.Models; using System; using System.Collections.Generic; using System.IO; using System.Linq; using Xe.BinaryMapper; namespace KHSave.LibFf7Remake { public class SaveFf7Remake { public const int ChapterCount = 18; public const int CharacterCount = 8; public const int Cloud = 0; public const int Barret = 1; public const int Tifa = 2; public const int Aerith = 3; public const int Red13 = 4; public const int Yuffie = 5; public const int Sonon = 6; public const int LastKnownCharacter = Sonon; public const int Unequipped = 9; private SaveFf7Remake(List chunks) { Chunks = chunks.ToArray(); Chapters = new ChunkChapter[21]; ReimportChunks(); } public SaveFf7Remake Write(Stream stream) { WriteChunk(ChunkCommon, 0); WriteChunk(Chapters[0], 1); WriteChunk(Chapters[1], 2); WriteChunk(Chapters[2], 3); WriteChunk(Chapters[3], 4); WriteChunk(Chapters[4], 5); WriteChunk(Chapters[5], 6); WriteChunk(Chapters[6], 7); WriteChunk(Chapters[7], 8); WriteChunk(Chapters[8], 9); WriteChunk(Chapters[9], 10); WriteChunk(Chapters[10], 11); WriteChunk(Chapters[11], 12); WriteChunk(Chapters[12], 13); WriteChunk(Chapters[13], 14); WriteChunk(Chapters[14], 15); WriteChunk(Chapters[15], 16); WriteChunk(Chapters[16], 17); WriteChunk(Chapters[17], 18); WriteChunk(ChunkCommonPrev, 19); WriteChunk(Chapters[18], 20); WriteChunk(Chapters[19], 21); WriteChunk(Chapters[20], 22); foreach (var chunk in Chunks) chunk.Write(stream); return this; } public ChunkCommon ChunkCommon { get; private set; } public ChunkCommon ChunkCommonPrev { get; private set; } public Chunk[] Chunks { get; private set; } public byte CurrentChapterChunk { get => ChunkCommon.CurrentChapterChunk; set => ChunkCommon.CurrentChapterChunk = value; } public byte CurrentChapterId { get => ChunkCommon.CurrentChapterId; set => ChunkCommon.CurrentChapterId = value; } public byte CurrentChapterChunk2 { get => ChunkCommon.CurrentChapterChunk2; set => ChunkCommon.CurrentChapterChunk2 = value; } public Character[] Characters { get => ChunkCommon.Characters; set => ChunkCommon.Characters = value; } public CharacterStats[] CharactersStats { get => ChunkCommon.CharactersStats; set => ChunkCommon.CharactersStats = value; } public CharacterEquipment[] CharactersEquipment { get => ChunkCommon.CharactersEquipment; set => ChunkCommon.CharactersEquipment = value; } public Materia[] Materia { get => ChunkCommon.Materia; set => ChunkCommon.Materia = value; } public Inventory[] Inventory { get => ChunkCommon.Inventory; set => ChunkCommon.Inventory = value; } public MateriaEquipment[] CharacterMateria { get => ChunkCommon.CharacterMateria; set => ChunkCommon.CharacterMateria = value; } public MateriaEquipment[] WeaponMateria { get => ChunkCommon.WeaponMateria; set => ChunkCommon.WeaponMateria = value; } public WeaponFound[] WeaponFound { get => ChunkCommon.WeaponFound; set => ChunkCommon.WeaponFound = value; } public byte PlayableCharacter { get => ChunkCommon.PlayableCharacter; set => ChunkCommon.PlayableCharacter = value; } public byte CurrentChapter { get => ChunkCommon.CurrentChapter; set => ChunkCommon.CurrentChapter = value; } public int[] SummonMateria { get => ChunkCommon.SummonMateria; set => ChunkCommon.SummonMateria = value; } public ChunkChapter[] Chapters { get; set; } public void ReimportChunks() { ChunkCommon = ReadChunk(0); Chapters[0] = ReadChunk(1); Chapters[1] = ReadChunk(2); Chapters[2] = ReadChunk(3); Chapters[3] = ReadChunk(4); Chapters[4] = ReadChunk(5); Chapters[5] = ReadChunk(6); Chapters[6] = ReadChunk(7); Chapters[7] = ReadChunk(8); Chapters[8] = ReadChunk(9); Chapters[9] = ReadChunk(10); Chapters[10] = ReadChunk(11); Chapters[11] = ReadChunk(12); Chapters[12] = ReadChunk(13); Chapters[13] = ReadChunk(14); Chapters[14] = ReadChunk(15); Chapters[15] = ReadChunk(16); Chapters[16] = ReadChunk(17); Chapters[17] = ReadChunk(18); ChunkCommonPrev = ReadChunk(19); Chapters[18] = ReadChunk(20); Chapters[19] = ReadChunk(21); Chapters[20] = ReadChunk(22); } private T ReadChunk(int index) where T : class { var chunk = Chunks[index]; if ((chunk?.Content?.RawData?.Length ?? 0) == 0) return default; using var stream = new MemoryStream(chunk.Content.RawData); return BinaryMapping.ReadObject(stream); } private void WriteChunk(T item, int index) where T : class { var chunk = Chunks[index]; using var stream = new MemoryStream(chunk.Content.RawData); BinaryMapping.WriteObject(stream, item); } public static bool IsValid(Stream stream) { stream.Position = 0x10; return stream.ReadByte() == 0x52 && stream.ReadByte() == 0x45 && stream.ReadByte() == 0x53 && stream.ReadByte() == 0x44 && stream.ReadByte() == 0x52 && stream.ReadByte() == 0x45 && stream.ReadByte() == 0x53 && stream.ReadByte() == 0x44 && stream.ReadByte() == 0x52 && stream.ReadByte() == 0x45 && stream.ReadByte() == 0x53 && stream.ReadByte() == 0x44 && stream.ReadByte() == 0x52 && stream.ReadByte() == 0x45 && stream.ReadByte() == 0x53 && stream.ReadByte() == 0x44; } private static readonly Chunk.Type[] ReadPattern = new[] { Chunk.Type.RESD, Chunk.Type.LOSD, Chunk.Type.LOSD, Chunk.Type.LOSD, Chunk.Type.LOSD, Chunk.Type.LOSD, Chunk.Type.LOSD, Chunk.Type.LOSD, Chunk.Type.LOSD, Chunk.Type.LOSD, Chunk.Type.LOSD, Chunk.Type.LOSD, Chunk.Type.LOSD, Chunk.Type.LOSD, Chunk.Type.LOSD, Chunk.Type.LOSD, Chunk.Type.LOSD, Chunk.Type.LOSD, Chunk.Type.LOSD, Chunk.Type.RESD, Chunk.Type.LOSD, Chunk.Type.LOSD, Chunk.Type.LOSD, Chunk.Type.TAIL, }; public static SaveFf7Remake Read(Stream stream) { stream.SetPosition(0); var chunks = ReadPattern .Select(x => Chunk.Read(stream, x)) .ToList(); return new SaveFf7Remake(chunks); } } } ================================================ FILE: KHSave.LibFf7Remake/Types/CharacterStatusType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.LibFf7Remake.Types { public enum CharacterStatusType : byte { [Info("Hidden")] Hidden, [Info("In party")] InParty, [Info("Out party")] OutParty, [Info("3")] Unk3, [Info("4")] Unk4, [Info("Guest")] Guest, } } ================================================ FILE: KHSave.LibFf7Remake/Types/CharacterType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.LibFf7Remake.Types { public enum CharacterType { [Info("Cloud")] Cloud = SaveFf7Remake.Cloud, [Info("Barret")] Barret = SaveFf7Remake.Barret, [Info("Tifa")] Tifa = SaveFf7Remake.Tifa, [Info("Aerith")] Aerith = SaveFf7Remake.Aerith, [Info("Red XIII")] Red13 = SaveFf7Remake.Red13, [Info("Yuffie")] Yuffie = SaveFf7Remake.Yuffie, [Info("Sonon")] Sonon = SaveFf7Remake.Sonon, [Info("7")] Unused7, [Info("8")] Unused8, [Info("None")] None = SaveFf7Remake.Unequipped, } } ================================================ FILE: KHSave.LibFf7Remake/Types/InventoryType.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using KHSave.Attributes; namespace KHSave.LibFf7Remake.Types { public enum InventoryType { [Info("Disabled")] Disabled = -1, [Info("Empty")] Empty = 0, [Consumable("Potion")] Potion = 1, [Consumable("Hi-Potion")] HiPotion, [Consumable] Ether, [Consumable("Turbo Ether")] TurboEther, [Consumable] Elixir, [Consumable("Phoenix Down")] PhoenixDown, [Consumable] Antidote, [Consumable("Echo Mist")] EchoMist, [Consumable] Adrenaline, [Consumable] Sedative, [Consumable] Remedy, [Consumable] Celeris, [Consumable] Grenade, [Consumable] Spiderweb, [Consumable("Hazardous Material")] HazardousMaterial, [Consumable("Big Bomber")] BigBomber, [Consumable("Motolov Cocktail")] MotolovCocktail, [Consumable("Orb of Gravity")] OrbOfGravity, [Consumable("Smelling Salts")] SmellingSalts, [Money("Gil")] Gil, [Consumable("Maiden's Kiss")] MaidensKiss, [Consumable("Mega-Potion")] MegaPotion, [Consumable("AI Programming Core")] AiProgrammingCore = 31, [Consumable("Fuzzy Wuzzy")] FuzzyWuzzy, [Consumable("Mr. Cuddlesworth")] MrCuddlesWorth, [KeyItem("Sector 5 Reactor Card")] Sector5ReactorCard = 100, [KeyItem("Tournament Entry Form")] TournamentEntryForm = 102, [KeyItem("Madam M's Endorsement")] MadamEndorsement, [KeyItem("Andrea Endorsement")] AndreaEndorsement, [KeyItem("Shinra ID Card")] ShinraIDCard = 111, [KeyItem("Grappling Gun")] GrapplingGun = 115, [KeyItem("Grappling Gun")] GrapplingGun2, [KeyItem("Key to the Sewers")] KeySewers, [Money("Moogle Medal")] MoogleMedal, [KeyItem("Sam’s Coin")] SamCoin, [KeyItem("Shinra Keycard (59th floor)")] ShinraKeycard59, [KeyItem("Hojo's Research Lab Keycard")] HojoResearchLabKeycard, [KeyItem("Combat Analyzer")] CombatAnalyzer, [KeyItem("Watch Security Key")] WatchSecurityKey, [KeyItem("Handmade Necklace")] HandmadeNecklace, [KeyItem("Behemoth Horn")] BehemothHorn = 126, [KeyItem("Medicinal Flowers")] MedicinalFlowers = 127, [KeyItem("Sam's Delivery Lifetime Pass")] SamDeliveryLifetimePass = 132, [KeyItem("Madam M’s Requests")] MadamMRequest = 139, [KeyItem("Sam's Requests")] SamRequest, [KeyItem("The Sauce")] TheSauce, [KeyItem("Medicine Voucher")] MedicineVoucher, [KeyItem("VIP Card")] VipCard, [KeyItem("Yellow Flower")] YellowFlower, [KeyItem("Graveyard Key")] GraveyardKey = 148, [KeyItem("Guardian Angel’s Calling Cards")] GuardianAngelCallingCards, [KeyItem("Vialabrew")] Vialabrew, [KeyItem("Crimson Spike")] CrimsonSpike, [KeyItem("Bottle of Antiemetic")] BottleOfAntiemetic, [KeyItem("Deodorizing Tablets")] DeodorizingTablets, [KeyItem("Packets of Antacid")] PacketsOfAntacid, [KeyItem("Moogle Membership Card")] MoogleMembershipCard, [KeyItem("Gysahl Greens")] GysahlGreens, [KeyItem("Doctor's List")] DoctorsList, [KeyItem("Moogle's Mortar")] MooglesMortar, [KeyItem("Map to the Hideout")] MapToTheHideout, [KeyItem("Ruby Tiara")] RubyTiara, [KeyItem("Diamond Tiara")] DiamondTiara, [KeyItem("Emerald Tiara")] EmeraldTiara, [KeyItem("Johnny's Wallet")] JohnnysWallet, [KeyItem("Corneo Vault Key")] CorneoVaultKey, [KeyItem("Shinra Keycard (60th floor)")] ShinraKeycard60, [KeyItem("Shinra Keycard (61st floor)")] ShinraKeycard61, [KeyItem("Shinra Keycard (63rd floor)")] ShinraKeycard63, [KeyItem("Shinra Executive Keycard (64th floor)")] ShinraExecutiveKeycard, [KeyItem("Letter from the Guardian Angel")] LetterFromTheGuardianAngel, [KeyItem("Andrea's Earrings")] AndreaEarrings, [KeyItem("Real Calling Card")] RealCallingCard, [KeyItem("Fake Calling Card")] FakeCallingCard, [KeyItem("Corneo Vault Note")] CorneoVaultNote, [WeaponCloud("Buster Sword")] BusterSword = 1001, [WeaponCloud("Iron Blade")] IronBlade, [WeaponCloud("Hardedge")] Hardedge, [WeaponCloud("Mythril Saber")] MythrilSaber, [WeaponCloud("Twin Stinger")] TwinStinger, [WeaponCloud("Nail Bat")] NailBat, [WeaponBarret("Gatilg Gun")] GatilgGun = 2001, [WeaponBarret("Light Machine Gun")] LightMachineGun, [WeaponBarret("Steel Pincers")] SteelPincers, [WeaponBarret("Big Bertha")] BigBertha, [WeaponBarret("EKG Cannon")] EkgCannon, [WeaponBarret("Wrecking Ball")] WreckingBall, [WeaponTifa("Leather Gloves")] LeatherGloves = 3001, [WeaponTifa("Metal Knuckles")] MetalKnuckles, [WeaponTifa("Feathered Gloves")] FeatheredGloves, [WeaponTifa("Mythril Claws")] MythrilClaws, [WeaponTifa("Purple Pain")] PurplePain, [WeaponTifa("Sonic Strikers")] SonicStrikers, [WeaponYuffie("4-Point Shuriken")] FourPointShuriken = 3423, [WeaponAerith("Guard Stick")] GuardStick = 4001, [WeaponAerith("Silver Staff")] SilverStaff, [WeaponAerith("Bladed Staff")] BladedStaff, [WeaponAerith("Mythril Rod")] MythrilRod, [WeaponAerith("Reinforced Staff")] ReinforcedStaff, [WeaponAerith("Arcane Scepter")] ArcaneScepter, [Weapon("Mythril Collar")] MythrilCollar = 5001, [WeaponSonon("Marshalist's Staff")] MarshalistStaff = 8181, [Armor("Bronze Bangle")] BronzeBangle = 9001, [Armor("Iron Bangle")] IronBangle, [Armor("Titanium Bangle")] TitaniumBangle, [Armor("Gothic Bangle")] GothicBangle, [Armor("Leather Bracer")] LeatherBracer = 9007, [Armor("Studder Bracer")] StudderBracer, [Armor("Heavy-Duty Bracer")] HeavyDutyBracer, [Armor("Mesmeric Bracelet")] MesmericBracelet = 9012, [Armor("Mythril Bracelet")] MythrilBracelet, [Armor("Sorcerer's Bracelet")] SorcererBracelet, [Accessory("Power Wristguards")] PowerWristguards = 9017, [Accessory("Bulletproof Vest")] BulletproofVest, [Accessory("Earrings")] Earrings, [Accessory("Talisman")] Talisman, [Accessory("Headband")] Headband, [Accessory("Star Pendant")] StarPendant, [Accessory("Fury Ring")] FuryRing, [Accessory("Revival Earrings")] RevivalEarrings, [Accessory("Whistlewind Scarf")] WhistlewindScarf, [Accessory("Mythical Amulet")] MythicalAmulet, [Accessory("Healing Carcanet")] HealingCarcanet, [Accessory("Clarity Pendant")] ClarityPendant, [Accessory("Transference Module")] TransferenceModule, [Accessory("Spectral Cogwheel")] SpectralCogwheel, [Accessory("Moogle's Amulet")] MoogleAmulet, [Accessory("Enfeeblement Ring")] EnfeeblementRing, [Accessory("Crescent Moon Charm")] CrescentMoonCharm, [Accessory("Champion Belt")] ChampionBelt, [Accessory("Protective Boots")] ProtectiveBoots, [Accessory("Circlet")] Circlet, [Accessory("Tarot Cards")] TarotCards, [Accessory("Otherworldly Crystal")] OtherworldlyCrystal, [Accessory("Salvation Badge")] SalvationBadge, [MagicMateria("Healing")] Healing = 10001, [MagicMateria("Cleansing")] Cleansing, [MagicMateria("Revival")] Revival, [MagicMateria("Fire")] Fire, [MagicMateria("Ice")] Ice, [MagicMateria("Lightning")] Lightning, [MagicMateria("Wind")] Wind, [MagicMateria("Poison")] Poison, [MagicMateria("Binding")] Binding, [MagicMateria("Time")] Time, [MagicMateria("Barrier")] Barrier, [MagicMateria("Subversion")] Subversion, [SupportMateria("Magnify")] Magnify = 11001, [SupportMateria("Elemental Materia")] Elemental, [SupportMateria("Warding Materia")] Warding, [SupportMateria("HP Absorption Materia")] HPAbsorption, [SupportMateria("MP Absorption Materia")] MPAbsorption, [SupportMateria("Synergy Materia")] Synergy, [SupportMateria("AP Up Materia")] APUp, [CommandMateria("Steal Materia")] Steal = 12001, [CommandMateria("Assess Materia")] Assess, [CommandMateria("Enemy Skill Materia")] EnemySkill, [CommandMateria("Chakra Materia")] Chakra, [CommandMateria("Prayer Materia")] Prayer, [CommandMateria("ATB Boost Materia")] ATBBoost, [CompleteMateria("HP Up Materia")] HPUp = 13001, [CompleteMateria("MP Up Materia")] MPUp, [CompleteMateria("Magic Up Materia")] MagicUp, [CompleteMateria("Luck Up Materia")] LuckUp, [CompleteMateria("Gil Up Materia")] GilUp, [CompleteMateria("EXP Up Materia")] EXPUp, [CompleteMateria("Item Master Materia")] ItemMaster, [CompleteMateria("ATB Stagger Materia")] ATBStagger, [CompleteMateria("First Strike Materia")] FirstStrike, [CompleteMateria("Steadfast Block Materia")] SteadfastBlock, [CompleteMateria("Skill Master Materia")] SkillMaster, [CompleteMateria("Deadly Dodge Materia")] DeadlyDodge, [CompleteMateria("Parry Materia")] Parry, [CompleteMateria("ATB Assist Materia")] ATBAssist, [CompleteMateria("Auto-Cure Materia")] AutoCure, [CompleteMateria("Provoke Materia")] Provoke, [CompleteMateria("Pedometer Materia")] Pedometer, [CompleteMateria("Refocus Materia")] Refocus, [SummonMateria("Chocobo & Moogle Materia")] ChocoboAndMoogle = 14001, [SummonMateria("Shiva Materia")] Shiva, [SummonMateria("Ifrit Materia")] Ifrit, [SummonMateria("Leviathan Materia")] Leviathan, [SummonMateria("Bahamut Materia")] Bahamut, [SummonMateria("Fat Chocobo Materia")] FatChocobo, [SummonMateria("Carbuncle Materia")] Carbuncle, [SummonMateria("Cactuar Materia")] Cactuar, [SummonMateria("Chocobo Chick Materia")] ChocoboChick, } } ================================================ FILE: KHSave.LibFf7Remake/Types/ItemCategory.cs ================================================ using KHSave.Attributes; namespace KHSave.LibFf7Remake.Types { public enum ItemCategory { [Info] Consumable, [Info] Gil, [Info] Key, [Unused] Unused03, [Unused] Unused04, [Unused] Unused05, [Unused] Unused06, [Unused] Unused07, [Info] Armor, [Info] Accessory, [Info] Track, } } ================================================ FILE: KHSave.LibPersona3/KHSave.LibPersona3.csproj ================================================  net6 true ================================================ FILE: KHSave.LibPersona3/Models/Character.cs ================================================ using KHSave.LibPersona5.Types; using Xe.BinaryMapper; namespace KHSave.LibPersona5.Models { public class Character { //[Data(Count = 0x2a8)] public byte[] Data { get; set; } //[Data(0)] public short Unknown00 { get; set; } //[Data] public short Unknown02 { get; set; } //[Data] public int Unknown04 { get; set; } //[Data] public int Unknown08 { get; set; } //[Data] public int Unknown0c { get; set; } //[Data] public int Unknown10 { get; set; } //[Data] public int CurrentHp { get; set; } //[Data] public int CurrentMp { get; set; } //[Data] public int Unknown1c { get; set; } //[Data(0x24)] public int Experience { get; set; } //[Data(0x4c, Count = 12, Stride = 0x30)] public Persona[] Persona { get; set; } //[Data] public Equipment MeleeWeapon { get; set; } //[Data] public Equipment Protector { get; set; } //[Data] public Equipment Accessory { get; set; } //[Data] public Equipment Outfit { get; set; } //[Data] public Equipment RangeWeapon { get; set; } } } ================================================ FILE: KHSave.LibPersona3/Models/Persona.cs ================================================ using KHSave.LibPersona3.Types; using Xe.BinaryMapper; namespace KHSave.LibPersona3.Models { public record Persona { [Data(Count = 0x34)] public byte[] Data { get; set; } [Data(0)] public short Flags { get; set; } [Data] public Demons Id { get; set; } [Data] public byte Level { get; set; } [Data] public byte Break { get; set; } [Data] public short Unk { get; set; } [Data] public int Experience { get; set; } [Data(Count = 8)] public Skill[] Skills { get; set; } [Data] public byte Strength { get; set; } [Data] public byte Magic { get; set; } [Data] public byte Endurance { get; set; } [Data] public byte Agility { get; set; } [Data] public byte Luck { get; set; } [Data] public byte Unk21 { get; set; } [Data] public short Unk22 { get; set; } [Data] public short Unk24 { get; set; } [Data] public short Unk26 { get; set; } [Data] public int Unk28 { get; set; } [Data] public int OverThanatos { get; set; } [Data] public int Unk30 { get; set; } public override string ToString() => $"{Id}: LV {Level}, St {Strength}, Ma {Magic}, En {Endurance}, Ag {Agility}, Lu {Luck}\nSkills: {string.Join(", ", Skills)}"; } } ================================================ FILE: KHSave.LibPersona3/Models/SocialLinks.cs ================================================ using Xe.BinaryMapper; namespace KHSave.LibPersona3.Models { public enum SocialLinkArcana { Fool, Magician, Priestess_Beta, Empress_Beta, Emperor, Hiero, Lovers, Priestess, Empress, Lovers_Beta, Strength, Justice, Chariot_TrackTeam, Chariot_KendoTeam, Chariot_SwimTeam, Justice_Beta, Hermit, Fortune_PhotographyClub, Fortune_ArtClub, Fortune_MusicClub, Strenght_Beta, Hanged, Death, Temper, Devil, Tower, Star, Moon, Sun, Judgement, } public record SocialLinks { public record Unk { [Data] public int Unk00 { get; set; } [Data] public int Unk04 { get; set; } } private const int SL_Num = 30; [Data] public short Flag { get; set; } // word_859574 (flags, max 0xFF) [Data(Count = SL_Num)] public byte[] Ranks { get; set; } // byte_859576 (min 0, max 10) [Data(Count = SL_Num)] public int[] RankData { get; set; } // //dword_859594[30] ? [Data(Count = SL_Num)] public byte[] dword_859594 { get; set; } //byte_85960C[30] (min 0, max 9) [Data(Count = SL_Num)] public short[] word_85962A { get; set; } //word_85962A[30] (min 0, max 360) [Data(Count = SL_Num)] public short[] word_859666 { get; set; } //word_859666[30] (min 0, max 360) [Data(Count = SL_Num)] public short[] word_8596A2 { get; set; } //word_8596A2[30] (min 0, max 360) [Data(Count = 0x7A)] public byte[] unused_16A { get; set; } [Data] public int dword_859758 { get; set; } // dword_859758 [Data] public int unused_1E8 { get; set; } [Data] public byte byte_859760 { get; set; } // byte_859760 (always 0?) [Data] public byte unused_1ED { get; set; } [Data] public short unused_1EE { get; set; } [Data] public int unused_1F0 { get; set; } [Data] public int dword_859768 { get; set; } //dword_859768 (either 0 or 1) [Data(Count = 0x10)] public byte[] unused_1F8 { get; set; } [Data] public byte byte_85977C { get; set; } //byte_85977C (never set?) [Data] public byte unused_209 { get; set; } [Data] public short unused_20A { get; set; } [Data] public byte byte_859790 { get; set; } //byte_859790 (always 1?) [Data] public byte unused_20D { get; set; } [Data] public short word_859792 { get; set; } //word_859792 (always 0?) [Data] public int word_859794 { get; set; } //word_859794 (copied from word_859A9C?) [Data(Count = 9)] public int[] dword_859798 { get; set; } //dword_859798[9] (?) [Data(Count = 7, Stride = 8)] public Unk[] byte_8597BC { get; set; } //byte_8597BC[7][8] [Data(Count = 0x40)] public int[] dword_8597F4 { get; set; } //dword_8597F4[0x40] [Data(Count = 0x40)] public int[] dword_8598F4 { get; set; } //dword_8598F4[0x40] [Data(Count = 0x40)] public byte[] byte_8599F4 { get; set; } //byte_8599F4[0x40] [Data(Count = SL_Num)] public byte[] byte_859A34 { get; set; } //byte_859A34[30] [Data(Count = SL_Num)] public byte[] byte_859A52 { get; set; } //byte_859A52[30] [Data(Count = 8)] public byte[] byte_859A70 { get; set; } //byte_859A70[8] } } ================================================ FILE: KHSave.LibPersona3/Models/SocialLinksPortable.cs ================================================ using Xe.BinaryMapper; namespace KHSave.LibPersona3.Models { public enum SocialLinkArcanaPortable { Empty, Fool, Magician, Emperor, Hiero, Lovers, Priestess, Empress, Aeon, Hermit_HealthCommittee, Hermit_Librarian, Chariot_Volleyball, Chariot_Tennis, Strength, Fortune_LoveRoute, Fortune, Justice_LoveRoute, Justice, Hanged, Death, Temper, Devil, Tower, Star_LoveRoute, Star, Sun, Judgement, Moon, } public record SocialLinksPortable { public record Entry { [Data] public short Arcana { get; set; } [Data] public short Rank { get; set; } [Data] public short Points { get; set; } [Data] public short Unk06 { get; set; } [Data] public short Unk08 { get; set; } [Data] public short Unk0A { get; set; } [Data] public short Unk0C { get; set; } [Data] public short Unk0E { get; set; } } public record RankHistoryEntry { [Data] public byte Month { get; set; } [Data] public byte Day { get; set; } } public record RankHistory { [Data(Count = 11)] public RankHistoryEntry[] History { get; set; } } [Data] public int Unk08 { get; set; } [Data] public int Unk0C { get; set; } [Data(Count = 0x1C, Stride = 0x10)] public Entry[] Entries { get; set; } [Data(Count = 0x1C, Stride = 0x16)] public RankHistory[] History { get; set; } } } ================================================ FILE: KHSave.LibPersona3/Presets.cs ================================================ using System.Collections.Generic; namespace KHSave.LibPersona3 { public static partial class Presets { public record Field { public int Zone { get; set; } public int Room { get; set; } public GameVersion Game { get; set; } public string Description { get; set; } } private static Field FieldVF_(int category, int map, string description) => new() { Zone = category, Room = map, Description = description, Game = GameVersion.Vanilla | GameVersion.FES }; private static Field FieldVFP(int category, int map, string description) => new() { Zone = category, Room = map, Description = description, Game = GameVersion.Vanilla | GameVersion.FES | GameVersion.Portable }; private static Field Field_F_(int category, int map, string description) => new() { Zone = category, Room = map, Description = description, Game = GameVersion.FES }; private static Field Field_FP(int category, int map, string description) => new() { Zone = category, Room = map, Description = description, Game = GameVersion.FES | GameVersion.Portable }; private static Field Field__P(int category, int map, string description) => new() { Zone = category, Room = map, Description = description, Game = GameVersion.Portable }; public static List Fields = new() { FieldVFP( 0, 0, ""), FieldVF_( 0, 2, ""), FieldVF_( 1, 0, ""), FieldVFP( 1, 1, "City map"), Field_F_( 4, 2, ""), Field_F_( 4, 3, ""), Field_F_( 4, 4, ""), Field_F_( 4, 5, ""), Field_F_( 4, 6, ""), Field_F_( 4, 7, ""), Field_F_( 4, 10, ""), Field_F_( 5, 1, ""), Field_F_( 5, 2, ""), Field_F_( 5, 3, ""), FieldVFP( 6, 1, "Gekkoukan High, 1st Floor, Main Lobby"), FieldVFP( 6, 2, "Gekkoukan High, School Entranceway"), FieldVFP( 6, 3, "Gekkoukan High, Classroom 2-F"), FieldVFP( 6, 4, "Gekkoukan High, 2nd Floor, Hallway"), FieldVFP( 6, 5, "Gekkoukan High, Rooftop"), FieldVFP( 6, 6, "Gekkoukan High, School Entranceway"), FieldVFP( 6, 7, "Gekkoukan High, 1st Floor, Near Faculty"), FieldVFP( 6, 8, "Gekkoukan High, Faculty Office"), FieldVFP( 6, 9, "Gekkoukan High, (TODO)"), FieldVFP( 6, 10, "Gekkoukan High, Library"), FieldVFP( 6, 11, "Gekkoukan High, 1st Floor, Near Clubs"), FieldVFP( 6, 12, "Gekkoukan High, Fashion club"), FieldVFP( 6, 13, "Gekkoukan High, Photography club"), FieldVFP( 6, 14, "Gekkoukan High, Music club"), FieldVFP( 6, 15, "Gekkoukan High, Art club"), FieldVFP( 6, 16, "Gekkoukan High, 1st Floor, Corridor"), FieldVFP( 6, 17, "Gekkoukan High, Track Team"), FieldVFP( 6, 18, "Gekkoukan High, Swim Team"), FieldVFP( 6, 19, "Gekkoukan High, Kendo Team"), FieldVFP( 6, 20, "Gekkoukan High, 1st Floor, Hallway (team)"), FieldVFP( 6, 21, "Gekkoukan High, Speech room"), FieldVFP( 6, 22, "Gekkoukan High, Classroom unused"), FieldVFP( 6, 23, "Gekkoukan High, (TODO)"), Field__P( 6, 24, "Gekkoukan High, (TODO)"), Field__P( 6, 25, "Gekkoukan High, (TODO)"), Field__P( 6, 26, "Gekkoukan High, (TODO)"), FieldVFP( 7, 1, "Dorm, Your Room"), FieldVFP( 7, 2, "Dorm, 1st Floor, Lounge"), FieldVFP( 7, 3, "Dorm, 2nd Floor, Hallway"), FieldVFP( 7, 4, "Dorm, 3rd Floor, Hallway"), FieldVFP( 7, 5, "Dorm, 4th Floor, Hallway"), FieldVFP( 7, 6, "Dorm, Command Room"), FieldVFP( 7, 7, "Dorm, 5th Floor, Hallway"), FieldVFP( 7, 8, "Dorm, Terrace"), FieldVFP( 7, 9, "Dorm, Entrance"), FieldVFP( 7, 10, "Dorm, Aegis Room"), FieldVFP( 7, 11, "Dorm, (TODO)"), FieldVFP( 7, 12, "Dorm, (TODO)"), FieldVFP( 7, 13, "Dorm, (TODO)"), FieldVFP( 7, 14, "Dorm, Vacant Room"), FieldVFP( 7, 15, "Dorm, Vacant Room"), Field_FP( 7, 16, "Dorm, (TODO)"), Field_FP( 7, 17, "Dorm, (TODO)"), Field_FP( 7, 18, "Dorm, (TODO)"), Field__P( 7, 19, "Dorm, (TODO)"), Field__P( 7, 20, "Dorm, (TODO)"), Field__P( 7, 21, "Dorm, (TODO)"), Field__P( 7, 22, "Dorm, (TODO)"), FieldVFP( 8, 1, "Paulownia Mall"), FieldVFP( 8, 2, "Paulownia Mall, Club Escapade"), FieldVFP( 8, 3, "Paulownia Mall, Velvet Room"), FieldVFP( 8, 4, "Paulownia Mall, Grocery Shop"), FieldVFP( 8, 5, "Paulownia Mall, Police Station"), FieldVFP( 8, 6, "Paulownia Mall, Jewlery Shop"), FieldVFP( 8, 7, "Paulownia Mall, (TODO)"), FieldVFP( 8, 8, "Paulownia Mall, (TODO)"), FieldVFP( 8, 9, "Paulownia Mall, Back Alley"), Field__P( 8, 10, "Paulownia Mall, (TODO)"), Field__P( 8, 11, "Paulownia Mall, (TODO)"), Field__P( 8, 12, "Paulownia Mall, (TODO)"), Field__P( 8, 13, "Paulownia Mall, (TODO)"), Field__P( 8, 14, "Paulownia Mall, (TODO)"), Field__P( 8, 15, "Paulownia Mall, (TODO)"), Field__P( 8, 16, "Paulownia Mall, (TODO)"), Field__P( 8, 17, "Paulownia Mall, (TODO)"), Field__P( 8, 18, "Paulownia Mall, (TODO)"), FieldVFP( 9, 1, "Iwatodai Strip Mall, 1F"), FieldVFP( 9, 2, "Iwatodai Strip Mall, Iwatoday Station"), FieldVFP( 9, 3, "Iwatodai Strip Mall, Fast food"), FieldVFP( 9, 4, "Iwatodai Strip Mall, (TODO)"), FieldVFP( 9, 5, "Iwatodai Strip Mall, Ramen Restaurant"), FieldVFP( 9, 6, "Iwatodai Strip Mall, (TODO)"), FieldVFP( 9, 7, "Iwatodai Strip Mall, (TODO)"), Field__P( 9, 8, "Iwatodai Strip Mall, 2F"), Field__P( 9, 9, "Iwatodai Strip Mall, (TODO)"), FieldVFP( 10, 1, "Port Island Station"), FieldVFP( 10, 2, "Station Outskirts"), FieldVF_( 10, 3, ""), FieldVFP( 12, 1, "Naganaki Shrine"), FieldVFP( 13, 1, ""), FieldVFP( 13, 2, "Mansion - Corridor"), FieldVF_( 13, 3, ""), FieldVFP( 14, 1, "Fishing area"), FieldVFP( 14, 2, "Godaigo, 1st Floor"), FieldVFP( 14, 3, "Godaigo, 2st Floor"), FieldVFP( 14, 4, "Godaigo, 3st Floor"), FieldVFP( 14, 5, "Godaigo, Big Hot Spring"), FieldVFP( 14, 6, "Godaigo, Men's Room"), FieldVFP( 14, 7, "Godaigo, Men's Room"), FieldVFP( 14, 8, "Godaigo, Men's Room"), FieldVFP( 14, 9, "Godaigo, Men's Room"), FieldVFP( 14, 10, "Godaigo, Men's Room"), Field__P( 14, 11, "Women's Room"), Field__P( 14, 12, "Women's Room"), Field__P( 14, 13, "Women's Room"), Field__P( 14, 14, "Women's Room"), Field__P( 14, 15, "Women's Room"), Field__P( 14, 16, "Godaigo, 3rd Floor"), FieldVFP( 15, 1, "Hospital Room"), FieldVFP( 15, 2, "Hospital Room"), FieldVFP( 15, 3, "Hospital Room"), FieldVFP( 15, 4, "Champs De Fleurs Entrance"), FieldVFP( 15, 5, ""), FieldVFP( 15, 6, ""), Field_F_( 15, 7, ""), Field_FP( 15, 8, ""), Field_F_( 15, 9, ""), Field_FP( 15, 10, ""), Field__P( 15, 11, ""), Field__P( 15, 12, ""), Field__P( 15, 13, ""), Field__P( 15, 14, ""), Field__P( 15, 15, ""), Field__P( 15, 16, ""), Field__P( 15, 17, ""), Field__P( 15, 18, ""), Field__P( 15, 19, ""), Field__P( 15, 20, ""), Field__P( 15, 21, ""), Field__P( 15, 22, ""), Field__P( 15, 23, ""), Field__P( 15, 24, ""), Field__P( 15, 25, ""), Field__P( 15, 26, ""), Field__P( 15, 27, ""), Field__P( 15, 28, ""), Field__P( 15, 29, ""), FieldVFP( 16, 1, ""), FieldVFP( 16, 2, ""), FieldVFP( 16, 3, ""), FieldVFP( 16, 4, ""), FieldVFP( 16, 5, ""), FieldVF_( 20, 1, ""), FieldVF_( 20, 2, ""), FieldVF_( 20, 3, ""), FieldVF_( 20, 4, ""), FieldVF_( 20, 5, ""), FieldVF_( 20, 6, ""), FieldVF_( 20, 7, ""), FieldVF_( 20, 8, ""), FieldVF_( 20, 9, ""), FieldVF_( 20, 10, ""), FieldVF_( 20, 11, ""), FieldVF_( 20, 12, ""), FieldVF_( 20, 13, ""), FieldVF_( 20, 14, ""), FieldVF_( 20, 15, ""), FieldVF_( 20, 16, ""), FieldVF_( 20, 17, ""), FieldVF_( 20, 18, ""), FieldVF_( 20, 19, ""), FieldVFP( 21, 0, ""), FieldVFP( 21, 1, ""), FieldVFP( 21, 2, ""), FieldVFP( 21, 3, ""), FieldVFP( 21, 4, ""), FieldVFP( 21, 5, ""), FieldVFP( 21, 6, ""), FieldVFP( 21, 7, ""), FieldVFP( 21, 8, ""), FieldVFP( 21, 9, ""), FieldVFP( 21, 11, ""), FieldVFP( 21, 13, ""), FieldVFP( 21, 14, ""), FieldVFP( 21, 16, ""), FieldVFP( 21, 17, ""), FieldVFP( 21, 18, ""), FieldVFP( 21, 19, ""), FieldVFP( 21, 30, ""), FieldVFP( 21, 50, ""), FieldVFP( 22, 0, ""), FieldVFP( 22, 1, ""), FieldVFP( 22, 2, ""), FieldVFP( 22, 3, ""), FieldVFP( 22, 4, ""), FieldVFP( 22, 5, ""), FieldVFP( 22, 6, ""), FieldVFP( 22, 7, ""), FieldVFP( 22, 8, ""), FieldVFP( 22, 18, ""), FieldVFP( 22, 50, ""), FieldVFP( 22, 51, ""), FieldVFP( 23, 0, ""), FieldVFP( 23, 1, ""), FieldVFP( 23, 2, ""), FieldVFP( 23, 3, ""), FieldVFP( 23, 4, ""), FieldVFP( 23, 5, ""), FieldVFP( 23, 6, ""), FieldVFP( 23, 7, ""), FieldVFP( 23, 8, ""), FieldVFP( 23, 18, ""), FieldVFP( 23, 50, ""), FieldVFP( 23, 51, ""), FieldVFP( 24, 0, ""), FieldVFP( 24, 1, ""), FieldVFP( 24, 2, ""), FieldVFP( 24, 3, ""), FieldVFP( 24, 4, ""), FieldVFP( 24, 5, ""), FieldVFP( 24, 6, ""), FieldVFP( 24, 7, ""), FieldVFP( 24, 8, ""), FieldVFP( 24, 18, ""), FieldVFP( 24, 50, ""), FieldVFP( 24, 51, ""), FieldVFP( 25, 0, ""), FieldVFP( 25, 1, ""), FieldVFP( 25, 2, ""), FieldVFP( 25, 3, ""), FieldVFP( 25, 4, ""), FieldVFP( 25, 5, ""), FieldVFP( 25, 6, ""), FieldVFP( 25, 7, ""), FieldVFP( 25, 8, ""), FieldVFP( 25, 18, ""), FieldVFP( 25, 50, ""), FieldVFP( 26, 0, ""), FieldVFP( 26, 1, ""), FieldVFP( 26, 2, ""), FieldVFP( 26, 3, ""), FieldVFP( 26, 4, ""), FieldVFP( 26, 5, ""), FieldVFP( 26, 6, ""), FieldVFP( 26, 7, ""), FieldVFP( 26, 8, ""), FieldVFP( 26, 18, ""), FieldVFP( 26, 50, ""), FieldVFP( 26, 51, ""), FieldVF_( 26, 52, ""), FieldVF_( 26, 53, ""), FieldVFP( 27, 0, ""), FieldVFP( 27, 1, ""), FieldVFP( 27, 2, ""), FieldVFP( 27, 3, ""), FieldVFP( 27, 4, ""), FieldVFP( 27, 5, ""), FieldVFP( 27, 6, ""), FieldVFP( 27, 7, ""), FieldVFP( 27, 8, ""), FieldVFP( 27, 18, ""), FieldVFP( 27, 50, ""), FieldVF_( 28, 0, ""), FieldVFP( 31, 1, "Monoral Bridge"), FieldVFP( 31, 2, "10th/11th Carriage"), FieldVFP( 31, 3, "8th/9th Carriage"), FieldVFP( 31, 4, "6th/7th Carriage"), FieldVFP( 31, 5, "4th/5th Carriage"), FieldVFP( 31, 6, "2th/3rd Carriage"), FieldVFP( 31, 7, "1st Carriagewe"), FieldVFP( 32, 1, "Tartarus, School Entrance"), FieldVFP( 32, 2, "Tartarus, 1st Floor, Lounge"), Field_FP( 32, 3, ""), FieldVFP( 32, 4, ""), FieldVFP( 32, 5, "Tartarus, Last Floor"), FieldVFP( 32, 6, "Tartarus, Rooftop"), FieldVFP( 32, 7, ""), FieldVFP( 32, 8, "Tartarus, School Entrance"), FieldVFP( 32, 9, "Tartarus, Entrance (cutscene)"), FieldVFP( 33, 1, "Beach"), FieldVFP( 33, 2, "Forest"), FieldVFP( 33, 3, "Forest"), FieldVFP( 34, 1, "Hallway, 1st Floor"), FieldVFP( 34, 2, "Hallway, 2nd Floor"), FieldVFP( 34, 3, "Hallway, 2nd Floor"), FieldVFP( 34, 4, "Hallway, 3rd Floor"), FieldVFP( 34, 5, "Room 101"), FieldVFP( 34, 6, "Room 201"), FieldVFP( 34, 7, "Room 202"), FieldVFP( 34, 8, "Room 203"), FieldVFP( 34, 9, "Room 204"), FieldVFP( 34, 10, "Room 205"), FieldVFP( 34, 11, "Room 201"), FieldVFP( 34, 12, "Room 202"), FieldVFP( 34, 13, "Room 203"), FieldVFP( 34, 14, "Room 204"), FieldVFP( 34, 15, "Room 205"), FieldVFP( 34, 16, "Room 301"), FieldVFP( 34, 17, "Room 302"), FieldVFP( 34, 18, "Room 303"), FieldVFP( 34, 19, "Room 304"), FieldVFP( 34, 20, "Hierophant's Chamber"), FieldVFP( 35, 1, "13m Underground"), FieldVFP( 35, 2, "17m Underground"), FieldVFP( 35, 3, "21m Underground"), FieldVFP( 35, 4, "27m Underground"), FieldVFP( 35, 5, "30m Underground"), FieldVFP( 35, 6, "30m Underground"), FieldVFP( 35, 7, "21m Underground"), FieldVFP( 35, 8, "Station Outskirts"), FieldVFP( 35, 9, "Station Outskirts"), FieldVFP( 35, 10, "33m Underground"), FieldVFP( 35, 11, "33m Underground"), FieldVFP( 35, 12, "33m Underground"), FieldVFP( 35, 13, "33m Underground"), FieldVFP( 35, 14, "33m Underground"), FieldVFP( 35, 15, "33m Underground"), FieldVFP( 35, 16, "33m Underground"), FieldVFP( 35, 17, "38m Underground"), FieldVFP( 37, 1, "Moonlight Bridge"), Field__P( 37, 2, ""), Field__P( 38, 1, ""), Field_FP( 39, 1, "Colosseo Purgatorio"), Field_F_( 39, 2, ""), Field_F_( 39, 3, ""), Field_FP( 40, 1, ""), Field_F_( 41, 0, ""), Field_FP( 41, 1, ""), Field_F_( 41, 2, ""), Field_F_( 41, 3, ""), Field_F_( 41, 4, ""), Field_F_( 41, 5, ""), Field_F_( 41, 6, ""), Field_F_( 41, 7, ""), Field_F_( 41, 8, ""), Field_F_( 41, 18, ""), Field_F_( 41, 50, ""), Field_F_( 42, 0, ""), Field_FP( 42, 1, ""), Field_F_( 42, 2, ""), Field_F_( 42, 3, ""), Field_F_( 42, 4, ""), Field_F_( 42, 5, ""), Field_F_( 42, 6, ""), Field_F_( 42, 7, ""), Field_F_( 42, 8, ""), Field_F_( 42, 18, ""), Field_F_( 42, 50, ""), Field_F_( 43, 0, ""), Field_FP( 43, 1, ""), Field_F_( 43, 2, ""), Field_F_( 43, 3, ""), Field_F_( 43, 4, ""), Field_F_( 43, 5, ""), Field_F_( 43, 6, ""), Field_F_( 43, 7, ""), Field_F_( 43, 8, ""), Field_F_( 43, 18, ""), Field_F_( 43, 50, ""), Field_F_( 44, 0, ""), Field_FP( 44, 1, ""), Field_F_( 44, 2, ""), Field_F_( 44, 3, ""), Field_F_( 44, 4, ""), Field_F_( 44, 5, ""), Field_F_( 44, 6, ""), Field_F_( 44, 7, ""), Field_F_( 44, 8, ""), Field_F_( 44, 18, ""), Field_F_( 44, 50, ""), Field_F_( 45, 0, ""), Field_FP( 45, 1, ""), Field_F_( 45, 2, ""), Field_F_( 45, 3, ""), Field_F_( 45, 4, ""), Field_F_( 45, 5, ""), Field_F_( 45, 6, ""), Field_F_( 45, 7, ""), Field_F_( 45, 8, ""), Field_F_( 45, 18, ""), Field_F_( 45, 50, ""), Field__P( 46, 1, ""), Field_F_( 46, 50, ""), Field__P( 47, 1, ""), Field_F_( 47, 50, ""), Field__P( 48, 1, ""), Field__P( 49, 1, ""), Field__P( 50, 1, ""), FieldVFP( 51, 1, "Block 1, Boss Room"), FieldVFP( 51, 2, "Block 1, Boss Room"), FieldVFP( 51, 3, "Block 1, Boss Room"), FieldVFP( 51, 4, "Block 1, Boss Room"), FieldVFP( 52, 1, "Block 2, Boss Room"), FieldVFP( 52, 2, "Block 2, Boss Room"), FieldVFP( 52, 3, "Block 2, Boss Room"), FieldVFP( 52, 4, "Block 2, Boss Room"), FieldVFP( 52, 5, "Block 2, Boss Room"), FieldVFP( 52, 6, "Block 2, Boss Room"), FieldVFP( 52, 7, "Block 2, Boss Room"), FieldVFP( 53, 1, "Block 3, Boss Room"), FieldVFP( 53, 2, "Block 3, Boss Room"), FieldVFP( 53, 3, "Block 3, Boss Room"), FieldVFP( 53, 4, "Block 3, Boss Room"), FieldVFP( 54, 1, "Block 4, Boss Room"), FieldVFP( 54, 2, "Block 4, Boss Room"), FieldVFP( 54, 3, "Block 4, Boss Room"), FieldVFP( 54, 4, "Block 4, Boss Room"), FieldVFP( 55, 1, "Block 5, Boss Room"), FieldVFP( 55, 2, "Block 5, Boss Room"), FieldVFP( 55, 3, "Block 5, Boss Room"), FieldVFP( 55, 4, "Block 5, Boss Room"), FieldVFP( 55, 5, "Block 5, Boss Room"), FieldVFP( 56, 1, "Block 6, Boss Room"), FieldVFP( 56, 2, "Block 6, Boss Room"), FieldVFP( 56, 3, "Block 6, Boss Room"), FieldVFP( 56, 4, "Block 6, Boss Room"), FieldVFP( 56, 5, "Block 6, Boss Room"), Field_F_( 71, 1, ""), Field_F_( 71, 2, ""), Field_F_( 71, 3, ""), Field_F_( 71, 4, ""), Field_F_( 71, 5, ""), Field_F_( 71, 6, ""), Field_F_( 72, 1, ""), Field_F_( 72, 2, ""), Field_F_( 72, 3, ""), Field_F_( 72, 4, ""), Field_F_( 73, 1, ""), Field_F_( 73, 2, ""), Field_F_( 73, 3, ""), Field_F_( 73, 4, ""), Field_F_( 73, 5, ""), Field_F_( 73, 6, ""), Field_F_( 74, 1, ""), Field_F_( 74, 2, ""), Field_F_( 74, 3, ""), Field_F_( 74, 4, ""), Field_F_( 75, 1, ""), Field_F_( 75, 2, ""), Field_F_( 75, 3, ""), Field_F_( 75, 4, ""), Field_F_( 75, 5, ""), FieldVFP(200, 0, ""), FieldVFP(221, 0, ""), FieldVFP(221, 1, ""), FieldVFP(221, 2, ""), FieldVFP(221, 3, ""), Field__P(221, 50, ""), FieldVFP(222, 1, ""), FieldVFP(222, 2, ""), Field__P(222, 50, ""), Field__P(222, 51, ""), FieldVFP(223, 1, ""), FieldVFP(223, 2, ""), Field__P(223, 50, ""), Field__P(223, 51, ""), FieldVFP(224, 1, ""), FieldVFP(224, 2, ""), FieldVFP(224, 3, ""), Field__P(224, 50, ""), Field__P(224, 51, ""), FieldVFP(225, 1, ""), FieldVFP(225, 2, ""), Field__P(225, 50, ""), FieldVFP(226, 1, ""), FieldVFP(226, 2, ""), Field__P(226, 50, ""), Field__P(226, 51, ""), FieldVFP(227, 1, ""), FieldVFP(227, 2, ""), Field__P(227, 50, ""), FieldVFP(228, 1, ""), FieldVFP(228, 2, ""), FieldVFP(230, 1, ""), Field_F_(230, 2, ""), FieldVFP(231, 1, ""), FieldVFP(231, 2, ""), FieldVFP(232, 1, ""), FieldVFP(232, 2, ""), FieldVFP(232, 3, ""), FieldVFP(232, 4, ""), FieldVFP(232, 5, ""), FieldVFP(232, 6, ""), FieldVFP(232, 7, ""), FieldVFP(234, 1, ""), FieldVFP(234, 2, ""), FieldVFP(234, 3, ""), FieldVFP(235, 1, ""), FieldVFP(235, 2, ""), FieldVFP(235, 3, ""), FieldVFP(236, 1, ""), FieldVFP(237, 2, ""), FieldVFP(237, 3, ""), FieldVFP(238, 1, ""), Field_F_(239, 1, ""), Field_F_(239, 4, ""), Field_F_(239, 5, ""), Field_F_(241, 1, ""), Field_F_(242, 1, ""), Field_F_(243, 1, ""), Field_F_(244, 1, ""), Field_F_(245, 1, ""), FieldVFP(251, 1, ""), Field__P(251, 2, ""), FieldVFP(251, 3, ""), Field__P(251, 4, ""), FieldVFP(252, 1, ""), Field__P(252, 2, ""), Field__P(252, 3, ""), Field__P(252, 4, ""), Field__P(252, 5, ""), Field__P(252, 6, ""), Field__P(252, 7, ""), FieldVFP(253, 1, ""), Field__P(253, 2, ""), Field__P(253, 3, ""), Field__P(253, 4, ""), FieldVFP(254, 1, ""), Field__P(254, 2, ""), Field__P(254, 3, ""), Field__P(254, 4, ""), FieldVFP(255, 1, ""), Field__P(255, 2, ""), Field__P(255, 3, ""), Field__P(255, 4, ""), Field__P(255, 5, ""), FieldVFP(256, 1, ""), Field__P(256, 2, ""), Field__P(256, 3, ""), Field__P(256, 4, ""), Field__P(256, 5, ""), FieldVF_(257, 1, ""), Field_F_(271, 1, ""), Field_F_(272, 1, ""), Field_F_(273, 1, ""), Field_F_(274, 1, ""), Field_F_(275, 1, ""), }; } } ================================================ FILE: KHSave.LibPersona3/SavePersona3.cs ================================================ using KHSave.Attributes; using KHSave.LibPersona3.Models; using KHSave.LibPersona3.Types; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using Xe.BinaryMapper; namespace KHSave.LibPersona3 { [Flags] public enum GameVersion { Vanilla = 1, FES = 2, Portable = 4, } public enum TimeOfTheDay : byte { [Info("Late Night?")] Default, [Info("Early morning")] EarlyMorning, [Info] Morning, [Info] Lunchtime, [Info] Afternoon, [Info("After School")] AfterSchool, [Info] Evening, [Info("Late Night")] LateNight, [Info("Dark Hour")] DarkHour, } public enum McStatus : short { [Info] Good, [Info("-")] Status01, [Info] Great, [Info] Tired, [Info("-")] Status04, [Info] Sick } public class SavePersona3 { public enum SectionType { End = -1, Header, SocialLinks = 3, Inventory = 7, CalendarDisplay = 8, TimeOfTheDay = 9, Calendar = 11, Unknown12, EquippedPersona = 14, Persona, Compendium, GameFlags, Money, BattlePartyMembers, Unknown20, FieldZone, FieldZoneRoom, ForceTartarus, PortableInventory = 6, } private enum Flags { FemaleProtagonist = 4103, } internal static IBinaryMapping Mapper; static SavePersona3() { Mapper = MappingConfiguration .DefaultConfiguration(Encoding.UTF8) .Build(); } public readonly Dictionary Sections = new(); public GameVersion Version { get; private set; } public short[] ExpendableItems { get; private set; } public TimeOfTheDay TimeOfTheDay { get; set; } public short CalendarDate { get; set; } public byte Unknown12 { get; set; } public short EquippedPersona { get; set; } public Persona[] Persona { get; private set; } public Persona[] Compendium { get; private set; } public SocialLinks SocialLinks { get; set; } public SocialLinksPortable SocialLinksPortable { get; set; } public int Money { get; set; } public Characters BattlePartyMember1 { get; set; } public Characters BattlePartyMember2 { get; set; } public Characters BattlePartyMember3 { get; set; } public Characters BattlePartyMember4 { get; set; } public int Unknown20 { get; set; } public int FieldZone { get; set; } public int FieldZoneRoom { get; set; } public bool ForceTartarus { get; set; } // Game flags public bool IsFemaleProtagonist { get; set; } private SavePersona3(Stream stream) { var reader = new BinaryReader(stream); var gameIdentifier = reader.ReadInt32(); if (gameIdentifier == 3) { Sections[SectionType.Header] = reader.ReadBytes(0x34); Version = GameVersion.Vanilla; } else if (gameIdentifier == 0) { Version = GameVersion.Portable; } else throw new Exception("This Persona 3 save is not recognized."); SectionType sectionId; while (true) { sectionId = (SectionType)reader.ReadInt32(); if (sectionId == SectionType.End) break; var length = reader.ReadInt32(); Sections[sectionId] = reader.ReadBytes(length); } Task.WaitAll( Task.Run(() => { ReadSectionInt16(SectionType.CalendarDisplay); // ignore TimeOfTheDay = (TimeOfTheDay)ReadSectionByte(SectionType.TimeOfTheDay); CalendarDate = ReadSectionInt16(SectionType.Calendar); Unknown12 = ReadSectionByte(SectionType.Unknown12); EquippedPersona = ReadSectionInt16(SectionType.EquippedPersona); Money = ReadSectionInt32(SectionType.Money); Unknown20 = ReadSectionInt32(SectionType.Unknown20); FieldZone = ReadSectionInt32(SectionType.FieldZone); FieldZoneRoom = ReadSectionInt32(SectionType.FieldZoneRoom); ForceTartarus = ReadSectionInt32(SectionType.ForceTartarus) != 0; }), Task.Run(() => { IsFemaleProtagonist = GetGameFlag(Flags.FemaleProtagonist); }), Task.Run(() => { if (Sections.TryGetValue(SectionType.SocialLinks, out var data)) { switch (data.Length) { case 0x430: SocialLinksPortable = TryReadSection(SectionType.SocialLinks); break; case 0x508: SocialLinks = TryReadSection(SectionType.SocialLinks); break; } } }), Task.Run(() => { if (Version == GameVersion.Portable) { using var stream = new MemoryStream(Sections[SectionType.PortableInventory]); using var reader = new BinaryReader(stream); ExpendableItems = new short[(int)stream.Length / sizeof(byte)]; for (var i = 0; i < ExpendableItems.Length; i++) ExpendableItems[i] = reader.ReadByte(); } else { using var stream = new MemoryStream(Sections[SectionType.Inventory]); using var reader = new BinaryReader(stream); ExpendableItems = new short[(int)stream.Length / sizeof(short)]; for (var i = 0; i < ExpendableItems.Length; i++) ExpendableItems[i] = reader.ReadInt16(); } }), Task.Run(() => Persona = ReadSectionArray(SectionType.Persona)), Task.Run(() => Compendium = ReadSectionArray(SectionType.Compendium)), Task.Run(() => { using var stream = new MemoryStream(Sections[SectionType.BattlePartyMembers]); using var reader = new BinaryReader(stream); BattlePartyMember1 = (Characters)reader.ReadInt16(); BattlePartyMember2 = (Characters)reader.ReadInt16(); BattlePartyMember3 = (Characters)reader.ReadInt16(); BattlePartyMember4 = (Characters)reader.ReadInt16(); }) ); var path = $"D:\\{Version}"; Directory.CreateDirectory(path); foreach (var s in Sections) { using var _stream = File.Create($"{path}\\{(int)s.Key}"); var _writer = new BinaryWriter(_stream); _writer.Write((int)s.Key); _writer.Write(s.Value.Length); _writer.Write(s.Value); } } public static SavePersona3 Read(Stream stream) => new(stream); public static bool IsValid(Stream stream) { stream.Position = 0; var reader = new BinaryReader(stream); var result = IsValidInternal(reader); stream.Position = 0; return result; } private static bool IsValidInternal(BinaryReader reader) { switch (reader.ReadInt32()) { case 0: break; case 3: reader.BaseStream.Position += 0x34; break; default: return false; } while (true) { if ((SectionType)reader.ReadInt32() == SectionType.End) return true; var length = reader.ReadInt32(); if (length < 0) return false; reader.BaseStream.Position += length; if (reader.BaseStream.Position > reader.BaseStream.Length) return false; } } public void Write(Stream stream) { var writer = new BinaryWriter(stream); switch (Version) { case GameVersion.Vanilla: writer.Write(3); writer.Write(Sections[SectionType.Header]); break; case GameVersion.Portable: writer.Write(0); break; default: throw new Exception("This Persona 3 save is not allowed to be saved. Save Editor bug?"); } Task.WhenAll( Task.Run(() => { WriteSection(SectionType.CalendarDisplay, CalendarDate); WriteSection(SectionType.TimeOfTheDay, (byte)TimeOfTheDay); WriteSection(SectionType.Calendar, CalendarDate); WriteSection(SectionType.Unknown12, Unknown12); WriteSection(SectionType.EquippedPersona, EquippedPersona); WriteSection(SectionType.Money, Money); WriteSection(SectionType.Unknown20, Unknown20); WriteSection(SectionType.FieldZone, FieldZone); WriteSection(SectionType.FieldZoneRoom, FieldZoneRoom); WriteSection(SectionType.ForceTartarus, ForceTartarus ? 1 : 0); }), Task.Run(() => { SetGameFlag(Flags.FemaleProtagonist, IsFemaleProtagonist); }), Task.Run(() => { MemoryStream stream; if (SocialLinksPortable != null) { stream = new MemoryStream(0x430); Mapper.WriteObject(stream, SocialLinksPortable); } else { stream = new MemoryStream(0x508); Mapper.WriteObject(stream, SocialLinks); } Sections[SectionType.Inventory] = stream.GetBuffer(); }), Task.Run(() => { if (Version == GameVersion.Portable) { using var stream = new MemoryStream(Sections[SectionType.PortableInventory]); using var writer = new BinaryWriter(stream); for (int i = 0; i < ExpendableItems.Length; i++) writer.Write((byte)ExpendableItems[i]); } else { using var stream = new MemoryStream(Sections[SectionType.Inventory]); using var writer = new BinaryWriter(stream); for (int i = 0; i < ExpendableItems.Length; i++) writer.Write(ExpendableItems[i]); } }), Task.Run(() => WriteSection(SectionType.Persona, Persona)), Task.Run(() => WriteSection(SectionType.Compendium, Compendium)), Task.Run(() => { using var stream = new MemoryStream(Sections[SectionType.BattlePartyMembers]); using var writer = new BinaryWriter(stream); writer.Write((short)BattlePartyMember1); writer.Write((short)BattlePartyMember2); writer.Write((short)BattlePartyMember3); writer.Write((short)BattlePartyMember4); }) ); foreach (var section in Sections.OrderBy(x => x.Key)) { if (section.Key == SectionType.Header) continue; writer.Write((int)section.Key); writer.Write(section.Value.Length); writer.Write(section.Value); } writer.Write((int)SectionType.End); if (Version == GameVersion.Portable) { var dummyData = new byte[0x4000]; writer.Write(dummyData); writer.Write(dummyData); writer.Write(dummyData); writer.Write(dummyData); } } public void ConvertToPortable() { Sections.Remove(SectionType.Header); // TODO fix 3 // TODO fix inventory // TODO fix 26 // TODO fix 30 // TODO fix 31 } private bool GetGameFlag(Flags flagId) { if (!Sections.TryGetValue(SectionType.GameFlags, out var data)) return default; var index = (int)flagId / 8; if (index > data.Length) return default; return (data[index] & (1 << ((int)flagId & 7))) != 0; } private void SetGameFlag(Flags flagId, bool value) { if (!Sections.TryGetValue(SectionType.GameFlags, out var data)) return; var index = (int)flagId / 8; if (index > data.Length) return; if (value) data[index] = (byte)(data[index] | (1 << ((int)flagId & 7))); else data[index] = (byte)(data[index] & ~(1 << ((int)flagId & 7))); } private byte ReadSectionByte(SectionType section) => TryReadSection(section, reader => reader.ReadByte()); private short ReadSectionInt16(SectionType section) => TryReadSection(section, reader => reader.ReadInt16()); private int ReadSectionInt32(SectionType section) => TryReadSection(section, reader => reader.ReadInt32()); private T[] ReadSectionArray(SectionType section) where T : class { using var stream = new MemoryStream(Sections[section]); var list = new List(); var prevPosition = -1L; while (stream.Position < stream.Length && prevPosition < stream.Position) { prevPosition = stream.Position; list.Add(Mapper.ReadObject(stream, (int)stream.Position)); } return list.ToArray(); } private void WriteSection(SectionType section, byte value) => TryWriteSection(section, writer => writer.Write(value)); private void WriteSection(SectionType section, short value) => TryWriteSection(section, writer => writer.Write(value)); private void WriteSection(SectionType section, int value) => TryWriteSection(section, writer => writer.Write(value)); private void WriteSection(SectionType section, T[] array) where T : class { using var stream = new MemoryStream(Sections[section]); foreach (var item in array) Mapper.WriteObject(stream, item, (int)stream.Position); } private T TryReadSection(SectionType section, Func actionReader) { if (!Sections.TryGetValue(section, out var data)) return default; using var stream = new MemoryStream(data); return actionReader(new BinaryReader(stream)); } private T TryReadSection(SectionType section) where T : class { if (!Sections.TryGetValue(section, out var data)) return default; using var stream = new MemoryStream(data); return Mapper.ReadObject(stream); } private void TryWriteSection(SectionType section, Action actionWriter) { if (!Sections.TryGetValue(section, out var data)) return; using var stream = new MemoryStream(data); actionWriter(new BinaryWriter(stream)); } } } ================================================ FILE: KHSave.LibPersona3/Types/ArcanaType.cs ================================================ namespace KHSave.LibPersona5.Types { public enum ArcanaType : byte { Null, Fool, Magician, Priestess, Empress, Emperor, Hierophant, Lovers, Chariot, Justice, Hermit, Fortune, Strength, Hanged, Death, Temperance, Devil, Tower, Star, Moon, Sun, Judgement, Aeon, } } ================================================ FILE: KHSave.LibPersona3/Types/Characters.cs ================================================ using KHSave.Attributes; namespace KHSave.LibPersona3.Types { public enum Characters : short { [Info("-")] Empty, [Info] Protagonist, [Info] Yukari, [Info] Aegis, [Info] Mitsuru, [Info] Junpei, [Info] Fuuka, [Info] Akihiko, [Info] Ken, [Info] Shinjiro, [Info] Koromaru, } } ================================================ FILE: KHSave.LibPersona3/Types/Demon.cs ================================================ using KHSave.Attributes; using KHSave.Extensions; namespace KHSave.LibPersona3.Types { public class DemonAttribute : InfoAttribute { public bool Royal { get; } public string Arcana { get; } public DemonAttribute(string name = null, bool royal = false, string tarot = null) : base(name) { Royal = royal; Arcana = tarot ?? string.Empty; } public static string GetArcana(object obj) => obj.GetAttribute()?.Arcana; } public class MagicianAttribute : DemonAttribute { public MagicianAttribute(string name = null, bool royal = false) : base(name, royal, "Magician") { } } public class JusticeAttribute : DemonAttribute { public JusticeAttribute(string name = null, bool royal = false) : base(name, royal, "Justice") { } } public class DevilAttribute : DemonAttribute { public DevilAttribute(string name = null, bool royal = false) : base(name, royal, "Devil") { } } public class StarAttribute : DemonAttribute { public StarAttribute(string name = null, bool royal = false) : base(name, royal, "Star") { } } public class LoversAttribute : DemonAttribute { public LoversAttribute(string name = null, bool royal = false) : base(name, royal, "Lovers") { } } public class ChariotAttribute : DemonAttribute { public ChariotAttribute(string name = null, bool royal = false) : base(name, royal, "Chariot") { } } public class EmperorAttribute : DemonAttribute { public EmperorAttribute(string name = null, bool royal = false) : base(name, royal, "Emperor") { } } public class HangedAttribute : DemonAttribute { public HangedAttribute(string name = null, bool royal = false) : base(name, royal, "Hanged") { } } public class FoolAttribute : DemonAttribute { public FoolAttribute(string name = null, bool royal = false) : base(name, royal, "Fool") { } } public class TowerAttribute : DemonAttribute { public TowerAttribute(string name = null, bool royal = false) : base(name, royal, "Tower") { } } public class HierophantAttribute : DemonAttribute { public HierophantAttribute(string name = null, bool royal = false) : base(name, royal, "Hierophant") { } } public class PriestessAttribute : DemonAttribute { public PriestessAttribute(string name = null, bool royal = false) : base(name, royal, "Priestess") { } } public class StrengthAttribute : DemonAttribute { public StrengthAttribute(string name = null, bool royal = false) : base(name, royal, "Strength") { } } public class EmpressAttribute : DemonAttribute { public EmpressAttribute(string name = null, bool royal = false) : base(name, royal, "Empress") { } } public class SunAttribute : DemonAttribute { public SunAttribute(string name = null, bool royal = false) : base(name, royal, "Sun") { } } public class MoonAttribute : DemonAttribute { public MoonAttribute(string name = null, bool royal = false) : base(name, royal, "Moon") { } } public class JudgementAttribute : DemonAttribute { public JudgementAttribute(string name = null, bool royal = false) : base(name, royal, "Judgement") { } } public class AeonAttribute : DemonAttribute { public AeonAttribute(string name = null, bool royal = false) : base(name, royal, "Aeon") { } } public enum Demons : short { [Unused] Invalid = -1, [Demon("-")] Empty, [Fool("Orpheus")] Orpheus, [Fool("Susano-o")] Susanoo, [Hierophant("Flauros")] Flauros, [Fool("Loki")] Loki, [Magician("Nekomata")] Nekomata, [Magician("Pyro Jack")] PyroJack, [Magician("Jack Frost")] JackFrost, [Priestess("Scathach")] Scathach, [Magician("Rangda")] Rangda, [Chariot("Nata Taishi")] NataTaishi, [Tower("Cu Chulainn")] CuChulainn, [Fool("Ose")] Ose, [Demon("Kusi Mitama")] KusiMitama, [Demon("Apsaras")] Apsaras, [Demon("Laksmi")] Laksmi, [Demon("Parvati")] Parvati, [Demon("Kikuri-Hime")] KikuriHime, [Demon("Sati")] Sati, [Demon("Sarasvati")] Sarasvati, [Demon("Unicorn")] Unicorn, [Demon("Cybele")] Cybele, [Demon("Skadi")] Skadi, [Demon("Hariti")] Hariti, [Demon("Kali")] Kali, [Demon("Ganga")] Ganga, [Demon("Taraka")] Taraka, [Demon("Lamia")] Lamia, [Demon("Odin")] Odin, [Demon("King Frost")] KingFrost, [Demon("Okuninushi")] Okuninushi, [Demon("Kingu")] Kingu, [Demon("Naga Raja")] NagaRaja, [Demon("Forneus")] Forneus, [Demon("Kohryu")] Kohryu, [Demon("Mithra")] Mithra, [Demon("Daisoujou")] Daisoujou, [Demon("Ananta")] Ananta, [Demon("Omoikane")] Omoikane, [Demon("Principality")] Principality, [Demon("Raphael")] Raphael, [Demon("Titania")] Titania, [Demon("Oberon")] Oberon, [Demon("Narcissus")] Narcissus, [Demon("Queen Mab")] QueenMab, [Demon("Leanan Sidhe")] LeananSidhe, [Demon("Pixie")] Pixie, [Demon("Uriel")] Uriel, [Demon("Surt")] Surt, [Demon("Throne")] Throne, [Demon("Ares")] Ares, [Demon("Titan")] Titan, [Demon("Chimera")] Chimera, [Demon("Ara Mitama")] AraMitama, [Demon("Valkyrie")] Valkyrie, [Demon("Melchizedek")] Melchizedek, [Demon("Dominion")] Dominion, [Demon("Siegfried")] Siegfried, [Demon("Virtue")] Virtue, [Demon("Power")] Power, [Demon("Archangel")] Archangel, [Demon("Angel")] Angel, [Demon("Alilat")] Alilat, [Demon("Arahabaki")] Arahabaki, [Demon("Nebiros")] Nebiros, [Demon("Decarabia")] Decarabia, [Demon("Kurama Tengu")] KuramaTengu, [Demon("Yomotsu Shikome")] YomotsuShikome, [Demon("Naga")] Naga, [Demon("Norn")] Norn, [Demon("Atropos")] Atropos, [Demon("Orobas")] Orobas, [Demon("Lachesis")] Lachesis, [Demon("Saki Mitama")] SakiMitama, [Demon("Eligor")] Eligor, [Demon("Clotho")] Clotho, [Demon("Fortuna")] Fortuna, [Demon("Thor")] Thor, [Demon("Bishamonten")] Bishamonten, [Demon("Take-Mikazuchi")] TakeMikazuchi, [Demon("Jikokuten")] Jikokuten, [Demon("Hanuman")] Hanuman, [Demon("Koumokuten")] Koumokuten, [Demon("Zouchouten")] Zouchouten, [Demon("Attis")] Attis, [Demon("Vasuki")] Vasuki, [Demon("Orthrus")] Orthrus, [Demon("Take-Minakata")] TakeMinakata, [Demon("Ubelluris")] Ubelluris, [Demon("Inugami")] Inugami, [Demon("Thanatos")] Thanatos, [Demon("Alice")] Alice, [Demon("Seth")] Seth, [Demon("Mot")] Mot, [Demon("Samael")] Samael, [Demon("Vetala")] Vetala, [Demon("Loa")] Loa, [Demon("Pale Rider")] PaleRider, [Demon("Michael")] Michael, [Demon("Byakko")] Byakko, [Demon("Suzaku")] Suzaku, [Demon("Seiryuu")] Seiryuu, [Demon("Nigi Mitama")] NigiMitama, [Demon("Genbu")] Genbu, [Demon("Beelzebub")] Beelzebub, [Demon("Mother Harlot")] MotherHarlot, [Demon("Abaddon")] Abaddon, [Demon("Lilith")] Lilith, [Demon("Incubus")] Incubus, [Demon("Succubus")] Succubus, [Demon("Lilim")] Lilim, [Demon("Chi You")] ChiYou, [Demon("Shiva")] Shiva, [Demon("Masakado")] Masakado, [Demon("Seiten Taisei")] SeitenTaisei, [Demon("Yamatano-orochi")] Yamatanoorochi, [Demon("Oumitsunu")] Oumitsunu, [Demon("Helel")] Helel, [Demon("Sandalphon")] Sandalphon, [Demon("Black Frost")] BlackFrost, [Demon("Garuda")] Garuda, [Demon("Kaiwan")] Kaiwan, [Demon("Ganesha")] Ganesha, [Demon("Nandi")] Nandi, [Demon("Chernobog")] Chernobog, [Demon("Dionysus")] Dionysus, [Demon("Narasimha")] Narasimha, [Demon("Girimehkala")] Girimehkala, [Demon("Gurr")] Gurr, [Demon("Legion")] Legion, [Demon("Berith")] Berith, [Demon("Saturnus")] Saturnus, [Demon("Vishnu")] Vishnu, [Demon("Barong")] Barong, [Demon("Jatayu")] Jatayu, [Demon("Horus")] Horus, [Demon("Quetzalcoatl")] Quetzalcoatl, [Demon("Yatagarasu")] Yatagarasu, [Demon("Messiah")] Messiah, [Demon("Asura")] Asura, [Demon("Metatron")] Metatron, [Demon("Satan")] Satan, [Demon("Gabriel")] Gabriel, [Demon("Hokuto Seikun")] HokutoSeikun, [Demon("Trumpeter")] Trumpeter, [Demon("Anubis")] Anubis, [Demon("Slime")] Slime, // FES, P3P [Demon("Hua Po")] HuaPo, // FES, P3P [Demon("High Pixie")] HighPixie, // FES, P3P [Demon("Yaksini")] Yaksini, // FES, P3P [Demon("Shiisaa")] Shiisaa, // FES, P3P [Demon("Thoth")] Thoth, // FES, P3P [Demon("Alp")] Alp, // FES, P3P [Demon("Mothman")] Mothman, // FES, P3P [Demon("Kumbhanda")] Kumbhanda, // FES, P3P [Demon("Empusa")] Empusa, // FES, P3P [Demon("Rakshasa")] Rakshasa, // FES, P3P [Demon("Hecatoncheires")] Hecatoncheires, // FES, P3P [Demon("Hell Biker")] HellBiker, // FES, P3P [Demon("Ghoul")] Ghoul, // FES, P3P [Demon("Yurlungur")] Yurlungur, [Demon("Pazuzu")] Pazuzu, // FES, P3P [Demon("Mara")] Mara, // FES, P3P [Demon("Kartikeya")] Kartikeya, // FES, P3P [Demon("Baal Zebul")] BaalZebul, // FES, P3P [Demon("Suparna")] Suparna, // FES, P3P [Demon("Lucifer")] Lucifer, // FES, P3P [Demon("Nidhoggr")] Nidhoggr, // FES, P3P [Demon("Atavaka")] Atavaka, // FES, P3P [Demon("Orpheus Telos")] OrpheusTelos, // FES, P3P [Demon("Mokoi")] Mokoi, // P3P [Demon("Neko Shogun")] NekoShogun, // P3P [Demon("Setanta")] Setanta, // P3P [Demon("Tam Lin")] TamLin, // P3P [Demon("Orpheus (female)")] OrpheusFemale, // P3P [Unused] Demon0AF, [Unused] Demon0B0, [Unused] Demon0B1, [Unused] Demon0B2, [Unused] Demon0B3, [Unused] Demon0B4, [Unused] Demon0B5, [Unused] Demon0B6, [Unused] Demon0B7, [Unused] Demon0B8, [Unused] Demon0B9, [Unused] Demon0BA, [Unused] Demon0BB, [Unused] Demon0BC, [Unused] Demon0BD, [Unused] Demon0BE, [Demon("Universe")] Universe, [Demon("Isis")] Isis, [Demon("Palladion")] Palladion, [Demon("Athena")] Athena, [Demon("Penthesilea")] Penthesilea, [Demon("Artemisia")] Artemisia, [Demon("Hermes")] Hermes, [Demon("Trismegistus")] Trismegistus, [Demon("Lucia")] Lucia, [Demon("Juno")] Juno, [Demon("Polydeuces")] Polydeuces, [Demon("Caesar")] Caesar, [Demon("Nemesis")] Nemesis, [Demon("Kala-Nemi")] KalaNemi, [Demon("Castor")] Castor, [Demon("Cerberus")] Cerberus, [Demon("Hypnos")] Hypnos, [Demon("Moros")] Moros, [Demon("Medea")] Medea, [Demon("Psyche")] Psyche, // FES, P3P [Unused] Demon0D3, [Unused] Demon0D4, [Unused] Demon0D5, [Unused] Demon0D6, [Unused] Demon0D7, [Unused] Demon0D8, [Unused] Demon0D9, [Unused] Demon0DA, [Unused] Demon0DB, [Unused] Demon0DC, [Unused] Demon0DD, [Unused] Demon0DE, [Unused] Demon0DF, [Unused] Demon0E0, [Unused] Demon0E1, [Unused] Demon0E2, [Unused] Demon0E3, [Unused] Demon0E4, [Unused] Demon0E5, [Unused] Demon0E6, [Unused] Demon0E7, [Unused] Demon0E8, [Unused] Demon0E9, [Unused] Demon0EA, [Unused] Demon0EB, [Unused] Demon0EC, [Unused] Demon0ED, [Unused] Demon0EE, [Unused] Demon0EF, [Unused] Demon0F0, [Unused] Demon0F1, [Unused] Demon0F2, [Unused] Demon0F3, [Unused] Demon0F4, [Unused] Demon0F5, [Unused] Demon0F6, [Unused] Demon0F7, [Unused] Demon0F8, [Unused] Demon0F9, [Unused] Demon0FA, [Unused] Demon0FB, [Unused] Demon0FC, [Unused] Demon0FD, [Unused] Demon0FE, [Unused] Demon0FF, } } ================================================ FILE: KHSave.LibPersona3/Types/ExpendableItems.cs ================================================ using KHSave.Attributes; namespace KHSave.LibPersona3.Types { public enum ExpendableItems { [Consumable] Dummy, [Consumable] Medicine, [Consumable("Medical Powder")] MedicalPowder, [Consumable("Bead")] Bead, [Consumable("Snuff Soul")] SnuffSoul, [Consumable("Chewing Soul")] ChewingSoul, [Consumable("Precious Egg")] PreciousEgg, [Consumable("Soma")] Soma, [Consumable("Dis-Poison")] DisPoison, [Consumable("Revival Bead")] RevivalBead, [Consumable("Balm of Life")] BalmOfLife, [Consumable("Me Patra Gem")] MePatraGem, [Consumable("Muscle Drink")] MuscleDrink, [Consumable("Odd Morsel")] OddMorsel, [Consumable("Rancid Gravy")] RancidGravy, [Consumable("Powerful Drug")] PowerfulDrug, [Unused] Consumable4010, [Unused] Consumable4011, [Unused] Consumable4012, [Consumable("Dis-Rage")] DisRage, [Consumable("Dis-Charm")] DisCharm, [Unused] Consumable4015, [Unused] Consumable4016, [Unused] Consumable4017, [Unused] Consumable4018, [Unused] Consumable4019, [Unused] Consumable401A, [Unused] Consumable401B, [Unused] Consumable401C, [Unused] Consumable401D, [Unused] Consumable401E, [Unused] Consumable401F, [Consumable("Patra Gem")] PatraGem, [Consumable("Traesto Gem")] TraestoGem, [Consumable("Bead Chain")] BeadChain, [Consumable("Magic Mirror")] MagicMirror, [Consumable("Attack Mirror")] AttackMirror, [Consumable("Dekaja Gem")] DekajaGem, [Consumable("Dekunda Gem")] DekundaGem, [Consumable("Homunculus")] Homunculus, [Consumable("Plume of Dusk")] PlumeOfDusk, [Consumable("Agilao Gem")] AgilaoGem, [Consumable("Maragi Gem")] MaragiGem, [Consumable("Bufula Gem")] BufulaGem, [Consumable("Mabufu Gem")] MabufuGem, [Consumable("Garula Gem")] GarulaGem, [Consumable("Magaru Gem")] MagaruGem, [Consumable("Zionga Gem")] ZiongaGem, [Consumable("Mazio Gem")] MazioGem, [Consumable("Megido Gem")] MegidoGem, } } ================================================ FILE: KHSave.LibPersona3/Types/Inventory.cs ================================================ using KHSave.Attributes; namespace KHSave.LibPersona5.Types { public class ConsumableHpAttribute : ConsumableAttribute { public ConsumableHpAttribute(string name = null) : base(name) { } } public enum Inventory { [Consumable("Blank")] Blank, [ConsumableHp("Devil Fruit")] DevilFruit, [Consumable("Recov-R: 50mg")] Item2, [Consumable("Recov-R: 100mg")] Item3, [Consumable("Takemedic")] Item4, } } ================================================ FILE: KHSave.LibPersona3/Types/Skill.cs ================================================ using KHSave.Attributes; namespace KHSave.LibPersona3.Types { public class SkillAttribute : InfoAttribute { public SkillAttribute(string name = null) : base(name) { } } public class HitSkillAttribute : SkillAttribute { public HitSkillAttribute(string name = null) : base(name) { } } public class GunSkillAttribute : SkillAttribute { public GunSkillAttribute(string name = null) : base(name) { } } public class FireSkillAttribute : SkillAttribute { public FireSkillAttribute(string name = null) : base(name) { } } public class IceSkillAttribute : SkillAttribute { public IceSkillAttribute(string name = null) : base(name) { } } public class WindSkillAttribute : SkillAttribute { public WindSkillAttribute(string name = null) : base(name) { } } public class ThunderSkillAttribute : SkillAttribute { public ThunderSkillAttribute(string name = null) : base(name) { } } public class BlessSkillAttribute : SkillAttribute { public BlessSkillAttribute(string name = null) : base(name) { } } public class DeathSkillAttribute : SkillAttribute { public DeathSkillAttribute(string name = null) : base(name) { } } public class AlmightySkillAttribute : SkillAttribute { public AlmightySkillAttribute(string name = null) : base(name) { } } public class SupportSkillAttribute : SkillAttribute { public SupportSkillAttribute(string name = null) : base(name) { } } public class AutoSkillAttribute : SkillAttribute { public AutoSkillAttribute(string name = null) : base(name) { } } public class PoisonSkillAttribute : SkillAttribute { public PoisonSkillAttribute(string name = null) : base(name) { } } public class HealSkillAttribute : SkillAttribute { public HealSkillAttribute(string name = null) : base(name) { } } public enum Skill : short { [Skill("-")] Empty, [FireSkill("Agi")] Agi, [FireSkill("Agilao")] Agilao, [FireSkill("Agidyne")] Agidyne, [FireSkill("Maragi")] Maragi, [FireSkill("Maragion")] Maragion, [FireSkill("Maragidyne")] Maragidyne, [FireSkill("Maralagidyne")] Maralagidyne, // FES, P3P [Unused] Skill008, [FireSkill("Ragnarok")] Ragnarok, [WindSkill("Garu")] Garu, [WindSkill("Garula")] Garula, [WindSkill("Garudyne")] Garudyne, [WindSkill("Magaru")] Magaru, [WindSkill("Magarula")] Magarula, [WindSkill("Magarudyne")] Magarudyne, [Unused] Skill010, [Unused] Skill011, [WindSkill("Panta Rhei")] PantaRhei, [IceSkill("Bufu")] Bufu, [IceSkill("Bufula")] Bufula, [IceSkill("Bufudyne")] Bufudyne, [IceSkill("Mabufu")] Mabufu, [IceSkill("Mabufula")] Mabufula, [IceSkill("Mabufudyne")] Mabufudyne, [Unused] Skill019, [Unused] Skill01A, [IceSkill("Niflheim")] Niflheim, [ThunderSkill("Zio")] Zio, [ThunderSkill("Zionga")] Zionga, [ThunderSkill("Ziodyne")] Ziodyne, [ThunderSkill("Mazio")] Mazio, [ThunderSkill("Mazionga")] Mazionga, [ThunderSkill("Maziodyne")] Maziodyne, [Unused] Skill022, [Unused] Skill023, [ThunderSkill("Thunder Reign")] ThunderReign, [AlmightySkill("Megido")] Megido, [AlmightySkill("Megidola")] Megidola, [AlmightySkill("Megidolaon")] Megidolaon, [AlmightySkill("Last Resort")] LastResort, [Unused] Skill029, [Unused] Skill02A, [AlmightySkill("Black Viper")] BlackViper, [AlmightySkill("Morning Star")] MorningStar, [BlessSkill("Hama")] Hama, [BlessSkill("Mahama")] Mahama, [BlessSkill("Hamaon")] Hamaon, [BlessSkill("Mahamaon")] Mahamaon, [Unused] Skill031, [BlessSkill("Samsara")] Samsara, [DeathSkill("Mudo")] Mudo, [DeathSkill("Mamudo")] Mamudo, [DeathSkill("Mudoon")] Mudoon, [DeathSkill("Mamudoon")] Mamudoon, [Unused] Skill037, [DeathSkill("Die for Me!")] DieforMe, [PoisonSkill("Marin Karin")] MarinKarin, [PoisonSkill("Sexy Dance")] SexyDance, [PoisonSkill("Bewilder")] Bewilder, [PoisonSkill("Eerie Sound")] EerieSound, [PoisonSkill("Pulinpa")] Pulinpa, [PoisonSkill("Tentarafoo")] Tentarafoo, [PoisonSkill("Evil Touch")] EvilTouch, [PoisonSkill("Evil Smile")] EvilSmile, [PoisonSkill("Ghastly Wail")] GhastlyWail, [PoisonSkill("Provoke")] Provoke, [PoisonSkill("Infuriate")] Infuriate, [PoisonSkill("Poisma")] Poisma, [PoisonSkill("Poison Mist")] PoisonMist, [PoisonSkill("Virus Breath")] VirusBreath, [Unused] Skill047, [Unused] Skill048, [AlmightySkill("Foul Breath")] FoulBreath, [AlmightySkill("Stagnant Air")] StagnantAir, [AlmightySkill("Life Drain")] LifeDrain, [AlmightySkill("Spirit Drain")] SpiritDrain, [Unused] Skill04D, [Unused] Skill04E, [Unused] Skill04F, [FireSkill("Maragidyne (Velvet)")] MaragidyneVelvet, [WindSkill("Magarudyne (Velvet)")] MagarudyneVelvet, [IceSkill("Mabufudyne (Velvet)")] MabufudyneVelvet, [ThunderSkill("Maziodyne (Velvet)")] MaziodyneVelvet, [AlmightySkill("Megidolaon (Velvet)")] MegidolaonVelvet, [BlessSkill("Mahamaon (Velvet)")] MahamaonVelvet, [DeathSkill("Mamudoon (Velvet)")] MamudoonVelvet, [PoisonSkill("Sexy Dance")] SexyDance2, [PoisonSkill("Eerie Sound")] EerieSound2, [PoisonSkill("Tentarafoo")] Tentarafoo2, [PoisonSkill("Evil Smile")] EvilSmile2, [PoisonSkill("Poison Mist")] PoisonMist2, [PoisonSkill("Holy Arrow")] HolyArrow, [PoisonSkill("Life Drain")] LifeDrain2, [PoisonSkill("Spirit Drain")] SpiritDrain2, [Unused] Skill05F, [Skill("Death")] Death, [Skill("Yell")] Yell, [Skill("Yell")] Yell2, [Skill("Death")] Death3, [Skill("Death")] Death4, [Skill("Death")] Death5, [Skill("Moonless Gown")] MoonlessGown, [Skill("Moonless Gown")] MoonlessGown2, [Skill("Summon")] Summon, [Skill("Slash Attack")] SlashAttack, [Skill("Pierce Attack")] PierceAttack, [Skill("Strike Attack")] StrikeAttack, [Skill("Yell")] Yell3, [GunSkill("Pierce Attack")] PierceAttack3, // FES, P3P [FireSkill("Fire Attack")] FireAttack, // FES, P3P [AlmightySkill("Almighty Attack")] AlmightyAttack, // FES, P3P [HitSkill("Bash")] Bash, [HitSkill("Assault Dive")] AssaultDive, [HitSkill("Kill Rush")] KillRush, [HitSkill("Swift Strike")] SwiftStrike, [HitSkill("Sonic Punch")] SonicPunch, [HitSkill("Heat Wave")] HeatWave, [HitSkill("Gigantic Fist")] GiganticFist, [HitSkill("Akasha Arts")] AkashaArts, [HitSkill("God's Hand")] GodsHand, [HitSkill("Cleave")] Cleave, [HitSkill("Fatal End")] FatalEnd, [HitSkill("Getsu-ei")] Getsuei, [HitSkill("Zan-ei")] Zanei, [HitSkill("Mighty Swing")] MightySwing, [HitSkill("Double Fangs")] DoubleFangs, [HitSkill("Blade of Fury")] BladeofFury, [HitSkill("Deathbound")] Deathbound, [HitSkill("Tempest Slash")] TempestSlash, [HitSkill("Heaven's Blade")] HeavensBlade, [GunSkill("Pralaya")] Pralaya, [HitSkill("Power Slash")] PowerSlash, // FES, P3P [HitSkill("Gale Slash")] GaleSlash, // FES, P3P [HitSkill("Brave Blade")] BraveBlade, // FES, P3P [HitSkill("Herculean Strike")] HerculeanStrike, // FES, P3P [HitSkill("Vicious Strike")] ViciousStrike, // FES, P3P [GunSkill("Single Shot")] SingleShot, // FES, P3P [GunSkill("Twin Shot")] TwinShot, [GunSkill("Holy Arrow")] HolyArrow2, [GunSkill("Torrent Shot")] TorrentShot, [GunSkill("Arrow Rain")] ArrowRain, [GunSkill("Myriad Arrows")] MyriadArrows, [GunSkill("Primal Force")] PrimalForce, [HitSkill("Vorpal Blade")] VorpalBlade, [HitSkill("Weary Thrust")] WearyThrust, [GunSkill("Cruel Attack")] CruelAttack, [GunSkill("Vile Assault")] VileAssault, [GunSkill("Poison Arrow")] PoisonArrow, // FES, P3P [HitSkill("Weary Thrust")] WearyThrust2, // FES, P3P [HitSkill("Vorpal Blade")] VorpalBlade2, // FES, P3P [Skill("Junpei Co-Op")] JunpeiCoOp, // P3P [Skill("Yukari Co-Op")] YukariCoOp, // P3P [Skill("Akihiko Co-Op")] AkihikoCoOp, // P3P [Skill("Mitsuru Co-Op")] MitsuruCoOp, // P3P [Skill("Aigis Co-Op")] AigisCoOp, // P3P [Skill("Ken Co-Op")] KenCoOp, // P3P [Skill("Shinjiro Co-Op")] ShinjiroCoOp, // P3P [Skill("Koromaru Co-Op")] KoromaruCoOp, // P3P [Unused] Skill09F, [Skill("+charm(low)")] SkillcharmLow, [Skill("+charm(med)")] SkillcharmMed, [Skill("+charm(high)")] SkillcharmHigh, [Skill("+distress(low)")] SkilldistressLow, [Skill("+distress(med)")] SkilldistressMed, [Skill("+distress(high)")] SkilldistressHigh, [Skill("+panic(low)")] SkillpanicLow, [Skill("+panic(med)")] SkillpanicMed, [Skill("+panic(high)")] SkillpanicHigh, [Skill("+fear(low)")] SkillfearLow, [Skill("+fear(med)")] SkillfearMed, [Skill("+fear(high)")] SkillfearHigh, [Skill("+rage(low)")] SkillrageLow, [Skill("+rage(med)")] SkillrageMed, [Skill("+rage(high)")] SkillrageHigh, [Skill("+poison(low)")] SkillpoisonLow, [Unused] Skill0B0, [Unused] Skill0B1, [Unused] Skill0B2, [Unused] Skill0B3, [Unused] Skill0B4, [Unused] Skill0B5, [Unused] Skill0B6, [Unused] Skill0B7, [Unused] Skill0B8, [Unused] Skill0B9, [Unused] Skill0BA, [Unused] Skill0BB, [Unused] Skill0BC, [Unused] Skill0BD, [Unused] Skill0BE, [Unused] Skill0BF, [HealSkill("Dia")] Dia, [HealSkill("Diarama")] Diarama, [HealSkill("Diarahan")] Diarahan, [HealSkill("Media")] Media, [HealSkill("Mediarama")] Mediarama, [HealSkill("Mediarahan")] Mediarahan, [HealSkill("Salvation")] Salvation, [HealSkill("Patra")] Patra, [HealSkill("Me Patra")] MePatra, [HealSkill("Re Patra")] RePatra, [HealSkill("Posumudi")] Posumudi, [HealSkill("Amrita")] Amrita, [HealSkill("Recarm")] Recarm, [HealSkill("Samarecarm")] Samarecarm, [SupportSkill("Tarunda")] Tarunda, [SupportSkill("Matarunda")] Matarunda, [SupportSkill("Sukunda")] Sukunda, [SupportSkill("Masukunda")] Masukunda, [SupportSkill("Rakunda")] Rakunda, [SupportSkill("Marakunda")] Marakunda, [SupportSkill("Dekunda")] Dekunda, [Unused] Skill0D5, [SupportSkill("Tarukaja")] Tarukaja, [SupportSkill("Matarukaja")] Matarukaja, [SupportSkill("Sukukaja")] Sukukaja, [SupportSkill("Masukukaja")] Masukukaja, [SupportSkill("Rakukaja")] Rakukaja, [SupportSkill("Marakukaja")] Marakukaja, [SupportSkill("Power Charge")] PowerCharge, [SupportSkill("Mind Charge")] MindCharge, [Unused] Skill0DE, [SupportSkill("Dekaja")] Dekaja, [SupportSkill("Tetrakarn")] Tetrakarn, [SupportSkill("Makarakarn")] Makarakarn, [SupportSkill("Rebellion")] Rebellion, [SupportSkill("Revolution")] Revolution, [Unused] Skill0E4, [SupportSkill("Fire Break")] FireBreak, [SupportSkill("Ice Break")] IceBreak, [SupportSkill("Wind Break")] WindBreak, [SupportSkill("Elec Break")] ElecBreak, [SupportSkill("Traesto")] Traesto, [SupportSkill("Trafuri")] Trafuri, [SupportSkill("Healing Wave")] HealingWave, [HealSkill("Recarmdra")] Recarmdra, [HealSkill("Charmdi")] Charmdi, [HealSkill("Enradi")] Enradi, [Skill("Junpei Co-Op")] JunpeiCoOp2, // P3P [Skill("Yukari Co-Op")] YukariCoOp2, // P3P [Skill("Akihiko Co-Op")] AkihikoCoOp2, // P3P [Skill("Mitsuru Co-Op")] MitsuruCoOp2, // P3P [Skill("Aigis Co-Op")] AigisCoOp2, // P3P [Skill("Ken Co-Op")] KenCoOp2, // P3P [Skill("Shinjiro Co-Op")] ShinjiroCoOp2, // P3P [Skill("Koromaru Co-Op")] KoromaruCoOp2, // P3P [Skill("Aigis Co-Op")] AigisCoOp3, // P3P [Skill("Aigis Co-Op")] AigisCoOp4, // P3P [Skill("Aigis Co-Op")] AigisCoOp5, // P3P [Skill("Aigis Co-Op")] AigisCoOp6, // P3P [Unused] Skill0FB, [Unused] Skill0FC, [Unused] Skill0FD, [Unused] Skill0FE, [Unused] Skill0FF, [Skill("Summer Dream")] SummerDream, [Skill("Summer Dream")] SummerDream2, [Skill("Summer Dream")] SummerDream3, [Skill("Summer Dream")] SummerDream4, [Skill("Summer Dream")] SummerDream5, [Skill("Summer Dream")] SummerDream6, [Skill("Summer Dream")] SummerDream7, [Skill("Summer Dream")] SummerDream8, [Skill("Summer Dream")] SummerDream9, [Skill("Summer Dream")] SummerDream10, [Skill("Summer Dream")] SummerDream11, [Skill("Summer Dream")] SummerDream12, [Skill("Summer Dream")] SummerDream13, [Skill("Summer Dream")] SummerDream14, [Skill("Summer Dream")] SummerDream15, [Skill("Summer Dream")] SummerDream16, [Skill("Jack Brothers")] JackBrothers, [Skill("Ardhanari")] Ardhanari, [Skill("Trickster")] Trickster, [Skill("Infinity")] Infinity, [Skill("Valhalla")] Valhalla, [Skill("Summer Dream")] SummerDream17, [Skill("Armageddon")] Armageddon, [Skill("Cadenza")] Cadenza, [Skill("Scarlet Havoc")] ScarletHavoc, [Skill("Frolic")] Frolic, [Skill("Dreamfest")] Dreamfest, [Skill("King and I")] KingandI, [Skill("Best Friends")] BestFriends, [Skill("Shadow Hound")] ShadowHound, [Skill("Thunder Call")] ThunderCall, [Skill("Last Judge")] LastJudge, [Skill("Raktapaksha")] Raktapaksha, [Skill("Justice")] Justice, [Skill("Trickster")] Trickster2, [Unused] Skill123, [Unused] Skill124, [Skill("Primal Darkness")] PrimalDarkness, // FES, P3P [Skill("Dark Embrace")] DarkEmbrace, // FES, P3P [Skill("Primal Darkness")] PrimalDarkness2, // FES, P3P [Skill("Primal Darkness")] PrimalDarkness3, // FES, P3P [Skill("Heartbreaker")] Heartbreaker, // P3P [Skill("Pierce Attack")] PierceAttack6, // P3P [Skill("Pierce Attack")] PierceAttack7, // P3P [Skill("Giga Spark")] GigaSpark, // P3P [Skill("Sacrifice")] Sacrifice, // P3P [Unused] Skill12E, [Unused] Skill12F, [Skill("Pierce Attack")] PierceAttack2, [Skill("Fire Attack")] FireAttack2, [Skill("Summon")] Summon2, [Skill("Summon")] Summon3, [Skill("Armed&Ready")] ArmedAndReady, [Skill("Sacrifice")] Sacrifice3, [Skill("Arcana Shift")] ArcanaShift, [Skill("Arcana Shift")] ArcanaShift2, [Skill("Arcana Shift")] ArcanaShift3, [Skill("Arcana Shift")] ArcanaShift4, [Skill("Arcana Shift")] ArcanaShift5, [Skill("Arcana Shift")] ArcanaShift6, [Skill("Arcana Shift")] ArcanaShift7, [Skill("Arcana Shift")] ArcanaShift8, [Skill("Arcana Shift")] ArcanaShift9, [Skill("Night Queen")] NightQueen, [Skill("All-Out 2")] AllOut2, [Skill("All-Out 3")] AllOut3, [Skill("All-Out 4")] AllOut4, [Skill("Plume of Dusk")] PlumeofDusk, [Skill("Analyze")] Analyze, [Skill("Oracle")] Oracle, [Skill("Full Analysis")] FullAnalysis, [Skill("Oracle")] Oracle2, [Skill("Oracle")] Oracle3, [Skill("Oracle")] Oracle4, [Skill("Oracle")] Oracle5, [Skill("Oracle")] Oracle6, [Skill("All-Out 2L")] AllOut2L, [Skill("All-Out 3L")] AllOut3L, [Skill("All-Out 4L")] AllOut4L, [Skill("Support Scan")] SupportScan, [Skill("Third Eye")] ThirdEye, [Skill("Mind DJ")] MindDJ, [Skill("DJ Queen")] DJQueen, [Skill("Escape Route")] EscapeRoute, [Skill("Healing Wave")] HealingWave2, [Skill("Summon")] Summon4, [Skill("Orgia Mode")] OrgiaMode, [Skill("Great Seal")] GreatSeal, [Skill("Great Seal")] GreatSeal2, // P3P [Unused] Skill159, [IceSkill("Ice Attack")] IceAttack, // FES, P3P [WindSkill("Wind Attack")] WindAttack, [ThunderSkill("Elec Attack")] ElecAttack, [FireSkill("Fire Attack")] FireAttack3, [Skill("Pierce Attack")] PierceAttack8, [Skill("Strike Attack")] StrikeAttack2, [Skill("Summon")] Summon5, [Skill("Summon")] Summon6, [Skill("Summon")] Summon7, [Skill("Prophecy of Ruin")] ProphecyofRuin, [Skill("Heartbreaker")] Heartbreaker2, [Skill("Unite")] Unite, [Skill("Separate")] Separate, [Skill("Pierce Attack")] PierceAttack4, [Skill("Pierce Attack")] PierceAttack5, [Skill("Samarecarm")] Samarecarm2, [Skill("Samarecarm")] Samarecarm3, [Skill("Charge")] Charge, [Skill("Giga Spark")] GigaSpark2, [Skill("Wheel of Fortune")] WheelofFortune, [Skill("Wheel of Fortune")] WheelofFortune2, [Skill("Wheel of Fortune")] WheelofFortune3, [Skill("Paradigm Shift")] ParadigmShift, [Skill("Wheel of Fortune")] WheelofFortune4, [Skill("Wheel of Fortune")] WheelofFortune5, [Skill("E Attack Up")] EAttackUp, [Skill("P Attack Up")] PAttackUp, [Skill("E Attack Down")] EAttackDown, [Skill("P Attack Down")] PAttackDown, [Skill("E Defense Up")] EDefenseUp, [Skill("P Defense Up")] PDefenseUp, [Skill("E Defense Down")] EDefenseDown, [Skill("P Defense Down")] PDefenseDown, [Skill("E Panic")] EPanic, [Skill("P Panic")] PPanic, [Skill("E Rage")] ERage, [Skill("P Rage")] PRage, [Skill("E Distress")] EDistress, [Skill("P Distress")] PDistress, [Skill("E Fear")] EFear, [Skill("P Fear")] PFear, [Skill("E Damage Low")] EDamageLow, [Skill("P Damage Low")] PDamageLow, [Skill("E Damage Mid")] EDamageMid, [Skill("P Damage Mid")] PDamageMid, [Skill("E Damage High")] EDamageHigh, [Skill("P Damage High")] PDamageHigh, [Skill("E Heal")] EHeal, [Skill("P Heal")] PHeal, [Skill("Almighty Attack")] AlmightyAttack2, [Skill("Arcana Shift")] ArcanaShift10, [Skill("Arcana Shift")] ArcanaShift11, [Skill("Arcana Shift")] ArcanaShift12, [Skill("Arcana Shift")] ArcanaShift13, [Consumable("Band Aid")] BandAid, [Consumable("Medicine")] Medicine, [Consumable("Bead")] Bead, [Consumable("Snuff Soul")] SnuffSoul, [Consumable("Chewing Soul")] ChewingSoul, [Consumable("Precious Egg")] PreciousEgg, [Consumable("Soma")] Soma, [Unused] Skill197, [Unused] Skill198, [Unused] Skill199, [Unused] Skill19A, [Consumable("Muscle Drink")] MuscleDrink, [Consumable("Odd Morsel")] OddMorsel, [Consumable("Rancid Gravy")] RancidGravy, [Consumable("Powerful Drug")] PowerfulDrug, [Consumable("Cold Medicine")] ColdMedicine, [Consumable("Energy Drink")] EnergyDrink, [Unused] Skill1A1, [Unused] Skill1A2, [Unused] Skill1A3, [Unused] Skill1A4, [Unused] Skill1A5, [Unused] Skill1A6, [Unused] Skill1A7, [Unused] Skill1A8, [Unused] Skill1A9, [Unused] Skill1AA, [Unused] Skill1AB, [Unused] Skill1AC, [Unused] Skill1AD, [Unused] Skill1AE, [Unused] Skill1AF, [Unused] Skill1B0, [Unused] Skill1B1, [Unused] Skill1B2, [Unused] Skill1B3, [Unused] Skill1B4, [Unused] Skill1B5, [Skill("Homunculus")] Homunculus, [Skill("Plume of Dusk")] PlumeofDusk2, [Unused] Skill1B8, [Unused] Skill1B9, [Unused] Skill1BA, [Unused] Skill1BB, [Unused] Skill1BC, [Unused] Skill1BD, [Unused] Skill1BE, [Unused] Skill1BF, [Unused] Skill1C0, [Unused] Skill1C1, [Unused] Skill1C2, [Unused] Skill1C3, [Unused] Skill1C4, [Unused] Skill1C5, [Unused] Skill1C6, [Unused] Skill1C7, [Unused] Skill1C8, [Unused] Skill1C9, [Unused] Skill1CA, [Unused] Skill1CB, [Unused] Skill1CC, [Unused] Skill1CD, [Unused] Skill1CE, [Unused] Skill1CF, [AutoSkill("Resist Slash")] ResistSlash, [AutoSkill("Null Slash")] NullSlash, [AutoSkill("Repel Slash")] RepelSlash, [AutoSkill("Absorb Slash")] AbsorbSlash, [AutoSkill("Resist Strike")] ResistStrike, [AutoSkill("Null Strike")] NullStrike, [AutoSkill("Repel Strike")] RepelStrike, [AutoSkill("Absorb Strike")] AbsorbStrike, [AutoSkill("Resist Pierce")] ResistPierce, [AutoSkill("Null Pierce")] NullPierce, [AutoSkill("Repel Pierce")] RepelPierce, [AutoSkill("Absorb Pierce")] AbsorbPierce, [AutoSkill("Resist Fire")] ResistFire, [AutoSkill("Null Fire")] NullFire, [AutoSkill("Repel Fire")] RepelFire, [AutoSkill("Absorb Fire")] AbsorbFire, [AutoSkill("Resist Ice")] ResistIce, [AutoSkill("Null Ice")] NullIce, [AutoSkill("Repel Ice")] RepelIce, [AutoSkill("Absorb Ice")] AbsorbIce, [AutoSkill("Resist Elec")] ResistElec, [AutoSkill("Null Elec")] NullElec, [AutoSkill("Repel Elec")] RepelElec, [AutoSkill("Absorb Elec")] AbsorbElec, [AutoSkill("Resist Wind")] ResistWind, [AutoSkill("Null Wind")] NullWind, [AutoSkill("Repel Wind")] RepelWind, [AutoSkill("Absorb Wind")] AbsorbWind, [AutoSkill("Resist Light")] ResistLight, [AutoSkill("Null Light")] NullLight, [AutoSkill("Repel Light")] RepelLight, [AutoSkill("Resist Dark")] ResistDark, [AutoSkill("Null Dark")] NullDark, [AutoSkill("Repel Dark")] RepelDark, [AutoSkill("Null Charm")] NullCharm, [AutoSkill("Null Distress")] NullDistress, [AutoSkill("Null Panic")] NullPanic, [AutoSkill("Null Fear")] NullFear, [AutoSkill("Null Rage")] NullRage, [AutoSkill("Null Freeze")] NullFreeze, [AutoSkill("Null Shock")] NullShock, [AutoSkill("Null Poison")] NullPoison, [AutoSkill("Unshaken Will")] UnshakenWill, [AutoSkill("Masakados")] Masakados, [AutoSkill("Dodge Slash")] DodgeSlash, [AutoSkill("Evade Slash")] EvadeSlash, [AutoSkill("Dodge Strike")] DodgeStrike, [AutoSkill("Evade Strike")] EvadeStrike, [AutoSkill("Dodge Pierce")] DodgePierce, [AutoSkill("Evade Pierce")] EvadePierce, [AutoSkill("Dodge Fire")] DodgeFire, [AutoSkill("Evade Fire")] EvadeFire, [AutoSkill("Dodge Ice")] DodgeIce, [AutoSkill("Evade Ice")] EvadeIce, [AutoSkill("Dodge Wind")] DodgeWind, [AutoSkill("Evade Wind")] EvadeWind, [AutoSkill("Dodge Elec")] DodgeElec, [AutoSkill("Evade Elec")] EvadeElec, [AutoSkill("Stamina Up 1")] StaminaUp1, // FES, P3P [AutoSkill("Stamina Up 2")] StaminaUp2, // FES, P3P [AutoSkill("Stamina Up 3")] StaminaUp3, // FES, P3P [Unused] Skill20D, [AutoSkill("Premonition")] Premonition, [AutoSkill("Angelic Grace")] AngelicGrace, [AutoSkill("Fire Boost")] FireBoost, [AutoSkill("Fire Amp")] FireAmp, [AutoSkill("Ice Boost")] IceBoost, [AutoSkill("Ice Amp")] IceAmp, [AutoSkill("Elec Boost")] ElecBoost, [AutoSkill("Elec Amp")] ElecAmp, [AutoSkill("Wind Boost")] WindBoost, [AutoSkill("Wind Amp")] WindAmp, [AutoSkill("Fast Retreat")] FastRetreat, [AutoSkill("HP Up 1")] HPUp1, [AutoSkill("HP Up 2")] HPUp2, [AutoSkill("HP Up 3")] HPUp3, [AutoSkill("SP Up 1")] SPUp1, [AutoSkill("SP Up 2")] SPUp2, [AutoSkill("SP Up 3")] SPUp3, [AutoSkill("Raging Tiger")] RagingTiger, [AutoSkill("Counter")] Counter, [AutoSkill("Counterstrike")] Counterstrike, [AutoSkill("High Counter")] HighCounter, [AutoSkill("Regenerate 1")] Regenerate1, [AutoSkill("Regenerate 2")] Regenerate2, [AutoSkill("Regenerate 3")] Regenerate3, [AutoSkill("Invigorate 1")] Invigorate1, [AutoSkill("Invigorate 2")] Invigorate2, [AutoSkill("Invigorate 3")] Invigorate3, [AutoSkill("Growth 1")] Growth1, [AutoSkill("Growth 2")] Growth2, [AutoSkill("Growth 3")] Growth3, [Unused] Skill22C, [AutoSkill("Auto-Tarukaja")] AutoTarukaja, [AutoSkill("Auto-Rakukaja")] AutoRakukaja, [AutoSkill("Auto-Sukukaja")] AutoSukukaja, [AutoSkill("Alertness")] Alertness, [AutoSkill("Sharp Student")] SharpStudent, [AutoSkill("Apt Pupil")] AptPupil, [AutoSkill("Ali Dance")] AliDance, [AutoSkill("Firm Stance")] FirmStance, [AutoSkill("Spell Master")] SpellMaster, [AutoSkill("Arms Master")] ArmsMaster, [AutoSkill("HP Up")] HPUp, [AutoSkill("SP Up")] SPUp, [Unused] Skill239, [AutoSkill("Divine Grace")] DivineGrace, [AutoSkill("Endure")] Endure, [AutoSkill("Enduring Soul")] EnduringSoul, [AutoSkill("Heavy Master")] HeavyMaster, [AutoSkill("Magic Skill Up")] MagicSkillUp, [AutoSkill("Phys Skill Up")] PhysSkillUp, [Unused] Skill240, [Unused] Skill241, [Unused] Skill242, [Unused] Skill243, [AutoSkill("Rosary")] Rosary, [AutoSkill("Prayer Beads")] PrayerBeads, [AutoSkill("Spear Master")] SpearMaster, [AutoSkill("Bow Master")] BowMaster, [AutoSkill("1hSwd Master")] Skill1hSwdMaster, [AutoSkill("2hSwd Master")] Skill2hSwdMaster, [AutoSkill("Fist Master")] FistMaster, [AutoSkill("Survive Light")] SurviveLight, [AutoSkill("Survive Dark")] SurviveDark, [AutoSkill("Auto-Maraku")] AutoMaraku, [AutoSkill("Auto-Mataru")] AutoMataru, [AutoSkill("Auto-Masuku")] AutoMasuku, [AutoSkill("Charm Boost")] CharmBoost, [AutoSkill("Poison Boost")] PoisonBoost, [AutoSkill("Distress Boost")] DistressBoost, [AutoSkill("Panic Boost")] PanicBoost, [AutoSkill("Fear Boost")] FearBoost, [AutoSkill("Rage Boost")] RageBoost, [AutoSkill("Ailment Boost")] AilmentBoost, [AutoSkill("Hama Boost")] HamaBoost, [AutoSkill("Mudo Boost")] MudoBoost, [AutoSkill("Endure Light")] EndureLight, [AutoSkill("Endure Dark")] EndureDark, [AutoSkill("Weapons Master")] WeaponsMaster, // P3P [Unused] Skill25C, [AutoSkill("Cool Breeze")] CoolBreeze, [AutoSkill("Victory Cry")] VictoryCry, [AutoSkill("Spring of Life")] SpringofLife, [AutoSkill("Spring of Life")] SpringofLife2, [Skill("Infinite Endure")] InfiniteEndure, // For Debug in P3 and FES, Infinite Endure in P3P [Skill("Fast-Heal")] FastHeal, // FES, P3P [Skill("Insta-Heal")] InstaHeal, // FES, P3P [AutoSkill("Resist Charm")] ResistCharm, // FES, P3P [AutoSkill("Resist Distress")] ResistDistress, // FES, P3P [AutoSkill("Resist Panic")] ResistPanic, // FES, P3P [AutoSkill("Resist Fear")] ResistFear, // FES, P3P [AutoSkill("Resist Rage")] ResistRage, // FES, P3P [AutoSkill("Resist Freeze")] ResistFreeze, // FES, P3P [AutoSkill("Resist Shock")] ResistShock, // FES, P3P [AutoSkill("Resist Poison")] ResistPoison, // FES, P3P [AutoSkill("HP Up High")] HPUpHigh, // FES, P3P [AutoSkill("SP Up High")] SPUpHigh, // FES, P3P [Skill("High Endure")] HighEndure, // P3P [Skill("Blank")] Blank, // P3P } } ================================================ FILE: KHSave.LibPersona5/KHSave.LibPersona5.csproj ================================================  net6 true PreserveNewest ================================================ FILE: KHSave.LibPersona5/Models/Character.cs ================================================ using KHSave.LibPersona5.Types; using Xe.BinaryMapper; namespace KHSave.LibPersona5.Models { public class Character { [Data(Count = 0x2a8)] public byte[] Data { get; set; } [Data(0)] public short Unknown00 { get; set; } [Data] public short Unknown02 { get; set; } [Data] public int Unknown04 { get; set; } [Data] public int Unknown08 { get; set; } [Data] public int Unknown0c { get; set; } [Data] public int Unknown10 { get; set; } [Data] public int CurrentHp { get; set; } [Data] public int CurrentMp { get; set; } [Data] public int Unknown1c { get; set; } [Data(0x24)] public int Experience { get; set; } [Data(0x4c, Count = 12, Stride = 0x30)] public Persona[] Persona { get; set; } [Data] public Equipment MeleeWeapon { get; set; } [Data] public Equipment Protector { get; set; } [Data] public Equipment Accessory { get; set; } [Data] public Equipment Outfit { get; set; } [Data] public Equipment RangeWeapon { get; set; } } } ================================================ FILE: KHSave.LibPersona5/Models/Persona.cs ================================================ using KHSave.LibPersona5.Types; using Xe.BinaryMapper; namespace KHSave.LibPersona5.Models { public class Persona { [Data(Count = 0x30)] public byte[] Data { get; set; } [Data(0)] public short Flags { get; set; } [Data] public short Id { get; set; } [Data] public byte Level { get; set; } [Data] public byte Unknown05 { get; set; } [Data] public Trait Trait { get; set; } [Data] public int Experience { get; set; } [Data(Count = 8)] public Skill[] Skills { get; set; } [Data] public byte Strength { get; set; } [Data] public byte Magic { get; set; } [Data] public byte Endurance { get; set; } [Data] public byte Agility { get; set; } [Data] public byte Luck { get; set; } } } ================================================ FILE: KHSave.LibPersona5/Persona5Royal.cs ================================================ using KHSave.LibPersona5.Models; using Xe.BinaryMapper; namespace KHSave.LibPersona5 { internal class Persona5Royal : ISavePersona5 { public bool IsRoyal => true; [Data(Count = 256 * 1024)] public byte[] Data { get; set; } [Data(0x0006)] public short CalendarDay1 { get; set; } //[Data(0x14, Count = 12)] public string ProtagonistLastName { get; set; } //[Data(Count = 12)] public string ProtagonistFirstName { get; set; } [Data(0x48, Count = 10, Stride = 0x2a8)] public Character[] Characters { get; set; } [Data(0x2252, Count = 0x500)] public byte[] InventoryCount { get; set; } [Data(0x357c)] public int Money { get; set; } [Data(0x3b4c)] public bool PartyModifierKasumi { get; set; } [Data(0x3b4d)] public bool PartyModifierRyuji { get; set; } [Data] public bool PartyModifierMorgana { get; set; } [Data] public bool PartyModifierAnn { get; set; } [Data] public bool PartyModifierYusuke { get; set; } [Data] public bool PartyModifierMakoto { get; set; } [Data] public bool PartyModifierHaru { get; set; } [Data] public bool PartyModifierFutaba { get; set; } [Data] public bool PartyModifierAkechi { get; set; } [Data(0x41d8, Count = 0x1D0, Stride = 0x30)] public Persona[] Compendium { get; set; } [Data(0xA5F4)] public short CalendarDay2 { get; set; } [Data(0xA5F8)] public short CalendarDay3 { get; set; } [Data(0x13878)] public short RoomCategory { get; set; } [Data(0x1387a)] public short RoomMap { get; set; } [Data(0x13882)] public float PositionX { get; set; } [Data(0x13886)] public float PositionY { get; set; } [Data(0x1388a)] public float PositionZ { get; set; } } } ================================================ FILE: KHSave.LibPersona5/Persona5Vanilla.cs ================================================ using KHSave.LibPersona5.Models; using Xe.BinaryMapper; namespace KHSave.LibPersona5 { internal class Persona5Vanilla : ISavePersona5 { public bool IsRoyal => false; [Data(Count = 192 * 1024)] public byte[] Data { get; set; } [Data(0x0006)] public short CalendarDay1 { get; set; } //[Data(0x14, Count = 12)] public string ProtagonistLastName { get; set; } //[Data(Count = 12)] public string ProtagonistFirstName { get; set; } [Data(0x48, Count = 9, Stride = 0x2a8)] public Character[] Characters { get; set; } [Data(0x2252, Count = 0x500)] public byte[] InventoryCount { get; set; } [Data(0x2d5a)] public int Money { get; set; } [Data(0x318b)] public bool PartyModifierRyuji { get; set; } [Data] public bool PartyModifierMorgana { get; set; } [Data] public bool PartyModifierAnn { get; set; } [Data] public bool PartyModifierYusuke { get; set; } [Data] public bool PartyModifierMakoto { get; set; } [Data] public bool PartyModifierHaru { get; set; } [Data] public bool PartyModifierFutaba { get; set; } [Data] public bool PartyModifierAkechi { get; set; } [Data(0x35d6, Count = 0x1D0, Stride = 0x30)] public Persona[] Compendium { get; set; } [Data(0x92be)] public short CalendarDay2 { get; set; } [Data(0x92c2)] public short CalendarDay3 { get; set; } [Data(0x12512)] public short SocialStatKnowledge { get; set; } [Data] public short SocialStatCharm { get; set; } [Data] public short SocialStatProficency { get; set; } [Data] public short SocialStatGuts { get; set; } [Data] public short SocialStatKindness { get; set; } [Data(0x12524)] public short RoomCategory { get; set; } [Data(0x12526)] public short RoomMap { get; set; } [Data(0x1252c)] public float PositionX { get; set; } [Data(0x12530)] public float PositionY { get; set; } [Data(0x12534)] public float PositionZ { get; set; } // Royal exclusive content public bool PartyModifierKasumi { get => false; set { } } } } ================================================ FILE: KHSave.LibPersona5/Presets.Items.cs ================================================ using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using Xe.BinaryMapper; /// /// A big THANK YOU to TGEnigma, who made this possible: /// https://github.com/TGEnigma/010-Editor-Templates /// namespace KHSave.LibPersona5 { public static partial class Presets { public const int Protagonist = 0x0002; public const int Ryuji = 0x0004; public const int Morgana = 0x0008; public const int Ann = 0x0010; public const int Yusuke = 0x0020; public const int Makoto = 0x0040; public const int Haru = 0x0080; public const int Futaba = 0x0100; public const int Goro = 0x0200; public const int Violet = 0x0400; public const int ArmorEquipMaleMask = Protagonist | Ryuji | Yusuke | Goro; public const int ArmorEquipFemaleMask = Ann | Makoto | Haru | Futaba; public const int ArmorEquipCatMask = Morgana; public const int ArmorEquipUnisexMask = ArmorEquipMaleMask | ArmorEquipFemaleMask; public const int ArmorEquipAllMask = ArmorEquipUnisexMask | ArmorEquipCatMask; public interface IItem { int Id { get; set; } string Name { get; set; } } public class Items { public IEnumerable Accessories { get; set; } public IEnumerable Armors { get; set; } public IEnumerable Consumables { get; set; } public IEnumerable KeyItems { get; set; } public IEnumerable Materials { get; set; } public IEnumerable MeleeWeapons { get; set; } public IEnumerable Outfits { get; set; } public IEnumerable SkillCards { get; set; } public IEnumerable RangeWeapons { get; set; } } public class Accessory : IItem { public int Id { get; set; } public string Name { get; set; } [Data(Count = 0x40)] public byte[] Ignore { get; set; } } public class Armor : IItem { public int Id { get; set; } public string Name { get; set; } [Data] public int Unk00 { get; set; } [Data] public short Unk04 { get; set; } [Data] public short Unk06 { get; set; } [Data] public short Unk08 { get; set; } [Data] public short EquippableFlags { get; set; } [Data(Count = 0x24)] public byte[] Ignore { get; set; } } public class Consumable : IItem { public int Id { get; set; } public string Name { get; set; } } public class KeyItem : IItem { public int Id { get; set; } public string Name { get; set; } } public class Material : IItem { public int Id { get; set; } public string Name { get; set; } } public class MeleeWeapon : IItem { public int Id { get; set; } public string Name { get; set; } [Data] public int Unk00 { get; set; } [Data] public short Unk04 { get; set; } [Data] public short Unk06 { get; set; } [Data] public short Unk08 { get; set; } [Data] public short EquippableFlags { get; set; } [Data(Count = 0x24)] public byte[] Ignore { get; set; } } public class Outfit : IItem { public int Id { get; set; } public string Name { get; set; } } public class SkillCard : IItem { public int Id { get; set; } public string Name { get; set; } } public class RangeWeapon : IItem { public int Id { get; set; } public string Name { get; set; } [Data] public int Unk00 { get; set; } [Data] public short Unk04 { get; set; } [Data] public short Unk06 { get; set; } [Data] public short Unk08 { get; set; } [Data] public short EquippableFlags { get; set; } [Data(Count = 0x28)] public byte[] Ignore { get; set; } } public static Items GetItems(bool isRoyal) { using (var stream = File.OpenRead(GetResourceFileName("Item.bin", isRoyal))) { return new Items { Accessories = GetItems(stream, 0x40, "AccessoryNames", isRoyal), Armors = GetItems(stream, 0x30, "ArmorNames", isRoyal), Consumables = GetItems(stream, 0x30, "ConsumableItemNames", isRoyal), KeyItems = GetItems(stream, 0xc, "KeyItemNames", isRoyal), Materials = GetItems(stream, 0x2c, "MaterialNames", isRoyal), MeleeWeapons = GetItems(stream, 0x30, "MeleeWeaponNames", isRoyal), Outfits = GetItems(stream, 0x20, "OutfitNames", isRoyal), SkillCards = GetItems(stream, 0x18, "SkillCardNames", isRoyal), RangeWeapons = GetItems(stream, 0x34, "RangedWeaponNames", isRoyal), }; } } private static IEnumerable GetItems( Stream stream, int stride, string namesSource, bool isRoyal) where TItem : class, IItem { var length = stream.ReadInt32BE(); var count = length / stride; var startPosition = stream.Position; var names = File.ReadAllLines(GetResourceFileName($"{namesSource}.txt", isRoyal)); var items = Enumerable.Range(0, count) .Select(i => SavePersona5.Mapper.ReadObject(stream)) .ToList(); for (var i = 0; i < count; i++) { var item = items[i]; item.Id = i; item.Name = i < names.Length ? names[i] : $"##{i}"; } var nextPosition = startPosition + length; while ((nextPosition % 16) != 0) nextPosition++; stream.Position = nextPosition; return items; } } } ================================================ FILE: KHSave.LibPersona5/Presets.Persona.cs ================================================ using KHSave.LibPersona5.Types; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using Xe.BinaryMapper; namespace KHSave.LibPersona5 { public static partial class Presets { public class Persona { [Data] public byte Unk00 { get; set; } [Data] public byte Unk01 { get; set; } [Data] public ArcanaType Arcana { get; set; } [Data] public byte Level { get; set; } [Data] public byte Strength { get; set; } [Data] public byte Magic { get; set; } [Data] public byte Endurance { get; set; } [Data] public byte Agility { get; set; } [Data] public byte Luck { get; set; } [Data] public byte Unk09 { get; set; } [Data] public byte Unk0a { get; set; } [Data] public byte Unk0b { get; set; } [Data] public byte Unk0c { get; set; } [Data] public byte Unk0d { get; set; } public int Id { get; set; } public string Name { get; set; } public List Skills { get; set; } public override string ToString() => $"{Unk00:X02} {Unk01:X02} {Level:D02} {Name}"; } private class PersonaSkillset { [Data] public ushort Unk00 { get; set; } [Data] public ushort Unk02 { get; set; } [Data] public ushort Unk04 { get; set; } [Data(Count = 16)] public PersonaSkill[] Skills { get; set; } } private class PersonaSkill { [Data] public byte Level { get; set; } [Data] public byte Enabled { get; set; } [Data] public ushort SkillId { get; set; } } private static string GetResourceFileName(string fileName, bool isRoyal) => Path.Combine( AppContext.BaseDirectory, $"Resources/Persona5/{(isRoyal ? "Royal" : "Vanilla")}_{fileName}"); public static List GetPersona(bool isRoyal) { var names = File.ReadAllLines(GetResourceFileName("Demon.txt", isRoyal)); using (var stream = File.OpenRead(GetResourceFileName("Demon.bin", isRoyal))) { var length = stream.ReadInt32BE(); var count = length / 14; var persona = Enumerable.Range(0, count) .Select(_ => SavePersona5.Mapper.ReadObject(stream)) .ToList(); while ((stream.Position % 16) != 0) stream.Position++; length = (stream.ReadByte() << 24) | (stream.ReadByte() << 16) | (stream.ReadByte() << 8) | (stream.ReadByte() << 0); count = length / 70; var skillSets = Enumerable.Range(0, count) .Select(_ => SavePersona5.Mapper.ReadObject(stream)) .ToList(); count = Math.Min(count, persona.Count); for (var i = 0; i < count; i++) { persona[i].Id = i; persona[i].Name = i < names.Length ? names[i] : "Unused"; persona[i].Skills = skillSets[i].Skills .Where(x => x.Enabled > 0) .Select(x => x.SkillId) .ToList(); } return persona .Where(x => (x.Unk01 & 8) != 8) .ToList(); } } } } ================================================ FILE: KHSave.LibPersona5/Presets.cs ================================================ using System.Collections.Generic; using System.IO; namespace KHSave.LibPersona5 { public static partial class Presets { public class Field { public int Category { get; set; } public int Map { get; set; } public bool Vanilla { get; set; } public bool Royal { get; set; } public string Description { get; set; } } private static int ReadInt32BE(this Stream stream) => (stream.ReadByte() << 24) | (stream.ReadByte() << 16) | (stream.ReadByte() << 8) | (stream.ReadByte() << 0); private static Field FieldAll(int category, int map, string description) => new Field { Category = category, Map = map, Vanilla = true, Royal = true, Description = description }; private static Field FieldVanilla(int category, int map, string description) => new Field { Category = category, Map = map, Vanilla = true, Royal = false, Description = description }; private static Field FieldRoyal(int category, int map, string description) => new Field { Category = category, Map = map, Vanilla = false, Royal = true, Description = description }; public static List Fields = new List { FieldAll ( 0, 2, "Title screen"), FieldAll ( 0,100, "Template map"), FieldAll ( 1, 1, "Shibuya - Station Square"), FieldAll ( 1, 2, "Shibuya - Underground Walkway"), FieldAll ( 1, 3, "Shibuya - Central Street"), FieldAll ( 1, 4, "Shibuya - Underground Mall"), FieldAll ( 1, 5, "Teikyu Building - Ginza Line Gate"), FieldAll ( 1, 6, "Teikyu Building - Meeting point"), FieldAll ( 1, 7, "FREEZE"), FieldAll ( 1, 11, "Shibuya - Station Square (cutscene"), FieldAll ( 1, 13, "Shibuya - Central Street #1 (cutscene)"), FieldAll ( 1,103, "Shibuya - Central Street #2 (cutscene)"), FieldAll ( 1,203, "Shibuya - Central Street #3 (cutscene)"), FieldAll ( 1,204, "Shibuya - Central Street #4 (cutscene)"), FieldAll ( 2, 1, "Shujin Academy - School gate"), FieldAll ( 2, 2, "Shujin Academy - Classroom Building"), FieldAll ( 2, 3, "Shujin Academy - Practice Building"), FieldAll ( 2, 4, "Shujin Academy - Courtyard"), FieldAll ( 2, 5, "Shujin Academy - Rooftop"), FieldAll ( 2, 6, "Shujin Academy - Classroom"), FieldAll ( 2, 7, "Shujin Academy - PE Faculty Office"), FieldAll ( 2, 8, "Shujin Academy - Library"), FieldAll ( 2, 9, "Shujin Academy - Gymnasium"), FieldAll ( 2, 10, "Shujin Academy - Faculty Room"), FieldAll ( 2, 11, "Shujin Academy - Generic room (cutscene)"), FieldAll ( 2, 12, "Shujin Academy - Cafeteria"), FieldAll ( 2, 13, "Shujin Academy - Way to school (cutscene)"), FieldAll ( 2, 14, "Shujin Academy - Celebration (cutscene)"), FieldAll ( 2, 20, "Shujin Academy - Classroom Building (cutscene)"), FieldAll ( 2, 21, "Shujin Academy - Courtyard (cutscene)"), FieldAll ( 2,102, "Shujin Academy - Classroom Building 2F (cutscene)"), FieldAll ( 3, 2, "Cafe Leblanc"), FieldAll ( 3, 10, "Shibuya - Convenience Store"), FieldAll ( 3,102, "Cafe Leblanc (cutscene)"), FieldAll ( 4, 5, "Teikyu Building - Maradame's Exhibition"), FieldAll ( 5, 7, "FREEZE"), FieldAll ( 6, 1, "Shinjuku - Red-light District"), FieldAll ( 6, 11, "Shinjuku (cutscene)"), FieldAll ( 6, 12, "FREEZE"), FieldAll ( 7, 1, ""), FieldAll ( 7, 11, ""), FieldAll ( 8, 1, ""), FieldAll ( 8, 2, ""), FieldAll ( 9, 1, ""), FieldAll ( 9, 2, ""), FieldAll ( 9, 3, ""), FieldAll ( 9, 4, ""), FieldAll ( 9, 5, ""), FieldAll ( 9,102, ""), FieldAll ( 10, 1, ""), FieldAll ( 10, 2, ""), FieldAll ( 10, 3, ""), FieldAll ( 10, 4, ""), FieldAll ( 10, 5, ""), FieldAll ( 10, 6, ""), FieldVanilla( 10, 7, ""), FieldAll ( 10, 8, ""), FieldAll ( 10, 9, ""), FieldAll ( 10, 10, ""), FieldAll ( 10, 11, ""), FieldAll ( 10, 12, ""), FieldAll ( 10, 13, ""), FieldAll ( 10, 15, ""), FieldAll ( 10, 16, ""), FieldAll ( 10, 17, ""), FieldAll ( 10, 18, ""), FieldAll ( 10, 19, ""), FieldAll ( 10, 20, ""), FieldAll ( 10, 21, ""), FieldRoyal ( 10, 22, ""), FieldVanilla( 10, 30, ""), FieldVanilla( 10, 31, ""), FieldVanilla( 10, 32, ""), FieldAll ( 10,103, ""), FieldAll ( 10,130, ""), FieldVanilla( 11, 1, ""), FieldVanilla( 11, 2, ""), FieldAll ( 11, 3, ""), FieldAll ( 11, 4, ""), FieldAll ( 11, 6, ""), FieldAll ( 12, 1, ""), FieldAll ( 12, 2, ""), FieldAll ( 12, 3, ""), FieldAll ( 12, 5, ""), FieldAll ( 12, 6, ""), FieldAll ( 12, 7, ""), FieldAll ( 12, 8, ""), FieldAll ( 12, 9, ""), FieldAll ( 12, 10, ""), FieldAll ( 12, 11, ""), FieldAll ( 12, 12, ""), FieldAll ( 12, 13, ""), FieldAll ( 12, 14, ""), FieldAll ( 12, 15, ""), FieldAll ( 12, 16, ""), FieldAll ( 12, 17, ""), FieldAll ( 12, 18, ""), FieldAll ( 12, 20, ""), FieldAll ( 12, 21, ""), FieldAll ( 12, 22, ""), FieldAll ( 12, 23, ""), FieldAll ( 12, 24, ""), FieldAll ( 12, 25, ""), FieldAll ( 12, 26, ""), FieldRoyal ( 12, 27, ""), FieldRoyal ( 12, 28, ""), FieldRoyal ( 12, 29, ""), FieldRoyal ( 12, 30, ""), FieldRoyal ( 12, 31, ""), FieldRoyal ( 12, 38, ""), FieldRoyal ( 12, 39, ""), FieldRoyal ( 12, 40, ""), FieldRoyal ( 12, 41, ""), FieldRoyal ( 12, 42, ""), FieldRoyal ( 12, 43, ""), FieldRoyal ( 12, 44, ""), FieldRoyal ( 12, 45, ""), FieldRoyal ( 12, 46, ""), FieldRoyal ( 12, 47, ""), FieldRoyal ( 12, 49, ""), FieldAll ( 12,103, ""), FieldAll ( 13, 1, ""), FieldAll ( 13, 2, ""), FieldAll ( 13, 3, ""), FieldAll ( 13, 4, ""), FieldAll ( 13, 5, ""), FieldAll ( 13, 6, ""), FieldAll ( 13, 8, ""), FieldAll ( 13, 9, ""), FieldAll ( 13, 10, ""), FieldAll ( 13, 11, ""), FieldAll ( 13, 12, ""), FieldAll ( 13, 13, ""), FieldAll ( 13, 14, ""), FieldAll ( 13, 15, ""), FieldAll ( 13, 16, ""), FieldAll ( 13, 17, ""), FieldAll ( 13, 18, ""), FieldAll ( 13, 19, ""), FieldAll ( 13, 20, ""), FieldAll ( 13, 21, ""), FieldAll ( 13, 22, ""), FieldRoyal ( 13, 23, ""), FieldRoyal ( 13, 24, ""), FieldRoyal ( 13, 25, ""), FieldRoyal ( 13, 26, ""), FieldRoyal ( 13, 27, ""), FieldAll ( 14, 1, ""), FieldAll ( 14, 2, ""), FieldAll ( 14, 3, ""), FieldAll ( 14, 4, ""), FieldAll ( 14, 5, ""), FieldAll ( 14, 6, ""), FieldAll ( 15, 1, ""), FieldAll ( 20, 1, ""), FieldAll ( 20, 2, ""), FieldAll ( 20, 3, ""), FieldAll ( 20, 4, ""), FieldAll ( 20, 5, ""), FieldAll ( 20, 6, ""), FieldAll ( 20, 7, ""), FieldAll ( 20, 8, ""), FieldAll ( 20, 9, ""), FieldAll ( 20, 10, ""), FieldAll ( 20, 11, ""), FieldAll ( 20, 12, ""), FieldAll ( 20, 13, ""), FieldAll ( 20, 14, ""), FieldAll ( 20, 20, ""), FieldAll ( 20, 21, ""), FieldAll ( 20, 22, ""), FieldRoyal ( 20, 23, ""), FieldRoyal ( 20, 24, ""), FieldAll ( 21, 1, ""), FieldRoyal ( 22, 1, ""), FieldVanilla( 30, 1, ""), FieldAll ( 50, 10, ""), FieldAll ( 50, 11, ""), FieldAll ( 50, 20, ""), FieldAll ( 50, 21, ""), FieldAll ( 50, 30, ""), FieldRoyal ( 50, 31, ""), FieldRoyal ( 50, 32, ""), FieldAll ( 51, 10, ""), FieldAll ( 51, 20, ""), FieldAll ( 51, 21, ""), FieldVanilla( 51, 22, ""), FieldAll ( 51, 30, ""), FieldAll ( 51, 31, ""), FieldAll ( 51, 32, ""), FieldAll ( 51, 33, ""), FieldAll ( 51, 40, ""), FieldAll ( 51, 41, ""), FieldAll ( 51, 42, ""), FieldAll ( 51, 43, ""), FieldAll ( 51, 50, ""), FieldAll ( 51, 51, ""), FieldAll ( 51, 52, ""), FieldRoyal ( 51, 53, ""), FieldAll ( 51, 60, ""), FieldAll ( 51, 61, ""), FieldRoyal ( 51, 52, ""), FieldAll ( 51, 70, ""), FieldVanilla( 51, 80, ""), FieldAll ( 51, 90, ""), FieldAll ( 51,100, ""), FieldAll ( 51,110, ""), FieldAll ( 51,120, ""), FieldAll ( 51,130, ""), FieldAll ( 51,140, ""), FieldAll ( 51,150, ""), FieldAll ( 52, 10, ""), FieldAll ( 52, 11, ""), FieldAll ( 52, 20, ""), FieldAll ( 52, 21, ""), FieldAll ( 52, 22, ""), FieldAll ( 52, 30, ""), FieldAll ( 52, 31, ""), FieldAll ( 52, 32, ""), FieldAll ( 52, 40, ""), FieldAll ( 52, 41, ""), FieldAll ( 52, 42, ""), FieldAll ( 52, 43, ""), FieldAll ( 52, 44, ""), FieldAll ( 52, 45, ""), FieldAll ( 52, 50, ""), FieldVanilla( 52, 51, ""), FieldVanilla( 52, 52, ""), FieldAll ( 52, 53, ""), FieldRoyal ( 52, 55, ""), FieldAll ( 52, 70, ""), FieldVanilla( 52, 71, ""), FieldAll ( 52, 80, ""), FieldAll ( 52, 90, ""), FieldAll ( 53, 10, ""), FieldAll ( 53, 11, ""), FieldAll ( 53, 12, ""), FieldAll ( 53, 20, ""), FieldAll ( 53, 21, ""), FieldAll ( 53, 22, ""), FieldAll ( 53, 30, ""), FieldAll ( 53, 31, ""), FieldAll ( 53, 33, ""), FieldAll ( 53, 34, ""), FieldRoyal ( 53, 35, ""), FieldAll ( 53, 50, ""), FieldAll ( 53, 51, ""), FieldAll ( 53, 52, ""), FieldAll ( 53, 60, ""), FieldAll ( 53, 61, ""), FieldAll ( 53, 62, ""), FieldAll ( 53, 63, ""), FieldAll ( 53, 64, ""), FieldAll ( 53, 70, ""), FieldAll ( 53, 71, ""), FieldAll ( 53, 72, ""), FieldRoyal ( 53, 73, ""), FieldAll ( 53, 80, ""), FieldAll ( 53, 81, ""), FieldAll ( 53, 82, ""), FieldAll ( 53, 83, ""), FieldRoyal ( 53, 84, ""), FieldAll ( 53, 90, ""), FieldAll ( 53, 91, ""), FieldAll ( 53, 92, ""), FieldAll ( 53, 93, ""), FieldRoyal ( 53, 94, ""), FieldAll ( 53,110, ""), FieldAll ( 53,111, ""), FieldAll ( 54, 10, ""), FieldAll ( 54, 11, ""), FieldAll ( 54, 20, ""), FieldAll ( 54, 21, ""), FieldAll ( 54, 22, ""), FieldAll ( 54, 30, ""), FieldAll ( 54, 31, ""), FieldAll ( 54, 32, ""), FieldAll ( 54, 33, ""), FieldRoyal ( 54, 34, ""), FieldAll ( 54, 50, ""), FieldAll ( 54, 51, ""), FieldAll ( 54, 52, ""), FieldRoyal ( 54, 53, ""), FieldRoyal ( 54, 54, ""), FieldRoyal ( 54, 55, ""), FieldAll ( 54, 70, ""), FieldAll ( 54, 71, ""), FieldAll ( 54, 80, ""), FieldAll ( 54, 81, ""), FieldAll ( 54, 90, ""), FieldAll ( 54, 91, ""), FieldAll ( 54, 92, ""), FieldRoyal ( 54, 93, ""), FieldAll ( 54,100, ""), FieldAll ( 54,110, ""), FieldAll ( 54,111, ""), FieldRoyal ( 54,112, ""), FieldVanilla( 54,120, ""), FieldVanilla( 54,121, ""), FieldVanilla( 54,130, ""), FieldVanilla( 54,131, ""), FieldVanilla( 54,132, ""), FieldAll ( 54,140, ""), FieldAll ( 54,141, ""), FieldAll ( 54,150, ""), FieldAll ( 55, 10, ""), FieldAll ( 55, 11, ""), FieldAll ( 55, 20, ""), FieldAll ( 55, 21, ""), FieldAll ( 55, 22, ""), FieldAll ( 55, 23, ""), FieldAll ( 55, 24, ""), FieldAll ( 55, 30, ""), FieldAll ( 55, 31, ""), FieldAll ( 55, 32, ""), FieldAll ( 55, 33, ""), FieldRoyal ( 55, 34, ""), FieldAll ( 55, 40, ""), FieldAll ( 55, 41, ""), FieldAll ( 55, 42, ""), FieldAll ( 55, 50, ""), FieldAll ( 55, 60, ""), FieldAll ( 55, 61, ""), FieldAll ( 55, 62, ""), FieldRoyal ( 55, 63, ""), FieldAll ( 55, 70, ""), FieldAll ( 55, 71, ""), FieldAll ( 55, 72, ""), FieldAll ( 55, 73, ""), FieldAll ( 55, 80, ""), FieldAll ( 55, 90, ""), FieldAll ( 55, 91, ""), FieldAll ( 55,100, ""), FieldVanilla( 55,120, ""), FieldAll ( 55,130, ""), FieldAll ( 55,131, ""), FieldAll ( 55,132, ""), FieldAll ( 55,133, ""), FieldAll ( 55,220, ""), FieldAll ( 56, 1, ""), FieldAll ( 56, 10, ""), FieldAll ( 56, 20, ""), FieldAll ( 56, 21, ""), FieldAll ( 56, 30, ""), FieldAll ( 56, 31, ""), FieldAll ( 56, 32, ""), FieldRoyal ( 56, 33, ""), FieldAll ( 56, 40, ""), FieldAll ( 56, 41, ""), FieldAll ( 56, 42, ""), FieldAll ( 56, 43, ""), FieldAll ( 56, 44, ""), FieldRoyal ( 56, 45, ""), FieldRoyal ( 56, 46, ""), FieldAll ( 56, 50, ""), FieldAll ( 56, 51, ""), FieldAll ( 56, 52, ""), FieldRoyal ( 56, 53, ""), FieldAll ( 56, 60, ""), FieldAll ( 56, 61, ""), FieldAll ( 56, 62, ""), FieldRoyal ( 56, 63, ""), FieldAll ( 56, 70, ""), FieldAll ( 56, 71, ""), FieldAll ( 56, 72, ""), FieldRoyal ( 56, 73, ""), FieldAll ( 56, 80, ""), FieldAll ( 56, 81, ""), FieldVanilla( 56, 82, ""), FieldAll ( 56, 90, ""), FieldAll ( 56, 91, ""), FieldAll ( 56, 92, ""), FieldAll ( 56, 93, ""), FieldAll ( 56,100, ""), FieldAll ( 56,101, ""), FieldAll ( 56,110, ""), FieldAll ( 56,120, ""), FieldAll ( 56,130, ""), FieldAll ( 56,131, ""), FieldAll ( 56,132, ""), FieldAll ( 56,133, ""), FieldAll ( 56,134, ""), FieldRoyal ( 56,135, ""), FieldAll ( 57, 1, ""), FieldAll ( 57, 10, ""), FieldAll ( 57, 40, ""), FieldAll ( 57, 41, ""), FieldAll ( 57, 50, ""), FieldAll ( 57, 51, ""), FieldAll ( 57, 52, ""), FieldAll ( 57, 53, ""), FieldRoyal ( 57, 54, ""), FieldAll ( 57, 60, ""), FieldAll ( 57, 72, ""), FieldAll ( 57, 80, ""), FieldAll ( 57, 81, ""), FieldAll ( 57, 82, ""), FieldRoyal ( 57, 83, ""), FieldAll ( 57, 90, ""), FieldAll ( 57, 91, ""), FieldRoyal ( 57, 92, ""), FieldAll ( 57,100, ""), FieldAll ( 57,110, ""), FieldAll ( 57,111, ""), FieldAll ( 57,120, ""), FieldAll ( 57,121, ""), FieldAll ( 57,122, ""), FieldAll ( 57,130, ""), FieldAll ( 57,131, ""), FieldAll ( 57,150, ""), FieldAll ( 57,151, ""), FieldAll ( 57,160, ""), FieldAll ( 57,161, ""), FieldAll ( 57,180, ""), FieldAll ( 59, 1, ""), FieldAll ( 59, 10, ""), FieldAll ( 59, 11, ""), FieldAll ( 59, 20, ""), FieldAll ( 59, 30, ""), FieldAll ( 59, 31, ""), FieldAll ( 59, 32, ""), FieldAll ( 59, 60, ""), FieldAll ( 59, 61, ""), FieldAll ( 59, 62, ""), FieldAll ( 59, 70, ""), FieldAll ( 59, 71, ""), FieldAll ( 59, 80, ""), FieldAll ( 59, 90, ""), FieldAll ( 59,100, ""), FieldAll ( 59,101, ""), FieldAll ( 59,110, ""), FieldAll ( 59,111, ""), FieldAll ( 59,112, ""), FieldRoyal ( 59,113, ""), FieldRoyal ( 59,114, ""), FieldAll ( 59,120, ""), FieldAll ( 59,121, ""), FieldAll ( 59,130, ""), FieldAll ( 59,131, ""), FieldAll ( 59,132, ""), FieldAll ( 59,170, ""), FieldAll ( 59,180, ""), FieldAll ( 59,181, ""), FieldAll ( 59,182, ""), FieldAll ( 59,183, ""), FieldAll ( 59,184, ""), FieldAll ( 59,185, ""), FieldAll ( 59,186, ""), FieldAll ( 59,187, ""), FieldRoyal ( 59,188, ""), FieldAll ( 59,190, ""), FieldAll ( 59,191, ""), FieldAll ( 59,192, ""), FieldAll ( 59,193, ""), FieldAll ( 59,194, ""), FieldAll ( 59,195, ""), FieldAll ( 59,196, ""), FieldVanilla( 59,197, ""), FieldVanilla( 59,198, ""), FieldVanilla( 59,199, ""), FieldAll ( 59,200, ""), FieldAll ( 59,201, ""), FieldAll ( 59,202, ""), FieldAll ( 59,203, ""), FieldAll ( 59,204, ""), FieldAll ( 59,205, ""), FieldAll ( 59,206, ""), FieldAll ( 59,207, ""), FieldVanilla( 59,208, ""), FieldVanilla( 59,209, ""), FieldVanilla( 59,210, ""), FieldAll ( 59,220, ""), FieldAll ( 59,221, ""), FieldAll ( 59,222, ""), FieldAll ( 59,223, ""), FieldAll ( 59,224, ""), FieldAll ( 59,225, ""), FieldAll ( 59,226, ""), FieldAll ( 60, 10, ""), FieldAll ( 60, 11, ""), FieldAll ( 60, 12, ""), FieldAll ( 60, 20, ""), FieldAll ( 60, 21, ""), FieldAll ( 60, 30, ""), FieldAll ( 60, 31, ""), FieldAll ( 60, 40, ""), FieldAll ( 60, 41, ""), FieldAll ( 60, 42, ""), FieldAll ( 60, 50, ""), FieldAll ( 60, 60, ""), FieldAll ( 60, 61, ""), FieldAll ( 60,100, ""), FieldAll ( 60,101, ""), FieldAll ( 60,102, ""), FieldAll ( 60,103, ""), FieldRoyal ( 60,104, ""), FieldAll ( 60,110, ""), FieldAll ( 60,111, ""), FieldAll ( 60,112, ""), FieldAll ( 61, 11, ""), FieldAll ( 61, 12, ""), FieldAll ( 61, 20, ""), FieldAll ( 61, 21, ""), FieldAll ( 61, 22, ""), FieldRoyal ( 61, 23, ""), FieldAll ( 61, 30, ""), FieldAll ( 61, 31, ""), FieldAll ( 61, 32, ""), FieldAll ( 61, 40, ""), FieldAll ( 61, 41, ""), FieldAll ( 61, 42, ""), FieldAll ( 61, 50, ""), FieldAll ( 61, 51, ""), FieldAll ( 61, 52, ""), FieldAll ( 61, 53, ""), FieldAll ( 61, 60, ""), FieldAll ( 61, 61, ""), FieldAll ( 61, 62, ""), FieldAll ( 61, 70, ""), FieldAll ( 61, 80, ""), FieldAll ( 61, 81, ""), FieldAll ( 61, 82, ""), FieldAll ( 61, 90, ""), FieldAll ( 61, 91, ""), FieldAll ( 61,100, ""), FieldAll ( 61,101, ""), FieldAll ( 61,102, ""), FieldRoyal ( 61,103, ""), FieldAll ( 61,110, ""), FieldRoyal ( 62, 1, ""), FieldRoyal ( 62, 10, ""), FieldRoyal ( 62, 11, ""), FieldRoyal ( 62, 20, ""), FieldRoyal ( 62, 21, ""), FieldRoyal ( 62, 22, ""), FieldRoyal ( 62, 23, ""), FieldRoyal ( 62, 30, ""), FieldRoyal ( 62, 31, ""), FieldRoyal ( 62, 32, ""), FieldRoyal ( 62, 40, ""), FieldRoyal ( 62, 41, ""), FieldRoyal ( 62, 42, ""), FieldRoyal ( 62, 43, ""), FieldRoyal ( 62, 50, ""), FieldRoyal ( 62, 51, ""), FieldRoyal ( 62, 52, ""), FieldRoyal ( 62, 53, ""), FieldRoyal ( 62, 54, ""), FieldRoyal ( 62, 55, ""), FieldRoyal ( 62, 56, ""), FieldRoyal ( 62, 70, ""), FieldRoyal ( 62, 71, ""), FieldRoyal ( 62, 72, ""), FieldRoyal ( 62, 73, ""), FieldRoyal ( 62, 74, ""), FieldRoyal ( 62, 75, ""), FieldRoyal ( 62, 90, ""), FieldRoyal ( 62, 91, ""), FieldRoyal ( 62, 92, ""), FieldRoyal ( 62, 93, ""), FieldRoyal ( 62,100, ""), FieldRoyal ( 62,110, ""), FieldRoyal ( 62,111, ""), FieldRoyal ( 62,112, ""), FieldRoyal ( 62,113, ""), FieldRoyal ( 62,114, ""), FieldRoyal ( 62,120, ""), FieldRoyal ( 62,121, ""), FieldRoyal ( 62,122, ""), FieldRoyal ( 62,123, ""), FieldRoyal ( 62,124, ""), FieldRoyal ( 62,125, ""), FieldRoyal ( 62,126, ""), FieldRoyal ( 62,127, ""), FieldRoyal ( 62,140, ""), FieldRoyal ( 62,141, ""), FieldRoyal ( 62,142, ""), FieldRoyal ( 62,150, ""), FieldRoyal ( 62,151, ""), FieldRoyal ( 62,152, ""), FieldRoyal ( 62,153, ""), FieldRoyal ( 62,154, ""), FieldRoyal ( 62,160, ""), FieldRoyal ( 62,161, ""), FieldRoyal ( 62,162, ""), FieldRoyal ( 62,163, ""), FieldRoyal ( 62,190, ""), FieldRoyal ( 62,221, ""), FieldVanilla(150, 1, "Nijima Palace (intro) - Entrance"), FieldAll (150, 2, "Nijima Palace (intro) - Escape"), FieldAll (150, 3, "Nijima Palace (intro) - Escape 2"), FieldAll (151, 1, "Kamoshida Palace - Entrance"), FieldAll (151, 2, "Kamoshida Palace - Central Hall"), FieldAll (151, 3, ""), FieldAll (151, 4, ""), FieldAll (151, 5, ""), FieldAll (151, 6, ""), FieldAll (151, 7, ""), FieldVanilla(151, 8, "Kamoshida Palace - Unused map"), FieldAll (151, 9, ""), FieldAll (151, 10, ""), FieldAll (151, 11, ""), FieldAll (151, 12, ""), FieldAll (151, 13, ""), FieldAll (151, 14, ""), FieldAll (151, 15, ""), FieldAll (151, 16, ""), FieldAll (151, 17, ""), FieldAll (151, 19, ""), FieldAll (151, 51, ""), FieldAll (152, 1, "Kamoshida Palace - Prison"), FieldAll (152, 2, "Kamoshida Palace - Underground Prison"), FieldAll (152, 4, ""), FieldAll (152, 5, ""), FieldAll (152, 6, ""), FieldAll (152, 51, ""), FieldAll (152, 52, ""), FieldAll (152, 53, ""), FieldAll (153, 1, "Madarame Palace - Entrance"), FieldAll (153, 2, ""), FieldAll (153, 3, ""), FieldAll (153, 5, ""), FieldAll (153, 6, ""), FieldAll (153, 7, ""), FieldAll (153, 8, ""), FieldAll (153, 9, ""), FieldAll (153, 11, ""), FieldAll (153, 12, ""), FieldAll (153, 51, ""), FieldAll (154, 1, "Kaneshido Palace - Entrance"), FieldAll (154, 2, ""), FieldAll (154, 3, ""), FieldAll (154, 5, ""), FieldAll (154, 7, ""), FieldAll (154, 8, ""), FieldAll (154, 9, ""), FieldAll (154, 10, ""), FieldAll (154, 11, ""), FieldVanilla(154, 12, "Kaneshido Palace - Unused beta map"), FieldVanilla(154, 13, ""), FieldAll (154, 14, ""), FieldAll (154, 15, ""), FieldAll (154, 16, ""), FieldAll (154, 51, ""), FieldAll (155, 1, ""), FieldAll (155, 2, ""), FieldAll (155, 3, ""), FieldAll (155, 4, ""), FieldAll (155, 5, ""), FieldAll (155, 6, ""), FieldAll (155, 7, ""), FieldAll (155, 8, ""), FieldAll (155, 9, ""), FieldAll (155, 10, ""), FieldAll (155, 11, ""), FieldVanilla(155, 12, ""), FieldAll (155, 13, ""), FieldAll (155, 51, ""), FieldAll (156, 1, "Okumura Palace - Entrance"), FieldAll (156, 2, ""), FieldAll (156, 3, ""), FieldAll (156, 4, ""), FieldAll (156, 5, ""), FieldAll (156, 6, ""), FieldAll (156, 7, ""), FieldAll (156, 8, ""), FieldAll (156, 9, ""), FieldAll (156, 10, ""), FieldAll (156, 11, ""), FieldAll (156, 12, ""), FieldAll (156, 13, ""), FieldVanilla(156, 14, ""), FieldVanilla(156, 15, ""), FieldAll (156, 51, ""), FieldAll (157, 1, "Nijima Palace - Entrance"), FieldVanilla(157, 3, ""), FieldAll (157, 4, ""), FieldAll (157, 5, ""), FieldAll (157, 6, ""), FieldAll (157, 7, ""), FieldAll (157, 8, ""), FieldAll (157, 9, ""), FieldAll (157, 10, ""), FieldAll (157, 11, ""), FieldAll (157, 12, ""), FieldAll (157, 13, ""), FieldAll (157, 15, ""), FieldAll (157, 16, ""), FieldAll (157, 18, ""), FieldAll (157, 51, ""), FieldAll (157, 52, ""), FieldAll (159, 1, "Shido Palace - Entrance"), FieldAll (159, 2, ""), FieldAll (159, 3, ""), FieldAll (159, 4, ""), FieldAll (159, 6, ""), FieldAll (159, 7, ""), FieldAll (159, 8, ""), FieldAll (159, 9, ""), FieldAll (159, 10, ""), FieldAll (159, 11, ""), FieldAll (159, 12, ""), FieldAll (159, 13, ""), FieldAll (159, 20, ""), FieldVanilla(159, 21, ""), FieldVanilla(159, 22, ""), FieldAll (159, 25, ""), FieldVanilla(159, 26, ""), FieldVanilla(159, 27, ""), FieldAll (159, 30, ""), FieldVanilla(159, 31, ""), FieldVanilla(159, 32, ""), FieldVanilla(159, 33, ""), FieldAll (159, 35, ""), FieldVanilla(159, 36, ""), FieldAll (159, 51, ""), FieldAll (160, 1, "Qliphoth World - Entrance"), FieldAll (160, 2, ""), FieldAll (160, 3, ""), FieldAll (160, 4, ""), FieldAll (160, 5, ""), FieldAll (160, 6, ""), FieldAll (160, 10, "Qliphoth World - Velvet Room"), FieldAll (160,101, ""), FieldAll (161, 1, "Depths of Mementos - Entrance"), FieldAll (161, 2, "Depths of Mementos - Large Opening"), FieldAll (161, 3, ""), FieldAll (161, 4, ""), FieldAll (161, 5, ""), FieldAll (161, 6, ""), FieldAll (161, 7, ""), FieldAll (161, 8, ""), FieldAll (161, 9, ""), FieldAll (161, 10, "Depths of Mementos - Prison Passageway"), FieldAll (161, 11, "Depths of Mementos - Mysterious Shirine"), FieldAll (161, 51, "Depths of Mementos - Safe Room"), FieldRoyal (162, 1, ""), FieldRoyal (162, 2, ""), FieldRoyal (162, 3, ""), FieldRoyal (162, 4, ""), FieldRoyal (162, 5, ""), FieldRoyal (162, 7, ""), FieldRoyal (162, 9, ""), FieldRoyal (162, 10, ""), FieldRoyal (162, 11, ""), FieldRoyal (162, 12, ""), FieldRoyal (162, 14, ""), FieldRoyal (162, 15, ""), FieldRoyal (162, 16, ""), FieldAll (190, 1, ""), FieldVanilla(190, 2, ""), FieldVanilla(190, 3, ""), FieldVanilla(190, 4, ""), FieldVanilla(190, 5, ""), FieldVanilla(190, 6, ""), FieldVanilla(190, 7, ""), FieldVanilla(190, 8, ""), FieldVanilla(190, 9, ""), FieldVanilla(190, 10, ""), FieldVanilla(190, 11, ""), FieldVanilla(190, 12, ""), FieldVanilla(190, 13, ""), FieldVanilla(190, 14, ""), FieldVanilla(190, 15, ""), FieldVanilla(190, 16, ""), FieldVanilla(190, 17, ""), FieldVanilla(190, 18, ""), FieldVanilla(190, 19, ""), FieldVanilla(190, 20, ""), FieldVanilla(190, 21, ""), FieldVanilla(190, 22, ""), FieldVanilla(190, 23, ""), FieldVanilla(190, 24, ""), FieldVanilla(190, 25, ""), FieldVanilla(190, 26, ""), FieldVanilla(190, 27, ""), FieldVanilla(190, 28, ""), FieldVanilla(190, 29, ""), FieldVanilla(190, 30, ""), FieldVanilla(190, 31, ""), FieldVanilla(190, 32, ""), FieldVanilla(190, 33, ""), FieldVanilla(190, 34, ""), FieldVanilla(190, 35, ""), FieldVanilla(190, 36, ""), FieldVanilla(190, 37, ""), FieldVanilla(190, 38, ""), FieldVanilla(190, 39, ""), FieldVanilla(190, 40, ""), FieldVanilla(190, 41, ""), FieldVanilla(190, 42, ""), FieldVanilla(190, 43, ""), FieldVanilla(190, 44, ""), FieldVanilla(190, 45, ""), FieldVanilla(190, 46, ""), FieldVanilla(190, 47, ""), FieldVanilla(190, 48, ""), FieldVanilla(190, 49, ""), FieldVanilla(190, 50, ""), FieldAll (190, 51, ""), FieldAll (190, 52, ""), FieldAll (190, 53, ""), FieldAll (190, 54, ""), FieldVanilla(190, 55, ""), FieldVanilla(190, 56, ""), FieldVanilla(190, 57, ""), FieldVanilla(190, 58, ""), FieldVanilla(190, 59, ""), FieldVanilla(190, 60, ""), FieldVanilla(190, 61, ""), FieldVanilla(190, 62, ""), FieldVanilla(190, 63, ""), FieldVanilla(190, 64, ""), FieldVanilla(190, 65, ""), FieldVanilla(190, 66, ""), FieldVanilla(190, 67, ""), FieldVanilla(190, 68, ""), FieldVanilla(190, 69, ""), FieldVanilla(190, 70, ""), FieldVanilla(190, 71, ""), FieldVanilla(190, 72, ""), FieldVanilla(190, 73, ""), FieldVanilla(190, 74, ""), FieldVanilla(190, 75, ""), FieldVanilla(190, 76, ""), FieldVanilla(190, 77, ""), FieldVanilla(190, 78, ""), FieldVanilla(190, 79, ""), FieldVanilla(190, 80, ""), FieldVanilla(190, 81, ""), FieldVanilla(190, 82, ""), FieldVanilla(190, 83, ""), FieldVanilla(190, 84, ""), FieldVanilla(190, 85, ""), FieldVanilla(190, 86, ""), FieldVanilla(190, 87, ""), FieldVanilla(190, 88, ""), FieldVanilla(190, 89, ""), FieldVanilla(190, 90, ""), FieldVanilla(190, 91, ""), FieldVanilla(190, 92, ""), FieldVanilla(190, 93, ""), FieldVanilla(190, 94, ""), FieldVanilla(190, 95, ""), FieldVanilla(190, 96, ""), FieldVanilla(190, 97, ""), FieldVanilla(190, 98, ""), FieldVanilla(190, 99, ""), FieldAll (191, 1, ""), FieldVanilla(191, 2, ""), FieldVanilla(191, 3, ""), FieldVanilla(191, 4, ""), FieldVanilla(191, 5, ""), FieldVanilla(191, 6, ""), FieldVanilla(191, 7, ""), FieldVanilla(191, 8, ""), FieldVanilla(191, 9, ""), FieldVanilla(191, 10, ""), FieldAll (191, 11, ""), FieldVanilla(191, 12, ""), FieldVanilla(191, 13, ""), FieldVanilla(191, 14, ""), FieldVanilla(191, 15, ""), FieldVanilla(191, 16, ""), FieldVanilla(191, 17, ""), FieldVanilla(191, 18, ""), FieldVanilla(191, 19, ""), FieldVanilla(191, 20, ""), FieldAll (191, 21, ""), FieldVanilla(191, 22, ""), FieldVanilla(191, 23, ""), FieldVanilla(191, 24, ""), FieldAll (191, 25, ""), FieldVanilla(191, 26, ""), FieldVanilla(191, 27, ""), FieldVanilla(191, 28, ""), FieldVanilla(191, 29, ""), FieldVanilla(191, 30, ""), FieldVanilla(191, 31, ""), FieldVanilla(191, 32, ""), FieldVanilla(191, 33, ""), FieldVanilla(191, 34, ""), FieldVanilla(191, 35, ""), FieldVanilla(191, 36, ""), FieldVanilla(191, 37, ""), FieldVanilla(191, 38, ""), FieldVanilla(191, 39, ""), FieldVanilla(191, 40, ""), FieldVanilla(191, 41, ""), FieldVanilla(191, 42, ""), FieldVanilla(191, 43, ""), FieldVanilla(191, 44, ""), FieldVanilla(191, 45, ""), FieldVanilla(191, 46, ""), FieldVanilla(191, 47, ""), FieldVanilla(191, 48, ""), FieldVanilla(191, 49, ""), FieldAll (191, 50, ""), FieldAll (191, 51, ""), FieldVanilla(191, 52, ""), FieldVanilla(191, 53, ""), FieldVanilla(191, 54, ""), FieldVanilla(191, 55, ""), FieldVanilla(191, 56, ""), FieldVanilla(191, 57, ""), FieldVanilla(191, 58, ""), FieldVanilla(191, 59, ""), FieldVanilla(191, 60, ""), FieldAll (191, 61, ""), FieldVanilla(191, 62, ""), FieldVanilla(191, 63, ""), FieldVanilla(191, 64, ""), FieldAll (191, 65, ""), FieldVanilla(191, 66, ""), FieldVanilla(191, 67, ""), FieldVanilla(191, 68, ""), FieldVanilla(191, 69, ""), FieldVanilla(191, 70, ""), FieldAll (191, 71, ""), FieldVanilla(191, 72, ""), FieldVanilla(191, 73, ""), FieldVanilla(191, 74, ""), FieldVanilla(191, 75, ""), FieldVanilla(191, 76, ""), FieldVanilla(191, 77, ""), FieldVanilla(191, 78, ""), FieldVanilla(191, 79, ""), FieldVanilla(191, 80, ""), FieldVanilla(191, 81, ""), FieldVanilla(191, 82, ""), FieldVanilla(191, 83, ""), FieldVanilla(191, 84, ""), FieldVanilla(191, 85, ""), FieldVanilla(191, 86, ""), FieldVanilla(191, 87, ""), FieldVanilla(191, 88, ""), FieldVanilla(191, 89, ""), FieldVanilla(191, 90, ""), FieldVanilla(191, 91, ""), FieldVanilla(191, 92, ""), FieldVanilla(191, 93, ""), FieldVanilla(191, 94, ""), FieldVanilla(191, 95, ""), FieldVanilla(191, 96, ""), FieldVanilla(191, 97, ""), FieldVanilla(191, 98, ""), FieldVanilla(191, 99, ""), FieldAll (192, 1, ""), FieldVanilla(192, 2, ""), FieldVanilla(192, 3, ""), FieldVanilla(192, 4, ""), FieldVanilla(192, 5, ""), FieldVanilla(192, 6, ""), FieldVanilla(192, 7, ""), FieldVanilla(192, 8, ""), FieldVanilla(192, 9, ""), FieldVanilla(192, 10, ""), FieldAll (192, 11, ""), FieldVanilla(192, 12, ""), FieldVanilla(192, 13, ""), FieldVanilla(192, 14, ""), FieldAll (192, 15, ""), FieldVanilla(192, 16, ""), FieldVanilla(192, 17, ""), FieldVanilla(192, 18, ""), FieldVanilla(192, 19, ""), FieldVanilla(192, 20, ""), FieldAll (192, 21, ""), FieldVanilla(192, 22, ""), FieldVanilla(192, 23, ""), FieldVanilla(192, 24, ""), FieldVanilla(192, 25, ""), FieldVanilla(192, 26, ""), FieldVanilla(192, 27, ""), FieldVanilla(192, 28, ""), FieldVanilla(192, 29, ""), FieldVanilla(192, 30, ""), FieldVanilla(192, 31, ""), FieldVanilla(192, 32, ""), FieldVanilla(192, 33, ""), FieldVanilla(192, 34, ""), FieldVanilla(192, 35, ""), FieldVanilla(192, 36, ""), FieldVanilla(192, 37, ""), FieldVanilla(192, 38, ""), FieldVanilla(192, 39, ""), FieldVanilla(192, 40, ""), FieldVanilla(192, 41, ""), FieldVanilla(192, 42, ""), FieldVanilla(192, 43, ""), FieldVanilla(192, 44, ""), FieldVanilla(192, 45, ""), FieldVanilla(192, 46, ""), FieldVanilla(192, 47, ""), FieldVanilla(192, 48, ""), FieldVanilla(192, 49, ""), FieldVanilla(192, 50, ""), FieldVanilla(192, 51, ""), FieldVanilla(192, 52, ""), FieldVanilla(192, 53, ""), FieldVanilla(192, 54, ""), FieldVanilla(192, 55, ""), FieldVanilla(192, 56, ""), FieldVanilla(192, 57, ""), FieldVanilla(192, 58, ""), FieldVanilla(192, 59, ""), FieldVanilla(192, 60, ""), FieldAll (192, 61, "Path of Iweleth"), FieldAll (192, 62, ""), FieldVanilla(192, 63, ""), FieldVanilla(192, 64, ""), FieldVanilla(192, 65, ""), FieldVanilla(192, 66, ""), FieldVanilla(192, 67, ""), FieldVanilla(192, 68, ""), FieldVanilla(192, 69, ""), FieldVanilla(192, 70, ""), FieldVanilla(192, 71, ""), FieldVanilla(192, 72, ""), FieldVanilla(192, 73, ""), FieldVanilla(192, 74, ""), FieldVanilla(192, 75, ""), FieldVanilla(192, 76, ""), FieldVanilla(192, 77, ""), FieldVanilla(192, 78, ""), FieldVanilla(192, 79, ""), FieldVanilla(192, 80, ""), FieldVanilla(192, 81, ""), FieldVanilla(192, 82, ""), FieldVanilla(192, 83, ""), FieldVanilla(192, 84, ""), FieldVanilla(192, 85, ""), FieldVanilla(192, 86, ""), FieldVanilla(192, 87, ""), FieldVanilla(192, 88, ""), FieldVanilla(192, 89, ""), FieldVanilla(192, 90, ""), FieldVanilla(192, 91, ""), FieldVanilla(192, 92, ""), FieldVanilla(192, 93, ""), FieldVanilla(192, 94, ""), FieldVanilla(192, 95, ""), FieldVanilla(192, 96, ""), FieldVanilla(192, 97, ""), FieldVanilla(192, 98, ""), FieldVanilla(192, 99, ""), FieldAll (193, 1, ""), FieldVanilla(193, 2, ""), FieldVanilla(193, 3, ""), FieldVanilla(193, 4, ""), FieldVanilla(193, 5, ""), FieldVanilla(193, 6, ""), FieldVanilla(193, 7, ""), FieldVanilla(193, 8, ""), FieldVanilla(193, 9, ""), FieldVanilla(193, 10, ""), FieldAll (193, 11, ""), FieldVanilla(193, 12, ""), FieldVanilla(193, 13, ""), FieldVanilla(193, 14, ""), FieldVanilla(193, 15, ""), FieldVanilla(193, 16, ""), FieldVanilla(193, 17, ""), FieldVanilla(193, 18, ""), FieldVanilla(193, 19, ""), FieldVanilla(193, 20, ""), FieldAll (193, 21, ""), FieldVanilla(193, 22, ""), FieldVanilla(193, 23, ""), FieldVanilla(193, 24, ""), FieldVanilla(193, 25, ""), FieldVanilla(193, 26, ""), FieldVanilla(193, 27, ""), FieldVanilla(193, 28, ""), FieldVanilla(193, 29, ""), FieldVanilla(193, 30, ""), FieldVanilla(193, 31, ""), FieldVanilla(193, 32, ""), FieldVanilla(193, 33, ""), FieldVanilla(193, 34, ""), FieldVanilla(193, 35, ""), FieldVanilla(193, 36, ""), FieldVanilla(193, 37, ""), FieldVanilla(193, 38, ""), FieldVanilla(193, 39, ""), FieldVanilla(193, 40, ""), FieldVanilla(193, 41, ""), FieldVanilla(193, 42, ""), FieldVanilla(193, 43, ""), FieldVanilla(193, 44, ""), FieldVanilla(193, 45, ""), FieldVanilla(193, 46, ""), FieldVanilla(193, 47, ""), FieldVanilla(193, 48, ""), FieldVanilla(193, 49, ""), FieldVanilla(193, 50, ""), FieldAll (193, 51, ""), FieldVanilla(193, 52, ""), FieldVanilla(193, 53, ""), FieldVanilla(193, 54, ""), FieldVanilla(193, 55, ""), FieldVanilla(193, 56, ""), FieldVanilla(193, 57, ""), FieldVanilla(193, 58, ""), FieldVanilla(193, 59, ""), FieldVanilla(193, 60, ""), FieldAll (193, 61, ""), FieldVanilla(193, 62, ""), FieldVanilla(193, 63, ""), FieldVanilla(193, 64, ""), FieldAll (193, 65, ""), FieldVanilla(193, 66, ""), FieldVanilla(193, 67, ""), FieldVanilla(193, 68, ""), FieldVanilla(193, 69, ""), FieldVanilla(193, 70, ""), FieldAll (193, 71, ""), FieldVanilla(193, 72, ""), FieldVanilla(193, 73, ""), FieldVanilla(193, 74, ""), FieldVanilla(193, 75, ""), FieldVanilla(193, 76, ""), FieldVanilla(193, 77, ""), FieldVanilla(193, 78, ""), FieldVanilla(193, 79, ""), FieldVanilla(193, 80, ""), FieldVanilla(193, 81, ""), FieldVanilla(193, 82, ""), FieldVanilla(193, 83, ""), FieldVanilla(193, 84, ""), FieldVanilla(193, 85, ""), FieldVanilla(193, 86, ""), FieldVanilla(193, 87, ""), FieldVanilla(193, 88, ""), FieldVanilla(193, 89, ""), FieldVanilla(193, 90, ""), FieldVanilla(193, 91, ""), FieldVanilla(193, 92, ""), FieldVanilla(193, 93, ""), FieldVanilla(193, 94, ""), FieldVanilla(193, 95, ""), FieldVanilla(193, 96, ""), FieldVanilla(193, 97, ""), FieldVanilla(193, 98, ""), FieldVanilla(193, 99, ""), FieldAll (194, 1, ""), FieldVanilla(194, 2, ""), FieldVanilla(194, 3, ""), FieldVanilla(194, 4, ""), FieldVanilla(194, 5, ""), FieldVanilla(194, 6, ""), FieldVanilla(194, 7, ""), FieldVanilla(194, 8, ""), FieldVanilla(194, 9, ""), FieldVanilla(194, 10, ""), FieldAll (194, 11, ""), FieldVanilla(194, 12, ""), FieldVanilla(194, 13, ""), FieldVanilla(194, 14, ""), FieldAll (194, 15, ""), FieldVanilla(194, 16, ""), FieldVanilla(194, 17, ""), FieldVanilla(194, 18, ""), FieldVanilla(194, 19, ""), FieldVanilla(194, 20, ""), FieldAll (194, 21, ""), FieldVanilla(194, 22, ""), FieldVanilla(194, 23, ""), FieldVanilla(194, 24, ""), FieldVanilla(194, 25, ""), FieldVanilla(194, 26, ""), FieldVanilla(194, 27, ""), FieldVanilla(194, 28, ""), FieldVanilla(194, 29, ""), FieldVanilla(194, 30, ""), FieldVanilla(194, 31, ""), FieldVanilla(194, 32, ""), FieldVanilla(194, 33, ""), FieldVanilla(194, 34, ""), FieldVanilla(194, 35, ""), FieldVanilla(194, 36, ""), FieldVanilla(194, 37, ""), FieldVanilla(194, 38, ""), FieldVanilla(194, 39, ""), FieldVanilla(194, 40, ""), FieldVanilla(194, 41, ""), FieldVanilla(194, 42, ""), FieldVanilla(194, 43, ""), FieldVanilla(194, 44, ""), FieldVanilla(194, 45, ""), FieldVanilla(194, 46, ""), FieldVanilla(194, 47, ""), FieldVanilla(194, 48, ""), FieldVanilla(194, 49, ""), FieldVanilla(194, 50, ""), FieldAll (194, 51, ""), FieldVanilla(194, 52, ""), FieldVanilla(194, 53, ""), FieldVanilla(194, 54, ""), FieldVanilla(194, 55, ""), FieldVanilla(194, 56, ""), FieldVanilla(194, 57, ""), FieldVanilla(194, 58, ""), FieldVanilla(194, 59, ""), FieldVanilla(194, 60, ""), FieldAll (194, 61, ""), FieldVanilla(194, 62, ""), FieldVanilla(194, 63, ""), FieldVanilla(194, 64, ""), FieldAll (194, 65, ""), FieldVanilla(194, 66, ""), FieldVanilla(194, 67, ""), FieldVanilla(194, 68, ""), FieldVanilla(194, 69, ""), FieldVanilla(194, 70, ""), FieldAll (194, 71, ""), FieldVanilla(194, 72, ""), FieldAll (194, 73, ""), FieldVanilla(194, 74, ""), FieldVanilla(194, 75, ""), FieldVanilla(194, 76, ""), FieldVanilla(194, 77, ""), FieldVanilla(194, 78, ""), FieldVanilla(194, 79, ""), FieldVanilla(194, 80, ""), FieldVanilla(194, 81, ""), FieldVanilla(194, 82, ""), FieldVanilla(194, 83, ""), FieldVanilla(194, 84, ""), FieldVanilla(194, 85, ""), FieldVanilla(194, 86, ""), FieldVanilla(194, 87, ""), FieldVanilla(194, 88, ""), FieldVanilla(194, 89, ""), FieldVanilla(194, 90, ""), FieldVanilla(194, 91, ""), FieldVanilla(194, 92, ""), FieldVanilla(194, 93, ""), FieldVanilla(194, 94, ""), FieldVanilla(194, 95, ""), FieldVanilla(194, 96, ""), FieldVanilla(194, 97, ""), FieldVanilla(194, 98, ""), FieldVanilla(194, 99, ""), FieldAll (195, 1, ""), FieldVanilla(195, 2, ""), FieldVanilla(195, 3, ""), FieldVanilla(195, 4, ""), FieldVanilla(195, 5, ""), FieldVanilla(195, 6, ""), FieldVanilla(195, 7, ""), FieldVanilla(195, 8, ""), FieldVanilla(195, 9, ""), FieldVanilla(195, 10, ""), FieldAll (195, 11, ""), FieldVanilla(195, 12, ""), FieldVanilla(195, 13, ""), FieldVanilla(195, 14, ""), FieldAll (195, 15, ""), FieldVanilla(195, 16, ""), FieldVanilla(195, 17, ""), FieldVanilla(195, 18, ""), FieldVanilla(195, 19, ""), FieldVanilla(195, 20, ""), FieldAll (195, 21, ""), FieldVanilla(195, 22, ""), FieldVanilla(195, 23, ""), FieldVanilla(195, 24, ""), FieldVanilla(195, 25, ""), FieldVanilla(195, 26, ""), FieldVanilla(195, 27, ""), FieldVanilla(195, 28, ""), FieldVanilla(195, 29, ""), FieldVanilla(195, 30, ""), FieldVanilla(195, 31, ""), FieldVanilla(195, 32, ""), FieldVanilla(195, 33, ""), FieldVanilla(195, 34, ""), FieldVanilla(195, 35, ""), FieldVanilla(195, 36, ""), FieldVanilla(195, 37, ""), FieldVanilla(195, 38, ""), FieldVanilla(195, 39, ""), FieldVanilla(195, 40, ""), FieldVanilla(195, 41, ""), FieldVanilla(195, 42, ""), FieldVanilla(195, 43, ""), FieldVanilla(195, 44, ""), FieldVanilla(195, 45, ""), FieldVanilla(195, 46, ""), FieldVanilla(195, 47, ""), FieldVanilla(195, 48, ""), FieldVanilla(195, 49, ""), FieldVanilla(195, 50, ""), FieldVanilla(195, 51, ""), FieldVanilla(195, 52, ""), FieldVanilla(195, 53, ""), FieldVanilla(195, 54, ""), FieldVanilla(195, 55, ""), FieldVanilla(195, 56, ""), FieldVanilla(195, 57, ""), FieldVanilla(195, 58, ""), FieldVanilla(195, 59, ""), FieldVanilla(195, 60, ""), FieldVanilla(195, 61, ""), FieldVanilla(195, 62, ""), FieldVanilla(195, 63, ""), FieldVanilla(195, 64, ""), FieldVanilla(195, 65, ""), FieldVanilla(195, 66, ""), FieldVanilla(195, 67, ""), FieldVanilla(195, 68, ""), FieldVanilla(195, 69, ""), FieldVanilla(195, 70, ""), FieldVanilla(195, 71, ""), FieldVanilla(195, 72, ""), FieldVanilla(195, 73, ""), FieldVanilla(195, 74, ""), FieldVanilla(195, 75, ""), FieldVanilla(195, 76, ""), FieldVanilla(195, 77, ""), FieldVanilla(195, 78, ""), FieldVanilla(195, 79, ""), FieldVanilla(195, 80, ""), FieldVanilla(195, 81, ""), FieldVanilla(195, 82, ""), FieldVanilla(195, 83, ""), FieldVanilla(195, 84, ""), FieldVanilla(195, 85, ""), FieldVanilla(195, 86, ""), FieldVanilla(195, 87, ""), FieldVanilla(195, 88, ""), FieldVanilla(195, 89, ""), FieldVanilla(195, 90, ""), FieldVanilla(195, 91, ""), FieldVanilla(195, 92, ""), FieldVanilla(195, 93, ""), FieldVanilla(195, 94, ""), FieldVanilla(195, 95, ""), FieldVanilla(195, 96, ""), FieldVanilla(195, 97, ""), FieldVanilla(195, 98, ""), FieldVanilla(195, 99, ""), FieldRoyal (200, 10, ""), FieldRoyal (250, 1, ""), FieldAll (251, 1, "Kamoshida Palace - Battle 1"), FieldAll (251, 2, "Kamoshida Palace - Battle 2"), FieldAll (251, 3, ""), FieldAll (251, 4, ""), FieldAll (251, 10, ""), FieldAll (252, 1, ""), FieldAll (252, 2, ""), FieldAll (252, 3, ""), FieldAll (253, 1, ""), FieldAll (253, 2, ""), FieldAll (253, 3, ""), FieldAll (253, 10, ""), FieldAll (254, 1, ""), FieldAll (254, 2, ""), FieldAll (254, 10, ""), FieldAll (255, 1, ""), FieldAll (255, 2, ""), FieldAll (255, 3, ""), FieldAll (255, 10, ""), FieldAll (256, 1, ""), FieldAll (256, 2, ""), FieldAll (256, 3, ""), FieldAll (256, 4, ""), FieldAll (256, 10, ""), FieldAll (257, 1, ""), FieldAll (257, 2, ""), FieldAll (257, 3, ""), FieldAll (257, 4, ""), FieldAll (257, 5, ""), FieldAll (257, 6, ""), FieldAll (257, 10, ""), FieldAll (259, 1, ""), FieldAll (259, 2, ""), FieldAll (259, 3, ""), FieldAll (259, 4, ""), FieldAll (259, 10, ""), FieldAll (259, 11, ""), FieldAll (259, 12, ""), FieldAll (259, 13, ""), FieldAll (259, 14, ""), FieldAll (259, 15, ""), FieldAll (260, 1, "Qliphoth World - Battle"), FieldAll (260, 10, "Qliphoth World - Holy Grail 1st Battle"), FieldAll (260, 11, "Qliphoth World - Yaldabaoth Battle"), FieldAll (260, 12, "Qliphoth World - Holy Grail 2nd Battle"), FieldAll (260, 13, "Qliphoth World - Velvet Room Story Battle"), FieldAll (260, 14, "Qliphoth World - Twin Battle"), FieldAll (261, 1, ""), FieldRoyal (261, 6, ""), FieldRoyal (262, 1, ""), FieldRoyal (262, 2, ""), FieldRoyal (262, 3, ""), FieldRoyal (262, 4, ""), FieldRoyal (262, 5, ""), FieldRoyal (262, 6, ""), FieldRoyal (262, 7, ""), FieldRoyal (262, 8, ""), FieldRoyal (262, 9, ""), FieldRoyal (262, 10, ""), FieldRoyal (262, 11, ""), FieldRoyal (262, 12, ""), FieldRoyal (262, 13, ""), FieldAll (291, 1, ""), FieldAll (292, 1, ""), FieldAll (293, 1, ""), FieldAll (294, 1, ""), FieldRoyal (295, 1, ""), FieldRoyal (295, 10, ""), }; } } ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Royal_AccessoryNames.txt ================================================ BLANK Hip Glasses Suspenders Fanny Pack Hairpin Silver Key Ring Black Tights Dotted Tights Headphones Black Necktie RESERVE Breath Ring Energy Ring Ring of Vitality RESERVE RESERVE RESERVE Chakra Choker Mind Choker Soul Choker RESERVE RESERVE RESERVE Red Band Blue Band Green Band Yellow Band Lantern Necklace RESERVE RESERVE RESERVE Star Bracelet Circular Band White Band Black Band RESERVE RESERVE RESERVE RESERVE Raging Wristband Eccentric Belt RESERVE Magnetic Necklace Pick-Me-Up Tie Sturdy Suspenders Strength Belt Wood Clappers Hot Water Pouch Rubber Gloves Shield Goggles Calming Mask Wooden Clogs Notebook Well-Fed Cape Sleepless Gem Calming Cape Cape of Hope RESERVE Brain Guard Burn Charm Freeze Charm Grand Slam Charm Shockproof Charm RESERVE Fearless Cape RESERVE RESERVE RESERVE RESERVE Despair Charm RESERVE RESERVE Revenge Mirror Reprisal Mirror Retribution Mirror Caffeine Patch Peaceful Potpourri Positivity Calendar Designer Shades Clarity Cape Oil Pack Cooling Pack Portable Battery Dizzy Mask Mysterious Mask Sinister Mask Forgetful Mask Drowsy Mask Clown Mask Corrupting Mask Occult Mask Ring of Lust Ring of Vanity Ring of Gluttony Ring of Wrath Ring of Greed Ring of Envy Ring of Pride Ring of Sorrow Crystal of Lust Crystal of Vanity Crystal of Gluttony Crystal of Wrath Crystal of Greed Crystal of Envy Crystal of Pride Crystal of Sorrow RESERVE RESERVE RESERVE RESERVE Rakshasa Belt Vajra Belt Skanda Belt Ace Cap Willful Belt Lure Keychain Bravery Sash Magic Misanga Hades Harp Hades Harp R Darkness Ring Darkness Ring R White Headband White Headband R Black Headband Black Headband R Red String Red String R Blazing Horns Inferno Horns Black Moon Black Moon R RESERVE Graceful Harp Graceful Harp R Kugelbein Kugelbein R Shiny Belt Shiny Belt R Picaresque Hat Picaresque Crown RESERVE RESERVE Bold Eyepatch Compression Socks RESERVE Fireproof Choker Fireproof Bracelet RESERVE Iceproof Choker Iceproof Bracelet RESERVE Elecproof Choker Elecproof Bracelet RESERVE Windproof Choker Windproof Bracelet RESERVE Nukeproof Choker Nukeproof Bracelet RESERVE Psyproof Choker Psyproof Bracelet RESERVE Blessproof Choker Blessproof Bracelet RESERVE Curseproof Choker Apotropaic Hairpin RESERVE Angel Badge RESERVE RESERVE Expedite Ring RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Regent Queen's Necklace Stone of Scone Koh-i-Noor Orlov Emperor's Charm Hope Diamond Crystal Skull Cross-Shaped Charm Umi Sachihiko's Belt Idaten's Belt Hall of Fame Belt Thief Mask Black Rock Skull Charm Crimson Necklace Silver Ice Necklace Jade Wind Necklace Purple Bolt Necklace Atom Necklace Psy Necklace Heavenly Necklace Night Necklace RESERVE Menehune Dolls Hawaiian Ring Forneus Badge Train Badge PI Badge Punch Badge Gambla Badge Golfer Badge Tough Belt Dandy Mirror Leblanc Charm Boss Undies 2nd Mate Badge 1st Mate Badge Captain Badge Regen Patch 1 Regen Patch 2 Regen Patch 3 SP Adhesive 1 SP Adhesive 2 SP Adhesive 3 RESERVE RESERVE The Victory Cup Fish God's Badge Omnipotent Orb Divine Pillar Invisible Veil RESERVE Attachment Pearl Nuisance Belt RESERVE RESERVE RESERVE Holy Stone Team Glasses S.E.E.S. Armband Sevens Emblem St. Hermelin Badge ARM PC Midnight Bandana Evoker Honu Charm Tiki Keychain Beast Headphones Babel Headphones Lambs' Pillow Gauntlet Kuzunoha Tubes Featherman Badge Fire Augite Ice Augite Lightning Augite Wind Augite Psy Augite Nuclear Augite Cross Augite Skeleton Augite Healing Augite RESERVE Ultimate Augite RESERVE Wing Ring Engraved Dog Tag Red Ribbon Ember Ring Flame Ring Inferno Ring Spiral Ember Ring Spiral Flame Ring Spiral Inferno Ring Frost Ring Snow Ring Blizzard Ring Spiral Frost Ring Spiral Snow Ring Spiral Blizzard Ring Breeze Ring Wind Ring Gale Ring Spiral Breeze Ring Spiral Wind Ring Spiral Gale Ring Static Ring Spark Ring Thunder Ring Spiral Static Ring Spiral Spark Ring Spiral Thunder Ring Holy Ring Hallowed Ring Spiral Holy Ring Spiral Hallowed Ring Prayer Ring Blessing Ring Divine Ring Spiral Prayer Ring Spiral Blessing Ring Spiral Divine Ring Death Ring Hell Ring Spiral Death Ring Spiral Hell Ring Grudge Ring Curse Ring Hex Ring Spiral Grudge Ring Spiral Curse Ring Spiral Hex Ring Mighty Ring Almighty Ring Supreme Ring Atom Ring Nuclear Ring Reactor Ring Spiral Atom Ring Spiral Nuclear Ring Spiral Reactor Ring Dizzy Bangle Spiral Dizzy Bangle Addle Bangle Spiral Addle Bangle Fear Bangle Retail Smile Mask Forget Bangle Spiral Forget Bangle Sleep Bangle Spiral Sleep Bangle Rage Bangle Spiral Rage Bangle Gloom Bangle Spiral Gloom Bangle Brainwash Bangle Agitation Crown Life Sapping Mask Spirit Sapping Mask Spirit Sense Mirror Dark Spirit Mirror Spirit Camera Dark Flame Band Ardhanari Band Diamond Dust Lily Frozen Crown Storm Sculpture Vacuum Crown Goddess Horn Thunder Charm Judgment Cross Spinning Crown Cursed Ribbon Crown of Death Fire Dragon Horn Atomic Crown Black Viper Crown Astral Crown Psy Ring Karma Ring Mystic Ring Spiral Psy Ring Spiral Karma Ring Spiral Mystic Ring - Dragon's Heart Psycho Blast Crown Lunge Belt Assault Belt Megaton Belt God's Hand Belt Lucky Belt Miracle Belt Rush Belt Gatling Belt Cleave Belt Giant Slice Belt Brave Belt Sword Dance Belt Hassou Tobi Belt Ayamur Belt Cornered Belt Rising Slash Belt Deadly Fury Belt Snap Belt Triple Shot Belt Special Shot Belt Magic Bullet Belt Double Shot Belt Vajra Blast Belt Vorpal Blade Belt Vicious Strike Belt Heat Wave Belt Gigantomachia Belt Brawler Belt Swift Strike Belt Deathbound Belt Agneyastra Belt Double Fangs Belt Power Slash Belt Tempest Slash Belt Myriad Slash Belt Sledgehammer Belt Skull Cracker Belt Terror Claw Belt Headbutt Belt RESERVE Dream Needle Belt Hysterical Slap Belt Negative Pile Belt Brain Shaker Belt Flash Bomb Belt Mind Slice Belt Bloodbath Belt Memory Blow Belt RESERVE Dormin Rush Belt Oni-Kagura Belt Bad Beat Belt Brain Buster Belt Aid Charm Cure Charm Heal Charm Spiral Aid Charm Spiral Cure Charm Spiral Heal Charm Revival Charm Rejuvenate Charm Rosary of Purity Amrita Charm Spiral Amrita Charm Salvation Crown Alluring Belt Hidden Ring Alarm Charm Spiral Energy Charm Energy Charm Baisudi Charm Spiral Alarm Charm Spiral Baisudi Charm Rasetsu Anklet Vajra Anklet Cat Brooch Heat Riser Anklet Spiral Rasetsu Anklet Spiral Vajra Anklet Spiral Idaten Anklet Savior Brooch Weak Anklet Feeble Anklet Stalling Anklet Debilitate Anklet Spiral Weak Anklet Spiral Feeble Anklet Spiral Stalling Anklet Dekunda Anklet Calming Anklet Empowering Anklet Concentration Anklet Rebellion Anklet Revolution Anklet Magic Mirror Charm Phys Mirror Charm Immortal Charm Wall Break Charm Barrier Break Charm Anti-Fire Choker Anti-Ice Choker Anti-Elec Choker Anti-Wind Choker Fire Breaker Bell Ice Breaker Bell Wind Breaker Bell Elec Breaker Bell Anti-Nuke Choker Anti-Psy Choker Nuke Breaker Bell Psy Breaker Bell 0x1E2 Regent R Queen's Necklace R Stone of Scone R Koh-i-Noor R Orlov R Emperor's Charm R Hope Diamond R Crystal Skull R Orichalcum Orichalcum R Gambler's Ring Dazzling Netsuke Nuke Brooch Starlight Glove Moonlight Phones Warden's Baton Feather Cape Demonica Device Camera Strap Unused Item 0x1F7 0x1F8 0x1F9 0x1FA 0x1FB 0x1FC 0x1FD 0x1FE 0x1FF ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Royal_ArmorNames.txt ================================================ BLANK (Unusable) RESERVE Dark Undershirt Print T-Shirt Neckerchief Baseball Jacket Dress Shirt Turtleneck Pink Top Loose Cutsew Formal Shirt Light Undershirt Chaos Undershirt RESERVE Sooty Ghastly Gear RESERVE Shoulder Pads Confident Camisole Lynx Camo Vest Memorial Collar Old Cat Collar Cat Knight's Collar Old Duke's Coat Duke's Coat RESERVE RESERVE RESERVE Cat Sweater Old Angels' Cape Angel's Cape Old Pajamas Succubus Pajamas Saint's Tunic Robust Apron Amulet Shirt Breeze Scarf Silk Dress Fine Silk Dress Frost Hood Frost Ace Hood Survival Vest Lady's Dress Zen Outfit Cone Collar Old Ghastly Dress Shikigami Dress Old Cheongsam Fairy Cheongsam Old Mythical Scarf Mythical Scarf RESERVE RESERVE Cosmic Undies Lightning Blouse Night Shift Haori Rubber Scarf Heavensent Dress Godsent Dress RESERVE RESERVE Athletic Shirt Power Camisole RESERVE Hard Scarf Old Haori Dishonored Haori Old Coat Nekomata Coat Old Fiery Apron Fiery Apron Blood Red Capote Bloodied Capote Mandala Vest Elysian Robe Papal Robes Id Collar RESERVE RESERVE RESERVE RESERVE Army Vest Hard Corset RESERVE Sparkly Collar Old Shroud Royal Holy Shroud Old Robe Arcane Robe Old Snakeskin Scarf Snakeskin Scarf Fairy Knight Armor Fairy Hero Armor Cool Vest Titanium Corset Hope Shirt Morose Collar Tapsuan Fine Tapsuan RESERVE RESERVE Gigas Vest Maillot RESERVE Armada Collar Old Undershirt Lil Devil Undershirt Old Shocking Scarf Shocking Scarf Old Ghillie Vest Ghillie Vest RESERVE RESERVE Austere Haori Yama Dress Rune Vest Brave Scarf Lucky Robe Super Lucky Robe RESERVE RESERVE Fluted Guard Panzer Dress RESERVE Measure Collar Old Vest Leopard Print Vest Old Pure Collar Pure Collar Old Tights Divine Black Tights RESERVE RESERVE Fireman Happi Glaring Cape Egoist Shirt Water Crown King Frost Cape King Frost Cape EX RESERVE RESERVE Kaiser Vest Tomoe's Doumaru RESERVE Kampff Collar Old Wild Lion Scarf Wild Lion Scarf Old Khamrai Tao Khamrai Tao Old Primate Vest Primate Vest RESERVE RESERVE Demon's Jacket Cozy Dress Akashic Shirt Lyrical Scarf RESERVE RESERVE RESERVE RESERVE Karna's Robe Haten Robe RESERVE Sublime Collar Old Sinful Bikini Sinful Bikini Old Underwear Lucky Underwear Old Infinity Scarf Bottomless Scarf RESERVE RESERVE RESERVE RESERVE Scarf of Mercy RESERVE RESERVE RESERVE RESERVE RESERVE Immortal Vest RESERVE Old Black Tights Death's Black Tights Old Witch's Robe Lovely Witch's Robe Old Scale Scarf Dragon Scale Scarf RESERVE RESERVE RESERVE RESERVE Tantric Oath Black Jacket Official's Robe Tantric Oath R RESERVE Archangel Bra RESERVE High Archangel Bra RESERVE Black Wing Robe Black Wing Robe R Dark Jacket RESERVE Official's Robe R Black Robe RESERVE Moonlight Robe R Weird Wrap Moonlight Robe Sirius Armor Sirius Armor EX Sooty Ladies' Armor Sooty Boots Sooty Heavy Armor Sooty Yorishiro Sooty Elder's Armor Sooty Cheongsam Sooty Men's Armor Sooty Cat Armor Sooty Ogress' Gear Sooty Wolf's Coat Sooty Divine Armor Sooty Snakeskin Sooty Lady's Armor Sooty Feather Coat Sooty Black Armor Sooty Spotted Fur Sooty Horn Sooty Lady's Armor Sooty Lion's Mane Sooty Monkey Fur Sooty Regalia Sooty Lady's Armor Sooty Bolt Armor Sooty Regalia Sooty Dancer's Garb Sooty Dark Armor Sooty Scale Armor RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Shining Vest Tao Robe Philosophical Scarf Bodhi Haori Divine Guard Unio Dress Pleroma Collar RESERVE Gambler's Shirt Immovable Shirt Vest of Life RESERVE RESERVE Nightwatch Armor Golden Vest Robe of Hatred Space Suit Golden Dress Starry Wisdom Vest 0x120 0x121 0x122 0x123 0x124 0x125 0x126 0x127 0x128 0x129 0x12A 0x12B 0x12C ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Royal_ConsumableItemNames.txt ================================================ BLANK Devil Fruit Recov-R: 50 mg Recov-R: 100 mg Takemedic Life Stone Bead Takemedic-All Takemedic-All V Takemedic-All Z Bead Chain Soul Drop Snuff Soul Chewing Soul Soul Food Revival Bead Balm of Life RESERVE Nohar-M Relax Gel Alert Capsule RESERVE RESERVE Vanish Ball Soma Amrita Soda Hiranya Muscle Drink Odd Morsel Rancid Gravy RESERVE Magic Ointment Physical Ointment Rasetsu Ofuda Idaten Ofuda Kongou Ofuda Kajaclear-R Kundaclear-R Molotov Cocktail Blowtorch Freeze Spray Dry Ice Air Cannon Vacuum Cutter Stun Gun Magneto Coil Megido Bomb Sacramental Bread Straw Doll Hell Magatama Cyclone Magatama Frost Magatama Arc Magatama Psycho Bomb Psy-Wheel Atom Match Nuke Cracker Happy Bomb Segaki Rice Curse Bomb Five-inch Nail Revivadrin Medicine Life Ointment Homunculus RESERVE Reviv-All Renew-All Recover Oil RESERVE DVD Player Garden Energy Bio Nutrients Mega Fertilizer Godly Magatama Blast Magatama Holy Magatama Grudge Magatama RESERVE RESERVE PC Tool Set RESERVE Glass Vase Star Mirror Snack Pack Musty Pages Homemaker Hero Heart Ring Heart Necklace Designer Perfume Luxury Aroma Set Mini Cactus Flower Basket Bath of Roses Black Mug Sakura Fan Fountain Pen Robot Vacuum Motorbike Figure Local Mascot Set Spotlight Goho-M RESERVE Smokescreen RESERVE Hypno Mist Calming Aroma Covertizer RESERVE Silk Yarn Thick Parchment Tin Clasp Plant Balm Cork Bark Iron Sand Condenser Lens Aluminum Sheet Tanned Leather Red Phosphorus Liquid Mercury RESERVE Wise Men's Words Ghost Encounters Tidying the Heart Buchiko's Story RESERVE RESERVE Punch Ouch Starvicks Udagawa Water CRT Television RESERVE RESERVE Master Swordsman Flowerpedia RESERVE RESERVE RESERVE Heroic Revelations Call Me Chief The Art of Automata Reckless Casanova RESERVE Rubbish Money Distributor Item Distributor RESERVE Jagariko Broken Rock Salt Movie Ticket Movie 02 Ticket Movie 03 Ticket Movie 04 Ticket RESERVE RESERVE Summer Lotto S Autumn Bread Element Set Forces Set Shitamachi Reborn Star Forneus Weekend Parks Train of Life Power Intuition Bonehead Crime Lab Squad Not-so-hot Betsy Bubbly Hills, 90210 ICU RESERVE Drizzled Natto Squid Tri-Pack Idol Pins RESERVE RESERVE RESERVE Tokyo Shrines Fishpond Spotter Yoncha Walker 04 Night Skies Jack Frost Doll Burger-kun Doll Wanna-kun Doll Lexy Doll Uji Matcha Flan Truffles RESERVE Limelight Amateur Coffee Harsh Coffee Baptismal Water Exorcism Water Wine of Grace Repentance Ashes Dipped Katsu Sando Book Cover Castella Crimson Lipstick RESERVE RESERVE Tetra Hammer Makara Hammer RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Casual Rod Powerful Rod Miracle Rod Arginade Dr. Salt NEO Joylent MRE Ration Oatmeal Ration Torimeshi Ration Fruit Ration Seafood Aojiru Beauty Aojiru Vitality Aojiru Nasty Aojiru Onsen Aojiru RESERVE Fulfiller Summer Lotto R Happy Pop Thaw Stone Douse Orb Discharge Crystal Second Maid RESERVE Sandwich Fruit Danish RESERVE Yakisoba Pan Creature Earl Green Raw Punch Muscle Tea Manta Nastea 1UP Gambla Goemon Golfer Sarutahiko Calling Postcard Refresh Aroma Protein Moist Protein Fried Bread RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Expert Insane Beginner Intermediate Advanced Surprise Sando Nostalgic Steak Frui-Tea Totem Pole Relaxing Coffee Oo-hot Tea Love솂Pancake Sincere Omelette RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Small Boilie Medium Boilie Large Boilie Top-class Boilie Guardian Boilie Big Bang Burger Saturn Fries Earth Burger RESERVE Moon Burger Supernova Burger Karaage King Spring Fruit Pack Foreign Nikuman Phantom Wafers Soothing Soba Agodashi Oden Party in a Can Digital Camera Face Beautifier Laptop RESERVE Mini Dominion Die-soujou Decked Decarabia Gear Girimehkala Kinky Kin-Ki Mossy Mothman Movie 16 Ticket Lockpick Perma-Pick Reserve Ammo RESERVE Treasure Trap RESERVE Red Fish Rough Carp Tokyo Bitterling Seven-Color Trout White Carp Treasure Trout Delish Bitterling Peerless Carp Ichigaya Guardian Adhesive Bandage RESERVE Rejuvenating IV Leblanc Coffee RESERVE RESERVE Master Coffee Decent Curry Leblanc Curry Master Curry RESERVE Shooting Card Healing IV Railroad Card Fighting Card RESERVE Boxing Card Gambling Card Golf Card Social Thought RESERVE RESERVE RESERVE Batting Science Essence of Fishing Speed Reader The Craft of Cinema RESERVE Chinese Sweets Theme Park Escort The Great Thief Pirate Legend Zorro, the Outlaw The Alluring Dancer The Gallant Rogue The Illusory Popess Cry of Cthulhu Woman in the Dark The Hero with a Bow Medjed Menace The Art of Charm Game Secrets Lotto R Lotto S Scratch Lottery Rakugo Collection Classical Hits Best of KGB49 Wraith Jail Break Guy McVer The Running Dead The X Folders RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Vague Nightlife Hotspots Nofeever Sheet Hand Warmalizer Venus Salad Sikkenine Sikkenine A Sikkenine EX Wide Eye Drops Donut-Worry Mental Floss Hot and Sour Tea Balloons Kommissbrot Beef Patty Ration D Ration Veg. Stew Ration RESERVE RESERVE Durian Au Lait Oh! Shiruko Chunky Potage Ultimate Amazake Udagawa Soda Water of Rebirth RESERVE RESERVE RESERVE RESERVE Strawberry Curry Mayo Locust Miso Starfish Mystery Stew Bitter Coffee Acidic Coffee Fire Curry Blaze Curry Inferno Curry Ramen Bowl Night Pennant Nude Statue Swan Boat Skytree Lamp Giant Spatula Idol Poster Star Stickers King Piece Hero Figure Hamaya I <3 Tokyo Shirt Non-Static Gum RESERVE RESERVE RESERVE Kawakami's Chocolate Takemi's Chocolate Chihaya's Chocolate Ohya's Chocolate Hifumi's Chocolate Makoto's Chocolate Haru's Chocolate Ann's Chocolate Futaba's Chocolate Ryuji's Chocolate Sojiro's Chocolate Kumade Shumai Cushion Gi-Nyant Doll Sushi Mug Choco Fountain RESERVE RESERVE RESERVE Famidrive RESERVE Sheep Man Doll Jam Bread Melon Pan Angel Tart Moon Dango Mixed Nuts Beni-Azuma Legendary Yaki-Imo RESERVE RESERVE RESERVE RESERVE Moonlight Carrot Sun Tomato Earth Beans Star Onion RESERVE Ann Cream Puffs Makoto Donuts Sakura Amezaiku Sadayo Taiyaki Ryuji Dog Amateur Curry RESERVE Broken Laptop Imported Protein RESERVE RESERVE RESERVE Aquarium-a-Day Nakano Walker Incense ST Incense MA Incense EN Incense AG Incense LU Ambergris ST Ambergris MA Ambergris EN Ambergris AG Ambergris LU Nirvana ST Nirvana MA Nirvana EN Nirvana AG Nirvana LU Chunky Katsu Stronger Lift S Harder Core S Accu-Speed S RESERVE Sakura Mochi Oil Painting Set Watercolor Postcard Leather Pen Case Cup Noodle Set Omni-Vitamin Silver Bangle Wrist Weights Sports Sunglasses Kitchen Tools Set 48-Sided 3D Puzzle RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Dizzy Vial S Dizzy Vial L Confuse Vial S Confuse Vial L Fear Vial S Fear Vial L Forget Vial S Forget Vial L Sleep Vial S Sleep Vial L Rage Vial S Rage Vial L Despair Vial S Despair Vial L Brainwash Vial S Brainwash Vial L Musk ST-MA Musk ST-EN Musk ST-AG Musk ST-LU Musk MA-EN Musk MA-AG Musk MA-LU Musk EN-AG Musk EN-LU Rasta Sandalwood Featherman Seeker Feather Card Batting Coupon Salvation S Ichigaya Kingpin Black Frost Doll Buchimaru Doll Jagao Doll Suspicious Boilie Hi-Tech Rod Sea Slug Doll Featherman Doll Sumire's Chocolate Ann's Giri-Choco Makoto's Giri-Choco Haru's Giri-Choco Futaba's Giri-Choco Takemi's Giri-Choco Chihaya's Giri-Choco Kawakami's Giri-Choco Ohya's Giri-Choco Hifumi's Giri-Choco Sumire's Giri-Choco Sae's Giri-Choco Makoto's Candy Haru's Candy Ann's Candy Futaba's Candy Chihaya's Candy Takemi's Candy Kawakami's Candy Ohya's Candy Hifumi's Candy Sumire's Candy Scarlet Rose Yellow Gerbera Blue Hyacinth Stamina Kit S Stamina Kit L Dart Set Jump Cue Royal Jelly R Strawberry Daifuku Learn Pro Darts Expert Billiards D. Housewives Mouse M.D. 31 Tee Stamp Card Photo of Clara Bland Cheese Sharp Cheese Rich Cheese Pumpkin Soup RESERVE Puzzle Rings Mochi Cushion Electric Toothbrush Blaring Alarm Clock Aroma Machine Katana Keychain Factorization Guide Hustle S Viennese Jelly Weakener Spray Cleaning Spray Quick Spray Ultimate Spray Awake Incense Awakening Incense Unused Unused RESERVE Dressed in Ashes RESERVE Hogyoku Apple Band-Ace Holy Shroud Ouija Board Empowering Ofuda Debilitator Ofuda Fire Magatama Gale Magatama Shock Magatama Ice Magatama Nuke Magatama Psy Magatama Bless Magatama Curse Magatama Invincible Ofuda Strength Up Ofuda Magic Up Ofuda Seeker's Tools ABCs of Crafting Juicy Nikuman Napolitan Nikuman Peppery Nikuman Corned Beef Special Cereal Multi-Pack Popcorn Bomb Clothing Grab Bag Osechi Ration Mont Blanc Ration Kebab Ration Special Chimaki Osechi Chocolate Knowing the Heart The Fader Old Man's Elixir Billiards Magician Musk AG-LU ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Royal_Demon.txt ================================================ 000 Metatron Beelzebub Cu Chulainn Jack-o'-Lantern Jack Frost Pixie Cerberus Lilim Eligor Odin Hua Po Decarabia Mara Ose Thor Unicorn Uriel Sarasvati Valkyrie Yaksini Ganesha Anubis Mot Raphael Scathach High Pixie Barong Girimehkala King Frost Narcissus Isis Lamia Legion Rakshasa Mokoi Forneus Setanta Titania Incubus Oni Lilith Rangda Makami Parvati Gabriel Zaou-Gongen Alice Kali Kurama Tengu Oberon Shiki-Ouji Yamata-no-Orochi Orobas Hanuman Archangel Obariyon Queen Mab Sandalphon Abaddon Shiisaa Sandman Belial Leanan Sidhe Cybele Chernobog Flauros Ippon-Datara Orthrus Succubus Mothman RESERVE Dominion Nekomata Black Frost Arahabaki Angel Skadi Kikuri-Hime Chi You Power Inugami Nebiros RESERVE Slime Anzu Yatagarasu Yoshitsune Take-Minakata Ame-no-Uzume Kushinada Kumbhanda Ongyo-Ki Kin-Ki Sui-Ki Fuu-Ki Jatayu Kaiwan Kelpie Thoth Dionysus Apsaras Andras RESERVE Koropokguru Koppa Tengu Regent Queen's Necklace Stone of Scone Koh-i-Noor Orlov Emperor's Amulet Hope Diamond Crystal Skull Orichalcum RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Mandrake Baal Dakini Silky Bugs Black Ooze Bicorn Mithras Sudama Kodama Agathion Onmoraki Nue Pisaca Melchizedek Baphomet Raja Naga Naga Garuda Moloch Norn Belphegor Berith Choronzon RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Nigi Mitama Kushi Mitama Ara Mitama Saki Mitama RESERVE Shiva Michael Asura Mada Mother Harlot Clotho Lachesis Atropos Ardha RESERVE Vishnu Hariti Yurlungur Hecatoncheires Satanael RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Orpheus Thanatos Izanagi Magatsu-Izanagi Kaguya Ariadne Asterius Tsukiyomi Messiah Messiah Picaro Orpheus Picaro Thanatos Picaro Izanagi Picaro M. Izanagi Picaro Kaguya Picaro Ariadne Picaro Asterius Picaro Tsukiyomi Picaro Satanael ??? Arsene Captain Kidd Zorro Carmen Goemon Johanna Milady Necronomicon Robin Hood Loki Satanael Seiten Taisei Mercurius Hecate Kamu Susano-o Anat Astarte Prometheus Loki Arsene Captain Kidd Zorro Carmen Goemon Johanna Milady Necronomicon Robin Hood ??? Lucifer Seiten Taisei Mercurius Hecate Kamu Susano-o Anat Astarte Prometheus Loki Loki Cendrillon Vanadis William Diego Célestine Gorokichi Agnes Lucy Al Azif Hereward Ella RESERVE Satan Lucifer Kohryu Okuninushi Norn RESERVE RESERVE Futsunushi RESERVE Seth Ishtar RESERVE Surt ----- Lakshmi RESERVE RESERVE Ex-Belphegor RESERVE Garuda Fortuna Suzaku Seiryu Genbu Byakko Bishamonten Koumokuten Jikokuten Zouchouten Hell Biker Daisoujou Trumpeter White Rider Matador Pale Rider Horus RESERVE Attis RESERVE RESERVE Sraosha Berith RESERVE Mitra Phoenix Principality Neko Shogun Vasuki Ananta Throne RESERVE Quetzalcoatl Red Rider Black Rider RESERVE Ex-Moloch Pazuzu ----- Slime Jack-o'-Lantern Agathion Mandrake Shiisaa Jack Frost Sudama Onmoraki Bugs Pixie Pixie Ardha RESERVE Asmodeus Azazel Baal Tithoes Mammon Leviathan Samael Maria Vohu Manah Cait Sith Mishaguji ----- ----- RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE P5 Unused P5 Unused P5 Unused P6 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused Izanagi-no-Okami Psyche Athena Raoul Orpheus Telos Orpheus Izanagi-no-Okami Pic. Psyche Picaro Athena Picaro Neo Arsene Picaro Orpheus Telos Picaro Orpheus Picaro P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused Macabre Alilat Thunderbird Fafnir Byakhee Hastur Tam Lin Throne Surt Loa Chimera Atavaka Cait Sith Siegfried P5 Unused P5 Unused ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Royal_KeyItemNames.txt ================================================ BLANK RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Unused Unused Key to Leblanc Paper Bag Unused Unused Unused Old Key RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Unused Evil Snow Crystal Sticky Hairball Double Bookmark Unused Pen Case Muffler Cologne Camera Gloves Wristwatch Hat Earmuffs Headphones RESERVE Buchi Calculator Dyed Handkerchief Fashion Magazine Promise List Unlimited Service Dog Tag Fortune Tarot Card Interview Notes Kosha Piece Sports Watch Morgana's Scarf Recipe Notes Documentary Plans Gecko Pin Cell Key Desire and Hope Fountain Pen Gun Controller Business Card Leather Gloves Gymnastics Baton Research Notebook RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Castle Map Tower Map RESERVE Kamoshida's Medal RESERVE RESERVE RESERVE RESERVE RESERVE The King Book The Queen Book The Slave Book Green Key Red Key Randy Right Eye Lustful Left Eye Right Key Left Key Kaneshiro's Journal Torn Page 1 Torn Page 2 Torn Page 3 Torn Page 4 Torn Page 5 Torn Page 6 Abyss Gem Rejection Gem Guilt Gem Sanctuary Gem Member's Card Stolen Papyrus Pyramid Sketch Members Floor Map High Limit Floor Map Basement Blueprint High Limit Card Spaceport Map Chief Clerk ID Section Chief ID Chief Director ID Museum Brochure 1 Museum Brochure 2 Bank Blueprint Bank Keycard Casino Map Security Keycard Cruise Ship Map Membership Card VIP Invitation Vermilion Disk Vermilion Disk RESERVE Grappling Hook Building Blueprint Lab Blueprint Personnel ID Old Videotape Unused The Beefcake Book RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Unused Unused Unused Unused Unused Unused Unused Unused Unused Unused Unused Unused Unused Unused Unused Unused Unused Unused Unused Unused RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Stamp Book Star Lilina's New CD Small Key Jose's Star Intricate Bookmark Star Water Tray Letter from Royalty Free Darts Ticket Red Lust Seed Green Lust Seed Blue Lust Seed RESERVE Red Vanity Seed Green Vanity Seed Blue Vanity Seed RESERVE Red Gluttony Seed Green Gluttony Seed Blue Gluttony Seed RESERVE Red Wrath Seed Green Wrath Seed Blue Wrath Seed RESERVE Red Greed Seed Green Greed Seed Blue Greed Seed RESERVE Red Jealousy Seed Green Jealousy Seed Blue Jealousy Seed RESERVE Red Pride Seed Green Pride Seed Blue Pride Seed RESERVE Red Sorrow Seed Green Sorrow Seed Blue Sorrow Seed ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Royal_MaterialNames.txt ================================================ BLANK RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Glory Staff Blessed Trumpet Victor Laurel Porcelain Teacup Silver Cutlery Strange Lantern Nude Candle Stand Shackles Locked Collar Dull Sword Holey Helmet Crushed Shield Rusted Handcuffs Chipped Glass Ukiyo-e Ink Wash Art Hanging Scroll Picture Scroll Hannya Mask Animal Brush Fine Washi Loose Sash Cracked Vase Sooty Kettle Unsigned Mug Plastic Frame Crappy Portrait Bad Sculpture Gold Coin Stock Certificate Amber Stamp Precious Bill Rare Coin Old Coin Leather Case Safe Dial Money Counter Office Calculator Inkless Pen Unopenable Lock Worn Stamp Tattered Wallet Jewel Mummy Gold Uraeus Canopic Jar Bastet Statue Scarab Charm Mummy Mask Scratched Sword Rusted Ankh Torn Papyrus Ra Mural Sekhmet Mural Sarcophagus Bit Bent Staff Pillar Piece Moon Stone Rare Metal Sage Astrolabe UFO Drone Blade Flashlight Rainbow Diode Spaceship Stick Robot Arm Radar Antenna Broken Telescope Space Food Punctured PCB Dead Solar Panel Warped Wheel Luxury Watch Gold Earrings Damascene Cane Silver Monocle Ivory Dice Dealer Ring Magician Bowtie Pro Dart Card Shuffler Dice Shaker Gray Cufflinks Faded Silk Hat Smoked Cigar Incomplete Deck Coral Pendant Pearl Necklace Ebony Box Marble Chessboard Tortoise Hairpin Cameo Brooch Raden Plate Peacock Fan Bronze Compass Brass Pocket Watch Music Box Old Kaleidoscope Mirror Ball Masquerade Mask RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Huge Gold Lump Large Gold Lump Small Gold Lump Grooved Silver Hole Silver Thin Silver Grooved Copper Hole Copper Thin Copper Onyx Pearl Amethyst Turquoise Opal Topaz Garnet Aquamarine Ruby Emerald Sapphire Diamond Jade RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Platinum Dead Surgical Light Loose Magnetic Tape Tangled USB Cord Misprinted Poster Voice Recorder Laser Pointer Voltage Converter Broken Meter Panel Distorted Lens Old Projector Mini Sound Sensor Broken Thermostat RESERVE RESERVE RESERVE RESERVE Silent Horn Ripped Uniform Cap Broken Baton Broken Handcuffs Lustrous Iron Ball Tidy Prison Uniform Prison Officer Badge Hi-Fi Megaphone Sharp Barbed Wire Gold Emblem Golden Cap Badge Silver Arm Band RESERVE RESERVE RESERVE Copper Lump Copper Chain Copper Hand Copper Heart Copper Star Copper Moon Copper Mist Silver Lump Silver Chain Silver Hand Silver Heart Silver Star Silver Moon Silver Mist Gold Lump Gold Chain Gold Hand Gold Heart Gold Star Gold Moon Gold Mist Platinum Lump Diamond Lump RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Royal_MeleeWeaponNames.txt ================================================ BLANK Unused Rebel Knife Kukri Arsene's Cane Blizz Dagger Athame RESERVE Skinning Knife RESERVE Stun Dagger Killing Scalpel RESERVE Helper Knife Pro Skinning Knife RESERVE Mega Knife Royal Dagger RESERVE Machete Baselard RESERVE Frenzy Dagger Pro Parrying Dagger RESERVE Misericorde Parrying Dagger RESERVE RESERVE Kopis Igniter RESERVE RESERVE RESERVE RESERVE Paradise Lost RESERVE Normal Rod Hell Slugger Judge Mace Heavy Steel Pipe RESERVE Battle Hammer Iron Pipe RESERVE Heavy Mace Spike Rod RESERVE Bush Hammer Demon Pipe RESERVE Boss Bush Hammer Gaea Presser RESERVE Big Sleep Stick Stun Baton RESERVE Dragon God Pole Grand Presser Armageddon Rod Super Megido Rod RESERVE RESERVE RESERVE Fervent Bat Ruyi Jingu Bang RESERVE Sleep Stick RESERVE RESERVE Gang Star RESERVE Mjolnir Bandit Sword Headhunter Ladle Lunar Cutlass Sonic Blade Scimitar Talwar RESERVE Sleeper Blade Shamshir Blood Scimitar Resting Sword Chief's Cutlass RESERVE Cosmic Sword Damascus Sword Hot-Blooded Sword Heavy Saber RESERVE Panic Sword RESERVE Bright Sword RESERVE Answerer RESERVE RESERVE Claiomh Solais RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE God Saber RESERVE RESERVE Leather Whip RESERVE Skin Ripper Heat Whip Warrior Whip Decorative Whip Burn Whip Hero Whip RESERVE Whip Sword Electromag Whip RESERVE Mirage Whip Strike Tail RESERVE Great Whip Sword Chain Whip RESERVE Fear of Pain Spike Whip RESERVE Hard Branch RESERVE RESERVE RESERVE Guilty Whip Goat Leather Whip RESERVE RESERVE RESERVE RESERVE Snow Queen's Whip RESERVE Naraka Whip Katana Gunto Zandouto Yuibitachi Murasame Antique Gunto Seishiki Sword Koedo Sword Jagato Gekkou RESERVE RESERVE Iai Katana RESERVE Orochito Wakizashi RESERVE Masamune Master's Iai Katana RESERVE Red Demon Blade RESERVE Kaito Ranma RESERVE Usumidori RESERVE RESERVE Shikomi Kiseru RESERVE Senryou Yakusha RESERVE Brass Knuckles Hell Knuckles RESERVE RESERVE Metal Duster Old Man's Fist Iron Fist Mach Punch RESERVE Demon Fist Flash Punch RESERVE Omega Knuckle Bout Gloves Sanction RESERVE RESERVE RESERVE RESERVE Bear Gloves Clenched Fist Sabazios RESERVE RESERVE Vajra Disciplinary Whip Wicked Iron Pipe RESERVE Axe Mega Axe RESERVE Crescent Axe RESERVE Ice Axe RESERVE Celtis Kintaro Axe Amazon Axe RESERVE RESERVE RESERVE Big Bang Axe RESERVE RESERVE Gilgamesh Axe RESERVE Fleurs du Mal Knuckle Duster Delta Knuckle Heavy Grip Lumina Saber Hinokagutsuchi Quasar Saber Hinokagutsuchi II Falchion Masquerade Ribbon Fundo-Kusari Death Axe RESERVE RESERVE Bardiche Death Contract Black Kogatana RESERVE RESERVE RESERVE RESERVE Envy Chain Prophet's Hand RESERVE Venture Saber RESERVE Silver Dagger Saw Saber RESERVE RESERVE Kasumi Awaken Rapier Kasumi Aid Rapier Rapier RESERVE RESERVE Sword of Sinai Sword of Sinai II The Great Thief Stick Paradise Lost R Imprisoned Mjolnir Fine Ruyi Jingu Bang Headhunter Ladle EX Claiomh Solais R Masquerade Ribbon R Snow Queen's Whip II Dainaraka Whip Senryou Yakusha R Usumidori R Big Bear Gloves Gordios Unparalleled Vajra Death Promise Fleurs du Mal R Plasma Knife Arc Mace Megistos Sword Barog Whip Kaketsushinto Meteor Knuckle Taiji Axe Dread Saber White Snow Rapier Punish Dagger Last Hammer Vertical Edge Grapnel Ten Ichimonji Champion Crusader Guillotine Saber Zirah Bouk Dark Cutlass Mut Cutlass Baccarat Knuckle Victory Beam Decisive Rapier Infini-saber ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Royal_OutfitNames.txt ================================================ Starter Clothes Shujin Uniform BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK Dark Suit BLANK BLANK Phantom Suit Pirate Armor Morgana Classic Red Latex Suit Outlaw's Attire Metal Rider Musketeer Suit Cyber Gear Prince Suit Black Leotard Summer Uniform Summer Uniform Summer Uniform Summer Uniform Summer Uniform Summer Uniform Summer Uniform Summer Uniform Summer Uniform Summer Uniform Winter Uniform Winter Uniform Winter Uniform Winter Uniform Winter Uniform Winter Uniform Winter Uniform Winter Uniform Winter Uniform Winter Uniform Summer Clothes Summer Clothes Summer Clothes Summer Clothes Summer Clothes Summer Clothes Summer Clothes Summer Clothes Summer Clothes Summer Clothes Winter Clothes Winter Clothes Winter Clothes Winter Clothes Winter Clothes Winter Clothes Winter Clothes Winter Clothes Winter Clothes Winter Clothes Tracksuit Tracksuit Tracksuit Tracksuit Tracksuit Tracksuit Tracksuit Tracksuit Tracksuit Tracksuit Swimsuit Swimsuit Swimsuit Swimsuit Swimsuit Swimsuit Swimsuit Swimsuit Swimsuit Swimsuit Loungewear Loungewear Loungewear Loungewear Loungewear Loungewear Loungewear Loungewear Loungewear Loungewear Gekkoukan High Gekkoukan High Aigis Costume Gekkoukan High Gekkoukan High Gekkoukan High Gekkoukan High Gekkoukan High Gekkoukan High Gekkoukan High Yasogami High Yasogami High Teddie Costume Yasogami High Yasogami High Yasogami High Yasogami High Yasogami High Yasogami High Yasogami High St. Hermelin High St. Hermelin High Trish Costume v1 St. Hermelin High St. Hermelin High St. Hermelin High St. Hermelin High St. Hermelin High St. Hermelin High St. Hermelin High Seven Sisters High Seven Sisters High Trish Costume v2 Seven Sisters High Seven Sisters High Seven Sisters High Seven Sisters High Seven Sisters High Kasugayama High Seven Sisters High Vincent's Outfit Orlando's Fashion Stray Sheep Suit Catherine's Cami Johnny's Coat Katherine's Outfit Erica's Uniform Toby's Overalls Boss's Suit Rin's One Piece Karukozaka High Karukozaka High Karukozaka High Karukozaka High Karukozaka High Karukozaka High Karukozaka High Karukozaka High Hazama's Uniform Karukozaka High Butler Suit Butler Suit Maid Uniform Maid Uniform Butler Suit Maid Uniform Maid Uniform Maid Uniform Butler Suit Maid Uniform Christmas Outfit Christmas Outfit Christmas Outfit Christmas Outfit Christmas Outfit Christmas Outfit Christmas Outfit Christmas Outfit Christmas Outfit Christmas Outfit Dancewear Dancewear Dancewear Dancewear Dancewear Dancewear Dancewear Dancewear Dancewear Dancewear Shadow Ops Uniform Shadow Ops Uniform Shadow Ops Uniform Shadow Ops Uniform Shadow Ops Uniform Shadow Ops Uniform Shadow Ops Uniform Shadow Ops Uniform Shadow Ops Uniform Shadow Ops Uniform Samurai Garb Samurai Garb Burroughs Costume Samurai Garb Samurai Garb Samurai Garb Samurai Garb Samurai Garb Samurai Garb Samurai Garb Yumizuki High Yumizuki High Gouto Costume Ouran High Yumizuki High Ouran High Ouran High Ouran High Imperial Uniform Ouran High Starlight Outfit Starlight Outfit Starlight Outfit Starlight Outfit Starlight Outfit Starlight Outfit Starlight Outfit Starlight Outfit Starlight Outfit Starlight Outfit Moonlight Outfit Moonlight Outfit Moonlight Outfit Moonlight Outfit Moonlight Outfit Moonlight Outfit Moonlight Outfit Moonlight Outfit Moonlight Outfit Moonlight Outfit Ultramarine Outfit Ultramarine Outfit Long Nose Outfit Ultramarine Outfit Ultramarine Outfit Ultramarine Outfit Ultramarine Outfit Ultramarine Outfit Ultramarine Outfit Ultramarine Outfit Featherman Suit Featherman Suit Featherman Suit Featherman Suit Featherman Suit Featherman Suit Featherman Suit Featherman Suit Featherman Suit Featherman Suit Demonica Head Demonica Head Demonica Head Demonica Head Demonica Head Demonica Head Demonica Head Demonica Head Demonica Head Demonica Head Demonica Suit Demonica Suit Demonica Suit Demonica Suit Demonica Suit Demonica Suit Demonica Suit Demonica Suit Demonica Suit Demonica Suit New Cinema Outfit New Cinema Outfit New Cinema Outfit New Cinema Outfit New Cinema Outfit New Cinema Outfit New Cinema Outfit New Cinema Outfit New Cinema Outfit New Cinema Outfit ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Royal_RangedWeaponNames.txt ================================================ Blank - INCOMPLETE LIST Handgun Shotgun Slingshot 1 Submachine Gun Rifle 1 American Gun 1 Masaharu Gun 1 Aura Gun 1 Gun 009 Handgun Gun 00B Gun 00C Rifle 2 Gun 014 Gun 015 Tkachev Governance Unmarked Pistol Tkachev II Tkachev HP Makaronov Makaronov II Governance HP Compact Eliminator Makaronov SP Compact HP Assassin Assassin SP Sand Hawk II Model Gun Levinson M31 Levinson M31 II Granelli M3 Levinson M31 HP Granelli M3 SP Heavy Shotgun Mad Maximum Fireworks Mad Maximum II Heavy Shotgun II Fireworks SP Storm Shot Pumpkin Bomb Big Sleep Masterkey Orso Nero Big Sleep SP Storm Shot II Fury SP Bianchi SBAS II Calamity Gun Orso Nero SP Volley Cannon II Smithereens Calamity Gun SP Kiraihou II Smithereens II Unmarked Shotgun Bianchi SBAS Nock Volley Hellfire Nock Volley SP Slingshot Unmarked Sling Slingshot SP Slingshot HP Shrike Upsilon Slingbow II Comet 3 Shrike SP Comet 3 II Spirit Sling Upsilon II Stronger Northern Light SP Intercept Stronger SP Spirit Sling HP Pirate Killer Mt. Liang SP Dreamstone Intercept II Sling Cannon Sling Cannon II Pirate Killer SP Utopia HP Dreamstone II Catnap Mount Liang Shrike II Northern Light Shooting Star Star Slayer Replica SMG Tommy Gun Unmarked SMG Trooper MP2 Prototype Flare SMG Blitz MG Sterlidge II Trooper SP MP2 Prototype II Civilian MP Hyakka Ryouran No Mercy Civilian MP II Western SMG No Mercy II Tarantula SP MP Victoria Antares Hien Renhappou Western SMG II MP Victoria EP Honoikazuchi H. Renhappou HP Phantom Killer II Honoikazuchi SP Sterlidge Brain Shot Tommy Gun II Flare SMG II Tarantula Blitz MGSP Replica AR Black Assault AR-M4 Heavy Assault G1 Type AR-M4 II AR-M4 SP Black Assault SP Hero AR Heavy Assault II Blaze Assault Annihilator Tempest AR-X Hero AR II Cruel Carbine Blaze Assault SP Annihilator II Tempest II Cruel Carbine II Sharpshooter Ryuraihou II Sharpshooter II Hizutsu HP Kuzuryu Gouhou G1 Type SP Rebel Rifle Rebel Rifle SP Tempest HP Hizutsu Ryuraihou Heaven's Gate Replica Revolver Peacemaker P Revolver PM Sheriff PM Sheriff II Ling Xing P Revolver II Peacemaker SP Justness Justness II Evil Roulette Wildborn SP Artillery Evil Roulette II Ling Xing II Calvary Artillery II Baptism SP Orochi SP Cavalry II Twilight SP Peacemaker HP Mirrirmina Wildborn Baptism Orochi Twilight Judge of the Dead Fury Volley Cannon Kiraihou Megido Fire GL Replica Pawzooka Unmarked GL GL Mega GL Rep Scorcher GL Replica II Multiple GL Scorcher SP Eraser Town Burner HP Flame Ocean Eraser SP Multiple GL II Magma Bucket Magma Bucket SP Flame Ocean II Pandemonium SP Haru Reserve Haru Reserve 2 Town Burner Town Burner SP Pandemonium Yagrush H. Ryouran HP Antares II Phantom Killer Wild Hunt Clemont Shot Golden Beam Gun 222 Gun 223 Moebius Moebius II Sirius Sirius SP Slingbow Star Slayer HP Utopia Sudarshana Sleeper Karura II From Heaven Crimson Gun HP Riot Police SP Gravity Gun Medusan Sleeper SP R.I.Pistol Medusan II R.I.Pistol II Gravity Gun HP Nataraja Riot Police Sand Hawk Karura Crimson Gun From Heaven II Cocytus Cocytus SP Tyrant Pistol Gun 253 Gun 254 Gun 255 ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Royal_SkillCardNames.txt ================================================ BLANK (Unusable) Agi Agilao Agidyne Maragi Maragion Maragidyne Bufu Bufula Bufudyne Mabufu Mabufula Mabufudyne Garu Garula Garudyne Magaru Magarula Magarudyne Zio Zionga Ziodyne Mazio Mazionga Maziodyne Hama Hamaon Mahama Mahamaon Kouha Kouga Kougaon Makouha Makouga Makougaon Mudo Mudoon Mamudo Mamudoon Eiha Eiga Eigaon Maeiha Maeiga Maeigaon Megido Megidola Megidolaon Frei Freila Freidyne Mafrei Mafreila Mafreidyne Dazzler Nocturnal Flash Pulinpa Tentarafoo Evil Touch Evil Smile Makajama Makajamaon Famine's Breath Famine's Scream Dormina Lullaby Taunt Wage War Ominous Words Abysmal Surge Marin Karin Brain Jack Trapped Rat Self-destruct Self-destruct Self-destruct Life Drain Spirit Drain Life Leech Spirit Leech Foul Breath Stagnant Air Ghastly Wail Inferno Blazing Hell Diamond Dust Ice Age Panta Rhei Vacuum Wave Thunder Reign Wild Thunder Divine Judgment Samsara Demonic Decree Die For Me! Atomic Flare Cosmic Flare Black Viper Morning Star Psi Psio Psiodyne Mapsi Mapsio Mapsiodyne Psycho Force Psycho Blast Lunge Assault Dive Megaton Raid God's Hand Lucky Punch Miracle Punch Cleave Giant Slice Brave Blade Sword Dance Hassou Tobi Ayamur Cornered Fang Rising Slash Deadly Fury Snap Triple Down One-shot Kill Riot Gun Vajra Blast Vorpal Blade Vicious Strike Heat Wave Gigantomachia Rampage Swift Strike Deathbound Agneyastra Double Fangs Tempest Slash Myriad Slashes Sledgehammer Skull Cracker Terror Claw Headbutt Stomach Blow Dream Needle Hysterical Slap Negative Pile Brain Shake Flash Bomb Mind Slice Bloodbath Memory Blow Insatiable Strike Dormin Rush Oni-Kagura Bad Beat Brain Buster Dia Diarama Diarahan Media Mediarama Mediarahan Recarm Samarecarm Recarmdra Amrita Drop Amrita Shower Mabaisudi Salvation Patra Energy Shower Energy Drop Baisudi Me Patra Tarukaja Rakukaja Sukukaja Heat Riser Matarukaja Marakukaja Masukukaja Thermopylae Tarunda Rakunda Sukunda Debilitate Matarunda Marakunda Masukunda Dekunda Dekaja Charge Concentrate Rebellion Revolution Tetrakarn Makarakarn Tetraja Tetra Break Makara Break Fire Wall Ice Wall Elec Wall Wind Wall Fire Break Ice Break Wind Break Elec Break BLANK BLANK Nuke Wall Psy Wall Nuke Break Psy Break Counter Counterstrike High Counter Endure Enduring Soul Dodge Bless Dodge Curse Survival Trick Dodge Fire Evade Fire Dodge Ice Evade Ice Dodge Wind Evade Wind Dodge Elec Evade Elec Dodge Phys Evade Phys Fire Boost Fire Amp Ice Boost Ice Amp Wind Boost Wind Amp Elec Boost Elec Amp Angelic Grace Divine Grace Regenerate 1 Regenerate 2 Regenerate 3 Invigorate 1 Invigorate 2 Invigorate 3 Attack Master Auto-Mataru Defense Master Auto-Maraku Speed Master Auto-Masuku Fast Heal Insta-Heal Arms Master Spell Master Sharp Student Apt Pupil Ali Dance Firm Stance Life Aid Victory Cry Growth 1 Growth 2 Growth 3 Unshaken Will Evade Bless Evade Curse BLANK Resist Fire Null Fire Repel Fire Drain Fire Resist Ice Null Ice Repel Ice Drain Ice Resist Wind Null Wind Repel Wind Drain Wind Resist Elec Null Elec Repel Elec Drain Elec Resist Bless Null Bless Repel Bless Drain Bless Resist Curse Null Curse Repel Curse Drain Curse Resist Phys Null Phys Repel Phys Drain Phys Ailment Boost Hama Boost Mudo Boost Dizzy Boost Confuse Boost Fear Boost Forget Boost Sleep Boost Rage Boost Despair Boost BLANK Brainwash Boost Resist Dizzy Resist Confuse Resist Fear Resist Forget Resist Sleep Resist Rage Resist Despair BLANK Resist Brainwash Null Dizzy Null Confuse Null Fear Null Forget Null Sleep Null Rage Null Despair Null Brainwash Burn Boost Freeze Boost Shock Boost Fortified Moxy Adverse Resolve Last Stand Heat Up BLANK Touch n' Go Climate Decorum Ambient Aid Gun Boost Gun Amp Trigger Happy Resist Nuke Null Nuke Repel Nuke Drain Nuke Resist Psy Null Psy Repel Psy Drain Psy Nuke Boost Nuke Amp Psy Boost Psy Amp Dodge Nuke Evade Nuke Dodge Psy Evade Psy Bless Boost Bless Amp Curse Boost Curse Amp Magic Ability Fortify Spirit Almighty Boost Almighty Amp Zenith Defense Soul Chain BLANK Kill Rush Gatling Blow Double Shot Power Slash Death Scythe BLANK BLANK Taunting Aura Concealment BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK Blank Card BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK Crit Atk Up 1 Crit Atk Up 2 Crit Atk Up 3 Crit Atk Up 4 Crit Atk Up 솂 BLANK BLANK BLANK SP Recovery 1 SP Recovery 2 SP Recovery 3 SP Recovery 4 SP Recovery 솂 BLANK BLANK BLANK Ailment Up 1 Ailment Up 2 Ailment Up 3 Ailment Up 4 Ailment Up 솂 BLANK BLANK BLANK Magic Atk Cost 1 Magic Atk Cost 2 Magic Atk Cost 3 Magic Atk Cost 4 Magic Atk Cost 솂 BLANK BLANK BLANK Phys HP Cost 1 Phys HP Cost 2 Phys HP Cost 3 Phys HP Cost 4 Phys HP Cost 솂 BLANK BLANK BLANK Single-Target Up 1 Single-Target Up 2 Single-Target Up 3 Single-Target Up 4 Single-Target Up 솂 BLANK BLANK BLANK Army Might 1 Mult-Target Up 2 Mult-Target Up 3 Mult-Target Up 4 Mult-Target Up 솂 BLANK BLANK BLANK Phys Up 1 Phys Up 2 Phys Up 3 Phys Up 4 Phys Up 솂 BLANK BLANK BLANK Magic Up 1 Magic Up 2 Magic Up 3 Magic Up 4 Magic Up 솂 BLANK BLANK BLANK Baton Pass Up 1 Baton Pass Up 2 Baton Pass Up 3 Baton Pass Up 4 Baton Pass Up 솂 BLANK BLANK BLANK Ambush Up 1 Ambush Up 2 Ambush Up 3 Ambush Up 4 Ambush Up 솂 BLANK BLANK BLANK 1 More Up 1 1 More Up 2 1 More Up 3 1 More Up 4 1 More Up 솂 BLANK BLANK BLANK Ailment Multiplier 1 Ailment Multiplier 2 Ailment Multiplier 3 Ailment Multiplier 4 Ailment Multiplier 솂 BLANK BLANK BLANK Phys Up (Low) Phys Up (Mid) Phys Up (High) Heal Cost (Low) Heal Cost (Mid) Heal Cost (High) Magic Up (Low) Magic Up (Mid) Magic Up (High) Phys Cost (Low) Phys Cost (Mid) Phys Cost (High) Magic Cost (Low) Magic Cost (Mid) Magic Cost (High) Technical Up (Low) Technical Up (Mid) Technical Up (High) Attack Cost (Low) Attack Cost (Mid) Attack Cost (High) Critical Up (Low) Critical Up (Mid) Critical Up (High) Backup Sure Escape BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Royal_SkillNames.txt ================================================ Attack BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK Agi Agilao Agidyne Maragi Maragion Maragidyne Agi Maragi Fire Ball Raging Flames Bufu Bufula Bufudyne Mabufu Mabufula Mabufudyne Bufu Mabufu Snow Ball Megidolaon Garu Garula Garudyne Magaru Magarula Magarudyne Garu Gale Ball Bless Ball Curse Ball Zio Zionga Ziodyne Mazio Mazionga Maziodyne Zio Mazio Volt Ball Make it Rain Hama Hamaon Mahama Mahamaon Kouha Kouga Kougaon Makouha Makouga Makougaon Mudo Mudoon Mamudo Mamudoon Eiha Eiga Eigaon Maeiha Maeiga Maeigaon Megido Megidola Megidolaon Frei Freila Freidyne Mafrei Mafreila Mafreidyne Nuke Ball Dazzler Nocturnal Flash Pulinpa Tentarafoo Evil Touch Evil Smile Makajama Makajamaon Famine's Breath Famine's Scream Dormina Lullaby Taunt Wage War Ominous Words Abysmal Surge Marin Karin Brain Jack Trapped Rat Psy Ball Self-destruct Self-destruct Self-destruct Life Drain Spirit Drain Life Leech Spirit Leech Spirit Drain NOT USED BLANK Foul Breath Stagnant Air Reverse Rub Ghastly Wail NOT USED Drain Megidola Launch Special Fireworks Drift Inferno Blazing Hell Low Burn Med Burn High Burn Low Freeze Med Freeze High Freeze Low Shock Med Shock Diamond Dust Ice Age High Shock Low Dizzy Med Dizzy High Dizzy Low Confuse Med Confuse High Confuse Low Fear Panta Rhei Vacuum Wave Med Fear High Fear Low Forget Med Forget High Forget Low Brainwash Med Brainwash High Brainwash Thunder Reign Wild Thunder Low Sleep Med Sleep High Sleep Low Rage Med Rage High Rage Low Despair Med Despair Divine Judgment Samsara High Despair Low All Ail Med All Ail High All Ail Adam Skill 1 Revitalize Soul Grand Palm Full Force Demonic Decree Die For Me! Support Plus 3 Support Plus 2 Support Plus 1 Support Rate Up Atomic Flare Cosmic Flare Mindfulness Wakefulness Black Viper Morning Star Abyssal Eye Champion's Cup Bleeding Dry Brush Vault Guardian Wings of Wisdom President's Insight Gambler's Foresight Tyrant's Will Psi Psio Psiodyne Mapsi Mapsio Mapsiodyne Attack Position Psycho Force Psycho Blast Universal Power Lunge Assault Dive Megaton Raid God's Hand Lunge Lucky Punch Miracle Punch Kill Rush Gatling Blow Piercing Strike Cleave Giant Slice Brave Blade Sword Dance Holy Benevolence Hassou Tobi Ayamur Death Scythe UNUSED NOT USED Cornered Fang Rising Slash Deadly Fury Nuclear Crush Snap Triple Down One-shot Kill Riot Gun Double Shot Origin Light Vajra Blast Vorpal Blade NOT USED NOT USED NOT USED Vicious Strike Heat Wave Gigantomachia Swirling Psychokinesis Tyrant's Purge Mass Ball Rampage Swift Strike Deathbound Agneyastra NOT USED Regeneration Rising Slash Deadly Fury Tyrant's Judgement Double Fangs Power Slash Shapeless Guard Tempest Slash Myriad Slashes Amplify Force Amplify Magic Raining Seeds Energy Stream Flow Sledgehammer Skull Cracker Terror Claw Headbutt Stomach Blow Dream Needle Hysterical Slap Negative Pile Brain Shake Attack Flash Bomb Mind Slice Bloodbath Memory Blow Insatiable Strike Dormin Rush Oni-Kagura Bad Beat Brain Buster Laevateinn Handgun Shotgun Slingshot Machine Gun Assault Rifle Revolver Grenade Launcher Laser Gun Antique Rifle Tyrant Stance Fighting Spirit Miracle Rush Checkmate Hyakka Ryouran High Energy Ultimate Support Life Wall Rebellion Blade Masquerade Guiding Tendril Dia Diarama Diarahan Brave Step Maruki Punch Media Mediarama Mediarahan Brutal Impact Cursed Strike Recarm Samarecarm Recarmdra Sleuthing Instinct Sleuthing Mastery Amrita Drop Amrita Shower Holy Strike Salvation Nuclear Strike Psychokinesis Strike Taunting Aura Storm Punishment Concealment Lightning Punishment Patra Punishing Hail Energy Shower Energy Drop Baisudi Me Patra Mabaisudi Charge Ball Concentrated Ball Inferno Punishment Tarukaja Rakukaja Sukukaja Heat Riser Gunfire Punishment Matarukaja Marakukaja Masukukaja Thermopylae Guillotine Punishment Tarunda Rakunda Sukunda Debilitate Quadruple Summon Matarunda Marakunda Masukunda Analysis Analysis Dekunda Dekaja Explosion! Explosion! Sphinx Swipe Charge Concentrate Nose Dive Kill Reward Up Guard Reward Up Rebellion Revolution Make it Rain Special Guards Fake Artist's Grace Tetrakarn Makarakarn Tetraja Taste of Wrath True Fake Tetra Break Makara Break Killshot of Love NOT USED NOT USED Fire Wall Ice Wall Elec Wall Wind Wall BLANK Fire Break Ice Break Wind Break Elec Break BLANK Trafuri Traesto Active Barrier Nuke Wall Psy Wall Nuke Break Psy Break BLANK BLANK Flow All-out Lv 1 All-out Lv 2 All-out Lv 3 Emergency Escape Attack Down Shot Summon Call for Backup Outlaw Attack Barrage Follow Crush Follow Claw Follow Whip Follow Blade Follow Knuckle Follow Axe Follow Saber Dispose Item Heal Enemy Death (Despair) Member 1 Pursue Up Member 2 Pursue Up Member 3 Pursue Up Member 4 Pursue Up Member 5 Pursue Up Member 6 Pursue Up Member 7 Pursue Up Power Up Enemy Power Up Enemy Power Up Enemy Steal Info Sup Matarukaja Sup Marakukaja Sup Masukukaja Sup All Kaja Sup Charge Sup HP +30% Sup SP +10% Sup Escape Route Sup Third Eye Subrecover HP Subrecover SP Analysis Deep Analysis Full Analysis All-Out Attack Dust Flurry Tongue Whip Whip Strike Lustful Slurp Libido Boost Golden Knife Lick Gold Medal Spike Volleyball Assault Maelstrom Flame Dance Silent Snowscape Thunderclap Maeiga Hunger All Ocular Vulcan Missile Party Fear Gas Super VIP Form March of the Piggy Sphinx Swipe Wing Blast Rapid Ascent Sphinx Dive Dreadful Scream Bite Restore The Artist's Grace Work Order Sacrifice Order Selfless Devotion Penalty Coin Attack Severing Slash Gatling Gun Berserker Dance Roulette: HP Roulette: SP Roulette: Money Roulette: Support 1 Roulette: Support 2 Roulette: Support 3 Beast King's Wrath Hunting Stance Arm of Destruction Gryphon's Breath Royal Wing Beam Cannon Fire Cannon Barrage Unholy Convergence Pyramid Blast Tyrant's Fist Tyrant's Glare Tyrant's Wave Fig Seed Medicine Ointment Antibiotic Gel Life Stone Bead Value Medicine Medical Kit Maka Leaf Bead Chain Soul Drop Snuff Soul Chewing Soul Soul Food Revival Bead Balm of Life Royal Jelly Organic Herb Disclose Tranquilizer Kopi Luwak Goho-M Vanish Ball Soma Amrita Soda Hiranya Muscle Drink Odd Morsel Rancid Gravy Plume of Dusk Magic Mirror Physical Mirror Universe Ring Sleipnir Obsidian Mirror Purifying Water Purifying Salt Firecracker San-zun Tama Ice Cube Dry Ice Pinwheel Yashichi Ball Lightning Tesla Coil Smart Bomb Segami Rice Curse Paper Flame Magatama Wind Magatama Freeze Magatama Bolt Magatama Homunculus Removal Potion Kouga Ball Makouha Ball Eiga Ball Maeiga Ball Psio Ball Mapsi Ball Freila Ball Mafrei Ball Nuke Magatama Psy Magatama Bless Magatama Curse Magatama Cooking Snack Juice 1 Juice 2 Juice 3 Juicer Bar 1 Juicer Bar 2 Juicer Bar 3 Juicer Bar 4 Health Drink 1 Health Drink 2 Health Drink 3 Canned Juice 1 Canned Juice 2 Canned Juice 3 Canned Juice 4 Military Food 1 Military Food 2 Military Food 3 Drug Store 1 Drug Store 2 Drug Store 3 Drug Store 4 Drug Store 5 Drug Store 6 Drug Store 7 Drug Store 8 Drug Store 9 Drug Store 10 Drug Store 11 Drug Store 12 Special Coffee 1 Special Coffee 2 Double Fangs Twins Down Attack Caro Rod Caro Attack Megidolaon Rays of Control Rays of Control Rays of Control Rays of Control Arrow of Light Diffraction Arrow Light Edge Gathering Light Eternal Light Holy Change Distortion Wave Tough Law Frail Law New Creation Distortion Surge Arrow of Light Manifest Sword Manifest Gun Manifest Bell Sword of Judgment Capital Punishment Manifest Book Distorted Lust Gospel Distorted Wrath Distorted Vanity Song of Salvation Wrath of God Distorted Gluttony Distorted Envy Song of Placation Divine Apex Rays of Control Distorted Avarice Will of the People Rays of Control Moral Support Active Support Mental Hack Emergency Shift Final Guard Position Hack Fitness Talk Treasure Skimmer Subrecover HP EX Subrecover SP EX Big Bang Treat Explosion! Explosion! Explosion! Big Bang Order Roulette Time Trip-Upper Shot of Lust Down Shot 2 Down Shot 3 Down Shot 4 Electro Attack Sinful Shell Follow Blade Summon Madara-Megido Curry Raku Enemy Benefit Diarahan Curry Suku Decoy Ball Super Decoy Ball Metabolic Wave Laevateinn Desperation Call of Chaos Big Bang Challenge Grail Light 2 Megidola Rage Transmission Hundred Slaps Distorted Pride Divine Punishment Will of the People Wind Cutter Shoot Up Executive Punch Megidolaon Vorpal Blade Megidolaon Big Bang Burger Earth Burger Mars Burger Moon Burger Saturn Burger Justine Attack Caroline Attack Curry Makara Curry Tetra Curry Endure Curry Charge Curry Concentrate Curry Heat Riser Magic Wall Cadenza Cross Slash Door of Hades Magatsu Mandala Shining Arrows Beast Weaver Titanomachia Abyssal Wings Oratario Myriad Truths Neo Cadenza Akashic Arts Phantom Show Confuse Ball Baptism Ball Exorcism Ball Megido Megidola Megidolaon Slam Megaton Raid One-shot Kill Inferno Diamond Dust Eternal Radiance Tyrant Chaos New Curry 1 New Curry 2 Reviv-All Reviv-All Z Dark Akechi誂Ꚁor pursuing Dark Akechi誂Ꚁor Gun pursuing Wild Talk Baton Pass Punk Talk Pickpocket Harisen Recovery Protect Girl Talk Crocodile Tears Sexy Technique Smooth Talk Art Talk Diplomacy Fundraising Manipulation Mind Control Charismatic Speech Black Belt Talk Koma Sabaki Kakoi Kuzushi Touryou Togo System Bullet Hail Warning Shot Celeb Talk Kitty Talk Marin Karin Womanizing Indignant Revenge Healing Power Healing Power Taunt Iridescent Change Brave Blade Assault Dive Terror Claw Bufudyne Psiodyne Mazionga Maziodyne Maeiga Maeigaon Adam Skill 5 Adam Skill 6 Vorpal Blade Mona/Ryuji Unison Attack Mona/Ann Unison Attack Mona/Haru Unison Attack Yusuke/Ann Unison Attack Ryuji/Yusuke Unison Attack Ryuji/Makoto Unison Attack Protag/Akechi Unison Attack Makoto/Haru Unison Attack UNUSED: Akechi Unison Attack Protag/Kasumi Unison Attack Mona/Ryuji Unison Attack Mona/Ann Unison Attack Mona/Haru Unison Attack Yusuke/Ann Unison Attack Ryuji/Yusuke Unison Attack Ryuji/Makoto Unison Attack Protag/Akechi Unison Attack Makoto/Haru Unison Attack Unused: Akechi Unison Attack Protag/Kasumi Unison Attack Counter Counterstrike High Counter Resist Burn Null Burn Endure Enduring Soul Resist Freeze Null Freeze Survival Trick Dodge Fire Evade Fire Dodge Ice Evade Ice Dodge Wind Evade Wind Dodge Elec Evade Elec Dodge Phys Evade Phys Fire Boost Fire Amp Ice Boost Ice Amp Wind Boost Wind Amp Elec Boost Elec Amp Angelic Grace Divine Grace Regenerate 1 Regenerate 2 Regenerate 3 Dodge Bless Dodge Curse Invigorate 1 Invigorate 2 Invigorate 3 Evade Bless Evade Curse Attack Master Auto-Mataru Resist Shock Defense Master Auto-Maraku Null Shock Speed Master Auto-Masuku Resist Hunger Null Hunger Fast Heal Insta-Heal Arms Master Spell Master Rage Atk Up Sharp Student Apt Pupil Ali Dance Firm Stance +50% EXP Life Aid Victory Cry Growth 1 Growth 2 Growth 3 Unshaken Will Null Bless Insta-kill Baton Pass Soul Touch Unused Kakoi Kuzushi Resist Fire Null Fire Repel Fire Drain Fire Null Curse Insta-kill Resist Ice Null Ice Repel Ice Drain Ice +15% EXP Resist Wind Null Wind Repel Wind Drain Wind All-Out Attack Boost Resist Elec Null Elec Repel Elec Drain Elec Money Boost Resist Bless Null Bless Repel Bless Drain Bless Hide Resist Curse Null Curse Repel Curse Drain Curse Life Boost Resist Phys Null Phys Repel Phys Drain Phys Null Bless/Curse Ailment Boost Hama Boost Mudo Boost Gun Accuracy +5% Samurai Spirit Dizzy Boost Confuse Boost Fear Boost Forget Boost Sleep Boost Rage Boost Despair Boost Kuzunoha Emblem Brainwash Boost Critical Rate Up (High) Resist Dizzy Resist Confuse Resist Fear Resist Forget Resist Sleep Resist Rage Resist Despair Fusion Accident Up Resist Brainwash Tyrant's Mind Null Dizzy Null Confuse Null Fear Null Forget Null Sleep Null Rage Null Despair Holy Whisper Null Brainwash Holy Embrace Burn Boost Freeze Boost Shock Boost BLANK Fortified Moxy Adverse Resolve Last Stand Heat Up BLANK Touch n' Go Climate Decorum Ambient Aid RESERVE Gun Boost Gun Amp Trigger Happy Resist Nuke Null Nuke Repel Nuke Drain Nuke RESERVE Resist Psy Null Psy Repel Psy Drain Psy RESERVE Nuke Boost Nuke Amp RESERVE Psy Boost Psy Amp Sexy Technique Dodge Nuke Evade Nuke Detox Dodge Psy Evade Psy Detox Bless Boost Bless Amp RESERVE Curse Boost Curse Amp Not Found by Enemy Magic Ability Fortify Spirit Almighty Boost Almighty Amp Zenith Defense Soul Chain Vanity Copy Gluttonous Snuff Sloth Defense Brush of Vanity Life Rise Mana Rise Soul Touch Victory Cry Trait DLC for Bitedown BLANK Ailment Effect Up Ailment Effect Up+ Instakill SP Heal Low Instakill SP Heal Mid Instakill SP Heal High Technical Effect Up Technical Effect Up+ Low HP Attack Up Low HP Attack Up+ WEAK Hit Effect Up WEAK Hit Effect Up+ Null Insta-kill HP Cost Down 10% HP Cost Down 25% SP Cost Down 10% SP Cost Down 25% Heal Magic Up 10% Heal Magic Up 25% Chance of 0 HP Cost Chance of 0 SP Cost Target ATK Up Target ATK Up+ All Crits, No Evasion Heal Cost Down 25% Heal Cost Down 10% ATK Up, Aim Down Ailment Success Up BLANK 4-Affinity Boost 3-Affinity Light Boost Support Turn Extend Insta-kill Up Insta-kill Up+ Life Bonus Life Gain Life Surge Mana Bonus Mana Gain Mana Surge Critical Effect Up Critical Effect Up+ Hit Damage Doubled All Target ATK Up All Target ATK Up+ Auto Barrier Backup Support Absolute Escape Shield of Loyalty All Amp BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Royal_Traits.txt ================================================ RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Relentless RESERVE RESERVE Savior Bloodline Grace of Mother RESERVE RESERVE RESERVE Relief Bloodline Ave Maria RESERVE Foul Stench RESERVE RESERVE RESERVE RESERVE Static Electricity Ghost Nest Cold-Blooded RESERVE RESERVE RESERVE RESERVE RESERVE Allure of Wisdom RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Frenzied Bull RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Intense Focus RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Mighty Gaze RESERVE RESERVE Striking Weight Undying Fury RESERVE RESERVE RESERVE Retaliating Body Inviolable Beauty RESERVE Pagan Allure RESERVE RESERVE RESERVE RESERVE Rare Antibody Immunity RESERVE Skillful Combo Linked Bloodline RESERVE RESERVE RESERVE Foul Odor Thermal Conduct RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Pinch Anchor Vitality of the Tree Gloomy Child RESERVE RESERVE RESERVE RESERVE RESERVE Skillful Technique Universal Law RESERVE Ailment Hunter Hollow Jester RESERVE RESERVE RESERVE Deathly Illness Omen RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Explosive Scheme RESERVE Infinite Scheme Raging Temper Eccentric Temper RESERVE Proud Presence Majestic Presence RESERVE Mastery of Magic Pinnacle of Magic RESERVE Scoundrel Eyes Unparalleled Eyes RESERVE Gaia Pact Gaia Blessing RESERVE Icy Glare Cool Customer RESERVE Tactical Spirit Ingenious Spirit Flawless Spirit Veil of Midnight Veil of Sunrise RESERVE Heated Bloodline Drunken Passion Frigid Bloodline Cocytus Electric Bloodline Bargain Bolts Wind Bloodline Vahana's Wings Psychic Bloodline Chi You's Blessing Atomic Bloodline Atomic Hellscape Blessed Bloodline Martyr's Gift Cursed Bloodline Mother's Lament RESERVE Gluttonmouth Demon's Bite Mouth of Savoring Naranari Hallowed Spirit Potent Hypnosis Wealth of Lotus Internal Hypnosis Positive Thoughts Draining Mouth RESERVE Tag Team Iron Heart Crisis Control Bloodstained Eyes Will of the Sword RESERVE Circle of Sadness Bolstering Force God Maker Hazy Presence Country Maker Grace of the Olive Just Die Blessed Spirit RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Ultimate Vessel Ultimate Vessel Ultimate Vessel Ultimate Vessel Ultimate Vessel Ultimate Vessel Ultimate Vessel Ultimate Vessel Ultimate Vessel RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Vanilla_AccessoryNames.txt ================================================ Blank Hip Glasses Suspenders Fanny Pack Hairpin Silver Key Ring Black Tights Dotted Tights Headphones Black Necktie Worn Rosary Breath Sash Stamina Sash Vitality Sash Spirit Sash Vigor Sash Grit Sash Chakra Choker Mind Choker Soul Choker Aura Choker Spirit Choker Divine Choker Red Band Blue Band Green Band Yellow Band Fire Bangle Ice Bangle Wind Bangle Elec Bangle Star Bracelet Circular Band White Band Black Band Nuclear Band Kinetic Bangle Holy Bangle Grudge Bangle Anger Bandana Secret Hood Stone Cap Air Mino Extra Mag 1 Extra Mag 2 Extra Mag 3 Wood Clappers Hot Water Pouch Rubber Gloves Shield Goggles Calming Mask Wild Clogs Notebook Hunger Gem Sleep Gem Rage Gem Despair Gem Towser's Belt Brain Guard Burn Charm Freeze Charm Shock Charm Dizzy Charm Confuse Charm Fear Charm Forget Charm Hunger Charm Sleep Charm Rage Charm Despair Charm Brainwash Charm Zero-Day Pass Revenge Mirror Reprisal Mirror Retribution Mirror Power Anklet Muscle Anklet Soldier Anklet Berserk Anklet Hercules Anklet Atlas Anklet Magic Amulet Witch Amulet Druid Amulet Rune Amulet Wizard Amulet Shaman Amulet Strength Belt Protect Belt Fortress Belt Armada Belt Gigas Belt Gaia Belt Army Socks Wing Socks Purebred Socks Cheetah Socks Sonic Socks Skanda Socks Lucky Charm Zodiac Charm Feng Shui Charm Bagua Charm Guard Charm Tyche Charm Knight Crest Hero Crest Girard Medal Olivier Medal Roland Medal Caesar Medal Rakshasa Belt Vajra Belt Skanda Belt Spirit Belt Willful Belt Hachiman Belt Crimson Ring Ignis Ring Atar Ring Ice Ring Aurora Ring Poli'ahu Ring Elec Ring Blitz Ring Indra Ring Wind Ring Gale Ring Kukulkan Ring Atom Ring Shelter Ring Aegis Ring Psychic Ring Parapsy Ring Akashic Ring Shoten Ring Heaven Ring Nirvana Ring Midnight Ring Fallen Ring Druj Ring Resist Ring Dispel Ring Banish Ring Bold Eyepatch Hero Eyepatch Epic Eyepatch Fire Mask Flame Cape Blaze Cape Ice Mask Hail Cape Blizzard Cape Elec Mask Thunder Cape Blizzard Cape Wind Mask Gale Cape Tempest Cape Heat Mask Heatwave Cape Nuclear Cape Psychic Mask TK Cape Abhijna Cape Hamaya Mask Royal Cape Holy Cape Protect Mask Mystic Mask Grudge Mask Magic Rosary Wizard Rosary Makyou Rosary Expedite Ring Petra Genetrix Khamrai Tao Hua Khon Daffodils Legion's Jail Thunder Band Shackles Vayu's Wrath Regent Queen's Necklace Stone of Scone Koh-i-Noor Orlov Emperor's Amulet Hope Diamond Crystal Skull 0x0BF Miyuki's Earring Harumi's Earring Marronnier's Earring Thief Mask Black Rock 0x0C5 Vulcan Band Neptune Band Aquilo Band Jupiter Band Janus Band Minerva Band Venus Band Pluto Band Hades Harp Menehune Dolls Hawaiian Ring Forneus Badge Train Badge PI Badge Punch Badge Betting Badge Golf Badge Tough Belt Dandy Mirror Leblanc Charm Boss Undies 2nd Mate Badge 1st Mate Badge Captain Badge Regen Patch 1 Regen Patch 2 Regen Patch 3 SP Adhesive 1 SP Adhesive 2 SP Adhesive 3 Hot Compress Grudge Gauze Thought Gauze Savage Band Omnipotent Orb Divine Pillar Darkness Ring White Headband Attachment Pearl Black Headband Red Yarn Ball Thunder Horns Black Moon Holy Stone Team Glasses SEES Armband Sevens Emblem Hermelin Badge Arm PC Midnight Bandana Evoker Honu Charm Tiki Keychain Beast Headphones Babel Headphones Lambs' Pillow Gauntlet Kuzunoha Tubes ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Vanilla_ArmorNames.txt ================================================ Blank Thief Clothes Dark Undershirt Print T-Shirt Neckerchief Baseball Jacket Dress Shirt Turtleneck Pink Top Loose Cutsew Formal Shirt 0x00B 0x00C Gold Breastplate Grimy Gear Soiled Armor Shoulder Pads Battle Camisole Padded Shirt Silk Scarf Pauldrons Old Camisole Ancient Shirt Well-worn Scarf Burntech Magic Camisole Lynx Camo Vest Cat Sweater Old Blouse Retro Camisole Worn Chainmail Guard Bandana Survival Vest Robust Apron Chain Vest Breeze Scarf Okamoto Vest Courbet Apron Elegant Shirt Flowing Scarf Cosmic Undies Lady's Dress Austere Haori E-Collar Gaudy Undies Scream Dress Pollock Vest Renoir Scarf Acrylic-coated Gear Paint-flecked Armor 0x032 0x033 Athletic Shirt Power Camisole Army Vest Camo Collar Nouveau Riche Shirt Sponge Camisole Gilded Vest Fancy Collar Saint's Tunic Glaring Cape Reckless Vest Water Crown Patron Undies Accountant Cape Bookkeeper Wrap Flexible Collar Tarnished Gear Gold-tainted Armor 0x046 0x047 Plate Vest Elysian Robe Papal Robes Id Collar Vest of the Dead Rosetta Corset Pyramid Jacket Bandage Collar Retention Vest Dogwatch Kimono Hope Shirt Sparkly Collar Sand Gown Pyramid Shawl Royal Haori Magical Scarf Dust-crusted Gear Timeworn Armor 0x05A 0x05B Gigas Vest Spiked Bra Brigandine Memorial Collar UFO Vest Astro Bra Space Suit Quiet Collar Mythril Vest Maillot Dieting Wrap Rubber Scarf Moon Man Vest Zero-G Undies Akashic Shirt Solar Wind Scarf Spyware-laden Gear Fragmented Armor 0x06E 0x06F Fluted Guard Rune Dress Ghillie Vest Measure Collar Gambler Guard Tsubofuri Wrap Unyielding Vest Scam Collar Brave Waistcoat Yama Dress Egoist Shirt Morose Collar Lucky Waistcoat Gambler Dress Gambler Shirt Gambler Collar Seedy Gear Smokestained Armor 0x082 0x083 Kaiser Vest Kotodama Cape Life Jacket Killer Collar Luxurious Vest Aristocrat Cape Magellan Robe Revelry Collar Fireman Happi Mizuha Doumaru Best Vest Insomnia Collar Captain's Vest Millionaire Doumaru Steel Chef Vest Gorgeous Collar Corrupt Gear Classified Armor 0x096 0x097 Karna's Robe Titanium Set Silver Vest Sublime Collar Karna's Robe+ Titanium Set+ Silver Vest+ Sublime Collar+ Demon's Jacket Haten Robe Soul Vest Nekomata Coat Demon's Jacket+ Haten Robe+ Soul Vest+ Nekomata Coat+ Desecrated Gear Unholy Armor 0x0AA 0x0AB Over Guard Diva Guard Empathy Cape Engetsu Collar Over Guard+ Diva Guard+ Empathy Cape+ Engetsu Collar+ Immortal Vest Sublime Bikini Hero Jin-Baori 9 Lives Collar Immortal Vest+ Sublime Bikini+ Hero Jinbaori+ 9-Lives Collar+ Filth-caked Gear Unsanitary Armor RESERVE RESERVE Tantric Oath Black Jacket Official's Robe Fusion Guard M 4 Silk Dress Archangel Bra Tapsuan Fusion Guard F 4 King Frost Cape Black Wing Robe Fusion Guard 3 Fusion Guard 4 Frost Hood Jack Hood Black Robe RESERVE Empress Guard Weird Wrap Moonlight Robe Lucifer Guard RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE 0x100 0x101 0x102 0x103 0x104 0x105 0x106 0x107 0x108 0x109 0x10A 0x10B 0x10C 0x10D 0x10E 0x10F 0x110 0x111 0x112 0x113 0x114 0x115 0x116 0x117 0x118 0x119 0x11A 0x11B 0x11C 0x11D 0x11E 0x11F 0x120 0x121 0x122 0x123 0x124 0x125 0x126 0x127 0x128 0x129 0x12A 0x12B 0x12C ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Vanilla_ConsumableItemNames.txt ================================================ Blank Devil Fruit Recov-R: 50 mg Recov-R: 100 mg Takemedic Life Stone Bead Takemedic-All Takemedic-All V Takemedic-All Z Bead Chain Soul Drop Snuff Soul Chewing Soul Soul Food Revival Bead Balm of Life RESERVE Nohar-M Relax Gel Alert Capsule RESERVE RESERVE Vanish Ball Soma Amrita Soda Hiranya Muscle Drink Odd Morsel Rancid Gravy RESERVE Magic Ointment Physical Ointment Rasetsu Ofuda Idaten Ofuda Kongou Ofuda Kajaclear-R Kundaclear-R Molotov Cocktail Blowtorch Freeze Spray Dry Ice Air Cannon Vacuum Cutter Stun Gun Tesla Coil Megido Bomb Sacramental Bread Straw Doll Hell Magatama Cyclone Magatama Frost Magatama Arc Magatama Psycho Bomb Zener Cards Atom Match Kagutsuchi Orb Happy Bomb Segaki Rice Curse Bomb Five-inch Nail Revivadrin Medicine Life Ointment Homunculus RESERVE Reviv-All Renew-All Recover Oil RESERVE DVD Player Garden Energy Bio Nutrients Mega Fertilizer Psy Magatama Nuclear Magatama Bless Magatama Curse Magatama RESERVE RESERVE PC Tool Set RESERVE Glass Vase Star Mirror Snack Pack Musty Pages Homemaker Hero Heart Ring Heart Necklace Designer Perfume Incense Set Mini Cactus Flower Basket Rose Bouquet Black Mug Sakura Fan Fountain Pen Robot Vacuum Motorbike Figure Local Mascot Set Spotlight Goho-M RESERVE Smokescreen RESERVE Hypno Mist Stealthanol Covertizer RESERVE Silk Yarn Thick Parchment Tin Clasp Plant Balm Cork Bark Iron Sand Condenser Lens Aluminum Sheet Tanned Leather Red Phosphorus Liquid Mercury RESERVE Wise Men's Words Ghost Encounters Tidying the Heart Buchiko's Story Scarlet Lipstick RESERVE Punch Ouch Starvicks Udagawa Water CRT Television RESERVE Teen's Life Master Swordsman Flowerpedia New Choju-Giga PT Bible Phan-Sightings Annals of Greatness Call Me Chief How to Karakuri Reckless Casanova RESERVE Junk Money Distributor Item Distributor RESERVE Jagariko Broken Rock Salt Movie Ticket Movie 02 Ticket Movie 03 Ticket Movie 04 Ticket RESERVE RESERVE Summer Lotto S Autumn Bread Element Set Forces Set Shitamachi Reborn Star Forneus Weekend Parks Train of Life Power Intuition Bonehead Crime Lab Squad Not-so-hot Betsy Bubbly Hills, 90210 ICU RESERVE Drizzled Natto Squid Splurge Idol Pins Cheongsam Gee Shock RESERVE Tokyo Shrines Fishpond Spotter Yoncha Wanderer Museum of Stars Jack Frost Doll Burger-kun Doll Wanna-kun Doll Lexy Doll Uji Matcha Flan Chocolate Truffles Potted Succulents Limelight Amateur Coffee Harsh Coffee Baptismal Water Exorcism Water Sacramental Wine Repentance Ashes Moist Katsu Bun Book Cover Castella Crimson Lipstick RESERVE RESERVE Tetra Hammer Makara Hammer Macadamia Choco Macadamia Nuts Hawaiian Cookie Taiyaki Caramel Yakisoba Candy Jewel Shard RESERVE RESERVE Casual Rod Powerful Rod Miracle Rod Arginade Dr. Salt NEO Joylent MRE Ration Oatmeal Ration Torimeshi Ration Fruit Ration Seafood Aojiru Beauty Aojiru Vitality Aojiru Nasty Aojiru Onsen Aojiru RESERVE Fulfiller Summer Lotto R Happy Pop Thaw Stone Extinguish Orb Discharge Crystal Second Maid RESERVE Sandwich Fruit Danish Chewy Anpan Yakisoba Pan Creature Earl Green Mad Bull Muscle Tea Manta Nastea 1UP Gambla Goemon Golfer Sarutahiko Calling Postcard Refresh Aroma Protein Moist Protein Fried Bread RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Beginner Intermediate Advanced Hot Coffee Nostalgic Steak Frui-Tea Totem Pole Relaxing Coffee Oo-hot Tea Love솂Pancake Sincere Omelette Makoto's Present Haru's Present Ann's Present Futaba's Present Sadayo's Present Takemi's Present Chihaya's Present Ohya's Present Hifumi's Present RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Small Boilie Medium Boilie Large Boilie Top-class Boilie Guardian Boilie Big Bang Burger Saturn Fries Earth Burger RESERVE Moon Burger Supernova Burger Karaage King Spring Fruit Pack Foreign Nikuman Phantom Wafers Soothing Soba Agodashi Oden Party in a Can Digital Camera Face Beautifier Laptop RESERVE Mini Dominion Die-soujou Decked Decarabia Gear Girimehkala Kinky Kin-Ki Mossy Mothman Movie 16 Ticket Lockpick Eternal Lockpick Reserve Ammo RESERVE Treasure Trap RESERVE Red Fish Rough Carp Tokyo Bitterling Seven-color Trout White Carp Treasure Trout Delish Bitterling Peerless Carp Ichigaya Guardian Adhesive Bandage RESERVE Rejuvenating IV Leblanc Coffee Soul Coffee Awakening Coffee Master Coffee Decent Curry Leblanc Curry Master Curry RESERVE Shooting Card Healing IV Railroad Card Fighting Card RESERVE Boxing Card Gambling Card Golf Card The Okumura Way Med. Tech for Teens Guns of the World Shogi World Batting Science Essence of Fishing Speed Reading Cinema Treasures Pure Politics Chinese Sweets Theme Park Escort The Great Thief Pirate Legend Zorro, the Outlaw The Alluring Dancer The Gallant Rogue The Illusory Popess Cry of Cthulhu Woman in the Dark The Hero with a Bow Medjed Menace Playing the Game Game Secrets Lotto Random Lotto Series Lotto Scratchcard Rakugo Collection Classical Hits Best of KGB49 Wraith Jail Break Guy McVer The Running Dead The X Folders RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Vague Nightlife Hotspots Coolifier Pad Hand Warmalizer Venus Salad Sikkenine Sikkenine A Sikkenine EX Wide Eye Drops Donut-Worry Mental Floss Hot and Sour Tea Balloons Kommissbrot Beef Patty Ration D Ration Veg. Stew Ration RESERVE RESERVE Durian-au-Lait Oh! Shiruko Chunky Potage Ultimate Amazake Udagawa Soda Water of Rebirth RESERVE RESERVE RESERVE RESERVE Strawberry Curry Mayo Locust Miso Starfish Mystery Stew Bitter Coffee Acidic Coffee Fire Curry Blaze Curry Inferno Curry Ramen Bowl Night Pennant Nude Statue Swan Boat Sky Tower Lamp Giant Spatula Idol Poster Star Stickers King Piece Hero Figure Hamaya I <3 Tokyo Shirt Non-Static Gum RESERVE RESERVE RESERVE Sadayo's Chocolate Takemi's Chocolate Chihaya's Chocolate Ohya's Chocolate Hifumi's Chocolate Makoto's Chocolate Haru's Chocolate Ann's Chocolate Futaba's Chocolate Ryuji's Chocolate Sojiro's Chocolate Kumade Shumai Cushion Gi-Nyant Doll Sushi Mug Choco Fountain RESERVE RESERVE RESERVE Famidrive RESERVE Sheep Man Doll Jam Bread Melon Pan Angel Tart Moon Dango Mixed Nuts Beni-Azuma Legendary Yaki-Imo RESERVE RESERVE RESERVE RESERVE Moonlight Carrot Sun Tomato RESERVE RESERVE RESERVE Ann Cream Puffs Makoto Donuts Sakura Amezaiku Sadayo Taiyaki Ryuji Dog Amateur Curry RESERVE Broken Laptop ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Vanilla_Demon.txt ================================================ 000 Metatron Beelzebub Cu Chulainn Jack-o'-Lantern Jack Frost Pixie Cerberus Lilim Eligor Odin Hua Po Decarabia Mara Ose Thor Unicorn Uriel Sarasvati Valkyrie Yaksini Ganesha Anubis Mot Raphael Scathach High Pixie Barong Girimehkala King Frost Narcissus Isis Lamia Legion Rakshasa Mokoi Forneus Setanta Titania Incubus Oni Lilith Rangda Makami Parvati Gabriel Zaou-Gongen Alice Kali Kurama Tengu Oberon Shiki-Ouji Yamata-no-Orochi Orobas Hanuman Archangel Obariyon Queen Mab Sandalphon Abaddon Shiisaa Sandman Belial Leanan Sidhe Cybele Chernobog Flauros Ippon-Datara Orthrus Succubus Mothman RESERVE Dominion Nekomata Black Frost Arahabaki Angel Skadi Kikuri-Hime Chi You Power Inugami Nebiros RESERVE Slime Anzu Yatagarasu Yoshitsune Take-Minakata Ame-no-Uzume Kushinada Kumbhanda Ongyo-Ki Kin-Ki Sui-Ki Fuu-Ki Jatayu Kaiwan Kelpie Thoth Dionysus Apsaras Andras RESERVE Koropokguru Koppa Tengu Regent Queen's Necklace Stone of Scone Koh-i-Noor Orlov Emperor's Amulet Hope Diamond Crystal Skull RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Mandrake Baal Dakini Silky Bugs Black Ooze Bicorn Mithras Sudama Kodama Agathion Onmoraki Nue Pisaca Melchizedek Baphomet Raja Naga Naga Garuda Moloch Norn Belphegor Berith Choronzon Regent Orichalcum RESERVE RESERVE RESERVE RESERVE Nigi Mitama Kushi Mitama Ara Mitama Saki Mitama RESERVE Shiva Michael Asura Mada Mother Harlot Clotho Lachesis Atropos Ardha RESERVE Vishnu Hariti Yurlungur Hecatoncheires Satanael RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Orpheus Thanatos Izanagi Magatsu-Izanagi Kaguya Ariadne Asterius Tsukiyomi Messiah Messiah Picaro Orpheus Picaro Thanatos Picaro Izanagi Picaro M. Izanagi Picaro Kaguya Picaro Ariadne Picaro Asterius Picaro Tsukiyomi Picaro Satanael Arsene (Intro) Arsene Captain Kidd Zorro Carmen Goemon Johanna Milady Necronomicon Robin Hood Loki Satanael Seiten Taisei Mercurius Hecate Kamu Susano-o Anat Astarte Prometheus Loki Arsene Captain Kidd Zorro Carmen Goemon Johanna Milady Necronomicon Robin Hood ??? Lucifer Seiten Taisei Mercurius Hecate Kamu Susano-o Anat Astarte Prometheus Loki Loki Cindrillon Vanadis William Diego Célestine Gorokichi Agnes Lucy Al Azif Hereward Ella RESERVE Satan Lucifer Kohryu Okuninushi Norn RESERVE RESERVE Futsunushi RESERVE Seth Ishtar RESERVE Surt Siegfried Lakshmi RESERVE RESERVE Ex-Belphegor RESERVE Garuda Fortuna Suzaku Seiryu Genbu Byakko Bishamonten Koumokuten Jikokuten Zouchouten Hell Biker Daisoujou Trumpeter White Rider Matador Pale Rider Horus RESERVE Attis RESERVE RESERVE Sraosha Berith RESERVE Mitra Phoenix Principality Neko Shogun Vasuki Ananta Throne RESERVE Quetzalcoatl Red Rider Black Rider RESERVE Ex-Moloch Pazuzu RESERVE Slime Jack-o'-Lantern Agathion Mandrake Shiisaa Jack Frost Sudama Onmoraki Bugs Pixie Pixie Ardha RESERVE Asmodeus Azazel Baal Tithoes Mammon Leviathan Samael Maria Vohu Manah Cait Sith Mishaguji RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE P5 Unused P5 Unused P5 Unused P6 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused Izanagi-no-Okami Psyche Athena Raoul Orpheus Telos Orpheus Izanagi-no-Okami Picaro Psyche Picaro Athena Picaro Neo Arsene Picaro Orpheus Telos Picaro Orpheus Picaro P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused Macabre P5 Unused P5 Unused Fafnir Byakhee Hastur Tam Lin P5 Unused Surt Loa Chimera P5 Unused P5 Unused Siegfried P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused P5 Unused RESERVE RESERVE RESERVE RESERVE ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Vanilla_KeyItemNames.txt ================================================ BLANK RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Commuter Pass Cigarettes Key to Leblanc Paper Bag 2nd Mate ID 1st Mate ID Captain ID Old Key RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Evil Snow Crystal Sticky Hairball Double Bookmark RESERVE Pen Case Muffler Cologne Camera Gloves Wristwatch Hat Earmuffs Headphones RESERVE Buchi Calculator Dyed Handkerchief Fashion Magazine Promise List Unlimited Service Dog Tag Fortune Tarot Card Interview Notes Kosha Piece Sports Watch Morgana's Scarf Recipe Notes Documentary Plans Gecko Pin Cell Key Desire and Hope Fountain Pen Gun Controller Business Card RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Castle Map Tower Map RESERVE Kamoshida's Medal RESERVE RESERVE RESERVE RESERVE RESERVE The King Book The Queen Book The Slave Book Green Key Red Key Randy Right Eye Lustful Left Eye Right Key Left Key Kaneshiro's Journal Torn Page 1 Torn Page 2 Torn Page 3 Torn Page 4 Torn Page 5 Torn Page 6 Abyss Gem Rejection Gem Guilt Gem Sanctuary Gem Member's Card Stolen Papyrus Pyramid Sketch Members Floor Map High Limit Floor Map Basement Blueprint High Limit Card Spaceport Map Chief Clerk ID Section Chief ID Chief Director ID Museum Brochure 1 Museum Brochure 2 Bank Blueprint Bank Keycard Casino Map Security Keycard Cruise Ship Map Membership Card VIP Invitation Vermilion Disk Vermilion Disk RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Escape Recipe Mist Recipe Home Recipe Smoke Recipe Energy Recipe Sleep Recipe Bronze Recipe Scent Recipe Silver Recipe Smell Recipe Gold Recipe Aroma Recipe Purify Recipe Clone Recipe Element Recipe Life Recipe Forces Recipe Almighty Recipe Vitality Recipe Hyper Recipe RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Vanilla_MaterialNames.txt ================================================ BLANK Coward's Orb Selfish Ornament 4th Girl's Talc Notched Heart Light Iron Thick Hide Glossy Clasp Electric Rock Magic Cross Brave Lumber Divine Bark Thought Cross Supple Metal Smooth Fabric Smart Clasp Living Metal Big Incisor Glory Staff Blessed Trumpet Victor Laurel Porcelain Teacup Silver Cutlery Strange Lantern Nude Candle Stand Shackles Locked Collar Dull Sword Holey Helmet Crushed Shield Rusted Handcuffs Chipped Glass Ukiyo-e Ink Wash Art Hanging Scroll Picture Scroll Hannya Mask Animal Brush Fine Washi Loose Sash Cracked Vase Sooty Kettle Unsigned Mug Plastic Frame Crappy Portrait Bad Sculpture Gold Coin Stock Certificate Amber Stamp Precious Bill Rare Coin Old Coin Leather Case Safe Dial Money Counter Office Calculator Inkless Pen Unopenable Lock Worn Stamp Tattered Wallet Jewel Mummy Gold Uraeus Canopic Jar Bastet Statue Scarab Charm Mummy Mask Scratched Sword Rusted Ankh Torn Papyrus Ra Mural Sekhmet Mural Sarcophagus Bit Bent Staff Pillar Piece Moon Stone Rare Metal Sage Astrolabe UFO Drone Blade Flashlight Rainbow Diode Spaceship Stick Robot Arm Radar Antenna Broken Telescope Space Food Punctured PCB Dead Solar Panel Warped Wheel Luxury Watch Gold Earrings Damascene Cane Silver Monocle Ivory Dice Dealer Ring Magician Bowtie Pro Dart Card Shuffler Dice Shaker Gray Cufflinks Faded Silk Hat Smoked Cigar Incomplete Deck Coral Pendant Pearl Necklace Ebony Box Marble Chessboard Tortoise Hairpin Cameo Brooch Raden Plate Peacock Fan Bronze Compass Brass Pocket Watch Music Box Old Kaleidoscope Mirror Ball Masquerade Mask Pure Diamond Dignity Ruby Sublime Sapphire Stable Emerald Proper Turquoise Brave Aquamarine Harmony Amethyst Intelligent Onyx Wealth Pearl Delight Opal Charity Agate Enduring Jade Friendship Topaz Truth Garnet Grooved Gold Hole Gold Thin Gold Grooved Silver Hole Silver Thin Silver Grooved Copper Hole Copper Thin Copper Onyx Pearl Amethyst Turquoise Opal Topaz Garnet Aquamarine Ruby Emerald Sapphire Diamond RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE Old Milk Bottle Bee Earrings Scorpion Statue Turtle Statue Rotary Phone Silk Bundle RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE RESERVE ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Vanilla_MeleeWeaponNames.txt ================================================ Blank Generic Gear Rebel Knife Kukri Arsene's Cane Blizz Dagger Athame Steel Kukri Skinning Knife Corvo Kopis Killing Scalpel Mummy's Kopis Quality Kopis Pro Skinning Knife Blood Corvo Dirk Parrying Dagger Old Dirk Machete Baselard Dual Edge Machete Frenzy Dagger Pro Parrying Dagger Coma Dagger Misericorde Reserve Pro Yamanaji Amnesia Reserve Igniter Ritual Athame Shock Knife Dancing Knife Melancholia Paradise Lost Yamanaji Normal Rod Mace Hell Slugger Heavy Steel Pipe Steel Pipe Battle Hammer Iron Pipe Quality Steel Pipe Heavy Mace Spike Rod Demon War Hammer Bush Hammer Demon Pipe Megaton Rod Boss Bush Hammer Gaea Presser Lotus Wand Big Sleep Stick Stun Baton Death Crowbar Dragon God Pole Grand Presser Stun Baton Super Megido Rod The Anchor Erasure Hammer Genocide Crowbar Triple Crown Bat Ruyi Jingu Bang Wolf Fang Pole Sleep Stick Super Steel Whip Flint Rod Reserve The Pulverizer Mjolnir Bandit Sword Headhunter Ladle Ryozanpaku Sword Sonic Blade Scimitar Talwar Bright Saber Sleeper Blade Shamshir Blood Scimitar Resting Sword Chief's Cutlass Quiet Sword Cosmic Sword Damascus Sword Solar Blade Heavy Saber Master Shamshir Panic Sword Fury Blade Bright Sword Reserve Answerer Mega Flash Sword Corona Blade Claiomh Solais Reserve Machete Plasma Sword Kikouseiken Vile Sword El Caliente God Saber Heaven Saber Deus Ex Machina Leather Whip Training Whip Skin Ripper Heat Whip Warrior Whip Blaze Whip Burn Whip Hero Whip Tear Whip Whip Sword Electromag Whip Disgrace Whip Mirage Whip Strike Tail White Paper Whip Great Whip Sword Chain Whip Barbed Wire Pain and Pain Spike Whip Love Whip Hard Branch Coil Whip Last Agony Law Rope Fundo-Kusari Goat Leather Whip Ingot Chain Knout Whip Death Knout Cat-o-Nine Tails Snow Queen's Whip Death Match Wire Naraka Whip Katana Gunto Reserve Imitation Katana Unmarked Katana Antique Gunto Seishiki Sword Muramasa Jagato Imperial Sword Kirisame Fury Blade Iai Katana Kunitsuna Orochito Wakizashi Chidori Masamune Master's Iai Katana Monohoshizao Red Demon Blade Quality Wakizashi Reserve Musou Masamune Usumidori Shimobashira Shizukuto Shikomi Kiseru Kyokusui Senryou Yakusha Ame-no-Murakumo Brass Knuckles Hell Knuckles Heavy Pound Super Heavy Grip Metal Duster Hell Cestus Iron Fist Mach Punch Bagh Naka Demon Fist Flash Punch Fast Puncher Omega Knuckle Bout Gloves Sanction Dazzle Fist One Inch Chrome Duster Grief Fist Bear Gloves Clenched Fist Sabazios Wrathful Iron Fist Sealed Fist Vajra Reserve Reserve Reserve Axe Mega Axe Steel Bardiche Crescent Axe Lethe Axe Ice Axe Melatonin Axe Celtis Lunatic Axe Amazon Axe Rend Celtis Dragon Scale Axe Perish Great Axe Reserve Reserve Heracles Axe Gilgamesh Axe Narcolepsy Fleurs du Mal Reserve Delta Knuckle Heavy Grip Lumina Saber Reserve Quasar Saber Reserve Falchion Masquerade Ribbon Reserve Reserve Haru Reserve 3 Haru Reserve 1 Bardiche Death Contract Black Kogatana Reserve Fault Knife Quest Item Lizard Tail Cutter Envy Chain Prophet's Hand Dependence XX Venture Saber Slacker Pole Silver Dagger 0x0F6 0x0F7 0x0F8 0x0F9 0x0FA 0x0FB 0x0FC 0x0FD 0x0FE 0x0FF ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Vanilla_OutfitNames.txt ================================================ Starter Clothes Shujin Uniform Phantom Suit Pirate Armor Morgana Classic Red Latex Suit Outlaw's Attire Metal Rider Musketeer Suit Cyber Gear Prince Suit Summer Uniform Summer Uniform Summer Uniform Summer Uniform Summer Uniform Summer Uniform Summer Uniform Summer Uniform Summer Uniform Winter Uniform Winter Uniform Winter Uniform Winter Uniform Winter Uniform Winter Uniform Winter Uniform Winter Uniform Winter Uniform Summer Clothes Summer Clothes Summer Clothes Summer Clothes Summer Clothes Summer Clothes Summer Clothes Summer Clothes Summer Clothes Winter Clothes Winter Clothes Winter Clothes Winter Clothes Winter Clothes Winter Clothes Winter Clothes Winter Clothes Winter Clothes Tracksuit Tracksuit Tracksuit Tracksuit Tracksuit Tracksuit Tracksuit Tracksuit Tracksuit Swimsuit Swimsuit Swimsuit Swimsuit Swimsuit Swimsuit Swimsuit Swimsuit Swimsuit Loungewear Loungewear Loungewear Loungewear Loungewear Loungewear Loungewear Loungewear Loungewear Gekkoukan High Gekkoukan High Aigis Costume Gekkoukan High Gekkoukan High Gekkoukan High Gekkoukan High Gekkoukan High Gekkoukan High Yasogami High Yasogami High Teddie Costume Yasogami High Yasogami High Yasogami High Yasogami High Yasogami High Yasogami High St. Hermelin High St. Hermelin High Trish Costume v1 St. Hermelin High St. Hermelin High St. Hermelin High St. Hermelin High St. Hermelin High St. Hermelin High Seven Sisters High Seven Sisters High Trish Costume v2 Seven Sisters High Seven Sisters High Seven Sisters High Seven Sisters High Seven Sisters High Kasugayama High Vincent's Outfit Orlando's Fashion Stray Sheep Suit Catherine's Cami Johnny's Coat Katherine's Outfit Erica's Uniform Toby's Overalls Boss's Suit Karukozaka High Karukozaka High Karukozaka High Karukozaka High Karukozaka High Karukozaka High Karukozaka High Karukozaka High Hazama's Uniform Butler Suit Butler Suit Maid Uniform Maid Uniform Butler Suit Maid Uniform Maid Uniform Maid Uniform Butler Suit Christmas Outfit Christmas Outfit Christmas Outfit Christmas Outfit Christmas Outfit Christmas Outfit Christmas Outfit Christmas Outfit Christmas Outfit Dancewear Dancewear Dancewear Dancewear Dancewear Dancewear Dancewear Dancewear Dancewear Shadow Ops Uniform Shadow Ops Uniform Shadow Ops Uniform Shadow Ops Uniform Shadow Ops Uniform Shadow Ops Uniform Shadow Ops Uniform Shadow Ops Uniform Shadow Ops Uniform Samurai Garb Samurai Garb Burroughs Costume Samurai Garb Samurai Garb Samurai Garb Samurai Garb Samurai Garb Samurai Garb Student Uniform Student Uniform Gouto Costume Ouran High Student Uniform Ouran High Ouran High Ouran High Imperial Uniform ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Vanilla_RangedWeaponNames.txt ================================================ Blank Handgun Shotgun Slingshot 1 Submachine Gun Rifle 1 American Gun 1 Masaharu Gun 1 Aura Gun 1 Gun 009 Handgun Gun 00B Gun 00C Rifle 2 Gun 014 Gun 015 Tkachev Governance Unmarked Pistol Tkachev II Tkachev HP Makaronov Makaronov II Governance HP Compact Eliminator Makaronov SP Compact HP Assassin Assassin SP Sand Hawk II Model Gun Levinson M31 Levinson M31 II Granelli M3 Levinson M31 HP Granelli M3 SP Heavy Shotgun Mad Maximum Fireworks Mad Maximum II Heavy Shotgun II Fireworks SP Storm Shot Pumpkin Bomb Big Sleep Masterkey Orso Nero Big Sleep SP Storm Shot II Fury SP Bianchi SBAS II Calamity Gun Orso Nero SP Volley Cannon II Smithereens Calamity Gun SP Kiraihou II Smithereens II Unmarked Shotgun Bianchi SBAS Nock Volley Hellfire Nock Volley SP Slingshot Unmarked Sling Slingshot SP Slingshot HP Shrike Upsilon Slingbow II Comet 3 Shrike SP Comet 3 II Spirit Sling Upsilon II Stronger Northern Light SP Intercept Stronger SP Spirit Sling HP Pirate Killer Mt. Liang SP Dreamstone Intercept II Sling Cannon Sling Cannon II Pirate Killer SP Utopia HP Dreamstone II Catnap Mount Liang Shrike II Northern Light Shooting Star Star Slayer Replica SMG Tommy Gun Unmarked SMG Trooper MP2 Prototype Flare SMG Blitz MG Sterlidge II Trooper SP MP2 Prototype II Civilian MP Hyakka Ryouran No Mercy Civilian MP II Western SMG No Mercy II Tarantula SP MP Victoria Antares Hien Renhappou Western SMG II MP Victoria EP Honoikazuchi H. Renhappou HP Phantom Killer II Honoikazuchi SP Sterlidge Brain Shot Tommy Gun II Flare SMG II Tarantula Blitz MGSP Replica AR Black Assault AR-M4 Heavy Assault G1 Type AR-M4 II AR-M4 SP Black Assault SP Hero AR Heavy Assault II Blaze Assault Annihilator Tempest AR-X Hero AR II Cruel Carbine Blaze Assault SP Annihilator II Tempest II Cruel Carbine II Sharpshooter Ryuraihou II Sharpshooter II Hizutsu HP Kuzuryu Gouhou G1 Type SP Rebel Rifle Rebel Rifle SP Tempest HP Hizutsu Ryuraihou Heaven's Gate Replica Revolver Peacemaker P Revolver PM Sheriff PM Sheriff II Ling Xing P Revolver II Peacemaker SP Justness Justness II Evil Roulette Wildborn SP Artillery Evil Roulette II Ling Xing II Calvary Artillery II Baptism SP Orochi SP Cavalry II Twilight SP Peacemaker HP Mirrirmina Wildborn Baptism Orochi Twilight Judge of the Dead Fury Volley Cannon Kiraihou Megido Fire GL Replica Pawzooka Unmarked GL GL Mega GL Rep Scorcher GL Replica II Multiple GL Scorcher SP Eraser Town Burner HP Flame Ocean Eraser SP Multiple GL II Magma Bucket Magma Bucket SP Flame Ocean II Pandemonium SP Haru Reserve Haru Reserve 2 Town Burner Town Burner SP Pandemonium Yagrush H. Ryouran HP Antares II Phantom Killer Wild Hunt Clemont Shot Golden Beam Gun 222 Gun 223 Moebius Moebius II Sirius Sirius SP Slingbow Star Slayer HP Utopia Sudarshana Sleeper Karura II From Heaven Crimson Gun HP Riot Police SP Gravity Gun Medusan Sleeper SP R.I.Pistol Medusan II R.I.Pistol II Gravity Gun HP Nataraja Riot Police Sand Hawk Karura Crimson Gun From Heaven II Cocytus Cocytus SP Tyrant Pistol Gun 253 Gun 254 Gun 255 ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Vanilla_SkillCardNames.txt ================================================ BLANK (Unusable) Agi Agilao Agidyne Maragi Maragion Maragidyne Bufu Bufula Bufudyne Mabufu Mabufula Mabufudyne Garu Garula Garudyne Magaru Magarula Magarudyne Zio Zionga Ziodyne Mazio Mazionga Maziodyne Hama Hamaon Mahama Mahamaon Kouha Kouga Kougaon Makouha Makouga Makougaon Mudo Mudoon Mamudo Mamudoon Eiha Eiga Eigaon Maeiha Maeiga Maeigaon Megido Megidola Megidolaon Frei Freila Freidyne Mafrei Mafreila Mafreidyne Dazzler Nocturnal Flash Pulinpa Tentarafoo Evil Touch Evil Smile Makajama Makajamaon Famine's Breath Famine's Scream Dormina Lullaby Taunt Wage War Ominous Words Abysmal Surge Marin Karin Brain Jack Trapped Rat Self-destruct Self-destruct Self-destruct Life Drain Spirit Drain Life Leech Spirit Leech Foul Breath Stagnant Air Ghastly Wail Inferno Blazing Hell Diamond Dust Ice Age Panta Rhei Vacuum Wave Thunder Reign Wild Thunder Divine Judgment Samsara Demonic Decree Die For Me! Atomic Flare Cosmic Flare Black Viper Morning Star Psi Psio Psiodyne Mapsi Mapsio Mapsiodyne Psycho Force Psycho Blast Lunge Assault Dive Megaton Raid God's Hand Lucky Punch Miracle Punch Cleave Giant Slice Brave Blade Sword Dance Hassou Tobi Ayamur Cornered Fang Rising Slash Deadly Fury Snap Triple Down One-shot Kill Riot Gun Vajra Blast Vorpal Blade Vicious Strike Heat Wave Gigantomachia Rampage Swift Strike Deathbound Agneyastra Double Fangs Tempest Slash Myriad Slashes Sledgehammer Skull Cracker Terror Claw Headbutt Stomach Blow Dream Needle Hysterical Slap Negative Pile Brain Shake Flash Bomb Mind Slice Bloodbath Memory Blow Insatiable Strike Dormin Rush Oni-Kagura Bad Beat Brain Buster Dia Diarama Diarahan Media Mediarama Mediarahan Recarm Samarecarm Recarmdra Amrita Drop Amrita Shower Mabaisudi Salvation Patra Energy Shower Energy Drop Baisudi Me Patra Tarukaja Rakukaja Sukukaja Heat Riser Matarukaja Marakukaja Masukukaja Thermopylae Tarunda Rakunda Sukunda Debilitate Matarunda Marakunda Masukunda Dekunda Dekaja Charge Concentrate Rebellion Revolution Tetrakarn Makarakarn Tetraja Tetra Break Makara Break Fire Wall Ice Wall Elec Wall Wind Wall Fire Break Ice Break Wind Break Elec Break BLANK BLANK Nuke Wall Psy Wall Nuke Break Psy Break Counter Counterstrike High Counter Endure Enduring Soul Dodge Bless Dodge Curse Survival Trick Dodge Fire Evade Fire Dodge Ice Evade Ice Dodge Wind Evade Wind Dodge Elec Evade Elec Dodge Phys Evade Phys Fire Boost Fire Amp Ice Boost Ice Amp Wind Boost Wind Amp Elec Boost Elec Amp Angelic Grace Divine Grace Regenerate 1 Regenerate 2 Regenerate 3 Invigorate 1 Invigorate 2 Invigorate 3 Attack Master Auto-Mataru Defense Master Auto-Maraku Speed Master Auto-Masuku Fast Heal Insta-Heal Arms Master Spell Master Sharp Student Apt Pupil Ali Dance Firm Stance Life Aid Victory Cry Growth 1 Growth 2 Growth 3 Unshaken Will Evade Bless Evade Curse BLANK Resist Fire Null Fire Repel Fire Drain Fire Resist Ice Null Ice Repel Ice Drain Ice Resist Wind Null Wind Repel Wind Drain Wind Resist Elec Null Elec Repel Elec Drain Elec Resist Bless Null Bless Repel Bless Drain Bless Resist Curse Null Curse Repel Curse Drain Curse Resist Phys Null Phys Repel Phys Drain Phys Ailment Boost Hama Boost Mudo Boost Dizzy Boost Confuse Boost Fear Boost Forget Boost Sleep Boost Rage Boost Despair Boost BLANK Brainwash Boost Resist Dizzy Resist Confuse Resist Fear Resist Forget Resist Sleep Resist Rage Resist Despair BLANK Resist Brainwash Null Dizzy Null Confuse Null Fear Null Forget Null Sleep Null Rage Null Despair Null Brainwash Burn Boost Freeze Boost Shock Boost Fortified Moxy Adverse Resolve Last Stand Heat Up BLANK Touch n' Go Climate Decorum Ambient Aid Snipe Cripple Trigger Happy Resist Nuke Null Nuke Repel Nuke Drain Nuke Resist Psy Null Psy Repel Psy Drain Psy Nuke Boost Nuke Amp Psy Boost Psy Amp Dodge Nuke Evade Nuke Dodge Psy Evade Psy Bless Boost Bless Amp Curse Boost Curse Amp Magic Ability Fortify Spirit Almighty Boost Almighty Amp Zenith Defense Soul Chain BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK Blank Card ================================================ FILE: KHSave.LibPersona5/Resources/Persona5/Vanilla_SkillNames.txt ================================================ Attack BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK Agi Agilao Agidyne Maragi Maragion Maragidyne Agi Maragi BLANK BLANK Bufu Bufula Bufudyne Mabufu Mabufula Mabufudyne Bufu Mabufu BLANK BLANK Garu Garula Garudyne Magaru Magarula Magarudyne Garu BLANK BLANK BLANK Zio Zionga Ziodyne Mazio Mazionga Maziodyne Zio Mazio BLANK BLANK Hama Hamaon Mahama Mahamaon Kouha Kouga Kougaon Makouha Makouga Makougaon Mudo Mudoon Mamudo Mamudoon Eiha Eiga Eigaon Maeiha Maeiga Maeigaon Megido Megidola Megidolaon Frei Freila Freidyne Mafrei Mafreila Mafreidyne BLANK Dazzler Nocturnal Flash Pulinpa Tentarafoo Evil Touch Evil Smile Makajama Makajamaon Famine's Breath Famine's Scream Dormina Lullaby Taunt Wage War Ominous Words Abysmal Surge Marin Karin Brain Jack Trapped Rat BLANK Self-destruct Self-destruct Self-destruct Life Drain Spirit Drain Life Leech Spirit Leech Spirit Drain BLANK BLANK Foul Breath Stagnant Air Reverse Rub Ghastly Wail BLANK BLANK BLANK BLANK BLANK BLANK Inferno Blazing Hell Low Burn Mid Burn High Burn Low Freeze Mid Freeze High Freeze Low Shock Mid Shock Diamond Dust Ice Age High Shock Low Dizzy Mid Dizzy High Dizzy Low Confuse Mid Confuse High Confuse Low Fear Panta Rhei Vacuum Wave Mid Fear High Fear Low Forget Mid Forget High Forget Low Brainwash Mid Brainwash High Brainwash Thunder Reign Wild Thunder Low Sleep Mid Sleep High Sleep Low Rage Mid Rage High Rage Low Despair Mid Despair Divine Judgment Samsara High Despair Low All Ail Mid All Ail High All Ail BLANK BLANK BLANK BLANK Demonic Decree Die For Me! BLANK BLANK BLANK BLANK Atomic Flare Cosmic Flare BLANK BLANK Black Viper Morning Star BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK Psi Psio Psiodyne Mapsi Mapsio Mapsiodyne BLANK Psycho Force Psycho Blast BLANK Lunge Assault Dive Megaton Raid God's Hand Lunge Lucky Punch Miracle Punch BLANK BLANK BLANK Cleave Giant Slice Brave Blade Sword Dance BLANK Hassou Tobi Ayamur BLANK BLANK BLANK Cornered Fang Rising Slash Deadly Fury BLANK Snap Triple Down One-shot Kill Riot Gun BLANK BLANK Vajra Blast Vorpal Blade BLANK BLANK BLANK Vicious Strike Heat Wave Gigantomachia BLANK BLANK BLANK Rampage Swift Strike Deathbound Agneyastra BLANK BLANK Rising Slash Deadly Fury BLANK Double Fangs BLANK BLANK Tempest Slash Myriad Slashes BLANK BLANK BLANK BLANK BLANK Sledgehammer Skull Cracker Terror Claw Headbutt Stomach Blow Dream Needle Hysterical Slap Negative Pile Brain Shake BLANK Flash Bomb Mind Slice Bloodbath Memory Blow Insatiable Strike Dormin Rush Oni-Kagura Bad Beat Brain Buster BLANK Handgun Shotgun Slingshot Machine Gun Assault Rifle Revolver Grenade Launcher Laser Gun BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK Attack Dia Diarama Diarahan BLANK BLANK Media Mediarama Mediarahan BLANK BLANK Recarm Samarecarm Recarmdra BLANK BLANK Amrita Drop Amrita Shower BLANK Salvation BLANK BLANK BLANK BLANK BLANK BLANK Patra BLANK Energy Shower Energy Drop Baisudi Me Patra Mabaisudi BLANK BLANK BLANK Tarukaja Rakukaja Sukukaja Heat Riser BLANK Matarukaja Marakukaja Masukukaja Thermopylae BLANK Tarunda Rakunda Sukunda Debilitate BLANK Matarunda Marakunda Masukunda BLANK BLANK Dekunda Dekaja BLANK BLANK BLANK Charge Concentrate BLANK BLANK BLANK Rebellion Revolution BLANK BLANK BLANK Tetrakarn Makarakarn Tetraja BLANK BLANK Tetra Break Makara Break BLANK BLANK BLANK Fire Wall Ice Wall Elec Wall Wind Wall BLANK Fire Break Ice Break Wind Break Elec Break BLANK Trafuri Traesto BLANK Nuke Wall Psy Wall Nuke Break Psy Break BLANK BLANK BLANK All-out Lv 1 All-out Lv 2 All-out Lv 3 Emergency Escape Attack Down Shot Summon Call for Backup Outlaw Attack Barrage Follow Crush Follow Claw Follow Whip Follow Blade Follow Knuckle Follow Axe Follow Saber Dispose Item Heal Enemy Death (Despair) Ally1 Follow-Up Ally2 Follow-Up Ally3 Follow-Up Ally4 Follow-Up Ally5 Follow-Up Ally6 Follow-Up Ally7 Follow-Up Power Up Enemy Power Up Enemy Power Up Enemy Steal Info Sup Matarukaja Sup Marakukaja Sup Masukukaja Sup All Kaja Sup Charge Sup HP +30% Sup SP +10% Sup Escape Route Sup Third Eye Subrecover HP Subrecover SP Analysis Deep Analysis Full Analysis All-Out Attack Dust Flurry Tongue Whip Whip Strike Lustful Slurp Libido Boost Golden Knife Lick Gold Medal Spike Volleyball Assault Maelstrom Flame Dance Silent Snowscape Thunderclap Maeiga Hunger All Ocular Vulcan Missile Party Fear Gas Super VIP Form March of the Piggy Sphinx Swipe Wing Blast Rapid Ascent Sphinx Dive Dreadful Scream Bite Restore The Artist's Grace Work Order Sacrifice Order Selfless Devotion Penalty Coin Attack Severing Slash Gatling Gun Berserker Dance Roulette: HP Roulette: SP Roulette: Money Roulette: Aid 1 Roulette: Aid 2 Roulette: Aid 3 Beast King's Wrath Hunting Stance Arm of Destruction Gryphon's Breath Royal Wing Beam Cannon Fire Cannon Barrage Unholy Convergence Pyramid Blast Tyrant's Fist Tyrant's Glare Tyrant's Wave Fig Seed Medicine Ointment Antibiotic Gel Life Stone Bead Value Medicine Medical Kit Maka Leaf Bead Chain Soul Drop Snuff Soul Chewing Soul Soul Food Revival Bead Balm of Life Royel Jelly Organic Herb Disclose Tranquilizer Kopi Luwak Goho-M Vanish Ball Soma Amrita Soda Hiranya Muscle Drink Odd Morsel Rancid Gravy Plume of Dusk Magic Mirror Physical Mirror Universe Ring Sleipnir Obsidian Mirror Purifying Water Purifying Salt Firecracker San-zun Tama Ice Cube Dry Ice Pinwheel Yashichi Ball Lightning Tesla Coil Smart Bomb Segami Rice Curse Paper Flame Magatama Wind Magatama Freeze Magatama Bolt Magatama Homunculus Removal Potion Kouga Ball Makouha Ball Eiga Ball Maeiga Ball Psio Ball Mapsi Ball Freila Ball Mafrei Ball Nuke Magatama Psy Magatama Bless Magatama Curse Magatama Cooking Snack Shoes 1 Shoes 2 Shoes 3 Juice Bar 1 Juice Bar 2 Juice Bar 3 Juice Bar 4 Energy Drink 1 Energy Drink 2 Energy Drink 3 Soda 1 Soda 2 Soda 3 Soda 4 Ration 1 Ration 2 Ration 3 Drug Store 1 Drug Store 2 Drug Store 3 Drug Store 4 Drug Store 5 Drug Store 6 Drug Store 7 Drug Store 8 Drug Store 9 Drug Store 10 Drug Store 11 Drug Store 12 Coffee 1 Coffee 2 BLANK Twins Down Attack Caro Rod Caro Attack Megidolaon Rays of Control Rays of Control Rays of Control Rays of Control Arrow of Light Diffraction Arrow Light Edge Gathering Light Eternal Light Holy Change Distortion Wave Tough Law Frail Law New Creation Distortion Surge Arrow of Light Manifest Sword Manifest Gun Manifest Bell Sword of Judgment Capital Punishment Manifest Book Distorted Lust Gospel Distorted Wrath Distorted Vanity Song of Salvation Wrath of God Distorted Gluttony Distorted Envy Song of Placation Divine Apex Rays of Control Distorted Avarice Will of the People Rays of Control Moral Support Active Support Mental Hack Emergency Shift Final Guard Position Hack High Analyze Treasure Skimmer Subrecover HP EX Subrecover SP EX BLANK BLANK BLANK BLANK Big Bang Order Roulette Time Trip-Upper Lust Sphere Down Shot 2 Down Shot 3 Down Shot 4 Electro Attack Sinful Shell Follow Black BLANK Madara-Megido Curry Raku Enemy Benefit Diarahan Curry Suku Decoy Ball Super Decoy Ball Metabolic Wave Laevateinn Desperation Call of Chaos Big Bang Challenge Grail Light 2 Megidola Rage Transmission Hundred Slaps Distorted Pride Divine Punishment Will of the People Wind Cutter Shoot Up Executive Punch Megidolaon Vorpal Blade Megidolaon Big Bang Burger Earth Burger Mars Burger Moon Burger Saturn Burger Justine Attack Caroline Attack Curry Makara Curry Tetra Curry Endure Curry Charge Curry Concentrate Curry Heat Riser BLANK Cadenza Cross Slash Door of Hades Magatsu Mandala Shining Arrows Beast Weaver Titanomachia Abyssal Wings Oratario BLANK BLANK BLANK BLANK BLANK BLANK BLANK Megido Megidola Megidolaon Slam Megaton Raid One-shot Kill Inferno Diamond Dust BLANK BLANK Curry 1 Curry 2 Reviv-All Reviv-All Z BLANK BLANK Wild Talk Baton Pass Punk Talk Pickpocket Harisen Recovery Protect Girl Talk Crocodile Tears Sexy Technique Detective Talk Artist Talk Negotiating Fundraising Manipulation Mind Control Charisma Speech Brainiac Talk Sabaki Kakoi Kuzushi Touryou Togo System Bullet Hail Warning Shot Celeb Talk Kitty Talk BLANK BLANK BLANK BLANK BLANK BLANK BLANK Brave Blade Assault Dive Terror Claw Bufudyne Psiodyne Mazionga Maziodyne Maeiga Maeigaon BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK BLANK Counter Counterstrike High Counter BLANK BLANK Endure Enduring Soul BLANK BLANK Survival Trick Dodge Fire Evade Fire Dodge Ice Evade Ice Dodge Wind Evade Wind Dodge Elec Evade Elec Dodge Phys Evade Phys Fire Boost Fire Amp Ice Boost Ice Amp Wind Boost Wind Amp Elec Boost Elec Amp Angelic Grace Divine Grace Regenerate 1 Regenerate 2 Regenerate 3 Dodge Bless Dodge Curse Invigorate 1 Invigorate 2 Invigorate 3 Evade Bless Evade Curse Attack Master Auto-Mataru BLANK Defense Master Auto-Maraku BLANK Speed Master Auto-Masuku BLANK BLANK Fast Heal Insta-Heal Arms Master Spell Master BLANK Sharp Student Apt Pupil Ali Dance Firm Stance BLANK Life Aid Victory Cry Growth 1 Growth 2 Growth 3 Unshaken Will BLANK Baton Pass Soul Touch Kakoi Kuzushi Resist Fire Null Fire Repel Fire Drain Fire BLANK Resist Ice Null Ice Repel Ice Drain Ice BLANK Resist Wind Null Wind Repel Wind Drain Wind BLANK Resist Elec Null Elec Repel Elec Drain Elec BLANK Resist Bless Null Bless Repel Bless Drain Bless BLANK Resist Curse Null Curse Repel Curse Drain Curse BLANK Resist Phys Null Phys Repel Phys Drain Phys BLANK Ailment Boost Hama Boost Mudo Boost BLANK BLANK Dizzy Boost Confuse Boost Fear Boost Forget Boost Sleep Boost Rage Boost Despair Boost BLANK Brainwash Boost BLANK Resist Dizzy Resist Confuse Resist Fear Resist Forget Resist Sleep Resist Rage Resist Despair BLANK Resist Brainwash BLANK Null Dizzy Null Confuse Null Fear Null Forget Null Sleep Null Rage Null Despair BLANK Null Brainwash BLANK Burn Boost Freeze Boost Shock Boost BLANK Fortified Moxy Adverse Resolve Last Stand Heat Up BLANK Touch n' Go Climate Decorum Ambient Aid RESERVE Snipe Cripple Trigger Happy Resist Nuke Null Nuke Repel Nuke Drain Nuke RESERVE Resist Psy Null Psy Repel Psy Drain Psy RESERVE Nuke Boost Nuke Amp RESERVE Psy Boost Psy Amp RESERVE Dodge Nuke Evade Nuke RESERVE Dodge Psy Evade Psy RESERVE Bless Boost Bless Amp RESERVE Curse Boost Curse Amp RESERVE Magic Ability Fortify Spirit Almighty Boost Almighty Amp Zenith Defense Soul Chain Vanity Copy Gluttonous Snuff Sloth Defense BLANK BLANK BLANK BLANK BLANK BLANK BLANK ================================================ FILE: KHSave.LibPersona5/SavePersona5.cs ================================================ using KHSave.LibPersona5.Models; using System; using System.IO; using System.Text; using Xe.BinaryMapper; namespace KHSave.LibPersona5 { public interface ISavePersona5 { bool IsRoyal { get; } //string ProtagonistLastName { get; set; } //string ProtagonistFirstName { get; set; } int Money { get; set; } bool PartyModifierRyuji { get; set; } bool PartyModifierMorgana { get; set; } bool PartyModifierAnn { get; set; } bool PartyModifierYusuke { get; set; } bool PartyModifierMakoto { get; set; } bool PartyModifierHaru { get; set; } bool PartyModifierFutaba { get; set; } bool PartyModifierAkechi { get; set; } bool PartyModifierKasumi { get; set; } short CalendarDay1 { get; set; } // Visual change on the load screen short CalendarDay2 { get; set; } // Just a visual change short CalendarDay3 { get; set; } float PositionX { get; set; } float PositionY { get; set; } float PositionZ { get; set; } short RoomCategory { get; set; } short RoomMap { get; set; } Character[] Characters { get; set; } byte[] InventoryCount { get; } Persona[] Compendium { get; set; } } public class SavePersona5 { private const int Persona5Identifier = 0x0e000000; private const int Persona5RoyalIdentifier = 0x2d000000; internal static IBinaryMapping Mapper; static SavePersona5() { Mapper = MappingConfiguration .DefaultConfiguration(Encoding.UTF8, true) .ForType(ReadString, WriteString) .ForType(ReadFloat, WriteFloat) .Build(); } public static bool IsValid(Stream stream) { switch (GetGameIdentifier(stream.SetPosition(0))) { case Persona5Identifier: return stream.Length == 192 * 1024; case Persona5RoyalIdentifier: return stream.Length == 256 * 1024; } return false; } public static ISavePersona5 Read(Stream stream) { switch (GetGameIdentifier(stream.SetPosition(0))) { case Persona5Identifier: return Mapper.ReadObject(stream.SetPosition(0)); case Persona5RoyalIdentifier: return Mapper.ReadObject(stream.SetPosition(0)); default: throw new NotImplementedException("The version has been recognized but it is not supported."); } } public static void Write(Stream stream, TSavePersona5 save) where TSavePersona5 : class, ISavePersona5 { Mapper.WriteObject(stream.FromBegin(), save); } private static TSavePersona5 Read(Stream stream) where TSavePersona5 : class, ISavePersona5 => Mapper.ReadObject(stream.FromBegin()); private static int GetGameIdentifier(Stream stream) => new BinaryReader(stream).ReadInt32(); private static object ReadString(MappingReadArgs arg) { var dstPosition = arg.Reader.BaseStream.Position + arg.Count * 2; var count = arg.Count; var sb = new StringBuilder(count); for (var i = 0; i < count; i++) { var ch = arg.Reader.ReadByte(); if (ch == 0) break; if (ch >= '0' && ch <= '9') sb.Append((char)ch); else if (ch >= 'A' && ch <= 'Z') sb.Append((char)ch); else if (ch >= 'a' && ch <= 'z') sb.Append((char)ch); else if (ch == 0x80) { ch = arg.Reader.ReadByte(); if (ch >= 0xc1 && ch <= 0xc1 + ('z' - 'a')) sb.Append((char)(ch - 0xc1 + 'a')); else if (ch >= 0xa1 && ch <= 0xa1 + ('Z' - 'A')) sb.Append((char)(ch - 0xa1 + 'A')); else throw new NotImplementedException($"Read P5 string: second char {ch:X02}"); } else throw new NotImplementedException($"Read P5 string: first char {ch:X02}"); } arg.Reader.BaseStream.Position = dstPosition; return sb.ToString(); } private static void WriteString(MappingWriteArgs arg) { var index = 0; var str = arg.Item as string; var remaining = arg.Count; while (index < str.Length && remaining-- > 0) { var data = 0; var ch = str[index++]; if (ch >= 'A' && ch <= 'Z') data = ch - 'A' + 0xa1; else if (ch >= 'a' && ch <= 'z') data = ch - 'a' + 0xc1; else throw new NotImplementedException($"Write P5 string: can't write '{ch}'"); arg.Writer.Write((byte)0x80); arg.Writer.Write((byte)data); } while (remaining-- > 0) { arg.Writer.Write((short)0); } } private unsafe static object ReadFloat(MappingReadArgs arg) { var data = (arg.Reader.ReadByte() << 24) | (arg.Reader.ReadByte() << 16) | (arg.Reader.ReadByte() << 8) | arg.Reader.ReadByte(); return *(float*)&data; } private unsafe static void WriteFloat(MappingWriteArgs arg) { var value = (float)arg.Item; var data = *(int*)&value; arg.Writer.Write((byte)((data >> 24) & 0xff)); arg.Writer.Write((byte)((data >> 16) & 0xff)); arg.Writer.Write((byte)((data >> 8) & 0xff)); arg.Writer.Write((byte)(data & 0xff)); } } } ================================================ FILE: KHSave.LibPersona5/Types/ArcanaType.cs ================================================ namespace KHSave.LibPersona5.Types { public enum ArcanaType : byte { Null, Fool, Magician, Priestess, Empress, Emperor, Hierophant, Lovers, Chariot, Justice, Hermit, Fortune, Strength, Hanged, Death, Temperance, Devil, Tower, Star, Moon, Sun, Judgement, Aeon, Unknown, World, Faith = 29, Councillor } } ================================================ FILE: KHSave.LibPersona5/Types/Characters.cs ================================================ using KHSave.Attributes; namespace KHSave.LibPersona5.Types { public enum Characters { [Info] Joker, [Info] Skull, [Info] Mona, [Info] Panther, [Info] Fox, [Info] Queen, [Info] Noir, [Info] Oracle, [Info] Crow, [Info] Violet, } } ================================================ FILE: KHSave.LibPersona5/Types/Demon.cs ================================================ using KHSave.Attributes; using KHSave.Extensions; namespace KHSave.LibPersona5.Types { public class DemonAttribute : InfoAttribute { public bool Royal { get; } public string Arcana { get; } public DemonAttribute(string name = null, bool royal = false, string tarot = null) : base(name) { Royal = royal; Arcana = tarot ?? string.Empty; } public static string GetArcana(object obj) => obj.GetAttribute()?.Arcana; } public class MagicianAttribute : DemonAttribute { public MagicianAttribute(string name = null, bool royal = false) : base(name, royal, "Magician") { } } public class JusticeAttribute : DemonAttribute { public JusticeAttribute(string name = null, bool royal = false) : base(name, royal, "Justice") { } } public class DevilAttribute : DemonAttribute { public DevilAttribute(string name = null, bool royal = false) : base(name, royal, "Devil") { } } public class StarAttribute : DemonAttribute { public StarAttribute(string name = null, bool royal = false) : base(name, royal, "Star") { } } public class LoversAttribute : DemonAttribute { public LoversAttribute(string name = null, bool royal = false) : base(name, royal, "Lovers") { } } public class ChariotAttribute : DemonAttribute { public ChariotAttribute(string name = null, bool royal = false) : base(name, royal, "Chariot") { } } public class EmperorAttribute : DemonAttribute { public EmperorAttribute(string name = null, bool royal = false) : base(name, royal, "Emperor") { } } public class HangedAttribute : DemonAttribute { public HangedAttribute(string name = null, bool royal = false) : base(name, royal, "Hanged") { } } public class FoolAttribute : DemonAttribute { public FoolAttribute(string name = null, bool royal = false) : base(name, royal, "Fool") { } } public class TowerAttribute : DemonAttribute { public TowerAttribute(string name = null, bool royal = false) : base(name, royal, "Tower") { } } public class HierophantAttribute : DemonAttribute { public HierophantAttribute(string name = null, bool royal = false) : base(name, royal, "Hierophant") { } } public class PriestessAttribute : DemonAttribute { public PriestessAttribute(string name = null, bool royal = false) : base(name, royal, "Priestess") { } } public class StrengthAttribute : DemonAttribute { public StrengthAttribute(string name = null, bool royal = false) : base(name, royal, "Strength") { } } public class EmpressAttribute : DemonAttribute { public EmpressAttribute(string name = null, bool royal = false) : base(name, royal, "Empress") { } } public class SunAttribute : DemonAttribute { public SunAttribute(string name = null, bool royal = false) : base(name, royal, "Sun") { } } public class MoonAttribute : DemonAttribute { public MoonAttribute(string name = null, bool royal = false) : base(name, royal, "Moon") { } } public class JudgementAttribute : DemonAttribute { public JudgementAttribute(string name = null, bool royal = false) : base(name, royal, "Judgement") { } } public class DeathAttribute : DemonAttribute { public DeathAttribute(string name = null, bool royal = false) : base(name, royal, "Death") { } } public class TemperAttribute : DemonAttribute { public TemperAttribute(string name = null, bool royal = false) : base(name, royal, "Temper") { } } public class HermitAttribute : DemonAttribute { public HermitAttribute(string name = null, bool royal = false) : base(name, royal, "Hermit") { } } public class FortuneAttribute : DemonAttribute { public FortuneAttribute(string name = null, bool royal = false) : base(name, royal, "Fortune") { } } public class WorldAttribute : DemonAttribute { public WorldAttribute(string name = null, bool royal = false) : base(name, royal, "World") { } } } ================================================ FILE: KHSave.LibPersona5/Types/Equipment.cs ================================================ using KHSave.Attributes; namespace KHSave.LibPersona5.Types { public class EquipmentAttribute : InfoAttribute { public EquipmentAttribute(string name = null) : base(name) { } } public class DaggerAttribute : EquipmentAttribute { public DaggerAttribute(string name = null) : base(name) { } } public class PoleAttribute : EquipmentAttribute { public PoleAttribute(string name = null) : base(name) { } } public class SaberAttribute : EquipmentAttribute { public SaberAttribute(string name = null) : base(name) { } } public class RangeAttribute : EquipmentAttribute { public RangeAttribute(string name = null) : base(name) { } } public class RangeJokerAttribute : RangeAttribute { public RangeJokerAttribute(string name = null) : base(name) { } } public class RangeCrowAttribute : RangeAttribute { public RangeCrowAttribute(string name = null) : base(name) { } } public class ProtectorAttribute : EquipmentAttribute { public ProtectorAttribute(string name = null) : base(name) { } } public class ProtectorMaleAttribute : ProtectorAttribute { public ProtectorMaleAttribute(string name = null) : base(name) { } } public class ProtectorFemaleAttribute : ProtectorAttribute { public ProtectorFemaleAttribute(string name = null) : base(name) { } } public class ProtectorUnisexAttribute : ProtectorAttribute { public ProtectorUnisexAttribute(string name = null) : base(name) { } } public class ProtectorCatAttribute : ProtectorAttribute { public ProtectorCatAttribute(string name = null) : base(name) { } } public class OutfitAttribute : EquipmentAttribute { public OutfitAttribute(string name = null) : base(name) { } } public enum Equipment : ushort { [Dagger("Generic Gear")] GenericGear = 0x0001, [Dagger("Rebel Knife")] RebelKnife = 0x0002, [Dagger("Frenzy Dagger")] FrenzyDagger = 0x0016, [Pole("Dragon God Pole")] DragonGodPole = 0x0039, [Dagger("Black Kogatana")] BlackKogatana = 0x00eb, [Saber("Lumina Saber")] LuminaSaber = 0xdf, [Protector("Thief Clothes")] ThiefClothes = 0x1001, [ProtectorMale("Dark Undershirt")] DarkUndershirt = 0x1002, [ProtectorMale("Print T-Shirt")] PrintTShirt = 0x1003, [ProtectorCat("Neckerchief")] Neckerchief = 0x1004, [ProtectorFemale("Baseball Jacket")] BaseballJacket = 0x1005, [ProtectorMale("Dress Shirt")] DressShirt = 0x1006, [ProtectorFemale("Turtleneck")] Turtleneck = 0x1007, [ProtectorFemale("Pink Top")] PinkTop = 0x1008, [ProtectorFemale("Loose Cutsew")] LooseCutsew = 0x1009, [ProtectorMale("Formal Shirt")] FormalShirt = 0x100A, [ProtectorMale("UFO Vest")] UfoVest = 0x1060, [ProtectorMale("Moon Man Vest")] MoonManVest = 0x1068, [ProtectorFemale("Gambler Dress")] GamblerDress = 0x107D, [ProtectorMale("Fireman Happi")] FiremanHappi = 0x108c, [ProtectorFemale("Mizuha Doumaru")] MizuhaDoumaru = 0x108D, [ProtectorCat("Gorgeous Collar")] GorgeousCollar = 0x1093, [ProtectorFemale("Titanium Set")] TitaniumSet = 0x1099, [ProtectorFemale("Haten Robe")] HatenRobe = 0x10A1, [Accessory("Hip Glasses")] HipGlasses = 0x2001, [Accessory("Fanny Pack")] FannyPack = 0x2003, [Accessory("Hairpin")] Hairpin = 0x2004, [Accessory("Silver Key Ring")] SilverKeyRing = 0x2005, [Accessory("Black Tights")] BlackTights = 0x2006, [Accessory("Dotted Tights")] DottedTights = 0x2007, [Accessory("Headphones")] Headphones = 0x2008, [Accessory("Gale Cape")] GaleCape = 0x209D, [Accessory("Blitz Ring")] BlitzRing = 0x207C, [Accessory("Druid Amulet")] DruidAmulet = 0x2053, [Accessory("Sonic Socks")] SonicSocks = 0x2061, [Accessory("Black Necktie")] BlackNecktie = 0x2009, [Accessory("Stamina Sash")] StaminaSash = 0x200c, [Accessory("Ignis Ring")] IgnisRing = 0x2076, [Accessory("Hero Eyepatch")] HeroEyepatch = 0x2091, [Accessory("Stone of Scone")] StoneOfScone = 0x20B9, [Accessory("Koh-i-Noor")] KohiNoor = 0x20ba, [Accessory("SP Adhesive 3")] SpAdhesive3 = 0x20E3, [Outfit("Phantom Suit")] PhantomSuit = 0x7002, [Outfit("Pirate Armor")] PirateArmor = 0x7003, [Outfit("Morgana Classic")] MorganaClassic = 0x7004, [Outfit("Red Latex Suit")] RedLatexSuit = 0x7005, [Outfit("Outlaw's Attire")] OutlawAttire = 0x7006, [Outfit("Metal Rider")] MetalRider = 0x7007, [Outfit("Musketeer Suit")] MusketeerSuit = 0x7008, [Outfit("Cyber Gear")] CyberGear = 0x7009, [Outfit("Prince Suit")] PrinceSuit = 0x700A, [Outfit("Swimsuit")] Swimsuit = 0x7038, [RangeJoker("Tkachev II")] Tkachev2 = 0x8013, [RangeJoker("Aura Gun 1")] AuraGun1 = 0x8008, [RangeCrow("Moebius")] Moebius = 0x80E0, [RangeJoker("Cocytus")] Cocytus = 0x80fa, } } ================================================ FILE: KHSave.LibPersona5/Types/Inventory.cs ================================================ using KHSave.Attributes; namespace KHSave.LibPersona5.Types { public class ConsumableHpAttribute : ConsumableAttribute { public ConsumableHpAttribute(string name = null) : base(name) { } } public enum Inventory { [Consumable("Blank")] Blank, [ConsumableHp("Devil Fruit")] DevilFruit, [Consumable("Recov-R: 50mg")] Item2, [Consumable("Recov-R: 100mg")] Item3, [Consumable("Takemedic")] Item4, } } ================================================ FILE: KHSave.LibPersona5/Types/Skill.cs ================================================ using KHSave.Attributes; namespace KHSave.LibPersona5.Types { public class SkillAttribute : InfoAttribute { public SkillAttribute(string name = null) : base(name) { } } public class HitSkillAttribute : SkillAttribute { public HitSkillAttribute(string name = null) : base(name) { } } public class GunSkillAttribute : SkillAttribute { public GunSkillAttribute(string name = null) : base(name) { } } public class FireSkillAttribute : SkillAttribute { public FireSkillAttribute(string name = null) : base(name) { } } public class IceSkillAttribute : SkillAttribute { public IceSkillAttribute(string name = null) : base(name) { } } public class WindSkillAttribute : SkillAttribute { public WindSkillAttribute(string name = null) : base(name) { } } public class ThunderSkillAttribute : SkillAttribute { public ThunderSkillAttribute(string name = null) : base(name) { } } public class BlessSkillAttribute : SkillAttribute { public BlessSkillAttribute(string name = null) : base(name) { } } public class DeathSkillAttribute : SkillAttribute { public DeathSkillAttribute(string name = null) : base(name) { } } public class AlmightySkillAttribute : SkillAttribute { public AlmightySkillAttribute(string name = null) : base(name) { } } public class NuclearSkillAttribute : SkillAttribute { public NuclearSkillAttribute(string name = null) : base(name) { } } public class PsychoSkillAttribute : SkillAttribute { public PsychoSkillAttribute(string name = null) : base(name) { } } public class SupportSkillAttribute : SkillAttribute { public SupportSkillAttribute(string name = null) : base(name) { } } public class AutoSkillAttribute : SkillAttribute { public AutoSkillAttribute(string name = null) : base(name) { } } public class PoisonSkillAttribute : SkillAttribute { public PoisonSkillAttribute(string name = null) : base(name) { } } public class HealSkillAttribute : SkillAttribute { public HealSkillAttribute(string name = null) : base(name) { } } public class SpecialSkillAttribute : SkillAttribute { public SpecialSkillAttribute(string name = null) : base(name) { } } public enum Skill : short { [Skill("-")] Empty, [Unused] Skill1, [Unused] Skill2, [Unused] Skill3, [Unused] Skill4, [Unused] Skill5, [Unused] Skill6, [Unused] Skill7, [Unused] Skill8, [Unused] Skill9, [FireSkill("Agi")] Skill10, [FireSkill("Agilao")] Skill11, [FireSkill("Agidyne")] Skill12, [FireSkill("Maragi")] Skill13, [FireSkill("Maragion")] Skill14, [FireSkill("Maragidyne")] Skill15, [FireSkill("Agi")] Skill16, [FireSkill("Maragi")] Skill17, [Unused] Skill18, [Unused] Skill19, [IceSkill("Bufu")] Skill20, [IceSkill("Bufula")] Skill21, [IceSkill("Bufudyne")] Skill22, [IceSkill("Mabufu")] Skill23, [IceSkill("Mabufula")] Skill24, [IceSkill("Mabufudyne")] Skill25, [IceSkill("Bufu")] Skill26, [IceSkill("Mabufu")] Skill27, [Unused] Skill28, [Unused] Skill29, [WindSkill("Garu")] Skill30, [WindSkill("Garula")] Skill31, [WindSkill("Garudyne")] Skill32, [WindSkill("Magaru")] Skill33, [WindSkill("Magarula")] Skill34, [WindSkill("Magarudyne")] Skill35, [WindSkill("Garu")] Skill36, [Unused] Skill37, [Unused] Skill38, [Unused] Skill39, [ThunderSkill("Zio")] Skill40, [ThunderSkill("Zionga")] Skill41, [ThunderSkill("Ziodyne")] Skill42, [ThunderSkill("Mazio")] Skill43, [ThunderSkill("Mazionga")] Skill44, [ThunderSkill("Maziodyne")] Skill45, [ThunderSkill("Zio")] Skill46, [ThunderSkill("Mazio")] Skill47, [Unused] Skill48, [Unused] Skill49, [BlessSkill("Hama")] Skill50, [BlessSkill("Hamaon")] Skill51, [BlessSkill("Mahama")] Skill52, [BlessSkill("Mahamaon")] Skill53, [BlessSkill("Kouha")] Skill54, [BlessSkill("Kouga")] Skill55, [BlessSkill("Kougaon")] Skill56, [BlessSkill("Makouha")] Skill57, [BlessSkill("Makouga")] Skill58, [BlessSkill("Makougaon")] Skill59, [DeathSkill("Mudo")] Skill60, [DeathSkill("Mudoon")] Skill61, [DeathSkill("Mamudo")] Skill62, [DeathSkill("Mamudoon")] Skill63, [DeathSkill("Eiha")] Skill64, [DeathSkill("Eiga")] Skill65, [DeathSkill("Eigaon")] Skill66, [DeathSkill("Maeiha")] Skill67, [DeathSkill("Maeiga")] Skill68, [DeathSkill("Maeigaon")] Skill69, [AlmightySkill("Megido")] Skill70, [AlmightySkill("Megidola")] Skill71, [AlmightySkill("Megidolaon")] Skill72, [NuclearSkill("Frei")] Skill73, [NuclearSkill("Freila")] Skill74, [NuclearSkill("Freidyne")] Skill75, [NuclearSkill("Mafrei")] Skill76, [NuclearSkill("Mafreila")] Skill77, [NuclearSkill("Mafreidyne")] Skill78, [Unused] Skill79, [PoisonSkill("Dazzler")] Skill80, [PoisonSkill("Nocturnal Flash")] Skill81, [PoisonSkill("Pulinpa")] Skill82, [PoisonSkill("Tentarafoo")] Skill83, [PoisonSkill("Evil Touch")] Skill84, [PoisonSkill("Evil Smile")] Skill85, [PoisonSkill("Makajama")] Skill86, [PoisonSkill("Makajamaon")] Skill87, [PoisonSkill("Famine's Breath")] Skill88, [PoisonSkill("Famine's Scream")] Skill89, [PoisonSkill("Dormina")] Skill90, [PoisonSkill("Lullaby")] Skill91, [PoisonSkill("Taunt")] Skill92, [PoisonSkill("Wage War")] Skill93, [PoisonSkill("Ominous Words")] Skill94, [PoisonSkill("Abysmal Surge")] Skill95, [PoisonSkill("Marin Karin")] Skill96, [PoisonSkill("Brain Jack")] Skill97, [AlmightySkill("Trapped Rat")] Skill98, [Unused] Skill99, [AlmightySkill("Self-destruct")] Skill100, [AlmightySkill("Self-destruct")] Skill101, [AlmightySkill("Self-destruct")] Skill102, [AlmightySkill("Life Drain")] Skill103, [AlmightySkill("Spirit Drain")] Skill104, [AlmightySkill("Life Leech")] Skill105, [AlmightySkill("Spirit Leech")] Skill106, [AlmightySkill("Spirit Drain")] Skill107, [Unused] Skill108, [Unused] Skill109, [AlmightySkill("Foul Breath")] Skill110, [AlmightySkill("Stagnant Air")] Skill111, [AlmightySkill("Reverse Rub")] Skill112, [AlmightySkill("Ghastly Wail")] Skill113, [Unused] Skill114, [Unused] Skill115, [Unused] Skill116, [Unused] Skill117, [Unused] Skill118, [Unused] Skill119, [FireSkill("Inferno")] Skill120, [FireSkill("Blazing Hell")] Skill121, [AutoSkill("Low Burn")] Skill122, [AutoSkill("Mid Burn")] Skill123, [AutoSkill("High Burn")] Skill124, [AutoSkill("Low Freeze")] Skill125, [AutoSkill("Mid Freeze")] Skill126, [AutoSkill("High Freeze")] Skill127, [AutoSkill("Low Shock")] Skill128, [AutoSkill("Mid Shock")] Skill129, [IceSkill("Diamond Dust")] Skill130, [IceSkill("Ice Age")] Skill131, [AutoSkill("High Shock")] Skill132, [AutoSkill("Low Dizzy")] Skill133, [AutoSkill("Mid Dizzy")] Skill134, [AutoSkill("High Dizzy")] Skill135, [AutoSkill("Low Confuse")] Skill136, [AutoSkill("Mid Confuse")] Skill137, [AutoSkill("High Confuse")] Skill138, [AutoSkill("Low Fear")] Skill139, [WindSkill("Panta Rhei")] Skill140, [WindSkill("Vacuum Wave")] Skill141, [AutoSkill("Mid Fear")] Skill142, [AutoSkill("High Fear")] Skill143, [AutoSkill("Low Forget")] Skill144, [AutoSkill("Mid Forget")] Skill145, [AutoSkill("High Forget")] Skill146, [AutoSkill("Low Brainwash")] Skill147, [AutoSkill("Mid Brainwash")] Skill148, [AutoSkill("High Brainwash")] Skill149, [ThunderSkill("Thunder Reign")] Skill150, [ThunderSkill("Wild Thunder")] Skill151, [AutoSkill("Low Sleep")] Skill152, [AutoSkill("Mid Sleep")] Skill153, [AutoSkill("High Sleep")] Skill154, [AutoSkill("Low Rage")] Skill155, [AutoSkill("Mid Rage")] Skill156, [AutoSkill("High Rage")] Skill157, [AutoSkill("Low Despair")] Skill158, [AutoSkill("Mid Despair")] Skill159, [BlessSkill("Divine Judgment")] Skill160, [BlessSkill("Samsara")] Skill161, [AutoSkill("High Despair")] Skill162, [AutoSkill("Low All Ail")] Skill163, [AutoSkill("Mid All Ail")] Skill164, [AutoSkill("High All Ail")] Skill165, [Unused] Skill166, [Unused] Skill167, [Unused] Skill168, [Unused] Skill169, [DeathSkill("Demonic Decree")] Skill170, [DeathSkill("Die For Me!")] Skill171, [Unused] Skill172, [Unused] Skill173, [Unused] Skill174, [Unused] Skill175, [NuclearSkill("Atomic Flare")] Skill176, [NuclearSkill("Cosmic Flare")] Skill177, [Unused] Skill178, [Unused] Skill179, [AlmightySkill("Black Viper")] Skill180, [AlmightySkill("Morning Star")] Skill181, [Unused] Skill182, [Unused] Skill183, [Unused] Skill184, [Unused] Skill185, [Unused] Skill186, [Unused] Skill187, [Unused] Skill188, [Unused] Skill189, [PsychoSkill("Psi")] Skill190, [PsychoSkill("Psio")] Skill191, [PsychoSkill("Psiodyne")] Skill192, [PsychoSkill("Mapsi")] Skill193, [PsychoSkill("Mapsio")] Skill194, [PsychoSkill("Mapsiodyne")] Skill195, [Unused] Skill196, [PsychoSkill("Psycho Force")] Skill197, [PsychoSkill("Psycho Blast")] Skill198, [Unused] Skill199, [HitSkill("Lunge")] Skill200, [HitSkill("Assault Dive")] Skill201, [HitSkill("Megaton Raid")] Skill202, [HitSkill("God's Hand")] Skill203, [HitSkill("Lunge")] Skill204, [HitSkill("Lucky Punch")] Skill205, [HitSkill("Miracle Punch")] Skill206, [Unused] Skill207, [Unused] Skill208, [Unused] Skill209, [HitSkill("Cleave")] Skill210, [HitSkill("Giant Slice")] Skill211, [HitSkill("Brave Blade")] Skill212, [HitSkill("Sword Dance")] Skill213, [Unused] Skill214, [HitSkill("Hassou Tobi")] Skill215, [HitSkill("Ayamur")] Skill216, [Unused] Skill217, [Unused] Skill218, [Unused] Skill219, [HitSkill("Cornered Fang")] Skill220, [HitSkill("Rising Slash")] Skill221, [HitSkill("Deadly Fury")] Skill222, [Unused] Skill223, [GunSkill("Snap")] Skill224, [GunSkill("Triple Down")] Skill225, [GunSkill("One-shot Kill")] Skill226, [GunSkill("Riot Gun")] Skill227, [Unused] Skill228, [Unused] Skill229, [HitSkill("Vajra Blast")] Skill230, [HitSkill("Vorpal Blade")] Skill231, [Unused] Skill232, [Unused] Skill233, [Unused] Skill234, [HitSkill("Vicious Strike")] Skill235, [HitSkill("Heat Wave")] Skill236, [HitSkill("Gigantomachia")] Skill237, [Unused] Skill238, [Unused] Skill239, [Unused] Skill240, [HitSkill("Rampage")] Skill241, [HitSkill("Swift Strike")] Skill242, [HitSkill("Deathbound")] Skill243, [HitSkill("Agneyastra")] Skill244, [Unused] Skill245, [Unused] Skill246, [HitSkill("Rising Slash")] Skill247, [HitSkill("Deadly Fury")] Skill248, [Unused] Skill249, [HitSkill("Double Fangs")] Skill250, [Unused] Skill251, [Unused] Skill252, [HitSkill("Tempest Slash")] Skill253, [HitSkill("Myriad Slashes")] Skill254, [Unused] Skill255, [Unused] Skill256, [Unused] Skill257, [Unused] Skill258, [Unused] Skill259, [HitSkill("Sledgehammer")] Skill260, [HitSkill("Skull Cracker")] Skill261, [HitSkill("Terror Claw")] Skill262, [HitSkill("Headbutt")] Skill263, [HitSkill("Stomach Blow")] Skill264, [HitSkill("Dream Needle")] Skill265, [HitSkill("Hysterical Slap")] Skill266, [HitSkill("Negative Pile")] Skill267, [HitSkill("Brain Shake")] Skill268, [Unused] Skill269, [HitSkill("Flash Bomb")] Skill270, [HitSkill("Mind Slice")] Skill271, [HitSkill("Bloodbath")] Skill272, [HitSkill("Memory Blow")] Skill273, [HitSkill("Insatiable Strike")] Skill274, [HitSkill("Dormin Rush")] Skill275, [HitSkill("Oni-Kagura")] Skill276, [HitSkill("Bad Beat")] Skill277, [HitSkill("Brain Buster")] Skill278, [Unused] Skill279, [GunSkill("Handgun")] Skill280, [GunSkill("Shotgun")] Skill281, [GunSkill("Slingshot")] Skill282, [GunSkill("Machine Gun")] Skill283, [GunSkill("Assault Rifle")] Skill284, [GunSkill("Revolver")] Skill285, [GunSkill("Grenade Launcher")] Skill286, [GunSkill("Laser Gun")] Skill287, [Unused] Skill288, [Unused] Skill289, [Unused] Skill290, [Unused] Skill291, [Unused] Skill292, [Unused] Skill293, [Unused] Skill294, [Unused] Skill295, [Unused] Skill296, [Unused] Skill297, [Unused] Skill298, [Unused] Skill299, [HealSkill("Dia")] Skill300, [HealSkill("Diarama")] Skill301, [HealSkill("Diarahan")] Skill302, [Unused] Skill303, [Unused] Skill304, [HealSkill("Media")] Skill305, [HealSkill("Mediarama")] Skill306, [HealSkill("Mediarahan")] Skill307, [Unused] Skill308, [Unused] Skill309, [HealSkill("Recarm")] Skill310, [HealSkill("Samarecarm")] Skill311, [HealSkill("Recarmdra")] Skill312, [Unused] Skill313, [Unused] Skill314, [HealSkill("Amrita Drop")] Skill315, [HealSkill("Amrita Shower")] Skill316, [HealSkill("BLANK")] Skill317, [HealSkill("Salvation")] Skill318, [Unused] Skill319, [Unused] Skill320, [Unused] Skill321, [Unused] Skill322, [Unused] Skill323, [Unused] Skill324, [HealSkill("Patra")] Skill325, [HealSkill("BLANK")] Skill326, [HealSkill("Energy Shower")] Skill327, [HealSkill("Energy Drop")] Skill328, [HealSkill("Baisudi")] Skill329, [HealSkill("Me Patra")] Skill330, [HealSkill("Mabaisudi")] Skill331, [Unused] Skill332, [Unused] Skill333, [Unused] Skill334, [SupportSkill("Tarukaja")] Skill335, [SupportSkill("Rakukaja")] Skill336, [SupportSkill("Sukukaja")] Skill337, [SupportSkill("Heat Riser")] Skill338, [Unused] Skill339, [SupportSkill("Matarukaja")] Skill340, [SupportSkill("Marakukaja")] Skill341, [SupportSkill("Masukukaja")] Skill342, [SupportSkill("Thermopylae")] Skill343, [Unused] Skill344, [SupportSkill("Tarunda")] Skill345, [SupportSkill("Rakunda")] Skill346, [SupportSkill("Sukunda")] Skill347, [SupportSkill("Debilitate")] Skill348, [Unused] Skill349, [SupportSkill("Matarunda")] Skill350, [SupportSkill("Marakunda")] Skill351, [SupportSkill("Masukunda")] Skill352, [Unused] Skill353, [Unused] Skill354, [SupportSkill("Dekunda")] Skill355, [SupportSkill("Dekaja")] Skill356, [Unused] Skill357, [Unused] Skill358, [Unused] Skill359, [SupportSkill("Charge")] Skill360, [SupportSkill("Concentrate")] Skill361, [Unused] Skill362, [Unused] Skill363, [Unused] Skill364, [SupportSkill("Rebellion")] Skill365, [SupportSkill("Revolution")] Skill366, [Unused] Skill367, [Unused] Skill368, [Unused] Skill369, [SupportSkill("Tetrakarn")] Skill370, [SupportSkill("Makarakarn")] Skill371, [SupportSkill("Tetraja")] Skill372, [Unused] Skill373, [Unused] Skill374, [SupportSkill("Tetra Break")] Skill375, [SupportSkill("Makara Break")] Skill376, [Unused] Skill377, [Unused] Skill378, [Unused] Skill379, [SupportSkill("Fire Wall")] Skill380, [SupportSkill("Ice Wall")] Skill381, [SupportSkill("Elec Wall")] Skill382, [SupportSkill("Wind Wall")] Skill383, [Unused] Skill384, [SupportSkill("Fire Break")] Skill385, [SupportSkill("Ice Break")] Skill386, [SupportSkill("Wind Break")] Skill387, [SupportSkill("Elec Break")] Skill388, [Unused] Skill389, [SupportSkill("Trafuri")] Skill390, [SupportSkill("Traesto")] Skill391, [Unused] Skill392, [SupportSkill("Nuke Wall")] Skill393, [SupportSkill("Psy Wall")] Skill394, [SupportSkill("Nuke Break")] Skill395, [SupportSkill("Psy Break")] Skill396, [Unused] Skill397, [Unused] Skill398, [Unused] Skill399, [AlmightySkill("All-out Lv 1")] Skill400, [AlmightySkill("All-out Lv 2")] Skill401, [AlmightySkill("All-out Lv 3")] Skill402, [SupportSkill("Emergency Escape")] Skill403, [Unused] Skill404, [AlmightySkill("Down Shot")] Skill405, [SpecialSkill("Summon")] Skill406, [SpecialSkill("Call for Backup")] Skill407, [Unused] Skill408, [SpecialSkill("Barrage")] Skill409, [AlmightySkill("Follow Crush")] Skill410, [AlmightySkill("Follow Claw")] Skill411, [AlmightySkill("Follow Whip")] Skill412, [AlmightySkill("Follow Blade")] Skill413, [AlmightySkill("Follow Knuckle")] Skill414, [AlmightySkill("Follow Axe")] Skill415, [AlmightySkill("Follow Saber")] Skill416, [SpecialSkill("Dispose Item")] Skill417, [SpecialSkill("Heal Enemy")] Skill418, [AlmightySkill("Death (Despair)")] Skill419, [AlmightySkill("Ally1 Follow-Up")] Skill420, [AlmightySkill("Ally2 Follow-Up")] Skill421, [AlmightySkill("Ally3 Follow-Up")] Skill422, [AlmightySkill("Ally4 Follow-Up")] Skill423, [AlmightySkill("Ally5 Follow-Up")] Skill424, [AlmightySkill("Ally6 Follow-Up")] Skill425, [AlmightySkill("Ally7 Follow-Up")] Skill426, [SpecialSkill("Power Up Enemy")] Skill427, [SpecialSkill("Power Up Enemy")] Skill428, [SpecialSkill("Power Up Enemy")] Skill429, [SupportSkill("Steal Info")] Skill430, [SpecialSkill("Sup Matarukaja")] Skill431, [SpecialSkill("Sup Marakukaja")] Skill432, [SpecialSkill("Sup Masukukaja")] Skill433, [SpecialSkill("Sup All Kaja")] Skill434, [SpecialSkill("Sup Charge")] Skill435, [SpecialSkill("Sup HP +30%")] Skill436, [SpecialSkill("Sup SP +10%")] Skill437, [SpecialSkill("Sup Escape Route")] Skill438, [SpecialSkill("Sup Third Eye")] Skill439, [SpecialSkill("Subrecover HP")] Skill440, [SpecialSkill("Subrecover SP")] Skill441, [SpecialSkill("Analysis")] Skill442, [SpecialSkill("Deep Analysis")] Skill443, [SpecialSkill("Full Analysis")] Skill444, [AlmightySkill("All-Out Attack")] Skill445, [WindSkill("Dust Flurry")] Skill446, [HitSkill("Tongue Whip")] Skill447, [HitSkill("Whip Strike")] Skill448, [SupportSkill("Lustful Slurp")] Skill449, [HealSkill("Libido Boost")] Skill450, [HitSkill("Golden Knife")] Skill451, [HitSkill("Lick")] Skill452, [AlmightySkill("Gold Medal Spike")] Skill453, [HitSkill("Volleyball Assault")] Skill454, [WindSkill("Maelstrom")] Skill455, [FireSkill("Flame Dance")] Skill456, [IceSkill("Silent Snowscape")] Skill457, [ThunderSkill("Thunderclap")] Skill458, [DeathSkill("Maeiga")] Skill459, [PoisonSkill("Hunger All")] Skill460, [GunSkill("Ocular Vulcan")] Skill461, [FireSkill("Missile Party")] Skill462, [PoisonSkill("Fear Gas")] Skill463, [SpecialSkill("Super VIP Form")] Skill464, [AlmightySkill("March of the Piggy")] Skill465, [HitSkill("Sphinx Swipe")] Skill466, [WindSkill("Wing Blast")] Skill467, [SpecialSkill("Rapid Ascent")] Skill468, [HitSkill("Sphinx Dive")] Skill469, [AlmightySkill("Dreadful Scream")] Skill470, [HitSkill("Bite")] Skill471, [SupportSkill("Restore")] Skill472, [AlmightySkill("The Artist's Grace")] Skill473, [SpecialSkill("Work Order")] Skill474, [SpecialSkill("Sacrifice Order")] Skill475, [AlmightySkill("Selfless Devotion")] Skill476, [AlmightySkill("Penalty")] Skill477, [HitSkill("Coin Attack")] Skill478, [HitSkill("Severing Slash")] Skill479, [GunSkill("Gatling Gun")] Skill480, [AlmightySkill("Berserker Dance")] Skill481, [AlmightySkill("Roulette: HP")] Skill482, [AlmightySkill("Roulette: SP")] Skill483, [SpecialSkill("Roulette: Money")] Skill484, [SupportSkill("Roulette: Aid 1")] Skill485, [SupportSkill("Roulette: Aid 2")] Skill486, [SupportSkill("Roulette: Aid 3")] Skill487, [HitSkill("Beast King's Wrath")] Skill488, [SupportSkill("Hunting Stance")] Skill489, [AlmightySkill("Arm of Destruction")] Skill490, [SupportSkill("Gryphon's Breath")] Skill491, [AlmightySkill("Royal Wing Beam")] Skill492, [AlmightySkill("Cannon Fire")] Skill493, [AlmightySkill("Cannon Barrage")] Skill494, [SupportSkill("Unholy Convergence")] Skill495, [AlmightySkill("Pyramid Blast")] Skill496, [HitSkill("Tyrant's Fist")] Skill497, [SupportSkill("Tyrant's Glare")] Skill498, [AlmightySkill("Tyrant's Wave")] Skill499, [HealSkill("Fig Seed")] Skill500, [HealSkill("Medicine")] Skill501, [HealSkill("Ointment")] Skill502, [HealSkill("Antibiotic Gel")] Skill503, [HealSkill("Life Stone")] Skill504, [HealSkill("Bead")] Skill505, [HealSkill("Value Medicine")] Skill506, [HealSkill("Medical Kit")] Skill507, [HealSkill("Maka Leaf")] Skill508, [HealSkill("Bead Chain")] Skill509, [HealSkill("Soul Drop")] Skill510, [HealSkill("Snuff Soul")] Skill511, [HealSkill("Chewing Soul")] Skill512, [HealSkill("Soul Food")] Skill513, [HealSkill("Revival Bead")] Skill514, [HealSkill("Balm of Life")] Skill515, [HealSkill("Royel Jelly")] Skill516, [HealSkill("Organic Herb")] Skill517, [HealSkill("Disclose")] Skill518, [HealSkill("Tranquilizer")] Skill519, [HealSkill("Kopi Luwak")] Skill520, [SupportSkill("Goho-M")] Skill521, [SupportSkill("Vanish Ball")] Skill522, [HealSkill("Soma")] Skill523, [HealSkill("Amrita Soda")] Skill524, [HealSkill("Hiranya")] Skill525, [HealSkill("Muscle Drink")] Skill526, [HealSkill("Odd Morsel")] Skill527, [HealSkill("Rancid Gravy")] Skill528, [HealSkill("Plume of Dusk")] Skill529, [SupportSkill("Magic Mirror")] Skill530, [SupportSkill("Physical Mirror")] Skill531, [SupportSkill("Universe Ring")] Skill532, [SupportSkill("Sleipnir")] Skill533, [SupportSkill("Obsidian Mirror")] Skill534, [SupportSkill("Purifying Water")] Skill535, [SupportSkill("Purifying Salt")] Skill536, [FireSkill("Firecracker")] Skill537, [FireSkill("San-zun Tama")] Skill538, [IceSkill("Ice Cube")] Skill539, [IceSkill("Dry Ice")] Skill540, [WindSkill("Pinwheel")] Skill541, [WindSkill("Yashichi")] Skill542, [ThunderSkill("Ball Lightning")] Skill543, [ThunderSkill("Tesla Coil")] Skill544, [AlmightySkill("Smart Bomb")] Skill545, [BlessSkill("Segami Rice")] Skill546, [DeathSkill("Curse Paper")] Skill547, [FireSkill("Flame Magatama")] Skill548, [WindSkill("Wind Magatama")] Skill549, [IceSkill("Freeze Magatama")] Skill550, [ThunderSkill("Bolt Magatama")] Skill551, [HealSkill("Homunculus")] Skill552, [HealSkill("Removal Potion")] Skill553, [BlessSkill("Kouga Ball")] Skill554, [BlessSkill("Makouha Ball")] Skill555, [DeathSkill("Eiga Ball")] Skill556, [DeathSkill("Maeiga Ball")] Skill557, [PsychoSkill("Psio Ball")] Skill558, [PsychoSkill("Mapsi Ball")] Skill559, [NuclearSkill("Freila Ball")] Skill560, [NuclearSkill("Mafrei Ball")] Skill561, [NuclearSkill("Nuke Magatama")] Skill562, [PsychoSkill("Psy Magatama")] Skill563, [BlessSkill("Bless Magatama")] Skill564, [DeathSkill("Curse Magatama")] Skill565, [HealSkill("Cooking")] Skill566, [HealSkill("Snack")] Skill567, [HealSkill("Shoes 1")] Skill568, [HealSkill("Shoes 2")] Skill569, [HealSkill("Shoes 3")] Skill570, [HealSkill("Juice Bar 1")] Skill571, [HealSkill("Juice Bar 2")] Skill572, [HealSkill("Juice Bar 3")] Skill573, [HealSkill("Juice Bar 4")] Skill574, [HealSkill("Energy Drink 1")] Skill575, [HealSkill("Energy Drink 2")] Skill576, [HealSkill("Energy Drink 3")] Skill577, [HealSkill("Soda 1")] Skill578, [HealSkill("Soda 2")] Skill579, [HealSkill("Soda 3")] Skill580, [HealSkill("Soda 4")] Skill581, [HealSkill("Ration 1 ")] Skill582, [HealSkill("Ration 2")] Skill583, [HealSkill("Ration 3")] Skill584, [HealSkill("Drug Store 1")] Skill585, [HealSkill("Drug Store 2")] Skill586, [HealSkill("Drug Store 3")] Skill587, [HealSkill("Drug Store 4")] Skill588, [HealSkill("Drug Store 5")] Skill589, [HealSkill("Drug Store 6")] Skill590, [HealSkill("Drug Store 7")] Skill591, [HealSkill("Drug Store 8")] Skill592, [HealSkill("Drug Store 9")] Skill593, [HealSkill("Drug Store 10")] Skill594, [HealSkill("Drug Store 11")] Skill595, [HealSkill("Drug Store 12")] Skill596, [HealSkill("Coffee 1")] Skill597, [SupportSkill("Coffee 2")] Skill598, [Unused] Skill599, [AlmightySkill("Twins Down Attack")] Skill600, [HitSkill("Caro Rod")] Skill601, [HitSkill("Caro Attack")] Skill602, [AlmightySkill("Megidolaon")] Skill603, [AlmightySkill("Rays of Control")] Skill604, [AlmightySkill("Rays of Control")] Skill605, [AlmightySkill("Rays of Control")] Skill606, [AlmightySkill("Rays of Control")] Skill607, [AlmightySkill("Arrow of Light")] Skill608, [AlmightySkill("Diffraction Arrow")] Skill609, [AlmightySkill("Light Edge")] Skill610, [SupportSkill("Gathering Light")] Skill611, [AlmightySkill("Eternal Light")] Skill612, [SupportSkill("Holy Change")] Skill613, [AlmightySkill("Distortion Wave")] Skill614, [SupportSkill("Tough Law")] Skill615, [SupportSkill("Frail Law")] Skill616, [SupportSkill("New Creation")] Skill617, [AlmightySkill("Distortion Surge")] Skill618, [AlmightySkill("Arrow of Light")] Skill619, [SupportSkill("Manifest Sword")] Skill620, [SupportSkill("Manifest Gun")] Skill621, [SupportSkill("Manifest Bell")] Skill622, [HitSkill("Sword of Judgment")] Skill623, [GunSkill("Capital Punishment")] Skill624, [SupportSkill("Manifest Book")] Skill625, [AlmightySkill("Distorted Lust")] Skill626, [AlmightySkill("Gospel")] Skill627, [AlmightySkill("Distorted Wrath")] Skill628, [AlmightySkill("Distorted Vanity")] Skill629, [SupportSkill("Song of Salvation")] Skill630, [AlmightySkill("Wrath of God")] Skill631, [AlmightySkill("Distorted Gluttony")] Skill632, [AlmightySkill("Distorted Envy")] Skill633, [SupportSkill("Song of Placation")] Skill634, [SupportSkill("Divine Apex")] Skill635, [AlmightySkill("Rays of Control")] Skill636, [AlmightySkill("Distorted Avarice")] Skill637, [HealSkill("Will of the People")] Skill638, [AlmightySkill("Rays of Control")] Skill639, [SpecialSkill("Moral Support")] Skill640, [SpecialSkill("Active Support")] Skill641, [SpecialSkill("Mental Hack")] Skill642, [SpecialSkill("Emergency Shift")] Skill643, [SpecialSkill("Final Guard")] Skill644, [SpecialSkill("Position Hack")] Skill645, [SpecialSkill("High Analyze")] Skill646, [SpecialSkill("Treasure Skimmer")] Skill647, [SpecialSkill("Subrecover HP EX")] Skill648, [SpecialSkill("Subrecover SP EX")] Skill649, [Unused] Skill650, [Unused] Skill651, [Unused] Skill652, [Unused] Skill653, [SupportSkill("Big Bang Order")] Skill654, [AlmightySkill("Roulette Time")] Skill655, [AlmightySkill("Trip-Upper")] Skill656, [AlmightySkill("Lust Sphere")] Skill657, [AlmightySkill("Down Shot 2")] Skill658, [AlmightySkill("Down Shot 3")] Skill659, [AlmightySkill("Down Shot 4")] Skill660, [GunSkill("Electro Attack")] Skill661, [AlmightySkill("Sinful Shell")] Skill662, [AlmightySkill("Follow Black")] Skill663, [Unused] Skill664, [AlmightySkill("Madara-Megido")] Skill665, [HealSkill("Curry Raku")] Skill666, [HealSkill("Enemy Benefit")] Skill667, [HealSkill("Diarahan")] Skill668, [HealSkill("Curry Suku")] Skill669, [SupportSkill("Decoy Ball")] Skill670, [SupportSkill("Super Decoy Ball")] Skill671, [HitSkill("Metabolic Wave")] Skill672, [AlmightySkill("Laevateinn")] Skill673, [SupportSkill("Desperation")] Skill674, [SupportSkill("Call of Chaos")] Skill675, [AlmightySkill("Big Bang Challenge")] Skill676, [AlmightySkill("Grail Light 2")] Skill677, [AlmightySkill("Megidola")] Skill678, [PoisonSkill("Rage Transmission")] Skill679, [HitSkill("Hundred Slaps")] Skill680, [AlmightySkill("Distorted Pride")] Skill681, [AlmightySkill("Divine Punishment")] Skill682, [HealSkill("Will of the People")] Skill683, [HitSkill("Wind Cutter")] Skill684, [GunSkill("Shoot Up")] Skill685, [HitSkill("Executive Punch")] Skill686, [AlmightySkill("Megidolaon")] Skill687, [HitSkill("Vorpal Blade")] Skill688, [AlmightySkill("Megidolaon")] Skill689, [HealSkill("Big Bang Burger")] Skill690, [HealSkill("Earth Burger")] Skill691, [HealSkill("Mars Burger")] Skill692, [HealSkill("Moon Burger")] Skill693, [HealSkill("Saturn Burger")] Skill694, [AlmightySkill("Justine Attack")] Skill695, [AlmightySkill("Caroline Attack")] Skill696, [HealSkill("Curry Makara")] Skill697, [HealSkill("Curry Tetra")] Skill698, [HealSkill("Curry Endure")] Skill699, [HealSkill("Curry Charge")] Skill700, [HealSkill("Curry Concentrate")] Skill701, [HealSkill("Curry Heat Riser")] Skill702, [Unused] Skill703, [HealSkill("Cadenza")] Skill704, [HitSkill("Cross Slash")] Skill705, [AlmightySkill("Door of Hades")] Skill706, [DeathSkill("Magatsu Mandala")] Skill707, [BlessSkill("Shining Arrows")] Skill708, [HitSkill("Beast Weaver")] Skill709, [FireSkill("Titanomachia")] Skill710, [DeathSkill("Abyssal Wings")] Skill711, [HealSkill("Oratario")] Skill712, [Unused] Skill713, [Unused] Skill714, [Unused] Skill715, [Unused] Skill716, [Unused] Skill717, [Unused] Skill718, [Unused] Skill719, [AlmightySkill("Megido")] Skill720, [AlmightySkill("Megidola")] Skill721, [AlmightySkill("Megidolaon")] Skill722, [HitSkill("Slam")] Skill723, [AlmightySkill("Megaton Raid")] Skill724, [AlmightySkill("One-shot Kill")] Skill725, [AlmightySkill("Inferno")] Skill726, [AlmightySkill("Diamond Dust")] Skill727, [Unused] Skill728, [Unused] Skill729, [HealSkill("Curry 1")] Skill730, [HealSkill("Curry 2")] Skill731, [HealSkill("Reviv-All")] Skill732, [HealSkill("Reviv-All Z")] Skill733, [Unused] Skill734, [Unused] Skill735, [SpecialSkill("Wild Talk")] Skill736, [SpecialSkill("Baton Pass")] Skill737, [SpecialSkill("Punk Talk")] Skill738, [SpecialSkill("Pickpocket")] Skill739, [SpecialSkill("Harisen Recovery")] Skill740, [SpecialSkill("Protect")] Skill741, [SpecialSkill("Girl Talk")] Skill742, [SpecialSkill("Crocodile Tears")] Skill743, [SpecialSkill("Sexy Technique")] Skill744, [SpecialSkill("Detective Talk")] Skill745, [SpecialSkill("Artist Talk")] Skill746, [SpecialSkill("Negotiating")] Skill747, [SpecialSkill("Fundraising")] Skill748, [SpecialSkill("Manipulation")] Skill749, [SpecialSkill("Mind Control")] Skill750, [SpecialSkill("Charisma Speech")] Skill751, [SpecialSkill("Brainiac Talk")] Skill752, [SpecialSkill("Sabaki")] Skill753, [SpecialSkill("Kakoi Kuzushi ")] Skill754, [SpecialSkill("Touryou")] Skill755, [SpecialSkill("Togo System")] Skill756, [SpecialSkill("Bullet Hail")] Skill757, [SpecialSkill("Warning Shot")] Skill758, [SpecialSkill("Celeb Talk")] Skill759, [SpecialSkill("Kitty Talk")] Skill760, [Unused] Skill761, [Unused] Skill762, [Unused] Skill763, [Unused] Skill764, [Unused] Skill765, [Unused] Skill766, [Unused] Skill767, [HitSkill("Brave Blade")] Skill768, [HitSkill("Assault Dive")] Skill769, [HitSkill("Terror Claw")] Skill770, [IceSkill("Bufudyne")] Skill771, [PsychoSkill("Psiodyne")] Skill772, [ThunderSkill("Mazionga")] Skill773, [ThunderSkill("Maziodyne")] Skill774, [DeathSkill("Maeiga")] Skill775, [DeathSkill("Maeigaon")] Skill776, [Unused] Skill777, [Unused] Skill778, [Unused] Skill779, [Unused] Skill780, [Unused] Skill781, [Unused] Skill782, [Unused] Skill783, [Unused] Skill784, [Unused] Skill785, [Unused] Skill786, [Unused] Skill787, [Unused] Skill788, [Unused] Skill789, [Unused] Skill790, [Unused] Skill791, [Unused] Skill792, [Unused] Skill793, [Unused] Skill794, [Unused] Skill795, [Unused] Skill796, [Unused] Skill797, [Unused] Skill798, [Unused] Skill799, [AutoSkill("Counter")] Skill800, [AutoSkill("Counterstrike")] Skill801, [AutoSkill("High Counter")] Skill802, [Unused] Skill803, [Unused] Skill804, [AutoSkill("Endure")] Skill805, [AutoSkill("Enduring Soul")] Skill806, [AutoSkill("BLANK")] Skill807, [AutoSkill("BLANK")] Skill808, [AutoSkill("Survival Trick")] Skill809, [AutoSkill("Dodge Fire")] Skill810, [AutoSkill("Evade Fire")] Skill811, [AutoSkill("Dodge Ice")] Skill812, [AutoSkill("Evade Ice")] Skill813, [AutoSkill("Dodge Wind")] Skill814, [AutoSkill("Evade Wind")] Skill815, [AutoSkill("Dodge Elec")] Skill816, [AutoSkill("Evade Elec")] Skill817, [AutoSkill("Dodge Phys")] Skill818, [AutoSkill("Evade Phys")] Skill819, [AutoSkill("Fire Boost")] Skill820, [AutoSkill("Fire Amp")] Skill821, [AutoSkill("Ice Boost")] Skill822, [AutoSkill("Ice Amp")] Skill823, [AutoSkill("Wind Boost")] Skill824, [AutoSkill("Wind Amp")] Skill825, [AutoSkill("Elec Boost")] Skill826, [AutoSkill("Elec Amp")] Skill827, [AutoSkill("Angelic Grace")] Skill828, [AutoSkill("Divine Grace")] Skill829, [AutoSkill("Regenerate 1")] Skill830, [AutoSkill("Regenerate 2")] Skill831, [AutoSkill("Regenerate 3")] Skill832, [AutoSkill("Dodge Bless")] Skill833, [AutoSkill("Dodge Curse")] Skill834, [AutoSkill("Invigorate 1")] Skill835, [AutoSkill("Invigorate 2")] Skill836, [AutoSkill("Invigorate 3")] Skill837, [AutoSkill("Evade Bless")] Skill838, [AutoSkill("Evade Curse")] Skill839, [AutoSkill("Attack Master")] Skill840, [AutoSkill("Auto-Mataru")] Skill841, [Unused] Skill842, [AutoSkill("Defense Master")] Skill843, [AutoSkill("Auto-Maraku")] Skill844, [Unused] Skill845, [AutoSkill("Speed Master")] Skill846, [AutoSkill("Auto-Masuku")] Skill847, [Unused] Skill848, [Unused] Skill849, [AutoSkill("Fast Heal")] Skill850, [AutoSkill("Insta-Heal")] Skill851, [AutoSkill("Arms Master")] Skill852, [AutoSkill("Spell Master")] Skill853, [Unused] Skill854, [AutoSkill("Sharp Student")] Skill855, [AutoSkill("Apt Pupil")] Skill856, [AutoSkill("Ali Dance")] Skill857, [AutoSkill("Firm Stance")] Skill858, [Unused] Skill859, [AutoSkill("Life Aid")] Skill860, [AutoSkill("Victory Cry")] Skill861, [AutoSkill("Growth 1")] Skill862, [AutoSkill("Growth 2")] Skill863, [AutoSkill("Growth 3")] Skill864, [AutoSkill("Unshaken Will")] Skill865, [AutoSkill("BLANK")] Skill866, [AutoSkill("Baton Pass")] Skill867, [AutoSkill("Soul Touch")] Skill868, [AutoSkill("Kakoi Kuzushi")] Skill869, [AutoSkill("Resist Fire")] Skill870, [AutoSkill("Null Fire")] Skill871, [AutoSkill("Repel Fire")] Skill872, [AutoSkill("Drain Fire")] Skill873, [Unused] Skill874, [AutoSkill("Resist Ice")] Skill875, [AutoSkill("Null Ice")] Skill876, [AutoSkill("Repel Ice")] Skill877, [AutoSkill("Drain Ice")] Skill878, [Unused] Skill879, [AutoSkill("Resist Wind")] Skill880, [AutoSkill("Null Wind")] Skill881, [AutoSkill("Repel Wind")] Skill882, [AutoSkill("Drain Wind")] Skill883, [Unused] Skill884, [AutoSkill("Resist Elec")] Skill885, [AutoSkill("Null Elec")] Skill886, [AutoSkill("Repel Elec")] Skill887, [AutoSkill("Drain Elec")] Skill888, [Unused] Skill889, [AutoSkill("Resist Bless")] Skill890, [AutoSkill("Null Bless")] Skill891, [AutoSkill("Repel Bless")] Skill892, [AutoSkill("Drain Bless")] Skill893, [Unused] Skill894, [AutoSkill("Resist Curse")] Skill895, [AutoSkill("Null Curse")] Skill896, [AutoSkill("Repel Curse")] Skill897, [AutoSkill("Drain Curse")] Skill898, [Unused] Skill899, [AutoSkill("Resist Phys")] Skill900, [AutoSkill("Null Phys")] Skill901, [AutoSkill("Repel Phys")] Skill902, [AutoSkill("Drain Phys")] Skill903, [Unused] Skill904, [AutoSkill("Ailment Boost")] Skill905, [AutoSkill("Hama Boost")] Skill906, [AutoSkill("Mudo Boost")] Skill907, [Unused] Skill908, [Unused] Skill909, [AutoSkill("Dizzy Boost")] Skill910, [AutoSkill("Confuse Boost")] Skill911, [AutoSkill("Fear Boost")] Skill912, [AutoSkill("Forget Boost")] Skill913, [AutoSkill("Sleep Boost")] Skill914, [AutoSkill("Rage Boost")] Skill915, [AutoSkill("Despair Boost")] Skill916, [AutoSkill("BLANK")] Skill917, [AutoSkill("Brainwash Boost")] Skill918, [Unused] Skill919, [AutoSkill("Resist Dizzy")] Skill920, [AutoSkill("Resist Confuse")] Skill921, [AutoSkill("Resist Fear")] Skill922, [AutoSkill("Resist Forget")] Skill923, [AutoSkill("Resist Sleep")] Skill924, [AutoSkill("Resist Rage")] Skill925, [AutoSkill("Resist Despair")] Skill926, [AutoSkill("BLANK")] Skill927, [AutoSkill("Resist Brainwash")] Skill928, [Unused] Skill929, [AutoSkill("Null Dizzy")] Skill930, [AutoSkill("Null Confuse")] Skill931, [AutoSkill("Null Fear")] Skill932, [AutoSkill("Null Forget")] Skill933, [AutoSkill("Null Sleep")] Skill934, [AutoSkill("Null Rage")] Skill935, [AutoSkill("Null Despair")] Skill936, [AutoSkill("BLANK")] Skill937, [AutoSkill("Null Brainwash")] Skill938, [Unused] Skill939, [AutoSkill("Burn Boost")] Skill940, [AutoSkill("Freeze Boost")] Skill941, [AutoSkill("Shock Boost")] Skill942, [AutoSkill("BLANK")] Skill943, [AutoSkill("Fortified Moxy")] Skill944, [AutoSkill("Adverse Resolve")] Skill945, [AutoSkill("Last Stand")] Skill946, [AutoSkill("Heat Up")] Skill947, [Unused] Skill948, [AutoSkill("Touch n' Go")] Skill949, [AutoSkill("Climate Decorum")] Skill950, [AutoSkill("Ambient Aid")] Skill951, [AutoSkill("RESERVE")] Skill952, [AutoSkill("Snipe")] Skill953, [AutoSkill("Cripple")] Skill954, [AutoSkill("Trigger Happy")] Skill955, [AutoSkill("Resist Nuke")] Skill956, [AutoSkill("Null Nuke")] Skill957, [AutoSkill("Repel Nuke")] Skill958, [AutoSkill("Drain Nuke")] Skill959, [AutoSkill("RESERVE")] Skill960, [AutoSkill("Resist Psy")] Skill961, [AutoSkill("Null Psy")] Skill962, [AutoSkill("Repel Psy")] Skill963, [AutoSkill("Drain Psy")] Skill964, [AutoSkill("RESERVE")] Skill965, [AutoSkill("Nuke Boost")] Skill966, [AutoSkill("Nuke Amp")] Skill967, [AutoSkill("RESERVE")] Skill968, [AutoSkill("Psy Boost")] Skill969, [AutoSkill("Psy Amp")] Skill970, [AutoSkill("RESERVE")] Skill971, [AutoSkill("Dodge Nuke")] Skill972, [AutoSkill("Evade Nuke")] Skill973, [AutoSkill("RESERVE")] Skill974, [AutoSkill("Dodge Psy")] Skill975, [AutoSkill("Evade Psy")] Skill976, [AutoSkill("RESERVE")] Skill977, [AutoSkill("Bless Boost")] Skill978, [AutoSkill("Bless Amp")] Skill979, [AutoSkill("RESERVE")] Skill980, [AutoSkill("Curse Boost")] Skill981, [AutoSkill("Curse Amp")] Skill982, [AutoSkill("RESERVE")] Skill983, [AutoSkill("Magic Ability")] Skill984, [AutoSkill("Fortify Spirit")] Skill985, [AutoSkill("Almighty Boost")] Skill986, [AutoSkill("Almighty Amp")] Skill987, [AutoSkill("Zenith Defense")] Skill988, [AutoSkill("Soul Chain")] Skill989, [AutoSkill("Vanity Copy")] Skill990, [AutoSkill("Gluttonous Snuff")] Skill991, [AutoSkill("Sloth Defense")] Skill992, [Unused] Skill993, [Unused] Skill994, [Unused] Skill995, [Unused] Skill996, [Unused] Skill997, [Unused] Skill998, [Unused] Skill999, } } ================================================ FILE: KHSave.LibPersona5/Types/SkillRoyal.cs ================================================ using KHSave.Attributes; namespace KHSave.LibPersona5.Types { public enum SkillRoyal : short { [Skill("-")] Empty, [Unused] Skill1, [Unused] Skill2, [Unused] Skill3, [Unused] Skill4, [Unused] Skill5, [Unused] Skill6, [Unused] Skill7, [Unused] Skill8, [Unused] Skill9, [FireSkill("Agi")] Skill10, [FireSkill("Agilao")] Skill11, [FireSkill("Agidyne")] Skill12, [FireSkill("Maragi")] Skill13, [FireSkill("Maragion")] Skill14, [FireSkill("Maragidyne")] Skill15, [FireSkill("Agi")] Skill16, [FireSkill("Maragi")] Skill17, [FireSkill("Fire Ball")] Skill18, [SupportSkill("Raging Flames")] Skill19, [IceSkill("Bufu")] Skill20, [IceSkill("Bufula")] Skill21, [IceSkill("Bufudyne")] Skill22, [IceSkill("Mabufu")] Skill23, [IceSkill("Mabufula")] Skill24, [IceSkill("Mabufudyne")] Skill25, [IceSkill("Bufu")] Skill26, [IceSkill("Mabufu")] Skill27, [IceSkill("Snow Ball")] Skill28, [AlmightySkill("Megidolaon")] Skill29, [WindSkill("Garu")] Skill30, [WindSkill("Garula")] Skill31, [WindSkill("Garudyne")] Skill32, [WindSkill("Magaru")] Skill33, [WindSkill("Magarula")] Skill34, [WindSkill("Magarudyne")] Skill35, [WindSkill("Garu")] Skill36, [WindSkill("Gale Ball")] Skill37, [BlessSkill("Bless Ball")] Skill38, [DeathSkill("Curve Ball")] Skill39, [ThunderSkill("Zio")] Skill40, [ThunderSkill("Zionga")] Skill41, [ThunderSkill("Ziodyne")] Skill42, [ThunderSkill("Mazio")] Skill43, [ThunderSkill("Mazionga")] Skill44, [ThunderSkill("Maziodyne")] Skill45, [ThunderSkill("Zio")] Skill46, [ThunderSkill("Mazio")] Skill47, [ThunderSkill("Volt Ball")] Skill48, [HitSkill("Make It Rain")] Skill49, [BlessSkill("Hama")] Skill50, [BlessSkill("Hamaon")] Skill51, [BlessSkill("Mahama")] Skill52, [BlessSkill("Mahamaon")] Skill53, [BlessSkill("Kouha")] Skill54, [BlessSkill("Kouga")] Skill55, [BlessSkill("Kougaon")] Skill56, [BlessSkill("Makouha")] Skill57, [BlessSkill("Makouga")] Skill58, [BlessSkill("Makougaon")] Skill59, [DeathSkill("Mudo")] Skill60, [DeathSkill("Mudoon")] Skill61, [DeathSkill("Mamudo")] Skill62, [DeathSkill("Mamudoon")] Skill63, [DeathSkill("Eiha")] Skill64, [DeathSkill("Eiga")] Skill65, [DeathSkill("Eigaon")] Skill66, [DeathSkill("Maeiha")] Skill67, [DeathSkill("Maeiga")] Skill68, [DeathSkill("Maeigaon")] Skill69, [AlmightySkill("Megido")] Skill70, [AlmightySkill("Megidola")] Skill71, [AlmightySkill("Megidolaon")] Skill72, [NuclearSkill("Frei")] Skill73, [NuclearSkill("Freila")] Skill74, [NuclearSkill("Freidyne")] Skill75, [NuclearSkill("Mafrei")] Skill76, [NuclearSkill("Mafreila")] Skill77, [NuclearSkill("Mafreidyne")] Skill78, [NuclearSkill("BL79ANK")] Skill79, [PoisonSkill("Dazzler")] Skill80, [PoisonSkill("Nocturnal Flash")] Skill81, [PoisonSkill("Pulinpa")] Skill82, [PoisonSkill("Tentarafoo")] Skill83, [PoisonSkill("Evil Touch")] Skill84, [PoisonSkill("Evil Smile")] Skill85, [PoisonSkill("Makajama")] Skill86, [PoisonSkill("Makajamaon")] Skill87, [PoisonSkill("Famine's Breath")] Skill88, [PoisonSkill("Famine's Scream")] Skill89, [PoisonSkill("Dormina")] Skill90, [PoisonSkill("Lullaby")] Skill91, [PoisonSkill("Taunt")] Skill92, [PoisonSkill("Wage War")] Skill93, [PoisonSkill("Ominous Words")] Skill94, [PoisonSkill("Abysmal Surge")] Skill95, [PoisonSkill("Marin Karin")] Skill96, [PoisonSkill("Brain Jack")] Skill97, [AlmightySkill("Trapped Rat")] Skill98, [PsychoSkill("Psy Ball")] Skill99, [AlmightySkill("Self-destruct")] Skill100, [AlmightySkill("Self-destruct")] Skill101, [AlmightySkill("Self-destruct")] Skill102, [AlmightySkill("Life Drain")] Skill103, [AlmightySkill("Spirit Drain")] Skill104, [AlmightySkill("Life Leech")] Skill105, [AlmightySkill("Spirit Leech")] Skill106, [AlmightySkill("Spirit Drain")] Skill107, [SpecialSkill("##108")] Skill108, [AutoSkill("##109")] Skill109, [AlmightySkill("Foul Breath")] Skill110, [AlmightySkill("Stagnant Air")] Skill111, [AlmightySkill("Reverse Rub")] Skill112, [AlmightySkill("Ghastly Wail")] Skill113, [AlmightySkill("NOT USED")] Skill114, [AlmightySkill("Drain")] Skill115, [AlmightySkill("Megidola")] Skill116, [AlmightySkill("Launch")] Skill117, [AlmightySkill("##118")] Skill118, [HitSkill("Drift")] Skill119, [FireSkill("Inferno")] Skill120, [FireSkill("Blazing Hell")] Skill121, [AutoSkill("Low Burn")] Skill122, [AutoSkill("Mid Burn")] Skill123, [AutoSkill("High Burn")] Skill124, [AutoSkill("Low Freeze")] Skill125, [AutoSkill("Mid Freeze")] Skill126, [AutoSkill("High Freeze")] Skill127, [AutoSkill("Low Shock")] Skill128, [AutoSkill("Mid Shock")] Skill129, [IceSkill("Diamond Dust")] Skill130, [IceSkill("Ice Age")] Skill131, [AutoSkill("High Shock")] Skill132, [AutoSkill("Low Dizzy")] Skill133, [AutoSkill("Mid Dizzy")] Skill134, [AutoSkill("High Dizzy")] Skill135, [AutoSkill("Low Confuse")] Skill136, [AutoSkill("Mid Confuse")] Skill137, [AutoSkill("High Confuse")] Skill138, [AutoSkill("Low Fear")] Skill139, [WindSkill("Panta Rhei")] Skill140, [WindSkill("Vacuum Wave")] Skill141, [AutoSkill("Mid Fear")] Skill142, [AutoSkill("High Fear")] Skill143, [AutoSkill("Low Forget")] Skill144, [AutoSkill("Mid Forget")] Skill145, [AutoSkill("High Forget")] Skill146, [AutoSkill("Low Brainwash")] Skill147, [AutoSkill("Mid Brainwash")] Skill148, [AutoSkill("High Brainwash")] Skill149, [ThunderSkill("Thunder Reign")] Skill150, [ThunderSkill("Wild Thunder")] Skill151, [AutoSkill("Low Sleep")] Skill152, [AutoSkill("Mid Sleep")] Skill153, [AutoSkill("High Sleep")] Skill154, [AutoSkill("Low Rage")] Skill155, [AutoSkill("Mid Rage")] Skill156, [AutoSkill("High Rage")] Skill157, [AutoSkill("Low Despair")] Skill158, [AutoSkill("Mid Despair")] Skill159, [BlessSkill("Divine Judgment")] Skill160, [BlessSkill("Samsara")] Skill161, [AutoSkill("High Despair")] Skill162, [AutoSkill("Low All Ail")] Skill163, [AutoSkill("Mid All Ail")] Skill164, [AutoSkill("High All Ail")] Skill165, [AlmightySkill("Adam Skill 1")] Skill166, [AlmightySkill("Revitalize Soul")] Skill167, [AlmightySkill("Grand Palm")] Skill168, [AlmightySkill("Full Force")] Skill169, [DeathSkill("Demonic Decree")] Skill170, [DeathSkill("Die For Me!")] Skill171, [SpecialSkill("Support Plus 3")] Skill172, [SpecialSkill("Support Plus 2")] Skill173, [SpecialSkill("Support Plus 1")] Skill174, [SpecialSkill("Support Rate Up")] Skill175, [NuclearSkill("Atomic Flare")] Skill176, [NuclearSkill("Cosmic Flare")] Skill177, [HealSkill("Mindfulness")] Skill178, [HealSkill("Wakefulness")] Skill179, [AlmightySkill("Black Viper")] Skill180, [AlmightySkill("Morning Star")] Skill181, [AlmightySkill("Abyssal Eye")] Skill182, [HealSkill("Champion's Cup")] Skill183, [SupportSkill("Bleeding Dry Brush")] Skill184, [SupportSkill("Vault Guardian")] Skill185, [SupportSkill("Wings of Wisdom")] Skill186, [SupportSkill("President's Insight")] Skill187, [SupportSkill("Gambler's Foresight")] Skill188, [SupportSkill("Tyrant's Will")] Skill189, [PsychoSkill("Psi")] Skill190, [PsychoSkill("Psio")] Skill191, [PsychoSkill("Psiodyne")] Skill192, [PsychoSkill("Mapsi")] Skill193, [PsychoSkill("Mapsio")] Skill194, [PsychoSkill("Mapsiodyne")] Skill195, [SupportSkill("Attack Position")] Skill196, [PsychoSkill("Psycho Force")] Skill197, [PsychoSkill("Psycho Blast")] Skill198, [AlmightySkill("Universal Power")] Skill199, [HitSkill("Lunge")] Skill200, [HitSkill("Assault Dive")] Skill201, [HitSkill("Megaton Raid")] Skill202, [HitSkill("God's Hand")] Skill203, [HitSkill("Lunge")] Skill204, [HitSkill("Lucky Punch")] Skill205, [HitSkill("Miracle Punch")] Skill206, [HitSkill("Kill Rush")] Skill207, [HitSkill("Gatling Blow")] Skill208, [AlmightySkill("Piercing Strike")] Skill209, [HitSkill("Cleave")] Skill210, [HitSkill("Giant Slice")] Skill211, [HitSkill("Brave Blade")] Skill212, [HitSkill("Sword Dance")] Skill213, [HealSkill("Holy Benevolence")] Skill214, [HitSkill("Hassou Tobi")] Skill215, [HitSkill("Ayamur")] Skill216, [HitSkill("Death Scythe")] Skill217, [SupportSkill("UNUSED")] Skill218, [SpecialSkill("NOT USED")] Skill219, [HitSkill("Cornered Fang")] Skill220, [HitSkill("Rising Slash")] Skill221, [HitSkill("Deadly Fury")] Skill222, [NuclearSkill("Nuclear Crush")] Skill223, [GunSkill("Snap")] Skill224, [GunSkill("Triple Down")] Skill225, [GunSkill("One-shot Kill")] Skill226, [GunSkill("Riot Gun")] Skill227, [GunSkill("Double Shot")] Skill228, [AlmightySkill("Primordial Light")] Skill229, [HitSkill("Vajra Blast")] Skill230, [HitSkill("Vorpal Blade")] Skill231, [SupportSkill("NOT USED")] Skill232, [SupportSkill("NOT USED")] Skill233, [SupportSkill("NOT USED")] Skill234, [HitSkill("Vicious Strike")] Skill235, [HitSkill("Heat Wave")] Skill236, [HitSkill("Gigantomachia")] Skill237, [PsychoSkill("Swirling Psychokinesis")] Skill238, [BlessSkill("Tyrant's Purge")] Skill239, [SupportSkill("Mass Ball")] Skill240, [HitSkill("Rampage")] Skill241, [HitSkill("Swift Strike")] Skill242, [HitSkill("Deathbound")] Skill243, [HitSkill("Agneyastra")] Skill244, [SupportSkill("NOT USED")] Skill245, [HealSkill("Regeneration")] Skill246, [HitSkill("Rising Slash")] Skill247, [HitSkill("Deadly Fury")] Skill248, [BlessSkill("Tyrant's Judgement")] Skill249, [HitSkill("Double Fangs")] Skill250, [HitSkill("Power Slash")] Skill251, [SupportSkill("Shapeless Guard")] Skill252, [HitSkill("Tempest Slash")] Skill253, [HitSkill("Myriad Slashes")] Skill254, [SupportSkill("Amplify Force")] Skill255, [SupportSkill("Amplify Magic")] Skill256, [HitSkill("Raining Seeds")] Skill257, [HealSkill("Energy Stream")] Skill258, [SupportSkill("Flow")] Skill259, [HitSkill("Sledgehammer")] Skill260, [HitSkill("Skull Cracker")] Skill261, [HitSkill("Terror Claw")] Skill262, [HitSkill("Headbutt")] Skill263, [HitSkill("Stomach Blow")] Skill264, [GunSkill("Dream Needle")] Skill265, [HitSkill("Hysterical Slap")] Skill266, [HitSkill("Negative Pile")] Skill267, [HitSkill("Brain Shake")] Skill268, [AlmightySkill("Attack")] Skill269, [HitSkill("Flash Bomb")] Skill270, [HitSkill("Mind Slice")] Skill271, [HitSkill("Bloodbath")] Skill272, [HitSkill("Memory Blow")] Skill273, [HitSkill("Insatiable Strike")] Skill274, [HitSkill("Dormin Rush")] Skill275, [HitSkill("Oni-Kagura")] Skill276, [HitSkill("Bad Beat")] Skill277, [HitSkill("Brain Buster")] Skill278, [HitSkill("Laevateinn")] Skill279, [GunSkill("Handgun")] Skill280, [GunSkill("Shotgun")] Skill281, [GunSkill("Slingshot")] Skill282, [GunSkill("Machine Gun")] Skill283, [GunSkill("Assault Rifle")] Skill284, [GunSkill("Revolver")] Skill285, [GunSkill("Grenade Launcher")] Skill286, [GunSkill("Laser Gun")] Skill287, [GunSkill("Antique Rifle")] Skill288, [SupportSkill("Tyrant Stance")] Skill289, [SupportSkill("Fighting Spirit")] Skill290, [HitSkill("Miracle Rush")] Skill291, [SupportSkill("Checkmate")] Skill292, [SupportSkill("Hyakka Ryouran")] Skill293, [SupportSkill("High Energy")] Skill294, [SpecialSkill("Ultimate Support")] Skill295, [SupportSkill("Life Wall")] Skill296, [AlmightySkill("Rebellion Blade")] Skill297, [HitSkill("Masquerade")] Skill298, [AlmightySkill("Guiding Tendril")] Skill299, [HealSkill("Dia")] Skill300, [HealSkill("Diarama")] Skill301, [HealSkill("Diarahan")] Skill302, [SupportSkill("Brave Step")] Skill303, [AlmightySkill("Maruki Punch")] Skill304, [HealSkill("Media")] Skill305, [HealSkill("Mediarama")] Skill306, [HealSkill("Mediarahan")] Skill307, [GunSkill("Brutal Impact")] Skill308, [DeathSkill("Cursed Strike")] Skill309, [HealSkill("Recarm")] Skill310, [HealSkill("Samarecarm")] Skill311, [HealSkill("Recarmdra")] Skill312, [SpecialSkill("Sleuthing Instinct")] Skill313, [SpecialSkill("Sleuthing Mastery")] Skill314, [HealSkill("Amrita Drop")] Skill315, [HealSkill("Amrita Shower")] Skill316, [BlessSkill("Holy Strike")] Skill317, [HealSkill("Salvation")] Skill318, [NuclearSkill("Nuclear Strike")] Skill319, [PsychoSkill("Psychokinesis Strike")] Skill320, [SupportSkill("Taunting Aura")] Skill321, [WindSkill("Storm Punishment")] Skill322, [SupportSkill("Concealment")] Skill323, [ThunderSkill("Lightning Punishment")] Skill324, [HealSkill("Patra")] Skill325, [IceSkill("Puishing Hail")] Skill326, [HealSkill("Energy Shower")] Skill327, [HealSkill("Energy Drop")] Skill328, [HealSkill("Baisudi")] Skill329, [HealSkill("Me Patra")] Skill330, [HealSkill("Mabaisudi")] Skill331, [SupportSkill("Charge Ball")] Skill332, [SupportSkill("Concentrated Ball")] Skill333, [FireSkill("Inferno Punishment")] Skill334, [SupportSkill("Tarukaja")] Skill335, [SupportSkill("Rakukaja")] Skill336, [SupportSkill("Sukukaja")] Skill337, [SupportSkill("Heat Riser")] Skill338, [GunSkill("Gunfire Punishment")] Skill339, [SupportSkill("Matarukaja")] Skill340, [SupportSkill("Marakukaja")] Skill341, [SupportSkill("Masukukaja")] Skill342, [SupportSkill("Thermopylae")] Skill343, [HitSkill("Guillotine Punishment")] Skill344, [SupportSkill("Tarunda")] Skill345, [SupportSkill("Rakunda")] Skill346, [SupportSkill("Sukunda")] Skill347, [SupportSkill("Debilitate")] Skill348, [SpecialSkill("Quadruple Summon")] Skill349, [SupportSkill("Matarunda")] Skill350, [SupportSkill("Marakunda")] Skill351, [SupportSkill("Masukunda")] Skill352, [SupportSkill("Analysis")] Skill353, [SupportSkill("Analysis")] Skill354, [SupportSkill("Dekunda")] Skill355, [SupportSkill("Dekaja")] Skill356, [AlmightySkill("Explosion!")] Skill357, [AlmightySkill("Explosion!")] Skill358, [HitSkill("Spginx Swipe")] Skill359, [SupportSkill("Charge")] Skill360, [SupportSkill("Concentrate")] Skill361, [HitSkill("Nose Dive")] Skill362, [SupportSkill("Kill Reward Up")] Skill363, [SupportSkill("Guard Reward Up")] Skill364, [SupportSkill("Rebellion")] Skill365, [SupportSkill("Revolution")] Skill366, [AlmightySkill("Make It Rain")] Skill367, [SpecialSkill("Special Guards")] Skill368, [SupportSkill("Fake Artist's Grace")] Skill369, [SupportSkill("Tetrakarn")] Skill370, [SupportSkill("Makarakarn")] Skill371, [SupportSkill("Tetraja")] Skill372, [SupportSkill("Taste of Wrath")] Skill373, [SpecialSkill("True Fake")] Skill374, [SupportSkill("Tetra Break")] Skill375, [SupportSkill("Makara Break")] Skill376, [AlmightySkill("Killshot of love")] Skill377, [AlmightySkill("NOT USED")] Skill378, [AlmightySkill("NOT USED")] Skill379, [SupportSkill("Fire Wall")] Skill380, [SupportSkill("Ice Wall")] Skill381, [SupportSkill("Elec Wall")] Skill382, [SupportSkill("Wind Wall")] Skill383, [Unused] Skill384, [SupportSkill("Fire Break")] Skill385, [SupportSkill("Ice Break")] Skill386, [SupportSkill("Wind Break")] Skill387, [SupportSkill("Elec Break")] Skill388, [Unused] Skill389, [SupportSkill("Trafuri")] Skill390, [SupportSkill("Traesto")] Skill391, [SupportSkill("Active Barrier")] Skill392, [SupportSkill("Nuke Wall")] Skill393, [SupportSkill("Psy Wall")] Skill394, [SupportSkill("Nuke Break")] Skill395, [SupportSkill("Psy Break")] Skill396, [Unused] Skill397, [Unused] Skill398, [SupportSkill("Flow")] Skill399, [AlmightySkill("All-out Lv 1")] Skill400, [AlmightySkill("All-out Lv 2")] Skill401, [AlmightySkill("All-out Lv 3")] Skill402, [SupportSkill("Emergency Escape")] Skill403, [Skill("Attack")] Skill404, [AlmightySkill("Down Shot")] Skill405, [SpecialSkill("Summon")] Skill406, [SpecialSkill("Call for Backup")] Skill407, [Unused] Skill408, [SpecialSkill("Barrage")] Skill409, [AlmightySkill("Follow Crush")] Skill410, [AlmightySkill("Follow Claw")] Skill411, [AlmightySkill("Follow Whip")] Skill412, [AlmightySkill("Follow Blade")] Skill413, [AlmightySkill("Follow Knuckle")] Skill414, [AlmightySkill("Follow Axe")] Skill415, [AlmightySkill("Follow Saber")] Skill416, [SpecialSkill("Dispose Item")] Skill417, [SpecialSkill("Heal Enemy")] Skill418, [AlmightySkill("Death (Despair)")] Skill419, [AlmightySkill("Ally1 Follow-Up")] Skill420, [AlmightySkill("Ally2 Follow-Up")] Skill421, [AlmightySkill("Ally3 Follow-Up")] Skill422, [AlmightySkill("Ally4 Follow-Up")] Skill423, [AlmightySkill("Ally5 Follow-Up")] Skill424, [AlmightySkill("Ally6 Follow-Up")] Skill425, [AlmightySkill("Ally7 Follow-Up")] Skill426, [SpecialSkill("Power Up Enemy")] Skill427, [SpecialSkill("Power Up Enemy")] Skill428, [SpecialSkill("Power Up Enemy")] Skill429, [SupportSkill("Steal Info")] Skill430, [SpecialSkill("Sup Matarukaja")] Skill431, [SpecialSkill("Sup Marakukaja")] Skill432, [SpecialSkill("Sup Masukukaja")] Skill433, [SpecialSkill("Sup All Kaja")] Skill434, [SpecialSkill("Sup Charge")] Skill435, [SpecialSkill("Sup HP +30%")] Skill436, [SpecialSkill("Sup SP +10%")] Skill437, [SpecialSkill("Sup Escape Route")] Skill438, [SpecialSkill("Sup Third Eye")] Skill439, [SpecialSkill("Subrecover HP")] Skill440, [SpecialSkill("Subrecover SP")] Skill441, [SpecialSkill("Analysis")] Skill442, [SpecialSkill("Deep Analysis")] Skill443, [SpecialSkill("Full Analysis")] Skill444, [AlmightySkill("All-Out Attack")] Skill445, [WindSkill("Dust Flurry")] Skill446, [HitSkill("Tongue Whip")] Skill447, [HitSkill("Whip Strike")] Skill448, [SupportSkill("Lustful Slurp")] Skill449, [HealSkill("Libido Boost")] Skill450, [HitSkill("Golden Knife")] Skill451, [HitSkill("Lick")] Skill452, [AlmightySkill("Gold Medal Spike")] Skill453, [HitSkill("Volleyball Assault")] Skill454, [WindSkill("Maelstrom")] Skill455, [FireSkill("Flame Dance")] Skill456, [IceSkill("Silent Snowscape")] Skill457, [ThunderSkill("Thunderclap")] Skill458, [DeathSkill("Maeiga")] Skill459, [PoisonSkill("Hunger All")] Skill460, [GunSkill("Ocular Vulcan")] Skill461, [FireSkill("Missile Party")] Skill462, [PoisonSkill("Fear Gas")] Skill463, [SpecialSkill("Super VIP Form")] Skill464, [AlmightySkill("March of the Piggy")] Skill465, [HitSkill("Sphinx Swipe")] Skill466, [WindSkill("Wing Blast")] Skill467, [SpecialSkill("Rapid Ascent")] Skill468, [HitSkill("Sphinx Dive")] Skill469, [AlmightySkill("Dreadful Scream")] Skill470, [HitSkill("Bite")] Skill471, [SupportSkill("Restore")] Skill472, [AlmightySkill("The Artist's Grace")] Skill473, [SpecialSkill("Work Order")] Skill474, [SpecialSkill("Sacrifice Order")] Skill475, [AlmightySkill("Selfless Devotion")] Skill476, [AlmightySkill("Penalty")] Skill477, [HitSkill("Coin Attack")] Skill478, [HitSkill("Severing Slash")] Skill479, [GunSkill("Gatling Gun")] Skill480, [AlmightySkill("Berserker Dance")] Skill481, [AlmightySkill("Roulette: HP")] Skill482, [AlmightySkill("Roulette: SP")] Skill483, [SpecialSkill("Roulette: Money")] Skill484, [SupportSkill("Roulette: Aid 1")] Skill485, [SupportSkill("Roulette: Aid 2")] Skill486, [SupportSkill("Roulette: Aid 3")] Skill487, [HitSkill("Beast King's Wrath")] Skill488, [SupportSkill("Hunting Stance")] Skill489, [AlmightySkill("Arm of Destruction")] Skill490, [SupportSkill("Gryphon's Breath")] Skill491, [AlmightySkill("Royal Wing Beam")] Skill492, [AlmightySkill("Cannon Fire")] Skill493, [AlmightySkill("Cannon Barrage")] Skill494, [SupportSkill("Unholy Convergence")] Skill495, [AlmightySkill("Pyramid Blast")] Skill496, [HitSkill("Tyrant's Fist")] Skill497, [SupportSkill("Tyrant's Glare")] Skill498, [AlmightySkill("Tyrant's Wave")] Skill499, [HealSkill("Fig Seed")] Skill500, [HealSkill("Medicine")] Skill501, [HealSkill("Ointment")] Skill502, [HealSkill("Antibiotic Gel")] Skill503, [HealSkill("Life Stone")] Skill504, [HealSkill("Bead")] Skill505, [HealSkill("Value Medicine")] Skill506, [HealSkill("Medical Kit")] Skill507, [HealSkill("Maka Leaf")] Skill508, [HealSkill("Bead Chain")] Skill509, [HealSkill("Soul Drop")] Skill510, [HealSkill("Snuff Soul")] Skill511, [HealSkill("Chewing Soul")] Skill512, [HealSkill("Soul Food")] Skill513, [HealSkill("Revival Bead")] Skill514, [HealSkill("Balm of Life")] Skill515, [HealSkill("Royel Jelly")] Skill516, [HealSkill("Organic Herb")] Skill517, [HealSkill("Disclose")] Skill518, [HealSkill("Tranquilizer")] Skill519, [HealSkill("Kopi Luwak")] Skill520, [SupportSkill("Goho-M")] Skill521, [SupportSkill("Vanish Ball")] Skill522, [HealSkill("Soma")] Skill523, [HealSkill("Amrita Soda")] Skill524, [HealSkill("Hiranya")] Skill525, [HealSkill("Muscle Drink")] Skill526, [HealSkill("Odd Morsel")] Skill527, [HealSkill("Rancid Gravy")] Skill528, [HealSkill("Plume of Dusk")] Skill529, [SupportSkill("Magic Mirror")] Skill530, [SupportSkill("Physical Mirror")] Skill531, [SupportSkill("Universe Ring")] Skill532, [SupportSkill("Sleipnir")] Skill533, [SupportSkill("Obsidian Mirror")] Skill534, [SupportSkill("Purifying Water")] Skill535, [SupportSkill("Purifying Salt")] Skill536, [FireSkill("Firecracker")] Skill537, [FireSkill("San-zun Tama")] Skill538, [IceSkill("Ice Cube")] Skill539, [IceSkill("Dry Ice")] Skill540, [WindSkill("Pinwheel")] Skill541, [WindSkill("Yashichi")] Skill542, [ThunderSkill("Ball Lightning")] Skill543, [ThunderSkill("Tesla Coil")] Skill544, [AlmightySkill("Smart Bomb")] Skill545, [BlessSkill("Segami Rice")] Skill546, [DeathSkill("Curse Paper")] Skill547, [FireSkill("Flame Magatama")] Skill548, [WindSkill("Wind Magatama")] Skill549, [IceSkill("Freeze Magatama")] Skill550, [ThunderSkill("Bolt Magatama")] Skill551, [HealSkill("Homunculus")] Skill552, [HealSkill("Removal Potion")] Skill553, [BlessSkill("Kouga Ball")] Skill554, [BlessSkill("Makouha Ball")] Skill555, [DeathSkill("Eiga Ball")] Skill556, [DeathSkill("Maeiga Ball")] Skill557, [PsychoSkill("Psio Ball")] Skill558, [PsychoSkill("Mapsi Ball")] Skill559, [NuclearSkill("Freila Ball")] Skill560, [NuclearSkill("Mafrei Ball")] Skill561, [NuclearSkill("Nuke Magatama")] Skill562, [PsychoSkill("Psy Magatama")] Skill563, [BlessSkill("Bless Magatama")] Skill564, [DeathSkill("Curse Magatama")] Skill565, [HealSkill("Cooking")] Skill566, [HealSkill("Snack")] Skill567, [HealSkill("Shoes 1")] Skill568, [HealSkill("Shoes 2")] Skill569, [HealSkill("Shoes 3")] Skill570, [HealSkill("Juice Bar 1")] Skill571, [HealSkill("Juice Bar 2")] Skill572, [HealSkill("Juice Bar 3")] Skill573, [HealSkill("Juice Bar 4")] Skill574, [HealSkill("Energy Drink 1")] Skill575, [HealSkill("Energy Drink 2")] Skill576, [HealSkill("Energy Drink 3")] Skill577, [HealSkill("Soda 1")] Skill578, [HealSkill("Soda 2")] Skill579, [HealSkill("Soda 3")] Skill580, [HealSkill("Soda 4")] Skill581, [HealSkill("Ration 1 ")] Skill582, [HealSkill("Ration 2")] Skill583, [HealSkill("Ration 3")] Skill584, [HealSkill("Drug Store 1")] Skill585, [HealSkill("Drug Store 2")] Skill586, [HealSkill("Drug Store 3")] Skill587, [HealSkill("Drug Store 4")] Skill588, [HealSkill("Drug Store 5")] Skill589, [HealSkill("Drug Store 6")] Skill590, [HealSkill("Drug Store 7")] Skill591, [HealSkill("Drug Store 8")] Skill592, [HealSkill("Drug Store 9")] Skill593, [HealSkill("Drug Store 10")] Skill594, [HealSkill("Drug Store 11")] Skill595, [HealSkill("Drug Store 12")] Skill596, [HealSkill("Coffee 1")] Skill597, [SupportSkill("Coffee 2")] Skill598, [AlmightySkill("Double Fangs")] Skill599, [AlmightySkill("Twins Down Attack")] Skill600, [HitSkill("Caro Rod")] Skill601, [HitSkill("Caro Attack")] Skill602, [AlmightySkill("Megidolaon")] Skill603, [AlmightySkill("Rays of Control")] Skill604, [AlmightySkill("Rays of Control")] Skill605, [AlmightySkill("Rays of Control")] Skill606, [AlmightySkill("Rays of Control")] Skill607, [AlmightySkill("Arrow of Light")] Skill608, [AlmightySkill("Diffraction Arrow")] Skill609, [AlmightySkill("Light Edge")] Skill610, [SupportSkill("Gathering Light")] Skill611, [AlmightySkill("Eternal Light")] Skill612, [SupportSkill("Holy Change")] Skill613, [AlmightySkill("Distortion Wave")] Skill614, [SupportSkill("Tough Law")] Skill615, [SupportSkill("Frail Law")] Skill616, [SupportSkill("New Creation")] Skill617, [AlmightySkill("Distortion Surge")] Skill618, [AlmightySkill("Arrow of Light")] Skill619, [SupportSkill("Manifest Sword")] Skill620, [SupportSkill("Manifest Gun")] Skill621, [SupportSkill("Manifest Bell")] Skill622, [HitSkill("Sword of Judgment")] Skill623, [GunSkill("Capital Punishment")] Skill624, [SupportSkill("Manifest Book")] Skill625, [AlmightySkill("Distorted Lust")] Skill626, [AlmightySkill("Gospel")] Skill627, [AlmightySkill("Distorted Wrath")] Skill628, [AlmightySkill("Distorted Vanity")] Skill629, [SupportSkill("Song of Salvation")] Skill630, [AlmightySkill("Wrath of God")] Skill631, [AlmightySkill("Distorted Gluttony")] Skill632, [AlmightySkill("Distorted Envy")] Skill633, [SupportSkill("Song of Placation")] Skill634, [SupportSkill("Divine Apex")] Skill635, [AlmightySkill("Rays of Control")] Skill636, [AlmightySkill("Distorted Avarice")] Skill637, [HealSkill("Will of the People")] Skill638, [AlmightySkill("Rays of Control")] Skill639, [SpecialSkill("Moral Support")] Skill640, [SpecialSkill("Active Support")] Skill641, [SpecialSkill("Mental Hack")] Skill642, [SpecialSkill("Emergency Shift")] Skill643, [SpecialSkill("Final Guard")] Skill644, [SpecialSkill("Position Hack")] Skill645, [SpecialSkill("High Analyze")] Skill646, [SpecialSkill("Treasure Skimmer")] Skill647, [SpecialSkill("Subrecover HP EX")] Skill648, [SpecialSkill("Subrecover SP EX")] Skill649, [GunSkill("Big Bang Treat")] Skill650, [AlmightySkill("Explosion!")] Skill651, [AlmightySkill("Explosion!")] Skill652, [AlmightySkill("Explosion!")] Skill653, [SupportSkill("Big Bang Order")] Skill654, [AlmightySkill("Roulette Time")] Skill655, [AlmightySkill("Trip-Upper")] Skill656, [AlmightySkill("Lust Sphere")] Skill657, [AlmightySkill("Down Shot 2")] Skill658, [AlmightySkill("Down Shot 3")] Skill659, [AlmightySkill("Down Shot 4")] Skill660, [GunSkill("Electro Attack")] Skill661, [AlmightySkill("Sinful Shell")] Skill662, [AlmightySkill("Follow Black")] Skill663, [SpecialSkill("Summon")] Skill664, [AlmightySkill("Madara-Megido")] Skill665, [HealSkill("Curry Raku")] Skill666, [HealSkill("Enemy Benefit")] Skill667, [HealSkill("Diarahan")] Skill668, [HealSkill("Curry Suku")] Skill669, [SupportSkill("Decoy Ball")] Skill670, [SupportSkill("Super Decoy Ball")] Skill671, [HitSkill("Metabolic Wave")] Skill672, [AlmightySkill("Laevateinn")] Skill673, [SupportSkill("Desperation")] Skill674, [SupportSkill("Call of Chaos")] Skill675, [AlmightySkill("Big Bang Challenge")] Skill676, [AlmightySkill("Grail Light 2")] Skill677, [AlmightySkill("Megidola")] Skill678, [PoisonSkill("Rage Transmission")] Skill679, [HitSkill("Hundred Slaps")] Skill680, [AlmightySkill("Distorted Pride")] Skill681, [AlmightySkill("Divine Punishment")] Skill682, [HealSkill("Will of the People")] Skill683, [HitSkill("Wind Cutter")] Skill684, [GunSkill("Shoot Up")] Skill685, [HitSkill("Executive Punch")] Skill686, [AlmightySkill("Megidolaon")] Skill687, [HitSkill("Vorpal Blade")] Skill688, [AlmightySkill("Megidolaon")] Skill689, [HealSkill("Big Bang Burger")] Skill690, [HealSkill("Earth Burger")] Skill691, [HealSkill("Mars Burger")] Skill692, [HealSkill("Moon Burger")] Skill693, [HealSkill("Saturn Burger")] Skill694, [AlmightySkill("Justine Attack")] Skill695, [AlmightySkill("Caroline Attack")] Skill696, [HealSkill("Curry Makara")] Skill697, [HealSkill("Curry Tetra")] Skill698, [HealSkill("Curry Endure")] Skill699, [HealSkill("Curry Charge")] Skill700, [HealSkill("Curry Concentrate")] Skill701, [HealSkill("Curry Heat Riser")] Skill702, [SupportSkill("##703")] Skill703, [HealSkill("Cadenza")] Skill704, [HitSkill("Cross Slash")] Skill705, [AlmightySkill("Door of Hades")] Skill706, [DeathSkill("Magatsu Mandala")] Skill707, [BlessSkill("Shining Arrows")] Skill708, [HitSkill("Beast Weaver")] Skill709, [FireSkill("Titanomachia")] Skill710, [DeathSkill("Abyssal Wings")] Skill711, [HealSkill("Oratario")] Skill712, [AlmightySkill("Myriad Truths")] Skill713, [HealSkill("Neo Cadenza")] Skill714, [HitSkill("Akashic")] Skill715, [PoisonSkill("Phantom Show")] Skill716, [PoisonSkill("Confuse Ball")] Skill717, [SupportSkill("Baptism Ball")] Skill718, [SupportSkill("Exorcism Ball")] Skill719, [AlmightySkill("Megido")] Skill720, [AlmightySkill("Megidola")] Skill721, [AlmightySkill("Megidolaon")] Skill722, [HitSkill("Slam")] Skill723, [AlmightySkill("Megaton Raid")] Skill724, [AlmightySkill("One-shot Kill")] Skill725, [AlmightySkill("Inferno")] Skill726, [AlmightySkill("Diamond Dust")] Skill727, [BlessSkill("Eternal Radiance")] Skill728, [AlmightySkill("Tyrant Chaos")] Skill729, [HealSkill("Curry 1")] Skill730, [HealSkill("Curry 2")] Skill731, [HealSkill("Reviv-All")] Skill732, [HealSkill("Reviv-All Z")] Skill733, [AlmightySkill("Dark Akechi for pursuing")] Skill734, [AlmightySkill("Dark Akechi for Gun pursuing")] Skill735, [SpecialSkill("Wild Talk")] Skill736, [SpecialSkill("Baton Pass")] Skill737, [SpecialSkill("Punk Talk")] Skill738, [SpecialSkill("Pickpocket")] Skill739, [SpecialSkill("Harisen Recovery")] Skill740, [SpecialSkill("Protect")] Skill741, [SpecialSkill("Girl Talk")] Skill742, [SpecialSkill("Crocodile Tears")] Skill743, [SpecialSkill("Sexy Technique")] Skill744, [SpecialSkill("Detective Talk")] Skill745, [SpecialSkill("Artist Talk")] Skill746, [SpecialSkill("Negotiating")] Skill747, [SpecialSkill("Fundraising")] Skill748, [SpecialSkill("Manipulation")] Skill749, [SpecialSkill("Mind Control")] Skill750, [SpecialSkill("Charisma Speech")] Skill751, [SpecialSkill("Brainiac Talk")] Skill752, [SpecialSkill("Sabaki")] Skill753, [SpecialSkill("Kakoi Kuzushi ")] Skill754, [SpecialSkill("Touryou")] Skill755, [SpecialSkill("Togo System")] Skill756, [SpecialSkill("Bullet Hail")] Skill757, [SpecialSkill("Warning Shot")] Skill758, [SpecialSkill("Celeb Talk")] Skill759, [SpecialSkill("Kitty Talk")] Skill760, [PoisonSkill("Marin Karin")] Skill761, [PoisonSkill("Womanizing")] Skill762, [SupportSkill("Indignant Revenge")] Skill763, [HealSkill("Healing Power")] Skill764, [HealSkill("Healing Power")] Skill765, [HitSkill("Taunt")] Skill766, [SupportSkill("Iridescent Change")] Skill767, [HitSkill("Brave Blade")] Skill768, [HitSkill("Assault Dive")] Skill769, [HitSkill("Terror Claw")] Skill770, [IceSkill("Bufudyne")] Skill771, [PsychoSkill("Psiodyne")] Skill772, [ThunderSkill("Mazionga")] Skill773, [ThunderSkill("Maziodyne")] Skill774, [DeathSkill("Maeiga")] Skill775, [DeathSkill("Maeigaon")] Skill776, [AlmightySkill("Adam Skill 5")] Skill777, [AlmightySkill("Adam Skill 6")] Skill778, [HitSkill("Vorpal Blade")] Skill779, [AlmightySkill("Mona/Ryuji Unison Attack")] Skill780, [AlmightySkill("Mona/Ann Unison Attack")] Skill781, [AlmightySkill("Mona/Haru Unison Attack")] Skill782, [AlmightySkill("Yusuke/Ann Unison Attack")] Skill783, [AlmightySkill("Ryuji/Yusuke Unison Attack")] Skill784, [AlmightySkill("Ryuji/Makoto Unison Attack")] Skill785, [AlmightySkill("Protag/AkechiUnison Attack")] Skill786, [AlmightySkill("Makoto/Haru Unison Attack")] Skill787, [Unused] Skill788, [AlmightySkill("Protag/Kasumi Unison Attack")] Skill789, [AlmightySkill("Mona/Ryuji Unison Attack")] Skill790, [AlmightySkill("Mona/Ann Unison Attack")] Skill791, [AlmightySkill("Mona/haru Unison Attack")] Skill792, [AlmightySkill("Yusuke/ann Unison Attack")] Skill793, [AlmightySkill("Ryuji/Yusuke Unison Attack")] Skill794, [AlmightySkill("Ryuji/Makoto Unison Attack")] Skill795, [AlmightySkill("Protag/akechi Unison Attack")] Skill796, [AlmightySkill("Makoto/Haru Unison Attack")] Skill797, [Unused] Skill798, [AlmightySkill("Protag/kasumi Unison")] Skill799, [AutoSkill("Counter")] Skill800, [AutoSkill("Counterstrike")] Skill801, [AutoSkill("High Counter")] Skill802, [AutoSkill("Resist Burn")] Skill803, [AutoSkill("Null Burn")] Skill804, [AutoSkill("Endure")] Skill805, [AutoSkill("Enduring Soul")] Skill806, [AutoSkill("Resist Freeze")] Skill807, [AutoSkill("Null Freeze")] Skill808, [AutoSkill("Survival Trick")] Skill809, [AutoSkill("Dodge Fire")] Skill810, [AutoSkill("Evade Fire")] Skill811, [AutoSkill("Dodge Ice")] Skill812, [AutoSkill("Evade Ice")] Skill813, [AutoSkill("Dodge Wind")] Skill814, [AutoSkill("Evade Wind")] Skill815, [AutoSkill("Dodge Elec")] Skill816, [AutoSkill("Evade Elec")] Skill817, [AutoSkill("Dodge Phys")] Skill818, [AutoSkill("Evade Phys")] Skill819, [AutoSkill("Fire Boost")] Skill820, [AutoSkill("Fire Amp")] Skill821, [AutoSkill("Ice Boost")] Skill822, [AutoSkill("Ice Amp")] Skill823, [AutoSkill("Wind Boost")] Skill824, [AutoSkill("Wind Amp")] Skill825, [AutoSkill("Elec Boost")] Skill826, [AutoSkill("Elec Amp")] Skill827, [AutoSkill("Angelic Grace")] Skill828, [AutoSkill("Divine Grace")] Skill829, [AutoSkill("Regenerate 1")] Skill830, [AutoSkill("Regenerate 2")] Skill831, [AutoSkill("Regenerate 3")] Skill832, [AutoSkill("Dodge Bless")] Skill833, [AutoSkill("Dodge Curse")] Skill834, [AutoSkill("Invigorate 1")] Skill835, [AutoSkill("Invigorate 2")] Skill836, [AutoSkill("Invigorate 3")] Skill837, [AutoSkill("Evade Bless")] Skill838, [AutoSkill("Evade Curse")] Skill839, [AutoSkill("Attack Master")] Skill840, [AutoSkill("Auto-Mataru")] Skill841, [AutoSkill("Resist Shock")] Skill842, [AutoSkill("Defense Master")] Skill843, [AutoSkill("Auto-Maraku")] Skill844, [AutoSkill("Null Shock")] Skill845, [AutoSkill("Speed Master")] Skill846, [AutoSkill("Auto-Masuku")] Skill847, [AutoSkill("Resist Hunger")] Skill848, [AutoSkill("Null Hunger")] Skill849, [AutoSkill("Fast Heal")] Skill850, [AutoSkill("Insta-Heal")] Skill851, [AutoSkill("Arms Master")] Skill852, [AutoSkill("Spell Master")] Skill853, [AutoSkill("Rage atk up")] Skill854, [AutoSkill("Sharp Student")] Skill855, [AutoSkill("Apt Pupil")] Skill856, [AutoSkill("Ali Dance")] Skill857, [AutoSkill("Firm Stance")] Skill858, [AutoSkill("+50% exp")] Skill859, [AutoSkill("Life Aid")] Skill860, [AutoSkill("Victory Cry")] Skill861, [AutoSkill("Growth 1")] Skill862, [AutoSkill("Growth 2")] Skill863, [AutoSkill("Growth 3")] Skill864, [AutoSkill("Unshaken Will")] Skill865, [AutoSkill("Null bless insta-kill")] Skill866, [AutoSkill("Baton Pass")] Skill867, [AutoSkill("Soul Touch")] Skill868, [AutoSkill("Kakoi Kuzushi")] Skill869, [AutoSkill("Resist Fire")] Skill870, [AutoSkill("Null Fire")] Skill871, [AutoSkill("Repel Fire")] Skill872, [AutoSkill("Drain Fire")] Skill873, [Unused] Skill874, [AutoSkill("Resist Ice")] Skill875, [AutoSkill("Null Ice")] Skill876, [AutoSkill("Repel Ice")] Skill877, [AutoSkill("Drain Ice")] Skill878, [AutoSkill("+15% exp")] Skill879, [AutoSkill("Resist Wind")] Skill880, [AutoSkill("Null Wind")] Skill881, [AutoSkill("Repel Wind")] Skill882, [AutoSkill("Drain Wind")] Skill883, [AutoSkill("All out Attack Boost")] Skill884, [AutoSkill("Resist Elec")] Skill885, [AutoSkill("Null Elec")] Skill886, [AutoSkill("Repel Elec")] Skill887, [AutoSkill("Drain Elec")] Skill888, [AutoSkill("Money Boost")] Skill889, [AutoSkill("Resist Bless")] Skill890, [AutoSkill("Null Bless")] Skill891, [AutoSkill("Repel Bless")] Skill892, [AutoSkill("Drain Bless")] Skill893, [AutoSkill("Hide")] Skill894, [AutoSkill("Resist Curse")] Skill895, [AutoSkill("Null Curse")] Skill896, [AutoSkill("Repel Curse")] Skill897, [AutoSkill("Drain Curse")] Skill898, [AutoSkill("Life Boost")] Skill899, [AutoSkill("Resist Phys")] Skill900, [AutoSkill("Null Phys")] Skill901, [AutoSkill("Repel Phys")] Skill902, [AutoSkill("Drain Phys")] Skill903, [AutoSkill("Null bless/Cruse")] Skill904, [AutoSkill("Ailment Boost")] Skill905, [AutoSkill("Hama Boost")] Skill906, [AutoSkill("Mudo Boost")] Skill907, [AutoSkill("Gun Accuracy +5%")] Skill908, [AutoSkill("Samurail Spirit")] Skill909, [AutoSkill("Dizzy Boost")] Skill910, [AutoSkill("Confuse Boost")] Skill911, [AutoSkill("Fear Boost")] Skill912, [AutoSkill("Forget Boost")] Skill913, [AutoSkill("Sleep Boost")] Skill914, [AutoSkill("Rage Boost")] Skill915, [AutoSkill("Despair Boost")] Skill916, [AutoSkill("Kuzunoha Emblem")] Skill917, [AutoSkill("Brainwash Boost")] Skill918, [Unused] Skill919, [AutoSkill("Resist Dizzy")] Skill920, [AutoSkill("Resist Confuse")] Skill921, [AutoSkill("Resist Fear")] Skill922, [AutoSkill("Resist Forget")] Skill923, [AutoSkill("Resist Sleep")] Skill924, [AutoSkill("Resist Rage")] Skill925, [AutoSkill("Resist Despair")] Skill926, [AutoSkill("Fusion Accident up")] Skill927, [AutoSkill("Resist Brainwash")] Skill928, [AutoSkill("Tyrant's Mind")] Skill929, [AutoSkill("Null Dizzy")] Skill930, [AutoSkill("Null Confuse")] Skill931, [AutoSkill("Null Fear")] Skill932, [AutoSkill("Null Forget")] Skill933, [AutoSkill("Null Sleep")] Skill934, [AutoSkill("Null Rage")] Skill935, [AutoSkill("Null Despair")] Skill936, [AutoSkill("Holy Whisper")] Skill937, [AutoSkill("Null Brainwash")] Skill938, [AutoSkill("Holy Embrace")] Skill939, [AutoSkill("Burn Boost")] Skill940, [AutoSkill("Freeze Boost")] Skill941, [AutoSkill("Shock Boost")] Skill942, [AutoSkill("Blanck")] Skill943, [AutoSkill("Fortified Moxy")] Skill944, [AutoSkill("Adverse Resolve")] Skill945, [AutoSkill("Last Stand")] Skill946, [AutoSkill("Heat Up")] Skill947, [Unused] Skill948, [AutoSkill("Touch n' Go")] Skill949, [AutoSkill("Climate Decorum")] Skill950, [AutoSkill("Ambient Aid")] Skill951, [AutoSkill("RESERVE")] Skill952, [AutoSkill("Snipe")] Skill953, [AutoSkill("Cripple")] Skill954, [AutoSkill("Trigger Happy")] Skill955, [AutoSkill("Resist Nuke")] Skill956, [AutoSkill("Null Nuke")] Skill957, [AutoSkill("Repel Nuke")] Skill958, [AutoSkill("Drain Nuke")] Skill959, [AutoSkill("RESERVE")] Skill960, [AutoSkill("Resist Psy")] Skill961, [AutoSkill("Null Psy")] Skill962, [AutoSkill("Repel Psy")] Skill963, [AutoSkill("Drain Psy")] Skill964, [AutoSkill("RESERVE")] Skill965, [AutoSkill("Nuke Boost")] Skill966, [AutoSkill("Nuke Amp")] Skill967, [AutoSkill("RESERVE")] Skill968, [AutoSkill("Psy Boost")] Skill969, [AutoSkill("Psy Amp")] Skill970, [AutoSkill("Sexy Technique")] Skill971, [AutoSkill("Dodge Nuke")] Skill972, [AutoSkill("Evade Nuke")] Skill973, [AutoSkill("Detox")] Skill974, [AutoSkill("Dodge Psy")] Skill975, [AutoSkill("Evade Psy")] Skill976, [AutoSkill("Detox")] Skill977, [AutoSkill("Bless Boost")] Skill978, [AutoSkill("Bless Amp")] Skill979, [AutoSkill("RESERVE")] Skill980, [AutoSkill("Curse Boost")] Skill981, [AutoSkill("Curse Amp")] Skill982, [AutoSkill("Not Found by Enemy")] Skill983, [AutoSkill("Magic Ability")] Skill984, [AutoSkill("Fortify Spirit")] Skill985, [AutoSkill("Almighty Boost")] Skill986, [AutoSkill("Almighty Amp")] Skill987, [AutoSkill("Zenith Defense")] Skill988, [AutoSkill("Soul Chain")] Skill989, [AutoSkill("Vanity Copy")] Skill990, [AutoSkill("Gluttonous Snuff")] Skill991, [AutoSkill("Sloth Defense")] Skill992, [AutoSkill("Brush of vanity")] Skill993, [AutoSkill("Life rise")] Skill994, [AutoSkill("Mana Rise")] Skill995, [AutoSkill("Soul Touch")] Skill996, [AutoSkill("Victory Cry")] Skill997, [Unused] Skill998, [Unused] Skill999, [AutoSkill("Ailment effect up")] Skill1000, [AutoSkill("Ailment effect up+")] Skill1001, [AutoSkill("Instakill Sp Heal low")] Skill1002, [AutoSkill("Instakill SP heal mid")] Skill1003, [AutoSkill("Instakill SP heal hight")] Skill1004, [AutoSkill("Technical effect up")] Skill1005, [AutoSkill("Technical effect up+")] Skill1006, [AutoSkill("Low Hp Attack up")] Skill1007, [AutoSkill("Low Hp Attack up+")] Skill1008, [AutoSkill("Weak hit effect up")] Skill1009, [AutoSkill("Weak hit effect up+")] Skill1010, [AutoSkill("Null insta-kill")] Skill1011, [AutoSkill("Hp Cost Down 10%")] Skill1012, [AutoSkill("Hp Cost Down 25%")] Skill1013, [AutoSkill("Sp Cost Down 10%")] Skill1014, [AutoSkill("Sp Cost Down 25%")] Skill1015, [AutoSkill("Heal Magic up 10%")] Skill1016, [AutoSkill("Heal Magic up 25%")] Skill1017, [AutoSkill("Chance of 0 HP Cost")] Skill1018, [AutoSkill("Chance of 0 Sp Cost")] Skill1019, [AutoSkill("Target atk up")] Skill1020, [AutoSkill("Target atk up+")] Skill1021, [AutoSkill("All crit, no evasion")] Skill1022, [AutoSkill("Heal cost down 25%")] Skill1023, [AutoSkill("Heal cost down 10%")] Skill1024, [AutoSkill("Atk up, Aim Down")] Skill1025, [AutoSkill("Ailment Success up")] Skill1026, [Unused] Skill1027, [AutoSkill("4 affinity boost")] Skill1028, [AutoSkill("3 affinity light boost")] Skill1029, [AutoSkill("Support turn extend")] Skill1030, [AutoSkill("insta kill up")] Skill1031, [AutoSkill("insta kill up+")] Skill1032, [AutoSkill("life bonus")] Skill1033, [AutoSkill("life gain")] Skill1034, [AutoSkill("life surge")] Skill1035, [AutoSkill("mana bonus")] Skill1036, [AutoSkill("mana gain")] Skill1037, [AutoSkill("mana surge")] Skill1038, [AutoSkill("Critical effect up")] Skill1039, [AutoSkill("Critical effect up+")] Skill1040, [AutoSkill("hit damage doubled")] Skill1041, [AutoSkill("all target atk up")] Skill1042, [AutoSkill("all target atk up+")] Skill1043, [AutoSkill("auto barrier")] Skill1044, [AutoSkill("backup support")] Skill1045, [AutoSkill("absolute escape")] Skill1046, [AutoSkill("shield of loyalty")] Skill1047, [AutoSkill("all amp")] Skill1048, [AutoSkill("blank")] Skill1049, } } ================================================ FILE: KHSave.LibPersona5/Types/Trait.cs ================================================ using KHSave.Attributes; namespace KHSave.LibPersona5.Types { public enum Trait : short { [Info("Relentless")] Relentless = 6, [Info("Savior Bloodline")] SaviorBloodline = 9, [Info("Grace of Mother")] GraceofMother = 10, [Info("Relief Bloodline")] ReliefBloodline = 14, [Info("Ave Maria")] AveMaria = 15, [Info("Foul Stench")] FoulStench = 17, [Info("Static Electricity")] StaticElectricity = 22, [Info("Ghost Nest")] GhostNest = 23, [Info("Cold-Blooded")] ColdBlooded = 24, [Info("Allure of Wisdom")] AllureofWisdom = 30, [Info("Frenzied Bull")] FrenziedBull = 38, [Info("Intense Focus")] IntenseFocus = 46, [Info("Mighty Gaze")] MightyGaze = 54, [Info("Striking Weight")] StrikingWeight = 57, [Info("Undying Fury")] UndyingFury = 58, [Info("Retaliating Body")] RetaliatingBody = 62, [Info("Inviolable Beauty")] InviolableBeauty = 63, [Info("Pagan Allure")] PaganAllure = 65, [Info("Rare Antibody")] RareAntibody = 70, [Info("Immunity")] Immunity = 71, [Info("Skillful Combo")] SkillfulCombo = 73, [Info("Linked Bloodline")] LinkedBloodline = 74, [Info("Foul Odor")] FoulOdor = 78, [Info("Thermal Conduct")] ThermalConduct = 79, [Info("Pinch Anchor")] PinchAnchor = 86, [Info("Vitality of the Tree")] VitalityoftheTree = 87, [Info("Gloomy Child")] GloomyChild = 88, [Info("Skillful Technique")] SkillfulTechnique = 94, [Info("Universal Law")] UniversalLaw = 95, [Info("Ailment Hunter")] AilmentHunter = 97, [Info("Hollow Jester")] HollowJester = 98, [Info("Deathly Illness")] DeathlyIllness = 102, [Info("Omen")] Omen = 103, [Info("Explosive Scheme")] ExplosiveScheme = 129, [Info("Infinite Scheme")] InfiniteScheme = 131, [Info("Raging Temper")] RagingTemper = 132, [Info("Eccentric Temper")] EccentricTemper = 133, [Info("Proud Presence")] ProudPresence = 135, [Info("Majestic Presence")] MajesticPresence = 136, [Info("Mastery of Magic")] MasteryofMagic = 138, [Info("Pinnacle of Magic")] PinnacleofMagic = 139, [Info("Scoundrel Eyes")] ScoundrelEyes = 141, [Info("Unparalleled Eyes")] UnparalleledEyes = 142, [Info("Gaia Pact")] GaiaPact = 144, [Info("Gaia Blessing")] GaiaBlessing = 145, [Info("Icy Glare")] IcyGlare = 147, [Info("Cool Customer")] CoolCustomer = 148, [Info("Tactical Spirit")] TacticalSpirit = 150, [Info("Ingenious Spirit")] IngeniousSpirit = 151, [Info("Flawless Spirit")] FlawlessSpirit = 152, [Info("Veil of Midnight")] VeilofMidnight = 153, [Info("Veil of Sunrise")] VeilofSunrise = 154, [Info("Heated Bloodline")] HeatedBloodline = 156, [Info("Drunken Passion")] DrunkenPassion = 157, [Info("Frigid Bloodline")] FrigidBloodline = 158, [Info("Cocytus")] Cocytus = 159, [Info("Electric Bloodline")] ElectricBloodline = 160, [Info("Bargain Bolts")] BargainBolts = 161, [Info("Wind Bloodline")] WindBloodline = 162, [Info("Vahana's Wings")] VahanasWings = 163, [Info("Psychic Bloodline")] PsychicBloodline = 164, [Info("Chi You's Blessing")] ChiYousBlessing = 165, [Info("Atomic Bloodline")] AtomicBloodline = 166, [Info("Atomic Hellscape")] AtomicHellscape = 167, [Info("Blessed Bloodline")] BlessedBloodline = 168, [Info("Martyr's Gift")] MartyrsGift = 169, [Info("Cursed Bloodline")] CursedBloodline = 170, [Info("Mother's Lament")] MothersLament = 171, [Info("Gluttonmouth")] Gluttonmouth = 173, [Info("Demon's Bite")] DemonsBite = 174, [Info("Mouth of Savoring")] MouthofSavoring = 175, [Info("Naranari")] Naranari = 176, [Info("Hallowed Spirit")] HallowedSpirit = 177, [Info("Potent Hypnosis")] PotentHypnosis = 178, [Info("Wealth of Lotus")] WealthofLotus = 179, [Info("Internal Hypnosis")] InternalHypnosis = 180, [Info("Positive Thoughts")] PositiveThoughts = 181, [Info("Draining Mouth")] DrainingMouth = 182, [Info("Tag Team")] TagTeam = 184, [Info("Iron Heart")] IronHeart = 185, [Info("Crisis Control")] CrisisControl = 186, [Info("Bloodstained Eyes")] BloodstainedEyes = 187, [Info("Will of the Sword")] WilloftheSword = 188, [Info("Circle of Sadness")] CircleofSadness = 190, [Info("Bolstering Force")] BolsteringForce = 191, [Info("God Maker")] GodMaker = 192, [Info("Hazy Presence")] HazyPresence = 193, [Info("Country Maker")] CountryMaker = 194, [Info("Grace of the Olive")] GraceoftheOlive = 195, [Info("Just Die")] JustDie = 196, [Info("Blessed Spirit")] BlessedSpirit = 197, [Info("Ultimate Vessel")] UltimateVessel = 281, [Info("Ultimate Vessel (#2)")] UltimateVessel2 = 282, [Info("Ultimate Vessel (#3)")] UltimateVessel3 = 283, [Info("Ultimate Vessel (#4)")] UltimateVessel4 = 284, [Info("Ultimate Vessel (#5)")] UltimateVessel5 = 285, [Info("Ultimate Vessel (#6)")] UltimateVessel6 = 286, [Info("Ultimate Vessel (#7)")] UltimateVessel7 = 287, [Info("Ultimate Vessel (#8)")] UltimateVessel8 = 288, [Info("Ultimate Vessel (#9)")] UltimateVessel9 = 289, } } ================================================ FILE: KHSave.LibRecom/Attributes/CardEnemyAttribute.cs ================================================ using KHSave.Attributes; namespace KHSave.LibRecom.Attributes { public class CardEnemyAttribute : InfoAttribute { public CardEnemyAttribute(string info = null) : base(info) { } } } ================================================ FILE: KHSave.LibRecom/Attributes/CardFriendAttribute.cs ================================================ using KHSave.Attributes; namespace KHSave.LibRecom.Attributes { public class CardFriendAttribute : InfoAttribute { public CardFriendAttribute(string info = null) : base(info) { } } } ================================================ FILE: KHSave.LibRecom/Attributes/CardItemAttribute.cs ================================================ using KHSave.Attributes; namespace KHSave.LibRecom.Attributes { public class CardItemAttribute : ConsumableAttribute { public CardItemAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave.LibRecom/Attributes/CardMagicAttribute.cs ================================================ using KHSave.Attributes; namespace KHSave.LibRecom.Attributes { public class CardMagicAttribute : MagicAttribute { public CardMagicAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave.LibRecom/Attributes/CardMapAttribute.cs ================================================ using KHSave.Attributes; namespace KHSave.LibRecom.Attributes { public class CardMapAttribute : InfoAttribute { public CardMapAttribute(string info = null) : base(info) { } } public class CardMapRedAttribute : CardMapAttribute { public CardMapRedAttribute(string info = null) : base(info) { } } public class CardMapGreenAttribute : CardMapAttribute { public CardMapGreenAttribute(string info = null) : base(info) { } } public class CardMapBlueAttribute : CardMapAttribute { public CardMapBlueAttribute(string info = null) : base(info) { } } public class CardMapSpecialAttribute : CardMapAttribute { public CardMapSpecialAttribute(string info = null) : base(info) { } } } ================================================ FILE: KHSave.LibRecom/Attributes/CardSpecialAttribute.cs ================================================ using KHSave.Attributes; namespace KHSave.LibRecom.Attributes { public class CardSpecialAttribute : InfoAttribute { public CardSpecialAttribute(string info = null) : base(info) { } } } ================================================ FILE: KHSave.LibRecom/Attributes/CardSummonAttribute.cs ================================================ namespace KHSave.LibRecom.Attributes { public class CardSummonAttribute : CardMagicAttribute { public CardSummonAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave.LibRecom/Attributes/CardWeaponAttribute.cs ================================================ using KHSave.Attributes; namespace KHSave.LibRecom.Attributes { public class CardWeaponAttribute : KeybladeAttribute { public CardWeaponAttribute(string name = null) : base(name) { } } } ================================================ FILE: KHSave.LibRecom/Attributes/CardWorldAttribute.cs ================================================ using KHSave.Attributes; namespace KHSave.LibRecom.Attributes { public class CardWorldAttribute : InfoAttribute { public CardWorldAttribute(string info = null) : base(info) { } } } ================================================ FILE: KHSave.LibRecom/DataRecom.cs ================================================ using KHSave.LibRecom.Models; using KHSave.LibRecom.Types; using Xe.BinaryMapper; namespace KHSave.LibRecom { public class DataRecom { [Data(Count = 0x10)] public byte[] RealData { get; set; } [Data] public DataRecomTable0 Table0 { get; set; } // 0x10 [Data] public DataRecomTable1 Table1 { get; set; } // 0x410 [Data] public DataRecomTable2 Table2 { get; set; } // 0x490 [Data(0x510)] public DataRecomMcWork McWork { get; set; } // 0x510 } } ================================================ FILE: KHSave.LibRecom/DataRecomMcWork.cs ================================================ using Xe.BinaryMapper; namespace KHSave.LibRecom.Types { public class DataRecomMcWork { [Data(0, 0x3110)] public byte[] Data { get; set; } [Data(0x1aa4, Count = 0x49C)] public byte[] CardInventoryCount { get; set; } [Data(0x2830)] public int Experience { get; set; } } } ================================================ FILE: KHSave.LibRecom/DataRecomTable0.cs ================================================ using KHSave.LibRecom.Models; using Xe.BinaryMapper; namespace KHSave.LibRecom { public class DataRecomTable0 { [Data(0)] public int Unknown00 { get; set; } [Data] public int Unknown01 { get; set; } [Data] public int Unknown02 { get; set; } [Data] public int Unknown03 { get; set; } [Data] public int Unknown04 { get; set; } [Data] public int Unknown05 { get; set; } [Data] public int Unknown06 { get; set; } [Data] public int Unknown07 { get; set; } [Data] public int Unknown08 { get; set; } [Data] public int Unknown09 { get; set; } [Data] public int Unknown0a { get; set; } [Data] public int Unknown0b { get; set; } [Data] public int Unknown0c { get; set; } [Data] public int Unknown0d { get; set; } [Data] public int Unknown0e { get; set; } [Data] public int Unknown0f { get; set; } [Data] public int Unknown10 { get; set; } [Data] public int Unknown11 { get; set; } [Data] public int Unknown12 { get; set; } [Data] public int Unknown13 { get; set; } [Data] public int Unknown14 { get; set; } [Data] public int Unknown15 { get; set; } [Data] public int Unknown16 { get; set; } [Data] public int Unknown17 { get; set; } [Data] public int Unknown18 { get; set; } [Data] public int Unknown19 { get; set; } [Data] public int Unknown1a { get; set; } [Data] public int Unknown1b { get; set; } [Data] public int Unknown1c { get; set; } [Data] public int Unknown1d { get; set; } [Data] public int Unknown1e { get; set; } [Data] public int Unknown1f { get; set; } [Data] public int Unknown20 { get; set; } [Data] public int Unknown21 { get; set; } [Data] public int Unknown22 { get; set; } [Data] public int Unknown23 { get; set; } [Data] public int Unknown24 { get; set; } [Data] public int Unknown25 { get; set; } [Data] public int Unknown26 { get; set; } [Data] public int Unknown27 { get; set; } [Data] public int Unknown28 { get; set; } [Data] public int Unknown29 { get; set; } [Data] public int Unknown2a { get; set; } [Data] public int Unknown2b { get; set; } [Data] public int Unknown2c { get; set; } [Data] public int Unknown2d { get; set; } [Data] public int Unknown2e { get; set; } [Data] public int Unknown2f { get; set; } [Data] public int Unknown30 { get; set; } [Data] public int Unknown31 { get; set; } [Data] public int Unknown32 { get; set; } [Data] public int Unknown33 { get; set; } [Data] public int Unknown34 { get; set; } [Data] public int Unknown35 { get; set; } [Data] public int Unknown36 { get; set; } [Data] public int Unknown37 { get; set; } [Data] public int Unknown38 { get; set; } [Data] public int Unknown39 { get; set; } [Data] public int Unknown3a { get; set; } [Data] public int Unknown3b { get; set; } [Data] public int Unknown3c { get; set; } [Data] public int Unknown3d { get; set; } [Data] public int Unknown3e { get; set; } [Data] public int Unknown3f { get; set; } [Data] public int Unknown40 { get; set; } [Data] public int Unknown41 { get; set; } [Data] public int Unknown42 { get; set; } [Data] public int Unknown43 { get; set; } [Data] public int Unknown44 { get; set; } [Data] public int Unknown45 { get; set; } [Data] public int Unknown46 { get; set; } [Data] public int Unknown47 { get; set; } [Data] public int Unknown48 { get; set; } [Data] public int Unknown49 { get; set; } [Data] public int Unknown4a { get; set; } [Data] public int Unknown4b { get; set; } [Data] public int Unknown4c { get; set; } [Data] public int Unknown4d { get; set; } [Data] public int Unknown4e { get; set; } [Data] public int Unknown4f { get; set; } [Data] public int Unknown50 { get; set; } [Data] public int Unknown51 { get; set; } [Data] public int Unknown52 { get; set; } [Data] public int Unknown53 { get; set; } [Data] public int Unknown54 { get; set; } [Data] public int Unknown55 { get; set; } [Data] public int Unknown56 { get; set; } [Data] public int Unknown57 { get; set; } [Data] public int Unknown58 { get; set; } [Data] public int Unknown59 { get; set; } [Data] public int Unknown5a { get; set; } [Data] public int Unknown5b { get; set; } [Data] public int Unknown5c { get; set; } [Data] public int Unknown5d { get; set; } [Data] public int Unknown5e { get; set; } [Data] public int Unknown5f { get; set; } [Data] public int Unknown60 { get; set; } [Data] public int Unknown61 { get; set; } [Data] public int Unknown62 { get; set; } [Data] public int Unknown63 { get; set; } [Data] public int Unknown64 { get; set; } [Data] public int Unknown65 { get; set; } [Data] public int Unknown66 { get; set; } [Data] public int Unknown67 { get; set; } [Data] public int Unknown68 { get; set; } [Data] public int Unknown69 { get; set; } [Data] public int Unknown6a { get; set; } [Data] public int Unknown6b { get; set; } [Data] public int Unknown6c { get; set; } [Data] public int Unknown6d { get; set; } [Data] public int Unknown6e { get; set; } [Data] public int Unknown6f { get; set; } [Data] public int Unknown70 { get; set; } [Data] public int Unknown71 { get; set; } [Data] public int Unknown72 { get; set; } [Data] public int Unknown73 { get; set; } [Data] public int Unknown74 { get; set; } [Data] public int Unknown75 { get; set; } [Data] public int Unknown76 { get; set; } [Data] public int Unknown77 { get; set; } [Data] public int Unknown78 { get; set; } [Data] public int Unknown79 { get; set; } [Data] public int Unknown7a { get; set; } [Data] public int Unknown7b { get; set; } [Data] public int Unknown7c { get; set; } [Data] public int Unknown7d { get; set; } [Data] public int Unknown7e { get; set; } [Data] public int Unknown7f { get; set; } [Data] public int Unknown80 { get; set; } [Data] public int Unknown81 { get; set; } [Data] public int Unknown82 { get; set; } [Data] public int Unknown83 { get; set; } [Data] public int Unknown84 { get; set; } [Data] public int Unknown85 { get; set; } [Data] public int Unknown86 { get; set; } [Data] public int Unknown87 { get; set; } [Data] public int Unknown88 { get; set; } [Data] public int Unknown89 { get; set; } [Data] public int Unknown8a { get; set; } [Data] public int Unknown8b { get; set; } [Data] public int Unknown8c { get; set; } [Data] public int Unknown8d { get; set; } [Data] public int Unknown8e { get; set; } [Data] public int Unknown8f { get; set; } [Data] public int Unknown90 { get; set; } [Data] public int Unknown91 { get; set; } [Data] public int Unknown92 { get; set; } [Data] public int Unknown93 { get; set; } [Data] public int Unknown94 { get; set; } [Data] public int Unknown95 { get; set; } [Data] public int Unknown96 { get; set; } [Data] public int Unknown97 { get; set; } [Data] public int Unknown98 { get; set; } [Data] public int Unknown99 { get; set; } [Data] public int Unknown9a { get; set; } [Data] public int Unknown9b { get; set; } [Data] public int Unknown9c { get; set; } [Data] public int Unknown9d { get; set; } [Data] public int Unknown9e { get; set; } [Data] public int Unknown9f { get; set; } [Data] public int UnknownA0 { get; set; } [Data] public int UnknownA1 { get; set; } [Data] public int UnknownA2 { get; set; } [Data] public int UnknownA3 { get; set; } [Data] public int UnknownA4 { get; set; } [Data] public int UnknownA5 { get; set; } [Data] public int UnknownA6 { get; set; } [Data] public int UnknownA7 { get; set; } [Data] public int UnknownA8 { get; set; } [Data] public int UnknownA9 { get; set; } [Data] public int UnknownAa { get; set; } [Data] public int UnknownAb { get; set; } [Data] public int UnknownAc { get; set; } [Data] public int UnknownAd { get; set; } [Data] public int UnknownAe { get; set; } [Data] public int UnknownAf { get; set; } [Data] public int UnknownB0 { get; set; } [Data] public int UnknownB1 { get; set; } [Data] public int UnknownB2 { get; set; } [Data] public int UnknownB3 { get; set; } [Data] public int UnknownB4 { get; set; } [Data] public int UnknownB5 { get; set; } [Data] public int UnknownB6 { get; set; } [Data] public int UnknownB7 { get; set; } [Data] public int UnknownB8 { get; set; } [Data] public int UnknownB9 { get; set; } [Data] public int UnknownBa { get; set; } [Data] public int UnknownBb { get; set; } [Data] public int UnknownBc { get; set; } [Data] public int UnknownBd { get; set; } [Data] public int UnknownBe { get; set; } [Data] public int UnknownBf { get; set; } [Data] public int UnknownC0 { get; set; } [Data] public StoryFlag SoraStoryFlag { get; set; } [Data] public StoryFlag RikuStoryFlag { get; set; } [Data] public TutorialFlags Tutorial { get; set; } [Data] public CardFlags UnlockedCards { get; set; } [Data] public Kh2CardFlags UnlockedKh2Cards { get; set; } [Data] public FriendsFlags UnlockedFriends { get; set; } [Data] public PoohFlags PoohFlags { get; set; } [Data] public int UnknownC7 { get; set; } [Data] public int UnknownC8 { get; set; } [Data] public int UnknownC9 { get; set; } [Data] public int UnknownCa { get; set; } [Data] public int UnknownCb { get; set; } [Data] public int UnknownCc { get; set; } [Data] public int UnknownCd { get; set; } [Data] public int UnknownCe { get; set; } [Data] public int UnknownCf { get; set; } [Data] public int UnknownD0 { get; set; } [Data] public int UnknownD1 { get; set; } [Data] public int UnknownD2 { get; set; } [Data] public int UnknownD3 { get; set; } [Data] public int UnknownD4 { get; set; } [Data] public int UnknownD5 { get; set; } [Data] public int UnknownD6 { get; set; } [Data] public int UnknownD7 { get; set; } [Data] public int UnknownD8 { get; set; } [Data] public int UnknownD9 { get; set; } [Data] public int UnknownDa { get; set; } [Data] public int UnknownDb { get; set; } [Data] public int UnknownDc { get; set; } [Data] public int UnknownDd { get; set; } [Data] public int UnknownDe { get; set; } [Data] public int UnknownDf { get; set; } [Data] public int UnknownE0 { get; set; } [Data] public int UnknownE1 { get; set; } [Data] public int UnknownE2 { get; set; } [Data] public int UnknownE3 { get; set; } [Data] public int UnknownE4 { get; set; } [Data] public int UnknownE5 { get; set; } [Data] public int UnknownE6 { get; set; } [Data] public int UnknownE7 { get; set; } [Data] public int UnknownE8 { get; set; } [Data] public int UnknownE9 { get; set; } [Data] public int UnknownEa { get; set; } [Data] public int UnknownEb { get; set; } [Data] public int UnknownEc { get; set; } [Data] public int UnknownEd { get; set; } [Data] public int UnknownEe { get; set; } [Data] public int UnknownEf { get; set; } [Data] public int UnknownF0 { get; set; } [Data] public int UnknownF1 { get; set; } [Data] public int UnknownF2 { get; set; } [Data] public int UnknownF3 { get; set; } [Data] public int UnknownF4 { get; set; } [Data] public int UnknownF5 { get; set; } [Data] public int UnknownF6 { get; set; } [Data] public int UnknownF7 { get; set; } [Data] public int UnknownF8 { get; set; } [Data] public int UnknownF9 { get; set; } [Data] public int UnknownFa { get; set; } [Data] public int UnknownFb { get; set; } [Data] public int UnknownFc { get; set; } [Data] public int UnknownFd { get; set; } [Data] public int UnknownFe { get; set; } [Data] public int UnknownFf { get; set; } } } ================================================ FILE: KHSave.LibRecom/DataRecomTable1.cs ================================================ using KHSave.LibRecom.Types; using Xe.BinaryMapper; namespace KHSave.LibRecom { public class DataRecomTable1 { [Data] public byte Unknown00 { get; set; } [Data] public byte Unknown01 { get; set; } [Data] public byte Unknown02 { get; set; } [Data] public byte Unknown03 { get; set; } [Data] public byte Unknown04 { get; set; } [Data] public byte Unknown05 { get; set; } [Data] public byte Unknown06 { get; set; } [Data] public byte Unknown07 { get; set; } [Data] public byte Unknown08 { get; set; } [Data] public byte Unknown09 { get; set; } [Data] public byte Unknown0a { get; set; } [Data] public byte Unknown0b { get; set; } [Data] public byte Unknown0c { get; set; } [Data] public byte Unknown0d { get; set; } [Data] public byte Unknown0e { get; set; } [Data] public byte Unknown0f { get; set; } [Data] public byte Unknown10 { get; set; } [Data] public byte Unknown11 { get; set; } [Data] public byte Unknown12 { get; set; } [Data] public byte Unknown13 { get; set; } [Data] public byte Unknown14 { get; set; } [Data] public byte Unknown15 { get; set; } [Data] public byte Unknown16 { get; set; } [Data] public byte Unknown17 { get; set; } [Data] public byte Unknown18 { get; set; } [Data] public byte Unknown19 { get; set; } [Data] public byte Unknown1a { get; set; } [Data] public byte Unknown1b { get; set; } [Data] public byte Unknown1c { get; set; } [Data] public byte Unknown1d { get; set; } [Data] public byte Unknown1e { get; set; } [Data] public byte Unknown1f { get; set; } [Data] public byte Unknown20 { get; set; } [Data] public byte Unknown21 { get; set; } [Data] public byte Unknown22 { get; set; } [Data] public byte Unknown23 { get; set; } [Data] public byte Unknown24 { get; set; } [Data] public byte Unknown25 { get; set; } [Data] public byte Unknown26 { get; set; } [Data] public byte Unknown27 { get; set; } [Data] public byte Unknown28 { get; set; } [Data] public byte Unknown29 { get; set; } [Data] public byte Unknown2a { get; set; } [Data] public byte Unknown2b { get; set; } [Data] public byte Unknown2c { get; set; } [Data] public byte Unknown2d { get; set; } [Data] public byte Unknown2e { get; set; } [Data] public byte Unknown2f { get; set; } [Data] public byte Unknown30 { get; set; } [Data] public byte Unknown31 { get; set; } [Data] public byte Unknown32 { get; set; } [Data] public byte Unknown33 { get; set; } [Data] public byte Unknown34 { get; set; } [Data] public byte Unknown35 { get; set; } [Data] public byte Unknown36 { get; set; } [Data] public byte Unknown37 { get; set; } [Data] public byte Unknown38 { get; set; } [Data] public byte Unknown39 { get; set; } [Data] public byte Unknown3a { get; set; } [Data] public byte Unknown3b { get; set; } [Data] public byte Unknown3c { get; set; } [Data] public byte Unknown3d { get; set; } [Data] public byte Unknown3e { get; set; } [Data] public byte Unknown3f { get; set; } [Data] public byte Unknown40 { get; set; } [Data] public byte Unknown41 { get; set; } [Data] public byte Unknown42 { get; set; } [Data] public byte Unknown43 { get; set; } [Data] public byte Unknown44 { get; set; } [Data] public byte Unknown45 { get; set; } [Data] public byte Unknown46 { get; set; } [Data] public byte Unknown47 { get; set; } [Data] public byte Unknown48 { get; set; } [Data] public byte Unknown49 { get; set; } [Data] public byte Unknown4a { get; set; } [Data] public byte Unknown4b { get; set; } [Data] public byte Unknown4c { get; set; } [Data] public byte Unknown4d { get; set; } [Data] public byte Unknown4e { get; set; } [Data] public byte Unknown4f { get; set; } [Data] public byte Unknown50 { get; set; } [Data] public byte Unknown51 { get; set; } [Data] public byte Unknown52 { get; set; } [Data] public byte Unknown53 { get; set; } [Data] public byte Unknown54 { get; set; } [Data] public byte Unknown55 { get; set; } [Data] public byte Unknown56 { get; set; } [Data] public byte Unknown57 { get; set; } [Data] public byte Unknown58 { get; set; } [Data] public byte Unknown59 { get; set; } [Data] public byte Unknown5a { get; set; } [Data] public byte Unknown5b { get; set; } [Data] public byte Unknown5c { get; set; } [Data] public byte Unknown5d { get; set; } [Data] public byte Unknown5e { get; set; } [Data] public byte Unknown5f { get; set; } [Data] public PlayMode PlayMode { get; set; } [Data] public Difficulty Difficulty { get; set; } [Data] public SoundMode SoundMode { get; set; } [Data] public bool NoVibration { get; set; } [Data] public byte Unknown64 { get; set; } [Data] public byte Unknown65 { get; set; } [Data] public byte Unknown66 { get; set; } [Data] public byte Unknown67 { get; set; } [Data] public byte Unknown68 { get; set; } [Data] public byte Unknown69 { get; set; } [Data] public byte Unknown6a { get; set; } [Data] public byte Unknown6b { get; set; } [Data] public byte Unknown6c { get; set; } [Data] public byte Unknown6d { get; set; } [Data] public byte Unknown6e { get; set; } [Data] public byte Unknown6f { get; set; } [Data] public byte Unknown70 { get; set; } [Data] public byte Unknown71 { get; set; } [Data] public byte Unknown72 { get; set; } [Data] public byte Unknown73 { get; set; } [Data] public byte Unknown74 { get; set; } [Data] public byte Unknown75 { get; set; } [Data] public byte Unknown76 { get; set; } [Data] public byte Unknown77 { get; set; } [Data] public byte Unknown78 { get; set; } [Data] public byte Unknown79 { get; set; } [Data] public byte Unknown7a { get; set; } [Data] public byte Unknown7b { get; set; } [Data] public byte Unknown7c { get; set; } [Data] public byte Unknown7d { get; set; } [Data] public byte Unknown7e { get; set; } [Data] public byte Unknown7f { get; set; } } } ================================================ FILE: KHSave.LibRecom/DataRecomTable2.cs ================================================ using Xe.BinaryMapper; namespace KHSave.LibRecom { public class DataRecomTable2 { [Data(Count = 0x80)] public byte[] Data { get; set; } [Data(0)] public byte Unknown490 { get; set; } [Data] public bool Unknown491_0 { get; set; } [Data] public bool SoraCleared { get; set; } [Data] public bool Unknown492_0 { get; set; } [Data] public bool Kh2Cleared { get; set; } [Data] public bool RikuCleared { get; set; } [Data(0x10)] public bool Unknown4a0_0 { get; set; } [Data] public bool Unknown4a0_1 { get; set; } [Data] public bool MarluxiaKilled { get; set; } [Data] public bool GameCleared { get; set; } } } ================================================ FILE: KHSave.LibRecom/KHSave.LibRecom.csproj ================================================  net6 ================================================ FILE: KHSave.LibRecom/Models/Card.cs ================================================ using KHSave.LibRecom.Types; using System; namespace KHSave.LibRecom.Models { public struct Card : IEquatable { public CardType Type { get; set; } public int? Value { get; set; } public bool? IsPremium { get; set; } public bool Equals(Card other) => Type == other.Type && Value == other.Value && IsPremium == other.IsPremium; public override bool Equals(object obj) => obj is Card _card && Equals(_card); public override int GetHashCode() => (int)Type | (Value.HasValue ? (Value.Value << 16) : 0x10000000) | (IsPremium.HasValue ? (IsPremium.Value ? 0x40000000 : 0) : 0x20000000); public override string ToString() { if (Value.HasValue) return (IsPremium ?? false) ? $"{Type} {Value} (P)" : $"{Type} {Value}"; return Type.ToString(); } } } ================================================ FILE: KHSave.LibRecom/Models/CardFlags.cs ================================================ using Xe.BinaryMapper; namespace KHSave.LibRecom.Models { public class CardFlags { [Data] public bool Spellbinder { get; set; } [Data] public bool MetalChocobo { get; set; } [Data] public bool Lionheart { get; set; } [Data] public bool Oathkeeper { get; set; } [Data] public bool Oblivion { get; set; } [Data] public bool UltimaWeapon { get; set; } [Data] public bool DiamondDust { get; set; } [Data] public bool OneWingedAngel { get; set; } [Data] public bool Fire { get; set; } [Data] public bool Thunder { get; set; } [Data] public bool Gravity { get; set; } [Data] public bool Stop { get; set; } [Data] public bool Aero { get; set; } [Data] public bool Simba { get; set; } [Data] public bool Genie { get; set; } [Data] public bool Bambi { get; set; } [Data] public bool Dumbo { get; set; } [Data] public bool Tinkerbell { get; set; } [Data] public bool Mushu { get; set; } [Data] public bool Cloud { get; set; } [Data] public bool HiPotion { get; set; } [Data] public bool MegaPotion { get; set; } [Data] public bool Ether { get; set; } [Data] public bool MegaEther { get; set; } [Data] public bool Elixir { get; set; } [Data] public bool Megalixir { get; set; } } } ================================================ FILE: KHSave.LibRecom/Models/CardModel.cs ================================================ using KHSave.LibRecom.Types; using System.Collections.Generic; using System.Linq; namespace KHSave.LibRecom.Models { public static class CardModel { public static readonly Card[] CardInventory = new CardType[] { CardType.KingdomKey, CardType.ThreeWishes, CardType.Crabclaw, CardType.Pumpkinhead, CardType.FairyHarp, CardType.WishingStar, CardType.Spellbinder, CardType.MetalChocobo, CardType.Olympia, CardType.Lionheart, CardType.LadyLuck, CardType.DivineRose, CardType.Oathkeeper, CardType.Oblivion, CardType.UltimaWeapon, CardType.DiamondDust, CardType.OneWingedAngel, CardType.SoulEater, CardType.StarSeeker, CardType.Monochrome, CardType.FollowTheWind, CardType.HiddenDragon, CardType.PhotonDebugger, CardType.BondOfFlame, }.Project().Indexed().WithPremium() .Concat(new CardType[] { CardType.Fire, CardType.Blizzard, CardType.Thunder, CardType.Cure, CardType.Gravity, CardType.Stop, CardType.Aero, CardType.DummyMagic1, CardType.DummyMagic2, CardType.Simba, CardType.Genie, CardType.Bambi, CardType.Dumbo, CardType.TinkerBell, CardType.Mushu, CardType.Cloud, }.Project().Indexed().WithPremium()) .Concat(new CardType[] { CardType.Potion, CardType.HiPotion, CardType.MegaPotion, CardType.Ether, CardType.MegaEther, CardType.Elixir, CardType.Megalixir, }.Project().Indexed()) .Concat(new CardType[] { CardType.TranquilDarkness, CardType.TeemingDarkness, CardType.FeebleDarkness, CardType.AlmightyDarkness, CardType.SleepingDarkness, CardType.LoomingDarkness, CardType.PremiumRoom, CardType.WhiteRoom, CardType.BlackRoom, CardType.BottomlessDarkness, CardType.RouletteDarkness, CardType.MartialWaking, CardType.SorcerousWaking, CardType.AlchemicWaking, CardType.MeetingGround, CardType.StagnantSpace, CardType.StrongInitiative, CardType.LastingDaze, CardType.CalmBounty, CardType.GuardedTrove, CardType.FalseBounty, CardType.MomentsReprieve, CardType.MinglingWorlds, CardType.MoogleRoom, CardType.RandomJoker, }.Project().Indexed()) .Concat(new CardType[] { CardType.Shadow, CardType.Soldier, CardType.LargeBody, CardType.RedNocturne, CardType.BlueRhapsody, CardType.YellowOpera, CardType.GreenRequiem, CardType.Powerwild, CardType.Bouncywild, CardType.AirSoldier, CardType.Bandit, CardType.FatBandit, CardType.BarrelSpider, CardType.SearchGhost, CardType.SeaNeon, CardType.Screwdiver, CardType.Aquatank, CardType.WightKnight, CardType.Gargoyle, CardType.Pirate, CardType.AirPirate, CardType.Darkball, CardType.Defender, CardType.Wyvern, CardType.Wizard, CardType.Neoshadow, CardType.WhiteMushroom, CardType.BlackFungus, CardType.CreeperPlant, CardType.TornadoStep, CardType.Crescendo, CardType.GuardArmor, CardType.ParasiteCage, CardType.Trickmaster, CardType.Darkside, CardType.CardSoldier, CardType.Hades, CardType.Jafar, CardType.OogieBoogie, CardType.Ursula, CardType.Hook, CardType.DragonMaleficient, CardType.Riku, CardType.Axel, CardType.Larxene, CardType.Vexen, CardType.Marluxia, CardType.Lexaeus, CardType.Ansem, CardType.Zexion, CardType.Xemnas, CardType.Xigbar, CardType.Xaldin, CardType.Saix, CardType.Demyx, CardType.Luxord, CardType.Roxas, }.Project()) .Concat(new CardType[] { CardType.GoldCard, CardType.PlatinumCard, CardType.Unused }.Project()) .ToArray(); public static int GetCardInventoryIndex(CardType cardType, bool isPremium = false) => _cardInventoryLookup.TryGetValue(new Card { Type = cardType, IsPremium = isPremium }.ToKey(), out var value) ? value : -1; private const int MaxValue = 10; // Cards from 0 to 9 private static readonly Dictionary _cardInventoryLookup = CardInventory .Select((Key, Value) => new { Key, Value }) .Where(x => !x.Key.Value.HasValue || x.Key.Value.Value == 0) .ToDictionary(x => x.Key.ToKey(), x => x.Value); private static Card ToKey(this Card card) => new Card { Type = card.Type, IsPremium = card.IsPremium }; private static IEnumerable Project(this CardType[] cards) => cards.Select(x => new Card { Type = x, IsPremium = false }); private static IEnumerable Indexed(this IEnumerable cards) => cards.Select(x => Enumerable.Range(0, MaxValue).Select(i => new Card { Type = x.Type, Value = i, IsPremium = x.IsPremium })).SelectMany(x => x); private static IEnumerable WithPremium(this IEnumerable cards) => cards.Concat(cards.Select(x => new Card { Type = x.Type, Value = x.Value, IsPremium = true })); } } ================================================ FILE: KHSave.LibRecom/Models/FriendsFlags.cs ================================================ using Xe.BinaryMapper; namespace KHSave.LibRecom.Models { public class FriendsFlags { [Data] public bool Donald { get; set; } [Data] public bool Goofy { get; set; } [Data] public bool Alladin { get; set; } [Data] public bool Ariel { get; set; } [Data] public bool Jack { get; set; } [Data] public bool PeterPan { get; set; } [Data] public bool Beast { get; set; } [Data] public bool KingMickey { get; set; } [Data] public bool Pluto { get; set; } [Data] public bool Unknown09 { get; set; } [Data] public bool Unknown0a { get; set; } [Data] public bool Unknown0b { get; set; } [Data] public bool Unknown0c { get; set; } [Data] public bool Unknown0d { get; set; } [Data] public bool Unknown0e { get; set; } [Data] public bool Unknown0f { get; set; } [Data] public bool Unknown10 { get; set; } [Data] public bool Unknown11 { get; set; } [Data] public bool Unknown12 { get; set; } [Data] public bool Unknown13 { get; set; } [Data] public bool Unknown14 { get; set; } [Data] public bool Unknown15 { get; set; } [Data] public bool Unknown16 { get; set; } [Data] public bool Unknown17 { get; set; } [Data] public bool Unknown18 { get; set; } [Data] public bool Unknown19 { get; set; } [Data] public bool Unknown1a { get; set; } [Data] public bool Unknown1b { get; set; } [Data] public bool Unknown1c { get; set; } [Data] public bool Unknown1d { get; set; } [Data] public bool Unknown1e { get; set; } [Data] public bool Unknown1f { get; set; } } } ================================================ FILE: KHSave.LibRecom/Models/Kh2CardFlags.cs ================================================ using Xe.BinaryMapper; namespace KHSave.LibRecom.Models { public class Kh2CardFlags { [Data] public bool Xemnas { get; set; } [Data] public bool Xigbar { get; set; } [Data] public bool Xaldin { get; set; } [Data] public bool Saix { get; set; } [Data] public bool Demyx { get; set; } [Data] public bool Luxord { get; set; } [Data] public bool Roxas { get; set; } [Data] public bool StarSeeker { get; set; } [Data] public bool Monochrome { get; set; } [Data] public bool FollowTheWind { get; set; } [Data] public bool HiddenDragon { get; set; } [Data] public bool PhotonDebugger { get; set; } [Data] public bool BondOfFlame { get; set; } [Data] public bool Unknown0d { get; set; } [Data] public bool Unknown0e { get; set; } [Data] public bool Unknown0f { get; set; } [Data] public bool Unknown10 { get; set; } [Data] public bool Unknown11 { get; set; } [Data] public bool Unknown12 { get; set; } [Data] public bool Unknown13 { get; set; } [Data] public bool Unknown14 { get; set; } [Data] public bool Unknown15 { get; set; } [Data] public bool Unknown16 { get; set; } [Data] public bool Unknown17 { get; set; } [Data] public bool Unknown18 { get; set; } [Data] public bool Unknown19 { get; set; } [Data] public bool Unknown1a { get; set; } [Data] public bool Unknown1b { get; set; } [Data] public bool Unknown1c { get; set; } [Data] public bool Unknown1d { get; set; } [Data] public bool Unknown1e { get; set; } [Data] public bool Unknown1f { get; set; } } } ================================================ FILE: KHSave.LibRecom/Models/PoohFlags.cs ================================================ using Xe.BinaryMapper; namespace KHSave.LibRecom.Models { public class PoohFlags { [Data] public bool Piglet { get; set; } [Data] public bool Owl { get; set; } [Data] public bool Roo { get; set; } [Data] public bool Eeyore { get; set; } [Data] public bool Tigger { get; set; } [Data] public bool Rabbit { get; set; } [Data] public bool Goal1 { get; set; } [Data] public bool Goal2 { get; set; } [Data] public bool Unknown08 { get; set; } [Data] public bool Unknown09 { get; set; } [Data] public bool Unknown0a { get; set; } [Data] public bool Unknown0b { get; set; } [Data] public bool Unknown0c { get; set; } [Data] public bool Unknown0d { get; set; } [Data] public bool Unknown0e { get; set; } [Data] public bool Unknown0f { get; set; } [Data] public bool Unknown10 { get; set; } [Data] public bool Unknown11 { get; set; } [Data] public bool Unknown12 { get; set; } [Data] public bool Unknown13 { get; set; } [Data] public bool Unknown14 { get; set; } [Data] public bool Unknown15 { get; set; } [Data] public bool Unknown16 { get; set; } [Data] public bool Unknown17 { get; set; } [Data] public bool Unknown18 { get; set; } [Data] public bool Unknown19 { get; set; } [Data] public bool Unknown1a { get; set; } [Data] public bool Unknown1b { get; set; } [Data] public bool Unknown1c { get; set; } [Data] public bool Unknown1d { get; set; } [Data] public bool Unknown1e { get; set; } [Data] public bool Unknown1f { get; set; } } } ================================================ FILE: KHSave.LibRecom/Models/SkillFlags.cs ================================================ using Xe.BinaryMapper; namespace KHSave.LibRecom.Models { public class SkillFlags { [Data] public int Data { get; set; } [Data(0)] public bool HighJump { get; set; } [Data] public bool Glide { get; set; } [Data] public bool SuperGlide { get; set; } [Data] public bool DodgeRoll { get; set; } [Data] public bool RapidBreak { get; set; } [Data] public bool Duel { get; set; } } } ================================================ FILE: KHSave.LibRecom/Models/StoryFlag.cs ================================================ using Xe.BinaryMapper; namespace KHSave.LibRecom.Models { public class StoryFlag { [Data] public bool TraverseTown { get; set; } [Data] public bool Agrabah { get; set; } [Data] public bool OlympusColiseum { get; set; } [Data] public bool Wonderland { get; set; } [Data] public bool Monstro { get; set; } [Data] public bool HalloweenTown { get; set; } [Data] public bool Atlantica { get; set; } [Data] public bool Neverland { get; set; } [Data] public bool HollowBastion { get; set; } [Data] public bool HundredAcreWood { get; set; } [Data] public bool TwilightTown { get; set; } [Data] public bool DestinyIsland { get; set; } [Data] public bool CastleOblivion { get; set; } [Data] public bool Unknown0d { get; set; } [Data] public bool Unknown0e { get; set; } [Data] public bool Unknown0f { get; set; } } } ================================================ FILE: KHSave.LibRecom/Models/TutorialFlags.cs ================================================ using System; using System.Collections.Generic; using Xe.BinaryMapper; namespace KHSave.LibRecom.Models { public class TutorialFlags { [Data] public bool KeyRoom { get; set; } [Data] public bool MoogleShop { get; set; } [Data] public bool FloorMove { get; set; } [Data] public bool WarpPoint { get; set; } [Data] public bool SavePoint { get; set; } [Data] public bool Field { get; set; } [Data] public bool WorldSelect { get; set; } [Data] public bool Unknown07 { get; set; } [Data] public bool Unknown08 { get; set; } [Data] public bool Unknown09 { get; set; } [Data] public bool Unknown0a { get; set; } [Data] public bool Unknown0b { get; set; } [Data] public bool Unknown0c { get; set; } [Data] public bool Unknown0d { get; set; } [Data] public bool Unknown0e { get; set; } [Data] public bool Unknown0f { get; set; } [Data] public bool Unknown10 { get; set; } [Data] public bool Unknown11 { get; set; } [Data] public bool Unknown12 { get; set; } [Data] public bool Unknown13 { get; set; } [Data] public bool Unknown14 { get; set; } [Data] public bool Unknown15 { get; set; } [Data] public bool Unknown16 { get; set; } [Data] public bool Unknown17 { get; set; } [Data] public bool Unknown18 { get; set; } [Data] public bool Unknown19 { get; set; } [Data] public bool Unknown1a { get; set; } [Data] public bool Unknown1b { get; set; } [Data] public bool Unknown1c { get; set; } [Data] public bool Unknown1d { get; set; } [Data] public bool Unknown1e { get; set; } [Data] public bool Unknown1f { get; set; } } } ================================================ FILE: KHSave.LibRecom/SaveKhRecom.cs ================================================ using System.IO; using Xe.BinaryMapper; namespace KHSave.LibRecom { public class SaveKhRecom { private const int ValidMagicCode = 7; [Data] public int MagicCode { get; set; } [Data] public uint Checksum { get; set; } [Data] public int Length { get; set; } [Data] public int Zeroed { get; set; } public DataRecom Data { get; set; } public SaveKhRecom() { Data = new DataRecom(); } public void Write(Stream stream) { byte[] data; using (var saveStream = new MemoryStream()) { BinaryMapping.WriteObject(saveStream, Data); data = saveStream.ToArray(); } MagicCode = ValidMagicCode; Checksum = CalculateChecksum(data); Length = data.Length; Zeroed = 0; BinaryMapping.WriteObject(stream, this); stream.Write(data, 0, Length); } public static SaveKhRecom Read(Stream stream) { var obj = BinaryMapping.ReadObject(stream); obj.Data = BinaryMapping.ReadObject(stream, (int)stream.Position); return obj; } public static bool IsValid(Stream stream) { var prevPosition = stream.Position; int magicCode = new BinaryReader(stream).ReadInt32(); stream.Position = prevPosition; return magicCode == ValidMagicCode && stream.Length >= 0x10; } private static uint CalculateChecksum(byte[] data) { int checksum = -1; for (var i = 0; i < data.Length; i++) { checksum ^= data[i] << 31; checksum = checksum << 1 ^ (checksum < 0 ? 0x4c11db7 : 0); } return (uint)~checksum; } } } ================================================ FILE: KHSave.LibRecom/Types/CardType.cs ================================================ using KHSave.Attributes; using KHSave.LibRecom.Attributes; namespace KHSave.LibRecom.Types { public enum CardType { [Info] Empty, [Unused] Unused, [CardWeapon("Kingdom Key")] KingdomKey, [CardWeapon("Three Wishes")] ThreeWishes, [CardWeapon("Crabclaw")] Crabclaw, [CardWeapon("Pumpkinhead")] Pumpkinhead, [CardWeapon("Fairy Harp")] FairyHarp, [CardWeapon("Wishing Star")] WishingStar, [CardWeapon("Spellbinder")] Spellbinder, [CardWeapon("Metal Chocobo")] MetalChocobo, [CardWeapon("Olympia")] Olympia, [CardWeapon("Lionheart")] Lionheart, [CardWeapon("Lady Luck")] LadyLuck, [CardWeapon("Divine Rose")] DivineRose, [CardWeapon("Oathkeeper")] Oathkeeper, [CardWeapon("Oblivion")] Oblivion, [CardWeapon("Ultima Weapon")] UltimaWeapon, [CardWeapon("Diamond Dust")] DiamondDust, [CardWeapon("One-Winged Angel")] OneWingedAngel, [CardWeapon("Soul Eater")] SoulEater, [CardWeapon("Star Seeker")] StarSeeker, [CardWeapon("Monochrome")] Monochrome, [CardWeapon("Follow the Wind")] FollowTheWind, [CardWeapon("Hidden Dragon")] HiddenDragon, [CardWeapon("Photon Debugger")] PhotonDebugger, [CardWeapon("Bond of Flame")] BondOfFlame, [CardMagic] Fire, [CardMagic] Blizzard, [CardMagic] Thunder, [CardMagic] Cure, [CardMagic] Gravity, [CardMagic] Stop, [CardMagic] Aero, [Unused] [CardMagic("-")] DummyMagic1, [Unused] [CardMagic("-")] DummyMagic2, [CardSummonAttribute("Simba")] Simba, [CardSummonAttribute("Genie")] Genie, [CardSummonAttribute("Bambi")] Bambi, [CardSummonAttribute("Dumbo")] Dumbo, [CardSummonAttribute("Tinker Bell")] TinkerBell, [CardSummonAttribute("Mushu")] Mushu, [CardSummonAttribute("Cloud")] Cloud, [CardItem("Potion")] Potion, [CardItem("Hi-Potion")] HiPotion, [CardItem("Mega-Potion")] MegaPotion, [CardItem("Ether")] Ether, [CardItem("Mega-Ether")] MegaEther, [CardItem("Elixir")] Elixir, [CardItem("Megalixir")] Megalixir, [CardMapRed("Tranquil Darkness")] TranquilDarkness, [CardMapRed("Teeming Darkness")] TeemingDarkness, [CardMapRed("Feeble Darkness")] FeebleDarkness, [CardMapRed("Almighty Darkness")] AlmightyDarkness, [CardMapRed("Sleeping Darkness")] SleepingDarkness, [CardMapRed("Looming Darkness")] LoomingDarkness, [CardMapRed("Premium Room")] PremiumRoom, [CardMapRed("White Room")] WhiteRoom, [CardMapRed("Black Room")] BlackRoom, [CardMapRed("Bottomless Darkness")] BottomlessDarkness, [CardMapRed("Roulette Darkness")] RouletteDarkness, [CardMapGreen("Martial Waking")] MartialWaking, [CardMapGreen("Sorcerous Waking")] SorcerousWaking, [CardMapGreen("Alchemic Waking")] AlchemicWaking, [CardMapGreen("Meeting Ground")] MeetingGround, [CardMapGreen("Stagnant Space")] StagnantSpace, [CardMapGreen("Strong Initiative")] StrongInitiative, [CardMapGreen("Lasting Daze")] LastingDaze, [CardMapBlue("Calm Bounty")] CalmBounty, [CardMapBlue("Guarded Trove")] GuardedTrove, [CardMapBlue("False Bounty")] FalseBounty, [CardMapBlue("Moment's Reprieve")] MomentsReprieve, [CardMapBlue("Mingling Worlds")] MinglingWorlds, [CardMapBlue("Moogle Room")] MoogleRoom, [CardMapSpecial("Random Joker")] RandomJoker, [CardEnemy("Shadow")] Shadow, [CardEnemy("Soldier")] Soldier, [CardEnemy("Large Body")] LargeBody, [CardEnemy("Red Nocturne")] RedNocturne, [CardEnemy("Blue Rhapsody")] BlueRhapsody, [CardEnemy("Yellow Opera")] YellowOpera, [CardEnemy("Green Requiem")] GreenRequiem, [CardEnemy("Powerwild")] Powerwild, [CardEnemy("Bouncywild")] Bouncywild, [CardEnemy("Air Soldier")] AirSoldier, [CardEnemy("Bandit")] Bandit, [CardEnemy("Fat Bandit")] FatBandit, [CardEnemy("Barrel Spider")] BarrelSpider, [CardEnemy("Search Ghost")] SearchGhost, [CardEnemy("Sea Neon")] SeaNeon, [CardEnemy("Screwdiver")] Screwdiver, [CardEnemy("Aquatank")] Aquatank, [CardEnemy("Wight Knight")] WightKnight, [CardEnemy("Gargoyle")] Gargoyle, [CardEnemy("Pirate")] Pirate, [CardEnemy("Air Pirate")] AirPirate, [CardEnemy("Darkball")] Darkball, [CardEnemy("Defender")] Defender, [CardEnemy("Wyvern")] Wyvern, [CardEnemy("Wizard")] Wizard, [CardEnemy("Neoshadow")] Neoshadow, [CardEnemy("White Mushroom")] WhiteMushroom, [CardEnemy("Black Fungus")] BlackFungus, [CardEnemy("Creeper Plant")] CreeperPlant, [CardEnemy("Tornado Step")] TornadoStep, [CardEnemy("Crescendo")] Crescendo, [CardEnemy("Guard Armor")] GuardArmor, [CardEnemy("Parasite Cage")] ParasiteCage, [CardEnemy("Trickmaster")] Trickmaster, [CardEnemy("Darkside")] Darkside, [CardEnemy("Card Soldier")] CardSoldier, [CardEnemy("Hades")] Hades, [CardEnemy("Jafar")] Jafar, [CardEnemy("Oogie Boogie")] OogieBoogie, [CardEnemy("Ursula")] Ursula, [CardEnemy("Hook")] Hook, [CardEnemy("Dragon Maleficient")] DragonMaleficient, [CardEnemy("Riku")] Riku, [CardEnemy("Axel")] Axel, [CardEnemy("Larxene")] Larxene, [CardEnemy("Vexen")] Vexen, [CardEnemy("Marluxia")] Marluxia, [CardEnemy("Lexaeus")] Lexaeus, [CardEnemy("Ansem")] Ansem, [CardEnemy("Zexion")] Zexion, [CardEnemy("Xemnas")] Xemnas, [CardEnemy("Xigbar")] Xigbar, [CardEnemy("Xaldin")] Xaldin, [CardEnemy("Saïx")] Saix, [CardEnemy("Demyx")] Demyx, [CardEnemy("Luxord")] Luxord, [CardEnemy("Roxas")] Roxas, [CardSpecial("Gold Card")] GoldCard, [CardSpecial("Platinum Card")] PlatinumCard, } } ================================================ FILE: KHSave.LibRecom/Types/Difficulty.cs ================================================ namespace KHSave.LibRecom.Types { public enum Difficulty : byte { Beginner, Standard, Proud, Extreme } } ================================================ FILE: KHSave.LibRecom/Types/PlayMode.cs ================================================ namespace KHSave.LibRecom.Types { public enum PlayMode : byte { Sora, Riku } } ================================================ FILE: KHSave.LibRecom/Types/SoundMode.cs ================================================ namespace KHSave.LibRecom.Types { public enum SoundMode : byte { Stereo, ProLogicII, Mono } } ================================================ FILE: KHSave.SaveEditor/App.config ================================================
False True ================================================ FILE: KHSave.SaveEditor/App.manifest ================================================  PerMonitorV2 true ================================================ FILE: KHSave.SaveEditor/App.xaml ================================================ ================================================ FILE: KHSave.SaveEditor/App.xaml.cs ================================================ using KHSave.SaveEditor.Ff7Remake.Data; using KHSave.SaveEditor.Interfaces; using KHSave.SaveEditor.Services; using KHSave.SaveEditor.Views; using System; using System.Diagnostics; using System.Linq; using System.Text; using System.Windows; using System.Windows.Threading; using Unity; namespace KHSave.SaveEditor { /// /// Interaction logic for App.xaml /// public partial class App : Application { private class ApplicationStartup : IApplicationStartup { public ApplicationStartup(string[] args) { StartupFileName = args.FirstOrDefault(); #if DEBUG StartupFileName = StartupFileName ?? @"D:\Repository\KH3SaveEditor\KHSave.Tests\Saves\kh2fm.bin"; #endif } #if DEBUG public bool IsDebugging => Debugger.IsAttached; #else public bool IsDebugging => false; #endif public string StartupFileName { get; } } protected override void OnStartup(StartupEventArgs e) { try { base.OnStartup(e); Initialize(e); } catch (Exception ex) { CaptureException(ex); } } private void Initialize(StartupEventArgs e) { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); DispatcherUnhandledException += (sender, args) => { CaptureException(args.Exception); args.Handled = true; }; ItemsPreset.LazyInitialize(); BgmPreset.LazyInitialize(); IUnityContainer container = new UnityContainer() .AddExtension(new Diagnostic()) .RegisterSingleton() .RegisterSingleton() .RegisterInstance(new ApplicationStartup(e.Args)) .RegisterSingleton() .RegisterSingleton() .RegisterSingleton() ; container.Resolve().Show(); } private static void CaptureException(Exception ex) { ReporterService.Instance.SendCrashReport(ex); MessageBox.Show( $"An unhandled error has occurred:\n{ex.Message}\n\n{ex.StackTrace}", "Fatal error", MessageBoxButton.OK, MessageBoxImage.Error); } } } ================================================ FILE: KHSave.SaveEditor/Interfaces/IAlertMessage.cs ================================================ using KHSave.SaveEditor.Common.Exceptions; using System; namespace KHSave.SaveEditor.Interfaces { public interface IAlertMessage { void Info(string message, string title = null); void Warning(string message, string title = null); void Error(string message, string title = null); void Error(Exception exception); void Error(VisualException exception); bool? InfoQuestion(string message, string title = null); bool? WarningQuestion(string message, string title = null); bool? ErrorQuestion(string message, string title = null); } } ================================================ FILE: KHSave.SaveEditor/Interfaces/IApplicationStartup.cs ================================================ namespace KHSave.SaveEditor.Interfaces { public interface IApplicationStartup { bool IsDebugging { get; } string StartupFileName { get; } } } ================================================ FILE: KHSave.SaveEditor/Interfaces/IFileDialogManager.cs ================================================ using System; using System.IO; namespace KHSave.SaveEditor.Interfaces { public interface IFileDialogManager { bool IsFileOpen { get; } string CurrentFileName { get; } void InjectFileName(string fileName, Action onSuccess); void Open(Action onSuccess); void Save(Action onSuccess); void SaveAs(Action onSuccess); } } ================================================ FILE: KHSave.SaveEditor/Interfaces/IReporter.cs ================================================ using System; namespace KHSave.SaveEditor.Interfaces { public interface IReporter { void SendGameName(string name); void SendCrashReport(Exception ex); } } ================================================ FILE: KHSave.SaveEditor/Interfaces/IUpdater.cs ================================================ using System.Threading.Tasks; namespace KHSave.SaveEditor.Interfaces { public interface IUpdater { bool IsAutomaticUpdatesEnabled { get; set; } Task AutomaticallyCheckLastVersionAsync(); Task ForceCheckLastVersionAsync(); } } ================================================ FILE: KHSave.SaveEditor/Interfaces/IWindowManager.cs ================================================ using System; using System.Windows; namespace KHSave.SaveEditor.Interfaces { public interface IWindowManager { bool IsRoot { get; } Window RootWindow { get; set; } Window CurrentWindow { get; } bool? Push(Action onSetup = null, Func onSuccess = null) where TWindow : Window; bool? Push(Window window); void Pull(); } } ================================================ FILE: KHSave.SaveEditor/KHSave.SaveEditor.csproj ================================================ net6-windows true Icon1.ico WinExe true 1.15.5 https://github.com/Xeeynamo/KingdomSaveEditor http://kingdomsaveeditor.xee.dev/ 1.15.5 http://kingdomsaveeditor.xee.dev/ Copyright (C) 2021 Luciano Ciccariello 1.15.5 KHSave.SaveEditor Luciano (Xeeynamo) Ciccariello Kingdom Save Editor GPL3 App.manifest ================================================ FILE: KHSave.SaveEditor/Models/PatreonInfo.cs ================================================ using System.Collections.Generic; namespace KHSave.SaveEditor.Models { public class PatreonInfo { public string PatreonUrl { get; set; } public IEnumerable Patrons { get; set; } public SponsorshipInfo SponsorshipInfo { get; set; } public IEnumerable Messages { get; set; } } } ================================================ FILE: KHSave.SaveEditor/Models/PatronModel.cs ================================================ namespace KHSave.SaveEditor.Models { public class PatronModel { public string Name { get; set; } public string ProfileUrl { get; set; } public string PhotoUrl { get; set; } public int TierId { get; set; } public string Color { get; set; } public string BadgeUrl { get; set; } public bool Glow { get; set; } } } ================================================ FILE: KHSave.SaveEditor/Models/ServiceMessage.cs ================================================ namespace KHSave.SaveEditor.Models { public class ServiceMessage { public string Text { get; set; } public string Title { get; set; } public string Url { get; set; } public double FontSize { get; set; } public bool IsBold { get; set; } public bool IsItalic { get; set; } } } ================================================ FILE: KHSave.SaveEditor/Models/SponsorshipInfo.cs ================================================ namespace KHSave.SaveEditor.Models { public class SponsorshipInfo { public string Title { get; set; } public string Description { get; set; } public int StartGoal { get; set; } public int EndGoal { get; set; } public int Count { get; set; } } } ================================================ FILE: KHSave.SaveEditor/Properties/Resources.Designer.cs ================================================ //------------------------------------------------------------------------------ // // This code was generated by a tool. // Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ namespace KHSave.SaveEditor.Properties { using System; /// /// A strongly-typed resource class, for looking up localized strings, etc. /// // This class was auto-generated by the StronglyTypedResourceBuilder // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { private static global::System.Resources.ResourceManager resourceMan; private static global::System.Globalization.CultureInfo resourceCulture; [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Resources() { } /// /// Returns the cached ResourceManager instance used by this class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Resources.ResourceManager ResourceManager { get { if (object.ReferenceEquals(resourceMan, null)) { global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("KHSave.SaveEditor.Properties.Resources", typeof(Resources).Assembly); resourceMan = temp; } return resourceMan; } } /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. /// [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] internal static global::System.Globalization.CultureInfo Culture { get { return resourceCulture; } set { resourceCulture = value; } } /// /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). /// internal static System.Drawing.Icon Icon1 { get { object obj = ResourceManager.GetObject("Icon1", resourceCulture); return ((System.Drawing.Icon)(obj)); } } } } ================================================ FILE: KHSave.SaveEditor/Properties/Resources.resx ================================================  text/microsoft-resx 2.0 System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 ..\Resources\Icon1.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a ================================================ FILE: KHSave.SaveEditor/Services/AlertMessage.cs ================================================ using KHSave.SaveEditor.Common.Exceptions; using KHSave.SaveEditor.Interfaces; using System; using System.Windows; namespace KHSave.SaveEditor.Services { public class AlertMessage : IAlertMessage { private readonly IWindowManager windowManager; public AlertMessage(IWindowManager windowManager) { this.windowManager = windowManager; } public void Info(string message, string title) => Invoke(message, title, MessageBoxButton.OK, MessageBoxImage.Information); public void Warning(string message, string title) => Invoke(message, title, MessageBoxButton.OK, MessageBoxImage.Warning); public void Error(string message, string title) => Invoke(message, title, MessageBoxButton.OK, MessageBoxImage.Error); public void Error(Exception exception) => Error(exception.Message, "Error"); public void Error(VisualException exception) => Error(exception.Message, exception.Title); public bool? InfoQuestion(string message, string title) => Invoke(message, title, MessageBoxButton.YesNoCancel, MessageBoxImage.Information); public bool? WarningQuestion(string message, string title) => Invoke(message, title, MessageBoxButton.YesNoCancel, MessageBoxImage.Warning); public bool? ErrorQuestion(string message, string title) => Invoke(message, title, MessageBoxButton.YesNoCancel, MessageBoxImage.Error); private bool? Invoke(string message, string title, MessageBoxButton buttons, MessageBoxImage severity) { switch (MessageBox.Show(windowManager.CurrentWindow, message, title, buttons, severity)) { case MessageBoxResult.None: return null; case MessageBoxResult.OK: return true; case MessageBoxResult.Cancel: return null; case MessageBoxResult.Yes: return true; case MessageBoxResult.No: return false; default: return null; } } } } ================================================ FILE: KHSave.SaveEditor/Services/ContentFactory.cs ================================================ using KHSave.SaveEditor.Common.Contracts; using KHSave.SaveEditor.Common.Services; using KHSave.SaveEditor.Ff7Remake.ViewModels; using KHSave.SaveEditor.Kh02.ViewModels; using KHSave.SaveEditor.Kh1.ViewModels; using KHSave.SaveEditor.Kh2.ViewModels; using KHSave.SaveEditor.Kh3.ViewModels; using KHSave.SaveEditor.KhBbs.ViewModels; using KHSave.SaveEditor.KhRecom.ViewModels; using KHSave.SaveEditor.Persona5.ViewModels; using KHSave.SaveEditor.KhDDD.ViewModels; using KHSave.SaveEditor.ViewModels; using KHSave.SaveEditor.Views; using System; using System.Windows.Controls; using Unity; using KHSave.LibPersona3.Models; using KHSave.SaveEditor.Persona3.ViewModels; namespace KHSave.SaveEditor.Services { public enum ContentType { Unload, Archive, KingdomHearts, KingdomHearts2, KingdomHeartsBbs, KingdomHeartsDDD, KingdomHeartsRecom, KingdomHearts02, KingdomHearts3, FinalFantasy7Remake, Persona3, Persona5, } public class ContentResponse { public UserControl Control { get; set; } public IOpenStream OpenStream { get; set; } public IWriteToStream WriteToStream { get; set; } public IRefreshUi RefreshUi { get; set; } public IGetSave GetSave { get; set; } } public class ContentFactory { private readonly IUnityContainer container; public ContentFactory(IUnityContainer container) { this.container = container; } public ContentResponse Factory(ContentType saveType) => saveType switch { ContentType.Unload => FactoryView(), ContentType.KingdomHearts => FactoryEditorView(), ContentType.KingdomHearts2 => FactoryEditorView(), ContentType.KingdomHeartsBbs => FactoryEditorView(), ContentType.KingdomHeartsDDD => FactoryEditorView(), ContentType.KingdomHeartsRecom => FactoryEditorView(), ContentType.KingdomHearts02 => FactoryEditorView(), ContentType.KingdomHearts3 => FactoryEditorView(), ContentType.FinalFantasy7Remake => FactoryEditorView(), ContentType.Persona3 => FactoryEditorView(), ContentType.Persona5 => FactoryEditorView(), _ => throw new Exception($"Factory for {saveType} not yet implemented."), }; public void LoadIconPack(ContentType saveType) { IconService.IconPack iconPack; switch (saveType) { case ContentType.Unload: return; case ContentType.KingdomHearts: case ContentType.KingdomHearts2: case ContentType.KingdomHeartsRecom: case ContentType.KingdomHearts02: case ContentType.KingdomHearts3: iconPack = IconService.IconPack.KingdomHearts2; break; case ContentType.KingdomHeartsBbs: iconPack = IconService.IconPack.KingdomHeartsBbs; break; case ContentType.KingdomHeartsDDD: iconPack = IconService.IconPack.KingdomHeartsDdd; break; case ContentType.FinalFantasy7Remake: iconPack = IconService.IconPack.FF7Remake; break; case ContentType.Persona3: case ContentType.Persona5: iconPack = IconService.IconPack.Persona5; break; default: throw new Exception($"IconPack for {saveType} not yet implemented."); } IconService.UseIconPack(iconPack); } private ContentResponse FactorySimpleView() where TControl : UserControl => new ContentResponse { Control = container.Resolve() }; private ContentResponse FactoryView() where TControl : UserControl where TContext : class { var control = container.Resolve(); control.DataContext = container.Resolve(); return new ContentResponse { Control = control, }; } private ContentResponse FactoryEditorView() where TControl : UserControl where TContext : IOpenStream, IWriteToStream, IRefreshUi { var context = container.Resolve(); var control = container.Resolve(); control.DataContext = context; return new ContentResponse { Control = control, OpenStream = context, WriteToStream = context, RefreshUi = context, GetSave = context as IGetSave, }; } } } ================================================ FILE: KHSave.SaveEditor/Services/DesktopAppIdentity.cs ================================================ using System; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Windows; namespace KHSave.SaveEditor.Services { public class DesktopAppIdentity : IAppIdentity { private static readonly string[] WindowsStorePathList = new[] { "\\WindowsApps\\", "/WindowsApps/", "58821Xeeynamo.KingdomSaveEditor_", }; private static readonly Assembly _assembly = Assembly.GetExecutingAssembly(); private static readonly string _assemblyLocation = Path .Combine(AppContext.BaseDirectory, _assembly.ManifestModule.ToString()) .Replace(".dll", ".exe"); private static readonly FileVersionInfo _fvi = FileVersionInfo.GetVersionInfo(_assemblyLocation); public DesktopAppIdentity() { // https://docs.microsoft.com/en-us/windows/msix/desktop/desktop-to-uwp-behind-the-scenes#installation IsMicrosoftStore = WindowsStorePathList.Any(x => AppContext.BaseDirectory.Contains(x)); } public string Name => _fvi.ProductName; public string Version => _fvi.ProductVersion; public bool IsMicrosoftStore { get; } } } ================================================ FILE: KHSave.SaveEditor/Services/FileDialogManager.cs ================================================ using System; using System.Collections.Generic; using System.IO; using KHSave.SaveEditor.Interfaces; using Xe.Tools.Wpf.Dialogs; namespace KHSave.SaveEditor.Services { public class FileDialogManager : IFileDialogManager { private readonly IEnumerable Filters = FileDialogFilterComposer .Compose() .AddExtensions("All supported games", "bin", "sav", "dat;*") .AddPatterns("Kingdom Hearts I", ";BESCES*", ";BASLUS-20370*", ";BISLPM-66233-*") .AddPatterns("Kingdom Hearts II", ";BISLPM-66675FM-**") .AddExtensions("Kingdom Hearts Birth By Sleep", "DAT") .AddPatterns("Kingdom Hearts Re: CoM", ";BISLUS-21799COM-*", ";BASLUS-21799COM-*") .AddExtensions("Kingdom Hearts 1.5/2.5 ReMIX", "DAT") .AddPatterns("Kingdom Hearts 0.2", ";ue4savegame*.sav") .AddPatterns("Kingdom Hearts III", ";__data__slot*.bin") .AddPatterns("Kingdom Hearts PC ports saves", "png") .AddExtensions("Final Fantasy VII REMAKE", ";ff7remake*") .AddExtensions("PS2 Save Archive", "psu", "cbs") .AddExtensions("PS2 Single Archive (PS3)", "psv") ; private readonly IWindowManager _windowManager; public bool IsFileOpen { get; private set; } public string CurrentFileName { get; private set; } public FileDialogManager(IWindowManager windowManager) { _windowManager = windowManager; } public void InjectFileName(string fileName, Action onSuccess) { IsFileOpen = true; CurrentFileName = fileName; using (var stream = File.OpenRead(fileName)) { try { onSuccess(stream); } catch { IsFileOpen = false; throw; } } } public void Open(Action onSuccess) => FileDialog.OnOpen(fileName => InjectFileName(fileName, onSuccess), Filters); public void Save(Action onSuccess) { if (IsFileOpen) { using (var stream = File.Create(CurrentFileName)) { onSuccess(stream); } } else { SaveAs(onSuccess); } } public void SaveAs(Action onSuccess) { FileDialog.OnSave(fileName => { using (var stream = File.Create(fileName)) { CurrentFileName = fileName; onSuccess(stream); } }, Filters, defaultFileName: CurrentFileName); } } } ================================================ FILE: KHSave.SaveEditor/Services/IAppIdentity.cs ================================================ namespace KHSave.SaveEditor.Services { public interface IAppIdentity { string Name { get; } string Version { get; } bool IsMicrosoftStore { get; } } } ================================================ FILE: KHSave.SaveEditor/Services/PatreonService.cs ================================================ using KHSave.SaveEditor.Models; using Newtonsoft.Json; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; namespace KHSave.SaveEditor.Services { public class PatreonService { private class PatreonResponse { [JsonProperty("patreonUrl")] public string PatreonUrl { get; set; } [JsonProperty("patrons")] public IEnumerable Patrons { get; set; } [JsonProperty("sponsorshipInfo")] public SponsorshipInfo SponsorshipInfo { get; set; } [JsonProperty("headerInfo")] public HeaderInfo HeaderInfo { get; set; } } public class SponsorshipInfo { [JsonProperty("title")] public string Title { get; set; } [JsonProperty("description")] public string Description { get; set; } [JsonProperty("startGoal")] public int StartGoal { get; set; } [JsonProperty("endGoal")] public int EndGoal { get; set; } } public class HeaderInfo { [JsonProperty("messages")] public HeaderMessage[] Messages { get; set; } } public class HeaderMessage { [JsonProperty("text")] public string Text { get; set; } [JsonProperty("title")] public string Title { get; set; } [JsonProperty("url")] public string Url { get; set; } [JsonProperty("fontSize")] public double FontSize { get; set; } [JsonProperty("isBold")] public bool IsBold { get; set; } [JsonProperty("isItalic")] public bool IsItalic { get; set; } } private class PatronDto { [JsonProperty("name")] public string Name { get; set; } [JsonProperty("profileUrl")] public string ProfileUrl { get; set; } [JsonProperty("tierId")] public int TierId { get; set; } [JsonProperty("color")] public string Color { get; set; } [JsonProperty("photoUrl")] public string PhotoUrl { get; set; } [JsonProperty("badgeUrl")] public string BadgeUrl { get; set; } [JsonProperty("glow")] public bool Glow { get; set; } } private readonly IAppIdentity _appIdentity; public PatreonService(IAppIdentity appIdentity) { _appIdentity = appIdentity; } public async Task GetPatreonInfo() { var response = await FetchPatreonInfo(); return new PatreonInfo { PatreonUrl = response.PatreonUrl, Patrons = response.Patrons?.Select(patron => new PatronModel { Name = patron.Name, ProfileUrl = patron.ProfileUrl, TierId = patron.TierId, Color = patron.Color, PhotoUrl = patron.PhotoUrl, BadgeUrl = patron.BadgeUrl, Glow = patron.Glow }), SponsorshipInfo = new Models.SponsorshipInfo { Title = response.SponsorshipInfo?.Title, Description = response.SponsorshipInfo?.Description, StartGoal = response.SponsorshipInfo?.StartGoal ?? 0, EndGoal = response.SponsorshipInfo?.EndGoal ?? 1, Count = response.Patrons?.Count() ?? 0 }, Messages = response.HeaderInfo?.Messages?.Select(x => new ServiceMessage { Text = x.Text, Title = x.Title, Url = x.Url, FontSize = x.FontSize, IsBold = x.IsBold, IsItalic = x.IsItalic, }), }; } private async Task FetchPatreonInfo() { using (var client = new HttpClient()) { var version = _appIdentity.Version; #if DEBUG version += "d"; #endif client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue("khsaveeditor", version)); var response = await client.GetAsync("https://api.xee.dev/v1/khsaveeditor/patreon"); var content = await response.Content.ReadAsStringAsync(); return JsonConvert.DeserializeObject(content); } } } } ================================================ FILE: KHSave.SaveEditor/Services/Pcsx2MemoryService.cs ================================================ using KHSave.SaveEditor.Common; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace KHSave.SaveEditor.Services { public static class Pcsx2MemoryService { private const int Pcsx2EmulationBaseAddress = 0x20000000; private const int Pcsx2EmulationMemoryLength = 0x2000000; private const int BootFileMaximumStringLength = 0x20; private static readonly int[] PlayStation2BootFileOffsets = new int[] { 0x12610, // Japan v1.00 0x15390, // American 1.60 0x15510, // Europe v1.60 0x155D0, // Europe v2.00 0x15B90, // Every other BIOS from v2.20 or above }; private class GameEntry { public string BootFile { get; } public long Offset { get; } public int Length { get; } public GameEntry(string titleId, long offset, int length) { BootFile = titleId; Offset = offset; Length = length; } } private static GameEntry[] Games => new GameEntry[] { new GameEntry("SLPM_610.25;1", 0x203F1210, 0x16c00), // Kingdom Hearts I Premium Showcase new GameEntry("SLPS_251.05;1", 0x203F2080, 0x16c00), // Kingdom Hearts I (JP) new GameEntry("SLUS_203.70;1", 0x203F1C90, 0x16c00), // Kingdom Hearts I (US) new GameEntry("SCUS_203.70;1", 0x203F1C90, 0x16c00), // Kingdom Hearts I (US) new GameEntry("SLES_509.67;1", 0x203F22C0, 0x16c00), // Kingdom Hearts I (UK) new GameEntry("SLES_509.68;1", 0x203F1AB0, 0x16c00), // Kingdom Hearts I (FR) new GameEntry("SLES_509.69;1", 0x203F3CF0, 0x16c00), // Kingdom Hearts I (DE) new GameEntry("SLES_509.70;1", 0x203F3900, 0x16c00), // Kingdom Hearts I (IT) new GameEntry("SLES_509.71;1", 0x203F4620, 0x16c00), // Kingdom Hearts I (ES) new GameEntry("SCES_509.67;1", 0x203F22C0, 0x16c00), // Kingdom Hearts I (UK) new GameEntry("SCES_509.68;1", 0x203F1AB0, 0x16c00), // Kingdom Hearts I (FR) new GameEntry("SCES_509.69;1", 0x203F3CF0, 0x16c00), // Kingdom Hearts I (DE) new GameEntry("SCES_509.70;1", 0x203F3900, 0x16c00), // Kingdom Hearts I (IT) new GameEntry("SCES_509.71;1", 0x203F4620, 0x16c00), // Kingdom Hearts I (ES) new GameEntry("SLPS_251.97;1", 0x203F8380, 0x16c00), // Kingdom Hearts I: Final Mix new GameEntry("SLPS_251.98;1", 0x203F8380, 0x16c00), // Kingdom Hearts I: Final Mix new GameEntry("SLPM_662.33;1", 0x2033DCE0, 0xb830), // Kingdom Hearts II (JP) new GameEntry("SLUS_210.05;1", 0x2033E860, 0xb4e0), // Kingdom Hearts II (US) new GameEntry("SCUS_210.05;1", 0x2033E860, 0xb4e0), // Kingdom Hearts II (US) new GameEntry("SLES_541.44;1", 0x2033ED60, 0xb4e0), // Kingdom Hearts II (UK) new GameEntry("SLES_542.32;1", 0x2033ED60, 0xb4e0), // Kingdom Hearts II (FR) new GameEntry("SLES_542.33;1", 0x2033ED60, 0xb4e0), // Kingdom Hearts II (DE) new GameEntry("SLES_542.34;1", 0x2033ED60, 0xb4e0), // Kingdom Hearts II (IT) new GameEntry("SCES_542.35;1", 0x2033ED60, 0xb4e0), // Kingdom Hearts II (ES) new GameEntry("SCES_541.44;1", 0x2033ED60, 0xb4e0), // Kingdom Hearts II (UK) new GameEntry("SCES_542.32;1", 0x2033ED60, 0xb4e0), // Kingdom Hearts II (FR) new GameEntry("SCES_542.33;1", 0x2033ED60, 0xb4e0), // Kingdom Hearts II (DE) new GameEntry("SCES_542.34;1", 0x2033ED60, 0xb4e0), // Kingdom Hearts II (IT) new GameEntry("SCES_542.35;1", 0x2033ED60, 0xb4e0), // Kingdom Hearts II (ES) new GameEntry("SLPM_666.75;1", 0x2032BB30, 0x10fc0), // Kingdom Hearts II: Final Mix }; public static async Task GetPcsx2ApplicationName(Process process, CancellationToken cancellationToken) { int byteReadCount; var data = new byte[BootFileMaximumStringLength]; while (!cancellationToken.IsCancellationRequested) { foreach (var offsets in PlayStation2BootFileOffsets) { using (var searchStream = new ProcessStream(process, Pcsx2EmulationBaseAddress + offsets, 0x20)) { byteReadCount = searchStream.Read(data, 0, data.Length); } var bootFile = Encoding.ASCII.GetString(data.TakeWhile(b => !b.Equals(0)).ToArray()); // Here the situation becomes weird. We can have 5 possible different scenario: // 1. The emulator is not booted. so the selected portion of memory will be undefined. // The task can wait for the user to load the game. // We can impose a quite long sleep, since it takes time from user's interaction. if (byteReadCount == 0) { await Task.Delay(1000); continue; } // 2. The emulator is booted to the bios, which will return "SYS" // or "LOGO". The task can wait for the BIOS to boot the game. // The boot can happen at any time... or not happen at all. if (bootFile == "SYS" || bootFile == "LOGO") { await Task.Delay(200); continue; } // 3. The game is booting, so the length of bootFile will be 0. // The task can wait for the game to be booted. // This operation is usually quite fast. if (bootFile.Length == 0) { await Task.Delay(10); continue; } // 4. A random string can be found for a fracion of second. // Since a game always starts with "SL" or "SC", prevents // to consider that random string as something useful. if (bootFile.StartsWith("SL") || bootFile.StartsWith("SC")) return bootFile; await Task.Delay(10); } } return null; } public static async Task CreateStreamFromPcsx2Process(Process process, CancellationToken cancellationToken) { while (!cancellationToken.IsCancellationRequested) { var bootFile = await GetPcsx2ApplicationName(process, cancellationToken); if (cancellationToken.IsCancellationRequested) return null; var game = Games.FirstOrDefault(x => x.BootFile == bootFile); if (game == null) return null; return new ProcessStream(process, game.Offset, (uint)game.Length); } return null; } } } ================================================ FILE: KHSave.SaveEditor/Services/ReporterService.cs ================================================ using KHSave.SaveEditor.Interfaces; using KHSave.SaveEditor.VersionCheck; using Newtonsoft.Json; using System; using System.Diagnostics; using System.Net.Http; using System.Text; using System.Threading.Tasks; namespace KHSave.SaveEditor.Services { public class ReporterService : IReporter { internal static class GlobalReporterService { private const string AnonymousCookie = "YW5vbnltb3Vz"; public static string Os => Environment.OSVersion.VersionString; public static string Ver => new DesktopCheckCurrentVersion().GetCurrentVersion(); public static void SendGameName(string name) { Send("open", new { gameId = name }); } public static void SendCrashReport(Exception ex) { Send("crash", new { exception = ex }); } public static void DeleteCookies() { Send("delete", new { cookie = GetCookie() }); Common.Global.Cookie = string.Empty; } private static string GetCookie() { if (Common.Global.AnonymousReporting) return AnonymousCookie; var cookie = Common.Global.Cookie; if (string.IsNullOrEmpty(cookie)) cookie = GenerateCookie(); return cookie; } private static string GenerateCookie() => Common.Global.Cookie = Convert.ToBase64String(Guid.NewGuid().ToByteArray()); private static Task Send(string endpoint, object obj) { #if !DEBUG if (Debugger.IsAttached) return Task.CompletedTask; return Task.Run(async () => { try { using var client = new HttpClient(); var content = new StringContent( JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json"); content.Headers.Add("kse-os", Os); content.Headers.Add("kse-ver", Ver); content.Headers.Add("kse-cookie", GetCookie()); var result = await client.PostAsync($"https://api.xee.dev/v1/khsaveeditor/{endpoint}", content); } catch { } }); #else return Task.CompletedTask; #endif } } public static ReporterService Instance { get; } = new ReporterService(); public void SendGameName(string name) => GlobalReporterService.SendGameName(name); public void SendCrashReport(Exception ex) => GlobalReporterService.SendCrashReport(ex); public void DeleteCookies() => GlobalReporterService.DeleteCookies(); } } ================================================ FILE: KHSave.SaveEditor/Services/TransferService.cs ================================================ using KHSave.Lib2; using KHSave.Services; using System; using System.Collections.Generic; using System.IO; using System.Reflection; namespace KHSave.SaveEditor.Services { public static class TransferService { public enum Result { Success, GameNotSupported, SourceNotCompatible, InternalError, } public static Result Transfer(object dstSave, Stream srcSaveStream) { Result result; if (dstSave is ISaveKh2 && (result = Transfer(dstSave, srcSaveStream, SaveKh2.IsValid, SaveKh2.Read, SaveKh2.TransferMappings)) != Result.GameNotSupported) return result; return Result.GameNotSupported; } public static Result Transfer( object save, Stream srcSaveStream, Func isValid, Func read, Dictionary> mappings) where T : class { if (!(save is T)) return Result.GameNotSupported; if (!isValid(srcSaveStream.SetPosition(0))) return Result.SourceNotCompatible; var srcSave = read(srcSaveStream.SetPosition(0)); if (!(srcSave is T)) return Result.InternalError; TransferServiceLL.CopySave(save, srcSave, mappings); return Result.Success; } } } ================================================ FILE: KHSave.SaveEditor/Services/UpdaterService.cs ================================================ using System; using System.Threading.Tasks; using System.Windows; using KHSave.SaveEditor.Interfaces; using KHSave.SaveEditor.VersionCheck; using KHSave.SaveEditor.Views; using Xe.VersionCheck; namespace KHSave.SaveEditor.Services { public class UpdaterService : IUpdater { private readonly IWindowManager windowManager; private readonly IAppIdentity _appIdentity; private bool IsItTimeForCheckingNewVersion { get { try { return Common.Global.LastUpdateCheck.AddDays(1) < DateTime.UtcNow; } catch { return true; } } } public bool IsAutomaticUpdatesEnabled { get => Common.Global.IsUpdateCheckingEnabled; set => Common.Global.IsUpdateCheckingEnabled = value; } public UpdaterService(IWindowManager windowManager) { this.windowManager = windowManager; _appIdentity = new DesktopAppIdentity(); } public Task AutomaticallyCheckLastVersionAsync() { if (IsAutomaticUpdatesEnabled && IsItTimeForCheckingNewVersion) return ForceCheckLastVersionAsync(); return Task.FromResult(true); } public async Task ForceCheckLastVersionAsync() { if (_appIdentity.IsMicrosoftStore) return false; UpdateLastTimeForCheckingNewVersion(); var checkCurrentVersion = new DesktopCheckCurrentVersion(); var checkLastVersion = new GithubCheckLatestVersion("xeeynamo", "kh3saveeditor"); var releaseUpdater = new VersionChecker(checkCurrentVersion, checkLastVersion); var lastVersion = await releaseUpdater.GetLatestVersionAsync(); if (lastVersion != null) { Application.Current.Dispatcher.Invoke(() => windowManager.Push(new UpdateWindow(lastVersion))); return true; } return false; } private void UpdateLastTimeForCheckingNewVersion() => Common.Global.LastUpdateCheck = DateTime.UtcNow; } } ================================================ FILE: KHSave.SaveEditor/Services/WindowManager.cs ================================================ using System; using System.Collections.Generic; using System.Windows; using KHSave.SaveEditor.Interfaces; using Unity; namespace KHSave.SaveEditor.Services { public class WindowManager : IWindowManager { private Stack _windowStack; private Window rootWindow; private readonly IUnityContainer _container; public bool IsRoot => _windowStack.Count == 1; public Window RootWindow { get => rootWindow; set { _windowStack = new Stack(); _windowStack.Push(value); } } public Window CurrentWindow => _windowStack.Peek(); public WindowManager(IUnityContainer container) { _container = container; } public bool? Push(Action onSetup, Func onSuccess) where TWindow : Window { var window = _container.Resolve(); onSetup?.Invoke(window); var result = Push(window); return result == true ? onSuccess?.Invoke(window) ?? true : result; } public bool? Push(Window window) { _windowStack.Push(window); return window.ShowDialog(); } public void Pull() { if (IsRoot) throw new Exception("Unable to pull root Window"); _windowStack.Pop().Close(); } } } ================================================ FILE: KHSave.SaveEditor/StyledControls.xaml ================================================ ================================================ FILE: KHSave.SaveEditor/VersionCheck/DesktopCheckCurrentVersion.cs ================================================ using KHSave.SaveEditor.Services; using Xe.VersionCheck; namespace KHSave.SaveEditor.VersionCheck { public class DesktopCheckCurrentVersion : ICheckCurrentVersion { private IAppIdentity _appIdentity; public DesktopCheckCurrentVersion() { _appIdentity = new DesktopAppIdentity(); } public string GetCurrentVersion() => _appIdentity.Version; } } ================================================ FILE: KHSave.SaveEditor/ViewModels/HomeViewModel.cs ================================================ using Xe.Tools; namespace KHSave.SaveEditor.ViewModels { public class HomeViewModel : BaseNotifyPropertyChanged { private const string DefaultFundLink = "https://github.com/sponsors/Xeeynamo"; private string _fundLink; private string _sponsorTitle; private string _sponsorDescription; private int _sponsorStartGoal; private int _sponsorEndGoal; private int _sponsorCount; public string FundLink { get => _fundLink; set { _fundLink = value; OnPropertyChanged(); } } public string SponsorHeaderInfo { get => _sponsorTitle; set { _sponsorTitle = value; OnPropertyChanged(); } } public int SponsorCount { get => _sponsorCount; set { _sponsorCount = value; OnPropertyChanged(); } } public int SponsorStartGoal { get => _sponsorStartGoal; set { _sponsorStartGoal = value; OnPropertyChanged(); } } public int SponsorEndGoal { get => _sponsorEndGoal; set { _sponsorEndGoal = value; OnPropertyChanged(); } } public string SponsorGoalDetails { get => _sponsorDescription; set { _sponsorDescription = value; OnPropertyChanged(); } } public HomeViewModel() { FundLink = DefaultFundLink; _sponsorEndGoal = 1; } } } ================================================ FILE: KHSave.SaveEditor/ViewModels/MainWindowViewModel.cs ================================================ /* Kingdom Save Editor Copyright (C) 2020 Luciano Ciccariello This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ using System.Diagnostics; using System.IO; using System.Linq; using System.Threading.Tasks; using System.Windows; using Xe.Tools; using Xe.Tools.Wpf.Commands; using KHSave.SaveEditor.Common; using KHSave.SaveEditor.Common.Contracts; using KHSave.Trssv; using KHSave.Lib2; using KHSave.LibRecom; using KHSave.SaveEditor.Common.Exceptions; using KHSave.Archives; using KHSave.SaveEditor.Common.Views; using KHSave.SaveEditor.Common.Services; using KHSave.SaveEditor.Interfaces; using System; using KHSave.SaveEditor.Services; using System.Windows.Controls; using KHSave.Lib3; using KHSave.LibFf7Remake; using KHSave.Lib1; using KHSave.LibBbs; using KHSave.LibDDD; using KHSave.SaveEditor.Views; using KHSave.LibPersona5; using System.Net.Http; using System.Net; using KHSave.LibPersona3; namespace KHSave.SaveEditor.ViewModels { public class MainWindowViewModel : BaseNotifyPropertyChanged { private readonly IFileDialogManager fileDialogManager; private readonly IWindowManager windowManager; private readonly IAlertMessage alertMessage; private readonly IUpdater updater; private readonly IAppIdentity _appIdentity; private readonly ContentFactory contentFactory; private readonly ReporterService reporterService; private object dataContext; private ContentType _saveKind; private bool _isProcess; private string _processTitleName; private ProcessStream _processStream; private string OriginalTitle => "Kingdom Save Editor"; public string CurrentVersion { get; } = new DesktopAppIdentity().Version; private Window Window => Application.Current.Windows.OfType().FirstOrDefault(x => x.IsActive); public string Title { get { if (_isProcess) return $"[P] {_processTitleName} | {OriginalTitle}"; return IsFileOpen ? $"{fileDialogManager.CurrentFileName} | {OriginalTitle}" : OriginalTitle; } } public Visibility UpdateVisibility => _appIdentity.IsMicrosoftStore ? Visibility.Collapsed : Visibility.Visible; public bool IsFileOpen => SaveKind != ContentType.Unload && fileDialogManager.IsFileOpen; public ContentType SaveKind { get => _saveKind; set { _saveKind = value; ChangeContent(_saveKind); } } public HomeViewModel HomeContext { get; } public RelayCommand OpenCommand { get; } public RelayCommand OpenPcsx2Command { get; } public RelayCommand SaveCommand { get; } public RelayCommand SaveAsCommand { get; } public RelayCommand ImportCommand { get; } public RelayCommand ExitCommand { get; } public RelayCommand GetLatestVersionCommand { get; } public RelayCommand OpenLinkCommand { get; } public RelayCommand OpenGitHubIssueLinkCommand { get; } public object DataContext { get => dataContext; set { dataContext = value; OnPropertyChanged(); } } public Action OnControlChanged { get; set; } public IRefreshUi RefreshUi { get; set; } public IOpenStream OpenStream { get; set; } public IWriteToStream WriteToStream { get; set; } public IGetSave GetSave { get; private set; } public bool IsAdvancedMode { get => Global.IsAdvancedMode; set { Global.IsAdvancedMode = value; InvokeRefreshUi(); } } public bool IsUpdateCheckingEnabled { get => updater.IsAutomaticUpdatesEnabled; set { updater.IsAutomaticUpdatesEnabled = value; OnPropertyChanged(); } } public bool IsAnonymousReporting { get => Global.AnonymousReporting; set { if (value == true) reporterService.DeleteCookies(); Global.AnonymousReporting = value; } } public MainWindowViewModel( IFileDialogManager fileDialogManager, IWindowManager windowManager, IAlertMessage alertMessage, IUpdater updater, IAppIdentity appIdentity, ContentFactory contentFactory, HomeViewModel homeContext) { this.fileDialogManager = fileDialogManager; this.windowManager = windowManager; this.alertMessage = alertMessage; this.updater = updater; _appIdentity = appIdentity; this.contentFactory = contentFactory; this.reporterService = ReporterService.Instance; HomeContext = homeContext; OpenCommand = new RelayCommand(o => fileDialogManager.Open(stream => Open(stream))); OpenPcsx2Command = new RelayCommand(o => OpenPcsx2(stream => Open(stream))); SaveCommand = new RelayCommand(o => { CatchException(() => { if (_isProcess) Save(_processStream); else { // Create in-memory back-up to recover disastrous savings var backupStream = new MemoryStream(); if (File.Exists(fileDialogManager.CurrentFileName)) { using (var originalStream = File.OpenRead(fileDialogManager.CurrentFileName)) originalStream.CopyTo(backupStream); } try { fileDialogManager.Save(Save); } catch { // Restore back-up before throwing an error fileDialogManager.Save(stream => backupStream.SetPosition(0).CopyTo(stream)); throw; } } }); }, x => IsFileOpen || _isProcess); SaveAsCommand = new RelayCommand(o => CatchException(() => fileDialogManager.SaveAs(Save)), x => IsFileOpen || _isProcess); ImportCommand = new RelayCommand(o => CatchException(() => { MessageBox.Show( "This functionality allows you to import a Kingdom Hearts II save of a region over another region.\n\n" + "Note that this will not import the whole save but only the known values, therefore some content of " + "your old save will still be present (eg. Gummiship, Journal, Minigames)."); new FileDialogManager(windowManager) .Open(stream => { if (GetSave == null) throw new Exception("The game you decided to operate with is not within the supported game list that supports import transfer."); switch (TransferService.Transfer(GetSave.GetSave(), stream)) { case TransferService.Result.Success: RefreshUi.RefreshUi(); break; case TransferService.Result.GameNotSupported: throw new Exception("The game you decided to operate with is NOT within the supported game list that supports import transfer."); case TransferService.Result.SourceNotCompatible: throw new Exception("The game you selected is different than the save you have currently opened, therefore it is not possible to import it."); case TransferService.Result.InternalError: throw new Exception("Oh well, this was not supposed to happen... you might want to report this. Sorry 😅"); } }); }), x => (IsFileOpen || _isProcess) && IsTransferSupported()); ExitCommand = new RelayCommand(x => Window.Close()); GetLatestVersionCommand = new RelayCommand(x => { Task.Run(async () => { var found = await updater.ForceCheckLastVersionAsync(); if (found == false) { Application.Current.Dispatcher.Invoke(() => alertMessage.Info("You are up to date :)", "Check update")); } }); }); OpenLinkCommand = new RelayCommand(url => Process.Start(new ProcessStartInfo() { FileName = url as string, UseShellExecute = true })); OpenGitHubIssueLinkCommand = new RelayCommand(async url => { using var client = new HttpClient(new HttpClientHandler { AllowAutoRedirect = false, AutomaticDecompression = DecompressionMethods.All, }); using var response = await client.GetAsync(url as string, HttpCompletionOption.ResponseHeadersRead); if (IsIssueSectionClosed(response)) MessageBox.Show("The bug report section is temporarily closed as some users written toxic comments in it and due to spam.", "Bug report section temporarily closed", MessageBoxButton.OK, MessageBoxImage.Warning); else OpenLinkCommand.Execute(url); }); } private bool IsTransferSupported() { switch (SaveKind) { case ContentType.KingdomHearts2: return true; default: return false; } } private void Buffered(Stream stream, Action call) => Buffered(stream, bufferedStream => { call(bufferedStream); return true; }); private T Buffered(Stream stream, Func call) { const int DefaultBufferLength = 1024 * 1024; var bufferLength = DefaultBufferLength; if (stream.Length > 0 && stream.Length < DefaultBufferLength) bufferLength = (int)stream.Length; var bufferedStream = stream is BufferedStream ? (BufferedStream)stream : new BufferedStream(stream, bufferLength); var result = call(bufferedStream); if (bufferedStream.CanWrite) bufferedStream.Flush(); return result; } public void Open(string fileName) => CatchException(() => { fileDialogManager.InjectFileName(fileName, stream => Open(stream)); }); public void OpenPcsx2(Func openStream) => CatchException(() => { var process = new AttachToProcessWindow("pcsx2").WaitForProcess(); if (process != null) { var stream = new AttachToPcsx2GameWindow().WaitForGame(process); if (stream != null) OpenProcessStream(stream, openStream); } }); public bool Open(Stream stream) => CatchException(() => { CloseProcessStream(); try { if (!Buffered(stream, TryOpen)) throw CreateUnsupportedSaveExceptiom(); InvokeRefreshUi(); OnPropertyChanged(nameof(Title)); return true; } catch (SaveNotSupportedException ex) { alertMessage.Error(ex); } return false; }); private void Save(Stream stream) { Buffered(stream, WriteToStream.WriteToStream); OnPropertyChanged(nameof(Title)); } public bool TryOpen(Stream stream) => TryOpenKh1(stream) || TryOpenKh2(stream) || TryOpenKhBbs(stream) || TryOpenKhDDD(stream) || TryOpenKhRecom(stream) || TryOpenKh02(stream) || TryOpenKh3(stream) || TryOpenFF7Remake(stream) || TryOpenPersona3(stream) || TryOpenPersona5(stream) || TryOpenArchive(stream); private bool Open(IArchiveFactory archiveFactory, Stream stream) { var archive = archiveFactory.Read(stream); stream.Close(); return Open(archive); } private bool Open(IArchive archive) { var result = windowManager.Push( onSetup: window => window.SetArchive(archive, fileDialogManager.CurrentFileName), onSuccess: window => Open(archive, window.SelectedEntry)); if (result == false) { ChangeContent(ContentType.Unload); } return true; } private bool Open(IArchive archive, IArchiveEntry archiveEntry) { bool result; using (var stream = new MemoryStream(archiveEntry.Data)) result = TryOpen(stream); if (!result) throw CreateUnsupportedSaveExceptiom(); // archiveEntry.Name // archiveEntry.DateCreated // archiveEntry.DateModified WriteToStream = new ArchiveWriteToStream(WriteToStream, archive, archiveEntry); return result; } public bool TryOpenArchive(Stream stream) { if (!ArchiveFactories.TryGetFactory(stream, out var archiveFactory)) return false; stream.Position = 0; return Open(archiveFactory, stream); } public bool TryOpenKh1(Stream stream) => TryOpen(SaveKh1.IsValid, stream, ContentType.KingdomHearts); public bool TryOpenKh2(Stream stream) => TryOpen(SaveKh2.IsValid, stream, ContentType.KingdomHearts2); public bool TryOpenKhBbs(Stream stream) => TryOpen(SaveKhBbs.IsValid, stream, ContentType.KingdomHeartsBbs); public bool TryOpenKhDDD(Stream stream) => TryOpen(SaveKhDDD.IsValid, stream, ContentType.KingdomHeartsDDD); public bool TryOpenKhRecom(Stream stream) => TryOpen(SaveKhRecom.IsValid, stream, ContentType.KingdomHeartsRecom); public bool TryOpenKh02(Stream stream) => TryOpen(SaveKh02.IsValid, stream, ContentType.KingdomHearts02); public bool TryOpenKh3(Stream stream) => TryOpen(SaveKh3.IsValid, stream, ContentType.KingdomHearts3); public bool TryOpenFF7Remake(Stream stream) => TryOpen(SaveFf7Remake.IsValid, stream, ContentType.FinalFantasy7Remake); public bool TryOpenPersona3(Stream stream) => TryOpen(SavePersona3.IsValid, stream, ContentType.Persona3); public bool TryOpenPersona5(Stream stream) => TryOpen(SavePersona5.IsValid, stream, ContentType.Persona5); public bool TryOpen(Func prediate, Stream stream, ContentType contentType) { if (!prediate(stream)) return false; _saveKind = contentType; ChangeContent(contentType, stream); return true; } private void OpenProcessStream(ProcessStream processStream, Func openStream) { if (openStream(processStream)) { _isProcess = true; _processStream = processStream; _processTitleName = $"PCSX2@{processStream.BaseAddress:X08}"; OnPropertyChanged(nameof(Title)); } } private void CloseProcessStream() { if (!_isProcess) return; _isProcess = false; _processTitleName = string.Empty; _processStream?.Dispose(); _processStream = null; OnPropertyChanged(nameof(Title)); } public static void CatchException(Action action) { try { action(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } public static T CatchException(Func action) { try { return action(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); return default(T); } } private static Exception CreateUnsupportedSaveExceptiom() => new SaveNotSupportedException("The specified save game is not recognized.\nBe sure to have the last version or that the save is decrypted or supported."); public void InvokeRefreshUi() => RefreshUi?.RefreshUi(); private void ChangeContent(ContentType contentType, Stream stream = null) { try { reporterService.SendGameName(contentType.ToString()); contentFactory.LoadIconPack(contentType); var contentResponse = contentFactory.Factory(contentType); RefreshUi = contentResponse.RefreshUi; WriteToStream = contentResponse.WriteToStream; GetSave = contentResponse.GetSave; if (stream != null) contentResponse.OpenStream.OpenStream(stream); OnPropertyChanged(nameof(SaveCommand)); OnPropertyChanged(nameof(SaveAsCommand)); OnPropertyChanged(nameof(ImportCommand)); OnControlChanged?.Invoke(contentResponse.Control); } catch (Exception ex) { ReporterService.Instance.SendCrashReport(ex); MessageBox.Show( $"An unhandled error has occurred:\n{ex.Message}\n\n{ex.StackTrace}", "Fatal error", MessageBoxButton.OK, MessageBoxImage.Error); } } private static bool IsIssueSectionClosed(HttpResponseMessage response) => (int)response.StatusCode >= 300 && (int)response.StatusCode < 400 && response.Headers.TryGetValues("Location", out var location) && location.Any() && location.First().EndsWith("/pulls"); } } ================================================ FILE: KHSave.SaveEditor/ViewModels/PatronViewModel.cs ================================================ using KHSave.SaveEditor.Models; using System; using System.Net.Cache; using System.Windows; using System.Windows.Media; using System.Windows.Media.Imaging; namespace KHSave.SaveEditor.ViewModels { public class PatronViewModel { public PatronViewModel(PatronModel patron) { Brush = GetColor(patron.Color); Name = patron.Name; //ImageUrl = patron.PhotoUrl; //BadgeUrl = patron.BadgeUrl; ProfileUrl = patron.ProfileUrl; if (!IsImageEmpty || !IsBadgeEmpty) { ImageSource = new BitmapImage(); ImageSource.BeginInit(); ImageSource.DecodePixelWidth = 64; // Arbitrary, does not respect DPI ImageSource.CacheOption = BitmapCacheOption.OnDemand; ImageSource.CreateOptions = BitmapCreateOptions.DelayCreation; ImageSource.UriCachePolicy = new RequestCachePolicy(RequestCacheLevel.CacheIfAvailable); ImageSource.UriSource = new Uri(IsImageEmpty ? BadgeUrl : ImageUrl); ImageSource.EndInit(); } BorderColor = IsStandardBadge ? new SolidColorBrush(Colors.Black) : Brush; } public Brush Brush { get; } public Brush BorderColor { get; } public string Name { get; } public string ImageUrl { get; } public string BadgeUrl { get; } public string ProfileUrl { get; } public BitmapImage ImageSource { get; } public Visibility ImageVisibility => IsImageEmpty ? Visibility.Collapsed : Visibility.Visible; public Visibility BadgeVisibility => IsBadgeEmpty ? Visibility.Collapsed : Visibility.Visible; public Visibility BorderVisibility => IsBadgeEmpty ? Visibility.Visible : Visibility.Collapsed; public Visibility NormalLabelVisibility => IsProfileUrlEmpty ? Visibility.Visible : Visibility.Collapsed; public Visibility ProfileLinkVisibility => IsProfileUrlEmpty ? Visibility.Collapsed : Visibility.Visible; private bool IsStandardBadge => IsImageEmpty && IsBadgeEmpty; private bool IsImageEmpty => string.IsNullOrWhiteSpace(ImageUrl); private bool IsBadgeEmpty => string.IsNullOrWhiteSpace(BadgeUrl); private bool IsProfileUrlEmpty => string.IsNullOrWhiteSpace(ProfileUrl); private static SolidColorBrush GetColor(string color) { if (string.IsNullOrWhiteSpace(color) || color[0] != '#') return new SolidColorBrush(Colors.Red); return new BrushConverter().ConvertFromString(color) as SolidColorBrush; } } } ================================================ FILE: KHSave.SaveEditor/Views/AttachToPcsx2GameWindow.xaml ================================================  ================================================ FILE: KHSave.SaveEditor/Views/AttachToPcsx2GameWindow.xaml.cs ================================================ using KHSave.SaveEditor.Common; using KHSave.SaveEditor.Services; using System.Diagnostics; using System.Drawing; using System.IO; using System.Threading; using System.Threading.Tasks; using System.Windows; namespace KHSave.SaveEditor.Views { /// /// Interaction logic for AttachToPcsx2GameWindow.xaml /// public partial class AttachToPcsx2GameWindow : Window { private ProcessStream _foundStream; public AttachToPcsx2GameWindow() { InitializeComponent(); } public ProcessStream WaitForGame(Process process) { using (var cancellationTokenSource = new CancellationTokenSource()) { var task = Task.Run(async () => { _foundStream = await Pcsx2MemoryService.CreateStreamFromPcsx2Process(process, cancellationTokenSource.Token); // If the search ends, ask to close the current window dialog Application.Current.Dispatcher.Invoke(() => { if (_foundStream == null && !cancellationTokenSource.Token.IsCancellationRequested) { MessageBox.Show( "The loaded game in PCSX2 is not supported.", "Error", MessageBoxButton.OK, MessageBoxImage.Error); } Close(); }); }, cancellationTokenSource.Token); ShowDialog(); // If the search is still running, ask to it to terminate ASAP. cancellationTokenSource.Cancel(); } return _foundStream; } } } ================================================ FILE: KHSave.SaveEditor/Views/AttachToProcessWindow.xaml ================================================  ================================================ FILE: KHSave.SaveEditor/Views/AttachToProcessWindow.xaml.cs ================================================ using System.Diagnostics; using System.Threading; using System.Threading.Tasks; using System.Windows; namespace KHSave.SaveEditor.Views { /// /// Interaction logic for AttachToProcessWindow.xaml /// public partial class AttachToProcessWindow : Window { private Process _foundProcess; public AttachToProcessWindow(string processName) { InitializeComponent(); DataContext = this; _foundProcess = null; ProcessName = processName; } public string ProcessName { get; } public Process WaitForProcess() { // There might be a chance that the process is already there, so do not bother // to create the window for that. var process = GetFirstProcessOrDefault(ProcessName); if (process != null) { Close(); return process; } // If not found, create a waiting dialog to give some feedback to the user. using (var cancellationTokenSource = new CancellationTokenSource()) { var task = Task.Run(async () => { await ProcessSearchAsync(cancellationTokenSource.Token); // If the search ends, ask to close the current window dialog Application.Current.Dispatcher.Invoke(() => Close()); }, cancellationTokenSource.Token); ShowDialog(); // If the search is still running, ask to it to terminate ASAP. cancellationTokenSource.Cancel(); } return _foundProcess; } private async Task ProcessSearchAsync(CancellationToken token) { const int Delay = 100; while (!token.IsCancellationRequested) { var processes = Process.GetProcessesByName(ProcessName); if (processes.Length > 0) { _foundProcess = processes[0]; return; } await Task.Delay(Delay); } } private static Process GetFirstProcessOrDefault(string processName) { var processes = Process.GetProcessesByName(processName); return processes.Length > 0 ? processes[0] : null; } } } ================================================ FILE: KHSave.SaveEditor/Views/HomeView.xaml ================================================ Kingdom Hearts (all versions) Kingdom Hearts II: EU, US, Final Mix (PS2,PS3,PS4,PC) Kingdom Hearts Re: Chain of Memories (PS2,PS4,PC) Kingdom Hearts: Birth By Sleep Final Mix (PSP,PS3,PS4,PC) Kingdom Hearts: Dream Drop Distance (3DS,PC) Kingdom Hearts 0.2 (PS4) Kingdom Hearts III + Re:Mind (PS4) Final Fantasy VII Remake Persona 5 and Persona 5 Royal Click to prepare to fund me today! ================================================ FILE: KHSave.SaveEditor/Views/HomeView.xaml.cs ================================================ using KHSave.SaveEditor.Services; using KHSave.SaveEditor.ViewModels; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; namespace KHSave.SaveEditor.Views { /// /// Interaction logic for UnloadedView.xaml /// public partial class HomeView : UserControl { public HomeView() { InitializeComponent(); } private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e) { Process.Start(new ProcessStartInfo() { FileName = e.Uri.AbsoluteUri, UseShellExecute = true }); e.Handled = true; } protected override void OnInitialized(EventArgs e) { base.OnInitialized(e); patronList.Children.Add(new Label() { Content = "Fetching the list of funders from the internet..." }); #if !DEBUG Task.Run(FetchAndPopulateSponsors()); #endif } private Func FetchAndPopulateSponsors() { return async () => { try { var patreonInfo = await new PatreonService(new DesktopAppIdentity()).GetPatreonInfo(); Application.Current.Dispatcher.Invoke(() => SetServerResponse(patreonInfo)); } catch { Application.Current.Dispatcher.Invoke(() => { patronList.Children.Clear(); patronList.Children.Add(new Label() { Content = "Unable to retrieve the list of funders form internet." }); }); } }; } private void SetServerResponse(Models.PatreonInfo patreonInfo) { var vm = DataContext as HomeViewModel; SetFundLink(vm, patreonInfo.PatreonUrl); SetSponsorList(vm, patreonInfo.Patrons); SetSponsorshipInfo(vm, patreonInfo.SponsorshipInfo); SetMessageList(vm, patreonInfo.Messages); } private void SetFundLink(HomeViewModel vm, string fundUrl) => vm.FundLink = fundUrl; private void SetSponsorList(HomeViewModel vm, IEnumerable sponsors) { if (sponsors == null) return; var patronViews = sponsors .Select((patron, i) => { return new PatronView((i + 1) / 32.0, patron.Glow) { DataContext = new PatronViewModel(patron) }; }) .Where(x => x != null); patronList.Children.Clear(); foreach (var patronView in patronViews) patronList.Children.Add(patronView); } private void SetSponsorshipInfo(HomeViewModel vm, Models.SponsorshipInfo info) { if (info == null) return; vm.SponsorHeaderInfo = info.Title; vm.SponsorGoalDetails = info.Description; vm.SponsorStartGoal = info.StartGoal; vm.SponsorEndGoal = info.EndGoal; vm.SponsorCount = info.Count; } private void SetMessageList(HomeViewModel vm, IEnumerable messages) { if (messages == null) return; var identity = new DesktopAppIdentity(); var denyDownloads = identity.IsMicrosoftStore; messageList.Children.Clear(); foreach (var message in messages.Where(x => denyDownloads == false || IsDownloadNewVersion(x) == false)) { messageList.Children.Add(new Separator { Margin = new Thickness(5) }); messageList.Children.Add(new ServiceMessageView { Margin = new Thickness(10, 0, 10, 0), Text = message.Text, Title = message.Title, Url = string.IsNullOrEmpty(message.Url) ? "" : message.Url, MyFontSize = message.FontSize <= 0 ? 12 : message.FontSize, IsBold = message.IsBold, IsItalic = message.IsItalic, }); } } private static bool IsDownloadNewVersion(Models.ServiceMessage message) { if (message.Title == "Download new version") return true; if (message.Url.StartsWith("https://github.com/Xeeynamo/KH3SaveEditor/releases")) return true; return false; } } } ================================================ FILE: KHSave.SaveEditor/Views/MainWindow.xaml ================================================ ================================================ FILE: KHSave.SaveEditor/Views/MainWindow.xaml.cs ================================================ using KHSave.SaveEditor.Interfaces; using KHSave.SaveEditor.Services; using KHSave.SaveEditor.ViewModels; using System; using System.IO; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; namespace KHSave.SaveEditor.Views { /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : Window { private readonly MainWindowViewModel context; private readonly IUpdater updater; public MainWindow( IWindowManager windowManager, IApplicationStartup applicationDebug, IUpdater updater, MainWindowViewModel vm) { InitializeComponent(); windowManager.RootWindow = this; DataContext = context = vm; context.OnControlChanged = control => { content.Children.Clear(); content.Children.Add(control); }; context.SaveKind = ContentType.Unload; if (!string.IsNullOrEmpty(applicationDebug.StartupFileName) && File.Exists(applicationDebug.StartupFileName)) context.Open(applicationDebug.StartupFileName); this.updater = updater; } private void Window_Loaded(object sender, EventArgs e) { Task.Run(() => updater.AutomaticallyCheckLastVersionAsync()); } private void Window_Drop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { var files = e.Data.GetData(DataFormats.FileDrop) as string[]; if (files?.Length > 0) { context.Open(files[0]); } } } } } ================================================ FILE: KHSave.SaveEditor/Views/PatronView.xaml ================================================  ================================================ FILE: KHSave.SaveEditor/Views/PatronView.xaml.cs ================================================ using System; using System.Collections.Generic; using System.Diagnostics; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Media.Effects; using System.Windows.Shapes; namespace KHSave.SaveEditor.Views { /// /// Interaction logic for PatronView.xaml /// public partial class PatronView : UserControl { private readonly double remainHiddenSeconds; private readonly bool glow; public PatronView() : this(0.0, false) { } public PatronView(double remainHiddenSeconds, bool glow) { InitializeComponent(); this.remainHiddenSeconds = remainHiddenSeconds; this.glow = glow; Opacity = 0.0; } private void UserControl_Loaded(object sender, RoutedEventArgs e) { if (glow) { glowEffect.BeginAnimation(DropShadowEffect.OpacityProperty, new DoubleAnimation { From = 0.0, To = 1.0, EasingFunction = new CircleEase(), Duration = new Duration(TimeSpan.FromSeconds(1)), RepeatBehavior = RepeatBehavior.Forever, AutoReverse = true }); lightGlow.BeginAnimation(Ellipse.OpacityProperty, new DoubleAnimation { From = 0.0, To = 1.0, EasingFunction = new CircleEase(), Duration = new Duration(TimeSpan.FromSeconds(1)), RepeatBehavior = RepeatBehavior.Forever, AutoReverse = true }); } BeginAnimation(OpacityProperty, new DoubleAnimation { From = 0.0, To = 1.0, EasingFunction = new CubicEase(), Duration = new Duration(TimeSpan.FromSeconds(0.5 + Math.Sqrt(remainHiddenSeconds / 2.0))), BeginTime = TimeSpan.FromSeconds(remainHiddenSeconds) }); } private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e) { Process.Start(new ProcessStartInfo() { FileName = e.Uri.AbsoluteUri, UseShellExecute = true }); e.Handled = true; } } } ================================================ FILE: KHSave.SaveEditor/Views/ServiceMessageView.xaml ================================================  ================================================ FILE: KHSave.SaveEditor/Views/ServiceMessageView.xaml.cs ================================================ using System.Diagnostics; using System.Windows; using System.Windows.Controls; namespace KHSave.SaveEditor.Views { /// /// Interaction logic for ServiceMessageView.xaml /// public partial class ServiceMessageView : UserControl { public ServiceMessageView() { InitializeComponent(); DataContext = this; } public string Text { get; set; } public string Title { get; set; } public string Url { get; set; } public bool IsBold { get; set; } public bool IsItalic { get; set; } public double MyFontSize { get; set; } public Visibility UrlVisibility => string.IsNullOrEmpty(Url) ? Visibility.Collapsed : Visibility.Visible; public FontWeight MyFontWeight => IsBold ? FontWeights.Bold : FontWeights.Normal; public FontStyle MyFontStyle => IsItalic ? FontStyles.Italic : FontStyles.Normal; private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e) { Process.Start(new ProcessStartInfo() { FileName = e.Uri.AbsoluteUri, UseShellExecute = true }); e.Handled = true; } } } ================================================ FILE: KHSave.SaveEditor/Views/UpdateWindow.xaml ================================================  ================================================ FILE: KHSave.SaveEditor.Ff7Remake/Views/DeveloperView.xaml.cs ================================================ using System.Windows.Controls; namespace KHSave.SaveEditor.Ff7Remake.Views { /// /// Interaction logic for DeveloperView.xaml /// public partial class DeveloperView : UserControl { public DeveloperView() { InitializeComponent(); } } } ================================================ FILE: KHSave.SaveEditor.Ff7Remake/Views/EquipmentEntryView.xaml ================================================  ================================================ FILE: KHSave.SaveEditor.Ff7Remake/Views/EquipmentEntryView.xaml.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace KHSave.SaveEditor.Ff7Remake.Views { /// /// Interaction logic for EquipmentEntryView.xaml /// public partial class EquipmentEntryView : UserControl { public EquipmentEntryView() { InitializeComponent(); } } } ================================================ FILE: KHSave.SaveEditor.Ff7Remake/Views/EquipmentsView.xaml ================================================  ================================================ FILE: KHSave.SaveEditor.Ff7Remake/Views/EquipmentsView.xaml.cs ================================================ using System.Windows.Controls; namespace KHSave.SaveEditor.Ff7Remake.Views { /// /// Interaction logic for EquipmentsViewModel.xaml /// public partial class EquipmentsView : UserControl { public EquipmentsView() { InitializeComponent(); } } } ================================================ FILE: KHSave.SaveEditor.Ff7Remake/Views/FF7RMainView.xaml ================================================  ================================================ FILE: KHSave.SaveEditor.Ff7Remake/Views/FF7RMainView.xaml.cs ================================================ using KHSave.SaveEditor.Ff7Remake.Data; using System.Windows.Controls; namespace KHSave.SaveEditor.Ff7Remake.Views { /// /// Interaction logic for FF7RMainView.xaml /// public partial class FF7RMainView : UserControl { public FF7RMainView() { InitializeComponent(); } } } ================================================ FILE: KHSave.SaveEditor.Ff7Remake/Views/GlobalView.xaml ================================================  ================================================ FILE: KHSave.SaveEditor.Ff7Remake/Views/GlobalView.xaml.cs ================================================ using System.Windows.Controls; namespace KHSave.SaveEditor.Ff7Remake.Views { /// /// Interaction logic for GlobalView.xaml /// public partial class GlobalView : UserControl { public GlobalView() { InitializeComponent(); } } } ================================================ FILE: KHSave.SaveEditor.Ff7Remake/Views/InventoryEntryView.xaml ================================================  This item have "Item kind" selection is empty and it is represented by a number. It means that the save editor do not know yet what item is it. If you can prove its name, you can request to add the item . To prove the item name, you can set a specific amount and see if in-game the value is there, or you set the amount of all your inventory to 0 but this item. The in-game inventory should be empty and the only item is the one you were searching for. ================================================ FILE: KHSave.SaveEditor.Ff7Remake/Views/InventoryEntryView.xaml.cs ================================================ using System.Diagnostics; using System.Windows.Controls; namespace KHSave.SaveEditor.Ff7Remake.Views { /// /// Interaction logic for InventoryEntryView.xaml /// public partial class InventoryEntryView : UserControl { public InventoryEntryView() { InitializeComponent(); } private void Hyperlink_RequestNavigate(object sender, System.Windows.Navigation.RequestNavigateEventArgs e) { Process.Start(new ProcessStartInfo() { FileName = e.Uri.AbsoluteUri, UseShellExecute = true }); e.Handled = true; } } } ================================================ FILE: KHSave.SaveEditor.Ff7Remake/Views/InventoryView.xaml ================================================  ================================================ FILE: KHSave.SaveEditor.Ff7Remake/Views/InventoryView.xaml.cs ================================================ using System.Windows.Controls; namespace KHSave.SaveEditor.Ff7Remake.Views { /// /// Interaction logic for InventoryView.xaml /// public partial class InventoryView : UserControl { public InventoryView() { InitializeComponent(); } } } ================================================ FILE: KHSave.SaveEditor.Ff7Remake/Views/MateriaEntryView.xaml ================================================  ================================================ FILE: KHSave.SaveEditor.Ff7Remake/Views/MateriaEntryView.xaml.cs ================================================ using System.Windows.Controls; namespace KHSave.SaveEditor.Ff7Remake.Views { /// /// Interaction logic for MateriaEntryView.xaml /// public partial class MateriaEntryView : UserControl { public MateriaEntryView() { InitializeComponent(); } } } ================================================ FILE: KHSave.SaveEditor.Ff7Remake/Views/MateriaView.xaml ================================================  ================================================ FILE: KHSave.SaveEditor.Ff7Remake/Views/MateriaView.xaml.cs ================================================ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace KHSave.SaveEditor.Ff7Remake.Views { /// /// Interaction logic for MateriaView.xaml /// public partial class MateriaView : UserControl { public MateriaView() { InitializeComponent(); } } } ================================================ FILE: KHSave.SaveEditor.Ff7Remake/Views/PositionView.xaml ================================================  ================================================ FILE: KHSave.SaveEditor.Ff7Remake/Views/PositionView.xaml.cs ================================================ using System.Windows.Controls; namespace KHSave.SaveEditor.Ff7Remake.Views { /// /// Interaction logic for PositionView.xaml /// public partial class PositionView : UserControl { public PositionView() { InitializeComponent(); } } } ================================================ FILE: KHSave.SaveEditor.Ff7Remake/Views/TeleportWindow.xaml ================================================  You can request to add your location location by specifying chapter location and coodinates, or you can add them manually to be integrated in the next version of the editor!