From ec9c6d88a8bac019e69eb1df84da0840732efabe Mon Sep 17 00:00:00 2001 From: Kurt Date: Thu, 5 Oct 2023 18:57:41 -0700 Subject: [PATCH] SV Teal Mask Support (#348) Closes #347 Closes #341 Co-authored-by: Michael Scire Co-authored-by: sora10pls <17801814+sora10pls@users.noreply.github.com> Co-authored-by: Lusamine <30205550+Lusamine@users.noreply.github.com> --- .editorconfig | 96 +-- pkNX.Containers/Misc/FnvHash.cs | 14 +- pkNX.Game/GameLocation.cs | 2 + pkNX.Game/pkNX.Game.csproj | 2 +- .../pkNX.Structures.FlatBuffers.Arceus.csproj | 5 +- .../pkNX.Structures.FlatBuffers.LGPE.csproj | 5 +- .../ReflectionDumpSchema.cs | 39 +- .../SchemaDump.cs | 39 +- ...X.Structures.FlatBuffers.Reflection.csproj | 4 +- .../Directory.Build.props | 26 + .../Gen9/Geometry/PackedVec2f.cs | 9 - .../Gen9/Geometry/PackedVec3f.cs | 62 -- .../Gen9/Geometry/PackedVec4f.cs | 19 - .../Gen9/Geometry/Transform.cs | 9 - .../Gen9/Geometry/Vec2f.cs | 8 - .../Gen9/Geometry/Vec3f.cs | 76 -- .../Schemas/Geometry/PackedVec2f.fbs | 7 - .../Schemas/Geometry/PackedVec3f.fbs | 8 - .../Schemas/Geometry/PackedVec4f.fbs | 9 - .../Schemas/Geometry/Transform.fbs | 9 - .../Schemas/Geometry/Vec3f.fbs | 7 - .../Schemas}/BGMEventArray.fbs | 5 + .../Schemas}/BGMEventType.fbs | 1 + .../Schemas}/EnvPokeVoiceLotterySetting.fbs | 1 + ...kNX.Structures.FlatBuffers.SV.Audio.csproj | 11 + .../Schemas/GameBaseParamTableArray.fbs | 43 ++ .../Schemas/OjamaPokemonCommonTableArray.fbs | 24 + .../Schemas/OjamaPokemonUniqueTableArray.fbs | 26 + .../Schemas/ResultDemoTableArray.fbs | 37 + .../Schemas/RewardActionTableArray.fbs | 32 + .../Schemas/RewardTableArray.fbs | 29 + .../Schemas/ScoreBaseTableArray.fbs | 24 + ...X.Structures.FlatBuffers.SV.Balloon.csproj | 11 + .../Schemas}/BattleConfig.fbs | 2 +- .../Schemas}/BattleEffectTableArray.fbs | 0 .../Schemas}/ItemTableArray.fbs | 0 .../NetBattle/NetBattleRuleDataArray.fbs | 0 .../NetBattle/NetBattleRuleParamArray.fbs | 2 +- .../Schemas}/PokeExceptionTableArray.fbs | 2 +- ...NX.Structures.FlatBuffers.SV.Battle.csproj | 11 + .../Food/FoodPokeTypeParam.cs | 0 .../Schemas}/BufDataArray.fbs | 4 +- .../Schemas}/CookingCommonData.fbs | 0 .../Schemas}/Enums/FoodSkillType.fbs | 0 .../Schemas}/Enums/IngredientType.fbs | 0 .../Schemas}/Enums/RecipeType.fbs | 0 .../Schemas}/Enums/SeasoningType.fbs | 0 .../Schemas}/FoodPowerComboArray.fbs | 0 .../Schemas}/IngredientDataArray.fbs | 0 .../Schemas}/IngredientDishDataArray.fbs | 0 .../Schemas}/Param/FoodPokeTypeParam.fbs | 0 .../Schemas}/Param/FoodPowerComboParam.fbs | 0 .../Schemas}/Param/FoodPowerParam.fbs | 0 .../Schemas}/Param/IngredientParam.fbs | 0 .../Schemas}/RecipeDataArray.fbs | 0 .../Schemas}/SeasoningDataArray.fbs | 0 .../Schemas}/TakaraSpicePowerTableArray.fbs | 0 ...X.Structures.FlatBuffers.SV.Cooking.csproj | 11 + .../Schemas}/EventAddPokemonArray.fbs | 2 +- .../Schemas}/EventSub012.RewardTableArray.fbs | 2 +- .../Schemas}/EventTradeListArray.fbs | 2 +- .../Schemas}/EventTradePokemonArray.fbs | 2 +- .../Schemas}/Motion/FieldNpcFaceType.fbs | 0 .../Schemas}/Motion/FieldNpcMotion.fbs | 0 .../Schemas}/Motion/FieldNpcMotionType.fbs | 0 .../Motion/FieldNpcPokemonDefaultMotion.fbs | 0 .../Schemas}/Motion/FieldNpcPokemonMotion.fbs | 0 .../Schemas}/Motion/NpcTrafficFormation.fbs | 0 .../Schemas}/Motion/NpcTrafficPartnerType.fbs | 0 .../Schemas}/NpcTrafficGenerateTableArray.fbs | 4 +- .../Schemas}/PopupWindowTableArray.fbs | 0 .../Schemas}/TreeShakePokemonArray.fbs | 0 ...kNX.Structures.FlatBuffers.SV.Event.csproj | 11 + .../Schemas}/ExerciseRewardData.fbs | 2 +- .../Schemas}/ExerciseSetting.fbs | 0 .../Schemas}/GymKooriCoursePokemonTable.fbs | 0 .../Schemas}/GymKooriCourseTableArray.fbs | 2 +- .../Schemas}/gym.denki.PopupPosTableArray.fbs | 0 .../gym.esper.ENDLESS_BORDERArray.fbs | 2 +- .../gym.esper.EXERCISE_COURSESArray.fbs | 0 .../Schemas}/gym.kusa.PokeTableArray.fbs | 0 .../Schemas}/gym.kusa.RewardTableArray.fbs | 2 +- .../Schemas}/gym.mizu.FixTableArray.fbs | 0 .../Schemas}/gym.mizu.SeriItemTableArray.fbs | 4 +- .../Schemas}/gym.mizu.SeriNpcTableArray.fbs | 2 +- .../Schemas}/gym.mizu.SeriVenueTableArray.fbs | 0 .../Schemas}/gym.mushi.GymMushiData.fbs | 2 +- .../gym.mushi.GymMushiRewardArray.fbs | 2 +- .../Schemas}/gym_denki.PopupFixTableArray.fbs | 0 .../pkNX.Structures.FlatBuffers.SV.Gym.csproj | 11 + .../Schemas}/DLCItemGroupArray.fbs | 26 +- .../Schemas}/DropItemDataArray.fbs | 4 +- .../Schemas}/Enums/BattleFunctionType.fbs | 0 .../Schemas}/Enums/EquipEffect.fbs | 1 + .../Schemas}/Enums/FieldFunctionType.fbs | 1 + .../Schemas}/Enums/FieldPocket.fbs | 1 + .../Schemas}/Enums/ItemGroup.fbs | 0 .../Schemas}/Enums/ItemType.fbs | 0 .../Schemas}/Enums/PluckEffect.fbs | 0 .../Schemas}/Enums/WorkPpSelTgt.fbs | 0 .../Schemas}/Enums/WorkType.fbs | 0 .../Schemas}/HiddenItemBiomeTableArray.fbs | 0 .../Schemas}/HiddenItemDataTableArray.fbs | 2 +- .../Schemas}/ItemDataArray.fbs | 2 +- .../Schemas}/ItemPointTypeBiomeTableArray.fbs | 0 .../Schemas}/MonohiroiItemArray.fbs | 2 +- .../Schemas}/RummagingItemDataTableArray.fbs | 2 +- ...pkNX.Structures.FlatBuffers.SV.Item.csproj | 11 + .../Schemas}/Ajito/AjitoCommonLevelArray.fbs | 0 .../Schemas}/Ajito/AjitoDifficultEnum.fbs | 0 .../Schemas}/Ajito/AjitoPokemonArray.fbs | 2 +- .../Schemas}/Ajito/AjitoTypeEnum.fbs | 0 .../Schemas}/Ajito/AjitoUnitArray.fbs | 0 .../Schemas}/GemSettingRootTableArray.fbs | 2 +- .../Schemas}/ObjectGenerationRangeArray.fbs | 0 .../Schemas}/RibbonDataArray.fbs | 0 ...pkNX.Structures.FlatBuffers.SV.Misc.csproj | 11 + .../Dumpers/PersonalDumperSV.cs | 20 +- .../Personal/PersonalTable.cs | 0 .../Personal/Types/PersonalInfoDex.cs | 0 .../Personal/Types/PersonalInfoEvolution.cs | 0 .../Personal/Types/PersonalInfoGender.cs | 0 .../Personal/Types/PersonalInfoStats.cs | 0 .../Personal/Wrapper/PersonalInfo9SV.cs | 12 +- .../Personal/Wrapper/PersonalTable9SV.cs | 0 .../Schemas}/PersonalInfoDetail.fbs | 0 .../Schemas}/PersonalInfoDex.fbs | 0 .../Schemas}/PersonalInfoEvolution.fbs | 0 .../Schemas}/PersonalInfoGender.fbs | 0 .../Schemas}/PersonalInfoHatch.fbs | 0 .../Schemas}/PersonalInfoMove.fbs | 0 .../Schemas}/PersonalInfoStats.fbs | 0 .../Schemas}/PersonalTable.fbs | 2 + ....Structures.FlatBuffers.SV.Personal.csproj | 11 + .../Schemas}/PicnicPokemon.fbs | 2 +- .../Schemas}/PicnicSystemData.fbs | 0 .../Schemas}/PicnicTablesetData.fbs | 2 +- .../Schemas}/PicnicWagonData.fbs | 0 ...NX.Structures.FlatBuffers.SV.Picnic.csproj | 11 + .../Raid/DeliveryRaidEnemyTableArray.cs | 0 .../Raid/DeliveryRaidFixedRewardItemArray.cs | 0 .../DeliveryRaidLotteryRewardItemArray.cs | 0 .../Raid/RaidFixedRewardItemArray.cs | 0 .../Raid/RaidLotteryRewardItemArray.cs | 0 .../Schemas}/DeliveryRaidEnemyTableArray.fbs | 0 .../DeliveryRaidFixedRewardItemArray.fbs | 0 .../DeliveryRaidLotteryRewardItemArray.fbs | 0 .../Schemas}/DeliveryRaidPriorityArray.fbs | 0 .../Schemas}/Enums/RaidBossExtraActType.fbs | 0 .../Enums/RaidBossExtraTimingType.fbs | 0 .../Enums/RaidRewardItemCategoryType.fbs | 0 .../Enums/RaidRewardItemSubjectType.fbs | 0 .../Schemas}/Enums/RaidRomType.fbs | 0 .../RaidDifficultyLotteryTableArray.fbs | 0 .../Schemas}/RaidEnemyInfo.fbs | 4 +- .../Schemas}/RaidEnemyTableArray.fbs | 0 .../Schemas}/RaidFixedRewardItemArray.fbs | 0 .../Schemas}/RaidFixedRewardItemInfo.fbs | 2 +- .../Schemas/RaidGemItemRewardBoost.fbs | 12 + .../Schemas}/RaidGemSetting.fbs | 0 .../Schemas}/RaidLotteryRewardItemArray.fbs | 4 +- .../Schemas}/RaidLotteryRewardItemInfo.fbs | 2 +- .../Schemas}/RaidPokeScaleDataArray.fbs | 4 +- .../Schemas}/RaidRewardSlotArray.fbs | 0 .../Schemas}/RaidTrainerArray.fbs | 12 +- ...pkNX.Structures.FlatBuffers.SV.Raid.csproj | 11 + .../FlatDummyEntry.cs | 0 .../Gen9/PokeData/PokeDataBattle.cs | 0 .../Gen9/PokeData/PokeDataEventBattle.cs | 0 .../Gen9/PokeData/PokeDataFull.cs | 0 .../Gen9/PokeData/PokeDataSymbol.cs | 0 .../Gen9/PokeData/PokeDataTrade.cs | 0 .../Gen9/PokeData/WazaSet.cs | 0 .../Gen9/SpeciesConverterSV.cs | 10 +- .../Schemas/Entity/CollisionShape.fbs | 0 .../Schemas/Entity/ComparisonOperatorType.fbs | 0 ...ditionSimpleAutoBattleHecklerAreaArray.fbs | 0 .../Schemas/Entity/OwnerInfo.fbs | 0 .../Schemas/Entity/ParamSet.fbs | 0 .../Schemas/Entity/PokeObjArray.fbs | 2 +- .../Schemas/Entity/PokemonTriggerID.fbs | 0 .../Schemas/Entity/PokemonUniquePathData.fbs | 0 .../Schemas/PokeData/PokeDataBattle.fbs | 2 +- .../Schemas/PokeData/PokeDataEventBattle.fbs | 2 +- .../Schemas/PokeData/PokeDataFull.fbs | 2 +- .../Schemas/PokeData/PokeDataSymbol.fbs | 2 +- .../Schemas/PokeData/PokeDataTrade.fbs | 2 +- .../Schemas/PokeData/WazaSet.fbs | 2 +- .../Schemas/Shared/BallType.fbs | 0 .../Schemas/Shared/BattleType.fbs | 0 .../Schemas/Shared}/ClerkType.fbs | 0 .../Schemas/Shared}/CondEnum.fbs | 0 .../Schemas/Shared/DataType.fbs | 0 .../Schemas/Shared/DevID.fbs | 7 + .../Schemas/Shared/GemType.fbs | 0 .../Schemas/Shared/ItemID.fbs | 117 +++ .../Schemas/Shared/LangType.fbs | 0 .../Schemas/Shared/MoveType.fbs | 0 .../Schemas/Shared}/PayType.fbs | 0 .../Schemas/Shared/PokeMemoType.fbs | 0 .../Schemas/Shared/RareType.fbs | 0 .../Schemas/Shared/RibbonType.fbs | 0 .../Schemas/Shared/SeikakuType.fbs | 0 .../Schemas/Shared}/SellType.fbs | 0 .../Schemas/Shared/Sex.fbs | 0 .../Schemas/Shared/SexType.fbs | 0 .../Schemas/Shared}/ShopKind.fbs | 0 .../Schemas/Shared/SizeType.fbs | 0 .../Schemas/Shared/TalentType.fbs | 0 .../Schemas/Shared/TokuseiType.fbs | 0 .../Schemas/Shared}/WazaID.fbs | 0 .../Schemas/Shared}/WazaType.fbs | 4 +- ...NX.Structures.FlatBuffers.SV.Shared.csproj | 11 + .../Schemas}/Talk/CheckCategory.fbs | 0 .../Schemas}/Talk/TalkData.fbs | 0 .../Schemas}/Talk/TalkRankEffect.fbs | 0 .../Schemas}/TrainerBodySize.fbs | 0 .../Schemas}/TrainerCategory.fbs | 0 .../Schemas}/TrainerDataArray.fbs | 6 +- .../Schemas}/TrainerEnvArray.fbs | 0 .../Schemas}/TrainerTypeArray.fbs | 2 +- ....Structures.FlatBuffers.SV.Trainers.csproj | 11 + .../Archive/TrinityFileDescriptors.cs | 0 .../Archive/TrinityFileSystemManager.cs | 6 +- .../Archive/TrinityFileSystemMetadata.cs | 0 .../Archive/TrinityPak.cs | 0 .../Archive/TrinityPakExtractor.cs | 5 +- .../Schemas}/TrinityComponent.fbs | 4 +- .../Schemas}/TrinityFileDescriptors.fbs | 0 .../Schemas}/TrinityFileSystemMetadata.fbs | 0 .../Schemas}/TrinityPak.fbs | 0 .../Schemas}/TrinityPropertySheet.fbs | 0 .../Schemas}/TrinitySceneObject.fbs | 2 +- .../Schemas}/TrinitySceneObjectTemplate.fbs | 0 .../Schemas}/TrinityScenePoint.fbs | 2 +- ...X.Structures.FlatBuffers.SV.Trinity.csproj | 12 + .../Schemas}/BattleBgmSelectTableArray.fbs | 0 .../Dressup/DressupCategoryDataArray.fbs | 0 .../Schemas}/Dressup/DressupItemDataArray.fbs | 0 .../Schemas}/Dressup/DressupShopDataArray.fbs | 0 .../Dressup/DressupStyleDataArray.fbs | 0 .../Dressup/DressupStylePresetDataArray.fbs | 0 .../Schemas}/Quest/DanQuestClearArray.fbs | 0 .../Schemas}/Quest/EventSkyFlyArray.fbs | 2 +- .../Schemas}/Quest/GymQuestClearArray.fbs | 0 .../Schemas}/Quest/NushiQuestClearArray.fbs | 0 .../Restaurant/RestaurantMenuDataArray.fbs | 0 .../Restaurant/RestaurantShopDataArray.fbs | 2 +- .../Schemas}/SchoolMapDataArray.fbs | 0 .../Schemas}/Shop/FriendlyShopDataArray.fbs | 6 +- .../Schemas}/Shop/LineupDataArray.fbs | 4 +- .../Schemas}/Shop/ShopDataArray.fbs | 2 +- .../Shop/ShopWazamachineDataArray.fbs | 4 +- .../Schemas}/SystemBgArray.fbs | 0 .../Schemas}/TipsDataArray.fbs | 0 .../ymap/DestinationDataTableArray.fbs | 0 .../ymap/NpcDestinationDataTableArray.fbs | 2 +- .../Schemas}/ymap/PlaceNameDataTableArray.fbs | 2 +- .../pkNX.Structures.FlatBuffers.SV.UI.csproj | 11 + .../Schemas}/Waza.fbs | 2 +- .../Schemas}/WazaAffinity.fbs | 0 .../Schemas}/WazaEntityStat.fbs | 0 .../Schemas}/WazaInflict.fbs | 0 ...pkNX.Structures.FlatBuffers.SV.Waza.csproj | 2 + .../Schemas}/Area/AreaInfo.fbs | 1 + .../Schemas}/Area/AreaTag.fbs | 0 .../Schemas}/Area/AreaType.fbs | 0 .../Schemas}/Area/BandType.fbs | 0 .../Schemas}/Area/Biome.fbs | 0 .../Schemas}/Area/BringItem.fbs | 2 +- .../Schemas}/Area/EnableTable.fbs | 0 .../Schemas}/Area/EncAttr.fbs | 5 + .../Schemas}/Area/EncBiome.fbs | 0 .../Schemas}/Area/FieldAttrKey.fbs | 5 + .../Schemas}/Area/FieldDungeonAreaArray.fbs | 0 .../Schemas}/Area/FieldInsideAreaArray.fbs | 0 .../Schemas}/Area/FieldLocationArray.fbs | 0 .../Schemas}/Area/FieldMainAreaArray.fbs | 0 .../Schemas}/Area/FieldSubAreaArray.fbs | 0 .../Schemas}/Area/OverrideBiome.fbs | 0 .../Schemas/DeliveryOutbreakArray.fbs | 23 + .../Schemas/DeliveryOutbreakPokeDataArray.fbs | 62 ++ .../Schemas}/EncountPokeDataArray.fbs | 4 +- .../Schemas}/EventBattlePokemonArray.fbs | 3 +- .../Schemas}/Field/AreaFlyFlagArray.fbs | 0 .../Schemas}/Field/CoinSymbolManager.fbs | 0 .../Schemas}/Field/ExclusionGroupArray.fbs | 0 .../Field/FieldAutoReturnPosTableArray.fbs | 0 .../Field/FieldAutomaticReturnTableArray.fbs | 0 .../Schemas}/Field/FieldCamera.fbs | 2 +- .../Schemas}/Field/FieldInteriorCamera.fbs | 2 +- .../Field/FieldOutOfRangeTableArray.fbs | 0 .../Schemas}/Field/FieldPlayer.fbs | 0 .../Schemas}/Field/FieldRide.fbs | 0 .../Field/GemSymbolLotteryTableArray.fbs | 2 +- .../Schemas}/Field/GemSymbolSetting.fbs | 0 .../Field/MapChangeParametersArray.fbs | 0 .../FixedSymbol/BehaviorFrequency.fbs | 0 .../Schemas}/FixedSymbol/FixedSymbolAI.fbs | 0 .../Schemas}/FixedSymbol/FixedSymbolArray.fbs | 2 +- .../FixedSymbol/FixedSymbolGeneration.fbs | 0 .../FixedSymbol/FixedSymbolManager.fbs | 0 .../FixedSymbol/GenerationPattern.fbs | 0 .../Schemas}/FixedSymbol/PokemonActionID.fbs | 0 .../Schemas/OutbreakPointArray.fbs | 29 + .../Schemas/OutbreakSetting.fbs | 16 + .../Schemas}/PointDataArray.fbs | 4 +- .../Schemas}/SettingData.fbs | 0 .../Schemas}/TimeTable.fbs | 0 .../Schemas}/VersionTable.fbs | 0 .../World/AreaInfo.cs | 0 .../World/DeliveryOutbreak.cs | 13 + .../World/DeliveryOutbreakPokeData.cs | 83 +++ .../World/EncountPokeData.cs | 10 + .../World/PointDataArray.cs | 0 ...kNX.Structures.FlatBuffers.SV.World.csproj | 11 + .../Schemas}/BlacklistArray.fbs | 0 .../Schemas}/DistributionRootArray.fbs | 0 .../Schemas}/MemoPokeTableArray.fbs | 8 +- .../Schemas}/RewardDataArray.fbs | 2 +- ...kNX.Structures.FlatBuffers.SV.Zukan.csproj | 11 + .../pkNX.Structures.FlatBuffers.SV.csproj | 37 - .../pkNX.Structures.FlatBuffers.SWSH.csproj | 5 +- .../Math/PackedVec3f.cs | 24 +- .../pkNX.Structures.FlatBuffers.csproj | 4 +- pkNX.Structures/Havok/HavokCollision.cs | 222 +++--- pkNX.Structures/Legality/Tables/Tables9.cs | 2 +- pkNX.WinForms/Dumping/DumperSV.Designer.cs | 493 ++++++------- pkNX.WinForms/Dumping/DumperSV.cs | 13 +- pkNX.WinForms/Dumping/DumperSV.resx | 120 ++++ pkNX.WinForms/Dumping/GameDumperSV.cs | 128 +++- pkNX.WinForms/Dumping/MassOutbreakRipper.cs | 565 +++++++++++++++ pkNX.WinForms/Dumping/SV/BoxCollision9.cs | 6 +- pkNX.WinForms/Dumping/SV/EncounterDumperSV.cs | 671 ++++++++++++------ pkNX.WinForms/Dumping/SV/LocationDatabase.cs | 4 +- .../Dumping/SV/LocationPointDetail.cs | 4 +- pkNX.WinForms/Dumping/SV/LocationStorage.cs | 86 ++- .../Dumping/SV/PaldeaCoinSymbolModel.cs | 8 +- .../Dumping/SV/PaldeaCoinSymbolPoint.cs | 2 +- pkNX.WinForms/Dumping/SV/PaldeaEncounter.cs | 14 +- pkNX.WinForms/Dumping/SV/PaldeaFieldModel.cs | 46 +- .../Dumping/SV/PaldeaFixedSymbolModel.cs | 35 +- .../Dumping/SV/PaldeaFixedSymbolPoint.cs | 2 +- pkNX.WinForms/Dumping/SV/PaldeaSceneModel.cs | 114 ++- pkNX.WinForms/Dumping/TeraRaidRipper.cs | 136 +++- pkNX.WinForms/Dumping/TextInput.Designer.cs | 56 +- pkNX.WinForms/Dumping/TextInput.cs | 18 +- pkNX.WinForms/Dumping/TextInput.resx | 120 ++++ pkNX.WinForms/Subforms/MapViewer9.Designer.cs | 75 +- pkNX.WinForms/Subforms/MapViewer9.cs | 211 ++---- pkNX.WinForms/Subforms/MapViewer9.resx | 60 ++ pkNX.WinForms/Subforms/PaldeaMap.cs | 132 ++++ pkNX.WinForms/UI/MainWindow.xaml.cs | 3 - pkNX.WinForms/pkNX.WinForms.csproj | 21 +- pkNX.sln | 136 +++- 355 files changed, 3654 insertions(+), 1432 deletions(-) create mode 100644 pkNX.Structures.FlatBuffers.SV/Directory.Build.props delete mode 100644 pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/PackedVec2f.cs delete mode 100644 pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/PackedVec3f.cs delete mode 100644 pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/PackedVec4f.cs delete mode 100644 pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/Transform.cs delete mode 100644 pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/Vec2f.cs delete mode 100644 pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/Vec3f.cs delete mode 100644 pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/PackedVec2f.fbs delete mode 100644 pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/PackedVec3f.fbs delete mode 100644 pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/PackedVec4f.fbs delete mode 100644 pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/Transform.fbs delete mode 100644 pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/Vec3f.fbs rename pkNX.Structures.FlatBuffers.SV/{Schemas/Audio => pkNX.Structures.FlatBuffers.SV.Audio/Schemas}/BGMEventArray.fbs (92%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Audio => pkNX.Structures.FlatBuffers.SV.Audio/Schemas}/BGMEventType.fbs (99%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Audio => pkNX.Structures.FlatBuffers.SV.Audio/Schemas}/EnvPokeVoiceLotterySetting.fbs (99%) create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/pkNX.Structures.FlatBuffers.SV.Audio.csproj create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/GameBaseParamTableArray.fbs create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/OjamaPokemonCommonTableArray.fbs create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/OjamaPokemonUniqueTableArray.fbs create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/ResultDemoTableArray.fbs create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/RewardActionTableArray.fbs create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/RewardTableArray.fbs create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/ScoreBaseTableArray.fbs create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/pkNX.Structures.FlatBuffers.SV.Balloon.csproj rename pkNX.Structures.FlatBuffers.SV/{Schemas/Battle => pkNX.Structures.FlatBuffers.SV.Battle/Schemas}/BattleConfig.fbs (98%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Battle => pkNX.Structures.FlatBuffers.SV.Battle/Schemas}/BattleEffectTableArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Battle => pkNX.Structures.FlatBuffers.SV.Battle/Schemas}/ItemTableArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Battle}/Schemas/NetBattle/NetBattleRuleDataArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Battle}/Schemas/NetBattle/NetBattleRuleParamArray.fbs (91%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Battle => pkNX.Structures.FlatBuffers.SV.Battle/Schemas}/PokeExceptionTableArray.fbs (92%) create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/pkNX.Structures.FlatBuffers.SV.Battle.csproj rename pkNX.Structures.FlatBuffers.SV/{Gen9 => pkNX.Structures.FlatBuffers.SV.Cooking}/Food/FoodPokeTypeParam.cs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.Cooking/Schemas}/BufDataArray.fbs (84%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Cooking => pkNX.Structures.FlatBuffers.SV.Cooking/Schemas}/CookingCommonData.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Cooking => pkNX.Structures.FlatBuffers.SV.Cooking/Schemas}/Enums/FoodSkillType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Cooking => pkNX.Structures.FlatBuffers.SV.Cooking/Schemas}/Enums/IngredientType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Cooking => pkNX.Structures.FlatBuffers.SV.Cooking/Schemas}/Enums/RecipeType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Cooking => pkNX.Structures.FlatBuffers.SV.Cooking/Schemas}/Enums/SeasoningType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Cooking => pkNX.Structures.FlatBuffers.SV.Cooking/Schemas}/FoodPowerComboArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Cooking => pkNX.Structures.FlatBuffers.SV.Cooking/Schemas}/IngredientDataArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Cooking => pkNX.Structures.FlatBuffers.SV.Cooking/Schemas}/IngredientDishDataArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Cooking => pkNX.Structures.FlatBuffers.SV.Cooking/Schemas}/Param/FoodPokeTypeParam.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Cooking => pkNX.Structures.FlatBuffers.SV.Cooking/Schemas}/Param/FoodPowerComboParam.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Cooking => pkNX.Structures.FlatBuffers.SV.Cooking/Schemas}/Param/FoodPowerParam.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Cooking => pkNX.Structures.FlatBuffers.SV.Cooking/Schemas}/Param/IngredientParam.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Cooking => pkNX.Structures.FlatBuffers.SV.Cooking/Schemas}/RecipeDataArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Cooking => pkNX.Structures.FlatBuffers.SV.Cooking/Schemas}/SeasoningDataArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Cooking => pkNX.Structures.FlatBuffers.SV.Cooking/Schemas}/TakaraSpicePowerTableArray.fbs (100%) create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/pkNX.Structures.FlatBuffers.SV.Cooking.csproj rename pkNX.Structures.FlatBuffers.SV/{Schemas/Event => pkNX.Structures.FlatBuffers.SV.Event/Schemas}/EventAddPokemonArray.fbs (88%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Event => pkNX.Structures.FlatBuffers.SV.Event/Schemas}/EventSub012.RewardTableArray.fbs (89%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Event => pkNX.Structures.FlatBuffers.SV.Event/Schemas}/EventTradeListArray.fbs (90%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Event => pkNX.Structures.FlatBuffers.SV.Event/Schemas}/EventTradePokemonArray.fbs (87%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Event => pkNX.Structures.FlatBuffers.SV.Event/Schemas}/Motion/FieldNpcFaceType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Event => pkNX.Structures.FlatBuffers.SV.Event/Schemas}/Motion/FieldNpcMotion.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Event => pkNX.Structures.FlatBuffers.SV.Event/Schemas}/Motion/FieldNpcMotionType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Event => pkNX.Structures.FlatBuffers.SV.Event/Schemas}/Motion/FieldNpcPokemonDefaultMotion.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Event => pkNX.Structures.FlatBuffers.SV.Event/Schemas}/Motion/FieldNpcPokemonMotion.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Event => pkNX.Structures.FlatBuffers.SV.Event/Schemas}/Motion/NpcTrafficFormation.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Event => pkNX.Structures.FlatBuffers.SV.Event/Schemas}/Motion/NpcTrafficPartnerType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Event => pkNX.Structures.FlatBuffers.SV.Event/Schemas}/NpcTrafficGenerateTableArray.fbs (97%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Event => pkNX.Structures.FlatBuffers.SV.Event/Schemas}/PopupWindowTableArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Event => pkNX.Structures.FlatBuffers.SV.Event/Schemas}/TreeShakePokemonArray.fbs (100%) create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/pkNX.Structures.FlatBuffers.SV.Event.csproj rename pkNX.Structures.FlatBuffers.SV/{Schemas/Gym => pkNX.Structures.FlatBuffers.SV.Gym/Schemas}/ExerciseRewardData.fbs (84%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Gym => pkNX.Structures.FlatBuffers.SV.Gym/Schemas}/ExerciseSetting.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Gym => pkNX.Structures.FlatBuffers.SV.Gym/Schemas}/GymKooriCoursePokemonTable.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Gym => pkNX.Structures.FlatBuffers.SV.Gym/Schemas}/GymKooriCourseTableArray.fbs (96%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Gym => pkNX.Structures.FlatBuffers.SV.Gym/Schemas}/gym.denki.PopupPosTableArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Gym => pkNX.Structures.FlatBuffers.SV.Gym/Schemas}/gym.esper.ENDLESS_BORDERArray.fbs (89%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Gym => pkNX.Structures.FlatBuffers.SV.Gym/Schemas}/gym.esper.EXERCISE_COURSESArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Gym => pkNX.Structures.FlatBuffers.SV.Gym/Schemas}/gym.kusa.PokeTableArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Gym => pkNX.Structures.FlatBuffers.SV.Gym/Schemas}/gym.kusa.RewardTableArray.fbs (89%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Gym => pkNX.Structures.FlatBuffers.SV.Gym/Schemas}/gym.mizu.FixTableArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Gym => pkNX.Structures.FlatBuffers.SV.Gym/Schemas}/gym.mizu.SeriItemTableArray.fbs (91%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Gym => pkNX.Structures.FlatBuffers.SV.Gym/Schemas}/gym.mizu.SeriNpcTableArray.fbs (95%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Gym => pkNX.Structures.FlatBuffers.SV.Gym/Schemas}/gym.mizu.SeriVenueTableArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Gym => pkNX.Structures.FlatBuffers.SV.Gym/Schemas}/gym.mushi.GymMushiData.fbs (96%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Gym => pkNX.Structures.FlatBuffers.SV.Gym/Schemas}/gym.mushi.GymMushiRewardArray.fbs (92%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Gym => pkNX.Structures.FlatBuffers.SV.Gym/Schemas}/gym_denki.PopupFixTableArray.fbs (100%) create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/pkNX.Structures.FlatBuffers.SV.Gym.csproj rename pkNX.Structures.FlatBuffers.SV/{Schemas/Item => pkNX.Structures.FlatBuffers.SV.Item/Schemas}/DLCItemGroupArray.fbs (79%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Item => pkNX.Structures.FlatBuffers.SV.Item/Schemas}/DropItemDataArray.fbs (84%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Item => pkNX.Structures.FlatBuffers.SV.Item/Schemas}/Enums/BattleFunctionType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Item => pkNX.Structures.FlatBuffers.SV.Item/Schemas}/Enums/EquipEffect.fbs (99%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Item => pkNX.Structures.FlatBuffers.SV.Item/Schemas}/Enums/FieldFunctionType.fbs (99%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Item => pkNX.Structures.FlatBuffers.SV.Item/Schemas}/Enums/FieldPocket.fbs (99%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Item => pkNX.Structures.FlatBuffers.SV.Item/Schemas}/Enums/ItemGroup.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Item => pkNX.Structures.FlatBuffers.SV.Item/Schemas}/Enums/ItemType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Item => pkNX.Structures.FlatBuffers.SV.Item/Schemas}/Enums/PluckEffect.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Item => pkNX.Structures.FlatBuffers.SV.Item/Schemas}/Enums/WorkPpSelTgt.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Item => pkNX.Structures.FlatBuffers.SV.Item/Schemas}/Enums/WorkType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Item => pkNX.Structures.FlatBuffers.SV.Item/Schemas}/HiddenItemBiomeTableArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Item => pkNX.Structures.FlatBuffers.SV.Item/Schemas}/HiddenItemDataTableArray.fbs (96%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Item => pkNX.Structures.FlatBuffers.SV.Item/Schemas}/ItemDataArray.fbs (98%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Item => pkNX.Structures.FlatBuffers.SV.Item/Schemas}/ItemPointTypeBiomeTableArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Item => pkNX.Structures.FlatBuffers.SV.Item/Schemas}/MonohiroiItemArray.fbs (97%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Item => pkNX.Structures.FlatBuffers.SV.Item/Schemas}/RummagingItemDataTableArray.fbs (95%) create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/pkNX.Structures.FlatBuffers.SV.Item.csproj rename pkNX.Structures.FlatBuffers.SV/{Schemas/Misc => pkNX.Structures.FlatBuffers.SV.Misc/Schemas}/Ajito/AjitoCommonLevelArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Misc => pkNX.Structures.FlatBuffers.SV.Misc/Schemas}/Ajito/AjitoDifficultEnum.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Misc => pkNX.Structures.FlatBuffers.SV.Misc/Schemas}/Ajito/AjitoPokemonArray.fbs (90%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Misc => pkNX.Structures.FlatBuffers.SV.Misc/Schemas}/Ajito/AjitoTypeEnum.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Misc => pkNX.Structures.FlatBuffers.SV.Misc/Schemas}/Ajito/AjitoUnitArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Misc => pkNX.Structures.FlatBuffers.SV.Misc/Schemas}/GemSettingRootTableArray.fbs (97%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/System => pkNX.Structures.FlatBuffers.SV.Misc/Schemas}/ObjectGenerationRangeArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Misc => pkNX.Structures.FlatBuffers.SV.Misc/Schemas}/RibbonDataArray.fbs (100%) create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/pkNX.Structures.FlatBuffers.SV.Misc.csproj rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Personal}/Dumpers/PersonalDumperSV.cs (94%) rename pkNX.Structures.FlatBuffers.SV/{Gen9 => pkNX.Structures.FlatBuffers.SV.Personal}/Personal/PersonalTable.cs (100%) rename pkNX.Structures.FlatBuffers.SV/{Gen9 => pkNX.Structures.FlatBuffers.SV.Personal}/Personal/Types/PersonalInfoDex.cs (100%) rename pkNX.Structures.FlatBuffers.SV/{Gen9 => pkNX.Structures.FlatBuffers.SV.Personal}/Personal/Types/PersonalInfoEvolution.cs (100%) rename pkNX.Structures.FlatBuffers.SV/{Gen9 => pkNX.Structures.FlatBuffers.SV.Personal}/Personal/Types/PersonalInfoGender.cs (100%) rename pkNX.Structures.FlatBuffers.SV/{Gen9 => pkNX.Structures.FlatBuffers.SV.Personal}/Personal/Types/PersonalInfoStats.cs (100%) rename pkNX.Structures.FlatBuffers.SV/{Gen9 => pkNX.Structures.FlatBuffers.SV.Personal}/Personal/Wrapper/PersonalInfo9SV.cs (94%) rename pkNX.Structures.FlatBuffers.SV/{Gen9 => pkNX.Structures.FlatBuffers.SV.Personal}/Personal/Wrapper/PersonalTable9SV.cs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Personal => pkNX.Structures.FlatBuffers.SV.Personal/Schemas}/PersonalInfoDetail.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Personal => pkNX.Structures.FlatBuffers.SV.Personal/Schemas}/PersonalInfoDex.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Personal => pkNX.Structures.FlatBuffers.SV.Personal/Schemas}/PersonalInfoEvolution.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Personal => pkNX.Structures.FlatBuffers.SV.Personal/Schemas}/PersonalInfoGender.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Personal => pkNX.Structures.FlatBuffers.SV.Personal/Schemas}/PersonalInfoHatch.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Personal => pkNX.Structures.FlatBuffers.SV.Personal/Schemas}/PersonalInfoMove.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Personal => pkNX.Structures.FlatBuffers.SV.Personal/Schemas}/PersonalInfoStats.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Personal => pkNX.Structures.FlatBuffers.SV.Personal/Schemas}/PersonalTable.fbs (96%) create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/pkNX.Structures.FlatBuffers.SV.Personal.csproj rename pkNX.Structures.FlatBuffers.SV/{Schemas/Picnic => pkNX.Structures.FlatBuffers.SV.Picnic/Schemas}/PicnicPokemon.fbs (98%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Picnic => pkNX.Structures.FlatBuffers.SV.Picnic/Schemas}/PicnicSystemData.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Picnic => pkNX.Structures.FlatBuffers.SV.Picnic/Schemas}/PicnicTablesetData.fbs (98%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Picnic => pkNX.Structures.FlatBuffers.SV.Picnic/Schemas}/PicnicWagonData.fbs (100%) create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/pkNX.Structures.FlatBuffers.SV.Picnic.csproj rename pkNX.Structures.FlatBuffers.SV/{Gen9 => pkNX.Structures.FlatBuffers.SV.Raid}/Raid/DeliveryRaidEnemyTableArray.cs (100%) rename pkNX.Structures.FlatBuffers.SV/{Gen9 => pkNX.Structures.FlatBuffers.SV.Raid}/Raid/DeliveryRaidFixedRewardItemArray.cs (100%) rename pkNX.Structures.FlatBuffers.SV/{Gen9 => pkNX.Structures.FlatBuffers.SV.Raid}/Raid/DeliveryRaidLotteryRewardItemArray.cs (100%) rename pkNX.Structures.FlatBuffers.SV/{Gen9 => pkNX.Structures.FlatBuffers.SV.Raid}/Raid/RaidFixedRewardItemArray.cs (100%) rename pkNX.Structures.FlatBuffers.SV/{Gen9 => pkNX.Structures.FlatBuffers.SV.Raid}/Raid/RaidLotteryRewardItemArray.cs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Raid => pkNX.Structures.FlatBuffers.SV.Raid/Schemas}/DeliveryRaidEnemyTableArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Raid => pkNX.Structures.FlatBuffers.SV.Raid/Schemas}/DeliveryRaidFixedRewardItemArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Raid => pkNX.Structures.FlatBuffers.SV.Raid/Schemas}/DeliveryRaidLotteryRewardItemArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Raid => pkNX.Structures.FlatBuffers.SV.Raid/Schemas}/DeliveryRaidPriorityArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Raid => pkNX.Structures.FlatBuffers.SV.Raid/Schemas}/Enums/RaidBossExtraActType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Raid => pkNX.Structures.FlatBuffers.SV.Raid/Schemas}/Enums/RaidBossExtraTimingType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Raid => pkNX.Structures.FlatBuffers.SV.Raid/Schemas}/Enums/RaidRewardItemCategoryType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Raid => pkNX.Structures.FlatBuffers.SV.Raid/Schemas}/Enums/RaidRewardItemSubjectType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Raid => pkNX.Structures.FlatBuffers.SV.Raid/Schemas}/Enums/RaidRomType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Raid => pkNX.Structures.FlatBuffers.SV.Raid/Schemas}/RaidDifficultyLotteryTableArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Raid => pkNX.Structures.FlatBuffers.SV.Raid/Schemas}/RaidEnemyInfo.fbs (96%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Raid => pkNX.Structures.FlatBuffers.SV.Raid/Schemas}/RaidEnemyTableArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Raid => pkNX.Structures.FlatBuffers.SV.Raid/Schemas}/RaidFixedRewardItemArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Raid => pkNX.Structures.FlatBuffers.SV.Raid/Schemas}/RaidFixedRewardItemInfo.fbs (90%) create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidGemItemRewardBoost.fbs rename pkNX.Structures.FlatBuffers.SV/{Schemas/Raid => pkNX.Structures.FlatBuffers.SV.Raid/Schemas}/RaidGemSetting.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Raid => pkNX.Structures.FlatBuffers.SV.Raid/Schemas}/RaidLotteryRewardItemArray.fbs (96%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Raid => pkNX.Structures.FlatBuffers.SV.Raid/Schemas}/RaidLotteryRewardItemInfo.fbs (88%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Raid => pkNX.Structures.FlatBuffers.SV.Raid/Schemas}/RaidPokeScaleDataArray.fbs (83%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Raid => pkNX.Structures.FlatBuffers.SV.Raid/Schemas}/RaidRewardSlotArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Raid => pkNX.Structures.FlatBuffers.SV.Raid/Schemas}/RaidTrainerArray.fbs (81%) create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/pkNX.Structures.FlatBuffers.SV.Raid.csproj rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/FlatDummyEntry.cs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Gen9/PokeData/PokeDataBattle.cs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Gen9/PokeData/PokeDataEventBattle.cs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Gen9/PokeData/PokeDataFull.cs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Gen9/PokeData/PokeDataSymbol.cs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Gen9/PokeData/PokeDataTrade.cs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Gen9/PokeData/WazaSet.cs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Gen9/SpeciesConverterSV.cs (91%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Entity/CollisionShape.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Entity/ComparisonOperatorType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Entity/ConditionSimpleAutoBattleHecklerAreaArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Entity/OwnerInfo.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Entity/ParamSet.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Entity/PokeObjArray.fbs (97%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Entity/PokemonTriggerID.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Entity/PokemonUniquePathData.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/PokeData/PokeDataBattle.fbs (96%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/PokeData/PokeDataEventBattle.fbs (97%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/PokeData/PokeDataFull.fbs (98%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/PokeData/PokeDataSymbol.fbs (95%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/PokeData/PokeDataTrade.fbs (97%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/PokeData/WazaSet.fbs (75%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Shared/BallType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Shared/BattleType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI/Enums => pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared}/ClerkType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI/Enums => pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared}/CondEnum.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Shared/DataType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Shared/DevID.fbs (99%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Shared/GemType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Shared/ItemID.fbs (88%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Shared/LangType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Shared/MoveType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI/Enums => pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared}/PayType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Shared/PokeMemoType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Shared/RareType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Shared/RibbonType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Shared/SeikakuType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI/Enums => pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared}/SellType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Shared/Sex.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Shared/SexType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI/Enums => pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared}/ShopKind.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Shared/SizeType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Shared/TalentType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{ => pkNX.Structures.FlatBuffers.SV.Shared}/Schemas/Shared/TokuseiType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Waza => pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared}/WazaID.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Waza => pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared}/WazaType.fbs (61%) create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/pkNX.Structures.FlatBuffers.SV.Shared.csproj rename pkNX.Structures.FlatBuffers.SV/{Schemas/Trainers => pkNX.Structures.FlatBuffers.SV.Trainers/Schemas}/Talk/CheckCategory.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Trainers => pkNX.Structures.FlatBuffers.SV.Trainers/Schemas}/Talk/TalkData.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Trainers => pkNX.Structures.FlatBuffers.SV.Trainers/Schemas}/Talk/TalkRankEffect.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Trainers => pkNX.Structures.FlatBuffers.SV.Trainers/Schemas}/TrainerBodySize.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Trainers => pkNX.Structures.FlatBuffers.SV.Trainers/Schemas}/TrainerCategory.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Trainers => pkNX.Structures.FlatBuffers.SV.Trainers/Schemas}/TrainerDataArray.fbs (89%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Trainers => pkNX.Structures.FlatBuffers.SV.Trainers/Schemas}/TrainerEnvArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Trainers => pkNX.Structures.FlatBuffers.SV.Trainers/Schemas}/TrainerTypeArray.fbs (95%) create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/pkNX.Structures.FlatBuffers.SV.Trainers.csproj rename pkNX.Structures.FlatBuffers.SV/{Gen9 => pkNX.Structures.FlatBuffers.SV.Trinity}/Archive/TrinityFileDescriptors.cs (100%) rename pkNX.Structures.FlatBuffers.SV/{Gen9 => pkNX.Structures.FlatBuffers.SV.Trinity}/Archive/TrinityFileSystemManager.cs (93%) rename pkNX.Structures.FlatBuffers.SV/{Gen9 => pkNX.Structures.FlatBuffers.SV.Trinity}/Archive/TrinityFileSystemMetadata.cs (100%) rename pkNX.Structures.FlatBuffers.SV/{Gen9 => pkNX.Structures.FlatBuffers.SV.Trinity}/Archive/TrinityPak.cs (100%) rename pkNX.Structures.FlatBuffers.SV/{Gen9 => pkNX.Structures.FlatBuffers.SV.Trinity}/Archive/TrinityPakExtractor.cs (95%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Trinity => pkNX.Structures.FlatBuffers.SV.Trinity/Schemas}/TrinityComponent.fbs (94%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Trinity => pkNX.Structures.FlatBuffers.SV.Trinity/Schemas}/TrinityFileDescriptors.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Trinity => pkNX.Structures.FlatBuffers.SV.Trinity/Schemas}/TrinityFileSystemMetadata.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Trinity => pkNX.Structures.FlatBuffers.SV.Trinity/Schemas}/TrinityPak.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Trinity => pkNX.Structures.FlatBuffers.SV.Trinity/Schemas}/TrinityPropertySheet.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Trinity => pkNX.Structures.FlatBuffers.SV.Trinity/Schemas}/TrinitySceneObject.fbs (93%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Trinity => pkNX.Structures.FlatBuffers.SV.Trinity/Schemas}/TrinitySceneObjectTemplate.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Trinity => pkNX.Structures.FlatBuffers.SV.Trinity/Schemas}/TrinityScenePoint.fbs (85%) create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/pkNX.Structures.FlatBuffers.SV.Trinity.csproj rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.UI/Schemas}/BattleBgmSelectTableArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.UI/Schemas}/Dressup/DressupCategoryDataArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.UI/Schemas}/Dressup/DressupItemDataArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.UI/Schemas}/Dressup/DressupShopDataArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.UI/Schemas}/Dressup/DressupStyleDataArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.UI/Schemas}/Dressup/DressupStylePresetDataArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.UI/Schemas}/Quest/DanQuestClearArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.UI/Schemas}/Quest/EventSkyFlyArray.fbs (98%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.UI/Schemas}/Quest/GymQuestClearArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.UI/Schemas}/Quest/NushiQuestClearArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.UI/Schemas}/Restaurant/RestaurantMenuDataArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.UI/Schemas}/Restaurant/RestaurantShopDataArray.fbs (92%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.UI/Schemas}/SchoolMapDataArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.UI/Schemas}/Shop/FriendlyShopDataArray.fbs (81%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.UI/Schemas}/Shop/LineupDataArray.fbs (84%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.UI/Schemas}/Shop/ShopDataArray.fbs (87%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.UI/Schemas}/Shop/ShopWazamachineDataArray.fbs (89%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.UI/Schemas}/SystemBgArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.UI/Schemas}/TipsDataArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.UI/Schemas}/ymap/DestinationDataTableArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.UI/Schemas}/ymap/NpcDestinationDataTableArray.fbs (94%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/UI => pkNX.Structures.FlatBuffers.SV.UI/Schemas}/ymap/PlaceNameDataTableArray.fbs (92%) create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/pkNX.Structures.FlatBuffers.SV.UI.csproj rename pkNX.Structures.FlatBuffers.SV/{Schemas/Waza => pkNX.Structures.FlatBuffers.SV.Waza/Schemas}/Waza.fbs (98%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Waza => pkNX.Structures.FlatBuffers.SV.Waza/Schemas}/WazaAffinity.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Waza => pkNX.Structures.FlatBuffers.SV.Waza/Schemas}/WazaEntityStat.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Waza => pkNX.Structures.FlatBuffers.SV.Waza/Schemas}/WazaInflict.fbs (100%) create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/pkNX.Structures.FlatBuffers.SV.Waza.csproj rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Area/AreaInfo.fbs (97%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Area/AreaTag.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Area/AreaType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Area/BandType.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Area/Biome.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Area/BringItem.fbs (82%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Area/EnableTable.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Area/EncAttr.fbs (82%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Area/EncBiome.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Area/FieldAttrKey.fbs (89%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Area/FieldDungeonAreaArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Area/FieldInsideAreaArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Area/FieldLocationArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Area/FieldMainAreaArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Area/FieldSubAreaArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Area/OverrideBiome.fbs (100%) create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/DeliveryOutbreakArray.fbs create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/DeliveryOutbreakPokeDataArray.fbs rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/EncountPokeDataArray.fbs (94%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/EventBattlePokemonArray.fbs (88%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Field/AreaFlyFlagArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Field/CoinSymbolManager.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Field/ExclusionGroupArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Field/FieldAutoReturnPosTableArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Field/FieldAutomaticReturnTableArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Field/FieldCamera.fbs (97%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Field/FieldInteriorCamera.fbs (90%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Field/FieldOutOfRangeTableArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Field/FieldPlayer.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Field/FieldRide.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Field/GemSymbolLotteryTableArray.fbs (94%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Field/GemSymbolSetting.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/Field/MapChangeParametersArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/FixedSymbol/BehaviorFrequency.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/FixedSymbol/FixedSymbolAI.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/FixedSymbol/FixedSymbolArray.fbs (90%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/FixedSymbol/FixedSymbolGeneration.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/FixedSymbol/FixedSymbolManager.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/FixedSymbol/GenerationPattern.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/FixedSymbol/PokemonActionID.fbs (100%) create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/OutbreakPointArray.fbs create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/OutbreakSetting.fbs rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/PointDataArray.fbs (84%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/SettingData.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/TimeTable.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/World => pkNX.Structures.FlatBuffers.SV.World/Schemas}/VersionTable.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Gen9 => pkNX.Structures.FlatBuffers.SV.World}/World/AreaInfo.cs (100%) create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/DeliveryOutbreak.cs create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/DeliveryOutbreakPokeData.cs create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/EncountPokeData.cs rename pkNX.Structures.FlatBuffers.SV/{Gen9 => pkNX.Structures.FlatBuffers.SV.World}/World/PointDataArray.cs (100%) create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/pkNX.Structures.FlatBuffers.SV.World.csproj rename pkNX.Structures.FlatBuffers.SV/{Schemas/Zukan => pkNX.Structures.FlatBuffers.SV.Zukan/Schemas}/BlacklistArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Zukan => pkNX.Structures.FlatBuffers.SV.Zukan/Schemas}/DistributionRootArray.fbs (100%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Zukan => pkNX.Structures.FlatBuffers.SV.Zukan/Schemas}/MemoPokeTableArray.fbs (81%) rename pkNX.Structures.FlatBuffers.SV/{Schemas/Zukan => pkNX.Structures.FlatBuffers.SV.Zukan/Schemas}/RewardDataArray.fbs (91%) create mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/pkNX.Structures.FlatBuffers.SV.Zukan.csproj delete mode 100644 pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.csproj create mode 100644 pkNX.WinForms/Dumping/DumperSV.resx create mode 100644 pkNX.WinForms/Dumping/MassOutbreakRipper.cs create mode 100644 pkNX.WinForms/Dumping/TextInput.resx create mode 100644 pkNX.WinForms/Subforms/MapViewer9.resx create mode 100644 pkNX.WinForms/Subforms/PaldeaMap.cs diff --git a/.editorconfig b/.editorconfig index 36b0a88c..6ebb4863 100644 --- a/.editorconfig +++ b/.editorconfig @@ -9,12 +9,35 @@ insert_final_newline = true trim_trailing_whitespace = true end_of_line = lf +# Solution Files +[*.sln] +indent_style = space +indent_size = 4 +insert_final_newline = true +trim_trailing_whitespace = true + # XML Project Files [*.csproj] +indent_style = space indent_size = 2 +# Code Files +[*.fbs] +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 2 +tab_width = 2 +end_of_line = lf + # Code Files [*.cs] +insert_final_newline = true +trim_trailing_whitespace = true +indent_style = space +indent_size = 4 +tab_width = 4 +end_of_line = lf csharp_prefer_braces = when_multiline:warning dotnet_diagnostic.IDE0047.severity = none dotnet_diagnostic.IDE0048.severity = none @@ -22,21 +45,6 @@ dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:sug dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:suggest dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:suggest dotnet_style_parentheses_in_other_operators = always_for_clarity:suggest -csharp_indent_labels = one_less_than_current -csharp_using_directive_placement = outside_namespace:silent -csharp_prefer_simple_using_statement = true:suggestion -csharp_style_namespace_declarations = block_scoped:silent -csharp_style_prefer_method_group_conversion = true:silent -csharp_style_prefer_top_level_statements = true:silent -csharp_style_prefer_primary_constructors = true:suggestion -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 # Generated Code [**/obj/**.cs] @@ -55,61 +63,5 @@ dotnet_analyzer_diagnostic.severity = none # 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 -dotnet_style_coalesce_expression = true:suggestion -dotnet_style_null_propagation = true:suggestion -dotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion -dotnet_style_prefer_auto_properties = true:silent -dotnet_style_object_initializer = true:suggestion -dotnet_style_collection_initializer = true:suggestion -dotnet_style_prefer_simplified_boolean_expressions = true:suggestion -dotnet_style_prefer_conditional_expression_over_assignment = true:silent -dotnet_style_prefer_conditional_expression_over_return = true:silent -dotnet_style_explicit_tuple_names = true:suggestion -dotnet_style_prefer_inferred_tuple_names = true:suggestion -dotnet_style_prefer_inferred_anonymous_type_member_names = true:suggestion -dotnet_style_prefer_compound_assignment = true:suggestion -dotnet_style_prefer_simplified_interpolation = true:suggestion -dotnet_style_namespace_match_folder = true:suggestion +dotnet_naming_style.begins_with_i.capitalization = pascal_case \ No newline at end of file diff --git a/pkNX.Containers/Misc/FnvHash.cs b/pkNX.Containers/Misc/FnvHash.cs index 06a2ed0b..a1ba05b3 100644 --- a/pkNX.Containers/Misc/FnvHash.cs +++ b/pkNX.Containers/Misc/FnvHash.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System; namespace pkNX.Containers; @@ -17,7 +17,7 @@ public static class FnvHash /// Input sequence /// Initial hash value /// Computed hash code - public static ulong HashFnv1_64(IEnumerable input, ulong hash = kOffsetBasis_64) + public static ulong HashFnv1_64(ReadOnlySpan input, ulong hash = kOffsetBasis_64) { foreach (var c in input) { @@ -33,7 +33,7 @@ public static ulong HashFnv1_64(IEnumerable input, ulong hash = kOffsetBas /// Input sequence /// Initial hash value /// Computed hash code - public static ulong HashFnv1_64(IEnumerable input, ulong hash = kOffsetBasis_64) + public static ulong HashFnv1_64(ReadOnlySpan input, ulong hash = kOffsetBasis_64) { foreach (var c in input) { @@ -49,7 +49,7 @@ public static ulong HashFnv1_64(IEnumerable input, ulong hash = kOffsetBas /// Input sequence /// Initial hash value /// Computed hash code - public static ulong HashFnv1a_64(IEnumerable input, ulong hash = kOffsetBasis_64) + public static ulong HashFnv1a_64(ReadOnlySpan input, ulong hash = kOffsetBasis_64) { foreach (var c in input) { @@ -65,7 +65,7 @@ public static ulong HashFnv1a_64(IEnumerable input, ulong hash = kOffsetBa /// Input sequence /// Initial hash value /// Computed hash code - public static ulong HashFnv1a_64(IEnumerable input, ulong hash = kOffsetBasis_64) + public static ulong HashFnv1a_64(ReadOnlySpan input, ulong hash = kOffsetBasis_64) { foreach (var c in input) { @@ -85,7 +85,7 @@ public static ulong HashFnv1a_64(IEnumerable input, ulong hash = kOffsetBa /// Input sequence /// Initial hash value /// Computed hash code - public static uint HashFnv1_32(IEnumerable input, uint hash = kOffsetBasis_32) + public static uint HashFnv1_32(ReadOnlySpan input, uint hash = kOffsetBasis_32) { foreach (var c in input) { @@ -101,7 +101,7 @@ public static uint HashFnv1_32(IEnumerable input, uint hash = kOffsetBasis /// Input sequence /// Initial hash value /// Computed hash code - public static uint HashFnv1a_32(IEnumerable input, uint hash = kOffsetBasis_32) + public static uint HashFnv1a_32(ReadOnlySpan input, uint hash = kOffsetBasis_32) { foreach (var c in input) { diff --git a/pkNX.Game/GameLocation.cs b/pkNX.Game/GameLocation.cs index 3adc61e0..c622f0b2 100644 --- a/pkNX.Game/GameLocation.cs +++ b/pkNX.Game/GameLocation.cs @@ -91,6 +91,7 @@ private static GameVersion GetGameFromPath(string romfs, string? exefs) private const int FILECOUNT_SV_101 = 25; // Ver. 1.0.1 (Day 1 Patch) private const int FILECOUNT_SV_120 = 26; // Ver. 1.2.0 (Paradox x2) private const int FILECOUNT_SV_130 = 27; // Ver. 1.3.0 (Paradox x2 Bad Egg fix) + private const int FILECOUNT_SV_201 = 28; // Ver. 2.0.1 (Teal Mask) private static GameVersion GetGameFromCount(int fileCount, string romfs, string? exefs) { @@ -149,6 +150,7 @@ private static GameVersion GetGameFromCount(int fileCount, string romfs, string? case FILECOUNT_SV_101: case FILECOUNT_SV_120: case FILECOUNT_SV_130: + case FILECOUNT_SV_201: { if (exefs == null) return GameVersion.SV; diff --git a/pkNX.Game/pkNX.Game.csproj b/pkNX.Game/pkNX.Game.csproj index 432e316e..9f9257f2 100644 --- a/pkNX.Game/pkNX.Game.csproj +++ b/pkNX.Game/pkNX.Game.csproj @@ -10,7 +10,7 @@ - + diff --git a/pkNX.Structures.FlatBuffers.Arceus/pkNX.Structures.FlatBuffers.Arceus.csproj b/pkNX.Structures.FlatBuffers.Arceus/pkNX.Structures.FlatBuffers.Arceus.csproj index 717bd9e0..89c6718f 100644 --- a/pkNX.Structures.FlatBuffers.Arceus/pkNX.Structures.FlatBuffers.Arceus.csproj +++ b/pkNX.Structures.FlatBuffers.Arceus/pkNX.Structures.FlatBuffers.Arceus.csproj @@ -11,8 +11,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -25,7 +25,6 @@ - Schemas\ ..\pkNX.Structures.FlatBuffers\Schemas\ diff --git a/pkNX.Structures.FlatBuffers.LGPE/pkNX.Structures.FlatBuffers.LGPE.csproj b/pkNX.Structures.FlatBuffers.LGPE/pkNX.Structures.FlatBuffers.LGPE.csproj index 94555237..fa87da0c 100644 --- a/pkNX.Structures.FlatBuffers.LGPE/pkNX.Structures.FlatBuffers.LGPE.csproj +++ b/pkNX.Structures.FlatBuffers.LGPE/pkNX.Structures.FlatBuffers.LGPE.csproj @@ -10,8 +10,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -24,7 +24,6 @@ - Schemas\ ..\pkNX.Structures.FlatBuffers\Schemas\ diff --git a/pkNX.Structures.FlatBuffers.Reflection/ReflectionDumpSchema.cs b/pkNX.Structures.FlatBuffers.Reflection/ReflectionDumpSchema.cs index aa9d441f..ad8406bd 100644 --- a/pkNX.Structures.FlatBuffers.Reflection/ReflectionDumpSchema.cs +++ b/pkNX.Structures.FlatBuffers.Reflection/ReflectionDumpSchema.cs @@ -16,7 +16,7 @@ public static class SchemaDump /// public static Schema HandleReflection(byte[] data, string filePath, string dir, SchemaDumpSettings settings) { - var schema = Schema.Serializer.Parse(data, FlatBufferDeserializationOption.Greedy); + var schema = Schema.Serializer.Parse(data, FlatBufferDeserializationOption.GreedyMutable); DumpSchema(schema, filePath, dir, settings); return schema; } @@ -38,7 +38,7 @@ public static void DumpSchema(Schema schema, string filePath, string dir, Schema public static void DumpSchema(byte[] data, TextWriter fbs, TextWriter cs, SchemaDumpSettings settings) { - var schema = Schema.Serializer.Parse(data, FlatBufferDeserializationOption.Greedy); + var schema = Schema.Serializer.Parse(data, FlatBufferDeserializationOption.GreedyMutable); DumpSchema(schema, fbs, cs, settings); } @@ -49,26 +49,26 @@ public static void DumpSchema(Schema schema, TextWriter fbs, TextWriter cs, Sche DumpObjects(schema, fbs, cs, settings.StripNamespace); DumpEnums(schema, fbs, settings.StripNamespace); + + if (schema.RootTable?.Name is { } x) + fbs.WriteLine($"root_type {x};"); } private static void WriteHeaderFBS(Schema schema, TextWriter fbs, string fileNameSpace) { - fbs.WriteLine("attribute \"fs_vector\""); - fbs.WriteLine("attribute \"fs_serializer\""); - fbs.WriteLine("attribute \"fs_valueStruct\""); - fbs.WriteLine("attribute \"fs_nonVirtual\""); - fbs.WriteLine("attribute \"fs_unsafeStructVector\""); - fbs.WriteLine(); fbs.WriteLine($"namespace {fileNameSpace};"); fbs.WriteLine(); + fbs.WriteLine("attribute \"fs_vector\";"); + fbs.WriteLine("attribute \"fs_serializer\";"); + fbs.WriteLine("attribute \"fs_valueStruct\";"); + fbs.WriteLine("attribute \"fs_nonVirtual\";"); + fbs.WriteLine("attribute \"fs_unsafeStructVector\";"); + fbs.WriteLine(); fbs.WriteLine("// Generated by FlatSharp"); fbs.WriteLine($"// FileIdentifier: {schema.FileIdent}"); fbs.WriteLine($"// FileExtension: {schema.FileExt}"); fbs.WriteLine($"// Object Count: {schema.Objects.Count}"); fbs.WriteLine($"// Enum Count: {schema.Enums.Count}"); - - if (schema.RootTable?.Name is { } x) - fbs.WriteLine($"root_type {x};"); } private static void WriteHeaderCS(Schema schema, TextWriter cs, string fileNameSpace) @@ -105,7 +105,7 @@ private static void DumpObjects(Schema schema, TextWriter fbs, TextWriter cs, bo for (var i = list.Count - 1; i >= 0; i--) { var obj = list[i]; - + cs.WriteLine(); cs.WriteLine("[TypeConverter(typeof(ExpandableObjectConverter))]"); cs.WriteLine($"public partial {(obj.IsStruct ? "struct" : "class")} {GetName(obj.Name, stripNamespace)} {{ }}"); @@ -170,7 +170,7 @@ private static void DumpEnums(Schema schema, TextWriter fbs, bool stripNamespace { var def = list[i]; fbs.WriteLine(); - + var typeName = def.UnderlyingType.ToFBS(schema, i, true); var implType = $" : {typeName}"; var defName = GetName(def.Name, stripNamespace); @@ -186,13 +186,16 @@ private static void DumpEnums(Schema schema, TextWriter fbs, bool stripNamespace private static string ToFBS(this Type type, Schema schema, int index, bool force = false) { + var size = type.FixedLength; + var sizeStr = size > 0 ? $":{size}" : ""; + if (index != -1) { var idx = type.Index; - if (type.BaseType == BaseType.Array) - return $"[{GetName(schema, idx, type.Element)}]"; + if (type.BaseType is BaseType.Array) + return $"[{GetName(schema, idx, type.Element)}{sizeStr}]"; if (type.BaseType == BaseType.Vector) - return $"[{GetName(schema, idx, type.Element)}]"; + return $"[{GetName(schema, idx, type.Element)}{sizeStr}]"; if (type.BaseType == BaseType.Obj) return $"{schema.Objects[idx].Name}"; if (!force) @@ -201,9 +204,9 @@ private static string ToFBS(this Type type, Schema schema, int index, bool force var baseType = type.BaseType; if (baseType is BaseType.Array) - return $"[{GetName(type.Element)}]"; + return $"[{GetName(type.Element)}{sizeStr}]"; if (baseType is BaseType.Vector) - return $"[{GetName(type.Element)}]"; + return $"[{GetName(type.Element)}{sizeStr}]"; var x = GetName(baseType); if (type.Element != BaseType.None) diff --git a/pkNX.Structures.FlatBuffers.Reflection/SchemaDump.cs b/pkNX.Structures.FlatBuffers.Reflection/SchemaDump.cs index 6590c002..45e7c1c9 100644 --- a/pkNX.Structures.FlatBuffers.Reflection/SchemaDump.cs +++ b/pkNX.Structures.FlatBuffers.Reflection/SchemaDump.cs @@ -12,7 +12,7 @@ public static class SchemaDumpOld { public static Schema HandleReflection(byte[] data, string filePath, string dir, SchemaDumpSettings settings) { - var schema = Schema.Serializer.Parse(data, FlatBufferDeserializationOption.Greedy); + var schema = Schema.Serializer.Parse(data, FlatBufferDeserializationOption.GreedyMutable); DumpSchema(schema, filePath, dir, settings); return schema; } @@ -34,7 +34,7 @@ public static void DumpSchema(Schema schema, string filePath, string dir, Schema public static void DumpSchema(byte[] data, TextWriter fbs, TextWriter cs, SchemaDumpSettings settings) { - var schema = Schema.Serializer.Parse(data, FlatBufferDeserializationOption.Greedy); + var schema = Schema.Serializer.Parse(data, FlatBufferDeserializationOption.GreedyMutable); DumpSchema(schema, fbs, cs, settings); } @@ -43,28 +43,28 @@ public static void DumpSchema(Schema schema, TextWriter fbs, TextWriter cs, Sche WriteHeaderFBS(schema, fbs, settings.FileNamespace); WriteHeaderCS(schema, cs, settings.FileNamespace); - DumpObjects(schema, fbs, cs, settings.StripNamespace); DumpEnums(schema, fbs, settings.StripNamespace); + DumpObjects(schema, fbs, cs, settings.StripNamespace); + + if (schema.RootTable?.Name is { } x) + fbs.WriteLine($"root_type {x};"); } private static void WriteHeaderFBS(Schema schema, TextWriter fbs, string fileNameSpace) { - fbs.WriteLine("attribute \"fs_vector\""); - fbs.WriteLine("attribute \"fs_serializer\""); - fbs.WriteLine("attribute \"fs_valueStruct\""); - fbs.WriteLine("attribute \"fs_nonVirtual\""); - fbs.WriteLine("attribute \"fs_unsafeStructVector\""); - fbs.WriteLine(); fbs.WriteLine($"namespace {fileNameSpace};"); fbs.WriteLine(); + fbs.WriteLine("attribute \"fs_vector\";"); + fbs.WriteLine("attribute \"fs_serializer\";"); + fbs.WriteLine("attribute \"fs_valueStruct\";"); + fbs.WriteLine("attribute \"fs_nonVirtual\";"); + fbs.WriteLine("attribute \"fs_unsafeStructVector\";"); + fbs.WriteLine(); fbs.WriteLine("// Generated by FlatSharp"); fbs.WriteLine($"// FileIdentifier: {schema.FileIdent}"); fbs.WriteLine($"// FileExtension: {schema.FileExt}"); fbs.WriteLine($"// Object Count: {schema.Objects.Count}"); fbs.WriteLine($"// Enum Count: {schema.Enums.Count}"); - - if (schema.RootTable?.Name is { } x) - fbs.WriteLine($"root_type {x};"); } private static void WriteHeaderCS(Schema schema, TextWriter cs, string fileNameSpace) @@ -101,7 +101,7 @@ private static void DumpObjects(Schema schema, TextWriter fbs, TextWriter cs, bo for (var i = list.Count - 1; i >= 0; i--) { var obj = list[i]; - + cs.WriteLine(); cs.WriteLine("[TypeConverter(typeof(ExpandableObjectConverter))]"); cs.WriteLine($"public partial {(obj.IsStruct ? "struct" : "class")} {GetName(obj.Name, stripNamespace)} {{ }}"); @@ -166,7 +166,7 @@ private static void DumpEnums(Schema schema, TextWriter fbs, bool stripNamespace { var def = list[i]; fbs.WriteLine(); - + var typeName = def.UnderlyingType.ToFBS(schema, i, true); var implType = $" : {typeName}"; var defName = GetName(def.Name, stripNamespace); @@ -185,13 +185,16 @@ private static void DumpEnums(Schema schema, TextWriter fbs, bool stripNamespace private static string ToFBS(this Type type, Schema schema, int index, bool force = false) { + var size = type.FixedLength; + var sizeStr = size > 0 ? $":{size}" : ""; + if (index != -1) { var idx = type.Index; if (type.BaseType == BaseType.Array) - return $"[{GetName(schema, idx, type.Element)}]"; + return $"[{GetName(schema, idx, type.Element)}{sizeStr}]"; if (type.BaseType == BaseType.Vector) - return $"[{GetName(schema, idx, type.Element)}]"; + return $"[{GetName(schema, idx, type.Element)}{sizeStr}]"; if (type.BaseType == BaseType.Obj) return $"{schema.Objects[idx].Name}"; if (!force) @@ -200,9 +203,9 @@ private static string ToFBS(this Type type, Schema schema, int index, bool force var baseType = type.BaseType; if (baseType is BaseType.Array) - return $"[{GetName(type.Element)}]"; + return $"[{GetName(type.Element)}{sizeStr}]"; if (baseType is BaseType.Vector) - return $"[{GetName(type.Element)}]"; + return $"[{GetName(type.Element)}{sizeStr}]"; var x = GetName(baseType); if (type.Element != BaseType.None) diff --git a/pkNX.Structures.FlatBuffers.Reflection/pkNX.Structures.FlatBuffers.Reflection.csproj b/pkNX.Structures.FlatBuffers.Reflection/pkNX.Structures.FlatBuffers.Reflection.csproj index 81c7f64e..03d852e5 100644 --- a/pkNX.Structures.FlatBuffers.Reflection/pkNX.Structures.FlatBuffers.Reflection.csproj +++ b/pkNX.Structures.FlatBuffers.Reflection/pkNX.Structures.FlatBuffers.Reflection.csproj @@ -6,8 +6,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/pkNX.Structures.FlatBuffers.SV/Directory.Build.props b/pkNX.Structures.FlatBuffers.SV/Directory.Build.props new file mode 100644 index 00000000..1e19d8fd --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/Directory.Build.props @@ -0,0 +1,26 @@ + + + net7.0 + en + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + GreedyMutable + true + + + + + + + + + diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/PackedVec2f.cs b/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/PackedVec2f.cs deleted file mode 100644 index 1bb1959f..00000000 --- a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/PackedVec2f.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.ComponentModel; - -namespace pkNX.Structures.FlatBuffers.SV; - -[TypeConverter(typeof(ExpandableObjectConverter))] -public partial struct PackedVec2f -{ - public override string ToString() => $"{{ X: {X}, Y: {Y} }}"; -} diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/PackedVec3f.cs b/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/PackedVec3f.cs deleted file mode 100644 index 6684c444..00000000 --- a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/PackedVec3f.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using System.ComponentModel; - -namespace pkNX.Structures.FlatBuffers.SV; - -[TypeConverter(typeof(ExpandableObjectConverter))] -public partial struct PackedVec3f : IEquatable -{ - public override string ToString() => $"{{ X: {X}, Y: {Y}, Z: {Z} }}"; - - public static readonly PackedVec3f Zero = new(); - public static readonly PackedVec3f One = new(1, 1, 1); - - public PackedVec3f() { } - - public PackedVec3f(float x = 0, float y = 0, float z = 0) - { - X = x; - Y = y; - Z = z; - } - public static implicit operator Vec3f(PackedVec3f v) => new(v.X, v.Y, v.Z); - - public bool IsOne => X is 1 && Y is 1 && Z is 1; - public bool IsZero => X is 0 && Y is 0 && Z is 0; - - public float Magnitude => MathF.Sqrt(MagnitudeSqr); - public float MagnitudeSqr => Dot(this); - public PackedVec3f Normalized() => this * (1 / Magnitude); - - public float Dot(PackedVec3f other) => X * other.X + Y * other.Y + Z * other.Z; - public PackedVec3f Cross(PackedVec3f other) => new(Y * other.Z - Z * other.Y, Z * other.X - X * other.Z, X * other.Y - Y * other.X); - public float DistanceTo(PackedVec3f other) => (this - other).Magnitude; - public float DistanceToSqr(PackedVec3f other) => (this - other).MagnitudeSqr; - public PackedVec3f Lerp(PackedVec3f other, float t) => this + (other - this) * t; - - public PackedVec3f Clone() => new() - { - X = X, - Y = Y, - Z = Z, - }; - - public override bool Equals(object? obj) => obj is PackedVec3f other && Equals(other); - public bool Equals(PackedVec3f other) => X.Equals(other.X) && Y.Equals(other.Y) && Z.Equals(other.Z); - public override int GetHashCode() => HashCode.Combine(X, Y, Z); - - public static PackedVec3f operator -(PackedVec3f v) => new(-v.X, -v.Y, -v.Z); - - public static PackedVec3f operator +(PackedVec3f l, PackedVec3f r) => new(l.X + r.X, l.Y + r.Y, l.Z + r.Z); - public static PackedVec3f operator -(PackedVec3f l, PackedVec3f r) => new(l.X - r.X, l.Y - r.Y, l.Z - r.Z); - public static PackedVec3f operator *(PackedVec3f l, PackedVec3f r) => new(l.X * r.X, l.Y * r.Y, l.Z * r.Z); - public static PackedVec3f operator /(PackedVec3f l, PackedVec3f r) => new(l.X / r.X, l.Y / r.Y, l.Z / r.Z); - - public static PackedVec3f operator +(PackedVec3f l, float r) => new(l.X + r, l.Y + r, l.Z + r); - public static PackedVec3f operator -(PackedVec3f l, float r) => new(l.X - r, l.Y - r, l.Z - r); - public static PackedVec3f operator *(PackedVec3f l, float r) => new(l.X * r, l.Y * r, l.Z * r); - public static PackedVec3f operator /(PackedVec3f l, float r) => new(l.X / r, l.Y / r, l.Z / r); - - public static bool operator ==(PackedVec3f? left, PackedVec3f? right) => Equals(left, right); - public static bool operator !=(PackedVec3f? left, PackedVec3f? right) => !Equals(left, right); -} diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/PackedVec4f.cs b/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/PackedVec4f.cs deleted file mode 100644 index b935ef93..00000000 --- a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/PackedVec4f.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.ComponentModel; - -namespace pkNX.Structures.FlatBuffers.SV; - -[TypeConverter(typeof(ExpandableObjectConverter))] -public partial struct PackedVec4f -{ - public PackedVec4f() { } - - public PackedVec4f(float x = 0, float y = 0, float z = 0, float w = 0) - { - X = x; - Y = y; - Z = z; - W = w; - } - - public override string ToString() => $"{{ X: {X}, Y: {Y}, Z: {Z}, W: {W} }}"; -} diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/Transform.cs b/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/Transform.cs deleted file mode 100644 index 1ae7bb23..00000000 --- a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/Transform.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.ComponentModel; - -namespace pkNX.Structures.FlatBuffers.SV; - -[TypeConverter(typeof(ExpandableObjectConverter))] -public partial class Transform -{ - public override string ToString() => $"{{ S: {Scale}, R: {Rotate}, T: {Translate} }}"; -} diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/Vec2f.cs b/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/Vec2f.cs deleted file mode 100644 index b7e77a5c..00000000 --- a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/Vec2f.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.ComponentModel; - -namespace pkNX.Structures.FlatBuffers.SV; - -[TypeConverter(typeof(ExpandableObjectConverter))] -public partial class Vec2f -{ -} diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/Vec3f.cs b/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/Vec3f.cs deleted file mode 100644 index 80a4d3ca..00000000 --- a/pkNX.Structures.FlatBuffers.SV/Gen9/Geometry/Vec3f.cs +++ /dev/null @@ -1,76 +0,0 @@ -using System; -using System.ComponentModel; - -namespace pkNX.Structures.FlatBuffers.SV; - -[TypeConverter(typeof(ExpandableObjectConverter))] -public partial class Vec3f : IEquatable -{ - public static readonly Vec3f Zero = new(0, 0, 0); - public static readonly Vec3f One = new(1, 1, 1); - - - public Vec3f(float x = 0, float y = 0, float z = 0) - { - X = x; - Y = y; - Z = z; - } - - public static implicit operator Vec3f(PackedVec3f v) => new(v.X, v.Y, v.Z); - - public bool IsOne => X is 1 && Y is 1 && Z is 1; - public bool IsZero => X is 0 && Y is 0 && Z is 0; - - public float Magnitude => MathF.Sqrt(MagnitudeSqr); - public float MagnitudeSqr => Dot(this); - public Vec3f Normalized() => this * (1 / Magnitude); - - public float Dot(Vec3f other) => X * other.X + Y * other.Y + Z * other.Z; - public Vec3f Cross(Vec3f other) => new(Y * other.Z - Z * other.Y, Z * other.X - X * other.Z, X * other.Y - Y * other.X); - public float DistanceTo(Vec3f other) => (this - other).Magnitude; - public float DistanceToSqr(Vec3f other) => (this - other).MagnitudeSqr; - public Vec3f Lerp(Vec3f other, float t) => this + (other - this) * t; - - public Vec3f Clone() => new() - { - X = X, - Y = Y, - Z = Z, - }; - - public override string ToString() => $"V3f({X}, {Y}, {Z})"; - public string ToTriple() => $"({X}, {Y}, {Z})"; - - public bool Equals(Vec3f? other) - { - if (other is null) return false; - if (ReferenceEquals(this, other)) return true; - return X.Equals(other.X) && Y.Equals(other.Y) && Z.Equals(other.Z); - } - - public override bool Equals(object? obj) - { - if (obj is null) return false; - if (ReferenceEquals(this, obj)) return true; - if (obj.GetType() != GetType()) return false; - return Equals((Vec3f)obj); - } - - public override int GetHashCode() => HashCode.Combine(X, Y, Z); - - public static Vec3f operator -(Vec3f v) => new(-v.X, -v.Y, -v.Z); - - public static Vec3f operator +(Vec3f l, Vec3f r) => new(l.X + r.X, l.Y + r.Y, l.Z + r.Z); - public static Vec3f operator -(Vec3f l, Vec3f r) => new(l.X - r.X, l.Y - r.Y, l.Z - r.Z); - public static Vec3f operator *(Vec3f l, Vec3f r) => new(l.X * r.X, l.Y * r.Y, l.Z * r.Z); - public static Vec3f operator /(Vec3f l, Vec3f r) => new(l.X / r.X, l.Y / r.Y, l.Z / r.Z); - - public static Vec3f operator +(Vec3f l, float r) => new(l.X + r, l.Y + r, l.Z + r); - public static Vec3f operator -(Vec3f l, float r) => new(l.X - r, l.Y - r, l.Z - r); - public static Vec3f operator *(Vec3f l, float r) => new(l.X * r, l.Y * r, l.Z * r); - public static Vec3f operator /(Vec3f l, float r) => new(l.X / r, l.Y / r, l.Z / r); - - public static bool operator ==(Vec3f? left, Vec3f? right) => Equals(left, right); - public static bool operator !=(Vec3f? left, Vec3f? right) => !Equals(left, right); -} diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/PackedVec2f.fbs b/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/PackedVec2f.fbs deleted file mode 100644 index 6b814ede..00000000 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/PackedVec2f.fbs +++ /dev/null @@ -1,7 +0,0 @@ -namespace pkNX.Structures.FlatBuffers.SV; -attribute "fs_valueStruct"; - -struct PackedVec2f (fs_valueStruct) { - X:float; - Y:float; -} diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/PackedVec3f.fbs b/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/PackedVec3f.fbs deleted file mode 100644 index 23b4f292..00000000 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/PackedVec3f.fbs +++ /dev/null @@ -1,8 +0,0 @@ -namespace pkNX.Structures.FlatBuffers.SV; -attribute "fs_valueStruct"; - -struct PackedVec3f (fs_valueStruct) { - X:float; - Y:float; - Z:float; -} diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/PackedVec4f.fbs b/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/PackedVec4f.fbs deleted file mode 100644 index cfbdf148..00000000 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/PackedVec4f.fbs +++ /dev/null @@ -1,9 +0,0 @@ -namespace pkNX.Structures.FlatBuffers.SV; -attribute "fs_valueStruct"; - -struct PackedVec4f (fs_valueStruct) { - X:float; - Y:float; - Z:float; - W:float; -} diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/Transform.fbs b/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/Transform.fbs deleted file mode 100644 index 35bbe6df..00000000 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/Transform.fbs +++ /dev/null @@ -1,9 +0,0 @@ -include "PackedVec3f.fbs"; - -namespace pkNX.Structures.FlatBuffers.SV; - -table Transform { - Scale:PackedVec3f; - Rotate:PackedVec3f; - Translate:PackedVec3f; -} diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/Vec3f.fbs b/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/Vec3f.fbs deleted file mode 100644 index 8104b61c..00000000 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Geometry/Vec3f.fbs +++ /dev/null @@ -1,7 +0,0 @@ -namespace pkNX.Structures.FlatBuffers.SV; - -table Vec3f { - X:float; - Y:float; - Z:float; -} diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Audio/BGMEventArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/Schemas/BGMEventArray.fbs similarity index 92% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Audio/BGMEventArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/Schemas/BGMEventArray.fbs index b832765f..5190f9cb 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Audio/BGMEventArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/Schemas/BGMEventArray.fbs @@ -1,6 +1,8 @@ include "BGMEventType.fbs"; + namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; + // Root Type: gfl.audio.fb.BGMEventArray table BGMEvent { EventName:string (required); @@ -8,6 +10,9 @@ table BGMEvent { LayerName:string (required); WwiseEventName:string (required); } + table BGMEventArray (fs_serializer) { Table:[BGMEvent] (required); } + +root_type BGMEventArray; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Audio/BGMEventType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/Schemas/BGMEventType.fbs similarity index 99% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Audio/BGMEventType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/Schemas/BGMEventType.fbs index 078fd4dc..0bd1d22d 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Audio/BGMEventType.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/Schemas/BGMEventType.fbs @@ -1,4 +1,5 @@ namespace pkNX.Structures.FlatBuffers.SV; + enum BGMEventType : int { Set = 0, Play = 1, diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Audio/EnvPokeVoiceLotterySetting.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/Schemas/EnvPokeVoiceLotterySetting.fbs similarity index 99% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Audio/EnvPokeVoiceLotterySetting.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/Schemas/EnvPokeVoiceLotterySetting.fbs index 5dca5ec7..0265e843 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Audio/EnvPokeVoiceLotterySetting.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/Schemas/EnvPokeVoiceLotterySetting.fbs @@ -1,5 +1,6 @@ namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; + // Root Type: titan_audio.fb.EnvPokeVoiceLotterySetting table EnvPokeVoiceLotterySetting (fs_serializer) { LotteryTimer:float; diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/pkNX.Structures.FlatBuffers.SV.Audio.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/pkNX.Structures.FlatBuffers.SV.Audio.csproj new file mode 100644 index 00000000..b782ecb2 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Audio/pkNX.Structures.FlatBuffers.SV.Audio.csproj @@ -0,0 +1,11 @@ + + + + + + + + ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\ + + + diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/GameBaseParamTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/GameBaseParamTableArray.fbs new file mode 100644 index 00000000..123fd403 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/GameBaseParamTableArray.fbs @@ -0,0 +1,43 @@ +namespace pkNX.Structures.FlatBuffers.SV; + +attribute "fs_vector"; +attribute "fs_serializer"; +attribute "fs_valueStruct"; +attribute "fs_nonVirtual"; +attribute "fs_unsafeStructVector"; + +enum DifficultyId : ubyte { + Easy = 0, + Normal = 1, + Hard = 2, +} + +struct RewardDangoNums (fs_valueStruct) { + Value:[byte:4]; +} + +struct GameBaseParam { + TimeLimit:ubyte; + PlayerHoldFruitsMax:ubyte; + DifficultyLevelMax:[ubyte:3]; + BaseFruitsNeedNum:ubyte; + AdjustMemberNums:[float:4]; + RoarDistance:float; + RoarAngle:float; + RoarBaseFrontPos:float; + RoarRangeType:ubyte; + BalloonAutoRepopTime:float; + CountupAnimeSeconds:float; + SeOblationResetSeconds:float; + RewardDangoNumsAtDifficulty:[RewardDangoNums:3]; +} + +table GameBaseParamTable { + Param:GameBaseParam; +} + +table GameBaseParamTableArray (fs_serializer) { + Table:[GameBaseParamTable] (required); +} + +root_type GameBaseParamTableArray; diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/OjamaPokemonCommonTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/OjamaPokemonCommonTableArray.fbs new file mode 100644 index 00000000..82442118 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/OjamaPokemonCommonTableArray.fbs @@ -0,0 +1,24 @@ +namespace pkNX.Structures.FlatBuffers.SV; + +attribute "fs_vector"; +attribute "fs_serializer"; +attribute "fs_valueStruct"; +attribute "fs_nonVirtual"; +attribute "fs_unsafeStructVector"; + +struct OjamaPokemonCommonParam { + PopRateBase:ubyte; + PopRateAdd:ubyte; + OblationPopTimingMin:ubyte; + OblationPopTimingMax:ubyte; +} + +table OjamaPokemonCommonTable { + Param:OjamaPokemonCommonParam; +} + +table OjamaPokemonCommonTableArray (fs_serializer) { + Table:[OjamaPokemonCommonTable] (required); +} + +root_type OjamaPokemonCommonTableArray; diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/OjamaPokemonUniqueTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/OjamaPokemonUniqueTableArray.fbs new file mode 100644 index 00000000..25f3b446 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/OjamaPokemonUniqueTableArray.fbs @@ -0,0 +1,26 @@ +namespace pkNX.Structures.FlatBuffers.SV; + +attribute "fs_vector"; +attribute "fs_serializer"; +attribute "fs_valueStruct"; +attribute "fs_nonVirtual"; +attribute "fs_unsafeStructVector"; + +struct OjamaPokemonUniqueParam (fs_valueStruct) { + EatCount:ubyte; + Type:ubyte; + TargetRadius:float; + StartEatSeconds:float; + EatLimitNum:ushort; + PopRatePerLevel:[ubyte:10]; +} + +table OjamaPokemonUniqueTable { + Param:OjamaPokemonUniqueParam; +} + +table OjamaPokemonUniqueTableArray (fs_serializer) { + Table:[OjamaPokemonUniqueTable] (required); +} + +root_type OjamaPokemonUniqueTableArray; diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/ResultDemoTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/ResultDemoTableArray.fbs new file mode 100644 index 00000000..ccb7ee3c --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/ResultDemoTableArray.fbs @@ -0,0 +1,37 @@ +namespace pkNX.Structures.FlatBuffers.SV; + +attribute "fs_vector"; +attribute "fs_serializer"; +attribute "fs_valueStruct"; +attribute "fs_nonVirtual"; +attribute "fs_unsafeStructVector"; + +struct ResultDemoTransform { + PosX:float; + PosY:float; + PosZ:float; + RotX:float; + RotY:float; + RotZ:float; + IsToRadian:bool; +} + +struct ResultDemoParam { + BaseTransformList:[ResultDemoTransform:6]; +} + +table ResultDemoTable { + Param:ResultDemoParam; + PokeObjName0:string; + PokeObjName1:string; + PokeObjName2:string; + PokeObjName3:string; + PokeObjName4:string; + PokeObjName5:string; +} + +table ResultDemoTableArray (fs_serializer) { + Table:[ResultDemoTable] (required); +} + +root_type ResultDemoTableArray; diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/RewardActionTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/RewardActionTableArray.fbs new file mode 100644 index 00000000..1e675375 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/RewardActionTableArray.fbs @@ -0,0 +1,32 @@ +include "Shared/ItemID.fbs"; + +namespace pkNX.Structures.FlatBuffers.SV; +attribute "fs_vector"; +attribute "fs_serializer"; +attribute "fs_valueStruct"; +attribute "fs_nonVirtual"; +attribute "fs_unsafeStructVector"; + + +struct RewardActionItemParam { + ItemId:ItemID; + Rate:ubyte; +} + +struct RewardActionParam { + ActionRewardRate:ubyte; + LotteryCrashBalloonCountRate:ubyte; + LotteryOblationCountRate:ubyte; + RemainTimeRewardRate:ubyte; + RewardItems:[RewardActionItemParam:57]; +} + +table RewardActionTable { + Param:RewardActionParam (required); +} + +table RewardActionTableArray (fs_serializer) { + Table:[RewardActionTable] (required); +} + +root_type RewardActionTableArray; diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/RewardTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/RewardTableArray.fbs new file mode 100644 index 00000000..d1ab8e76 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/RewardTableArray.fbs @@ -0,0 +1,29 @@ +include "Shared/ItemID.fbs"; + +namespace pkNX.Structures.FlatBuffers.SV.Balloon; + +attribute "fs_vector"; +attribute "fs_serializer"; +attribute "fs_valueStruct"; +attribute "fs_nonVirtual"; +attribute "fs_unsafeStructVector"; + +struct RewardLevelItemParam { + ItemId:ItemID; + Num:ubyte; +} + +struct RewardLevelParam { + RewardItems:[RewardLevelItemParam:6]; + DifficultyRating:[ubyte:3]; +} + +table RewardTable { + Param:RewardLevelParam (required); +} + +table RewardTableArray (fs_serializer) { + Table:[RewardTable] (required); +} + +root_type RewardTableArray; diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/ScoreBaseTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/ScoreBaseTableArray.fbs new file mode 100644 index 00000000..67e68561 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/Schemas/ScoreBaseTableArray.fbs @@ -0,0 +1,24 @@ +namespace pkNX.Structures.FlatBuffers.SV; + +attribute "fs_vector"; +attribute "fs_serializer"; +attribute "fs_valueStruct"; +attribute "fs_nonVirtual"; +attribute "fs_unsafeStructVector"; + +struct ScoreBaseParam { + OblationPoint:uint; + CrashBalloonPoint:uint; + LevelClearPoint:uint; + RemainTimePoint:uint; +} + +table ScoreBaseTable { + Param:ScoreBaseParam; +} + +table ScoreBaseTableArray (fs_serializer) { + Table:[ScoreBaseTable] (required); +} + +root_type ScoreBaseTableArray; diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/pkNX.Structures.FlatBuffers.SV.Balloon.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/pkNX.Structures.FlatBuffers.SV.Balloon.csproj new file mode 100644 index 00000000..b782ecb2 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Balloon/pkNX.Structures.FlatBuffers.SV.Balloon.csproj @@ -0,0 +1,11 @@ + + + + + + + + ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\ + + + diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Battle/BattleConfig.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/BattleConfig.fbs similarity index 98% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Battle/BattleConfig.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/BattleConfig.fbs index 77da203f..1e03d85d 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Battle/BattleConfig.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/BattleConfig.fbs @@ -1,4 +1,4 @@ -include "../Geometry/Vec3f.fbs"; +include "Math/Vec3f.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Battle/BattleEffectTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/BattleEffectTableArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Battle/BattleEffectTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/BattleEffectTableArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Battle/ItemTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/ItemTableArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Battle/ItemTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/ItemTableArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/NetBattle/NetBattleRuleDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/NetBattle/NetBattleRuleDataArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/NetBattle/NetBattleRuleDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/NetBattle/NetBattleRuleDataArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/NetBattle/NetBattleRuleParamArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/NetBattle/NetBattleRuleParamArray.fbs similarity index 91% rename from pkNX.Structures.FlatBuffers.SV/Schemas/NetBattle/NetBattleRuleParamArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/NetBattle/NetBattleRuleParamArray.fbs index dc3c3c6b..33ea8ce7 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/NetBattle/NetBattleRuleParamArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/NetBattle/NetBattleRuleParamArray.fbs @@ -1,4 +1,4 @@ -include "../Shared/BattleType.fbs"; +include "Shared/BattleType.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Battle/PokeExceptionTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/PokeExceptionTableArray.fbs similarity index 92% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Battle/PokeExceptionTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/PokeExceptionTableArray.fbs index 1049606d..347529dd 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Battle/PokeExceptionTableArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/Schemas/PokeExceptionTableArray.fbs @@ -1,4 +1,4 @@ -include "../Shared/DevID.fbs"; +include "Shared/DevID.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/pkNX.Structures.FlatBuffers.SV.Battle.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/pkNX.Structures.FlatBuffers.SV.Battle.csproj new file mode 100644 index 00000000..b1ac3808 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Battle/pkNX.Structures.FlatBuffers.SV.Battle.csproj @@ -0,0 +1,11 @@ + + + + + + + + ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\;..\..\pkNX.Structures.FlatBuffers\Schemas\ + + + diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Food/FoodPokeTypeParam.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Food/FoodPokeTypeParam.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/Food/FoodPokeTypeParam.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Food/FoodPokeTypeParam.cs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/BufDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/BufDataArray.fbs similarity index 84% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/BufDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/BufDataArray.fbs index 1ecfa30f..038f11d6 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/BufDataArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/BufDataArray.fbs @@ -1,5 +1,5 @@ -include "../Cooking/Enums/FoodSkillType.fbs"; -include "../Shared/MoveType.fbs"; +include "Enums/FoodSkillType.fbs"; +include "Shared/MoveType.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/CookingCommonData.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/CookingCommonData.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/CookingCommonData.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/CookingCommonData.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Enums/FoodSkillType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Enums/FoodSkillType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Enums/FoodSkillType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Enums/FoodSkillType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Enums/IngredientType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Enums/IngredientType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Enums/IngredientType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Enums/IngredientType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Enums/RecipeType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Enums/RecipeType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Enums/RecipeType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Enums/RecipeType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Enums/SeasoningType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Enums/SeasoningType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Enums/SeasoningType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Enums/SeasoningType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/FoodPowerComboArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/FoodPowerComboArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/FoodPowerComboArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/FoodPowerComboArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/IngredientDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/IngredientDataArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/IngredientDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/IngredientDataArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/IngredientDishDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/IngredientDishDataArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/IngredientDishDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/IngredientDishDataArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Param/FoodPokeTypeParam.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Param/FoodPokeTypeParam.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Param/FoodPokeTypeParam.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Param/FoodPokeTypeParam.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Param/FoodPowerComboParam.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Param/FoodPowerComboParam.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Param/FoodPowerComboParam.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Param/FoodPowerComboParam.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Param/FoodPowerParam.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Param/FoodPowerParam.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Param/FoodPowerParam.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Param/FoodPowerParam.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Param/IngredientParam.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Param/IngredientParam.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/Param/IngredientParam.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/Param/IngredientParam.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/RecipeDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/RecipeDataArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/RecipeDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/RecipeDataArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/SeasoningDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/SeasoningDataArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/SeasoningDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/SeasoningDataArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/TakaraSpicePowerTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/TakaraSpicePowerTableArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Cooking/TakaraSpicePowerTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/Schemas/TakaraSpicePowerTableArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/pkNX.Structures.FlatBuffers.SV.Cooking.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/pkNX.Structures.FlatBuffers.SV.Cooking.csproj new file mode 100644 index 00000000..b782ecb2 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Cooking/pkNX.Structures.FlatBuffers.SV.Cooking.csproj @@ -0,0 +1,11 @@ + + + + + + + + ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\ + + + diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventAddPokemonArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventAddPokemonArray.fbs similarity index 88% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventAddPokemonArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventAddPokemonArray.fbs index 40a2a035..96db3f38 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventAddPokemonArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventAddPokemonArray.fbs @@ -1,4 +1,4 @@ -include "../PokeData/PokeDataFull.fbs"; +include "PokeData/PokeDataFull.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventSub012.RewardTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventSub012.RewardTableArray.fbs similarity index 89% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventSub012.RewardTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventSub012.RewardTableArray.fbs index d5a27c14..664fb845 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventSub012.RewardTableArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventSub012.RewardTableArray.fbs @@ -1,4 +1,4 @@ -include "../Shared/ItemID.fbs"; +include "Shared/ItemID.fbs"; namespace pkNX.Structures.FlatBuffers.SV.EventSub012; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventTradeListArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventTradeListArray.fbs similarity index 90% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventTradeListArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventTradeListArray.fbs index 74309c74..7454bbf9 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventTradeListArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventTradeListArray.fbs @@ -1,4 +1,4 @@ -include "../Shared/DevID.fbs"; +include "Shared/DevID.fbs"; namespace pkNX.Structures.FlatBuffers.SV; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventTradePokemonArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventTradePokemonArray.fbs similarity index 87% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventTradePokemonArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventTradePokemonArray.fbs index 1349576e..5e7541dc 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/EventTradePokemonArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/EventTradePokemonArray.fbs @@ -1,4 +1,4 @@ -include "../PokeData/PokeDataTrade.fbs"; +include "PokeData/PokeDataTrade.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/FieldNpcFaceType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/FieldNpcFaceType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/FieldNpcFaceType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/FieldNpcFaceType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/FieldNpcMotion.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/FieldNpcMotion.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/FieldNpcMotion.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/FieldNpcMotion.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/FieldNpcMotionType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/FieldNpcMotionType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/FieldNpcMotionType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/FieldNpcMotionType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/FieldNpcPokemonDefaultMotion.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/FieldNpcPokemonDefaultMotion.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/FieldNpcPokemonDefaultMotion.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/FieldNpcPokemonDefaultMotion.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/FieldNpcPokemonMotion.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/FieldNpcPokemonMotion.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/FieldNpcPokemonMotion.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/FieldNpcPokemonMotion.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/NpcTrafficFormation.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/NpcTrafficFormation.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/NpcTrafficFormation.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/NpcTrafficFormation.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/NpcTrafficPartnerType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/NpcTrafficPartnerType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/Motion/NpcTrafficPartnerType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/Motion/NpcTrafficPartnerType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/NpcTrafficGenerateTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/NpcTrafficGenerateTableArray.fbs similarity index 97% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/NpcTrafficGenerateTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/NpcTrafficGenerateTableArray.fbs index 58ec88a5..235f37f5 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/NpcTrafficGenerateTableArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/NpcTrafficGenerateTableArray.fbs @@ -1,5 +1,5 @@ -include "../Shared/DevID.fbs"; -include "../Shared/SexType.fbs"; +include "Shared/DevID.fbs"; +include "Shared/SexType.fbs"; include "Motion/NpcTrafficPartnerType.fbs"; include "Motion/FieldNpcFaceType.fbs"; include "Motion/NpcTrafficFormation.fbs"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/PopupWindowTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/PopupWindowTableArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/PopupWindowTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/PopupWindowTableArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Event/TreeShakePokemonArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/TreeShakePokemonArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Event/TreeShakePokemonArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/Schemas/TreeShakePokemonArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/pkNX.Structures.FlatBuffers.SV.Event.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/pkNX.Structures.FlatBuffers.SV.Event.csproj new file mode 100644 index 00000000..b782ecb2 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Event/pkNX.Structures.FlatBuffers.SV.Event.csproj @@ -0,0 +1,11 @@ + + + + + + + + ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\ + + + diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/ExerciseRewardData.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/ExerciseRewardData.fbs similarity index 84% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/ExerciseRewardData.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/ExerciseRewardData.fbs index 94b4cc6e..fe6b2b6f 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/ExerciseRewardData.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/ExerciseRewardData.fbs @@ -1,4 +1,4 @@ -include "../Shared/ItemID.fbs"; +include "Shared/ItemID.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_valueStruct"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/ExerciseSetting.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/ExerciseSetting.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/ExerciseSetting.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/ExerciseSetting.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/GymKooriCoursePokemonTable.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/GymKooriCoursePokemonTable.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/GymKooriCoursePokemonTable.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/GymKooriCoursePokemonTable.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/GymKooriCourseTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/GymKooriCourseTableArray.fbs similarity index 96% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/GymKooriCourseTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/GymKooriCourseTableArray.fbs index 7be6ce50..274d2228 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/GymKooriCourseTableArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/GymKooriCourseTableArray.fbs @@ -1,4 +1,4 @@ -include "../Shared/ItemID.fbs"; +include "Shared/ItemID.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.denki.PopupPosTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.denki.PopupPosTableArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.denki.PopupPosTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.denki.PopupPosTableArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.esper.ENDLESS_BORDERArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.esper.ENDLESS_BORDERArray.fbs similarity index 89% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.esper.ENDLESS_BORDERArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.esper.ENDLESS_BORDERArray.fbs index 78d6d996..38f251d3 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.esper.ENDLESS_BORDERArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.esper.ENDLESS_BORDERArray.fbs @@ -1,5 +1,5 @@ include "ExerciseSetting.fbs"; -include "../Shared/ItemID.fbs"; +include "Shared/ItemID.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.esper.EXERCISE_COURSESArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.esper.EXERCISE_COURSESArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.esper.EXERCISE_COURSESArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.esper.EXERCISE_COURSESArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.kusa.PokeTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.kusa.PokeTableArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.kusa.PokeTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.kusa.PokeTableArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.kusa.RewardTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.kusa.RewardTableArray.fbs similarity index 89% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.kusa.RewardTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.kusa.RewardTableArray.fbs index 7b5a77e1..73ce6484 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.kusa.RewardTableArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.kusa.RewardTableArray.fbs @@ -1,4 +1,4 @@ -include "../Shared/ItemID.fbs"; +include "Shared/ItemID.fbs"; namespace pkNX.Structures.FlatBuffers.SV.Gym; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mizu.FixTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mizu.FixTableArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mizu.FixTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mizu.FixTableArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mizu.SeriItemTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mizu.SeriItemTableArray.fbs similarity index 91% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mizu.SeriItemTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mizu.SeriItemTableArray.fbs index ea09b1f4..5937b0b5 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mizu.SeriItemTableArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mizu.SeriItemTableArray.fbs @@ -1,5 +1,5 @@ -include "../Shared/DevID.fbs"; -include "../Shared/ItemID.fbs"; +include "Shared/DevID.fbs"; +include "Shared/ItemID.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mizu.SeriNpcTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mizu.SeriNpcTableArray.fbs similarity index 95% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mizu.SeriNpcTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mizu.SeriNpcTableArray.fbs index b6bb8ceb..a4163ce4 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mizu.SeriNpcTableArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mizu.SeriNpcTableArray.fbs @@ -1,4 +1,4 @@ -include "../Shared/ItemID.fbs"; +include "Shared/ItemID.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mizu.SeriVenueTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mizu.SeriVenueTableArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mizu.SeriVenueTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mizu.SeriVenueTableArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mushi.GymMushiData.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mushi.GymMushiData.fbs similarity index 96% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mushi.GymMushiData.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mushi.GymMushiData.fbs index ac9f7406..116d29d5 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mushi.GymMushiData.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mushi.GymMushiData.fbs @@ -1,4 +1,4 @@ -include "../Shared/ItemID.fbs"; +include "Shared/ItemID.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mushi.GymMushiRewardArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mushi.GymMushiRewardArray.fbs similarity index 92% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mushi.GymMushiRewardArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mushi.GymMushiRewardArray.fbs index 8f41fe11..33f790f2 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym.mushi.GymMushiRewardArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym.mushi.GymMushiRewardArray.fbs @@ -1,4 +1,4 @@ -include "../Shared/ItemID.fbs"; +include "Shared/ItemID.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym_denki.PopupFixTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym_denki.PopupFixTableArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Gym/gym_denki.PopupFixTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/Schemas/gym_denki.PopupFixTableArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/pkNX.Structures.FlatBuffers.SV.Gym.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/pkNX.Structures.FlatBuffers.SV.Gym.csproj new file mode 100644 index 00000000..b782ecb2 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Gym/pkNX.Structures.FlatBuffers.SV.Gym.csproj @@ -0,0 +1,11 @@ + + + + + + + + ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\ + + + diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/DLCItemGroupArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/DLCItemGroupArray.fbs similarity index 79% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/DLCItemGroupArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/DLCItemGroupArray.fbs index 59035238..9ce0148f 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/DLCItemGroupArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/DLCItemGroupArray.fbs @@ -1,17 +1,17 @@ -include "../Shared/DevID.fbs"; -include "../Shared/ItemID.fbs"; -include "../Shared/SexType.fbs"; -include "../Shared/TokuseiType.fbs"; -include "../Shared/GemType.fbs"; -include "../Shared/RareType.fbs"; -include "../Shared/SizeType.fbs"; -include "../Shared/TalentType.fbs"; -include "../Shared/SeikakuType.fbs"; -include "../Shared/BallType.fbs"; +include "Shared/DevID.fbs"; +include "Shared/ItemID.fbs"; +include "Shared/SexType.fbs"; +include "Shared/TokuseiType.fbs"; +include "Shared/GemType.fbs"; +include "Shared/RareType.fbs"; +include "Shared/SizeType.fbs"; +include "Shared/TalentType.fbs"; +include "Shared/SeikakuType.fbs"; +include "Shared/BallType.fbs"; -include "../Entity/ParamSet.fbs"; -include "../PokeData/WazaSet.fbs"; -include "../Waza/WazaType.fbs"; +include "Entity/ParamSet.fbs"; +include "PokeData/WazaSet.fbs"; +include "Shared/WazaType.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/DropItemDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/DropItemDataArray.fbs similarity index 84% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/DropItemDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/DropItemDataArray.fbs index 4e2feeb0..84203ec6 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/DropItemDataArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/DropItemDataArray.fbs @@ -1,5 +1,5 @@ -include "../Shared/ItemID.fbs"; -include "../Shared/DevID.fbs"; +include "Shared/ItemID.fbs"; +include "Shared/DevID.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/BattleFunctionType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/BattleFunctionType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/BattleFunctionType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/BattleFunctionType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/EquipEffect.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/EquipEffect.fbs similarity index 99% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/EquipEffect.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/EquipEffect.fbs index ccb061db..e2f782f5 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/EquipEffect.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/EquipEffect.fbs @@ -1,4 +1,5 @@ namespace pkNX.Structures.FlatBuffers.SV; + enum EquipEffect : int { SOUBI_NONE = 0, SOUBI_HPKAIHUKU = 1, diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/FieldFunctionType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/FieldFunctionType.fbs similarity index 99% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/FieldFunctionType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/FieldFunctionType.fbs index a6ba63c8..fa73915c 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/FieldFunctionType.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/FieldFunctionType.fbs @@ -1,4 +1,5 @@ namespace pkNX.Structures.FlatBuffers.SV; + enum FieldFunctionType : int { FIELDFUNC_NONE = 0, FIELDFUNC_RECOVER = 1, diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/FieldPocket.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/FieldPocket.fbs similarity index 99% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/FieldPocket.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/FieldPocket.fbs index 4ad0e81f..d2dbd26f 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/FieldPocket.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/FieldPocket.fbs @@ -1,4 +1,5 @@ namespace pkNX.Structures.FlatBuffers.SV; + enum FieldPocket : int { FPOCKET_DRUG = 0, FPOCKET_BALL = 1, diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/ItemGroup.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/ItemGroup.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/ItemGroup.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/ItemGroup.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/ItemType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/ItemType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/ItemType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/ItemType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/PluckEffect.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/PluckEffect.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/PluckEffect.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/PluckEffect.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/WorkPpSelTgt.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/WorkPpSelTgt.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/WorkPpSelTgt.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/WorkPpSelTgt.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/WorkType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/WorkType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/Enums/WorkType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/Enums/WorkType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/HiddenItemBiomeTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/HiddenItemBiomeTableArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/HiddenItemBiomeTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/HiddenItemBiomeTableArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/HiddenItemDataTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/HiddenItemDataTableArray.fbs similarity index 96% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/HiddenItemDataTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/HiddenItemDataTableArray.fbs index b1460013..e3ec03cd 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/HiddenItemDataTableArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/HiddenItemDataTableArray.fbs @@ -1,4 +1,4 @@ -include "../Shared/ItemID.fbs"; +include "Shared/ItemID.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/ItemDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/ItemDataArray.fbs similarity index 98% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/ItemDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/ItemDataArray.fbs index f39087c2..010c8a99 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/ItemDataArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/ItemDataArray.fbs @@ -1,4 +1,4 @@ -include "../Waza/WazaID.fbs"; +include "Shared/WazaID.fbs"; include "Enums/BattleFunctionType.fbs"; include "Enums/EquipEffect.fbs"; include "Enums/FieldFunctionType.fbs"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/ItemPointTypeBiomeTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/ItemPointTypeBiomeTableArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/ItemPointTypeBiomeTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/ItemPointTypeBiomeTableArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/MonohiroiItemArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/MonohiroiItemArray.fbs similarity index 97% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/MonohiroiItemArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/MonohiroiItemArray.fbs index 53da27bd..28449eb3 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/MonohiroiItemArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/MonohiroiItemArray.fbs @@ -1,4 +1,4 @@ -include "../Shared/ItemID.fbs"; +include "Shared/ItemID.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/RummagingItemDataTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/RummagingItemDataTableArray.fbs similarity index 95% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Item/RummagingItemDataTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/RummagingItemDataTableArray.fbs index 9a9f64d7..b3538b63 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Item/RummagingItemDataTableArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/Schemas/RummagingItemDataTableArray.fbs @@ -1,4 +1,4 @@ -include "../Shared/ItemID.fbs"; +include "Shared/ItemID.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/pkNX.Structures.FlatBuffers.SV.Item.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/pkNX.Structures.FlatBuffers.SV.Item.csproj new file mode 100644 index 00000000..b782ecb2 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Item/pkNX.Structures.FlatBuffers.SV.Item.csproj @@ -0,0 +1,11 @@ + + + + + + + + ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\ + + + diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Misc/Ajito/AjitoCommonLevelArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/Ajito/AjitoCommonLevelArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Misc/Ajito/AjitoCommonLevelArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/Ajito/AjitoCommonLevelArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Misc/Ajito/AjitoDifficultEnum.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/Ajito/AjitoDifficultEnum.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Misc/Ajito/AjitoDifficultEnum.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/Ajito/AjitoDifficultEnum.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Misc/Ajito/AjitoPokemonArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/Ajito/AjitoPokemonArray.fbs similarity index 90% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Misc/Ajito/AjitoPokemonArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/Ajito/AjitoPokemonArray.fbs index 4d62b762..0fb7bfcb 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Misc/Ajito/AjitoPokemonArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/Ajito/AjitoPokemonArray.fbs @@ -1,4 +1,4 @@ -include "../../Shared/DevID.fbs"; +include "Shared/DevID.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Misc/Ajito/AjitoTypeEnum.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/Ajito/AjitoTypeEnum.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Misc/Ajito/AjitoTypeEnum.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/Ajito/AjitoTypeEnum.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Misc/Ajito/AjitoUnitArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/Ajito/AjitoUnitArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Misc/Ajito/AjitoUnitArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/Ajito/AjitoUnitArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Misc/GemSettingRootTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/GemSettingRootTableArray.fbs similarity index 97% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Misc/GemSettingRootTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/GemSettingRootTableArray.fbs index ce2da538..cfcf0221 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Misc/GemSettingRootTableArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/GemSettingRootTableArray.fbs @@ -1,4 +1,4 @@ -include "../Geometry/PackedVec3f.fbs"; +include "Math/PackedVec3f.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/System/ObjectGenerationRangeArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/ObjectGenerationRangeArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/System/ObjectGenerationRangeArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/ObjectGenerationRangeArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Misc/RibbonDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/RibbonDataArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Misc/RibbonDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/Schemas/RibbonDataArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/pkNX.Structures.FlatBuffers.SV.Misc.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/pkNX.Structures.FlatBuffers.SV.Misc.csproj new file mode 100644 index 00000000..b1ac3808 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Misc/pkNX.Structures.FlatBuffers.SV.Misc.csproj @@ -0,0 +1,11 @@ + + + + + + + + ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\;..\..\pkNX.Structures.FlatBuffers\Schemas\ + + + diff --git a/pkNX.Structures.FlatBuffers.SV/Dumpers/PersonalDumperSV.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Dumpers/PersonalDumperSV.cs similarity index 94% rename from pkNX.Structures.FlatBuffers.SV/Dumpers/PersonalDumperSV.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Dumpers/PersonalDumperSV.cs index 06043aa5..c14f3f85 100644 --- a/pkNX.Structures.FlatBuffers.SV/Dumpers/PersonalDumperSV.cs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Dumpers/PersonalDumperSV.cs @@ -40,7 +40,10 @@ public class PersonalDumperSV 417, 126, 056, 059, 519, 518, 520, 528, 188, 089, 444, 566, 416, 307, 308, 338, 200, 315, 411, 437, 542, 433, 405, 063, 413, 394, 087, 370, 076, 434, - 796, 851, + 796, 851, 046, 268, 114, 092, 328, 180, 356, 479, + 360, 282, 450, 162, 410, 679, 667, 333, 503, 535, + 669, 253, 264, 311, 803, 807, 812, 814, 809, 808, + 799, 802, }; private static readonly string[] AbilitySuffix = { " (1)", " (2)", " (H)" }; @@ -78,6 +81,10 @@ public void AddDump(List lines, PersonalTable9SV table, ushort speciesIn name += $"-{form}"; if (entry.FB.Dex is { } dex) name += $" #{dex.Index:000}"; + if (entry.FB.KitakamiDex != 0) + name += $" K#{entry.FB.KitakamiDex:000}"; + if (entry.FB.BlueberryDex != 0) + name += $" B#{entry.FB.BlueberryDex:000}"; AddDump(lines, entry, index, name, speciesInternal, form); } @@ -203,7 +210,7 @@ private string GetArgTypeDisplayValue(EvolutionType type, ushort value) EvolutionTypeArgumentType.Moves => Moves[value], EvolutionTypeArgumentType.Species => GetSpeciesName(value), EvolutionTypeArgumentType.Type => Types[value], - //EvolutionTypeArgumentType.Stat => expr, + EvolutionTypeArgumentType.Stat => value.ToString(), //EvolutionTypeArgumentType.Version => expr, _ => throw new ArgumentOutOfRangeException(nameof(argType), argType, null), }; @@ -309,7 +316,7 @@ public static class Plib9 { 0047, 0000 }, // { 0048, 0000 }, // { 0049, 0326 }, // Razor Claw - { 0050, 0000 }, // + { 0050, 0327 }, // Razor Fang { 0051, 0644 }, // Pixie Plate { 0052, 0849 }, // Ice Stone { 0053, 0000 }, // @@ -329,7 +336,7 @@ public static class Plib9 { 0067, 0000 }, // { 0068, 0000 }, // { 0069, 0000 }, // - { 0070, 0000 }, // + { 0070, 1103 }, // Rusted Sword { 0071, 1104 }, // Rusted Shield { 0072, 0000 }, // { 0073, 0000 }, // @@ -353,5 +360,10 @@ public static class Plib9 { 0091, 0000 }, // { 0092, 0218 }, // Soothe Bell { 0093, 0109 }, // Dawn Stone + { 0094, 2403 }, // Unremarkable Teacup + { 0095, 2404 }, // Masterpiece Teacup + { 0096, 2402 }, // Syrupy Apple + { 0111, 0537 }, // Prism Scale + { 0112, 0325 }, // Reaper Cloth }; } diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Personal/PersonalTable.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/PersonalTable.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/Personal/PersonalTable.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/PersonalTable.cs diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Types/PersonalInfoDex.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Types/PersonalInfoDex.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Types/PersonalInfoDex.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Types/PersonalInfoDex.cs diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Types/PersonalInfoEvolution.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Types/PersonalInfoEvolution.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Types/PersonalInfoEvolution.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Types/PersonalInfoEvolution.cs diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Types/PersonalInfoGender.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Types/PersonalInfoGender.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Types/PersonalInfoGender.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Types/PersonalInfoGender.cs diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Types/PersonalInfoStats.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Types/PersonalInfoStats.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Types/PersonalInfoStats.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Types/PersonalInfoStats.cs diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Wrapper/PersonalInfo9SV.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Wrapper/PersonalInfo9SV.cs similarity index 94% rename from pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Wrapper/PersonalInfo9SV.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Wrapper/PersonalInfo9SV.cs index ac91d86c..5389652a 100644 --- a/pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Wrapper/PersonalInfo9SV.cs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Wrapper/PersonalInfo9SV.cs @@ -113,7 +113,8 @@ public void Write(BinaryWriter bw) bw.Write(FormCount); bw.Write(FB.Info.Color); bw.Write(FB.IsPresentInGame); - bw.Write((byte)DexGroup); + + bw.Write((byte)(DexGroup == 1 ? 1 : FB.KitakamiDex != 0 ? 2 : FB.BlueberryDex != 0 ? 2 : 0)); bw.Write((ushort)DexIndex); bw.Write(FB.Info.Height); bw.Write(FB.Info.Weight); @@ -124,7 +125,7 @@ public void Write(BinaryWriter bw) // 0x2C // TMs - byte[] tmFlags = new byte[0x18]; + byte[] tmFlags = new byte[0x1E]; if (IsPresentInGame) { foreach (ushort tm in FB.TechnicalMachine) @@ -137,6 +138,8 @@ public void Write(BinaryWriter bw) } } bw.Write(tmFlags); + bw.Write(FB.KitakamiDex); + bw.Write(FB.BlueberryDex); } public static readonly ushort[] TMIndexes = @@ -158,6 +161,9 @@ public void Write(BinaryWriter bw) 417, 126, 056, 059, 519, 518, 520, 528, 188, 089, 444, 566, 416, 307, 308, 338, 200, 315, 411, 437, 542, 433, 405, 063, 413, 394, 087, 370, 076, 434, - 796, 851, + 796, 851, 046, 268, 114, 092, 328, 180, 356, 479, + 360, 282, 450, 162, 410, 679, 667, 333, 503, 535, + 669, 253, 264, 311, 803, 807, 812, 814, 809, 808, + 799, 802, }; } diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Wrapper/PersonalTable9SV.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Wrapper/PersonalTable9SV.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/Personal/Wrapper/PersonalTable9SV.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Personal/Wrapper/PersonalTable9SV.cs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoDetail.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoDetail.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoDetail.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoDetail.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoDex.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoDex.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoDex.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoDex.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoEvolution.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoEvolution.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoEvolution.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoEvolution.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoGender.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoGender.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoGender.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoGender.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoHatch.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoHatch.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoHatch.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoHatch.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoMove.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoMove.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoMove.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoMove.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoStats.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoStats.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalInfoStats.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalInfoStats.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalTable.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalTable.fbs similarity index 96% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalTable.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalTable.fbs index 690407fc..d8ed12c9 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Personal/PersonalTable.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/Schemas/PersonalTable.fbs @@ -13,6 +13,8 @@ table PersonalInfo { Info:PersonalInfoDetail (required); IsPresentInGame:bool; Dex:PersonalInfoDex; // not required + KitakamiDex:ubyte; + BlueberryDex:ubyte; Type1:ubyte; Type2:ubyte; Ability1:ushort; diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/pkNX.Structures.FlatBuffers.SV.Personal.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/pkNX.Structures.FlatBuffers.SV.Personal.csproj new file mode 100644 index 00000000..44307490 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Personal/pkNX.Structures.FlatBuffers.SV.Personal.csproj @@ -0,0 +1,11 @@ + + + + + + + + Schemas\ + + + diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Picnic/PicnicPokemon.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/Schemas/PicnicPokemon.fbs similarity index 98% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Picnic/PicnicPokemon.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/Schemas/PicnicPokemon.fbs index 1a0268c2..fb460735 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Picnic/PicnicPokemon.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/Schemas/PicnicPokemon.fbs @@ -1,4 +1,4 @@ -include "../Geometry/PackedVec3f.fbs"; +include "Math/PackedVec3f.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Picnic/PicnicSystemData.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/Schemas/PicnicSystemData.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Picnic/PicnicSystemData.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/Schemas/PicnicSystemData.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Picnic/PicnicTablesetData.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/Schemas/PicnicTablesetData.fbs similarity index 98% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Picnic/PicnicTablesetData.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/Schemas/PicnicTablesetData.fbs index 5613e768..08d4d800 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Picnic/PicnicTablesetData.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/Schemas/PicnicTablesetData.fbs @@ -1,4 +1,4 @@ -include "../Geometry/Transform.fbs"; +include "Math/Transform.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Picnic/PicnicWagonData.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/Schemas/PicnicWagonData.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Picnic/PicnicWagonData.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/Schemas/PicnicWagonData.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/pkNX.Structures.FlatBuffers.SV.Picnic.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/pkNX.Structures.FlatBuffers.SV.Picnic.csproj new file mode 100644 index 00000000..48142e0f --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Picnic/pkNX.Structures.FlatBuffers.SV.Picnic.csproj @@ -0,0 +1,11 @@ + + + + + + + + ..\..\pkNX.Structures.FlatBuffers\Schemas\ + + + diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Raid/DeliveryRaidEnemyTableArray.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Raid/DeliveryRaidEnemyTableArray.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/Raid/DeliveryRaidEnemyTableArray.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Raid/DeliveryRaidEnemyTableArray.cs diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Raid/DeliveryRaidFixedRewardItemArray.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Raid/DeliveryRaidFixedRewardItemArray.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/Raid/DeliveryRaidFixedRewardItemArray.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Raid/DeliveryRaidFixedRewardItemArray.cs diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Raid/DeliveryRaidLotteryRewardItemArray.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Raid/DeliveryRaidLotteryRewardItemArray.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/Raid/DeliveryRaidLotteryRewardItemArray.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Raid/DeliveryRaidLotteryRewardItemArray.cs diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Raid/RaidFixedRewardItemArray.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Raid/RaidFixedRewardItemArray.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/Raid/RaidFixedRewardItemArray.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Raid/RaidFixedRewardItemArray.cs diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Raid/RaidLotteryRewardItemArray.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Raid/RaidLotteryRewardItemArray.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/Raid/RaidLotteryRewardItemArray.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Raid/RaidLotteryRewardItemArray.cs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/DeliveryRaidEnemyTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/DeliveryRaidEnemyTableArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/DeliveryRaidEnemyTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/DeliveryRaidEnemyTableArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/DeliveryRaidFixedRewardItemArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/DeliveryRaidFixedRewardItemArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/DeliveryRaidFixedRewardItemArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/DeliveryRaidFixedRewardItemArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/DeliveryRaidLotteryRewardItemArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/DeliveryRaidLotteryRewardItemArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/DeliveryRaidLotteryRewardItemArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/DeliveryRaidLotteryRewardItemArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/DeliveryRaidPriorityArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/DeliveryRaidPriorityArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/DeliveryRaidPriorityArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/DeliveryRaidPriorityArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/Enums/RaidBossExtraActType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/Enums/RaidBossExtraActType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/Enums/RaidBossExtraActType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/Enums/RaidBossExtraActType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/Enums/RaidBossExtraTimingType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/Enums/RaidBossExtraTimingType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/Enums/RaidBossExtraTimingType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/Enums/RaidBossExtraTimingType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/Enums/RaidRewardItemCategoryType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/Enums/RaidRewardItemCategoryType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/Enums/RaidRewardItemCategoryType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/Enums/RaidRewardItemCategoryType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/Enums/RaidRewardItemSubjectType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/Enums/RaidRewardItemSubjectType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/Enums/RaidRewardItemSubjectType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/Enums/RaidRewardItemSubjectType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/Enums/RaidRomType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/Enums/RaidRomType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/Enums/RaidRomType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/Enums/RaidRomType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidDifficultyLotteryTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidDifficultyLotteryTableArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidDifficultyLotteryTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidDifficultyLotteryTableArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidEnemyInfo.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidEnemyInfo.fbs similarity index 96% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidEnemyInfo.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidEnemyInfo.fbs index 3b667a5d..b69d62c0 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidEnemyInfo.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidEnemyInfo.fbs @@ -1,8 +1,8 @@ include "Enums/RaidRomType.fbs"; include "Enums/RaidBossExtraTimingType.fbs"; include "Enums/RaidBossExtraActType.fbs"; -include "../Waza/WazaID.fbs"; -include "../PokeData/PokeDataBattle.fbs"; +include "Shared/WazaID.fbs"; +include "PokeData/PokeDataBattle.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidEnemyTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidEnemyTableArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidEnemyTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidEnemyTableArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidFixedRewardItemArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidFixedRewardItemArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidFixedRewardItemArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidFixedRewardItemArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidFixedRewardItemInfo.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidFixedRewardItemInfo.fbs similarity index 90% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidFixedRewardItemInfo.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidFixedRewardItemInfo.fbs index 01824067..bb73cc46 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidFixedRewardItemInfo.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidFixedRewardItemInfo.fbs @@ -1,4 +1,4 @@ -include "../Shared/ItemID.fbs"; +include "Shared/ItemID.fbs"; include "Enums/RaidRewardItemCategoryType.fbs"; include "Enums/RaidRewardItemSubjectType.fbs"; diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidGemItemRewardBoost.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidGemItemRewardBoost.fbs new file mode 100644 index 00000000..df29258c --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidGemItemRewardBoost.fbs @@ -0,0 +1,12 @@ +namespace pkNX.Structures.FlatBuffers.SV; +attribute "fs_serializer"; + +table RaidGemItemRewardBoost (fs_serializer) { + difficulty_1:int; + difficulty_2:int; + difficulty_3:int; + difficulty_4:int; + difficulty_5:int; + difficulty_6:int; + difficulty_7:int; +} diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidGemSetting.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidGemSetting.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidGemSetting.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidGemSetting.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidLotteryRewardItemArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidLotteryRewardItemArray.fbs similarity index 96% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidLotteryRewardItemArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidLotteryRewardItemArray.fbs index 6a3ca81e..7cd03a19 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidLotteryRewardItemArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidLotteryRewardItemArray.fbs @@ -1,5 +1,5 @@ -include "../Shared/ItemID.fbs"; -include "/RaidLotteryRewardItemInfo.fbs"; +include "Shared/ItemID.fbs"; +include "RaidLotteryRewardItemInfo.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidLotteryRewardItemInfo.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidLotteryRewardItemInfo.fbs similarity index 88% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidLotteryRewardItemInfo.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidLotteryRewardItemInfo.fbs index 4ce0564c..47c80c72 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidLotteryRewardItemInfo.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidLotteryRewardItemInfo.fbs @@ -1,4 +1,4 @@ -include "../Shared/ItemID.fbs"; +include "Shared/ItemID.fbs"; include "Enums/RaidRewardItemCategoryType.fbs"; namespace pkNX.Structures.FlatBuffers.SV; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidPokeScaleDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidPokeScaleDataArray.fbs similarity index 83% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidPokeScaleDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidPokeScaleDataArray.fbs index 7b662c41..f86acafe 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidPokeScaleDataArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidPokeScaleDataArray.fbs @@ -1,5 +1,5 @@ -include "../Shared/DevID.fbs"; -include "../Shared/SexType.fbs"; +include "Shared/DevID.fbs"; +include "Shared/SexType.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidRewardSlotArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidRewardSlotArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidRewardSlotArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidRewardSlotArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidTrainerArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidTrainerArray.fbs similarity index 81% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidTrainerArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidTrainerArray.fbs index 789f654f..35761fd3 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Raid/RaidTrainerArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/Schemas/RaidTrainerArray.fbs @@ -1,12 +1,14 @@ namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; +table RaidTrainer { + RaidTrainerInfo:string (required); + NpcPresetIndex:int; + NameTextLabel:string; +} + table RaidTrainerArray (fs_serializer) { Table:[RaidTrainer] (required); } -table RaidTrainer { - RaidTrainerInfo:string (required); - NpcPresetIndex:int; - NameTextLabel:string (required); -} +root_type RaidTrainerArray; diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/pkNX.Structures.FlatBuffers.SV.Raid.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/pkNX.Structures.FlatBuffers.SV.Raid.csproj new file mode 100644 index 00000000..b782ecb2 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Raid/pkNX.Structures.FlatBuffers.SV.Raid.csproj @@ -0,0 +1,11 @@ + + + + + + + + ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\ + + + diff --git a/pkNX.Structures.FlatBuffers.SV/FlatDummyEntry.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/FlatDummyEntry.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/FlatDummyEntry.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/FlatDummyEntry.cs diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/PokeDataBattle.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/PokeDataBattle.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/PokeDataBattle.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/PokeDataBattle.cs diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/PokeDataEventBattle.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/PokeDataEventBattle.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/PokeDataEventBattle.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/PokeDataEventBattle.cs diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/PokeDataFull.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/PokeDataFull.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/PokeDataFull.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/PokeDataFull.cs diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/PokeDataSymbol.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/PokeDataSymbol.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/PokeDataSymbol.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/PokeDataSymbol.cs diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/PokeDataTrade.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/PokeDataTrade.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/PokeDataTrade.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/PokeDataTrade.cs diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/WazaSet.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/WazaSet.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/PokeData/WazaSet.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/PokeData/WazaSet.cs diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/SpeciesConverterSV.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/SpeciesConverterSV.cs similarity index 91% rename from pkNX.Structures.FlatBuffers.SV/Gen9/SpeciesConverterSV.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/SpeciesConverterSV.cs index 42adf16e..c897b362 100644 --- a/pkNX.Structures.FlatBuffers.SV/Gen9/SpeciesConverterSV.cs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Gen9/SpeciesConverterSV.cs @@ -13,6 +13,7 @@ public static T[] GetRearrangedAsNational(T[] specNames) for (ushort indexInternal = 0; indexInternal < specNames.Length; indexInternal++) { var indexNational = GetNational9(indexInternal); + if (indexNational >= specNames.Length) continue; result[indexNational] = specNames[indexInternal]; } return result; @@ -64,9 +65,12 @@ public static ushort GetNational9(ushort raw) 029, -53, -65, 025, -06, -03, -07, -04, -04, -08, -04, 001, -03, -03, -06, -04, -47, -47, -47, -23, -23, -05, -07, -09, -07, -20, -13, -09, -09, -29, - -23, + -23, 001, 012, 012, 000, 000, 000, -06, UNK, UNK, + UNK, UNK, UNK, UNK, UNK, UNK, }; + private const sbyte UNK = 111; + /// /// Difference of Gen9 Species IDs (index) and the associated National Dex IDs (value) /// @@ -82,6 +86,8 @@ public static ushort GetNational9(ushort raw) 029, 008, 003, 004, 004, 020, 004, 023, 006, 003, 003, 004, -01, 013, 009, 007, 005, 007, 009, 009, -43, -43, -43, -68, -68, -68, -58, -58, -25, -29, - -31, + -31, 006, -01, UNK, 000, 000, 000, UNK, UNK, UNK, + UNK, UNK, UNK, UNK, -12, -12, }; + } diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Entity/CollisionShape.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/CollisionShape.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Entity/CollisionShape.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/CollisionShape.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Entity/ComparisonOperatorType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/ComparisonOperatorType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Entity/ComparisonOperatorType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/ComparisonOperatorType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Entity/ConditionSimpleAutoBattleHecklerAreaArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/ConditionSimpleAutoBattleHecklerAreaArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Entity/ConditionSimpleAutoBattleHecklerAreaArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/ConditionSimpleAutoBattleHecklerAreaArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Entity/OwnerInfo.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/OwnerInfo.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Entity/OwnerInfo.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/OwnerInfo.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Entity/ParamSet.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/ParamSet.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Entity/ParamSet.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/ParamSet.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Entity/PokeObjArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/PokeObjArray.fbs similarity index 97% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Entity/PokeObjArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/PokeObjArray.fbs index db06728d..99f6ddc9 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Entity/PokeObjArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/PokeObjArray.fbs @@ -1,5 +1,5 @@ include "../Shared/DevID.fbs"; -include "../Geometry/Vec3f.fbs"; +include "Math/Vec3f.fbs"; include "CollisionShape.fbs"; namespace pkNX.Structures.FlatBuffers.SV; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Entity/PokemonTriggerID.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/PokemonTriggerID.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Entity/PokemonTriggerID.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/PokemonTriggerID.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Entity/PokemonUniquePathData.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/PokemonUniquePathData.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Entity/PokemonUniquePathData.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Entity/PokemonUniquePathData.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataBattle.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataBattle.fbs similarity index 96% rename from pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataBattle.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataBattle.fbs index 3fa71e8e..0812e6e1 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataBattle.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataBattle.fbs @@ -11,7 +11,7 @@ include "../Shared/BallType.fbs"; include "../PokeData/WazaSet.fbs"; include "../Entity/ParamSet.fbs"; -include "../Waza/WazaType.fbs"; +include "../Shared/WazaType.fbs"; namespace pkNX.Structures.FlatBuffers.SV; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataEventBattle.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataEventBattle.fbs similarity index 97% rename from pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataEventBattle.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataEventBattle.fbs index 97f47798..fbe7a6ea 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataEventBattle.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataEventBattle.fbs @@ -11,7 +11,7 @@ include "../Shared/RibbonType.fbs"; include "../PokeData/WazaSet.fbs"; include "../Entity/ParamSet.fbs"; -include "../Waza/WazaType.fbs"; +include "../Shared/WazaType.fbs"; namespace pkNX.Structures.FlatBuffers.SV; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataFull.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataFull.fbs similarity index 98% rename from pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataFull.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataFull.fbs index 41ad5e71..5e9f824c 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataFull.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataFull.fbs @@ -13,7 +13,7 @@ include "../Shared/LangType.fbs"; include "../Shared/BallType.fbs"; include "../Shared/RibbonType.fbs"; include "../Shared/PokeMemoType.fbs"; -include "../Waza/WazaType.fbs"; +include "../Shared/WazaType.fbs"; include "WazaSet.fbs"; namespace pkNX.Structures.FlatBuffers.SV; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataSymbol.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataSymbol.fbs similarity index 95% rename from pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataSymbol.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataSymbol.fbs index d25fa8d5..889e83d2 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataSymbol.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataSymbol.fbs @@ -8,7 +8,7 @@ include "../Shared/GemType.fbs"; include "../PokeData/WazaSet.fbs"; include "../Entity/ParamSet.fbs"; -include "../Waza/WazaType.fbs"; +include "../Shared/WazaType.fbs"; namespace pkNX.Structures.FlatBuffers.SV; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataTrade.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataTrade.fbs similarity index 97% rename from pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataTrade.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataTrade.fbs index 68fa8fde..9f4aacf8 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/PokeDataTrade.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/PokeDataTrade.fbs @@ -11,7 +11,7 @@ include "../Shared/BallType.fbs"; include "../Entity/ParamSet.fbs"; include "../PokeData/WazaSet.fbs"; -include "../Waza/WazaType.fbs"; +include "../Shared/WazaType.fbs"; namespace pkNX.Structures.FlatBuffers.SV; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/WazaSet.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/WazaSet.fbs similarity index 75% rename from pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/WazaSet.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/WazaSet.fbs index 31d13151..aff4aad2 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/PokeData/WazaSet.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/PokeData/WazaSet.fbs @@ -1,4 +1,4 @@ -include "../Waza/WazaID.fbs"; +include "../Shared/WazaID.fbs"; namespace pkNX.Structures.FlatBuffers.SV; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/BallType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/BallType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/BallType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/BallType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/BattleType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/BattleType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/BattleType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/BattleType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Enums/ClerkType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/ClerkType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Enums/ClerkType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/ClerkType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Enums/CondEnum.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/CondEnum.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Enums/CondEnum.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/CondEnum.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/DataType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/DataType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/DataType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/DataType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/DevID.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/DevID.fbs similarity index 99% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/DevID.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/DevID.fbs index a6426a3a..a63372e9 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/DevID.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/DevID.fbs @@ -1013,4 +1013,11 @@ enum DevID : ushort { DEV_KOMATANA3 = 1008, DEV_rUPAA2 = 1009, DEV_MANKII3 = 1010, + DEV_KAMENONI = 1011, + DEV_KAZITTYU2 = 1012, + DEV_DOKUINU = 1014, + DEV_DOKUZARU = 1015, + DEV_DOKUKIZI = 1016, + DEV_MATCHA1 = 1024, + DEV_MATCHA2 = 1025, } diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/GemType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/GemType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/GemType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/GemType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/ItemID.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/ItemID.fbs similarity index 88% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/ItemID.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/ItemID.fbs index 5c2fb1bf..8aac212d 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/ItemID.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/ItemID.fbs @@ -213,7 +213,9 @@ enum ItemID : int { ITEMID_RYUUNOPUREETO = 311, ITEMID_KOWAMOTEPUREETO = 312, ITEMID_KOUTETUPUREETO = 313, + ITEMID_REIKAINONUNO = 325, ITEMID_SURUDOITUME = 326, + ITEMID_SURUDOIKIBA = 327, ITEMID_WAZAMASIN01 = 328, ITEMID_WAZAMASIN02 = 329, ITEMID_WAZAMASIN03 = 330, @@ -306,6 +308,7 @@ enum ItemID : int { ITEMID_WAZAMASIN90 = 417, ITEMID_WAZAMASIN91 = 418, ITEMID_WAZAMASIN92 = 419, + ITEMID_GURASIDEANOHANA = 466, ITEMID_SUPIIDOBOORU = 492, ITEMID_REBERUBOORU = 493, ITEMID_RUAABOORU = 494, @@ -314,6 +317,7 @@ enum ItemID : int { ITEMID_HURENDOBOORU = 497, ITEMID_MUUNBOORU = 498, ITEMID_KONPEBOORU = 499, + ITEMID_KIREINAUROKO = 537, ITEMID_SINKANOKISEKI = 538, ITEMID_KARUISI = 539, ITEMID_GOTUGOTUMETTO = 540, @@ -411,8 +415,10 @@ enum ItemID : int { ITEMID_MAZIMEMINTO = 1251, ITEMID_WARETAPOTTO = 1253, ITEMID_KAKETAPOTTO = 1254, + ITEMID_HOKAKUOMAMORI = 1267, ITEMID_ROTOMUNOKATAROGU = 1278, ITEMID_GARANATUBURESU = 1582, + ITEMID_KEIKENOMAMORI = 1587, ITEMID_KIDUNANODADUNA = 1590, ITEMID_KIDUNANODADUNA_KAIZYO = 1591, ITEMID_GARANATURIISU = 1592, @@ -769,6 +775,36 @@ enum ItemID : int { ITEMID_WAZAMASIN169 = 2229, ITEMID_WAZAMASIN170 = 2230, ITEMID_WAZAMASIN171 = 2231, + ITEMID_WAZAMASIN172 = 2232, + ITEMID_WAZAMASIN173 = 2233, + ITEMID_WAZAMASIN174 = 2234, + ITEMID_WAZAMASIN175 = 2235, + ITEMID_WAZAMASIN176 = 2236, + ITEMID_WAZAMASIN177 = 2237, + ITEMID_WAZAMASIN178 = 2238, + ITEMID_WAZAMASIN179 = 2239, + ITEMID_WAZAMASIN180 = 2240, + ITEMID_WAZAMASIN181 = 2241, + ITEMID_WAZAMASIN182 = 2242, + ITEMID_WAZAMASIN183 = 2243, + ITEMID_WAZAMASIN184 = 2244, + ITEMID_WAZAMASIN185 = 2245, + ITEMID_WAZAMASIN186 = 2246, + ITEMID_WAZAMASIN187 = 2247, + ITEMID_WAZAMASIN188 = 2248, + ITEMID_WAZAMASIN189 = 2249, + ITEMID_WAZAMASIN190 = 2250, + ITEMID_WAZAMASIN191 = 2251, + ITEMID_WAZAMASIN192 = 2252, + ITEMID_WAZAMASIN193 = 2253, + ITEMID_WAZAMASIN194 = 2254, + ITEMID_WAZAMASIN195 = 2255, + ITEMID_WAZAMASIN196 = 2256, + ITEMID_WAZAMASIN197 = 2257, + ITEMID_WAZAMASIN198 = 2258, + ITEMID_WAZAMASIN199 = 2259, + ITEMID_WAZAMASIN200 = 2260, + ITEMID_WAZAMASIN201 = 2261, ITEMID_PIKUNIKKUSETTO = 2311, ITEMID_SUITOU1 = 2313, ITEMID_SUITOU2 = 2314, @@ -849,4 +885,85 @@ enum ItemID : int { ITEMID_RANCHIPIKKU18 = 2393, ITEMID_RANCHIPIKKU19 = 2394, ITEMID_SARA2 = 2396, + ITEMID_YOUSEINOHANE = 2401, + ITEMID_MITSUIRIRINGO = 2402, + ITEMID_BONSAKUNOCHAWAN = 2403, + ITEMID_KESSAKUNOCHAWAN = 2404, + ITEMID_MIDORINOMEN = 2405, + ITEMID_ISHIDUENOMEN = 2406, + ITEMID_IDONOMEN = 2407, + ITEMID_KAMADONOMEN = 2408, + ITEMID_OSYAREKAADO1 = 2409, + ITEMID_KESSHOUNOKAKERA = 2410, + ITEMID_KIBIDANGO1 = 2411, + ITEMID_KIBIDANGO2 = 2412, + ITEMID_KIBIDANGO3 = 2413, + ITEMID_KIBIDANGO4 = 2414, + ITEMID_KIBIDANGO5 = 2415, + ITEMID_KIBIDANGO6 = 2416, + ITEMID_ISU1 = 2417, + ITEMID_ISU2 = 2418, + ITEMID_ISU3 = 2419, + ITEMID_ISU4 = 2420, + ITEMID_ISU5 = 2421, + ITEMID_ISU6 = 2422, + ITEMID_ISU7 = 2423, + ITEMID_ISU8 = 2424, + ITEMID_ISU9 = 2425, + ITEMID_ISU10 = 2426, + ITEMID_ISU11 = 2427, + ITEMID_ISU12 = 2428, + ITEMID_ISU13 = 2429, + ITEMID_ISU14 = 2430, + ITEMID_ISU15 = 2431, + ITEMID_ISU16 = 2432, + ITEMID_ISU17 = 2433, + ITEMID_ISU18 = 2434, + ITEMID_ISU19 = 2435, + ITEMID_ISU20 = 2436, + ITEMID_ISU21 = 2437, + ITEMID_SOZAI240 = 2438, + ITEMID_SOZAI241 = 2439, + ITEMID_SOZAI242 = 2440, + ITEMID_SOZAI243 = 2441, + ITEMID_SOZAI244 = 2442, + ITEMID_SOZAI245 = 2443, + ITEMID_SOZAI246 = 2444, + ITEMID_SOZAI247 = 2445, + ITEMID_SOZAI248 = 2446, + ITEMID_SOZAI249 = 2447, + ITEMID_SOZAI250 = 2448, + ITEMID_SOZAI251 = 2449, + ITEMID_SOZAI252 = 2450, + ITEMID_SOZAI253 = 2451, + ITEMID_SOZAI254 = 2452, + ITEMID_SOZAI255 = 2453, + ITEMID_SOZAI256 = 2454, + ITEMID_SOZAI257 = 2455, + ITEMID_SOZAI258 = 2456, + ITEMID_SOZAI259 = 2457, + ITEMID_SOZAI260 = 2458, + ITEMID_SOZAI261 = 2459, + ITEMID_SOZAI262 = 2460, + ITEMID_SOZAI263 = 2461, + ITEMID_SOZAI264 = 2462, + ITEMID_SOZAI265 = 2463, + ITEMID_SOZAI266 = 2464, + ITEMID_SOZAI267 = 2465, + ITEMID_SOZAI268 = 2466, + ITEMID_SOZAI269 = 2467, + ITEMID_SOZAI270 = 2468, + ITEMID_SOZAI271 = 2469, + ITEMID_SOZAI272 = 2470, + ITEMID_SOZAI273 = 2471, + ITEMID_SOZAI274 = 2472, + ITEMID_SOZAI275 = 2473, + ITEMID_SOZAI276 = 2474, + ITEMID_SOZAI277 = 2475, + ITEMID_SOZAI278 = 2476, + ITEMID_SOZAI279 = 2477, + ITEMID_SOZAI280 = 2478, + ITEMID_KIBIDANGO9 = 2479, + ITEMID_ZIDORIBOU = 2480, + ITEMID_TERAOMAMORI = 2481, } diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/LangType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/LangType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/LangType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/LangType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/MoveType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/MoveType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/MoveType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/MoveType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Enums/PayType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/PayType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Enums/PayType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/PayType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/PokeMemoType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/PokeMemoType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/PokeMemoType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/PokeMemoType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/RareType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/RareType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/RareType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/RareType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/RibbonType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/RibbonType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/RibbonType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/RibbonType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/SeikakuType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/SeikakuType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/SeikakuType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/SeikakuType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Enums/SellType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/SellType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Enums/SellType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/SellType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/Sex.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/Sex.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/Sex.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/Sex.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/SexType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/SexType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/SexType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/SexType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Enums/ShopKind.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/ShopKind.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Enums/ShopKind.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/ShopKind.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/SizeType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/SizeType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/SizeType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/SizeType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/TalentType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/TalentType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/TalentType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/TalentType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Shared/TokuseiType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/TokuseiType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Shared/TokuseiType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/TokuseiType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Waza/WazaID.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/WazaID.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Waza/WazaID.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/WazaID.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Waza/WazaType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/WazaType.fbs similarity index 61% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Waza/WazaType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/WazaType.fbs index b043ce90..87700307 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Waza/WazaType.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/Schemas/Shared/WazaType.fbs @@ -1,6 +1,6 @@ namespace pkNX.Structures.FlatBuffers.SV; -enum WazaType : int -{ DEFAULT = 0, +enum WazaType : int { + DEFAULT = 0, MANUAL = 1, } diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/pkNX.Structures.FlatBuffers.SV.Shared.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/pkNX.Structures.FlatBuffers.SV.Shared.csproj new file mode 100644 index 00000000..abfb3a2c --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Shared/pkNX.Structures.FlatBuffers.SV.Shared.csproj @@ -0,0 +1,11 @@ + + + + + + + + ..\..\pkNX.Structures.FlatBuffers\Schemas\ + + + diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/Talk/CheckCategory.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/Talk/CheckCategory.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/Talk/CheckCategory.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/Talk/CheckCategory.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/Talk/TalkData.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/Talk/TalkData.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/Talk/TalkData.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/Talk/TalkData.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/Talk/TalkRankEffect.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/Talk/TalkRankEffect.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/Talk/TalkRankEffect.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/Talk/TalkRankEffect.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerBodySize.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerBodySize.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerBodySize.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerBodySize.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerCategory.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerCategory.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerCategory.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerCategory.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerDataArray.fbs similarity index 89% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerDataArray.fbs index 74d51eee..3183f69b 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerDataArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerDataArray.fbs @@ -1,6 +1,6 @@ -include "../PokeData/PokeDataBattle.fbs"; -include "../Shared/BattleType.fbs"; -include "../Shared/DataType.fbs"; +include "PokeData/PokeDataBattle.fbs"; +include "Shared/BattleType.fbs"; +include "Shared/DataType.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerEnvArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerEnvArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerEnvArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerEnvArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerTypeArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerTypeArray.fbs similarity index 95% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerTypeArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerTypeArray.fbs index ecfb917c..8aafd6c7 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Trainers/TrainerTypeArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/Schemas/TrainerTypeArray.fbs @@ -1,6 +1,6 @@ include "TrainerCategory.fbs"; include "TrainerBodySize.fbs"; -include "../Shared/Sex.fbs"; +include "Shared/Sex.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/pkNX.Structures.FlatBuffers.SV.Trainers.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/pkNX.Structures.FlatBuffers.SV.Trainers.csproj new file mode 100644 index 00000000..b782ecb2 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trainers/pkNX.Structures.FlatBuffers.SV.Trainers.csproj @@ -0,0 +1,11 @@ + + + + + + + + ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\ + + + diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityFileDescriptors.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityFileDescriptors.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityFileDescriptors.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityFileDescriptors.cs diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityFileSystemManager.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityFileSystemManager.cs similarity index 93% rename from pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityFileSystemManager.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityFileSystemManager.cs index 4b67540e..a00980c4 100644 --- a/pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityFileSystemManager.cs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityFileSystemManager.cs @@ -32,11 +32,11 @@ public TrinityFileSystemManager(string pathFs, string pathFd) // Extract the meta FlatBuffer var dataMetaFB = br.ReadBytes((int)(totalLength - ofsMetaFB)); - var meta = TrinityFileSystemMetadata.Serializer.Parse(dataMetaFB, FlatBufferDeserializationOption.Progressive); + var meta = TrinityFileSystemMetadata.Serializer.Parse(dataMetaFB, FlatBufferDeserializationOption.GreedyMutable); // Read the trpfd var dataFd = File.ReadAllBytes(pathFd); - var fd = TrinityFileDescriptors.Serializer.Parse(dataFd, FlatBufferDeserializationOption.Progressive); + var fd = TrinityFileDescriptors.Serializer.Parse(dataFd, FlatBufferDeserializationOption.GreedyMutable); Debug.Assert(meta.FileHashes.Count == fd.FileInfos.Count); Reader = br; @@ -61,7 +61,7 @@ public byte[] GetData(ulong offset, ulong length) public TrinityPak GetPak(int index) { var data = GetPakData(index); - return TrinityPak.Serializer.Parse(data); + return TrinityPak.Serializer.Parse(data, FlatBufferDeserializationOption.GreedyMutable); } public byte[] GetPakData(int index) diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityFileSystemMetadata.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityFileSystemMetadata.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityFileSystemMetadata.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityFileSystemMetadata.cs diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityPak.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityPak.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityPak.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityPak.cs diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityPakExtractor.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityPakExtractor.cs similarity index 95% rename from pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityPakExtractor.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityPakExtractor.cs index 869608aa..1f950143 100644 --- a/pkNX.Structures.FlatBuffers.SV/Gen9/Archive/TrinityPakExtractor.cs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Archive/TrinityPakExtractor.cs @@ -2,9 +2,8 @@ using System.IO; using FlatSharp; using pkNX.Containers; -using pkNX.Structures.FlatBuffers.SV.Trinity; -namespace pkNX.Structures.FlatBuffers.SV; +namespace pkNX.Structures.FlatBuffers.SV.Trinity; public static class TrinityPakExtractor { @@ -47,7 +46,7 @@ private static void ExportArc(TrinityFileSystemManager reader, int packIndex, st var outexpakdir = Path.Combine(outexdir, packFilePath); Directory.CreateDirectory(outexpakdir); - var trpak = FlatBufferConverter.DeserializeFrom(data, FlatBufferDeserializationOption.Lazy); + var trpak = FlatBufferConverter.DeserializeFrom(data, FlatBufferDeserializationOption.GreedyMutable); ExtractPack(trpak, outexpakdir); } diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityComponent.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityComponent.fbs similarity index 94% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityComponent.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityComponent.fbs index 1dc23656..bbd32996 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityComponent.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityComponent.fbs @@ -1,5 +1,5 @@ -include "../Geometry/Vec3f.fbs"; -include "../Geometry/PackedVec3f.fbs"; +include "Math/Vec3f.fbs"; +include "Math/PackedVec3f.fbs"; namespace pkNX.Structures.FlatBuffers.SV.Trinity; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityFileDescriptors.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityFileDescriptors.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityFileDescriptors.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityFileDescriptors.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityFileSystemMetadata.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityFileSystemMetadata.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityFileSystemMetadata.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityFileSystemMetadata.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityPak.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityPak.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityPak.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityPak.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityPropertySheet.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityPropertySheet.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityPropertySheet.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityPropertySheet.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinitySceneObject.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinitySceneObject.fbs similarity index 93% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinitySceneObject.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinitySceneObject.fbs index 08465c29..640595f3 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinitySceneObject.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinitySceneObject.fbs @@ -1,4 +1,4 @@ -include "../Geometry/PackedVec3f.fbs"; +include "Math/PackedVec3f.fbs"; namespace pkNX.Structures.FlatBuffers.SV.Trinity; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinitySceneObjectTemplate.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinitySceneObjectTemplate.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinitySceneObjectTemplate.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinitySceneObjectTemplate.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityScenePoint.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityScenePoint.fbs similarity index 85% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityScenePoint.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityScenePoint.fbs index edcc615f..8643601f 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Trinity/TrinityScenePoint.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/Schemas/TrinityScenePoint.fbs @@ -1,4 +1,4 @@ -include "../Geometry/PackedVec3f.fbs"; +include "Math/PackedVec3f.fbs"; namespace pkNX.Structures.FlatBuffers.SV.Trinity; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/pkNX.Structures.FlatBuffers.SV.Trinity.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/pkNX.Structures.FlatBuffers.SV.Trinity.csproj new file mode 100644 index 00000000..074d0161 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Trinity/pkNX.Structures.FlatBuffers.SV.Trinity.csproj @@ -0,0 +1,12 @@ + + + + + + + + + ..\..\pkNX.Structures.FlatBuffers\Schemas\ + + + diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/BattleBgmSelectTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/BattleBgmSelectTableArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/BattleBgmSelectTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/BattleBgmSelectTableArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Dressup/DressupCategoryDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Dressup/DressupCategoryDataArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Dressup/DressupCategoryDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Dressup/DressupCategoryDataArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Dressup/DressupItemDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Dressup/DressupItemDataArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Dressup/DressupItemDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Dressup/DressupItemDataArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Dressup/DressupShopDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Dressup/DressupShopDataArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Dressup/DressupShopDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Dressup/DressupShopDataArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Dressup/DressupStyleDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Dressup/DressupStyleDataArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Dressup/DressupStyleDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Dressup/DressupStyleDataArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Dressup/DressupStylePresetDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Dressup/DressupStylePresetDataArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Dressup/DressupStylePresetDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Dressup/DressupStylePresetDataArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Quest/DanQuestClearArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Quest/DanQuestClearArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Quest/DanQuestClearArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Quest/DanQuestClearArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Quest/EventSkyFlyArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Quest/EventSkyFlyArray.fbs similarity index 98% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Quest/EventSkyFlyArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Quest/EventSkyFlyArray.fbs index 766a42f0..e9d71edd 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Quest/EventSkyFlyArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Quest/EventSkyFlyArray.fbs @@ -1,4 +1,4 @@ -include "../../Geometry/Vec3f.fbs"; +include "Math/Vec3f.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Quest/GymQuestClearArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Quest/GymQuestClearArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Quest/GymQuestClearArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Quest/GymQuestClearArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Quest/NushiQuestClearArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Quest/NushiQuestClearArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Quest/NushiQuestClearArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Quest/NushiQuestClearArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Restaurant/RestaurantMenuDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Restaurant/RestaurantMenuDataArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Restaurant/RestaurantMenuDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Restaurant/RestaurantMenuDataArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Restaurant/RestaurantShopDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Restaurant/RestaurantShopDataArray.fbs similarity index 92% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Restaurant/RestaurantShopDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Restaurant/RestaurantShopDataArray.fbs index 83e862f9..ce5d9037 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Restaurant/RestaurantShopDataArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Restaurant/RestaurantShopDataArray.fbs @@ -1,4 +1,4 @@ -include "../Enums/PayType.fbs"; +include "Shared/PayType.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/SchoolMapDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/SchoolMapDataArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/SchoolMapDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/SchoolMapDataArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/FriendlyShopDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/FriendlyShopDataArray.fbs similarity index 81% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/FriendlyShopDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/FriendlyShopDataArray.fbs index 8bd5cd34..0a3980a7 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/FriendlyShopDataArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/FriendlyShopDataArray.fbs @@ -1,6 +1,6 @@ -include "../Enums/SellType.fbs"; -include "../Enums/PayType.fbs"; -include "../Enums/ClerkType.fbs"; +include "Shared/SellType.fbs"; +include "Shared/PayType.fbs"; +include "Shared/ClerkType.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/LineupDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/LineupDataArray.fbs similarity index 84% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/LineupDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/LineupDataArray.fbs index dee86ad6..532e227d 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/LineupDataArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/LineupDataArray.fbs @@ -1,5 +1,5 @@ -include "../Enums/CondEnum.fbs"; -include "../../Shared/ItemID.fbs"; +include "Shared/CondEnum.fbs"; +include "Shared/ItemID.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/ShopDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/ShopDataArray.fbs similarity index 87% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/ShopDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/ShopDataArray.fbs index 7d05d038..fbfc8cc2 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/ShopDataArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/ShopDataArray.fbs @@ -1,4 +1,4 @@ -include "../Enums/ShopKind.fbs"; +include "Shared/ShopKind.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/ShopWazamachineDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/ShopWazamachineDataArray.fbs similarity index 89% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/ShopWazamachineDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/ShopWazamachineDataArray.fbs index 5a3a2602..f7e55c3b 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/Shop/ShopWazamachineDataArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/Shop/ShopWazamachineDataArray.fbs @@ -1,5 +1,5 @@ -include "../../Shared/ItemID.fbs"; -include "../Enums/CondEnum.fbs"; +include "Shared/ItemID.fbs"; +include "Shared/CondEnum.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/SystemBgArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/SystemBgArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/SystemBgArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/SystemBgArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/TipsDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/TipsDataArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/TipsDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/TipsDataArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/ymap/DestinationDataTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/ymap/DestinationDataTableArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/ymap/DestinationDataTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/ymap/DestinationDataTableArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/ymap/NpcDestinationDataTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/ymap/NpcDestinationDataTableArray.fbs similarity index 94% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/ymap/NpcDestinationDataTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/ymap/NpcDestinationDataTableArray.fbs index d708f677..a2427fe3 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/ymap/NpcDestinationDataTableArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/ymap/NpcDestinationDataTableArray.fbs @@ -1,4 +1,4 @@ -include "../../Geometry/Vec3f.fbs"; +include "Math/Vec3f.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/ymap/PlaceNameDataTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/ymap/PlaceNameDataTableArray.fbs similarity index 92% rename from pkNX.Structures.FlatBuffers.SV/Schemas/UI/ymap/PlaceNameDataTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/ymap/PlaceNameDataTableArray.fbs index 4843e924..6a161063 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/UI/ymap/PlaceNameDataTableArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/Schemas/ymap/PlaceNameDataTableArray.fbs @@ -1,4 +1,4 @@ -include "../../Geometry/Vec3f.fbs"; +include "Math/Vec3f.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/pkNX.Structures.FlatBuffers.SV.UI.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/pkNX.Structures.FlatBuffers.SV.UI.csproj new file mode 100644 index 00000000..b1ac3808 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.UI/pkNX.Structures.FlatBuffers.SV.UI.csproj @@ -0,0 +1,11 @@ + + + + + + + + ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\;..\..\pkNX.Structures.FlatBuffers\Schemas\ + + + diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Waza/Waza.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/Schemas/Waza.fbs similarity index 98% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Waza/Waza.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/Schemas/Waza.fbs index aeb6f161..046b05a7 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Waza/Waza.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/Schemas/Waza.fbs @@ -22,7 +22,7 @@ table Waza { Flinch:ubyte; EffectSequence:ushort; Recoil:byte; - RawHealing:ubyte; + RawHealing:byte; RawTarget:ubyte; StatAmps:WazaEntityStat (required); Affinity:WazaAffinity = None; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Waza/WazaAffinity.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/Schemas/WazaAffinity.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Waza/WazaAffinity.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/Schemas/WazaAffinity.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Waza/WazaEntityStat.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/Schemas/WazaEntityStat.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Waza/WazaEntityStat.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/Schemas/WazaEntityStat.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Waza/WazaInflict.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/Schemas/WazaInflict.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Waza/WazaInflict.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/Schemas/WazaInflict.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/pkNX.Structures.FlatBuffers.SV.Waza.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/pkNX.Structures.FlatBuffers.SV.Waza.csproj new file mode 100644 index 00000000..35e3d842 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Waza/pkNX.Structures.FlatBuffers.SV.Waza.csproj @@ -0,0 +1,2 @@ + + diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/AreaInfo.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/AreaInfo.fbs similarity index 97% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/AreaInfo.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/AreaInfo.fbs index 19246664..9d8f04b5 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/AreaInfo.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/AreaInfo.fbs @@ -28,6 +28,7 @@ table AreaInfo { NoOcclusionCulling:bool; MinEncLv:int; MaxEncLv:int; + AdjustEncLv:int; BiomeBase:EncBiome = None; Tag:AreaTag = None; BiomeOverride:OverrideBiome (required); diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/AreaTag.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/AreaTag.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/AreaTag.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/AreaTag.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/AreaType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/AreaType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/AreaType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/AreaType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/BandType.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/BandType.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/BandType.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/BandType.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/Biome.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/Biome.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/Biome.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/Biome.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/BringItem.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/BringItem.fbs similarity index 82% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/BringItem.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/BringItem.fbs index fe97d28a..7cca7afa 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/BringItem.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/BringItem.fbs @@ -1,4 +1,4 @@ -include "../../Shared/ItemID.fbs"; +include "Shared/ItemID.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_valueStruct"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/EnableTable.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/EnableTable.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/EnableTable.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/EnableTable.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/EncAttr.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/EncAttr.fbs similarity index 82% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/EncAttr.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/EncAttr.fbs index c35c80ae..14a56126 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/EncAttr.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/EncAttr.fbs @@ -20,4 +20,9 @@ enum EncAttr : ubyte { kusamura_kare = 16, shiba = 17, dummy = 18, + jari = 19, + kawara = 20, + kawasuna = 21, + hate_kusa = 22, + hate_iwa = 23, } diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/EncBiome.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/EncBiome.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/EncBiome.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/EncBiome.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldAttrKey.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldAttrKey.fbs similarity index 89% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldAttrKey.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldAttrKey.fbs index 08be157b..8c6c1ef4 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldAttrKey.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldAttrKey.fbs @@ -39,5 +39,10 @@ enum FieldAttrKey : int { takenoha = 35, kawara = 36, takara = 37, + tanbo = 38, + kawasuna = 40, + hate_kusa = 41, + hate_iwa = 42, + hate_tsuchi = 43, dummy = 99, } diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldDungeonAreaArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldDungeonAreaArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldDungeonAreaArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldDungeonAreaArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldInsideAreaArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldInsideAreaArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldInsideAreaArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldInsideAreaArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldLocationArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldLocationArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldLocationArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldLocationArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldMainAreaArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldMainAreaArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldMainAreaArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldMainAreaArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldSubAreaArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldSubAreaArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/FieldSubAreaArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/FieldSubAreaArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/OverrideBiome.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/OverrideBiome.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Area/OverrideBiome.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Area/OverrideBiome.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/DeliveryOutbreakArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/DeliveryOutbreakArray.fbs new file mode 100644 index 00000000..3458061d --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/DeliveryOutbreakArray.fbs @@ -0,0 +1,23 @@ +namespace pkNX.Structures.FlatBuffers.SV; +attribute "fs_serializer"; + +table DeliveryOutbreak { + ZoneID:ulong; + LotValue:short; + Poke1:ulong; + Poke1LotValue:short; + Poke2:ulong; + Poke2LotValue:short; + Poke3:ulong; + Poke3LotValue:short; + Poke4:ulong; + Poke4LotValue:short; + Poke5:ulong; + Poke5LotValue:short; +} + +table DeliveryOutbreakArray (fs_serializer) { + Table:[DeliveryOutbreak] (required); +} + +root_type DeliveryOutbreakArray; diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/DeliveryOutbreakPokeDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/DeliveryOutbreakPokeDataArray.fbs new file mode 100644 index 00000000..285dcd1b --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/DeliveryOutbreakPokeDataArray.fbs @@ -0,0 +1,62 @@ +include "Shared/DevID.fbs"; +include "Shared/SexType.fbs"; +include "Shared/RibbonType.fbs"; +include "Area/EnableTable.fbs"; +include "Area/BringItem.fbs"; +include "VersionTable.fbs"; + +namespace pkNX.Structures.FlatBuffers.SV; +attribute "fs_serializer"; + +table DeliveryOutbreakPokeData { + ID:ulong; + DevId:DevID; + Sex:SexType; + FormId:byte; + MinLevel:short; + MaxLevel:short; + Area:AreaNo; + LocationName:ulong; + Enable:EnableTable; + Version:VersionTable; + Item:BringItem; + EnableRarePercentage:bool; + RarePercentage:float; + AddRibbonType:RibbonType; + AddRibbonPercentage:float; + EnableScaleRange:bool; + MinScale:short; + MaxScale:short; +} + +table AreaNo { + Area01:bool; + Area02:bool; + Area03:bool; + Area04:bool; + Area05:bool; + Area06:bool; + Area07:bool; + Area08:bool; + Area09:bool; + Area10:bool; + Area11:bool; + Area12:bool; + Area13:bool; + Area14:bool; + Area15:bool; + Area16:bool; + Area17:bool; + Area18:bool; + Area19:bool; + Area20:bool; + Area21:bool; + Area22:bool; + Area23:bool; +} + +table DeliveryOutbreakPokeDataArray (fs_serializer) { + Table:[DeliveryOutbreakPokeData] (required); +} + +root_type DeliveryOutbreakPokeDataArray; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/EncountPokeDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/EncountPokeDataArray.fbs similarity index 94% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/EncountPokeDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/EncountPokeDataArray.fbs index 7a97e0af..d58ab3be 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/World/EncountPokeDataArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/EncountPokeDataArray.fbs @@ -1,5 +1,5 @@ -include "../Shared/DevID.fbs"; -include "../Shared/SexType.fbs"; +include "Shared/DevID.fbs"; +include "Shared/SexType.fbs"; include "TimeTable.fbs"; include "VersionTable.fbs"; include "Area/BandType.fbs"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/EventBattlePokemonArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/EventBattlePokemonArray.fbs similarity index 88% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/EventBattlePokemonArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/EventBattlePokemonArray.fbs index 12c66f37..781c2fe4 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/World/EventBattlePokemonArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/EventBattlePokemonArray.fbs @@ -1,4 +1,5 @@ -include "../PokeData/PokeDataEventBattle.fbs"; +include "PokeData/PokeDataEventBattle.fbs"; + namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/AreaFlyFlagArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/AreaFlyFlagArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/AreaFlyFlagArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/AreaFlyFlagArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/CoinSymbolManager.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/CoinSymbolManager.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/CoinSymbolManager.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/CoinSymbolManager.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/ExclusionGroupArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/ExclusionGroupArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/ExclusionGroupArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/ExclusionGroupArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldAutoReturnPosTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldAutoReturnPosTableArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldAutoReturnPosTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldAutoReturnPosTableArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldAutomaticReturnTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldAutomaticReturnTableArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldAutomaticReturnTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldAutomaticReturnTableArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldCamera.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldCamera.fbs similarity index 97% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldCamera.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldCamera.fbs index a77225a1..480c5b66 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldCamera.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldCamera.fbs @@ -1,4 +1,4 @@ -include "../../Geometry/Vec3f.fbs"; +include "Math/Vec3f.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldInteriorCamera.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldInteriorCamera.fbs similarity index 90% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldInteriorCamera.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldInteriorCamera.fbs index 0c36a409..4e06c0d8 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldInteriorCamera.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldInteriorCamera.fbs @@ -1,4 +1,4 @@ -include "../../Geometry/Vec3f.fbs"; +include "Math/Vec3f.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldOutOfRangeTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldOutOfRangeTableArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldOutOfRangeTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldOutOfRangeTableArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldPlayer.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldPlayer.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldPlayer.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldPlayer.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldRide.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldRide.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/FieldRide.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/FieldRide.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/GemSymbolLotteryTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/GemSymbolLotteryTableArray.fbs similarity index 94% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/GemSymbolLotteryTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/GemSymbolLotteryTableArray.fbs index 1fb04b47..b290120b 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/GemSymbolLotteryTableArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/GemSymbolLotteryTableArray.fbs @@ -1,4 +1,4 @@ -include "../../Shared/MoveType.fbs"; +include "Shared/MoveType.fbs"; namespace pkNX.Structures.FlatBuffers.SV; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/GemSymbolSetting.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/GemSymbolSetting.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/GemSymbolSetting.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/GemSymbolSetting.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/MapChangeParametersArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/MapChangeParametersArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/Field/MapChangeParametersArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/Field/MapChangeParametersArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/BehaviorFrequency.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/BehaviorFrequency.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/BehaviorFrequency.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/BehaviorFrequency.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/FixedSymbolAI.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/FixedSymbolAI.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/FixedSymbolAI.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/FixedSymbolAI.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/FixedSymbolArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/FixedSymbolArray.fbs similarity index 90% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/FixedSymbolArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/FixedSymbolArray.fbs index cdccd3db..01610239 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/FixedSymbolArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/FixedSymbolArray.fbs @@ -1,4 +1,4 @@ -include "../../PokeData/PokeDataSymbol.fbs"; +include "PokeData/PokeDataSymbol.fbs"; include "FixedSymbolAI.fbs"; include "FixedSymbolGeneration.fbs"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/FixedSymbolGeneration.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/FixedSymbolGeneration.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/FixedSymbolGeneration.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/FixedSymbolGeneration.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/FixedSymbolManager.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/FixedSymbolManager.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/FixedSymbolManager.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/FixedSymbolManager.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/GenerationPattern.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/GenerationPattern.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/GenerationPattern.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/GenerationPattern.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/PokemonActionID.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/PokemonActionID.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/FixedSymbol/PokemonActionID.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/FixedSymbol/PokemonActionID.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/OutbreakPointArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/OutbreakPointArray.fbs new file mode 100644 index 00000000..bbedfc98 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/OutbreakPointArray.fbs @@ -0,0 +1,29 @@ +include "Math/PackedVec3f.fbs"; +include "Math/PackedVec2f.fbs"; + +namespace pkNX.Structures.FlatBuffers.SV; + +attribute "fs_serializer"; + +struct OutbreakEnableTable { + land:bool; + upWater:bool; + underWater:bool; + air1:bool; + air2:bool; +} +struct OutbreakPointData { + position:PackedVec3f; + level_range:PackedVec2f; + i_biome:short; + i_substance:short; + area_no:byte; + area_name:ulong; + enable_table:OutbreakEnableTable; +} + +table OutbreakPointArray (fs_serializer) { + Table:[OutbreakPointData] (required); +} + +root_type OutbreakPointArray; diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/OutbreakSetting.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/OutbreakSetting.fbs new file mode 100644 index 00000000..bb5597d0 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/OutbreakSetting.fbs @@ -0,0 +1,16 @@ +namespace pkNX.Structures.FlatBuffers; +attribute "fs_serializer"; + +table FieldLotteryDesc { + AreaNum:short; + LotMin:short; + LotMax:short; +} + +table OutbreakSetting (fs_serializer) { + Field_0:FieldLotteryDesc (required); + Field_1:FieldLotteryDesc (required); + Field_2:FieldLotteryDesc (required); +} + +root_type OutbreakSetting; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/PointDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/PointDataArray.fbs similarity index 84% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/PointDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/PointDataArray.fbs index 59d96f21..d5430b5d 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/World/PointDataArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/PointDataArray.fbs @@ -1,5 +1,5 @@ -include "../Geometry/PackedVec3f.fbs"; -include "../Geometry/PackedVec2f.fbs"; +include "Math/PackedVec3f.fbs"; +include "Math/PackedVec2f.fbs"; include "Area/EncBiome.fbs"; include "Area/EncAttr.fbs"; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/SettingData.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/SettingData.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/SettingData.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/SettingData.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/TimeTable.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/TimeTable.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/TimeTable.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/TimeTable.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/World/VersionTable.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/VersionTable.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/World/VersionTable.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/Schemas/VersionTable.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/World/AreaInfo.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/AreaInfo.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/World/AreaInfo.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/AreaInfo.cs diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/DeliveryOutbreak.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/DeliveryOutbreak.cs new file mode 100644 index 00000000..6b6145e9 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/DeliveryOutbreak.cs @@ -0,0 +1,13 @@ +using System.ComponentModel; +// ReSharper disable UnusedMember.Global +// ReSharper disable ClassNeverInstantiated.Global +// ReSharper disable UnusedType.Global +#nullable disable + +namespace pkNX.Structures.FlatBuffers.SV; + +[TypeConverter(typeof(ExpandableObjectConverter))] +public partial class DeliveryOutbreakArray { } + +[TypeConverter(typeof(ExpandableObjectConverter))] +public partial class DeliveryOutbreak { } diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/DeliveryOutbreakPokeData.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/DeliveryOutbreakPokeData.cs new file mode 100644 index 00000000..2a68e123 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/DeliveryOutbreakPokeData.cs @@ -0,0 +1,83 @@ +using System.ComponentModel; +// ReSharper disable UnusedMember.Global +// ReSharper disable ClassNeverInstantiated.Global +// ReSharper disable UnusedType.Global + +namespace pkNX.Structures.FlatBuffers.SV; + +[TypeConverter(typeof(ExpandableObjectConverter))] +public partial class DeliveryOutbreakPokeDataArray { } + +[TypeConverter(typeof(ExpandableObjectConverter))] +public partial class DeliveryOutbreakPokeData +{ + public bool IsAreaLimited(out uint areaBits) + { + areaBits = 0; + if (Area is null) + return false; + if (Area.Area01) areaBits |= 1u << 1; + if (Area.Area02) areaBits |= 1u << 2; + if (Area.Area03) areaBits |= 1u << 3; + if (Area.Area04) areaBits |= 1u << 4; + if (Area.Area05) areaBits |= 1u << 5; + if (Area.Area06) areaBits |= 1u << 6; + if (Area.Area07) areaBits |= 1u << 7; + if (Area.Area08) areaBits |= 1u << 8; + if (Area.Area09) areaBits |= 1u << 9; + if (Area.Area10) areaBits |= 1u << 10; + if (Area.Area11) areaBits |= 1u << 11; + if (Area.Area12) areaBits |= 1u << 12; + if (Area.Area13) areaBits |= 1u << 13; + if (Area.Area14) areaBits |= 1u << 14; + if (Area.Area15) areaBits |= 1u << 15; + if (Area.Area16) areaBits |= 1u << 16; + if (Area.Area17) areaBits |= 1u << 17; + if (Area.Area18) areaBits |= 1u << 18; + if (Area.Area19) areaBits |= 1u << 19; + if (Area.Area20) areaBits |= 1u << 20; + if (Area.Area21) areaBits |= 1u << 21; + if (Area.Area22) areaBits |= 1u << 22; + if (Area.Area23) areaBits |= 1u << 23; + return areaBits != 0; + } + + private const ulong LocationNone = 0xCBF29CE484222645u; + public bool IsSpecificArea => LocationName != LocationNone; + public bool IsAreaConstrained => IsAreaLimited(out _); + + public bool IsEnableCompatible(OutbreakEnableTable point) => Enable is not { } en || point switch + { + { Air1: true } when en.Air1 => true, + { Air2: true } when en.Air2 => true, + { Land: true } when en.Land => true, + { UpWater: true } when en.UpWater => true, + { UnderWater: true } when en.Underwater => true, + { IsUnrestricted: true } => true, + _ => en.IsUnrestricted, + }; + + public bool IsCompatibleArea(ulong areaName) => LocationName == LocationNone || LocationName == areaName; + public bool IsCompatibleArea(byte area) => !IsAreaLimited(out var bits) || (bits & (1u << area)) != 0; + + public bool IsLevelRangeCompatible(PackedVec2f range) + { + var rMin = range.X; + var rMax = range.Y; + return rMin <= MaxLevel && MinLevel <= rMax; + } +} + +[TypeConverter(typeof(ExpandableObjectConverter))] +public partial class AreaNo { } + +[TypeConverter(typeof(ExpandableObjectConverter))] +public partial class OutbreakEnableTable +{ + public bool IsUnrestricted => !Air1 && !Air2 && !Land && !UpWater && !UnderWater; +} + +public partial struct EnableTable +{ + public bool IsUnrestricted => !Air1 && !Air2 && !Land && !UpWater && !Underwater; +} diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/EncountPokeData.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/EncountPokeData.cs new file mode 100644 index 00000000..037ce1ed --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/EncountPokeData.cs @@ -0,0 +1,10 @@ +using System.ComponentModel; + +namespace pkNX.Structures.FlatBuffers.SV; + +[TypeConverter(typeof(ExpandableObjectConverter))] +public partial class EncountPokeData +{ + public bool IsLevelRangeOverlap(int min, int max) => min <= MaxLevel && MinLevel <= max; + public bool IsLevelRangeOverlap(float min, float max) => min <= MaxLevel && MinLevel <= max; +} diff --git a/pkNX.Structures.FlatBuffers.SV/Gen9/World/PointDataArray.cs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/PointDataArray.cs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Gen9/World/PointDataArray.cs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/World/PointDataArray.cs diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/pkNX.Structures.FlatBuffers.SV.World.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/pkNX.Structures.FlatBuffers.SV.World.csproj new file mode 100644 index 00000000..b1ac3808 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.World/pkNX.Structures.FlatBuffers.SV.World.csproj @@ -0,0 +1,11 @@ + + + + + + + + ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\;..\..\pkNX.Structures.FlatBuffers\Schemas\ + + + diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Zukan/BlacklistArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/Schemas/BlacklistArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Zukan/BlacklistArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/Schemas/BlacklistArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Zukan/DistributionRootArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/Schemas/DistributionRootArray.fbs similarity index 100% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Zukan/DistributionRootArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/Schemas/DistributionRootArray.fbs diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Zukan/MemoPokeTableArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/Schemas/MemoPokeTableArray.fbs similarity index 81% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Zukan/MemoPokeTableArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/Schemas/MemoPokeTableArray.fbs index b2ebd919..16f5c34b 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Zukan/MemoPokeTableArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/Schemas/MemoPokeTableArray.fbs @@ -1,13 +1,17 @@ -include "../Shared/DevID.fbs"; -include "../Shared/Sex.fbs"; +include "Shared/DevID.fbs"; +include "Shared/Sex.fbs"; + namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; + table MemoPokeTable { DevNo:DevID = DEV_NULL; Sex:Sex; FormNo:int; } + table MemoPokeTableArray (fs_serializer) { Table:[MemoPokeTable] (required); } + root_type MemoPokeTableArray; diff --git a/pkNX.Structures.FlatBuffers.SV/Schemas/Zukan/RewardDataArray.fbs b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/Schemas/RewardDataArray.fbs similarity index 91% rename from pkNX.Structures.FlatBuffers.SV/Schemas/Zukan/RewardDataArray.fbs rename to pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/Schemas/RewardDataArray.fbs index 257557d0..b35b8d9b 100644 --- a/pkNX.Structures.FlatBuffers.SV/Schemas/Zukan/RewardDataArray.fbs +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/Schemas/RewardDataArray.fbs @@ -1,4 +1,4 @@ -include "../Shared/ItemID.fbs"; +include "Shared/ItemID.fbs"; namespace pkNX.Structures.FlatBuffers.SV; attribute "fs_serializer"; diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/pkNX.Structures.FlatBuffers.SV.Zukan.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/pkNX.Structures.FlatBuffers.SV.Zukan.csproj new file mode 100644 index 00000000..b782ecb2 --- /dev/null +++ b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.Zukan/pkNX.Structures.FlatBuffers.SV.Zukan.csproj @@ -0,0 +1,11 @@ + + + + + + + + ..\pkNX.Structures.FlatBuffers.SV.Shared\Schemas\ + + + diff --git a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.csproj b/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.csproj deleted file mode 100644 index 4a164cee..00000000 --- a/pkNX.Structures.FlatBuffers.SV/pkNX.Structures.FlatBuffers.SV.csproj +++ /dev/null @@ -1,37 +0,0 @@ - - - net7.0 - enable - - - - - - - - - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - GreedyMutable;Progressive - true - - - - - Schemas\ - ..\pkNX.Structures.FlatBuffers\Schemas\ - - - - - - - diff --git a/pkNX.Structures.FlatBuffers.SWSH/pkNX.Structures.FlatBuffers.SWSH.csproj b/pkNX.Structures.FlatBuffers.SWSH/pkNX.Structures.FlatBuffers.SWSH.csproj index 02d10b50..d6bdfa40 100644 --- a/pkNX.Structures.FlatBuffers.SWSH/pkNX.Structures.FlatBuffers.SWSH.csproj +++ b/pkNX.Structures.FlatBuffers.SWSH/pkNX.Structures.FlatBuffers.SWSH.csproj @@ -11,8 +11,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -25,7 +25,6 @@ - Schemas\ ..\pkNX.Structures.FlatBuffers\Schemas\ diff --git a/pkNX.Structures.FlatBuffers/Math/PackedVec3f.cs b/pkNX.Structures.FlatBuffers/Math/PackedVec3f.cs index 41d0ce73..a835268f 100644 --- a/pkNX.Structures.FlatBuffers/Math/PackedVec3f.cs +++ b/pkNX.Structures.FlatBuffers/Math/PackedVec3f.cs @@ -1,4 +1,3 @@ -using System; using System.ComponentModel; namespace pkNX.Structures.FlatBuffers; @@ -18,20 +17,19 @@ public PackedVec3f(float x = 0, float y = 0, float z = 0) Z = z; } - public readonly bool IsOne => X is 1 && Y is 1 && Z is 1; - public readonly bool IsZero => X is 0 && Y is 0 && Z is 0; + public readonly bool IsOne() => X is 1 && Y is 1 && Z is 1; + public readonly bool IsZero() => X is 0 && Y is 0 && Z is 0; + public readonly float Magnitude() => MathF.Sqrt(MagnitudeSqr()); + public readonly float MagnitudeSqr() => Dot(this); + public readonly PackedVec3f Normalized() => this * (1 / Magnitude()); - public float Magnitude => MathF.Sqrt(MagnitudeSqr); - public readonly float MagnitudeSqr => Dot(this); - public PackedVec3f Normalized() => this * (1 / Magnitude); + public readonly float Dot(PackedVec3f other) => (X * other.X) + (Y * other.Y) + (Z * other.Z); + public readonly PackedVec3f Cross(PackedVec3f other) => new((Y * other.Z) - (Z * other.Y), (Z * other.X) - (X * other.Z), (X * other.Y) - (Y * other.X)); + public readonly float DistanceTo(PackedVec3f other) => (this - other).Magnitude(); + public readonly float DistanceToSqr(PackedVec3f other) => (this - other).MagnitudeSqr(); + public readonly PackedVec3f Lerp(PackedVec3f other, float t) => this + ((other - this) * t); - public readonly float Dot(PackedVec3f other) => X * other.X + Y * other.Y + Z * other.Z; - public readonly PackedVec3f Cross(PackedVec3f other) => new(Y * other.Z - Z * other.Y, Z * other.X - X * other.Z, X * other.Y - Y * other.X); - public readonly float DistanceTo(PackedVec3f other) => (this - other).Magnitude; - public readonly float DistanceToSqr(PackedVec3f other) => (this - other).MagnitudeSqr; - public readonly PackedVec3f Lerp(PackedVec3f other, float t) => this + (other - this) * t; - - public PackedVec3f Clone() => new() + public readonly PackedVec3f Clone() => new() { X = X, Y = Y, diff --git a/pkNX.Structures.FlatBuffers/pkNX.Structures.FlatBuffers.csproj b/pkNX.Structures.FlatBuffers/pkNX.Structures.FlatBuffers.csproj index 895c62a5..843f3573 100644 --- a/pkNX.Structures.FlatBuffers/pkNX.Structures.FlatBuffers.csproj +++ b/pkNX.Structures.FlatBuffers/pkNX.Structures.FlatBuffers.csproj @@ -12,8 +12,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/pkNX.Structures/Havok/HavokCollision.cs b/pkNX.Structures/Havok/HavokCollision.cs index f5693f2f..47bd6ae5 100644 --- a/pkNX.Structures/Havok/HavokCollision.cs +++ b/pkNX.Structures/Havok/HavokCollision.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.Drawing; using System.Numerics; using static System.Buffers.Binary.BinaryPrimitives; @@ -147,44 +146,46 @@ public static AABBTree ParseAABBTree(ReadOnlySpan trcol) Debug.Assert(nodesItem.Type.Fields[0].Type.SubType.Name == "hkUint32"); Debug.Assert(nodesItem.Type.Fields[1].Name == "isLeaf"); Debug.Assert(nodesItem.Type.Fields[1].Type.FormatType == FormatType.Bool); - - static float[] ReadVector4(ReadOnlySpan buf, int ofs) => new[] - { - ReadSingleLittleEndian(buf[ofs..]), - ReadSingleLittleEndian(buf[(ofs+4)..]), - ReadSingleLittleEndian(buf[(ofs+8)..]), - ReadSingleLittleEndian(buf[(ofs+12)..]), - }; - - static uint[] ReadNodeData(ReadOnlySpan buf, int ofs) => new[] - { - ReadUInt32LittleEndian(buf[ofs..]), - ReadUInt32LittleEndian(buf[(ofs+4)..]), - ReadUInt32LittleEndian(buf[(ofs+8)..]), - ReadUInt32LittleEndian(buf[(ofs+12)..]), - }; - - var nodes = new List(); + var nodes = new List((int)nodesItem.Count); for (var i = 0; i < nodesItem.Count; ++i) { - var nofs = (int)ofs + ((int)nodesItem.Type.Size * i); + var type = nodesItem.Type; + var nofs = (int)ofs + ((int)type.Size * i); + var slice = data[nofs..]; + var parentFields = type.Parent.Fields; nodes.Add(new hkcdSimdTreeNode { - lx = ReadVector4(data, nofs + (int)nodesItem.Type.Parent.Fields[0].Offset), - hx = ReadVector4(data, nofs + (int)nodesItem.Type.Parent.Fields[1].Offset), - ly = ReadVector4(data, nofs + (int)nodesItem.Type.Parent.Fields[2].Offset), - hy = ReadVector4(data, nofs + (int)nodesItem.Type.Parent.Fields[3].Offset), - lz = ReadVector4(data, nofs + (int)nodesItem.Type.Parent.Fields[4].Offset), - hz = ReadVector4(data, nofs + (int)nodesItem.Type.Parent.Fields[5].Offset), - data = ReadNodeData(data, nofs + (int)nodesItem.Type.Fields[0].Offset), - IsLeaf = data[nofs + (int)nodesItem.Type.Fields[1].Offset] != 0, + LoX = ReadVector4(slice[(int)parentFields[0].Offset..]), + HiX = ReadVector4(slice[(int)parentFields[1].Offset..]), + LoY = ReadVector4(slice[(int)parentFields[2].Offset..]), + HiY = ReadVector4(slice[(int)parentFields[3].Offset..]), + LoZ = ReadVector4(slice[(int)parentFields[4].Offset..]), + HiZ = ReadVector4(slice[(int)parentFields[5].Offset..]), + Data = ReadNodeData(slice[(int)type.Fields[0].Offset..]), + IsLeaf = slice[(int)type.Fields[1].Offset] != 0, }); } return new(nodes); } + private static float[] ReadVector4(ReadOnlySpan buf) => new[] + { + ReadSingleLittleEndian(buf), + ReadSingleLittleEndian(buf[4..]), + ReadSingleLittleEndian(buf[8..]), + ReadSingleLittleEndian(buf[12..]), + }; + + private static uint[] ReadNodeData(ReadOnlySpan buf) => new[] + { + ReadUInt32LittleEndian(buf), + ReadUInt32LittleEndian(buf[4..]), + ReadUInt32LittleEndian(buf[8..]), + ReadUInt32LittleEndian(buf[12..]), + }; + private static List ReadStrings(ReadOnlySpan buffer) { var strings = new List(); @@ -198,7 +199,7 @@ private static List ReadStrings(ReadOnlySpan buffer) while (buffer[endOfs] != 0) endOfs++; - strings.Add(System.Text.Encoding.ASCII.GetString(buffer[ofs..endOfs].ToArray())); + strings.Add(System.Text.Encoding.ASCII.GetString(buffer[ofs..endOfs])); ofs = endOfs + 1; } @@ -207,24 +208,22 @@ private static List ReadStrings(ReadOnlySpan buffer) private static List ReadTna1(ReadOnlySpan buffer, List tst1) { - var tna1 = new List(); - var (ofs, count) = ReadVar32(buffer); + var tna1 = new List((int)count + 1); for (var i = 0; i < count + 1; ++i) - tna1.Add(new HavokTypeObject { Name = "Invalid", }); // Types are 1-indexed. + tna1.Add(new HavokTypeObject { Name = "Invalid" }); // Types are 1-indexed. - for (var i = 0u; i < count; ++i) + for (var i = 0; i < count; ++i) { var (tiCnt, ti) = ReadVar32(buffer[ofs..]); ofs += tiCnt; - - var tna = tna1[(int)i + 1]; - - tna.Name = tst1[(int)ti]; - tna.Template = new List(); - var (pCnt, numParams) = ReadVar32(buffer[ofs..]); ofs += pCnt; + + var tna = tna1[i + 1]; + tna.Name = tst1[(int)ti]; + var list = tna.Template = new List((int)numParams); + for (var n = 0; n < numParams; ++n) { var (pnCnt, pni) = ReadVar32(buffer[ofs..]); @@ -235,10 +234,10 @@ private static List ReadTna1(ReadOnlySpan buffer, List buffer, List tn tna.Flags = (ushort)flags; } - tna.Fields = new List(); if (tna.IsOptionFields) { (cnt, var fieldPair) = ReadVar32(buffer[ofs..]); ofs += cnt; var numFields = fieldPair & 0xFFFF; + tna.Fields = new List((int)numFields); for (var i = 0; i < numFields; ++i) { (cnt, var fnIdx) = ReadVar32(buffer[ofs..]); @@ -328,11 +327,15 @@ private static void ReadTbdy(ReadOnlySpan buffer, List tn }); } } - tna.Interfaces = new List(); + else + { + tna.Fields = new List(); + } if (tna.IsOptionInterfaces) { (cnt, var intCount) = ReadVar32(buffer[ofs..]); ofs += cnt; + tna.Interfaces = new List((int)intCount); for (var i = 0; i < (int)intCount; ++i) { @@ -348,6 +351,10 @@ private static void ReadTbdy(ReadOnlySpan buffer, List tn }); } } + else + { + tna.Interfaces = new List(); + } if (tna.IsOptionAttribute) { (cnt, tna.Attribute) = ReadVar32(buffer[ofs..]); @@ -427,47 +434,43 @@ private static (int, uint) ReadVar32(ReadOnlySpan buffer) public class AABBTree : IContainsV3f { - private readonly List _nodes; - private int _numLeafRects; - private readonly RectangleF[] _leafRectangles; - - public const float MaxValue = 3.40282E+38F; - public const float MinValue = -3.40282E+38F; + public List Nodes { get; } + public int NumBoundingBoxes { get; } + public Rectangle3D[] BoundingBoxRectangles { get; } public AABBTree(List nodes) { - _nodes = nodes; - - _numLeafRects = 0; - foreach (var node in _nodes) + Nodes = nodes; + foreach (var node in Nodes) { - if (!node.IsLeaf) continue; + if (!node.IsLeaf) + continue; - for (var i = 0; i < 4; i++) + for (var i = 0; i < hkcdSimdTreeNode.NodeCount; i++) { - if (node.lx[i] <= node.hx[i] && node.ly[i] <= node.hy[i] && node.lz[i] <= node.hz[i]) - _numLeafRects++; + if (node.IsBound(i)) + NumBoundingBoxes++; } } - _leafRectangles = new RectangleF[_numLeafRects]; + BoundingBoxRectangles = new Rectangle3D[NumBoundingBoxes]; var n = 0; - foreach (var node in _nodes) + foreach (var node in Nodes) { - if (!node.IsLeaf) continue; + if (!node.IsLeaf) + continue; - for (var i = 0; i < 4; i++) + for (var i = 0; i < hkcdSimdTreeNode.NodeCount; i++) { - if (node.lx[i] <= node.hx[i] && node.ly[i] <= node.hy[i] && node.lz[i] <= node.hz[i]) - _leafRectangles[n++] = new RectangleF(node.lx[i], node.lz[i], node.hx[i] - node.lx[i], node.hz[i] - node.lz[i]); + if (!node.IsBound(i)) + continue; + var lo = new Vector3(node.LoX[i], node.LoY[i], node.LoZ[i]); + var hi = new Vector3(node.HiX[i], node.HiY[i], node.HiZ[i]); + BoundingBoxRectangles[n++] = new Rectangle3D(lo, hi); } } } - public int NumBoundingBoxes => _numLeafRects; - - public RectangleF[] BoundingBoxRectangles => _leafRectangles; - // Official logic for area-containment checks for y intersection between y+1 and y-10000.0 public bool ContainsPoint(float x, float y, float z) => ContainsPointInNode(1, x, y - 10000, y + 1, z); public bool ContainsPoint(float x, float y, float z, float toleranceX, float toleranceY, float toleranceZ) @@ -478,35 +481,81 @@ private bool ContainsPointInNode(int nodeIndex, float x, float ly, float hy, flo if (nodeIndex == 0) return false; - var node = _nodes[nodeIndex]; - for (var i = 0; i < 4; i++) + var node = Nodes[nodeIndex]; + for (var i = 0; i < hkcdSimdTreeNode.NodeCount; i++) { - if (node.lx[i] > node.hx[i] || !(node.lx[i] - tx <= x) || !(node.hx[i] + tx >= x)) + if (node.LoX[i] > node.HiX[i] || !(node.LoX[i] - tx <= x) || !(node.HiX[i] + tx >= x)) continue; - if (node.lz[i] > node.hz[i] || !(node.lz[i] - tz <= z) || !(node.hz[i] + tz >= z)) + if (node.LoZ[i] > node.HiZ[i] || !(node.LoZ[i] - tz <= z) || !(node.HiZ[i] + tz >= z)) continue; - if (node.ly[i] > node.hy[i] || !(node.ly[i] - ty <= hy) || !(node.hy[i] + ty >= ly)) + if (node.LoY[i] > node.HiY[i] || !(node.LoY[i] - ty <= hy) || !(node.HiY[i] + ty >= ly)) continue; if (node.IsLeaf) return true; - if (ContainsPointInNode((int)node.data[i], x, ly, hy, z, tx, ty, tz)) + if (ContainsPointInNode((int)node.Data[i], x, ly, hy, z, tx, ty, tz)) return true; } return false; } + + public bool ContainedBy(IContainsV3f other) => other.ContainsPoint(BoundingBoxRectangles[0].X, BoundingBoxRectangles[0].Y, BoundingBoxRectangles[0].Z); + } + + public struct Rectangle3D + { + /// X-coordinate of one corner + public float X { get; set; } + /// Y-coordinate of one corner + public float Y { get; set; } + /// Z-coordinate of one corner + public float Z { get; set; } + + /// Width of the rectangle (X) + public float Width { get; set; } + /// Height of the rectangle (Y) + public float Height { get; set; } + /// Depth of the rectangle (Z) + public float Depth { get; set; } + + public Rectangle3D(float x, float y, float z, float width, float height, float depth) + { + X = x; + Y = y; + Z = z; + Width = width; + Height = height; + Depth = depth; + } + + public Rectangle3D(Vector3 lo, Vector3 hi) + { + X = lo.X; + Y = lo.Y; + Z = lo.Z; + Width = hi.X - lo.X; + Height = hi.Y - lo.Y; + Depth = hi.Z - lo.Z; + } } #nullable disable + /// + /// Represents 4 nodes in a 3D spatial tree structure used for spatial logic, able to work with SIMD (Single Instruction, Multiple Data) operations + /// public class hkcdSimdTreeNode { - public float[] lx; - public float[] hx; - public float[] ly; - public float[] hy; - public float[] lz; - public float[] hz; - public uint[] data; - public bool IsLeaf; + public required float[] LoX { get; set; } + public required float[] LoY { get; set; } + public required float[] LoZ { get; set; } + + public required float[] HiX {get; set; } + public required float[] HiY {get; set; } + public required float[] HiZ {get; set; } + + public required uint[] Data { get; set; } + public required bool IsLeaf { get; set; } + public bool IsBound(int i) => LoX[i] <= HiX[i] && LoY[i] <= HiY[i] && LoZ[i] <= HiZ[i]; + public const int NodeCount = 4; } private class HavokTypeObject @@ -562,7 +611,7 @@ private struct HavokTemplateParam public int IntValue; public HavokTypeObject TypeValue; - public bool IsType => Name.Length > 0 && Name[0] == 't'; + public bool IsType => Name.StartsWith('t'); } private struct HavokField @@ -592,4 +641,11 @@ public interface IContainsV3f { bool ContainsPoint(float x, float y, float z); bool ContainsPoint(float x, float y, float z, float toleranceX, float toleranceY, float toleranceZ); + + /// + /// Checks if an outer collision volume contains this (inner) volume + /// + /// Outer collision volume + /// True if the inner volume is contained within this volume + bool ContainedBy(IContainsV3f outer); } diff --git a/pkNX.Structures/Legality/Tables/Tables9.cs b/pkNX.Structures/Legality/Tables/Tables9.cs index b17e2b3d..f87b9dca 100644 --- a/pkNX.Structures/Legality/Tables/Tables9.cs +++ b/pkNX.Structures/Legality/Tables/Tables9.cs @@ -3,7 +3,7 @@ namespace pkNX.Structures; public static partial class Legal { // todo sv - public const int MaxSpeciesID_9 = 1010; + public const int MaxSpeciesID_9 = 1017; public const int MaxMoveID_9 = (int)Move.MagicalTorque; public const int MaxItemID_9 = 2400; // Yellow Dish public const int MaxBallID_9 = (int)Ball.LAOrigin; diff --git a/pkNX.WinForms/Dumping/DumperSV.Designer.cs b/pkNX.WinForms/Dumping/DumperSV.Designer.cs index 537965e2..643bc1b0 100644 --- a/pkNX.WinForms/Dumping/DumperSV.Designer.cs +++ b/pkNX.WinForms/Dumping/DumperSV.Designer.cs @@ -28,300 +28,312 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - this.TC_Options = new System.Windows.Forms.TabControl(); - this.Tab_General = new System.Windows.Forms.TabPage(); - this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); - this.B_ParsePKMDetails = new System.Windows.Forms.Button(); - this.B_Raid = new System.Windows.Forms.Button(); - this.B_PKText = new System.Windows.Forms.Button(); - this.B_Trainers = new System.Windows.Forms.Button(); - this.B_Encount = new System.Windows.Forms.Button(); - this.B_DumpMoves = new System.Windows.Forms.Button(); - this.B_Cooking = new System.Windows.Forms.Button(); - this.Tab_Misc = new System.Windows.Forms.TabPage(); - this.flowLayoutPanel3 = new System.Windows.Forms.FlowLayoutPanel(); - this.B_DumpHash = new System.Windows.Forms.Button(); - this.B_DumpArc = new System.Windows.Forms.Button(); - this.B_DumpSpecific = new System.Windows.Forms.Button(); - this.B_Misc = new System.Windows.Forms.Button(); - this.Tab_Future = new System.Windows.Forms.TabPage(); - this.flowLayoutPanel4 = new System.Windows.Forms.FlowLayoutPanel(); - this.B_DistributionRaids = new System.Windows.Forms.Button(); - this.B_OpenFolder = new System.Windows.Forms.Button(); - this.B_DumpPath = new System.Windows.Forms.Button(); - this.TC_Options.SuspendLayout(); - this.Tab_General.SuspendLayout(); - this.flowLayoutPanel1.SuspendLayout(); - this.Tab_Misc.SuspendLayout(); - this.flowLayoutPanel3.SuspendLayout(); - this.Tab_Future.SuspendLayout(); - this.flowLayoutPanel4.SuspendLayout(); - this.SuspendLayout(); + TC_Options = new System.Windows.Forms.TabControl(); + Tab_General = new System.Windows.Forms.TabPage(); + flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + B_ParsePKMDetails = new System.Windows.Forms.Button(); + B_Raid = new System.Windows.Forms.Button(); + B_PKText = new System.Windows.Forms.Button(); + B_Trainers = new System.Windows.Forms.Button(); + B_Encount = new System.Windows.Forms.Button(); + B_DumpMoves = new System.Windows.Forms.Button(); + B_Cooking = new System.Windows.Forms.Button(); + Tab_Misc = new System.Windows.Forms.TabPage(); + flowLayoutPanel3 = new System.Windows.Forms.FlowLayoutPanel(); + B_DumpHash = new System.Windows.Forms.Button(); + B_DumpArc = new System.Windows.Forms.Button(); + B_DumpSpecific = new System.Windows.Forms.Button(); + B_Misc = new System.Windows.Forms.Button(); + B_DumpPath = new System.Windows.Forms.Button(); + Tab_Future = new System.Windows.Forms.TabPage(); + flowLayoutPanel4 = new System.Windows.Forms.FlowLayoutPanel(); + B_DistributionRaids = new System.Windows.Forms.Button(); + B_DeliveryOutbreaks = new System.Windows.Forms.Button(); + B_OpenFolder = new System.Windows.Forms.Button(); + TC_Options.SuspendLayout(); + Tab_General.SuspendLayout(); + flowLayoutPanel1.SuspendLayout(); + Tab_Misc.SuspendLayout(); + flowLayoutPanel3.SuspendLayout(); + Tab_Future.SuspendLayout(); + flowLayoutPanel4.SuspendLayout(); + SuspendLayout(); // // TC_Options // - this.TC_Options.Controls.Add(this.Tab_General); - this.TC_Options.Controls.Add(this.Tab_Misc); - this.TC_Options.Controls.Add(this.Tab_Future); - this.TC_Options.Dock = System.Windows.Forms.DockStyle.Fill; - this.TC_Options.Location = new System.Drawing.Point(0, 0); - this.TC_Options.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.TC_Options.Name = "TC_Options"; - this.TC_Options.SelectedIndex = 0; - this.TC_Options.Size = new System.Drawing.Size(484, 321); - this.TC_Options.TabIndex = 0; + TC_Options.Controls.Add(Tab_General); + TC_Options.Controls.Add(Tab_Misc); + TC_Options.Controls.Add(Tab_Future); + TC_Options.Dock = System.Windows.Forms.DockStyle.Fill; + TC_Options.Location = new System.Drawing.Point(0, 0); + TC_Options.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + TC_Options.Name = "TC_Options"; + TC_Options.SelectedIndex = 0; + TC_Options.Size = new System.Drawing.Size(484, 321); + TC_Options.TabIndex = 0; // // Tab_General // - this.Tab_General.Controls.Add(this.flowLayoutPanel1); - this.Tab_General.Location = new System.Drawing.Point(4, 24); - this.Tab_General.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.Tab_General.Name = "Tab_General"; - this.Tab_General.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.Tab_General.Size = new System.Drawing.Size(476, 293); - this.Tab_General.TabIndex = 0; - this.Tab_General.Text = "General"; - this.Tab_General.UseVisualStyleBackColor = true; + Tab_General.Controls.Add(flowLayoutPanel1); + Tab_General.Location = new System.Drawing.Point(4, 24); + Tab_General.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + Tab_General.Name = "Tab_General"; + Tab_General.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3); + Tab_General.Size = new System.Drawing.Size(476, 293); + Tab_General.TabIndex = 0; + Tab_General.Text = "General"; + Tab_General.UseVisualStyleBackColor = true; // // flowLayoutPanel1 // - this.flowLayoutPanel1.Controls.Add(this.B_ParsePKMDetails); - this.flowLayoutPanel1.Controls.Add(this.B_Raid); - this.flowLayoutPanel1.Controls.Add(this.B_PKText); - this.flowLayoutPanel1.Controls.Add(this.B_Trainers); - this.flowLayoutPanel1.Controls.Add(this.B_Encount); - this.flowLayoutPanel1.Controls.Add(this.B_DumpMoves); - this.flowLayoutPanel1.Controls.Add(this.B_Cooking); - this.flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; - this.flowLayoutPanel1.Location = new System.Drawing.Point(4, 3); - this.flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.flowLayoutPanel1.Name = "flowLayoutPanel1"; - this.flowLayoutPanel1.Size = new System.Drawing.Size(468, 287); - this.flowLayoutPanel1.TabIndex = 1; + flowLayoutPanel1.Controls.Add(B_ParsePKMDetails); + flowLayoutPanel1.Controls.Add(B_Raid); + flowLayoutPanel1.Controls.Add(B_PKText); + flowLayoutPanel1.Controls.Add(B_Trainers); + flowLayoutPanel1.Controls.Add(B_Encount); + flowLayoutPanel1.Controls.Add(B_DumpMoves); + flowLayoutPanel1.Controls.Add(B_Cooking); + flowLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; + flowLayoutPanel1.Location = new System.Drawing.Point(4, 3); + flowLayoutPanel1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + flowLayoutPanel1.Name = "flowLayoutPanel1"; + flowLayoutPanel1.Size = new System.Drawing.Size(468, 287); + flowLayoutPanel1.TabIndex = 1; // // B_ParsePKMDetails // - this.B_ParsePKMDetails.Location = new System.Drawing.Point(4, 3); - this.B_ParsePKMDetails.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.B_ParsePKMDetails.Name = "B_ParsePKMDetails"; - this.B_ParsePKMDetails.Size = new System.Drawing.Size(144, 63); - this.B_ParsePKMDetails.TabIndex = 1; - this.B_ParsePKMDetails.Text = "Personal Stats"; - this.B_ParsePKMDetails.UseVisualStyleBackColor = true; - this.B_ParsePKMDetails.Click += new System.EventHandler(this.B_ParsePKMDetails_Click); + B_ParsePKMDetails.Location = new System.Drawing.Point(4, 3); + B_ParsePKMDetails.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_ParsePKMDetails.Name = "B_ParsePKMDetails"; + B_ParsePKMDetails.Size = new System.Drawing.Size(144, 63); + B_ParsePKMDetails.TabIndex = 1; + B_ParsePKMDetails.Text = "Personal Stats"; + B_ParsePKMDetails.UseVisualStyleBackColor = true; + B_ParsePKMDetails.Click += B_ParsePKMDetails_Click; // // B_Raid // - this.B_Raid.Location = new System.Drawing.Point(156, 3); - this.B_Raid.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.B_Raid.Name = "B_Raid"; - this.B_Raid.Size = new System.Drawing.Size(144, 63); - this.B_Raid.TabIndex = 16; - this.B_Raid.Text = "Raids"; - this.B_Raid.UseVisualStyleBackColor = true; - this.B_Raid.Click += new System.EventHandler(this.B_Raid_Click); + B_Raid.Location = new System.Drawing.Point(156, 3); + B_Raid.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_Raid.Name = "B_Raid"; + B_Raid.Size = new System.Drawing.Size(144, 63); + B_Raid.TabIndex = 16; + B_Raid.Text = "Raids"; + B_Raid.UseVisualStyleBackColor = true; + B_Raid.Click += B_Raid_Click; // // B_PKText // - this.B_PKText.Location = new System.Drawing.Point(308, 3); - this.B_PKText.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.B_PKText.Name = "B_PKText"; - this.B_PKText.Size = new System.Drawing.Size(144, 63); - this.B_PKText.TabIndex = 17; - this.B_PKText.Text = "Text Files"; - this.B_PKText.UseVisualStyleBackColor = true; - this.B_PKText.Click += new System.EventHandler(this.B_PKText_Click); + B_PKText.Location = new System.Drawing.Point(308, 3); + B_PKText.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_PKText.Name = "B_PKText"; + B_PKText.Size = new System.Drawing.Size(144, 63); + B_PKText.TabIndex = 17; + B_PKText.Text = "Text Files"; + B_PKText.UseVisualStyleBackColor = true; + B_PKText.Click += B_PKText_Click; // // B_Trainers // - this.B_Trainers.Location = new System.Drawing.Point(4, 72); - this.B_Trainers.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.B_Trainers.Name = "B_Trainers"; - this.B_Trainers.Size = new System.Drawing.Size(144, 63); - this.B_Trainers.TabIndex = 18; - this.B_Trainers.Text = "Trainers"; - this.B_Trainers.UseVisualStyleBackColor = true; - this.B_Trainers.Click += new System.EventHandler(this.B_Trainers_Click); + B_Trainers.Location = new System.Drawing.Point(4, 72); + B_Trainers.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_Trainers.Name = "B_Trainers"; + B_Trainers.Size = new System.Drawing.Size(144, 63); + B_Trainers.TabIndex = 18; + B_Trainers.Text = "Trainers"; + B_Trainers.UseVisualStyleBackColor = true; + B_Trainers.Click += B_Trainers_Click; // // B_Encount // - this.B_Encount.Location = new System.Drawing.Point(156, 72); - this.B_Encount.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.B_Encount.Name = "B_Encount"; - this.B_Encount.Size = new System.Drawing.Size(144, 63); - this.B_Encount.TabIndex = 19; - this.B_Encount.Text = "Encounters"; - this.B_Encount.UseVisualStyleBackColor = true; - this.B_Encount.Click += new System.EventHandler(this.B_Encount_Click); + B_Encount.Location = new System.Drawing.Point(156, 72); + B_Encount.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_Encount.Name = "B_Encount"; + B_Encount.Size = new System.Drawing.Size(144, 63); + B_Encount.TabIndex = 19; + B_Encount.Text = "Encounters"; + B_Encount.UseVisualStyleBackColor = true; + B_Encount.Click += B_Encount_Click; // // B_DumpMoves // - this.B_DumpMoves.Location = new System.Drawing.Point(308, 72); - this.B_DumpMoves.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.B_DumpMoves.Name = "B_DumpMoves"; - this.B_DumpMoves.Size = new System.Drawing.Size(144, 63); - this.B_DumpMoves.TabIndex = 20; - this.B_DumpMoves.Text = "Moves"; - this.B_DumpMoves.UseVisualStyleBackColor = true; - this.B_DumpMoves.Click += new System.EventHandler(this.B_DumpMoves_Click); + B_DumpMoves.Location = new System.Drawing.Point(308, 72); + B_DumpMoves.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_DumpMoves.Name = "B_DumpMoves"; + B_DumpMoves.Size = new System.Drawing.Size(144, 63); + B_DumpMoves.TabIndex = 20; + B_DumpMoves.Text = "Moves"; + B_DumpMoves.UseVisualStyleBackColor = true; + B_DumpMoves.Click += B_DumpMoves_Click; // // B_Cooking // - this.B_Cooking.Location = new System.Drawing.Point(4, 141); - this.B_Cooking.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.B_Cooking.Name = "B_Cooking"; - this.B_Cooking.Size = new System.Drawing.Size(144, 63); - this.B_Cooking.TabIndex = 21; - this.B_Cooking.Text = "Cooking"; - this.B_Cooking.UseVisualStyleBackColor = true; - this.B_Cooking.Click += new System.EventHandler(this.B_Cooking_Click); + B_Cooking.Location = new System.Drawing.Point(4, 141); + B_Cooking.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_Cooking.Name = "B_Cooking"; + B_Cooking.Size = new System.Drawing.Size(144, 63); + B_Cooking.TabIndex = 21; + B_Cooking.Text = "Cooking"; + B_Cooking.UseVisualStyleBackColor = true; + B_Cooking.Click += B_Cooking_Click; // // Tab_Misc // - this.Tab_Misc.Controls.Add(this.flowLayoutPanel3); - this.Tab_Misc.Location = new System.Drawing.Point(4, 24); - this.Tab_Misc.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.Tab_Misc.Name = "Tab_Misc"; - this.Tab_Misc.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.Tab_Misc.Size = new System.Drawing.Size(476, 293); - this.Tab_Misc.TabIndex = 2; - this.Tab_Misc.Text = "Misc"; - this.Tab_Misc.UseVisualStyleBackColor = true; + Tab_Misc.Controls.Add(flowLayoutPanel3); + Tab_Misc.Location = new System.Drawing.Point(4, 24); + Tab_Misc.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + Tab_Misc.Name = "Tab_Misc"; + Tab_Misc.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3); + Tab_Misc.Size = new System.Drawing.Size(476, 293); + Tab_Misc.TabIndex = 2; + Tab_Misc.Text = "Misc"; + Tab_Misc.UseVisualStyleBackColor = true; // // flowLayoutPanel3 // - this.flowLayoutPanel3.Controls.Add(this.B_DumpHash); - this.flowLayoutPanel3.Controls.Add(this.B_DumpArc); - this.flowLayoutPanel3.Controls.Add(this.B_DumpSpecific); - this.flowLayoutPanel3.Controls.Add(this.B_Misc); - this.flowLayoutPanel3.Controls.Add(this.B_DumpPath); - this.flowLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; - this.flowLayoutPanel3.Location = new System.Drawing.Point(4, 3); - this.flowLayoutPanel3.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.flowLayoutPanel3.Name = "flowLayoutPanel3"; - this.flowLayoutPanel3.Size = new System.Drawing.Size(468, 287); - this.flowLayoutPanel3.TabIndex = 2; + flowLayoutPanel3.Controls.Add(B_DumpHash); + flowLayoutPanel3.Controls.Add(B_DumpArc); + flowLayoutPanel3.Controls.Add(B_DumpSpecific); + flowLayoutPanel3.Controls.Add(B_Misc); + flowLayoutPanel3.Controls.Add(B_DumpPath); + flowLayoutPanel3.Dock = System.Windows.Forms.DockStyle.Fill; + flowLayoutPanel3.Location = new System.Drawing.Point(4, 3); + flowLayoutPanel3.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + flowLayoutPanel3.Name = "flowLayoutPanel3"; + flowLayoutPanel3.Size = new System.Drawing.Size(468, 287); + flowLayoutPanel3.TabIndex = 2; // // B_DumpHash // - this.B_DumpHash.Location = new System.Drawing.Point(4, 3); - this.B_DumpHash.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.B_DumpHash.Name = "B_DumpHash"; - this.B_DumpHash.Size = new System.Drawing.Size(144, 63); - this.B_DumpHash.TabIndex = 14; - this.B_DumpHash.Text = "Hash Tables"; - this.B_DumpHash.UseVisualStyleBackColor = true; - this.B_DumpHash.Click += new System.EventHandler(this.B_DumpHash_Click); + B_DumpHash.Location = new System.Drawing.Point(4, 3); + B_DumpHash.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_DumpHash.Name = "B_DumpHash"; + B_DumpHash.Size = new System.Drawing.Size(144, 63); + B_DumpHash.TabIndex = 14; + B_DumpHash.Text = "Hash Tables"; + B_DumpHash.UseVisualStyleBackColor = true; + B_DumpHash.Click += B_DumpHash_Click; // // B_DumpArc // - this.B_DumpArc.Location = new System.Drawing.Point(156, 3); - this.B_DumpArc.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.B_DumpArc.Name = "B_DumpArc"; - this.B_DumpArc.Size = new System.Drawing.Size(144, 63); - this.B_DumpArc.TabIndex = 18; - this.B_DumpArc.Text = "Archives"; - this.B_DumpArc.UseVisualStyleBackColor = true; - this.B_DumpArc.Click += new System.EventHandler(this.B_DumpArc_Click); + B_DumpArc.Location = new System.Drawing.Point(156, 3); + B_DumpArc.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_DumpArc.Name = "B_DumpArc"; + B_DumpArc.Size = new System.Drawing.Size(144, 63); + B_DumpArc.TabIndex = 18; + B_DumpArc.Text = "Archives"; + B_DumpArc.UseVisualStyleBackColor = true; + B_DumpArc.Click += B_DumpArc_Click; // // B_DumpSpecific // - this.B_DumpSpecific.Location = new System.Drawing.Point(308, 3); - this.B_DumpSpecific.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.B_DumpSpecific.Name = "B_DumpSpecific"; - this.B_DumpSpecific.Size = new System.Drawing.Size(144, 63); - this.B_DumpSpecific.TabIndex = 19; - this.B_DumpSpecific.Text = "Specific Packed"; - this.B_DumpSpecific.UseVisualStyleBackColor = true; - this.B_DumpSpecific.Click += new System.EventHandler(this.B_DumpSpecific_Click); + B_DumpSpecific.Location = new System.Drawing.Point(308, 3); + B_DumpSpecific.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_DumpSpecific.Name = "B_DumpSpecific"; + B_DumpSpecific.Size = new System.Drawing.Size(144, 63); + B_DumpSpecific.TabIndex = 19; + B_DumpSpecific.Text = "Specific Packed"; + B_DumpSpecific.UseVisualStyleBackColor = true; + B_DumpSpecific.Click += B_DumpSpecific_Click; // // B_Misc // - this.B_Misc.Location = new System.Drawing.Point(4, 72); - this.B_Misc.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.B_Misc.Name = "B_Misc"; - this.B_Misc.Size = new System.Drawing.Size(144, 63); - this.B_Misc.TabIndex = 20; - this.B_Misc.Text = "Misc"; - this.B_Misc.UseVisualStyleBackColor = true; - this.B_Misc.Click += new System.EventHandler(this.B_DumpMisc_Click); - // - // Tab_Future - // - this.Tab_Future.Controls.Add(this.flowLayoutPanel4); - this.Tab_Future.Location = new System.Drawing.Point(4, 24); - this.Tab_Future.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.Tab_Future.Name = "Tab_Future"; - this.Tab_Future.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.Tab_Future.Size = new System.Drawing.Size(476, 293); - this.Tab_Future.TabIndex = 3; - this.Tab_Future.Text = "Future"; - this.Tab_Future.UseVisualStyleBackColor = true; - // - // flowLayoutPanel4 - // - this.flowLayoutPanel4.Controls.Add(this.B_DistributionRaids); - this.flowLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; - this.flowLayoutPanel4.Location = new System.Drawing.Point(4, 3); - this.flowLayoutPanel4.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.flowLayoutPanel4.Name = "flowLayoutPanel4"; - this.flowLayoutPanel4.Size = new System.Drawing.Size(468, 287); - this.flowLayoutPanel4.TabIndex = 3; - // - // B_DistributionRaids - // - this.B_DistributionRaids.Location = new System.Drawing.Point(4, 3); - this.B_DistributionRaids.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.B_DistributionRaids.Name = "B_DistributionRaids"; - this.B_DistributionRaids.Size = new System.Drawing.Size(144, 63); - this.B_DistributionRaids.TabIndex = 14; - this.B_DistributionRaids.Text = "Distribution Raids"; - this.B_DistributionRaids.UseVisualStyleBackColor = true; - this.B_DistributionRaids.Click += new System.EventHandler(this.B_DistributionRaids_Click); - // - // B_OpenFolder - // - this.B_OpenFolder.Location = new System.Drawing.Point(376, -1); - this.B_OpenFolder.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.B_OpenFolder.Name = "B_OpenFolder"; - this.B_OpenFolder.Size = new System.Drawing.Size(88, 27); - this.B_OpenFolder.TabIndex = 2; - this.B_OpenFolder.Text = "Open Folder"; - this.B_OpenFolder.UseVisualStyleBackColor = true; - this.B_OpenFolder.Click += new System.EventHandler(this.B_OpenFolder_Click); + B_Misc.Location = new System.Drawing.Point(4, 72); + B_Misc.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_Misc.Name = "B_Misc"; + B_Misc.Size = new System.Drawing.Size(144, 63); + B_Misc.TabIndex = 20; + B_Misc.Text = "Misc"; + B_Misc.UseVisualStyleBackColor = true; + B_Misc.Click += B_DumpMisc_Click; // // B_DumpPath // - this.B_DumpPath.Location = new System.Drawing.Point(156, 72); - this.B_DumpPath.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.B_DumpPath.Name = "B_DumpPath"; - this.B_DumpPath.Size = new System.Drawing.Size(144, 63); - this.B_DumpPath.TabIndex = 21; - this.B_DumpPath.Text = "Specific File..."; - this.B_DumpPath.UseVisualStyleBackColor = true; - this.B_DumpPath.Click += new System.EventHandler(this.B_DumpPath_Click); + B_DumpPath.Location = new System.Drawing.Point(156, 72); + B_DumpPath.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_DumpPath.Name = "B_DumpPath"; + B_DumpPath.Size = new System.Drawing.Size(144, 63); + B_DumpPath.TabIndex = 21; + B_DumpPath.Text = "Specific File..."; + B_DumpPath.UseVisualStyleBackColor = true; + B_DumpPath.Click += B_DumpPath_Click; + // + // Tab_Future + // + Tab_Future.Controls.Add(flowLayoutPanel4); + Tab_Future.Location = new System.Drawing.Point(4, 24); + Tab_Future.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + Tab_Future.Name = "Tab_Future"; + Tab_Future.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3); + Tab_Future.Size = new System.Drawing.Size(476, 293); + Tab_Future.TabIndex = 3; + Tab_Future.Text = "Future"; + Tab_Future.UseVisualStyleBackColor = true; + // + // flowLayoutPanel4 + // + flowLayoutPanel4.Controls.Add(B_DistributionRaids); + flowLayoutPanel4.Controls.Add(B_DeliveryOutbreaks); + flowLayoutPanel4.Dock = System.Windows.Forms.DockStyle.Fill; + flowLayoutPanel4.Location = new System.Drawing.Point(4, 3); + flowLayoutPanel4.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + flowLayoutPanel4.Name = "flowLayoutPanel4"; + flowLayoutPanel4.Size = new System.Drawing.Size(468, 287); + flowLayoutPanel4.TabIndex = 3; + // + // B_DistributionRaids + // + B_DistributionRaids.Location = new System.Drawing.Point(4, 3); + B_DistributionRaids.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_DistributionRaids.Name = "B_DistributionRaids"; + B_DistributionRaids.Size = new System.Drawing.Size(144, 63); + B_DistributionRaids.TabIndex = 14; + B_DistributionRaids.Text = "Distribution Raids"; + B_DistributionRaids.UseVisualStyleBackColor = true; + B_DistributionRaids.Click += B_DistributionRaids_Click; + // + // B_DeliveryOutbreaks + // + B_DeliveryOutbreaks.Location = new System.Drawing.Point(156, 3); + B_DeliveryOutbreaks.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_DeliveryOutbreaks.Name = "B_DeliveryOutbreaks"; + B_DeliveryOutbreaks.Size = new System.Drawing.Size(144, 63); + B_DeliveryOutbreaks.TabIndex = 15; + B_DeliveryOutbreaks.Text = "Distribution Outbreaks"; + B_DeliveryOutbreaks.UseVisualStyleBackColor = true; + B_DeliveryOutbreaks.Click += B_DeliveryOutbreaks_Click; + // + // B_OpenFolder + // + B_OpenFolder.Location = new System.Drawing.Point(376, -1); + B_OpenFolder.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_OpenFolder.Name = "B_OpenFolder"; + B_OpenFolder.Size = new System.Drawing.Size(88, 27); + B_OpenFolder.TabIndex = 2; + B_OpenFolder.Text = "Open Folder"; + B_OpenFolder.UseVisualStyleBackColor = true; + B_OpenFolder.Click += B_OpenFolder_Click; // // DumperSV // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(484, 321); - this.Controls.Add(this.B_OpenFolder); - this.Controls.Add(this.TC_Options); - this.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.MaximizeBox = false; - this.Name = "DumperSV"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "SVDump"; - this.TC_Options.ResumeLayout(false); - this.Tab_General.ResumeLayout(false); - this.flowLayoutPanel1.ResumeLayout(false); - this.Tab_Misc.ResumeLayout(false); - this.flowLayoutPanel3.ResumeLayout(false); - this.Tab_Future.ResumeLayout(false); - this.flowLayoutPanel4.ResumeLayout(false); - this.ResumeLayout(false); - + AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + ClientSize = new System.Drawing.Size(484, 321); + Controls.Add(B_OpenFolder); + Controls.Add(TC_Options); + Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + MaximizeBox = false; + Name = "DumperSV"; + StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + Text = "SVDump"; + TC_Options.ResumeLayout(false); + Tab_General.ResumeLayout(false); + flowLayoutPanel1.ResumeLayout(false); + Tab_Misc.ResumeLayout(false); + flowLayoutPanel3.ResumeLayout(false); + Tab_Future.ResumeLayout(false); + flowLayoutPanel4.ResumeLayout(false); + ResumeLayout(false); } #endregion @@ -347,5 +359,6 @@ private void InitializeComponent() private System.Windows.Forms.Button B_DumpMoves; private System.Windows.Forms.Button B_Cooking; private System.Windows.Forms.Button B_DumpPath; + private System.Windows.Forms.Button B_DeliveryOutbreaks; } } diff --git a/pkNX.WinForms/Dumping/DumperSV.cs b/pkNX.WinForms/Dumping/DumperSV.cs index ceeebb6a..5fdc5057 100644 --- a/pkNX.WinForms/Dumping/DumperSV.cs +++ b/pkNX.WinForms/Dumping/DumperSV.cs @@ -85,7 +85,8 @@ private void B_DumpMisc_Click(object sender, EventArgs e) private void B_DumpPath_Click(object sender, EventArgs e) { - using var f = new TextInput(); + bool Valid(string path) => Game.HasFile(path); + using var f = new TextInput(Valid); f.ShowDialog(); if (f.DialogResult != DialogResult.OK) return; // cancel @@ -126,6 +127,16 @@ private void B_DistributionRaids_Click(object sender, EventArgs e) Dumper.DumpDistributionRaids(path); System.Media.SystemSounds.Asterisk.Play(); } + + private void B_DeliveryOutbreaks_Click(object sender, EventArgs e) + { + using var fbd = new FolderBrowserDialog(); + if (fbd.ShowDialog() != DialogResult.OK) + return; + var path = fbd.SelectedPath; + Dumper.DumpDeliveryOutbreaks(path); + System.Media.SystemSounds.Asterisk.Play(); + } #endregion private void B_Encount_Click(object sender, EventArgs e) diff --git a/pkNX.WinForms/Dumping/DumperSV.resx b/pkNX.WinForms/Dumping/DumperSV.resx new file mode 100644 index 00000000..1af7de15 --- /dev/null +++ b/pkNX.WinForms/Dumping/DumperSV.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/pkNX.WinForms/Dumping/GameDumperSV.cs b/pkNX.WinForms/Dumping/GameDumperSV.cs index f2b08c48..18745a32 100644 --- a/pkNX.WinForms/Dumping/GameDumperSV.cs +++ b/pkNX.WinForms/Dumping/GameDumperSV.cs @@ -9,7 +9,12 @@ using pkNX.Structures; using pkNX.Structures.FlatBuffers; using pkNX.Structures.FlatBuffers.SV; +using pkNX.Structures.FlatBuffers.SV.Trinity; +using EvolutionType = pkNX.Structures.EvolutionType; +using GameVersion = pkNX.Structures.GameVersion; +using Move = pkNX.Structures.Move; using Schema = pkNX.Structures.FlatBuffers.Reflection; +using Species = pkNX.Structures.Species; // ReSharper disable StringLiteralTypo @@ -249,7 +254,7 @@ public void DumpPersonal() File.WriteAllBytes(GetPath("pkhex", "evos_sv.pkl"), MiniUtil.PackMini(evos, "sv")); List<(ushort Internal, ushort National)> map = new(); - for (ushort i = 0; i <= (ushort)DevID.DEV_MANKII3; i++) + for (ushort i = 0; i <= (ushort)DevID.DEV_MATCHA2; i++) { var pi = pt[i]; var info = pi.FB.Info; @@ -402,12 +407,27 @@ private static byte[][] SerializeLearnsetPickle(PersonalTable9SV pt) var t = pt.Table; var result = new byte[t.Length][]; for (int i = 0; i < t.Length; i++) - result[i] = Write(t[i].FB.Learnset); + { + var p = t[i]; + var learn = p.FB.Learnset; + if (i == (int)Species.Zorua && p.Form == 1) + learn = Insert(learn, 28, Move.Spite); + else if (i == (int)Species.Larvesta && p.Form == 0) + learn = Insert(learn, 24, Move.BugBite); + result[i] = Write(learn); + } return result; - static byte[] Write(IEnumerable fbLearnset) + static List Insert(IList learn, sbyte level, Move move) { - using var ms = new MemoryStream(); + var list = learn.ToList(); + list.Add(new PersonalInfoMove { Level = level, Move = (ushort)move }); + return list.OrderBy(z => z.Level).ToList(); + } + + static byte[] Write(IList fbLearnset) + { + using var ms = new MemoryStream(4 + (4 * fbLearnset.Count)); using var bw = new BinaryWriter(ms); foreach (var m in fbLearnset) { @@ -422,19 +442,20 @@ static byte[] Write(IEnumerable fbLearnset) public void DumpMisc() { + DumpBalloon(); + DumpBattle(); + DumpEncount(); DumpDLC(); DumpGymRewards(); DumpGrow(); DumpAudio(); DumpAjito(); DumpField(); - DumpEncount(); DumpJunk(); DumpRaid(); DumpItems(); DumpFieldReturn(); DumpGem(); - DumpBattle(); DumpPokeDex(); DumpUI(); DumpUniquePath(); @@ -520,15 +541,26 @@ private void DumpEncount() Dump("world/data/event/treeshake/treeshake_pokemon/treeshake_pokemon_array.bfbs", z => z.Table); Dump("world/data/encount/point_data/point_data/encount_data_atlantis.bfbs", z => z.Table); Dump("world/data/encount/point_data/point_data/encount_data_100000.bfbs", z => z.Table); + Dump("world/data/encount/point_data/point_data/encount_data_su1.bfbs", z => z.Table); + Dump("world/data/encount/point_data/outbreak_point_data/outbreak_point_main.bfbs", z => z.Table); + Dump("world/data/encount/point_data/outbreak_point_data/outbreak_point_su1.bfbs", z => z.Table); Dump("world/data/encount/pokedata/pokedata/pokedata_array.bfbs", z => z.Table); + Dump("world/data/encount/pokedata/pokedata_su1/pokedata_su1_array.bfbs", z => z.Table); DumpJson("world/data/encount/setting/setting/data.bfbs"); Dump("world/data/encount/setting/raid_difficulty_lottery/raid_difficulty_lottery_array.bfbs", z => z.Table); DumpJson("world/data/encount/setting/raid_gem_setting/raid_gem_setting.bfbs"); + DumpJson("world/data/encount/setting/raid_gem_setting/su1_raid_gem_setting.bfbs"); + DumpJson("world/data/encount/setting/outbreak_setting/data.bfbs"); Dump("world/data/field/area/field_dungeon_area/field_dungeon_area_array.bfbs", z => z.Table); Dump("world/data/field/area/field_inside_area/field_inside_area_array.bfbs", z => z.Table); Dump("world/data/field/area/field_location/field_location_array.bfbs", z => z.Table); Dump("world/data/field/area/field_main_area/field_main_area_array.bfbs", z => z.Table); Dump("world/data/field/area/field_sub_area/field_sub_area_array.bfbs", z => z.Table); + Dump("world/data/field/area_su1/field_dungeon_area_su1/field_dungeon_area_su1_array.bfbs", z => z.Table); + Dump("world/data/field/area_su1/field_inside_area_su1/field_inside_area_su1_array.bfbs", z => z.Table); + Dump("world/data/field/area_su1/field_location_su1/field_location_su1_array.bfbs", z => z.Table); + Dump("world/data/field/area_su1/field_main_area_su1/field_main_area_su1_array.bfbs", z => z.Table); + Dump("world/data/field/area_su1/field_sub_area_su1/field_sub_area_su1_array.bfbs", z => z.Table); const string gifts = "world/data/event/event_add_pokemon/eventAddPokemon/eventAddPokemon_array.bfbs"; Dump(gifts, z => z.Table); @@ -575,6 +607,18 @@ private void DumpJunk() Dump("world/data/ui/ymap/ymap_place_name_data/ymap_place_name_data_array.bfbs", z => z.Table); } + public void DumpBalloon() + { + Dump("world/data/oniballoon/reward_action_param/reward_action_param_array.bfbs", z => z.Table); + Dump("world/data/oniballoon/result_demo_param/result_demo_param_array.bfbs", z => z.Table); + //Dump("?? "FirstRewardParamArray" bfbs", z => z.Table); + Dump ("world/data/oniballoon/reward_level_param/reward_level_param_array.bfbs", z => z.Table); + Dump("world/data/oniballoon/ojama_pokemon_unique_param/ojama_pokemon_unique_param_array.bfbs", z => z.Table); + Dump("world/data/oniballoon/game_base_param/game_base_param_array.bfbs", z => z.Table); + Dump("world/data/oniballoon/ojama_pokemon_common_param/ojama_pokemon_common_param_array.bfbs", z => z.Table); + Dump("world/data/oniballoon/score_base_param/score_base_param_array.bfbs", z => z.Table); + } + public void DumpEncounters() { var dumper = new EncounterDumperSV(ROM); @@ -601,8 +645,13 @@ public void DumpRaid() Dump("world/data/raid/raid_trainer_01/raid_trainer_01_array.bfbs", z => z.Table); Dump("world/data/raid/raid_trainer_02/raid_trainer_02_array.bfbs", z => z.Table); Dump("world/data/raid/raid_trainer_03/raid_trainer_03_array.bfbs", z => z.Table); + Dump("world/data/raid/raid_trainer_04/raid_trainer_04_array.bfbs", z => z.Table); + Dump("world/data/raid/raid_trainer_05/raid_trainer_05_array.bfbs", z => z.Table); + Dump("world/data/raid/raid_trainer_06/raid_trainer_06_array.bfbs", z => z.Table); + Dump("world/data/raid/raid_trainer_07/raid_trainer_07_array.bfbs", z => z.Table); + DumpJson("world/data/raid/raid_gem_item_reward_boost/data.bfbs"); - var allRaids = new[] + var mainRaids = new[] { "world/data/raid/raid_enemy_01/raid_enemy_01_array.bfbs", "world/data/raid/raid_enemy_02/raid_enemy_02_array.bfbs", @@ -611,8 +660,17 @@ public void DumpRaid() "world/data/raid/raid_enemy_05/raid_enemy_05_array.bfbs", "world/data/raid/raid_enemy_06/raid_enemy_06_array.bfbs", }; + var su1Raids = new[] + { + "world/data/raid/su1_raid_enemy_01/su1_raid_enemy_01_array.bfbs", + "world/data/raid/su1_raid_enemy_02/su1_raid_enemy_02_array.bfbs", + "world/data/raid/su1_raid_enemy_03/su1_raid_enemy_03_array.bfbs", + "world/data/raid/su1_raid_enemy_04/su1_raid_enemy_04_array.bfbs", + "world/data/raid/su1_raid_enemy_05/su1_raid_enemy_05_array.bfbs", + "world/data/raid/su1_raid_enemy_06/su1_raid_enemy_06_array.bfbs", + }; - foreach (var f in allRaids) + foreach (var f in mainRaids.Concat(su1Raids)) { Dump(f, z => z.Table); static IEnumerable sel(RaidEnemyTableArray z) => z.Table.Select(x => x.Info.BossPokePara); @@ -620,7 +678,8 @@ public void DumpRaid() } var outPath = GetPath("pkhex"); - TeraRaidRipper.DumpRaids(ROM, allRaids, outPath); + TeraRaidRipper.DumpRaids(ROM, mainRaids, outPath, "raidTotal.txt", "encounter_gem_paldea.pkl"); + TeraRaidRipper.DumpRaids(ROM, su1Raids, outPath, "raidTotalKitakami.txt", "encounter_gem_kitakami.pkl"); } public void DumpMoves() @@ -642,9 +701,11 @@ private void DumpItems() Dump("world/data/item/rummagingItemDataTable/rummagingItemDataTable_array.bfbs", z => z.Table); Dump("world/data/item/itemPointTypeBiomeTable/itemPointTypeBiomeTable_array.bfbs", z => z.Table); Dump("world/data/item/hiddenItemBiomeTable/hiddenItemBiomeTable_array.bfbs", z => z.Table); + Dump("world/data/item/hiddenItemBiomeTable_su1/hiddenItemBiomeTable_su1_array.bfbs", z => z.Table); Dump("world/data/item/dropitemdata/dropitemdata_array.bfbs", z => z.Table); Dump("world/data/item/itemdata/itemdata_array.bfbs", z => z.Table); Dump("world/data/item/hiddenItemDataTable/hiddenItemDataTable_array.bfbs", z => z.Table); + Dump("world/data/item/hiddenItemDataTable_su1/hiddenItemDataTable_su1_array.bfbs", z => z.Table); Dump("world/data/item/monohiroiItemData/monohiroiItemData_array.bfbs", z => z.Table); } @@ -692,10 +753,16 @@ private void DumpBattle() private void DumpPokeDex() { Dump("world/data/ui/pokedex/blacklist/blacklist_array.bfbs", z => z.Table); + Dump("world/data/ui/pokedex/blacklist_dlc1/blacklist_dlc1_array.bfbs", z => z.Table); + Dump("world/data/ui/pokedex/memo_poke_data/memo_poke_data_array.bfbs", z => z.Table); + Dump("world/data/ui/pokedex/memo_poke_data_dlc1/memo_poke_data_dlc1_array.bfbs", z => z.Table); + Dump("world/data/ui/pokedex/reward_data/reward_data_array.bfbs", z => z.Table); + Dump("world/data/ui/pokedex/reward_data_dlc1/reward_data_dlc1_array.bfbs", z => z.Table); DumpX("world/data/ui/pokedex/distribution_data/distribution_data_array.bfbs", z => z.Table, z => z.Table); + DumpX("world/data/ui/pokedex/distribution_data_dlc1/distribution_data_dlc1_array.bfbs", z => z.Table, z => z.Table); } private void DumpUI() @@ -890,6 +957,20 @@ public void DumpSpecific() { var files = new[] { + "world/data/encount/delivery_outbreak/delivery_outbreak_pokedata/delivery_outbreak_pokedata_array.bfbs", + "world/data/encount/delivery_outbreak/delivery_outbreak_zone_main/delivery_outbreak_zone_main_array.bfbs", + "world/data/encount/delivery_outbreak/delivery_outbreak_zone_su1/delivery_outbreak_zone_su1_array.bfbs", + "world/data/encount/delivery_outbreak/delivery_outbreak_zone_su2/delivery_outbreak_zone_su2_array.bfbs", + + "world/data/oniballoon/reward_action_param/reward_action_param_array.bfbs", + "world/data/oniballoon/result_demo_param/result_demo_param_array.bfbs", + //"?? "FirstRewardParamArray" bfbs", + "world/data/oniballoon/reward_level_param/reward_level_param_array.bfbs", + "world/data/oniballoon/ojama_pokemon_unique_param/ojama_pokemon_unique_param_array.bfbs", + "world/data/oniballoon/game_base_param/game_base_param_array.bfbs", + "world/data/oniballoon/ojama_pokemon_common_param/ojama_pokemon_common_param_array.bfbs", + "world/data/oniballoon/score_base_param/score_base_param_array.bfbs", + "world/data/ui/dlc_item_data/dlc_item_group/dlc_item_group_array.bfbs", "world/data/gym/gym_denki_popup_fix/gym_denki_popup_fix_array.bfbs", @@ -925,10 +1006,16 @@ public void DumpSpecific() // Encounters "world/data/encount/point_data/point_data/encount_data_atlantis.bfbs", "world/data/encount/point_data/point_data/encount_data_100000.bfbs", + "world/data/encount/point_data/point_data/encount_data_su1.bfbs", + "world/data/encount/point_data/outbreak_point_data/outbreak_point_main.bfbs", + "world/data/encount/point_data/outbreak_point_data/outbreak_point_su1.bfbs", "world/data/encount/pokedata/pokedata/pokedata_array.bfbs", + "world/data/encount/pokedata/pokedata_su1/pokedata_su1_array.bfbs", "world/data/encount/setting/setting/data.bfbs", "world/data/encount/setting/raid_difficulty_lottery/raid_difficulty_lottery_array.bfbs", "world/data/encount/setting/raid_gem_setting/raid_gem_setting.bfbs", + "world/data/encount/setting/raid_gem_setting/su1_raid_gem_setting.bfbs", + "world/data/encount/setting/outbreak_setting/data.bfbs", "world/data/event/treeshake/treeshake_pokemon/treeshake_pokemon_array.bfbs", // Field "world/data/field/area/field_dungeon_area/field_dungeon_area_array.bfbs", @@ -936,6 +1023,11 @@ public void DumpSpecific() "world/data/field/area/field_location/field_location_array.bfbs", "world/data/field/area/field_main_area/field_main_area_array.bfbs", "world/data/field/area/field_sub_area/field_sub_area_array.bfbs", + "world/data/field/area_su1/field_dungeon_area_su1/field_dungeon_area_su1_array.bfbs", + "world/data/field/area_su1/field_inside_area_su1/field_inside_area_su1_array.bfbs", + "world/data/field/area_su1/field_location_su1/field_location_su1_array.bfbs", + "world/data/field/area_su1/field_main_area_su1/field_main_area_su1_array.bfbs", + "world/data/field/area_su1/field_sub_area_su1/field_sub_area_su1_array.bfbs", "world/data/field/fixed_symbol/fixed_symbol_table/fixed_symbol_table_array.bfbs", // Event Trade "world/data/event/eventTradeList/eventTradeList_array.bfbs", @@ -958,6 +1050,11 @@ public void DumpSpecific() "world/data/ui/pokedex/memo_poke_data/memo_poke_data_array.bfbs", "world/data/ui/pokedex/reward_data/reward_data_array.bfbs", + "world/data/ui/pokedex/blacklist_dlc1/blacklist_dlc1_array.bfbs", + "world/data/ui/pokedex/distribution_data_dlc1/distribution_data_dlc1_array.bfbs", + "world/data/ui/pokedex/memo_poke_data_dlc1/memo_poke_data_dlc1_array.bfbs", + "world/data/ui/pokedex/reward_data_dlc1/reward_data_dlc1_array.bfbs", + // UI "world/data/ui/shop/shop_data/shop_data_array.bfbs", "world/data/ui/status/ribbon/ribbon_array.bfbs", @@ -1003,6 +1100,13 @@ public void DumpSpecific() "world/data/raid/raid_trainer_01/raid_trainer_01_array.bfbs", "world/data/raid/raid_trainer_02/raid_trainer_02_array.bfbs", "world/data/raid/raid_trainer_03/raid_trainer_03_array.bfbs", + "world/data/raid/raid_gem_item_reward_boost/data.bfbs", + "world/data/raid/su1_raid_enemy_01/su1_raid_enemy_01_array.bfbs", + "world/data/raid/su1_raid_enemy_02/su1_raid_enemy_02_array.bfbs", + "world/data/raid/su1_raid_enemy_03/su1_raid_enemy_03_array.bfbs", + "world/data/raid/su1_raid_enemy_04/su1_raid_enemy_04_array.bfbs", + "world/data/raid/su1_raid_enemy_05/su1_raid_enemy_05_array.bfbs", + "world/data/raid/su1_raid_enemy_06/su1_raid_enemy_06_array.bfbs", // Coin "world/data/field/coin_symbol/coin_symbol_manager/coin_symbol_manager_data.bfbs", @@ -1141,4 +1245,10 @@ public void DumpDistributionRaids(string path) { TeraRaidRipper.DumpDistributionRaids(ROM, path); } + + public void DumpDeliveryOutbreaks(string path) + { + var dump = GetPath("encounters"); + MassOutbreakRipper.DumpDeliveryOutbreaks(ROM, path, dump); + } } diff --git a/pkNX.WinForms/Dumping/MassOutbreakRipper.cs b/pkNX.WinForms/Dumping/MassOutbreakRipper.cs new file mode 100644 index 00000000..29c88f3a --- /dev/null +++ b/pkNX.WinForms/Dumping/MassOutbreakRipper.cs @@ -0,0 +1,565 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using PKHeX.Core; +using pkNX.Containers; +using pkNX.Structures; +using pkNX.Structures.FlatBuffers; +using pkNX.Structures.FlatBuffers.SV; +using static pkNX.Structures.Species; + +namespace pkNX.WinForms; + +public static class MassOutbreakRipper +{ + private static readonly List Encounters = new(); + private static Dictionary NameDict = new(); + + public static void DumpDeliveryOutbreaks(IFileInternal ROM, string path, string dump) + { + Encounters.Clear(); + + var cfg = new TextConfig(Structures.GameVersion.SV); + var place_names = GetCommonText(ROM, "place_name", "English", cfg); + var data = ROM.GetPackedFile("message/dat/English/common/place_name.tbl"); + var ahtb = new AHTB(data); + NameDict = EncounterDumperSV.GetPlaceNameMap(place_names, ahtb); + + var dirs = Directory.GetDirectories(path, "*", SearchOption.AllDirectories).OrderBy(z => z); + foreach (var dir in dirs) + DumpDeliveryOutbreakData(ROM, dir); + ExportPickle(dump, Encounters); + } + + private sealed record PickledOutbreak + { + public required CachedOutbreak Parent { get; init; } + public required ushort Species { get; init; } + public required byte Form { get; init; } + public byte Gender { get; init; } = 0xFF; + + public required byte LevelMin { get; init; } + public required byte LevelMax { get; init; } + public required RibbonIndex Ribbon { get; init; } + public required byte MetBase { get; init; } + + public required Dictionary MetPermit { get; init; } + + public required bool ForceScaleRange { get; init; } + public required byte ScaleMin { get; init; } + public required byte ScaleMax { get; init; } + public required bool IsShiny { get; init; } + } + + private static void DumpDeliveryOutbreakData(IFileInternal ROM, string path) + { + var zoneF0 = Path.Combine(path, "zone_main_array_2_0_0"); + var zoneF1 = Path.Combine(path, "zone_su1_array_2_0_0"); + var zoneF2 = Path.Combine(path, "zone_su2_array_2_0_0"); + var pokedata = Path.Combine(path, "pokedata_array_2_0_0"); + + if (!File.Exists(pokedata)) + return; + if (!File.Exists(zoneF2)) // temporary workaround until DLC 2 + zoneF2 = zoneF1; + + var dataZoneF0 = GetDistributionContents(zoneF0, out int indexZoneF0); + var dataZoneF1 = GetDistributionContents(Path.Combine(path, zoneF1), out int indexZoneF1); + var dataZoneF2 = GetDistributionContents(Path.Combine(path, zoneF2), out int indexZoneF2); + var dataPokeData = GetDistributionContents(Path.Combine(path, pokedata), out int indexPokeData); + + var tableZoneF0 = FlatBufferConverter.DeserializeFrom(dataZoneF0); + var tableZoneF1 = FlatBufferConverter.DeserializeFrom(dataZoneF1); + var tableZoneF2 = FlatBufferConverter.DeserializeFrom(dataZoneF2); + var tablePokeData = FlatBufferConverter.DeserializeFrom(dataPokeData); + + var dirDistText = Path.Combine(path, "parse"); + ExportParse(ROM, dirDistText, tableZoneF0, tableZoneF1, tableZoneF2, tablePokeData); + + AddToPickleJar(ROM, tableZoneF0, tableZoneF1, tableZoneF2, tablePokeData); + DumpPretty(ROM, dirDistText); + } + + private static void ExportPickle(string dump, IEnumerable encounters) + { + var dest = Path.Combine(dump, "encounter_outbreak_paldea.pkl"); + using var fs = File.Create(dest); + using var bw = new BinaryWriter(fs); + foreach (var enc in encounters.DistinctBy(x => x)) + { + var ordered = enc.MetPermit + .OrderBy(z => z.Key.Min) + .ThenBy(z => z.Key.Max); + + foreach (var (range, permit) in ordered) + WriteEncounter(enc, bw, range, permit); + } + } + + private static void WriteEncounter(PickledOutbreak enc, BinaryWriter bw, LevelRange range, UInt128 permit) + { + bw.Write(enc.Species); + bw.Write(enc.Form); + bw.Write(enc.Gender); + + bw.Write(range.Min); + bw.Write(range.Max); + bw.Write((byte)enc.Ribbon); + bw.Write(enc.MetBase); + + bw.Write(enc.ForceScaleRange ? (byte)1 : (byte)0); + bw.Write(enc.ScaleMin); + bw.Write(enc.ScaleMax); + bw.Write(enc.IsShiny ? (byte)1 : (byte)0); + + bw.Write((ulong)permit); + bw.Write((ulong)(permit >> 64)); + + return; + } + + private static byte ClampAddBoost(byte val, int b) => (byte)Math.Clamp(val + b, 1, 100); + + private static void AddToPickleJar(IFileInternal ROM, DeliveryOutbreakArray f0, DeliveryOutbreakArray f1, DeliveryOutbreakArray f2, DeliveryOutbreakPokeDataArray pd) + { + var dpF0 = ROM.GetPackedFile("world/data/encount/point_data/outbreak_point_data/outbreak_point_main.bin"); + var dpF1 = ROM.GetPackedFile("world/data/encount/point_data/outbreak_point_data/outbreak_point_su1.bin"); + //var dpF2 = ROM.GetPackedFile("world/data/encount/point_data/outbreak_point_data/outbreak_point_su2.bin"); + + var pointsF0 = FlatBufferConverter.DeserializeFrom(dpF0).Table; + var pointsF1 = FlatBufferConverter.DeserializeFrom(dpF1).Table; + //var pointsF2 = FlatBufferConverter.DeserializeFrom(dpF2).Table; + + var field = new PaldeaFieldModel(ROM); + var scene = new PaldeaSceneModel(ROM, field); + + ScanAssertions(pd); + AddForMap(pointsF0, f0, pd, scene, NameDict, PaldeaFieldIndex.Paldea, 6); + AddForMap(pointsF1, f1, pd, scene, NameDict, PaldeaFieldIndex.Kitakami, 132); + //AddForMap(pointsF2, f2, pd, scene, NameDict, PaldeaFieldIndex.Blueberry, 170); + } + + private static void ScanAssertions(params DeliveryOutbreakPokeDataArray[] obs) + { + // Ensure unused fields are not observed in the data -- if seen, pickle format needs to be updated. + foreach (var ob in obs) + { + foreach (var o in ob.Table) + { + if (o.EnableRarePercentage) // Likely will never be 100%, so if we ever see this, change the check to assert that instead. + throw new Exception($"Elevated shiny rate {o.RarePercentage}%!"); + if (o.EnableScaleRange) + throw new Exception($"Enforced scale range {o.MinScale}-{o.MaxScale}!"); + } + } + } + + private const float Tolerance = 30f; + private const float TolX = Tolerance, TolY = Tolerance, TolZ = Tolerance; + + private static void AddForMap(IEnumerable points, + DeliveryOutbreakArray possible, DeliveryOutbreakPokeDataArray pd, + PaldeaSceneModel scene, Dictionary placeNameMap, PaldeaFieldIndex fieldIndex, + byte baseMet) + { + var encs = GetMetaEncounter(possible.Table, pd); + foreach (var enc in encs) + enc.MetBase = baseMet; + + var areas = scene.AreaInfos[(int)fieldIndex]; + var areaNames = scene.AreaNames[(int)fieldIndex]; + var atlantis = scene.IsAtlantis[(int)fieldIndex]; + if (fieldIndex == PaldeaFieldIndex.Kitakami) + { + areas = areas.Where(z => z.Value.AdjustEncLv != 0) + .ToDictionary(z => z.Key, z => z.Value); + areaNames = areas.Keys.ToList(); + } + foreach (var point in points) + { + foreach (var enc in encs) + { + var poke = enc.Poke; + if (!poke.IsLevelRangeCompatible(point.LevelRange)) + continue; + if (!poke.IsEnableCompatible(point.EnableTable)) + continue; + if (!poke.IsCompatibleArea((byte)point.AreaNo)) + continue; + if (!poke.IsCompatibleArea(point.AreaName)) + continue; + + var min = Math.Max((byte)poke.MinLevel, (byte)point.LevelRange.X); + var max = Math.Min((byte)poke.MaxLevel, (byte)point.LevelRange.Y); + // Cool, can spawn at this point. + // Find all met location IDs we can wander to, then bitflag them into the enc field. + var metData = GetMetFlags(scene, placeNameMap, fieldIndex, baseMet, areaNames, areas, point, atlantis); + var tuple = new LevelRange(min, max); + enc.MetInfo.TryGetValue(tuple, out var val); + enc.MetInfo[tuple] = val | metData.Met; + if (metData.Boost != 0) + { + tuple = new LevelRange(ClampAddBoost(tuple.Min, metData.Boost), ClampAddBoost(tuple.Max, metData.Boost)); + enc.MetInfo.TryGetValue(tuple, out val); + enc.MetInfo[tuple] = val | metData.Met; + } + } + } + + ConsolidateMetInfo(encs); + + foreach (var e in encs) + { + if (e.MetInfo.Count == 0) + throw new Exception("No met flags found for encounter!"); + } + + AddToJar(encs); + } + + private static void ConsolidateMetInfo(IEnumerable encs) + { + foreach (var e in encs) + { + var ranges = e.MetInfo.ToList(); + // If the level ranges overlap for any key value pair with the same flags, consolidate them. + // For each entry, if a later entry has the same flags, and the level ranges overlap, delete the later entry after merging the level ranges into the first entry. + for (int i = 0; i < ranges.Count; i++) + { + var ((min, max), met) = ranges[i]; + for (int j = i + 1; j < ranges.Count; j++) + { + var (min2, max2) = ranges[j].Key; + var met2 = ranges[j].Value; + if (met != met2) + continue; + if (min2 > max || max2 < min) + continue; + // Overlap, merge. + min = Math.Min(min, min2); + max = Math.Max(max, max2); + ranges.RemoveAt(j); + j--; + } + ranges[i] = new(new(min, max), met); + } + e.MetInfo.Clear(); + foreach (var r in ranges) + e.MetInfo[r.Key] = r.Value; + } + } + + private record struct LevelRange(byte Min, byte Max); + + private static void AddToJar(CachedOutbreak[] encs) + { + foreach (var enc in encs) + { + var pk = enc.Poke; + ushort species = SpeciesConverterSV.GetNational9((ushort)pk.DevId); + byte form = (byte)pk.FormId; + if (species is (int)Scatterbug or (int)Spewpa or (int)Vivillon) + form = 30; + + var pickled = new PickledOutbreak + { + Parent = enc, + Species = species, + Form = form, + Gender = pk.Sex switch + { + SexType.DEFAULT => 0xFF, + SexType.MALE => 0, + SexType.FEMALE => 1, + _ => throw new ArgumentOutOfRangeException(nameof(SexType), pk.Sex, "Unknown Gender"), + }, + LevelMin = (byte)pk.MinLevel, + LevelMax = (byte)pk.MaxLevel, + Ribbon = unchecked((RibbonIndex)(pk.AddRibbonPercentage == 0 ? -1 : (int)pk.AddRibbonType - 1)), + + ForceScaleRange = pk.EnableScaleRange, + ScaleMin = (byte)pk.MinScale, + ScaleMax = (byte)pk.MaxScale, + IsShiny = pk.RarePercentage >= 100, + MetBase = enc.MetBase, + MetPermit = enc.MetInfo, + }; + Encounters.Add(pickled); + } + } + + private static (UInt128 Met, int Boost) GetMetFlags(PaldeaSceneModel scene, Dictionary placeNameMap, PaldeaFieldIndex fieldIndex, + byte baseMet, List areaNames, Dictionary areas, OutbreakPointData point, Dictionary atlantis) + { + UInt128 result = 0; + int boost = 0; + for (var i = areaNames.Count - 1; i >= 0; i--) + { + var areaName = areaNames[i]; + var areaInfo = areas[areaName]; + if (atlantis[areaName]) + continue; + + if (areaInfo.Tag is AreaTag.NG_Encount) + continue; + if (!scene.TryGetContainsCheck(fieldIndex, areaName, out var collider)) + continue; + var pt = point.Position; + if (!collider.ContainsPoint(pt.X, pt.Y, pt.Z)) + continue; + if (!EncounterDumperSV.TryGetPlaceName(ref areaName, areaInfo, pt, placeNameMap, areas, scene, fieldIndex, out var placeName)) + continue; + var loc = placeNameMap[placeName].Index; + + var info = areas[areaName]; + boost = info.AdjustEncLv; + var actual = loc - baseMet; + result |= (UInt128)1 << actual; + + for (var x = 0; x < areaNames.Count; x++) + { + var area = areaNames[x]; + if (area == areaName) + continue; + + if (!scene.TryGetContainsCheck(fieldIndex, area, out var subCol)) + continue; + if (!subCol.ContainsPoint(pt.X, pt.Y, pt.Z, TolX, TolY, TolZ)) + continue; + if (!EncounterDumperSV.TryGetPlaceName(ref area, areaInfo, pt, placeNameMap, areas, scene, fieldIndex, out placeName)) + continue; + loc = placeNameMap[placeName].Index; + if (!EncounterDumperSV.IsCrossoverAllowed(loc)) + continue; + + actual = loc - baseMet; + result |= (UInt128)1 << actual; + } + + break; + } + return (result, boost); + } + + private class CachedOutbreak + { + public ulong ZoneID { get; init; } + public required DeliveryOutbreakPokeData Poke { get; init; } + + public byte MetBase { get; set; } + public readonly Dictionary MetInfo = new(); + } + + private static CachedOutbreak[] GetMetaEncounter(IEnumerable possibleTable, DeliveryOutbreakPokeDataArray pd) + { + var ret = new List(); + var hs = new HashSet(); + foreach (var outbreak in possibleTable) + { + TryAdd(outbreak.Poke1, outbreak.Poke1LotValue); + TryAdd(outbreak.Poke2, outbreak.Poke2LotValue); + TryAdd(outbreak.Poke3, outbreak.Poke3LotValue); + TryAdd(outbreak.Poke4, outbreak.Poke4LotValue); + TryAdd(outbreak.Poke5, outbreak.Poke5LotValue); + continue; + void TryAdd(ulong ID, short rate) + { + if (ID == 0 || rate <= 0 || !hs.Add(ID)) + return; + var poke = pd.Table.First(z => z.ID == ID); + ret.Add(new CachedOutbreak { ZoneID = outbreak.ZoneID, Poke = poke }); + } + } + return ret.ToArray(); + } + + private static byte[] GetDistributionContents(string path, out int index) + { + index = 0; // todo + return File.ReadAllBytes(path); + } + + private static string Humanize(OutbreakEnableTable enable) + { + var sb = new StringBuilder(); + if (enable.Air1) sb.Append(" Air1"); + if (enable.Air2) sb.Append(" Air2"); + if (enable.Land) sb.Append(" Land"); + if (enable.UpWater) sb.Append(" UpWater"); + if (enable.UnderWater) sb.Append(" Underwater"); + if (sb.Length == 0) + return "Enable: Unrestricted"; + return "Enable:" + sb; + } + + private static string Humanize(EnableTable enable) + { + var sb = new StringBuilder(); + if (enable.Air1) sb.Append(" Air1"); + if (enable.Air2) sb.Append(" Air2"); + if (enable.Land) sb.Append(" Land"); + if (enable.UpWater) sb.Append(" UpWater"); + if (enable.Underwater) sb.Append(" Underwater"); + if (sb.Length == 0) + return "Enable: Unrestricted"; + return "Enable:" + sb; + } + + private static string Humanize(VersionTable? ver) => ver switch + { + { A: true, B: true } => "Version: Both", + { A: true } => "Version: Scarlet", + { B: true } => "Version: Violet", + _ => "Version: None", + }; + + private static void ExportParse(IFileInternal ROM, string dir, DeliveryOutbreakArray tableZoneF0, DeliveryOutbreakArray tableZoneF1, DeliveryOutbreakArray tableZoneF2, DeliveryOutbreakPokeDataArray tablePokeData) + { + var dumpZ0 = TableUtil.GetTable(tableZoneF0.Table); + var dumpZ1 = TableUtil.GetTable(tableZoneF1.Table); + var dumpZ2 = TableUtil.GetTable(tableZoneF2.Table); + var dumpPD = TableUtil.GetTable(tablePokeData.Table); + var dump = new[] + { + ("zone_main", dumpZ0), + ("zone_su1", dumpZ1), + //("zone_su2", dumpZ2), + ("pokedata", dumpPD), + }; + + Directory.CreateDirectory(dir); + foreach (var (name, data) in dump) + { + var path2 = Path.Combine(dir, $"{name}.txt"); + File.WriteAllText(path2, data); + } + + DumpJson(tableZoneF0, dir, "zone_main"); + DumpJson(tableZoneF1, dir, "zone_su1"); + //DumpJson(tableZoneF2, dir, "zone_su2"); + DumpJson(tablePokeData, dir, "pokedata"); + } + + private static void DumpJson(object flat, string dir, string name) + { + var opt = new System.Text.Json.JsonSerializerOptions { WriteIndented = true }; + var json = System.Text.Json.JsonSerializer.Serialize(flat, opt); + + var fileName = Path.ChangeExtension(name, ".json"); + File.WriteAllText(Path.Combine(dir, fileName), json); + } + + private static string[] GetCommonText(IFileInternal ROM, string name, string lang, TextConfig cfg) + { + var data = ROM.GetPackedFile($"message/dat/{lang}/common/{name}.dat"); + return new TextFile(data, cfg).Lines; + } + + private static void DumpPretty(IFileInternal ROM, string dir) + { + string fileName = $"pretty_{Encounters[0].Parent.Poke.ID}.txt"; + using var sw = File.CreateText(Path.Combine(dir, fileName)); + + foreach (var enc in Encounters) + { + var parent = enc.Parent; + WriteParent(ROM, sw, parent); + WriteLocationList(sw, parent.MetInfo, parent.MetBase, enc.LevelMin, enc.LevelMax); + sw.WriteLine(); + } + } + + private static void WriteLocationList(TextWriter sw, Dictionary metFlags, byte baseMet, byte min, byte max) + { + foreach ((var range, UInt128 flags) in metFlags.OrderBy(z => z.Key.Min).ThenBy(z => z.Key.Max)) + { + for (int i = 0; i < 128; i++) + { + if (((flags >> i) & 1) != 1) + continue; + + var met = baseMet + i; + var location = NameDict.First(z => z.Value.Index == met); + sw.WriteLine($"\tLv. {range.Min}-{range.Max} @ {location}"); + } + } + } + + private static void WriteParent(IFileInternal ROM, StreamWriter sw, CachedOutbreak parent) + { + const string lang = "English"; + var cfg = new TextConfig(Structures.GameVersion.SV); + var enc = parent.Poke; + + var species = GetCommonText(ROM, "monsname", lang, cfg); + var ribbons = GetCommonText(ROM, "ribbon", lang, cfg); + + var form = GetFormName(ROM, (ushort)parent.Poke.DevId, (byte)parent.Poke.FormId) switch + { + not "" when enc.FormId is 0 => $" ({GetFormName(ROM, (ushort)enc.DevId, (byte)enc.FormId)})", + not "" => $"-{enc.FormId} ({GetFormName(ROM, (ushort)enc.DevId, (byte)enc.FormId)})", + _ => string.Empty, + }; + + sw.WriteLine($"ID: {enc.ID}"); + sw.WriteLine($"{species[(int)enc.DevId]}{form}"); + sw.WriteLine(Humanize(enc.Enable!.Value)); + sw.WriteLine(Humanize(enc.Version)); + sw.WriteLine($"Base Level Range: {enc.MinLevel}-{enc.MaxLevel}"); + if (enc.Sex is not SexType.DEFAULT) + sw.WriteLine($"Gender: {enc.Sex}"); + if (enc.EnableScaleRange) + sw.WriteLine($"Scale: {enc.MinScale}-{enc.MaxScale}"); + if (enc.EnableRarePercentage) + sw.WriteLine($"Shiny Rate: {enc.RarePercentage}%"); + if (enc.AddRibbonPercentage != 0) + sw.WriteLine($"Ribbon/Mark: {ribbons[(int)enc.AddRibbonType - 1]} ({enc.AddRibbonPercentage}%)"); + } + + private static string GetFormName(IFileInternal ROM, ushort species, byte form) + { + const string lang = "English"; + var cfg = new TextConfig(Structures.GameVersion.SV); + var text = GetCommonText(ROM, "zkn_form", lang, cfg); + var abil = GetCommonText(ROM, "tokusei", lang, cfg); + var type = GetCommonText(ROM, "typename", lang, cfg); + var path = ROM.GetPackedFile("message/dat/English/common/zkn_form.tbl"); + var ahtb = new AHTB(path); + + var GenericFormNames = new HashSet() { Tauros, Unown, Kyogre, Groudon, Rotom, Arceus, Kyurem, Greninja, Rockruff }; + string[] TaurosForms = new[] { "", "Combat Breed", "Blaze Breed", "Aqua Breed" }; + char[] UnownForms = "ABCDEFGHIJKLMNOPQRSTUVWXYZ!?".ToCharArray(); + for (int i = 0; i < text.Length; i++) + { + var entry = ahtb.Entries[i]; + var name = entry.Name; + var line = text[i]; + + // some species have form strings that are just the species name (Rotom), or are not descriptive (e.g. Unown "One form"), or no form string at all! + if (GenericFormNames.Contains((Structures.Species)species)) + { + return (Structures.Species)species switch + { + Tauros when form is not 0 => $"Paldean Form / {TaurosForms[form]}", + Unown => $"Unown {UnownForms[form]}", // A-Z!? + Kyogre or Groudon when form is 0 => "", // Kyogre-0 / Groudon-0 + Rotom when form is 0 => "", // Rotom-0 + Arceus => $"{type[form]}", // Types + Kyurem when form is 0 => "", // Kyurem-0 + Greninja when form is 1 => $"{abil[210]}", // Battle Bond Greninja + Rockruff when form is 1 => $"{abil[020]}", // Own Tempo Rockruff + _ => "", + }; + } + + else if (name == $"ZKN_FORM_{species:000}_{form:000}") + { + return line; + } + } + + return ""; + } +} diff --git a/pkNX.WinForms/Dumping/SV/BoxCollision9.cs b/pkNX.WinForms/Dumping/SV/BoxCollision9.cs index f70baf94..b814864d 100644 --- a/pkNX.WinForms/Dumping/SV/BoxCollision9.cs +++ b/pkNX.WinForms/Dumping/SV/BoxCollision9.cs @@ -1,6 +1,4 @@ - -using pkNX.Structures; -using pkNX.Structures.FlatBuffers.SV; +namespace pkNX.Structures.FlatBuffers; public class BoxCollision9 : IContainsV3f { @@ -30,4 +28,6 @@ public bool ContainsPoint(float x, float y, float z, float toleranceX, float tol return true; } + + public bool ContainedBy(IContainsV3f outer) => outer.ContainsPoint(Position.X, Position.Y, Position.Z, Size.X / 2.0f, Size.Y / 2.0f, Size.Z / 2.0f); } diff --git a/pkNX.WinForms/Dumping/SV/EncounterDumperSV.cs b/pkNX.WinForms/Dumping/SV/EncounterDumperSV.cs index d9c70e7f..d2a3f31e 100644 --- a/pkNX.WinForms/Dumping/SV/EncounterDumperSV.cs +++ b/pkNX.WinForms/Dumping/SV/EncounterDumperSV.cs @@ -3,8 +3,9 @@ using System.Collections.Generic; using System.IO; using System.Linq; -using PKHeX.Core; +using System.Text.Json; using pkNX.Containers; +using pkNX.Structures; using pkNX.Structures.FlatBuffers; using pkNX.Structures.FlatBuffers.SV; @@ -19,6 +20,11 @@ public class EncounterDumperSV public EncounterDumperSV(IFileInternal rom) => ROM = rom; + private static readonly string[] BannedFixedSpawnNames = + { + "ai_area01_30", // Lighthouse Wingull + }; + public void DumpTo(string path, IReadOnlyList specNamesInternal, IReadOnlyList moveNames, Dictionary placeNameMap, bool writeText = true, bool writePickle = true) @@ -32,100 +38,20 @@ public class EncounterDumperSV var csym = new PaldeaCoinSymbolModel(ROM); var mlEncPoints = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/encount/point_data/point_data/encount_data_100000.bin")); var alEncPoints = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/encount/point_data/point_data/encount_data_atlantis.bin")); - var pokeData = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/encount/pokedata/pokedata/pokedata_array.bin")); + var su1EncPoints = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/encount/point_data/point_data/encount_data_su1.bin")); + var pokeDataMain = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/encount/pokedata/pokedata/pokedata_array.bin")); + var pokeDataSu1 = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/encount/pokedata/pokedata_su1/pokedata_su1_array.bin")); var db = new LocationDatabase(); - // Overall Logic Flow: - // 1 - At every point, spawn everything that can exist at that point. - // 2 - At each area, absorb native points into local points. - // 3 - At each area, absorb crossover points into crossover points. - // 4 - Consolidate the encounters from both point lists. - // Just compute everything (big memory!) then crunch it all down. - // Points can be used by multiple areas as crossover sources. Need to be able to "belong" to multiple areas, and indicate their parent area. var pointMain = ReformatPoints(mlEncPoints); var pointAtlantis = ReformatPoints(alEncPoints); + var pointSu1 = ReformatPoints(su1EncPoints); - // Fill the point lists for each area, then spawn everything into those points. - foreach (var areaName in scene.areaNames) - { - var areaInfo = scene.AreaInfos[areaName]; - - // Determine potential spawners - if (!scene.TryGetContainsCheck(areaName, out var collider)) - { - Console.WriteLine($"No collider for {areaName}"); - continue; - } - - // Locations that do not spawn encounters can still have crossovers bleed into them. - // We'll have empty local encounter lists for them. - var name = areaInfo.LocationNameMain; - if (string.IsNullOrEmpty(name)) - continue; - var storage = db.Get(placeNameMap[name].Index, areaName, areaInfo); - if (areaInfo.Tag is AreaTag.NG_Encount or AreaTag.NG_All) - continue; - - var points = scene.isAtlantis[areaName] ? pointAtlantis : pointMain; - storage.LoadPoints(points, collider, areaInfo.ActualMinLevel, areaInfo.ActualMaxLevel); - storage.GetEncounters(pokeData, scene); - } - - // For each area, we need to peek at the other areas to see if they have any crossover points. - // For each of those crossover points, we need to see if they are in the current area's collider. - // If they are, we need to add them to the current area's list of crossover points. - foreach (var areaName in scene.areaNames) - { - // Same sanity checking as above iteration. - var areaInfo = scene.AreaInfos[areaName]; - - // Determine potential spawners - if (!scene.TryGetContainsCheck(areaName, out var collider)) - { - Console.WriteLine($"No collider for {areaName}"); - continue; - } - - var name = areaInfo.LocationNameMain; - if (string.IsNullOrEmpty(name)) - continue; - //if (areaInfo.Tag is AreaTag.NG_Encount or AreaTag.NG_All) - // continue; - - var storage = db.Get(placeNameMap[name].Index, areaName, areaInfo); - if (!IsCrossoverAllowed(storage)) - continue; - - // Here's where the fun begins. Iterate over areas inside this loop so we can look for all possible adjacent areas. - foreach (var otherName in scene.areaNames) - { - // Skip self - if (otherName == areaName) - continue; - // Skip areas that don't have a location name - var otherAreaInfo = scene.AreaInfos[otherName]; - var otherNameMain = otherAreaInfo.LocationNameMain; - if (string.IsNullOrEmpty(otherNameMain)) - continue; - - // Skip areas that don't have a collider - if (!scene.TryGetContainsCheck(otherName, out _)) - continue; - - // Iterate over all crossover points in the other area. - var cross = db.Get(placeNameMap[otherNameMain].Index, otherName, otherAreaInfo); - if (!IsCrossoverAllowed(cross)) - continue; - foreach (var point in cross.Local) - { - // If the crossover point is close enough to the current area's collider, add it to the current area's list of crossover points. - if (collider.ContainsPoint(point.X, point.Y, point.Z, tolX, tolY, tolZ)) - storage.Nearby.Add(point); - } - } - } + // Process all field indices + ProcessAreas(PaldeaFieldIndex.Paldea); + ProcessAreas(PaldeaFieldIndex.Kitakami); // Each area and their local / crossover points have been aggregated. // Integrate the points' slots into a single list, and consolidate entries with same level ranges to as few objects as possible. @@ -134,6 +60,8 @@ public class EncounterDumperSV // Consolidate encounters storage.Integrate(); storage.Consolidate(); + if (storage.AreaName == "a_su0104") + storage.Consolidate(); } // Output to stream if available. @@ -156,155 +84,197 @@ public class EncounterDumperSV // Fixed symbols List serialized = new(); - int[] bannedIndexes = - { - 31, // Lighthouse Wingull - }; var fsymData = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/fixed_symbol/fixed_symbol_table/fixed_symbol_table_array.bin")); var eventBattle = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/battle/eventBattlePokemon/eventBattlePokemon_array.bin")); - foreach (var (game, gamePoints) in new[] { ("sl", fsym.scarletPoints), ("vl", fsym.violetPoints)}) + foreach (var (game, gamePoints) in new[] { ("sl", fsym.scarletPoints), ("vl", fsym.violetPoints) }) { using var gw = File.CreateText(Path.Combine(path, $"titan_fixed_{game}.txt")); - for (var i = 0; i < fsymData.Table.Count; i++) + foreach (var fieldIndex in new[] { PaldeaFieldIndex.Paldea, PaldeaFieldIndex.Kitakami }) { - var entry = fsymData.Table[i]; - var tableKey = entry.TableKey; - var points = gamePoints.Where(p => p.TableKey == tableKey).ToList(); - if (points.Count == 0) - continue; + var areaNames = scene.AreaNames[(int)fieldIndex]; + var areas = scene.AreaInfos[(int)fieldIndex]; + var atlantis = scene.IsAtlantis[(int)fieldIndex]; + var allPoints = gamePoints[(int)fieldIndex]; - var areas = new List(); - var tmpPoints = points.ToList(); - for (var x = scene.areaNames.Count - 1; x >= 0; x--) + if (fieldIndex == PaldeaFieldIndex.Kitakami) { - var areaName = scene.areaNames[x]; - if (scene.isAtlantis[areaName]) + areas = areas.Where(z => z.Value.AdjustEncLv != 0) + .ToDictionary(z => z.Key, z => z.Value); + areaNames = areas.Keys.ToList(); + } + + for (var i = 0; i < fsymData.Table.Count; i++) + { + var entry = fsymData.Table[i]; + var tableKey = entry.TableKey; + var points = allPoints.FindAll(p => p.TableKey == tableKey); + if (points.Count == 0) continue; - var areaInfo = scene.AreaInfos[areaName]; - var name = areaInfo.LocationNameMain; - if (string.IsNullOrEmpty(name)) - continue; - if (areaInfo.Tag is AreaTag.NG_Encount) - continue; + var appearAreas = new List(); - for (int p = 0; p < tmpPoints.Count; p++) + if (!FindArea(AreaType.Cave)) + FindArea(AreaType.Default); + + bool FindArea(AreaType type) { - var point = tmpPoints[p]; - if (!scene.IsPointContained(areaName, point.Position.X, point.Position.Y, point.Position.Z)) - continue; - tmpPoints.RemoveAt(p); - p--; - if (!areas.Contains(areaName)) - areas.Add(areaName); + for (var x = areaNames.Count - 1; x >= 0; x--) + { + var areaName = areaNames[x]; + if (atlantis[areaName]) + continue; + + var areaInfo = areas[areaName]; + if (type != AreaType.Default && areaInfo.Type != type) + continue; + if (areaInfo.Tag is AreaTag.NG_Encount) + continue; + if (!scene.TryGetContainsCheck(fieldIndex, areaName, out var collider)) + continue; + for (int p = 0; p < points.Count; p++) + { + var point = points[p]; + var pt = point.Position; + if (!collider.ContainsPoint(pt.X, pt.Y, pt.Z)) + continue; + if (!TryGetPlaceName(ref areaName, areaInfo, pt, placeNameMap, areas, scene, fieldIndex, out var placeName)) + continue; + areaName = areaNames[x]; + if (!appearAreas.Exists(z => z.Point == pt && z.AreaName == areaName)) + appearAreas.Add(new(placeName, areaName, areaInfo.AdjustEncLv, pt)); + points.RemoveAt(p); + p--; + } + + if (points.Count == 0) + return true; + } + return false; + } + + var locs = appearAreas.Select(a => placeNameMap[a.PlaceName].Index).Distinct().ToList(); + + gw.WriteLine("==="); + gw.WriteLine($"{tableKey} - {i}"); + gw.WriteLine("==="); + gw.WriteLine(" PokeData:"); + var pd = entry.Symbol; + gw.WriteLine($" Species: {specNamesInternal[(int)pd.DevId]}"); + gw.WriteLine($" Form: {pd.FormId}"); + gw.Write($" Level: {pd.Level}"); + foreach (var adj in appearAreas.Select(a => a.Adjust).Where(lv => lv != 0).Distinct().Order()) + { + gw.Write($", {pd.Level + adj}"); + } + gw.WriteLine(); + gw.WriteLine($" Sex: {Humanize(pd.Sex)}"); + gw.WriteLine($" Shiny: {Humanize(pd.RareType)}"); + + var talentStr = pd.TalentType switch + { + TalentType.RANDOM => "Random", + TalentType.V_NUM => $"{pd.TalentVNum} Perfect", + TalentType.VALUE => $"{pd.TalentValue.HP}/{pd.TalentValue.ATK}/{pd.TalentValue.DEF}/{pd.TalentValue.SPA}/{pd.TalentValue.SPD}/{pd.TalentValue.SPE}", + _ => "Invalid", + }; + gw.WriteLine($" IVs: {talentStr}"); + gw.WriteLine($" Ability: {Humanize(pd.TokuseiIndex)}"); + switch (pd.WazaType) + { + case WazaType.DEFAULT: + gw.WriteLine(" Moves: Random"); + break; + case WazaType.MANUAL: + gw.WriteLine($" Moves: {moveNames[(int)pd.Waza1.WazaId]}/{moveNames[(int)pd.Waza2.WazaId]}/{moveNames[(int)pd.Waza3.WazaId]}/{moveNames[(int)pd.Waza4.WazaId]}"); + break; + } + + gw.WriteLine($" Scale: {Humanize(pd.ScaleType, pd.ScaleValue)}"); + gw.WriteLine($" GemType: {(int)pd.GemType}"); + + gw.WriteLine(" Points:"); + foreach (var point in points) + { + gw.WriteLine($" - ({point.Position.X}, {point.Position.Y}, {point.Position.Z})"); + } + + gw.WriteLine(" Areas:"); + foreach (var area in appearAreas) + { + var loc = area.PlaceName; + (string name, int index) = placeNameMap[loc]; + gw.WriteLine($" - {area.PlaceName} - {loc} - {name} ({index})"); + } + + // Serialize + if (locs.Count == 0) + continue; + if (BannedFixedSpawnNames.Contains(entry.TableKey)) + continue; + + // If not stationary, allow some tolerance. + var aiStationary = GetIsStationary(entry.PokeAI.ActionId); + var wanderAreas = new List(0); + if (!aiStationary) + { + var allInfos = scene.AreaInfos[(int)fieldIndex]; + var allNames = scene.AreaNames[(int)fieldIndex]; + for (var a = 0; a < allNames.Count; a++) + { + var areaName = allNames[a]; + if (atlantis[areaName]) + continue; + + var areaInfo = allInfos[areaName]; + if (!scene.TryGetContainsCheck(fieldIndex, areaName, out var collider)) + continue; + if (areaInfo.Tag is AreaTag.NG_Encount) + continue; + if (!TryGetBleedArea(collider, appearAreas, scene, fieldIndex, out var bledFrom)) + continue; // can't bleed into this area + + // Bleeding from zones should start from the sub-zone, so we don't need to check other sub-zones. + if (!TryGetPlaceName(ref areaName, areaInfo, collider, placeNameMap, allInfos, scene, fieldIndex, out var placeName)) + continue; + wanderAreas.Add(bledFrom with { PlaceName = placeName, AreaName = allNames[a] }); + } + } + + foreach (var area in appearAreas.GroupBy(z => z.Adjust)) + { + var adjust = area.Key; + var wander = wanderAreas.Where(z => z.Adjust == adjust); + var allLocations = area.Concat(wander); + var locationIDs = allLocations.Select(z => placeNameMap[z.PlaceName].Index).Distinct().ToList(); + if (fieldIndex == PaldeaFieldIndex.Paldea && entry.PokeAI.ActionId == PokemonActionID.FS_POP_AREA22_DRAGONITE) // Flies around not using tolerance. + locationIDs.Add(46); // North Province (Area One) + locationIDs.Sort(); + + WriteFixedSymbol(serialized, entry, locationIDs); + WriteFixedSymbol(serialized, entry, locationIDs, adjust); } } - - var locs = areas.Select(a => placeNameMap[scene.AreaInfos[a].LocationNameMain].Index).Distinct().ToList(); - - gw.WriteLine("==="); - gw.WriteLine(entry.TableKey); - gw.WriteLine("==="); - gw.WriteLine(" PokeData:"); - var pd = entry.Symbol; - gw.WriteLine($" Species: {specNamesInternal[(int)pd.DevId]}"); - gw.WriteLine($" Form: {pd.FormId}"); - gw.WriteLine($" Level: {pd.Level}"); - gw.WriteLine($" Sex: {new[] { "Random", "Male", "Female" }[(int)pd.Sex]}"); - gw.WriteLine($" Shiny: {new[] { "Random", "Never", "Always" }[(int)pd.RareType]}"); - - var talentStr = pd.TalentType switch - { - TalentType.RANDOM => "Random", - TalentType.V_NUM => $"{pd.TalentVNum} Perfect", - TalentType.VALUE => $"{pd.TalentValue.HP}/{pd.TalentValue.ATK}/{pd.TalentValue.DEF}/{pd.TalentValue.SPA}/{pd.TalentValue.SPD}/{pd.TalentValue.SPE}", - _ => "Invalid", - }; - gw.WriteLine($" IVs: {talentStr}"); - gw.WriteLine($" Ability: {new[] { "1/2", "1/2/3", "1", "2", "3" }[(int)pd.TokuseiIndex]}"); - switch (pd.WazaType) - { - case WazaType.DEFAULT: - gw.WriteLine(" Moves: Random"); - break; - case WazaType.MANUAL: - gw.WriteLine($" Moves: {moveNames[(int)pd.Waza1.WazaId]}/{moveNames[(int)pd.Waza2.WazaId]}/{moveNames[(int)pd.Waza3.WazaId]}/{moveNames[(int)pd.Waza4.WazaId]}"); - break; - } - - gw.WriteLine($" Scale: {new[] { "Random", "XS", "S", "M", "L", "XL", $"{pd.ScaleValue}" }[(int)pd.ScaleType]}"); - gw.WriteLine($" GemType: {(int)pd.GemType}"); - - gw.WriteLine(" Points:"); - foreach (var point in points) - { - gw.WriteLine($" - ({point.Position.X}, {point.Position.Y}, {point.Position.Z})"); - } - gw.WriteLine(" Areas:"); - foreach (var areaName in areas) - { - var areaInfo = scene.AreaInfos[areaName]; - var loc = areaInfo.LocationNameMain; - (string name, int index) = placeNameMap[loc]; - gw.WriteLine($" - {areaName} - {loc} - {name} ({index})"); - } - - // Serialize - if (locs.Count == 0) - continue; - if (bannedIndexes.Contains(i)) - continue; - - // If not stationary, allow some tolerance. - var aiStationary = GetIsStationary(entry.PokeAI.ActionId); - if (!aiStationary) - { - areas.Clear(); - foreach (var areaName in scene.areaNames) - { - if (scene.isAtlantis[areaName]) - continue; - - var areaInfo = scene.AreaInfos[areaName]; - var name = areaInfo.LocationNameMain; - if (string.IsNullOrEmpty(name)) - continue; - if (areaInfo.Tag is AreaTag.NG_Encount) - continue; - - if (!scene.TryGetContainsCheck(areaName, out var collider)) - continue; - if (points.Any(p => collider.ContainsPoint(p.Position.X, p.Position.Y, p.Position.Z, tolX, tolY, tolZ))) - areas.Add(areaName); - } - } - - locs = areas.Select(a => placeNameMap[scene.AreaInfos[a].LocationNameMain].Index).Distinct().ToList(); - if (entry.PokeAI.ActionId == PokemonActionID.FS_POP_AREA22_DRAGONITE) // Flies around not using tolerance. - locs.Add(46); // North Province (Area One) - - locs.Sort(); - WriteFixedSymbol(serialized, entry, locs); } } + // Gimmighoul only in Paldea using var cw = File.CreateText(Path.Combine(path, "titan_coin_symbol.txt")); - foreach (var entry in csym.Points) + foreach (var entry in csym.Points[(int)PaldeaFieldIndex.Paldea]) { var areas = new List(); - foreach (var areaName in scene.areaNames) + foreach (var areaName in scene.AreaNames[(int)PaldeaFieldIndex.Paldea]) { - if (scene.isAtlantis[areaName]) + if (scene.IsAtlantis[(int)PaldeaFieldIndex.Paldea][areaName]) continue; - var areaInfo = scene.AreaInfos[areaName]; + var areaInfo = scene.AreaInfos[(int)PaldeaFieldIndex.Paldea][areaName]; var name = areaInfo.LocationNameMain; - if (string.IsNullOrEmpty(name)) + if (string.IsNullOrEmpty(name)) // Don't worry about subzones continue; if (areaInfo.Tag is AreaTag.NG_Encount or AreaTag.NG_All) continue; - if (scene.IsPointContained(areaName, entry.Position.X, entry.Position.Y, entry.Position.Z)) + if (scene.IsPointContained(PaldeaFieldIndex.Paldea, areaName, entry.Position.X, entry.Position.Y, entry.Position.Z)) areas.Add(areaName); } @@ -325,8 +295,8 @@ public class EncounterDumperSV cw.WriteLine($" Species: {specNamesInternal[(int)pd.DevId]}"); cw.WriteLine($" Form: {pd.FormId}"); cw.WriteLine($" Level: {pd.Level}"); - cw.WriteLine($" Sex: {new[] { "Random", "Male", "Female" }[(int)pd.Sex]}"); - cw.WriteLine($" Shiny: {new[] { "Random", "Never", "Always" }[(int)pd.RareType]}"); + cw.WriteLine($" Sex: {Humanize(pd.Sex)}"); + cw.WriteLine($" Shiny: {Humanize(pd.RareType)}"); var talentStr = pd.TalentType switch { @@ -336,25 +306,25 @@ public class EncounterDumperSV _ => "Invalid", }; cw.WriteLine($" IVs: {talentStr}"); - cw.WriteLine($" Ability: {new[] { "1/2", "1/2/3", "1", "2", "3" }[(int)pd.Tokusei]}"); + cw.WriteLine($" Ability: {Humanize(pd.Tokusei)}"); switch (pd.WazaType) { case WazaType.DEFAULT: - cw.WriteLine( " Moves: Random"); + cw.WriteLine(" Moves: Random"); break; case WazaType.MANUAL: cw.WriteLine($" Moves: {moveNames[(int)pd.Waza1.WazaId]}/{moveNames[(int)pd.Waza2.WazaId]}/{moveNames[(int)pd.Waza3.WazaId]}/{moveNames[(int)pd.Waza4.WazaId]}"); break; } - cw.WriteLine($" Scale: {new[] { "Random", "XS", "S", "M", "L", "XL", $"{pd.ScaleValue}" }[(int)pd.ScaleType]}"); + cw.WriteLine($" Scale: {Humanize(pd.ScaleType, pd.ScaleValue)}"); cw.WriteLine($" GemType: {(int)pd.GemType}"); } cw.WriteLine(" Areas:"); foreach (var areaName in areas) { - var areaInfo = scene.AreaInfos[areaName]; + var areaInfo = scene.AreaInfos[(int)PaldeaFieldIndex.Paldea][areaName]; var loc = areaInfo.LocationNameMain; (string name, int index) = placeNameMap[loc]; cw.WriteLine($" - {areaName} - {loc} - {name} ({index})"); @@ -367,6 +337,254 @@ public class EncounterDumperSV .ThenBy(z => z[3]) // Level ; File.WriteAllBytes(pathPickle, ordered.SelectMany(z => z).ToArray()); + DumpScene(scene, path); + DumpField(field, path); + return; + + // HELPERS + LocationPointDetail[] GetPoints(PaldeaFieldIndex fieldIndex, bool isAtlantis) => fieldIndex switch + { + PaldeaFieldIndex.Paldea => isAtlantis ? pointAtlantis : pointMain, + PaldeaFieldIndex.Kitakami => pointSu1, + _ => throw new ArgumentException($"Could not handle {fieldIndex}"), + }; + + EncountPokeDataArray GetPokeData(PaldeaFieldIndex fieldIndex) => fieldIndex switch + { + PaldeaFieldIndex.Paldea => pokeDataMain, + PaldeaFieldIndex.Kitakami => pokeDataSu1, + _ => throw new ArgumentException($"Could not handle {fieldIndex}"), + }; + + void ProcessAreas(PaldeaFieldIndex fieldIndex) + { + // Overall Logic Flow: + // 1 - At every point, spawn everything that can exist at that point. + // 2 - At each area, absorb native points into local points. + // 3 - At each area, absorb crossover points into crossover points. + // 4 - Consolidate the encounters from both point lists. + // Just compute everything (big memory!) then crunch it all down. + + // Fill the point lists for each area, then spawn everything into those points. + var areaNames = scene.AreaNames[(int)fieldIndex]; + var areas = scene.AreaInfos[(int)fieldIndex]; + var atlantis = scene.IsAtlantis[(int)fieldIndex]; + for (var i = areaNames.Count - 1; i >= 0; i--) + { + var areaName = areaNames[i]; + var areaInfo = areas[areaName]; + + // Determine potential spawners + if (!scene.TryGetContainsCheck(fieldIndex, areaName, out var collider)) + { + Console.WriteLine($"No collider for {areaName}"); + continue; + } + + // Areas without a location name can't be reversed into location ID. + if (!TryGetPlaceName(ref areaName, areaInfo, collider, placeNameMap, areas, scene, fieldIndex, out var placeName)) + continue; + + // Locations that do not spawn encounters can still have crossovers bleed into them. + // We'll have empty local encounter lists for them. + var storage = db.Get(placeNameMap[placeName].Index, fieldIndex, areaName, areaInfo); + if (areaInfo.Tag is AreaTag.NG_Encount or AreaTag.NG_All) + continue; + + var points = GetPoints(fieldIndex, atlantis[areaName]); + storage.LoadPoints(points, collider, areaInfo.ActualMinLevel, areaInfo.ActualMaxLevel, areaInfo.AdjustEncLv); + storage.GetEncounters(GetPokeData(fieldIndex), scene); + } + + // For each area, we need to peek at the other areas to see if they have any crossover points. + // For each of those crossover points, we need to see if they are in the current area's collider. + // If they are, we need to add them to the current area's list of crossover points. + foreach (var areaName in areaNames) + { + // Same sanity checking as above iteration. + var areaInfo = areas[areaName]; + + // Determine potential spawners + if (!scene.TryGetContainsCheck(fieldIndex, areaName, out var collider)) + { + Console.WriteLine($"No collider for {areaName}"); + continue; + } + + var name = areaInfo.LocationNameMain; + if (string.IsNullOrEmpty(name)) + continue; + //if (areaInfo.Tag is AreaTag.NG_Encount or AreaTag.NG_All) + // continue; + + var storage = db.Get(placeNameMap[name].Index, fieldIndex, areaName, areaInfo); + if (!IsCrossoverAllowed(storage)) + continue; + + // Here's where the fun begins. Iterate over areas inside this loop so we can look for all possible adjacent areas. + foreach (var otherName in areaNames) + { + // Skip self + if (otherName == areaName) + continue; + // Skip areas that don't have a location name -- subzones were the initial spawn spot if so. + var otherAreaInfo = areas[otherName]; + var otherNameMain = otherAreaInfo.LocationNameMain; + if (string.IsNullOrEmpty(otherNameMain)) + continue; + + // Skip areas that don't have a collider + if (!scene.TryGetContainsCheck(fieldIndex, otherName, out _)) + continue; + + // Iterate over all crossover points in the other area. + var cross = db.Get(placeNameMap[otherNameMain].Index, fieldIndex, otherName, otherAreaInfo); + if (!IsCrossoverAllowed(cross)) + continue; + foreach (var point in cross.Local) + { + // If the crossover point is close enough to the current area's collider, add it to the current area's list of crossover points. + if (collider.ContainsPoint(point.X, point.Y, point.Z, tolX, tolY, tolZ)) + storage.Nearby.Add(point); + } + } + } + } + } + + private static bool TryGetBleedArea(IContainsV3f collider, List appearAreas, PaldeaSceneModel scene, PaldeaFieldIndex fieldIndex, out AppearTuple bledFrom) + { + foreach (var a in appearAreas) + { + var p = a.Point; + if (!collider.ContainsPoint(p.X, p.Y, p.Z, tolX, tolY, tolZ)) + continue; + // Get the original area it bled from. + bledFrom = appearAreas.First(z => + scene.TryGetContainsCheck(fieldIndex, z.AreaName, out var c) && + c.ContainsPoint(p.X, p.Y, p.Z)); + return true; + } + bledFrom = default; + return false; + } + + private static bool TryGetPlaceName(ref string areaName, AreaInfo areaInfo, + IContainsV3f collider, Dictionary placeNameMap, + IReadOnlyDictionary areas, + PaldeaSceneModel scene, PaldeaFieldIndex fieldIndex, out string placeName) + { + placeName = areaInfo.LocationNameMain; + if (!string.IsNullOrEmpty(placeName)) + return true; + + // Maybe this is a sub-area? Try to get the parent area name. + bool IsValidParentAreaName(string aName) + { + if (!areas.TryGetValue(aName, out var info)) + return false; + var n = info.LocationNameMain; + if (string.IsNullOrEmpty(n)) + return false; + return placeNameMap.ContainsKey(n); + } + + if (!scene.TryGetParentAreaName(fieldIndex, areaName, collider, IsValidParentAreaName, out var parentAreaName)) + { + Console.WriteLine($"No parent area for {areaName}"); + return false; + } + + areaName = parentAreaName; + placeName = areas[parentAreaName].LocationNameMain; + return true; + } + + public static bool TryGetPlaceName(ref string areaName, AreaInfo areaInfo, + PackedVec3f point, Dictionary placeNameMap, + IReadOnlyDictionary areas, + PaldeaSceneModel scene, PaldeaFieldIndex fieldIndex, out string placeName) + { + placeName = areaInfo.LocationNameMain; + if (!string.IsNullOrEmpty(placeName)) + return true; + + // Maybe this is a sub-area? Try to get the parent area name. + bool IsValidParentAreaName(string aName) + { + if (!areas.TryGetValue(aName, out var info)) + return false; + var n = info.LocationNameMain; + if (string.IsNullOrEmpty(n)) + return false; + return placeNameMap.ContainsKey(n); + } + + if (!scene.TryGetParentAreaName(fieldIndex, areaName, point, IsValidParentAreaName, out var parentAreaName)) + { + Console.WriteLine($"No parent area for {areaName}"); + return false; + } + + areaName = parentAreaName; + placeName = areas[parentAreaName].LocationNameMain; + return true; + } + + private record struct AppearTuple(string PlaceName, string AreaName, int Adjust, PackedVec3f Point); + + private static string Humanize(SizeType type, short value) => type switch + { + SizeType.RANDOM => "Random", + SizeType.XS => "XS", + SizeType.S => "S", + SizeType.M => "M", + SizeType.L => "L", + SizeType.XL => "XL", + SizeType.VALUE => value.ToString(), + _ => throw new ArgumentOutOfRangeException(nameof(type), type, null), + }; + + private static string Humanize(RareType type) => type switch + { + RareType.DEFAULT => "Random", + RareType.NO_RARE => "Never", + RareType.RARE => "Always", + _ => throw new ArgumentOutOfRangeException(nameof(type), type, null), + }; + + private static string Humanize(SexType type) => type switch + { + SexType.DEFAULT => "Random", + SexType.MALE => "Male", + SexType.FEMALE => "Female", + _ => throw new ArgumentOutOfRangeException(nameof(type), type, null), + }; + + private static string Humanize(TokuseiType type) => type switch + { + TokuseiType.RANDOM_12 => "1/2", + TokuseiType.RANDOM_123 => "1/2/H", + TokuseiType.SET_1 => "1", + TokuseiType.SET_2 => "2", + TokuseiType.SET_3 => "H", + _ => throw new ArgumentOutOfRangeException(nameof(type), type, "Invalid ability index"), + }; + + private static void DumpScene(PaldeaSceneModel scene, string path) + { + // Dump each property to json. + var dest = Path.Combine(path, "paldea_scene.json"); + var json = JsonSerializer.Serialize(scene, new JsonSerializerOptions { WriteIndented = true, IncludeFields = true }); + File.WriteAllText(dest, json); + } + + private static void DumpField(PaldeaFieldModel field, string path) + { + // Dump each property to json. + var dest = Path.Combine(path, "paldea_field.json"); + var json = JsonSerializer.Serialize(field, new JsonSerializerOptions { WriteIndented = true, IncludeFields = true }); + File.WriteAllText(dest, json); } /// @@ -375,13 +593,16 @@ public class EncounterDumperSV private static bool IsCrossoverAllowed(LocationStorage storage) { var loc = storage.Location; - if (loc == 124) // Area Zero - return false; - if (loc == 8) // Mesagoza - return false; - return true; + return IsCrossoverAllowed(loc); } + public static bool IsCrossoverAllowed(int MetLocation) => MetLocation switch + { + 8 => false, // Mesagoza + 124 => false, // Area Zero + _ => true, + }; + private static bool GetIsStationary(PokemonActionID action) => action switch { PokemonActionID.FS_POP_ALWAYS_GAZE_BIRD_TARGET_PLAYER => true, @@ -402,7 +623,7 @@ private static LocationPointDetail[] ReformatPoints(PointDataArray all) return result; } - private static void WriteFixedSymbol(ICollection exist, FixedSymbolTable entry, IReadOnlyList locs) + private static void WriteFixedSymbol(ICollection exist, FixedSymbolTable entry, IReadOnlyList locs, int adjustLevel = 0) { var enc = entry.Symbol; using var ms = new MemoryStream(); @@ -410,7 +631,7 @@ private static void WriteFixedSymbol(ICollection exist, FixedSymbolTable bw.Write(SpeciesConverterSV.GetNational9((ushort)enc.DevId)); bw.Write((byte)enc.FormId); - bw.Write((byte)enc.Level); + bw.Write((byte)(enc.Level + adjustLevel)); bw.Write((byte)enc.TalentVNum); bw.Write((byte)enc.GemType); @@ -480,6 +701,8 @@ private static byte[] SerializeLocationSet(ushort loc, ushort crossover, IReadOn string areaName, AreaInfo areaInfo, List encounts) { var loc = areaInfo.LocationNameMain; + if (!placeNameMap.ContainsKey(loc)) + return; (string name, int index) = placeNameMap[loc]; var heading = $"{areaName} - {loc} - {name} ({index})"; WriteEncounts(tw, specNamesInternal, heading, encounts); @@ -527,7 +750,7 @@ private static byte[] SerializeLocationSet(ushort loc, ushort crossover, IReadOn private static void WriteBiomes(TextWriter tw, string heading, List points) { - var biomes = points.Select(z => z.Point.Biome).Distinct().Select(z => z.ToString()).OrderBy(z => z); + var biomes = points.Select(z => z.Point.Biome).Distinct().Select(z => z.ToString()).Order(); var btext = string.Join(',', biomes); tw.WriteLine($"{heading}\t{btext}"); } diff --git a/pkNX.WinForms/Dumping/SV/LocationDatabase.cs b/pkNX.WinForms/Dumping/SV/LocationDatabase.cs index baa456da..2b9ac679 100644 --- a/pkNX.WinForms/Dumping/SV/LocationDatabase.cs +++ b/pkNX.WinForms/Dumping/SV/LocationDatabase.cs @@ -7,10 +7,10 @@ public class LocationDatabase { public readonly Dictionary Locations = new(); - public LocationStorage Get(int location, string areaName, AreaInfo areaInfo) + public LocationStorage Get(int location, PaldeaFieldIndex fieldIndex, string areaName, AreaInfo areaInfo) { if (!Locations.TryGetValue(location, out var loc)) - Locations[location] = loc = new LocationStorage(location, areaName, areaInfo); + Locations[location] = loc = new LocationStorage(location, fieldIndex, areaName, areaInfo); return loc; } } diff --git a/pkNX.WinForms/Dumping/SV/LocationPointDetail.cs b/pkNX.WinForms/Dumping/SV/LocationPointDetail.cs index 7677a297..ee9c99e2 100644 --- a/pkNX.WinForms/Dumping/SV/LocationPointDetail.cs +++ b/pkNX.WinForms/Dumping/SV/LocationPointDetail.cs @@ -12,6 +12,7 @@ public class LocationPointDetail public float Y => Point.Position.Y; public float Z => Point.Position.Z; public int Location { get; init; } + public int LevelAdjust { get; init; } public bool IsWithinLevelRange(int areaMin, int areaMax) { @@ -24,6 +25,7 @@ public bool IsWithinLevelRange(int areaMin, int areaMax) public string GetString() { - return $"{Location:0000} ({X:0.0000},{Y:0.0000},{Z:0.0000}) {Point.Biome} ({Point.LevelRange.X}-{Point.LevelRange.Y}) {Slots.Count:00}"; + var adjustStr = LevelAdjust != 0 ? $", {Point.LevelRange.X + LevelAdjust}-{Point.LevelRange.Y + LevelAdjust}" : ""; + return $"{Location:0000} ({X:0.0000},{Y:0.0000},{Z:0.0000}) {Point.Biome} ({Point.LevelRange.X}-{Point.LevelRange.Y}{adjustStr}) {Slots.Count:00}"; } } diff --git a/pkNX.WinForms/Dumping/SV/LocationStorage.cs b/pkNX.WinForms/Dumping/SV/LocationStorage.cs index eb496ae9..bd9f28cd 100644 --- a/pkNX.WinForms/Dumping/SV/LocationStorage.cs +++ b/pkNX.WinForms/Dumping/SV/LocationStorage.cs @@ -7,6 +7,7 @@ namespace pkNX.Structures.FlatBuffers; public class LocationStorage { public readonly int Location; + private readonly PaldeaFieldIndex FieldIndex; public readonly AreaInfo AreaInfo; public readonly string AreaName; @@ -16,9 +17,10 @@ public class LocationStorage public readonly List Local = new(); public readonly List Nearby = new(); - public LocationStorage(int loc, string areaName, AreaInfo info) + public LocationStorage(int loc, PaldeaFieldIndex fieldIndex, string areaName, AreaInfo info) { Location = loc; + FieldIndex = fieldIndex; AreaName = areaName; AreaInfo = info; } @@ -32,8 +34,9 @@ private void Add(PaldeaEncounter slot) private void AddCrossover(PaldeaEncounter slot, int loc) { + // If slots cross over, they are necessarily in the same field if (!SlotsCrossover.TryGetValue(loc, out var s)) - SlotsCrossover[loc] = s = new LocationStorage(loc, AreaName, AreaInfo); + SlotsCrossover[loc] = s = new LocationStorage(loc, FieldIndex, AreaName, AreaInfo); s.Add(slot with { CrossFromLocation = (ushort)Location }); } @@ -53,7 +56,12 @@ public void Integrate() public void Consolidate() { - ConsolidateEncounters(Slots); + var len = -1; + while (len != Slots.Count) + { + len = Slots.Count; + ConsolidateEncounters(Slots); + } foreach (var loc in SlotsCrossover.Values) loc.Consolidate(); } @@ -106,7 +114,7 @@ private static bool TryAbsorbFromRange(List encounters, int sta return false; } - public void LoadPoints(IEnumerable points, IContainsV3f collider, int areaMin, int areaMax) + public void LoadPoints(IEnumerable points, IContainsV3f collider, int areaMin, int areaMax, int areaAdjust) { foreach (var w in points) { @@ -114,26 +122,19 @@ public void LoadPoints(IEnumerable points, IContainsV3f col continue; if (collider.ContainsPoint(w.X, w.Y, w.Z)) { - var composite = GetCompositePoint(w.Point, areaMin, areaMax, Location); + var composite = GetCompositePoint(w.Point, areaMin, areaMax, areaAdjust, Location); Local.Add(composite); // native } // Don't check here for cross-area, as our areaMin/areaMax is not valid for that crossover case. } } - private static LocationPointDetail GetCompositePoint(PointData ep, int areaMin, int areaMax, int location) + private static LocationPointDetail GetCompositePoint(PointData ep, int areaMin, int areaMax, int adjust, int location) { var newX = Math.Max(ep.LevelRange.X, areaMin); var newY = Math.Min(ep.LevelRange.Y, areaMax); - var newPoint = new PointData - { - Position = ep.Position, - LevelRange = new SV.PackedVec2f { X = newX, Y = newY }, - Biome = ep.Biome, - Substance = ep.Substance, - AreaNo = ep.AreaNo, - }; - return new LocationPointDetail(newPoint) { Location = location }; + var newPoint = ep with { LevelRange = new PackedVec2f { X = newX, Y = newY } }; + return new LocationPointDetail(newPoint) { Location = location, LevelAdjust = adjust }; } public void GetEncounters(EncountPokeDataArray pokeData, PaldeaSceneModel scene) @@ -142,34 +143,46 @@ public void GetEncounters(EncountPokeDataArray pokeData, PaldeaSceneModel scene) { foreach (var pd in pokeData.Table) { - if (!IsAbleToSpawnAt(pd, spawner, AreaName, scene)) + if (!IsAbleToSpawnAt(pd, spawner, AreaName, scene, FieldIndex)) continue; // Add encount - spawner.Add(PaldeaEncounter.GetNew(pd, spawner.Point)); + var point = spawner.Point; + spawner.Add(PaldeaEncounter.GetNew(pd, point)); if (pd.BandPoke != 0) // Add band encount - spawner.Add(PaldeaEncounter.GetBand(pd, spawner.Point)); + spawner.Add(PaldeaEncounter.GetBand(pd, point)); + + var boost = spawner.LevelAdjust; + if (boost == 0) + continue; + + // Add adjusted encount (different level range) + spawner.Add(PaldeaEncounter.GetNew(pd, point, boost)); + if (pd.BandPoke != 0) // Add band encount + spawner.Add(PaldeaEncounter.GetBand(pd, point, boost)); } } } - private static bool IsAbleToSpawnAt(EncountPokeData pd, LocationPointDetail ep, string areaName, PaldeaSceneModel scene) + private static bool IsAbleToSpawnAt(EncountPokeData pd, LocationPointDetail ep, string areaName, PaldeaSceneModel scene, PaldeaFieldIndex fieldIndex) { + var point = ep.Point; // Check area - if (!string.IsNullOrEmpty(pd.Area) && !IsInArea(pd.Area, ep.Point.AreaNo)) + if (!string.IsNullOrEmpty(pd.Area) && !IsInArea(pd.Area, point.AreaNo)) return false; // Check loc - if (!string.IsNullOrEmpty(pd.LocationName) && !IsInArea(pd.LocationName, areaName, scene, ep.Point)) + if (!IsMatchAreaFilter(pd.LocationName, areaName, scene, fieldIndex, point)) return false; // Check biome - if (!HasBiome(pd, (Biome)(int)ep.Point.Biome)) + if (!HasBiome(pd, (Biome)(int)point.Biome)) return false; // check level range overlap // check area level range overlap -- already done via point - if (!LevelWithinRange(pd, ep.Point)) + var range = point.LevelRange; + if (!pd.IsLevelRangeOverlap(range.X, range.Y)) return false; // Assume flag, enable table, timetable are fine @@ -178,11 +191,6 @@ private static bool IsAbleToSpawnAt(EncountPokeData pd, LocationPointDetail ep, return true; } - private static bool LevelWithinRange(EncountPokeData pd, PointData clamp) - { - return clamp.LevelRange.X <= pd.MaxLevel && pd.MinLevel <= clamp.LevelRange.Y; - } - private static bool HasBiome(EncountPokeData pd, Biome biome) { if (biome == pd.Biome1) @@ -211,19 +219,23 @@ private static bool IsInArea(ReadOnlySpan areaName, int areaNo) return int.TryParse(areaName[start..], out var x) && areaNo == x; } - private static bool IsInArea(string locName, string areaName, PaldeaSceneModel scene, PointData ep) + private static bool IsMatchAreaFilter(ReadOnlySpan filterToLocations, string areaName, PaldeaSceneModel scene, PaldeaFieldIndex fieldIndex, PointData ep) { - var split = locName.Split(","); - foreach (string a in split) + if (filterToLocations.Length == 0) + return true; // Filter not specified + + while (true) { - if (a == areaName) + var index = filterToLocations.IndexOf(','); + var name = index == -1 ? filterToLocations : filterToLocations[..index]; + if (name.SequenceEqual(areaName)) + return true; + if (scene.IsPointContained(fieldIndex, name.ToString(), ep.Position.X, ep.Position.Y, ep.Position.Z)) return true; - if (!scene.IsPointContained(a, ep.Position.X, ep.Position.Y, ep.Position.Z)) - continue; - - return true; + if (index == -1) + return false; + filterToLocations = filterToLocations[(index + 1)..]; } - return false; } } diff --git a/pkNX.WinForms/Dumping/SV/PaldeaCoinSymbolModel.cs b/pkNX.WinForms/Dumping/SV/PaldeaCoinSymbolModel.cs index 5ed8d366..40ee8e62 100644 --- a/pkNX.WinForms/Dumping/SV/PaldeaCoinSymbolModel.cs +++ b/pkNX.WinForms/Dumping/SV/PaldeaCoinSymbolModel.cs @@ -8,18 +8,18 @@ namespace pkNX.WinForms; public class PaldeaCoinSymbolModel { - public readonly List Points; + public readonly List[] Points = new List[] { new(), new() }; public PaldeaCoinSymbolModel(IFileInternal ROM) { - Points = new List(); - var cData = ROM.GetPackedFile("world/scene/parts/field/streaming_event/world_coin_placement_symbol_/world_coin_placement_symbol_0.trscn"); // NOTE: Fine to only use Scarlet, Violet data is identical. var c = FlatBufferConverter.DeserializeFrom(cData); - Points.AddRange(GetObjectTemplateSymbolPoints(c)); + Points[(int)PaldeaFieldIndex.Paldea].AddRange(GetObjectTemplateSymbolPoints(c)); + + // TODO: are there coin points in su1/su2? } private static IEnumerable GetObjectTemplateSymbolPoints(TrinitySceneObjectTemplate template) diff --git a/pkNX.WinForms/Dumping/SV/PaldeaCoinSymbolPoint.cs b/pkNX.WinForms/Dumping/SV/PaldeaCoinSymbolPoint.cs index 63653f4e..578837e0 100644 --- a/pkNX.WinForms/Dumping/SV/PaldeaCoinSymbolPoint.cs +++ b/pkNX.WinForms/Dumping/SV/PaldeaCoinSymbolPoint.cs @@ -1,4 +1,4 @@ -using pkNX.Structures.FlatBuffers.SV; +using pkNX.Structures.FlatBuffers; namespace pkNX.WinForms; diff --git a/pkNX.WinForms/Dumping/SV/PaldeaEncounter.cs b/pkNX.WinForms/Dumping/SV/PaldeaEncounter.cs index 39da875e..8b051f39 100644 --- a/pkNX.WinForms/Dumping/SV/PaldeaEncounter.cs +++ b/pkNX.WinForms/Dumping/SV/PaldeaEncounter.cs @@ -19,21 +19,23 @@ public record PaldeaEncounter(ushort Species, byte Form, byte Sex, byte MinLevel // Match the Mark time of day order: Noon, Night, Evening, Morning private static byte GetTimeBits(TimeTable t) => (byte)((t.Noon ? 0 : 1) | (t.Night ? 0 : 2) | (t.Evening ? 0 : 4) | (t.Morning ? 0 : 8)); - public static PaldeaEncounter GetNew(EncountPokeData pd, PointData ep) + public static PaldeaEncounter GetNew(EncountPokeData pd, PointData ep, int adjust = 0) { // Combine the 4 bools into a single byte var time = GetTimeBits(pd.Time); - var min = (byte)Math.Max(ep.LevelRange.X, pd.MinLevel); - var max = (byte)Math.Min(ep.LevelRange.Y, pd.MaxLevel); + var min = (byte)(Math.Max(ep.LevelRange.X, pd.MinLevel) + adjust); + var max = (byte)(Math.Min(ep.LevelRange.Y, pd.MaxLevel) + adjust); + if (max > 100) + max = 100; return new(SpeciesConverterSV.GetNational9((ushort)pd.DevId), (byte)pd.Form, (byte)pd.Sex, min, max, time); } - public static PaldeaEncounter GetBand(EncountPokeData pd, PointData ep) + public static PaldeaEncounter GetBand(EncountPokeData pd, PointData ep, int adjust = 0) { // Combine the 4 bools into a single byte var time = GetTimeBits(pd.Time); - var min = (byte)Math.Max(ep.LevelRange.X, pd.MinLevel); - var max = (byte)Math.Min(ep.LevelRange.Y, pd.MaxLevel); + var min = (byte)(Math.Max(ep.LevelRange.X, pd.MinLevel) + adjust); + var max = (byte)(Math.Min(ep.LevelRange.Y, pd.MaxLevel) + adjust); return new(SpeciesConverterSV.GetNational9((ushort)pd.BandPoke), (byte)pd.BandForm, (byte)pd.BandSex, min, max, time); } diff --git a/pkNX.WinForms/Dumping/SV/PaldeaFieldModel.cs b/pkNX.WinForms/Dumping/SV/PaldeaFieldModel.cs index 241ddccb..e3c042c6 100644 --- a/pkNX.WinForms/Dumping/SV/PaldeaFieldModel.cs +++ b/pkNX.WinForms/Dumping/SV/PaldeaFieldModel.cs @@ -7,44 +7,51 @@ namespace pkNX.Structures.FlatBuffers; public class PaldeaFieldModel { - private readonly IList mainAreas; - private readonly IList subAreas; - private readonly IList insideAreas; - private readonly IList dungeonAreas; - private readonly IList fieldLocations; + private const int MapCount = 2; + public IList[] MainAreas { get; } = new IList[MapCount]; + public IList[] SubAreas { get; } = new IList[MapCount]; + public IList[] InsideAreas { get; } = new IList[MapCount]; + public IList[] DungeonAreas { get; } = new IList[MapCount]; + public IList[] FieldLocations { get; } = new IList[MapCount]; public PaldeaFieldModel(IFileInternal ROM) { - mainAreas = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_main_area/field_main_area_array.bin")).Table; - subAreas = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_sub_area/field_sub_area_array.bin")).Table; - insideAreas = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_inside_area/field_inside_area_array.bin")).Table; - dungeonAreas = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_dungeon_area/field_dungeon_area_array.bin")).Table; - fieldLocations = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_location/field_location_array.bin")).Table; + MainAreas[(int)PaldeaFieldIndex.Paldea] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_main_area/field_main_area_array.bin")).Table; + SubAreas[(int)PaldeaFieldIndex.Paldea] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_sub_area/field_sub_area_array.bin")).Table; + InsideAreas[(int)PaldeaFieldIndex.Paldea] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_inside_area/field_inside_area_array.bin")).Table; + DungeonAreas[(int)PaldeaFieldIndex.Paldea] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_dungeon_area/field_dungeon_area_array.bin")).Table; + FieldLocations[(int)PaldeaFieldIndex.Paldea] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_location/field_location_array.bin")).Table; + + MainAreas[(int)PaldeaFieldIndex.Kitakami] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area_su1/field_main_area_su1/field_main_area_su1_array.bin")).Table; + SubAreas[(int)PaldeaFieldIndex.Kitakami] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area_su1/field_sub_area_su1/field_sub_area_su1_array.bin")).Table; + InsideAreas[(int)PaldeaFieldIndex.Kitakami] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area_su1/field_inside_area_su1/field_inside_area_su1_array.bin")).Table; + DungeonAreas[(int)PaldeaFieldIndex.Kitakami] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area_su1/field_dungeon_area_su1/field_dungeon_area_su1_array.bin")).Table; + FieldLocations[(int)PaldeaFieldIndex.Kitakami] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area_su1/field_location_su1/field_location_su1_array.bin")).Table; } - public AreaInfo FindAreaInfo(string name) + public AreaInfo FindAreaInfo(PaldeaFieldIndex index, string name) { - foreach (var area in mainAreas) + foreach (var area in MainAreas[(int)index]) { if (area.Name == name) return area.Info; } - foreach (var area in subAreas) + foreach (var area in SubAreas[(int)index]) { if (area.Name == name) return area.Info; } - foreach (var area in insideAreas) + foreach (var area in InsideAreas[(int)index]) { if (area.Name == name) return area.Info; } - foreach (var area in dungeonAreas) + foreach (var area in DungeonAreas[(int)index]) { if (area.Name == name) return area.Info; } - foreach (var area in fieldLocations) + foreach (var area in FieldLocations[(int)index]) { if (area.Name == name) return area.Info; @@ -52,3 +59,10 @@ public AreaInfo FindAreaInfo(string name) throw new ArgumentException($"Unknown area {name}"); } } + +public enum PaldeaFieldIndex +{ + Paldea = 0, + Kitakami = 1, + Blueberry = 2, +} diff --git a/pkNX.WinForms/Dumping/SV/PaldeaFixedSymbolModel.cs b/pkNX.WinForms/Dumping/SV/PaldeaFixedSymbolModel.cs index ae97396c..8ad2a0ab 100644 --- a/pkNX.WinForms/Dumping/SV/PaldeaFixedSymbolModel.cs +++ b/pkNX.WinForms/Dumping/SV/PaldeaFixedSymbolModel.cs @@ -8,22 +8,30 @@ namespace pkNX.WinForms; public class PaldeaFixedSymbolModel { - public readonly List scarletPoints; - public readonly List violetPoints; + public readonly List[] scarletPoints = new List[] { new(), new() }; + public readonly List[] violetPoints = new List[] { new(), new() }; public PaldeaFixedSymbolModel(IFileInternal ROM) { - scarletPoints = new List(); - violetPoints = new List(); - + // Paldea var p0Data = ROM.GetPackedFile("world/scene/parts/field/streaming_event/world_fixed_placement_symbol_/world_fixed_placement_symbol_0.trscn"); var p1Data = ROM.GetPackedFile("world/scene/parts/field/streaming_event/world_fixed_placement_symbol_/world_fixed_placement_symbol_1.trscn"); var p0 = FlatBufferConverter.DeserializeFrom(p0Data); var p1 = FlatBufferConverter.DeserializeFrom(p1Data); - scarletPoints.AddRange(GetObjectTemplateSymbolPoints(p0)); - violetPoints.AddRange(GetObjectTemplateSymbolPoints(p1)); + scarletPoints[(int)PaldeaFieldIndex.Paldea].AddRange(GetObjectTemplateSymbolPoints(p0)); + violetPoints[(int)PaldeaFieldIndex.Paldea].AddRange(GetObjectTemplateSymbolPoints(p1)); + + // Kitakami + var k0Data = ROM.GetPackedFile("world/scene/parts/field/streaming_event/su1_world_fixed_placement_symbol_/su1_world_fixed_placement_symbol_0.trscn"); + var k1Data = ROM.GetPackedFile("world/scene/parts/field/streaming_event/su1_world_fixed_placement_symbol_/su1_world_fixed_placement_symbol_1.trscn"); + + var k0 = FlatBufferConverter.DeserializeFrom(k0Data); + var k1 = FlatBufferConverter.DeserializeFrom(k1Data); + + scarletPoints[(int)PaldeaFieldIndex.Kitakami].AddRange(GetObjectTemplateSymbolPoints(k0)); + violetPoints[(int)PaldeaFieldIndex.Kitakami].AddRange(GetObjectTemplateSymbolPoints(k1)); } private IEnumerable GetObjectTemplateSymbolPoints(TrinitySceneObjectTemplate template) @@ -82,7 +90,18 @@ private static IEnumerable GetScenePointSymbolPoints(Tri foreach (var f in GetScenePointSymbolPoints(subScenePoint, sobj.SubObjects)) yield return f; break; - } + } + case "trinity_ObjectTemplate": + { + var ssObj = FlatBufferConverter.DeserializeFrom(sobj.Data); + if (ssObj.Type != "trinity_ScenePoint") + continue; + var subScenePoint = FlatBufferConverter.DeserializeFrom(ssObj.Data); + + foreach (var f in GetScenePointSymbolPoints(subScenePoint, sobj.SubObjects)) + yield return f; + break; + } default: throw new ArgumentException($"Unknown SubObject {sobj.Type}"); } diff --git a/pkNX.WinForms/Dumping/SV/PaldeaFixedSymbolPoint.cs b/pkNX.WinForms/Dumping/SV/PaldeaFixedSymbolPoint.cs index d1d481e2..6f4501f5 100644 --- a/pkNX.WinForms/Dumping/SV/PaldeaFixedSymbolPoint.cs +++ b/pkNX.WinForms/Dumping/SV/PaldeaFixedSymbolPoint.cs @@ -1,4 +1,4 @@ -using pkNX.Structures.FlatBuffers.SV; +using pkNX.Structures.FlatBuffers; namespace pkNX.WinForms; diff --git a/pkNX.WinForms/Dumping/SV/PaldeaSceneModel.cs b/pkNX.WinForms/Dumping/SV/PaldeaSceneModel.cs index 3cfefed7..79b8104c 100644 --- a/pkNX.WinForms/Dumping/SV/PaldeaSceneModel.cs +++ b/pkNX.WinForms/Dumping/SV/PaldeaSceneModel.cs @@ -1,3 +1,4 @@ +using System; using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; @@ -10,27 +11,34 @@ namespace pkNX.Structures.FlatBuffers; public class PaldeaSceneModel { - public readonly List areaNames = new(); - public readonly Dictionary AreaInfos = new(); - public readonly Dictionary areaColTrees = new(); - public readonly Dictionary areaColBoxes = new(); - public readonly Dictionary isAtlantis = new(); + public List[] AreaNames { get; } = { new(), new() }; + public Dictionary[] AreaInfos { get; } = { new(), new() }; + public Dictionary[] AreaCollisionTrees { get; } = { new(), new() }; + public Dictionary[] AreaCollisionBoxes { get; } = { new(), new() }; + public Dictionary[] IsAtlantis { get; } = { new(), new() }; public PaldeaSceneModel(IFileInternal ROM, PaldeaFieldModel field) { // NOTE: Safe to only use _0 because _1 is identical. - var area_management = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/scene/parts/field/field_system/area_management_/area_management_0.trscn")); - Debug.Assert(area_management.ObjectTemplateName == "area_management"); + var area_collision = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/scene/parts/field/resident_event/resident_area_collision_/resident_area_collision_0.trscn")); + Debug.Assert(area_collision.ObjectTemplateName == "resident_area_collision"); // NOTE: Safe to only use _0 because _1 is identical. var a_w23_field_area_col = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/scene/parts/field/room/a_w23_field/a_w23_field_area_col_/a_w23_field_area_col_0.trscn")); Debug.Assert(a_w23_field_area_col.ObjectTemplateName == "a_w23_field_area_col"); - foreach (var obj in area_management.Objects.Concat(a_w23_field_area_col.Objects)) - AddIfAppropriate(ROM, field, a_w23_field_area_col, obj); + foreach (var obj in area_collision.Objects.Concat(a_w23_field_area_col.Objects)) + AddIfAppropriate(ROM, field, PaldeaFieldIndex.Paldea, a_w23_field_area_col.Objects, obj); + + // TODO: is this _0 or _1? Identical? Name? + var area_collision_su1 = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile(0x441FE0A17C85BEAA)); + Debug.Assert(area_collision_su1.ObjectTemplateName == "resident_area_collision"); + + foreach (var obj in area_collision_su1.Objects) + AddIfAppropriate(ROM, field, PaldeaFieldIndex.Kitakami, new List(), obj); } - private void AddIfAppropriate(IFileInternal ROM, PaldeaFieldModel field, TrinitySceneObjectTemplate w23, TrinitySceneObjectTemplateEntry obj) + private void AddIfAppropriate(IFileInternal ROM, PaldeaFieldModel field, PaldeaFieldIndex index, IList atlantis, TrinitySceneObjectTemplateEntry obj) { if (!(obj.SubObjects.Count > 0 && obj.SubObjects[0].Type == "trinity_CollisionComponent")) return; @@ -39,7 +47,7 @@ private void AddIfAppropriate(IFileInternal ROM, PaldeaFieldModel field, Trinity var tcom = FlatBufferConverter.DeserializeFrom(inner); var collision = tcom.Component.CollisionComponent.Shape; - var isAtlantisObj = w23.Objects.Contains(obj); + var isAtlantisObj = atlantis.Contains(obj); switch (obj.Type) { case "trinity_ObjectTemplate": @@ -50,15 +58,15 @@ private void AddIfAppropriate(IFileInternal ROM, PaldeaFieldModel field, Trinity var sceneObject = FlatBufferConverter.DeserializeFrom(sObj.Data); Debug.Assert(sceneObject.ObjectName == sObj.ObjectTemplateExtra); - AddSceneObject(sObj.ObjectTemplateName, sceneObject, collision, field, ROM); - isAtlantis[sObj.ObjectTemplateName] = isAtlantisObj; + AddSceneObject(index, sObj.ObjectTemplateName, sceneObject, collision, field, ROM); + IsAtlantis[(int)index][sObj.ObjectTemplateName] = isAtlantisObj; break; } case "trinity_SceneObject": { var sceneObject = FlatBufferConverter.DeserializeFrom(obj.Data); - AddSceneObject(sceneObject.ObjectName, sceneObject, collision, field, ROM); - isAtlantis[sceneObject.ObjectName] = isAtlantisObj; + AddSceneObject(index, sceneObject.ObjectName, sceneObject, collision, field, ROM); + IsAtlantis[(int)index][sceneObject.ObjectName] = isAtlantisObj; break; } // ReSharper disable once RedundantEmptySwitchSection @@ -70,17 +78,17 @@ private void AddIfAppropriate(IFileInternal ROM, PaldeaFieldModel field, Trinity } } - private void AddSceneObject(string name, TrinitySceneObject sceneObject, CollisionUnion shape, PaldeaFieldModel field, IFileInternal ROM) + private void AddSceneObject(PaldeaFieldIndex index, string name, TrinitySceneObject sceneObject, CollisionUnion shape, PaldeaFieldModel field, IFileInternal ROM) { - areaNames.Add(name); - AreaInfos[name] = field.FindAreaInfo(name); + AreaNames[(int)index].Add(name); + AreaInfos[(int)index][name] = field.FindAreaInfo(index, name); Debug.Assert(shape.Discriminator is 2 or 4); if (shape.TryGet(out Box? box)) { // Box collision, obj.ObjectPosition.Field02 is pos, box.Field02 is size of box - areaColBoxes[name] = new BoxCollision9 + AreaCollisionBoxes[(int)index][name] = new BoxCollision9 { Position = sceneObject.ObjectPosition.Field02, Size = box!.Field02, @@ -89,28 +97,28 @@ private void AddSceneObject(string name, TrinitySceneObject sceneObject, Collisi else if (shape.TryGet(out Havok? havok)) { var havokData = ROM.GetPackedFile(havok!.TrcolFilePath); - areaColTrees[name] = HavokCollision.ParseAABBTree(havokData); + AreaCollisionTrees[(int)index][name] = HavokCollision.ParseAABBTree(havokData); } } - public bool IsPointContained(string areaName, float x, float y, float z) + public bool IsPointContained(PaldeaFieldIndex index, string areaName, float x, float y, float z) { - if (areaColTrees.TryGetValue(areaName, out var tree)) + if (AreaCollisionTrees[(int)index].TryGetValue(areaName, out var tree)) return tree.ContainsPoint(x, y, z); - if (areaColBoxes.TryGetValue(areaName, out var box)) + if (AreaCollisionBoxes[(int)index].TryGetValue(areaName, out var box)) return box.ContainsPoint(x, y, z); return false; } - public bool TryGetContainsCheck(string areaName, [NotNullWhen(true)] out IContainsV3f? result) + public bool TryGetContainsCheck(PaldeaFieldIndex index, string areaName, [NotNullWhen(true)] out IContainsV3f? result) { - if (areaColTrees.TryGetValue(areaName, out var tree)) + if (AreaCollisionTrees[(int)index].TryGetValue(areaName, out var tree)) { result = tree; return true; } - if (areaColBoxes.TryGetValue(areaName, out var box)) + if (AreaCollisionBoxes[(int)index].TryGetValue(areaName, out var box)) { result = box; return true; @@ -119,4 +127,58 @@ public bool TryGetContainsCheck(string areaName, [NotNullWhen(true)] out IContai result = null; return false; } + + public bool TryGetParentAreaName(PaldeaFieldIndex fieldIndex, string areaName, PackedVec3f point, Func criteria, [NotNullWhen(true)] out string? parent) + { + var areas = AreaNames[(int)fieldIndex]; + for (var i = areas.Count - 1; i >= 0; i--) + { + var name = areas[i]; + if (name == areaName) + continue; + + if (!criteria(name)) + continue; + + if (!TryGetContainsCheck(fieldIndex, name, out var outer)) + continue; + + if (!outer.ContainsPoint(point.X, point.Y, point.Z)) + continue; + + //Debug.WriteLine($"Remapped {areaName} to {name}"); + parent = name; + return true; + } + + parent = null; + return false; + } + + public bool TryGetParentAreaName(PaldeaFieldIndex fieldIndex, string areaName, IContainsV3f inner, Func criteria, [NotNullWhen(true)] out string? parent) + { + var areas = AreaNames[(int)fieldIndex]; + for (var i = areas.Count - 1; i >= 0; i--) + { + var name = areas[i]; + if (name == areaName) + continue; + + if (!criteria(name)) + continue; + + if (!TryGetContainsCheck(fieldIndex, name, out var outer)) + continue; + + if (!inner.ContainedBy(outer)) + continue; + + //Debug.WriteLine($"Remapped {areaName} to {name}"); + parent = name; + return true; + } + + parent = null; + return false; + } } diff --git a/pkNX.WinForms/Dumping/TeraRaidRipper.cs b/pkNX.WinForms/Dumping/TeraRaidRipper.cs index 13ffc377..90c5a68d 100644 --- a/pkNX.WinForms/Dumping/TeraRaidRipper.cs +++ b/pkNX.WinForms/Dumping/TeraRaidRipper.cs @@ -8,12 +8,13 @@ using pkNX.Structures; using pkNX.Structures.FlatBuffers; using pkNX.Structures.FlatBuffers.SV; +using static pkNX.Structures.Species; namespace pkNX.WinForms; public static class TeraRaidRipper { - public static void DumpRaids(IFileInternal ROM, IReadOnlyList internalRaidFiles, string outPath) + public static void DumpRaids(IFileInternal ROM, IReadOnlyList internalRaidFiles, string outPath, string rateFileName, string pickleFileName) { var list = new List(); var rateTotal = new (int Scarlet, int Violet)[8]; @@ -54,8 +55,8 @@ public static void DumpRaids(IFileInternal ROM, IReadOnlyList internalRa .ToList(); var rateString = string.Join(Environment.NewLine, rateTotal.Select((z, i) => $"{i}\t{z.Scarlet}\t{z.Violet}")); - File.WriteAllText(Path.Combine(outPath, "rateTotal.txt"), rateString); - WritePickle(outPath, all, "encounter_gem_paldea.pkl"); + File.WriteAllText(Path.Combine(outPath, rateFileName), rateString); + WritePickle(outPath, all, pickleFileName); // Raids can be shared, and show up with the same met location regardless of shared vs not. // No need to differentiate. // var scarlet = all.Where(z => z.Enemy.Info.RomVer != RaidRomType.TYPE_B); @@ -147,14 +148,23 @@ private static void DumpDistributionRaids(IFileInternal ROM, string path, List "1 Only", - TokuseiType.SET_2 => "2 Only", - TokuseiType.SET_3 => "Hidden Only", - TokuseiType.RANDOM_12 => "1/2", - _ => "1/2/H", + TokuseiType.SET_1 => $"{abilities[pi.Ability1]} (1)", + TokuseiType.SET_2 => $"{abilities[pi.Ability2]} (2)", + TokuseiType.SET_3 => $"{abilities[pi.AbilityH]} (H)", + TokuseiType.RANDOM_12 => "Any (1/2)", + _ => "Any (1/2/H)", // RANDOM_123 }; var shiny = boss.RareType switch { RareType.RARE => "Always", RareType.NO_RARE => "Never", - _ => string.Empty, + _ => string.Empty, // Random }; var talent = boss.TalentValue; @@ -466,10 +478,15 @@ private static void DumpPretty(IFileInternal ROM, DeliveryRaidEnemyTableArray ta { SexType.MALE => "Male", SexType.FEMALE => "Female", - _ => string.Empty, + _ => string.Empty, // Default }; - var form = boss.FormId == 0 ? string.Empty : $"-{(int)boss.FormId}"; + var form = GetFormName(ROM, (ushort)boss.DevId, (byte)boss.FormId) switch + { + not "" when boss.FormId is 0 => $" ({GetFormName(ROM, (ushort)boss.DevId, (byte)boss.FormId)})", + not "" => $"-{boss.FormId} ({GetFormName(ROM, (ushort)boss.DevId, (byte)boss.FormId)})", + _ => string.Empty, + }; lines.Add($"{entry.Info.Difficulty}-Star {species[(int)boss.DevId]}{form}"); if (entry.Info.RomVer != RaidRomType.BOTH) @@ -509,11 +526,8 @@ private static void DumpPretty(IFileInternal ROM, DeliveryRaidEnemyTableArray ta if (boss.ScaleType != SizeType.RANDOM) lines.Add($"\tScale: {size}"); - if (entry.Info.Difficulty == 7) - { - float hp = entry.Info.BossDesc.HpCoef / 100f; - lines.Add($"\tHP Multiplier: {hp:0.0}x"); - } + float hp = entry.Info.BossDesc.HpCoef / 100f; + lines.Add($"\tHP Multiplier: {hp:0.0}x"); if (boss.Item != ItemID.ITEMID_NONE) lines.Add($"\tHeld Item: {items[(int)boss.Item]}"); @@ -527,21 +541,22 @@ private static void DumpPretty(IFileInternal ROM, DeliveryRaidEnemyTableArray ta if ((int)boss.Waza3.WazaId != 0) lines.Add($"\t\t\t- {moves[(int)boss.Waza3.WazaId]}"); if ((int)boss.Waza4.WazaId != 0) lines.Add($"\t\t\t- {moves[(int)boss.Waza4.WazaId]}"); - lines.Add($"\t\tExtra Moves:"); - - if ((int)extra.ExtraAction1.Wazano == 0 && (int)extra.ExtraAction2.Wazano == 0 && (int)extra.ExtraAction3.Wazano == 0 && (int)extra.ExtraAction4.Wazano == 0 && (int)extra.ExtraAction5.Wazano == 0 && (int)extra.ExtraAction6.Wazano == 0) + if (extra.PowerChargeTrigerHp != 0 && extra.PowerChargeTrigerTime != 0) { - lines.Add("\t\t\tNone!"); + lines.Add($"\t\tShield Activation:"); + lines.Add($"\t\t\t- {extra.PowerChargeTrigerHp}% HP Remaining"); + lines.Add($"\t\t\t- {extra.PowerChargeTrigerTime}% Time Remaining"); } - else + if ((int)extra.ExtraAction1.Action != 0 || (int)extra.ExtraAction2.Action != 0 || (int)extra.ExtraAction3.Action != 0 || (int)extra.ExtraAction4.Action != 0 || (int)extra.ExtraAction5.Action != 0 || (int)extra.ExtraAction6.Action != 0) { - if ((int)extra.ExtraAction1.Wazano != 0) lines.Add($"\t\t\t- {moves[(int)extra.ExtraAction1.Wazano]}"); - if ((int)extra.ExtraAction2.Wazano != 0) lines.Add($"\t\t\t- {moves[(int)extra.ExtraAction2.Wazano]}"); - if ((int)extra.ExtraAction3.Wazano != 0) lines.Add($"\t\t\t- {moves[(int)extra.ExtraAction3.Wazano]}"); - if ((int)extra.ExtraAction4.Wazano != 0) lines.Add($"\t\t\t- {moves[(int)extra.ExtraAction4.Wazano]}"); - if ((int)extra.ExtraAction5.Wazano != 0) lines.Add($"\t\t\t- {moves[(int)extra.ExtraAction5.Wazano]}"); - if ((int)extra.ExtraAction6.Wazano != 0) lines.Add($"\t\t\t- {moves[(int)extra.ExtraAction6.Wazano]}"); + lines.Add("\t\tExtra Actions:"); + if ((int)extra.ExtraAction1.Action != 0) lines.Add($"\t\t\t- {GetExtraActionInfo(extra.ExtraAction1, moves)}"); + if ((int)extra.ExtraAction2.Action != 0) lines.Add($"\t\t\t- {GetExtraActionInfo(extra.ExtraAction2, moves)}"); + if ((int)extra.ExtraAction3.Action != 0) lines.Add($"\t\t\t- {GetExtraActionInfo(extra.ExtraAction3, moves)}"); + if ((int)extra.ExtraAction4.Action != 0) lines.Add($"\t\t\t- {GetExtraActionInfo(extra.ExtraAction4, moves)}"); + if ((int)extra.ExtraAction5.Action != 0) lines.Add($"\t\t\t- {GetExtraActionInfo(extra.ExtraAction5, moves)}"); + if ((int)extra.ExtraAction6.Action != 0) lines.Add($"\t\t\t- {GetExtraActionInfo(extra.ExtraAction6, moves)}"); } lines.Add("\t\tItem Drops:"); @@ -608,6 +623,50 @@ private static void DumpPretty(IFileInternal ROM, DeliveryRaidEnemyTableArray ta File.WriteAllLines(Path.Combine(dir, $"pretty_{ident}.txt"), lines); } + private static string GetFormName(IFileInternal ROM, ushort species, byte form) + { + const string lang = "English"; + var cfg = new TextConfig(GameVersion.SV); + var text = GetCommonText(ROM, "zkn_form", lang, cfg); + var type = GetCommonText(ROM, "typename", lang, cfg); + var path = ROM.GetPackedFile("message/dat/English/common/zkn_form.tbl"); + var ahtb = new AHTB(path); + + var GenericFormNames = new HashSet() { Tauros, Unown, Kyogre, Groudon, Rotom, Arceus, Kyurem, Greninja, Rockruff }; + string[] TaurosForms = new[] { "", "Combat Breed", "Blaze Breed", "Aqua Breed" }; + char[] UnownForms = "ABCDEFGHIJKLMNOPQRSTUVWXYZ!?".ToCharArray(); + for (int i = 0; i < text.Length; i++) + { + var entry = ahtb.Entries[i]; + var name = entry.Name; + var line = text[i]; + + // some species have form strings that are just the species name (Rotom), or are not descriptive (e.g. Unown "One form"), or no form string at all! + if (GenericFormNames.Contains((Species)species)) + { + return (Species)species switch + { + Tauros when form is not 0 => $"Paldean Form / {TaurosForms[form]}", + Unown => $"Unown {UnownForms[form]}", // A-Z!? + Kyogre or Groudon when form is 0 => "", // Kyogre-0 / Groudon-0 + Rotom when form is 0 => "", // Rotom-0 + Arceus => $"{type[form]}", // Types + Kyurem when form is 0 => "", // Kyurem-0 + Greninja when form is 1 => "", // Battle Bond Greninja + Rockruff when form is 1 => "", // Own Tempo Rockruff + _ => "", + }; + } + + else if (name == $"ZKN_FORM_{species:000}_{form:000}") + { + return line; + } + } + + return ""; + } + private static string GetItemName(ushort item, ReadOnlySpan items, ReadOnlySpan moves) { bool isTM = IsTM(item); @@ -623,7 +682,7 @@ private static string GetItemName(ushort item, ReadOnlySpan items, ReadO >= 328 and <= 419 => true, // TM001 to TM092, skip TM000 Mega Punch 618 or 619 or 620 => true, // TM093 to TM095 690 or 691 or 692 or 693 => true, // TM096 to TM099 - >= 2160 and <= 2231 => true, // TM100 to TM171 + >= 2160 and <= 2289 => true, // TM100 to TM229 _ => false, }; @@ -632,6 +691,19 @@ private static string GetItemName(ushort item, ReadOnlySpan items, ReadO >= 328 and <= 419 => $"{items[item]} {moves[tm[001 + item - 328]]}", // TM001 to TM092, skip TM000 Mega Punch 618 or 619 or 620 => $"{items[item]} {moves[tm[093 + item - 618]]}", // TM093 to TM095 690 or 691 or 692 or 693 => $"{items[item]} {moves[tm[096 + item - 690]]}", // TM096 to TM099 - _ => $"{items[item]} {moves[tm[100 + item - 2160]]}", // TM100 to TM171 + _ => $"{items[item]} {moves[tm[100 + item - 2160]]}", // TM100 to TM229 }; + + private static string GetExtraActionInfo(RaidBossExtraData action, string[] moves) + { + var type = action.Timing == RaidBossExtraTimingType.TIME ? "Time" : "HP"; + return action.Action switch + { + RaidBossExtraActType.BOSS_STATUS_RESET => $"Reset Raid Boss' Stat Changes at {action.Value}% {type} Remaining", + RaidBossExtraActType.PLAYER_STATUS_RESET => $"Reset Player's Stat Changes at {action.Value}% {type} Remaining", + RaidBossExtraActType.WAZA => $"Use {moves[(int)action.Wazano]} at {action.Value}% {type} Remaining", + RaidBossExtraActType.GEM_COUNT => $"Reduce Tera Orb Charge at {action.Value}% {type} Remaining", + _ => "", + }; + } } diff --git a/pkNX.WinForms/Dumping/TextInput.Designer.cs b/pkNX.WinForms/Dumping/TextInput.Designer.cs index eb2c78d1..39880dd1 100644 --- a/pkNX.WinForms/Dumping/TextInput.Designer.cs +++ b/pkNX.WinForms/Dumping/TextInput.Designer.cs @@ -28,43 +28,43 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - this.Input = new System.Windows.Forms.TextBox(); - this.B_Export = new System.Windows.Forms.Button(); - this.SuspendLayout(); + Input = new System.Windows.Forms.TextBox(); + B_Export = new System.Windows.Forms.Button(); + SuspendLayout(); // // Input // - this.Input.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.Input.Location = new System.Drawing.Point(12, 12); - this.Input.Name = "Input"; - this.Input.Size = new System.Drawing.Size(260, 23); - this.Input.TabIndex = 0; - this.Input.TextChanged += new System.EventHandler(this.Input_TextChanged); + Input.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + Input.Location = new System.Drawing.Point(12, 12); + Input.Name = "Input"; + Input.Size = new System.Drawing.Size(320, 23); + Input.TabIndex = 0; + Input.TextChanged += Input_TextChanged; // // B_Export // - this.B_Export.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this.B_Export.Location = new System.Drawing.Point(197, 41); - this.B_Export.Name = "B_Export"; - this.B_Export.Size = new System.Drawing.Size(75, 23); - this.B_Export.TabIndex = 1; - this.B_Export.Text = "Export..."; - this.B_Export.UseVisualStyleBackColor = true; - this.B_Export.Click += new System.EventHandler(this.B_Export_Click); + B_Export.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right; + B_Export.Location = new System.Drawing.Point(257, 41); + B_Export.Name = "B_Export"; + B_Export.Size = new System.Drawing.Size(75, 23); + B_Export.TabIndex = 1; + B_Export.Text = "Export..."; + B_Export.UseVisualStyleBackColor = true; + B_Export.Click += B_Export_Click; // // TextInput // - this.ClientSize = new System.Drawing.Size(284, 72); - this.Controls.Add(this.B_Export); - this.Controls.Add(this.Input); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; - this.Name = "TextInput"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "Input Text"; - this.ResumeLayout(false); - this.PerformLayout(); - + ClientSize = new System.Drawing.Size(344, 72); + Controls.Add(B_Export); + Controls.Add(Input); + MaximizeBox = false; + MinimizeBox = false; + MinimumSize = new System.Drawing.Size(360, 111); + Name = "TextInput"; + StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + Text = "Input Text"; + ResumeLayout(false); + PerformLayout(); } #endregion diff --git a/pkNX.WinForms/Dumping/TextInput.cs b/pkNX.WinForms/Dumping/TextInput.cs index b4da6153..134e7c20 100644 --- a/pkNX.WinForms/Dumping/TextInput.cs +++ b/pkNX.WinForms/Dumping/TextInput.cs @@ -1,3 +1,5 @@ +using System; +using System.Drawing; using System.Windows.Forms; namespace pkNX.WinForms; @@ -5,8 +7,20 @@ namespace pkNX.WinForms; public partial class TextInput : Form { public string Result { get; set; } = string.Empty; - public TextInput() => InitializeComponent(); - private void Input_TextChanged(object sender, System.EventArgs e) => Result = Input.Text; + private readonly Func? Validator; + + public TextInput(Func? validator = null) + { + Validator = validator; + InitializeComponent(); + } + + private void Input_TextChanged(object sender, System.EventArgs e) + { + Result = Input.Text; + if (Validator != null) + B_Export.ForeColor = Validator(Result) ? Color.Green : Color.Red; + } private void B_Export_Click(object sender, System.EventArgs e) { diff --git a/pkNX.WinForms/Dumping/TextInput.resx b/pkNX.WinForms/Dumping/TextInput.resx new file mode 100644 index 00000000..af32865e --- /dev/null +++ b/pkNX.WinForms/Dumping/TextInput.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/pkNX.WinForms/Subforms/MapViewer9.Designer.cs b/pkNX.WinForms/Subforms/MapViewer9.Designer.cs index d8545bfb..e1e52215 100644 --- a/pkNX.WinForms/Subforms/MapViewer9.Designer.cs +++ b/pkNX.WinForms/Subforms/MapViewer9.Designer.cs @@ -28,51 +28,64 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - this.pictureBox1 = new System.Windows.Forms.PictureBox(); - this.CB_Map = new System.Windows.Forms.ComboBox(); - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); - this.SuspendLayout(); + pictureBox1 = new System.Windows.Forms.PictureBox(); + CB_Map = new System.Windows.Forms.ComboBox(); + CB_Field = new System.Windows.Forms.ComboBox(); + ((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit(); + SuspendLayout(); // // pictureBox1 // - this.pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; - this.pictureBox1.Location = new System.Drawing.Point(14, 14); - this.pictureBox1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.pictureBox1.Name = "pictureBox1"; - this.pictureBox1.Size = new System.Drawing.Size(597, 591); - this.pictureBox1.TabIndex = 0; - this.pictureBox1.TabStop = false; - this.pictureBox1.MouseMove += new System.Windows.Forms.MouseEventHandler(this.Map_MouseMove); + pictureBox1.BackgroundImageLayout = System.Windows.Forms.ImageLayout.Zoom; + pictureBox1.Location = new System.Drawing.Point(14, 14); + pictureBox1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + pictureBox1.Name = "pictureBox1"; + pictureBox1.Size = new System.Drawing.Size(597, 591); + pictureBox1.TabIndex = 0; + pictureBox1.TabStop = false; + pictureBox1.MouseMove += Map_MouseMove; // // CB_Map // - this.CB_Map.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this.CB_Map.FormattingEnabled = true; - this.CB_Map.Location = new System.Drawing.Point(618, 14); - this.CB_Map.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.CB_Map.Name = "CB_Map"; - this.CB_Map.Size = new System.Drawing.Size(140, 23); - this.CB_Map.TabIndex = 1; - this.CB_Map.SelectedIndexChanged += new System.EventHandler(this.CB_Map_SelectedIndexChanged); + CB_Map.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + CB_Map.FormattingEnabled = true; + CB_Map.Location = new System.Drawing.Point(619, 43); + CB_Map.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + CB_Map.Name = "CB_Map"; + CB_Map.Size = new System.Drawing.Size(140, 23); + CB_Map.TabIndex = 1; + CB_Map.SelectedIndexChanged += CB_Map_SelectedIndexChanged; + // + // CB_Field + // + CB_Field.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + CB_Field.FormattingEnabled = true; + CB_Field.Location = new System.Drawing.Point(619, 14); + CB_Field.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + CB_Field.Name = "CB_Field"; + CB_Field.Size = new System.Drawing.Size(140, 23); + CB_Field.TabIndex = 2; + CB_Field.SelectedIndexChanged += CB_Field_SelectedIndexChanged; // // MapViewer9 // - this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(827, 614); - this.Controls.Add(this.CB_Map); - this.Controls.Add(this.pictureBox1); - this.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); - this.Name = "MapViewer9"; - this.Text = "MapViewer9"; - ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); - this.ResumeLayout(false); - + AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + ClientSize = new System.Drawing.Size(827, 614); + Controls.Add(CB_Field); + Controls.Add(CB_Map); + Controls.Add(pictureBox1); + Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + Name = "MapViewer9"; + Text = "MapViewer9"; + ((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit(); + ResumeLayout(false); } #endregion private System.Windows.Forms.PictureBox pictureBox1; private System.Windows.Forms.ComboBox CB_Map; + private System.Windows.Forms.ComboBox CB_Field; } } diff --git a/pkNX.WinForms/Subforms/MapViewer9.cs b/pkNX.WinForms/Subforms/MapViewer9.cs index dd58fa42..73050cd3 100644 --- a/pkNX.WinForms/Subforms/MapViewer9.cs +++ b/pkNX.WinForms/Subforms/MapViewer9.cs @@ -1,21 +1,18 @@ using System; -using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Windows.Forms; using pkNX.Game; -using pkNX.Structures; -using pkNX.Structures.FlatBuffers; -using pkNX.Structures.FlatBuffers.SV; -using pkNX.Structures.FlatBuffers.SV.Trinity; namespace pkNX.WinForms.Subforms; public partial class MapViewer9 : Form { private readonly GameManagerSV ROM; - private readonly bool Loading; private readonly PaldeaMap Map; + private bool Loading; + + private int FieldIndex => CB_Field.SelectedIndex != -1 ? CB_Field.SelectedIndex : 0; public MapViewer9(GameManagerSV rom) { @@ -23,21 +20,46 @@ public MapViewer9(GameManagerSV rom) InitializeComponent(); Loading = true; - CB_Map.Items.AddRange(Map.AreaNames.Select(z => z).ToArray()); + CB_Field.Items.AddRange(new[] { "Paldea", "Kitakami" }); Loading = false; - CB_Map.SelectedIndex = 0; + CB_Field.SelectedIndex = 0; } - private class ComboItem + private double ScaleX => FieldIndex switch { - public ComboItem(string text, int value) - { - Text = text; - Value = value; - } + 0 => 5000, + 1 => 2000, + _ => throw new ArgumentOutOfRangeException(nameof(FieldIndex)), + }; - public string Text { get; } - public int Value { get; } + private double ScaleZ => FieldIndex switch + { + 0 => 5000, + 1 => 2000, + _ => throw new ArgumentOutOfRangeException(nameof(FieldIndex)), + }; + + private double OffsetZ => FieldIndex switch + { + 0 => 5500, + 1 => 2000, + _ => throw new ArgumentOutOfRangeException(nameof(FieldIndex)), + }; + + private double ConvertWidth(double s) => (4096.0 / ScaleX) * s; + private double ConvertHeight(double s) => (4096.0 / ScaleZ) * s; + private double ConvertX(double x) => (4096.0 / ScaleX) * x; + private double ConvertZ(double z) => (4096.0 / ScaleZ) * (z + OffsetZ); + + private void CB_Field_SelectedIndexChanged(object sender, EventArgs e) + { + if (Loading) + return; + Loading = true; + CB_Map.Items.Clear(); + CB_Map.Items.AddRange(Map.AreaNames[FieldIndex].Select(z => z).ToArray()); + Loading = false; + CB_Map.SelectedIndex = 0; } private void CB_Map_SelectedIndexChanged(object sender, EventArgs e) @@ -45,19 +67,21 @@ private void CB_Map_SelectedIndexChanged(object sender, EventArgs e) UpdateMap(CB_Map.SelectedIndex); } - private static string GetMapImagePath() + private static string GetMapImagePath(int field) => field switch { - return @"map_sv\paldea.png"; - } + 0 => @"map_sv\paldea.png", + 1 => @"map_sv\kitakami.png", + _ => throw new ArgumentException($"Unknown field {field}"), + }; private void UpdateMap(int map) { if (Loading) return; - var areaName = Map.AreaNames[map]; + var areaName = Map.AreaNames[FieldIndex][map]; - var mapImagePath = System.IO.Path.GetFullPath(GetMapImagePath()); + var mapImagePath = System.IO.Path.GetFullPath(GetMapImagePath(FieldIndex)); if (System.IO.File.Exists(mapImagePath)) { pictureBox1.BackgroundImage = Image.FromFile(mapImagePath); @@ -69,151 +93,40 @@ private void UpdateMap(int map) } using var gr = Graphics.FromImage(pictureBox1.BackgroundImage); - var r = new SolidBrush(Color.FromArgb(100, 255, 0, 0)); - var g = new SolidBrush(Color.FromArgb(20, 20, 255, 10)); - var b = new SolidBrush(Color.FromArgb(100, 10, 0, 255)); - var c = new SolidBrush(Color.FromArgb(100, 0, 255, 255)); - - var rs = new Pen(Color.FromArgb(255, 255, 0, 0)) { Width = 3 }; - var gs = new Pen(Color.FromArgb(255, 20, 255, 10)) { Width = 3 }; - var bs = new Pen(Color.FromArgb(255, 10, 0, 255)) { Width = 3 }; - var cs = new Pen(Color.FromArgb(255, 10, 255, 255)) { Width = 3 }; - - double ConvertX(double x) => (4096.0 / 5000.0) * x; - double ConvertZ(double z) => (4096.0 / 5000.0) * (z + 5500.0); - - if (Map.AreaCollisionTrees.TryGetValue(areaName, out var colTree)) + // var r = new SolidBrush(Color.FromArgb(100, 255, 0, 0)); + // var g = new SolidBrush(Color.FromArgb(20, 20, 255, 10)); + // var b = new SolidBrush(Color.FromArgb(100, 10, 0, 255)); + // var c = new SolidBrush(Color.FromArgb(100, 0, 255, 255)); + // var rs = new Pen(Color.FromArgb(255, 255, 0, 0)) { Width = 3 }; + // var gs = new Pen(Color.FromArgb(255, 20, 255, 10)) { Width = 3 }; + // var bs = new Pen(Color.FromArgb(255, 10, 0, 255)) { Width = 3 }; + // var cs = new Pen(Color.FromArgb(255, 10, 255, 255)) { Width = 3 }; + if (Map.AreaCollisionTrees[FieldIndex].TryGetValue(areaName, out var colTree)) { - var brush = new SolidBrush(Color.FromArgb(25, 0, 0, 255)); + using var brush = new SolidBrush(Color.FromArgb(25, 0, 0, 255)); foreach (var rect in colTree.BoundingBoxRectangles) { - gr.FillRectangle(brush, new RectangleF((float)ConvertX(rect.Left), (float)ConvertZ(rect.Top), (float)ConvertX(rect.Width), (float)ConvertX(rect.Height))); + gr.FillRectangle(brush, new RectangleF((float)ConvertX(rect.X), (float)ConvertZ(rect.Z), (float)ConvertWidth(rect.Width), (float)ConvertHeight(rect.Depth))); } } - else if (Map.AreaCollisionBoxes.TryGetValue(areaName, out var colBox)) + else if (Map.AreaCollisionBoxes[FieldIndex].TryGetValue(areaName, out var colBox)) { var center_x = colBox.Position.X; var center_z = colBox.Position.Z; var size_x = colBox.Size.X; var size_z = colBox.Size.Z; - var brush = new SolidBrush(Color.FromArgb(25, 0, 0, 255)); - gr.FillRectangle(brush, new RectangleF((float)ConvertX(center_x - (size_x / 2.0)), (float)ConvertZ(center_z - (size_z / 2.0)), (float)ConvertX(size_x), (float)ConvertX(size_z))); + using var brush = new SolidBrush(Color.FromArgb(25, 0, 0, 255)); + gr.FillRectangle(brush, new RectangleF((float)ConvertX(center_x - (size_x / 2.0)), (float)ConvertZ(center_z - (size_z / 2.0)), (float)ConvertWidth(size_x), (float)ConvertHeight(size_z))); } + pictureBox1.BackgroundImage.Save($"{GetMapImagePath(FieldIndex).Replace(".png", "")}_{areaName}.png"); } private void Map_MouseMove(object sender, MouseEventArgs e) { - var x = ((e.X * 5000.0f) / pictureBox1.Width); - var z = ((e.Y * 5000.0f) / pictureBox1.Height) - 5500f; + var x = ((e.X * ScaleX) / pictureBox1.Width); + var z = ((e.Y * ScaleZ) / pictureBox1.Height) - OffsetZ; Text = $"X: {x}, Z: {z}"; } } - -public class PaldeaMap -{ - public readonly List AreaNames = new(); - private readonly Dictionary Areas = new(); - public readonly Dictionary AreaCollisionTrees = new(); - public readonly Dictionary AreaCollisionBoxes = new(); - - private readonly IList MainAreas; - private readonly IList SubAreas; - private readonly IList InsideAreas; - private readonly IList DungeonAreas; - private readonly IList FieldLocations; - - public PaldeaMap(GameManagerSV ROM) - { - MainAreas = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_main_area/field_main_area_array.bin")).Table; - SubAreas = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_sub_area/field_sub_area_array.bin")).Table; - InsideAreas = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_inside_area/field_inside_area_array.bin")).Table; - DungeonAreas = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_dungeon_area/field_dungeon_area_array.bin")).Table; - FieldLocations = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_location/field_location_array.bin")).Table; - - LoadScene(ROM); - } - - private void LoadScene(GameManagerSV ROM) - { - var area_management = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile(0x0573CA323061A2D3)); - - foreach (var obj in area_management.Objects) - { - if (obj is not { Type: "trinity_SceneObject", SubObjects.Count: > 0 }) - continue; - if (obj.SubObjects[0].Type != "trinity_CollisionComponent") - continue; - - var sceneObject = FlatBufferConverter.DeserializeFrom(obj.Data); - var trcData = obj.SubObjects[0].Data; - var trc = FlatBufferConverter.DeserializeFrom(trcData); - var collisionComponent = trc.Component.CollisionComponent; - - AreaNames.Add(sceneObject.ObjectName); - var areaInfo = FindAreaInfo(sceneObject.ObjectName); - - var shape = collisionComponent.Shape; - if (shape.TryGet(out Box? box)) - { - // Box collision, obj.ObjectPosition.Field_02 is pos, box.Field_01 is size of box - AreaCollisionBoxes[sceneObject.ObjectName] = new BoxCollision9 - { - Position = sceneObject.ObjectPosition.Field02, - Size = box!.Field01, - }; - } - - if (shape.TryGet(out Havok? havok)) - { - var havokData = ROM.GetPackedFile(havok!.TrcolFilePath); - AreaCollisionTrees[sceneObject.ObjectName] = HavokCollision.ParseAABBTree(havokData); - } - - Areas[sceneObject.ObjectName] = new AreaDef9 - { - SceneObject = sceneObject, - CollisionComponent = collisionComponent, - Info = areaInfo, - }; - } - } - - public AreaInfo FindAreaInfo(string name) - { - foreach (var area in MainAreas) - { - if (area.Name == name) - return area.Info; - } - foreach (var area in SubAreas) - { - if (area.Name == name) - return area.Info; - } - foreach (var area in InsideAreas) - { - if (area.Name == name) - return area.Info; - } - foreach (var area in DungeonAreas) - { - if (area.Name == name) - return area.Info; - } - foreach (var area in FieldLocations) - { - if (area.Name == name) - return area.Info; - } - throw new ArgumentException($"Unknown area {name}"); - } -} - -public class AreaDef9 -{ - public required TrinitySceneObject SceneObject; - public required CollisionComponent CollisionComponent; - public required AreaInfo Info; -} diff --git a/pkNX.WinForms/Subforms/MapViewer9.resx b/pkNX.WinForms/Subforms/MapViewer9.resx new file mode 100644 index 00000000..f298a7be --- /dev/null +++ b/pkNX.WinForms/Subforms/MapViewer9.resx @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + \ No newline at end of file diff --git a/pkNX.WinForms/Subforms/PaldeaMap.cs b/pkNX.WinForms/Subforms/PaldeaMap.cs new file mode 100644 index 00000000..a8dd413c --- /dev/null +++ b/pkNX.WinForms/Subforms/PaldeaMap.cs @@ -0,0 +1,132 @@ +using System; +using System.Collections.Generic; +using pkNX.Game; +using pkNX.Structures; +using pkNX.Structures.FlatBuffers; +using pkNX.Structures.FlatBuffers.SV; +using pkNX.Structures.FlatBuffers.SV.Trinity; + +namespace pkNX.WinForms.Subforms +{ + public class PaldeaMap + { + public readonly List[] AreaNames = { new(), new() }; + private readonly Dictionary[] Areas = { new(), new() }; + public readonly Dictionary[] AreaCollisionTrees = { new(), new() }; + public readonly Dictionary[] AreaCollisionBoxes = { new(), new() }; + + private readonly IList[] MainAreas = new IList[2]; + private readonly IList[] SubAreas = new IList[2]; + private readonly IList[] InsideAreas = new IList[2]; + private readonly IList[] DungeonAreas = new IList[2]; + private readonly IList[] FieldLocations = new IList[2]; + + public PaldeaMap(GameManagerSV ROM) + { + MainAreas[0] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_main_area/field_main_area_array.bin")).Table; + SubAreas[0] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_sub_area/field_sub_area_array.bin")).Table; + InsideAreas[0] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_inside_area/field_inside_area_array.bin")).Table; + DungeonAreas[0] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_dungeon_area/field_dungeon_area_array.bin")).Table; + FieldLocations[0] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area/field_location/field_location_array.bin")).Table; + + MainAreas[1] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area_su1/field_main_area_su1/field_main_area_su1_array.bin")).Table; + SubAreas[1] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area_su1/field_sub_area_su1/field_sub_area_su1_array.bin")).Table; + InsideAreas[1] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area_su1/field_inside_area_su1/field_inside_area_su1_array.bin")).Table; + DungeonAreas[1] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area_su1/field_dungeon_area_su1/field_dungeon_area_su1_array.bin")).Table; + FieldLocations[1] = FlatBufferConverter.DeserializeFrom(ROM.GetPackedFile("world/data/field/area_su1/field_location_su1/field_location_su1_array.bin")).Table; + + LoadScenes(ROM); + } + + private void LoadScenes(GameManagerSV ROM) + { + // Load default scenes + LoadScene(ROM, ROM.GetPackedFile("world/scene/parts/field/resident_event/resident_area_collision_/resident_area_collision_0.trscn"), 0); + + // Load default scenes + LoadScene(ROM, ROM.GetPackedFile(0x441FE0A17C85BEAA), 1); + } + + private void LoadScene(GameManagerSV ROM, byte[] collisionFile, int index) + { + var area_collision = FlatBufferConverter.DeserializeFrom(collisionFile); + + foreach (var obj in area_collision.Objects) + { + if (obj is not { Type: "trinity_SceneObject", SubObjects.Count: > 0 }) + continue; + if (obj.SubObjects[0].Type != "trinity_CollisionComponent") + continue; + + var sceneObject = FlatBufferConverter.DeserializeFrom(obj.Data); + var trcData = obj.SubObjects[0].Data; + var trc = FlatBufferConverter.DeserializeFrom(trcData); + var collisionComponent = trc.Component.CollisionComponent; + + AreaNames[index].Add(sceneObject.ObjectName); + var areaInfo = FindAreaInfo(index, sceneObject.ObjectName); + + var shape = collisionComponent.Shape; + if (shape.TryGet(out Box? box)) + { + // Box collision, obj.ObjectPosition.Field_02 is pos, box.Field_01 is size of box + AreaCollisionBoxes[index][sceneObject.ObjectName] = new BoxCollision9 + { + Position = sceneObject.ObjectPosition.Field02, + Size = box!.Field01, + }; + } + + if (shape.TryGet(out Havok? havok)) + { + var havokData = ROM.GetPackedFile(havok!.TrcolFilePath); + AreaCollisionTrees[index][sceneObject.ObjectName] = HavokCollision.ParseAABBTree(havokData); + } + + Areas[index][sceneObject.ObjectName] = new AreaDef9 + { + SceneObject = sceneObject, + CollisionComponent = collisionComponent, + Info = areaInfo, + }; + } + } + + public AreaInfo FindAreaInfo(int index, string name) + { + foreach (var area in MainAreas[index]) + { + if (area.Name == name) + return area.Info; + } + foreach (var area in SubAreas[index]) + { + if (area.Name == name) + return area.Info; + } + foreach (var area in InsideAreas[index]) + { + if (area.Name == name) + return area.Info; + } + foreach (var area in DungeonAreas[index]) + { + if (area.Name == name) + return area.Info; + } + foreach (var area in FieldLocations[index]) + { + if (area.Name == name) + return area.Info; + } + throw new ArgumentException($"Unknown area {name}"); + } + } + + public class AreaDef9 + { + public required TrinitySceneObject SceneObject; + public required CollisionComponent CollisionComponent; + public required AreaInfo Info; + } +} diff --git a/pkNX.WinForms/UI/MainWindow.xaml.cs b/pkNX.WinForms/UI/MainWindow.xaml.cs index 2d3eef24..ddab533b 100644 --- a/pkNX.WinForms/UI/MainWindow.xaml.cs +++ b/pkNX.WinForms/UI/MainWindow.xaml.cs @@ -4,13 +4,10 @@ using System.Diagnostics; using System.IO; using System.Linq; -using System.Runtime.InteropServices; -using System.Security; using System.Windows; using System.Windows.Forms; using System.Windows.Input; using System.Windows.Interop; -using System.Windows.Threading; using FontAwesome.Sharp; using PKHeX.Drawing.PokeSprite; diff --git a/pkNX.WinForms/pkNX.WinForms.csproj b/pkNX.WinForms/pkNX.WinForms.csproj index 4f2065fc..bee526a9 100644 --- a/pkNX.WinForms/pkNX.WinForms.csproj +++ b/pkNX.WinForms/pkNX.WinForms.csproj @@ -22,14 +22,31 @@ - + + + + + + + + + + + + + + + + + + - + diff --git a/pkNX.sln b/pkNX.sln index 8bb3a3bf..446bfc31 100644 --- a/pkNX.sln +++ b/pkNX.sln @@ -35,12 +35,48 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers.Arceus", "pkNX.Structures.FlatBuffers.Arceus\pkNX.Structures.FlatBuffers.Arceus.csproj", "{0ECF2003-0E48-4C6D-B11E-EA6199FFA8D4}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers.SV", "pkNX.Structures.FlatBuffers.SV\pkNX.Structures.FlatBuffers.SV.csproj", "{14B086B0-7112-48F0-98D2-10A5EEEAA755}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers.LGPE", "pkNX.Structures.FlatBuffers.LGPE\pkNX.Structures.FlatBuffers.LGPE.csproj", "{F9EAEF82-BBB2-4520-B59E-3EB74A4C7487}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers", "pkNX.Structures.FlatBuffers\pkNX.Structures.FlatBuffers.csproj", "{7E843D65-0A79-4E6F-A770-A8612096AFEC}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers.SV.Shared", "pkNX.Structures.FlatBuffers.SV\pkNX.Structures.FlatBuffers.SV.Shared\pkNX.Structures.FlatBuffers.SV.Shared.csproj", "{96017CC2-78B1-4A1A-B543-2219F692A0FC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "pkNX.Structures.FlatBuffers.SV", "pkNX.Structures.FlatBuffers.SV", "{37650547-FB5B-4CB4-A815-8785DB64BA90}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers.SV.Zukan", "pkNX.Structures.FlatBuffers.SV\pkNX.Structures.FlatBuffers.SV.Zukan\pkNX.Structures.FlatBuffers.SV.Zukan.csproj", "{7D7FCAB8-B748-4512-8DF9-28C0B27AE0F1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers.SV.Balloon", "pkNX.Structures.FlatBuffers.SV\pkNX.Structures.FlatBuffers.SV.Balloon\pkNX.Structures.FlatBuffers.SV.Balloon.csproj", "{AB3B2BB3-BE88-47EB-9299-14E2243BC564}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers.SV.Battle", "pkNX.Structures.FlatBuffers.SV\pkNX.Structures.FlatBuffers.SV.Battle\pkNX.Structures.FlatBuffers.SV.Battle.csproj", "{DF90D20A-1F2E-49D1-AD88-78FCC3D9B000}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers.SV.Cooking", "pkNX.Structures.FlatBuffers.SV\pkNX.Structures.FlatBuffers.SV.Cooking\pkNX.Structures.FlatBuffers.SV.Cooking.csproj", "{BB7D10EB-6685-42D5-AA0D-C6C5DB8D1F54}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers.SV.Event", "pkNX.Structures.FlatBuffers.SV\pkNX.Structures.FlatBuffers.SV.Event\pkNX.Structures.FlatBuffers.SV.Event.csproj", "{404CD793-A214-47AD-9C65-067FD6F55DDE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers.SV.Gym", "pkNX.Structures.FlatBuffers.SV\pkNX.Structures.FlatBuffers.SV.Gym\pkNX.Structures.FlatBuffers.SV.Gym.csproj", "{73135648-B72F-40CA-AB2E-74BEEF7B4084}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers.SV.Item", "pkNX.Structures.FlatBuffers.SV\pkNX.Structures.FlatBuffers.SV.Item\pkNX.Structures.FlatBuffers.SV.Item.csproj", "{C518975C-2E23-456F-8548-748605FB575D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers.SV.Misc", "pkNX.Structures.FlatBuffers.SV\pkNX.Structures.FlatBuffers.SV.Misc\pkNX.Structures.FlatBuffers.SV.Misc.csproj", "{25DE5B0B-5A35-4003-A4AD-36E783DCBFFC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers.SV.Personal", "pkNX.Structures.FlatBuffers.SV\pkNX.Structures.FlatBuffers.SV.Personal\pkNX.Structures.FlatBuffers.SV.Personal.csproj", "{DA78EBE9-394D-45F8-A9A2-8EB6036C109E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers.SV.Picnic", "pkNX.Structures.FlatBuffers.SV\pkNX.Structures.FlatBuffers.SV.Picnic\pkNX.Structures.FlatBuffers.SV.Picnic.csproj", "{073247D9-342E-4C76-9D35-A2BA2701AABA}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers.SV.Raid", "pkNX.Structures.FlatBuffers.SV\pkNX.Structures.FlatBuffers.SV.Raid\pkNX.Structures.FlatBuffers.SV.Raid.csproj", "{6D1E1751-E941-46F2-B703-E8EDF29565E6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers.SV.Trainers", "pkNX.Structures.FlatBuffers.SV\pkNX.Structures.FlatBuffers.SV.Trainers\pkNX.Structures.FlatBuffers.SV.Trainers.csproj", "{E21AB1FD-B4B8-4973-AB91-38C348C28E02}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers.SV.Trinity", "pkNX.Structures.FlatBuffers.SV\pkNX.Structures.FlatBuffers.SV.Trinity\pkNX.Structures.FlatBuffers.SV.Trinity.csproj", "{989E1CDE-4A35-44D0-A142-B9DF7C3401CF}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers.SV.UI", "pkNX.Structures.FlatBuffers.SV\pkNX.Structures.FlatBuffers.SV.UI\pkNX.Structures.FlatBuffers.SV.UI.csproj", "{8338BBC7-8F59-4C51-BEF0-665F53403A8C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers.SV.Waza", "pkNX.Structures.FlatBuffers.SV\pkNX.Structures.FlatBuffers.SV.Waza\pkNX.Structures.FlatBuffers.SV.Waza.csproj", "{BB73E54A-20F9-44BA-B6E2-7C7E2C22CA77}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers.SV.World", "pkNX.Structures.FlatBuffers.SV\pkNX.Structures.FlatBuffers.SV.World\pkNX.Structures.FlatBuffers.SV.World.csproj", "{1B561015-5A83-422D-A75F-A1A2FC756C8D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "pkNX.Structures.FlatBuffers.SV.Audio", "pkNX.Structures.FlatBuffers.SV\pkNX.Structures.FlatBuffers.SV.Audio\pkNX.Structures.FlatBuffers.SV.Audio.csproj", "{97BC69AF-3CE9-48BC-A2AC-197D43184821}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -83,10 +119,6 @@ Global {0ECF2003-0E48-4C6D-B11E-EA6199FFA8D4}.Debug|Any CPU.Build.0 = Debug|Any CPU {0ECF2003-0E48-4C6D-B11E-EA6199FFA8D4}.Release|Any CPU.ActiveCfg = Release|Any CPU {0ECF2003-0E48-4C6D-B11E-EA6199FFA8D4}.Release|Any CPU.Build.0 = Release|Any CPU - {14B086B0-7112-48F0-98D2-10A5EEEAA755}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {14B086B0-7112-48F0-98D2-10A5EEEAA755}.Debug|Any CPU.Build.0 = Debug|Any CPU - {14B086B0-7112-48F0-98D2-10A5EEEAA755}.Release|Any CPU.ActiveCfg = Release|Any CPU - {14B086B0-7112-48F0-98D2-10A5EEEAA755}.Release|Any CPU.Build.0 = Release|Any CPU {F9EAEF82-BBB2-4520-B59E-3EB74A4C7487}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F9EAEF82-BBB2-4520-B59E-3EB74A4C7487}.Debug|Any CPU.Build.0 = Debug|Any CPU {F9EAEF82-BBB2-4520-B59E-3EB74A4C7487}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -95,10 +127,102 @@ Global {7E843D65-0A79-4E6F-A770-A8612096AFEC}.Debug|Any CPU.Build.0 = Debug|Any CPU {7E843D65-0A79-4E6F-A770-A8612096AFEC}.Release|Any CPU.ActiveCfg = Release|Any CPU {7E843D65-0A79-4E6F-A770-A8612096AFEC}.Release|Any CPU.Build.0 = Release|Any CPU + {96017CC2-78B1-4A1A-B543-2219F692A0FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {96017CC2-78B1-4A1A-B543-2219F692A0FC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {96017CC2-78B1-4A1A-B543-2219F692A0FC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {96017CC2-78B1-4A1A-B543-2219F692A0FC}.Release|Any CPU.Build.0 = Release|Any CPU + {7D7FCAB8-B748-4512-8DF9-28C0B27AE0F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D7FCAB8-B748-4512-8DF9-28C0B27AE0F1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D7FCAB8-B748-4512-8DF9-28C0B27AE0F1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D7FCAB8-B748-4512-8DF9-28C0B27AE0F1}.Release|Any CPU.Build.0 = Release|Any CPU + {AB3B2BB3-BE88-47EB-9299-14E2243BC564}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AB3B2BB3-BE88-47EB-9299-14E2243BC564}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AB3B2BB3-BE88-47EB-9299-14E2243BC564}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AB3B2BB3-BE88-47EB-9299-14E2243BC564}.Release|Any CPU.Build.0 = Release|Any CPU + {DF90D20A-1F2E-49D1-AD88-78FCC3D9B000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DF90D20A-1F2E-49D1-AD88-78FCC3D9B000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DF90D20A-1F2E-49D1-AD88-78FCC3D9B000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DF90D20A-1F2E-49D1-AD88-78FCC3D9B000}.Release|Any CPU.Build.0 = Release|Any CPU + {BB7D10EB-6685-42D5-AA0D-C6C5DB8D1F54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BB7D10EB-6685-42D5-AA0D-C6C5DB8D1F54}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BB7D10EB-6685-42D5-AA0D-C6C5DB8D1F54}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BB7D10EB-6685-42D5-AA0D-C6C5DB8D1F54}.Release|Any CPU.Build.0 = Release|Any CPU + {404CD793-A214-47AD-9C65-067FD6F55DDE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {404CD793-A214-47AD-9C65-067FD6F55DDE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {404CD793-A214-47AD-9C65-067FD6F55DDE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {404CD793-A214-47AD-9C65-067FD6F55DDE}.Release|Any CPU.Build.0 = Release|Any CPU + {73135648-B72F-40CA-AB2E-74BEEF7B4084}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {73135648-B72F-40CA-AB2E-74BEEF7B4084}.Debug|Any CPU.Build.0 = Debug|Any CPU + {73135648-B72F-40CA-AB2E-74BEEF7B4084}.Release|Any CPU.ActiveCfg = Release|Any CPU + {73135648-B72F-40CA-AB2E-74BEEF7B4084}.Release|Any CPU.Build.0 = Release|Any CPU + {C518975C-2E23-456F-8548-748605FB575D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C518975C-2E23-456F-8548-748605FB575D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C518975C-2E23-456F-8548-748605FB575D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C518975C-2E23-456F-8548-748605FB575D}.Release|Any CPU.Build.0 = Release|Any CPU + {25DE5B0B-5A35-4003-A4AD-36E783DCBFFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {25DE5B0B-5A35-4003-A4AD-36E783DCBFFC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {25DE5B0B-5A35-4003-A4AD-36E783DCBFFC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {25DE5B0B-5A35-4003-A4AD-36E783DCBFFC}.Release|Any CPU.Build.0 = Release|Any CPU + {DA78EBE9-394D-45F8-A9A2-8EB6036C109E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DA78EBE9-394D-45F8-A9A2-8EB6036C109E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DA78EBE9-394D-45F8-A9A2-8EB6036C109E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DA78EBE9-394D-45F8-A9A2-8EB6036C109E}.Release|Any CPU.Build.0 = Release|Any CPU + {073247D9-342E-4C76-9D35-A2BA2701AABA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {073247D9-342E-4C76-9D35-A2BA2701AABA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {073247D9-342E-4C76-9D35-A2BA2701AABA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {073247D9-342E-4C76-9D35-A2BA2701AABA}.Release|Any CPU.Build.0 = Release|Any CPU + {6D1E1751-E941-46F2-B703-E8EDF29565E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6D1E1751-E941-46F2-B703-E8EDF29565E6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6D1E1751-E941-46F2-B703-E8EDF29565E6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6D1E1751-E941-46F2-B703-E8EDF29565E6}.Release|Any CPU.Build.0 = Release|Any CPU + {E21AB1FD-B4B8-4973-AB91-38C348C28E02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E21AB1FD-B4B8-4973-AB91-38C348C28E02}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E21AB1FD-B4B8-4973-AB91-38C348C28E02}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E21AB1FD-B4B8-4973-AB91-38C348C28E02}.Release|Any CPU.Build.0 = Release|Any CPU + {989E1CDE-4A35-44D0-A142-B9DF7C3401CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {989E1CDE-4A35-44D0-A142-B9DF7C3401CF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {989E1CDE-4A35-44D0-A142-B9DF7C3401CF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {989E1CDE-4A35-44D0-A142-B9DF7C3401CF}.Release|Any CPU.Build.0 = Release|Any CPU + {8338BBC7-8F59-4C51-BEF0-665F53403A8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8338BBC7-8F59-4C51-BEF0-665F53403A8C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8338BBC7-8F59-4C51-BEF0-665F53403A8C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8338BBC7-8F59-4C51-BEF0-665F53403A8C}.Release|Any CPU.Build.0 = Release|Any CPU + {BB73E54A-20F9-44BA-B6E2-7C7E2C22CA77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BB73E54A-20F9-44BA-B6E2-7C7E2C22CA77}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BB73E54A-20F9-44BA-B6E2-7C7E2C22CA77}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BB73E54A-20F9-44BA-B6E2-7C7E2C22CA77}.Release|Any CPU.Build.0 = Release|Any CPU + {1B561015-5A83-422D-A75F-A1A2FC756C8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1B561015-5A83-422D-A75F-A1A2FC756C8D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1B561015-5A83-422D-A75F-A1A2FC756C8D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1B561015-5A83-422D-A75F-A1A2FC756C8D}.Release|Any CPU.Build.0 = Release|Any CPU + {97BC69AF-3CE9-48BC-A2AC-197D43184821}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {97BC69AF-3CE9-48BC-A2AC-197D43184821}.Debug|Any CPU.Build.0 = Debug|Any CPU + {97BC69AF-3CE9-48BC-A2AC-197D43184821}.Release|Any CPU.ActiveCfg = Release|Any CPU + {97BC69AF-3CE9-48BC-A2AC-197D43184821}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {96017CC2-78B1-4A1A-B543-2219F692A0FC} = {37650547-FB5B-4CB4-A815-8785DB64BA90} + {7D7FCAB8-B748-4512-8DF9-28C0B27AE0F1} = {37650547-FB5B-4CB4-A815-8785DB64BA90} + {AB3B2BB3-BE88-47EB-9299-14E2243BC564} = {37650547-FB5B-4CB4-A815-8785DB64BA90} + {DF90D20A-1F2E-49D1-AD88-78FCC3D9B000} = {37650547-FB5B-4CB4-A815-8785DB64BA90} + {BB7D10EB-6685-42D5-AA0D-C6C5DB8D1F54} = {37650547-FB5B-4CB4-A815-8785DB64BA90} + {404CD793-A214-47AD-9C65-067FD6F55DDE} = {37650547-FB5B-4CB4-A815-8785DB64BA90} + {73135648-B72F-40CA-AB2E-74BEEF7B4084} = {37650547-FB5B-4CB4-A815-8785DB64BA90} + {C518975C-2E23-456F-8548-748605FB575D} = {37650547-FB5B-4CB4-A815-8785DB64BA90} + {25DE5B0B-5A35-4003-A4AD-36E783DCBFFC} = {37650547-FB5B-4CB4-A815-8785DB64BA90} + {DA78EBE9-394D-45F8-A9A2-8EB6036C109E} = {37650547-FB5B-4CB4-A815-8785DB64BA90} + {073247D9-342E-4C76-9D35-A2BA2701AABA} = {37650547-FB5B-4CB4-A815-8785DB64BA90} + {6D1E1751-E941-46F2-B703-E8EDF29565E6} = {37650547-FB5B-4CB4-A815-8785DB64BA90} + {E21AB1FD-B4B8-4973-AB91-38C348C28E02} = {37650547-FB5B-4CB4-A815-8785DB64BA90} + {989E1CDE-4A35-44D0-A142-B9DF7C3401CF} = {37650547-FB5B-4CB4-A815-8785DB64BA90} + {8338BBC7-8F59-4C51-BEF0-665F53403A8C} = {37650547-FB5B-4CB4-A815-8785DB64BA90} + {BB73E54A-20F9-44BA-B6E2-7C7E2C22CA77} = {37650547-FB5B-4CB4-A815-8785DB64BA90} + {1B561015-5A83-422D-A75F-A1A2FC756C8D} = {37650547-FB5B-4CB4-A815-8785DB64BA90} + {97BC69AF-3CE9-48BC-A2AC-197D43184821} = {37650547-FB5B-4CB4-A815-8785DB64BA90} + EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3EB083E9-2376-4061-91EB-BA8DC7F2712F} EndGlobalSection