Showing preview only (2,695K chars total). Download the full file or copy to clipboard to get everything.
Repository: xivapi/SaintCoinach
Branch: master
Commit: 0b22b78f9795
Files: 1641
Total size: 2.3 MB
Directory structure:
gitextract_w62xzu50/
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── RELEASE.md
│ └── workflows/
│ ├── build.yml
│ └── json-validation.yaml
├── .gitignore
├── DotSquish/
│ ├── Alpha.cs
│ ├── ClusterFit.cs
│ ├── ColourBlock.cs
│ ├── ColourFit.cs
│ ├── ColourSet.cs
│ ├── DotSquish.csproj
│ ├── Flags.cs
│ ├── Maths.cs
│ └── Squish.cs
├── Godbert/
│ ├── App.config
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── Commands/
│ │ └── DelegateCommand.cs
│ ├── Controls/
│ │ ├── AttachedImage.cs
│ │ ├── ColumnFactory.cs
│ │ ├── INavigatable.cs
│ │ ├── IRawDataColumn.cs
│ │ ├── RawDataGrid.cs
│ │ ├── RawDataGridColorColumn.cs
│ │ ├── RawDataGridImageColumn.cs
│ │ ├── RawDataGridKeyColumn.cs
│ │ ├── RawDataGridTextColumn.cs
│ │ └── RawDataItemsSource.cs
│ ├── EngineHelper.cs
│ ├── EngineInstance.cs
│ ├── Godbert.csproj
│ ├── MainWindow.xaml
│ ├── MainWindow.xaml.cs
│ ├── Models/
│ │ ├── ModelCharaHierarchy.cs
│ │ ├── ModelCharaMain.cs
│ │ ├── ModelCharaSub.cs
│ │ └── ModelCharaVariant.cs
│ ├── NaturalComparer.cs
│ ├── ObservableBase.cs
│ ├── Properties/
│ │ ├── AssemblyInfo.cs
│ │ ├── Resources.Designer.cs
│ │ ├── Resources.resx
│ │ ├── Settings.Designer.cs
│ │ └── Settings.settings
│ ├── Settings.cs
│ ├── ViewModels/
│ │ ├── BookmarkViewModel.cs
│ │ ├── DataViewModel.cs
│ │ ├── DemihumanViewModel.cs
│ │ ├── EquipmentViewModel.cs
│ │ ├── FurnitureViewModel.cs
│ │ ├── MainViewModel.cs
│ │ ├── MapsViewModel.cs
│ │ ├── MonstersViewModel.cs
│ │ └── TerritoryViewModel.cs
│ ├── Views/
│ │ ├── DataView.xaml
│ │ ├── DataView.xaml.cs
│ │ ├── DemihumansView.xaml
│ │ ├── DemihumansView.xaml.cs
│ │ ├── EquipmentView.xaml
│ │ ├── EquipmentView.xaml.cs
│ │ ├── FurnitureView.xaml
│ │ ├── FurnitureView.xaml.cs
│ │ ├── Help3DView.xaml
│ │ ├── Help3DView.xaml.cs
│ │ ├── MapsView.xaml
│ │ ├── MapsView.xaml.cs
│ │ ├── MonstersView.xaml
│ │ ├── MonstersView.xaml.cs
│ │ ├── TerritoryView.xaml
│ │ └── TerritoryView.xaml.cs
│ └── WpfHelper.cs
├── LICENSE
├── NewAdditionsByPatch.txt
├── README.md
├── SaintCoinach/
│ ├── ARealmReversed.cs
│ ├── ByteArrayExtensions.cs
│ ├── Definitions/
│ │ ├── AOZArrangement.json
│ │ ├── AOZBoss.json
│ │ ├── AOZContent.json
│ │ ├── AOZContentBriefingBNpc.json
│ │ ├── AOZContentBriefingObject.json
│ │ ├── AOZReport.json
│ │ ├── AOZScore.json
│ │ ├── Achievement.json
│ │ ├── AchievementCategory.json
│ │ ├── AchievementHideCondition.json
│ │ ├── AchievementKind.json
│ │ ├── AchievementTarget.json
│ │ ├── Action.json
│ │ ├── ActionCastTimeline.json
│ │ ├── ActionCastVFX.json
│ │ ├── ActionCategory.json
│ │ ├── ActionComboRoute.json
│ │ ├── ActionIndirection.json
│ │ ├── ActionParam.json
│ │ ├── ActionProcStatus.json
│ │ ├── ActionTimeline.json
│ │ ├── ActionTimelineMove.json
│ │ ├── ActionTimelineReplace.json
│ │ ├── ActionTransient.json
│ │ ├── ActivityFeedButtons.json
│ │ ├── ActivityFeedCaptions.json
│ │ ├── ActivityFeedGroupCaptions.json
│ │ ├── ActivityFeedImages.json
│ │ ├── Addon.json
│ │ ├── Adventure.json
│ │ ├── AdventureExPhase.json
│ │ ├── AetherCurrent.json
│ │ ├── AetherCurrentCompFlgSet.json
│ │ ├── AetherialWheel.json
│ │ ├── Aetheryte.json
│ │ ├── AetheryteSystemDefine.json
│ │ ├── AetheryteTransient.json
│ │ ├── AirshipExplorationLevel.json
│ │ ├── AirshipExplorationLog.json
│ │ ├── AirshipExplorationParamType.json
│ │ ├── AirshipExplorationPart.json
│ │ ├── AirshipExplorationPoint.json
│ │ ├── AkatsukiNote.json
│ │ ├── AkatsukiNoteString.json
│ │ ├── AnimaWeapon5.json
│ │ ├── AnimaWeapon5Param.json
│ │ ├── AnimaWeapon5PatternGroup.json
│ │ ├── AnimaWeapon5SpiritTalk.json
│ │ ├── AnimaWeapon5SpiritTalkParam.json
│ │ ├── AnimaWeapon5TradeItem.json
│ │ ├── AnimaWeaponFUITalk.json
│ │ ├── AnimaWeaponFUITalkParam.json
│ │ ├── AnimaWeaponIcon.json
│ │ ├── AnimaWeaponItem.json
│ │ ├── AnimationLOD.json
│ │ ├── AozAction.json
│ │ ├── AozActionTransient.json
│ │ ├── AquariumFish.json
│ │ ├── AquariumWater.json
│ │ ├── ArchiveItem.json
│ │ ├── ArrayEventHandler.json
│ │ ├── AttackType.json
│ │ ├── Attract.json
│ │ ├── BGM.json
│ │ ├── BGMFade.json
│ │ ├── BGMFadeType.json
│ │ ├── BGMScene.json
│ │ ├── BGMSituation.json
│ │ ├── BGMSwitch.json
│ │ ├── BGMSystemDefine.json
│ │ ├── BNpcAnnounceIcon.json
│ │ ├── BNpcBase.json
│ │ ├── BNpcBasePopVfx.json
│ │ ├── BNpcCustomize.json
│ │ ├── BNpcName.json
│ │ ├── BNpcParts.json
│ │ ├── BNpcState.json
│ │ ├── BacklightColor.json
│ │ ├── Ballista.json
│ │ ├── Balloon.json
│ │ ├── BannerBg.json
│ │ ├── BannerCondition.json
│ │ ├── BannerDecoration.json
│ │ ├── BannerDesignPreset.json
│ │ ├── BannerFacial.json
│ │ ├── BannerFrame.json
│ │ ├── BannerObtainHintType.json
│ │ ├── BannerPreset.json
│ │ ├── BannerTimeline.json
│ │ ├── BaseParam.json
│ │ ├── BattleLeve.json
│ │ ├── BattleLeveRule.json
│ │ ├── BeastRankBonus.json
│ │ ├── BeastReputationRank.json
│ │ ├── BeastTribe.json
│ │ ├── Behavior.json
│ │ ├── BehaviorPath.json
│ │ ├── BenchmarkOverrideEquipment.json
│ │ ├── Booster.json
│ │ ├── Buddy.json
│ │ ├── BuddyAction.json
│ │ ├── BuddyEquip.json
│ │ ├── BuddyItem.json
│ │ ├── BuddyRank.json
│ │ ├── BuddySkill.json
│ │ ├── CSBonusContent.json
│ │ ├── CSBonusContentIdentifier.json
│ │ ├── CSBonusContentType.json
│ │ ├── CSBonusMission.json
│ │ ├── CSBonusMissionType.json
│ │ ├── CSBonusSeason.json
│ │ ├── CSBonusTextData.json
│ │ ├── Cabinet.json
│ │ ├── CabinetCategory.json
│ │ ├── Calendar.json
│ │ ├── Carry.json
│ │ ├── Channeling.json
│ │ ├── CharaCardBase.json
│ │ ├── CharaCardDecoration.json
│ │ ├── CharaCardDesignCategory.json
│ │ ├── CharaCardDesignPreset.json
│ │ ├── CharaCardDesignType.json
│ │ ├── CharaCardHeader.json
│ │ ├── CharaCardPlayStyle.json
│ │ ├── CharaMakeClassEquip.json
│ │ ├── CharaMakeCustomize.json
│ │ ├── CharaMakeName.json
│ │ ├── CharaMakeType.json
│ │ ├── ChocoboRace.json
│ │ ├── ChocoboRaceAbility.json
│ │ ├── ChocoboRaceAbilityType.json
│ │ ├── ChocoboRaceItem.json
│ │ ├── ChocoboRaceRank.json
│ │ ├── ChocoboRaceStatus.json
│ │ ├── ChocoboRaceTerritory.json
│ │ ├── ChocoboRaceTutorial.json
│ │ ├── ChocoboRaceWeather.json
│ │ ├── ChocoboTaxi.json
│ │ ├── ChocoboTaxiStand.json
│ │ ├── CircleActivity.json
│ │ ├── ClassJob.json
│ │ ├── ClassJobActionSort.json
│ │ ├── ClassJobCategory.json
│ │ ├── CollectablesShop.json
│ │ ├── CollectablesShopItem.json
│ │ ├── CollectablesShopItemGroup.json
│ │ ├── CollectablesShopRefine.json
│ │ ├── CollectablesShopRewardItem.json
│ │ ├── CollectablesShopRewardScrip.json
│ │ ├── Companion.json
│ │ ├── CompanionMove.json
│ │ ├── CompanionTransient.json
│ │ ├── CompanyAction.json
│ │ ├── CompanyCraftDraft.json
│ │ ├── CompanyCraftDraftCategory.json
│ │ ├── CompanyCraftManufactoryState.json
│ │ ├── CompanyCraftPart.json
│ │ ├── CompanyCraftProcess.json
│ │ ├── CompanyCraftSequence.json
│ │ ├── CompanyCraftSupplyItem.json
│ │ ├── CompanyCraftType.json
│ │ ├── CompanyLeve.json
│ │ ├── CompanyLeveRule.json
│ │ ├── CompleteJournal.json
│ │ ├── CompleteJournalCategory.json
│ │ ├── Completion.json
│ │ ├── Condition.json
│ │ ├── ConfigKey.json
│ │ ├── ContentCloseCycle.json
│ │ ├── ContentEventItem.json
│ │ ├── ContentExAction.json
│ │ ├── ContentFinderCondition.json
│ │ ├── ContentFinderConditionTransient.json
│ │ ├── ContentGauge.json
│ │ ├── ContentGaugeColor.json
│ │ ├── ContentMemberType.json
│ │ ├── ContentNpc.json
│ │ ├── ContentNpcTalk.json
│ │ ├── ContentRandomSelect.json
│ │ ├── ContentRoulette.json
│ │ ├── ContentRouletteOpenRule.json
│ │ ├── ContentRouletteRoleBonus.json
│ │ ├── ContentTalk.json
│ │ ├── ContentTalkParam.json
│ │ ├── ContentType.json
│ │ ├── ContentsNote.json
│ │ ├── ContentsTutorial.json
│ │ ├── ContentsTutorialPage.json
│ │ ├── CraftAction.json
│ │ ├── CraftLeve.json
│ │ ├── CraftLeveTalk.json
│ │ ├── CraftLevelDifference.json
│ │ ├── CraftType.json
│ │ ├── Credit.json
│ │ ├── CreditBackImage.json
│ │ ├── CreditCast.json
│ │ ├── CreditList.json
│ │ ├── CreditListText.json
│ │ ├── CustomTalk.json
│ │ ├── CustomTalkDefineClient.json
│ │ ├── CustomTalkNestHandlers.json
│ │ ├── CutSceneIncompQuest.json
│ │ ├── CutScreenImage.json
│ │ ├── Cutscene.json
│ │ ├── CutsceneMotion.json
│ │ ├── CutsceneWorkIndex.json
│ │ ├── CycleTime.json
│ │ ├── DailySupplyItem.json
│ │ ├── DawnContent.json
│ │ ├── DawnContentParticipable.json
│ │ ├── DawnGrowMember.json
│ │ ├── DawnMember.json
│ │ ├── DawnMemberUIParam.json
│ │ ├── DawnQuestMember.json
│ │ ├── DeepDungeon.json
│ │ ├── DeepDungeonBan.json
│ │ ├── DeepDungeonDanger.json
│ │ ├── DeepDungeonDemiclone.json
│ │ ├── DeepDungeonEquipment.json
│ │ ├── DeepDungeonFloorEffectUI.json
│ │ ├── DeepDungeonItem.json
│ │ ├── DeepDungeonLayer.json
│ │ ├── DeepDungeonMagicStone.json
│ │ ├── DeepDungeonMap5X.json
│ │ ├── DeepDungeonRoom.json
│ │ ├── DeepDungeonStatus.json
│ │ ├── DefaultTalk.json
│ │ ├── DefaultTalkLipSyncType.json
│ │ ├── DeliveryQuest.json
│ │ ├── Description.json
│ │ ├── DescriptionPage.json
│ │ ├── DescriptionSection.json
│ │ ├── DescriptionString.json
│ │ ├── DisposalShop.json
│ │ ├── DisposalShopFilterType.json
│ │ ├── DisposalShopItem.json
│ │ ├── DpsChallenge.json
│ │ ├── DpsChallengeOfficer.json
│ │ ├── DpsChallengeTransient.json
│ │ ├── DynamicEvent.json
│ │ ├── DynamicEventEnemyType.json
│ │ ├── DynamicEventSingleBattle.json
│ │ ├── DynamicEventType.json
│ │ ├── ENpcBase.json
│ │ ├── ENpcDressUp.json
│ │ ├── ENpcDressUpDress.json
│ │ ├── ENpcResident.json
│ │ ├── EObj.json
│ │ ├── EObjName.json
│ │ ├── EmjAddon.json
│ │ ├── EmjDani.json
│ │ ├── Emote.json
│ │ ├── EmoteCategory.json
│ │ ├── EmoteMode.json
│ │ ├── EquipRaceCategory.json
│ │ ├── EquipSlotCategory.json
│ │ ├── EurekaAetherItem.json
│ │ ├── EurekaAethernet.json
│ │ ├── EurekaDungeonPortal.json
│ │ ├── EurekaGrowData.json
│ │ ├── EurekaLogosMixerProbability.json
│ │ ├── EurekaMagiaAction.json
│ │ ├── EurekaMagiciteItem.json
│ │ ├── EurekaMagiciteItemType.json
│ │ ├── EurekaSphereElementAdjust.json
│ │ ├── EventAction.json
│ │ ├── EventCustomIconType.json
│ │ ├── EventIconPriority.json
│ │ ├── EventIconPriorityPair.json
│ │ ├── EventIconType.json
│ │ ├── EventItem.json
│ │ ├── EventItemCastTimeline.json
│ │ ├── EventItemHelp.json
│ │ ├── EventItemTimeline.json
│ │ ├── EventPathMove.json
│ │ ├── EventSystemDefine.json
│ │ ├── ExVersion.json
│ │ ├── ExportedGatheringPoint.json
│ │ ├── ExportedSG.json
│ │ ├── ExtraCommand.json
│ │ ├── FCActivity.json
│ │ ├── FCActivityCategory.json
│ │ ├── FCAuthority.json
│ │ ├── FCAuthorityCategory.json
│ │ ├── FCChestName.json
│ │ ├── FCCrestSymbol.json
│ │ ├── FCHierarchy.json
│ │ ├── FCProfile.json
│ │ ├── FCRank.json
│ │ ├── FCReputation.json
│ │ ├── FCRights.json
│ │ ├── FGSAddon.json
│ │ ├── FGSStageUI.json
│ │ ├── FashionCheckThemeCategory.json
│ │ ├── FashionCheckWeeklyTheme.json
│ │ ├── Fate.json
│ │ ├── FateEvent.json
│ │ ├── FateMode.json
│ │ ├── FateProgressUI.json
│ │ ├── FateShop.json
│ │ ├── FateTokenType.json
│ │ ├── FccShop.json
│ │ ├── Festival.json
│ │ ├── FieldMarker.json
│ │ ├── FishParameter.json
│ │ ├── FishingBaitParameter.json
│ │ ├── FishingNoteInfo.json
│ │ ├── FishingRecordType.json
│ │ ├── FishingRecordTypeTransient.json
│ │ ├── FishingSpot.json
│ │ ├── FittingShop.json
│ │ ├── FittingShopCategory.json
│ │ ├── FittingShopCategoryItem.json
│ │ ├── FittingShopItemSet.json
│ │ ├── Frontline03.json
│ │ ├── FurnitureCatalogCategory.json
│ │ ├── FurnitureCatalogItemList.json
│ │ ├── GCRankGridaniaFemaleText.json
│ │ ├── GCRankGridaniaMaleText.json
│ │ ├── GCRankLimsaFemaleText.json
│ │ ├── GCRankLimsaMaleText.json
│ │ ├── GCRankUldahFemaleText.json
│ │ ├── GCRankUldahMaleText.json
│ │ ├── GCScripShopCategory.json
│ │ ├── GCScripShopItem.json
│ │ ├── GCShop.json
│ │ ├── GCShopItemCategory.json
│ │ ├── GCSupplyDuty.json
│ │ ├── GCSupplyDutyReward.json
│ │ ├── GFATE.json
│ │ ├── GFateClimbing2.json
│ │ ├── GFateClimbing2Content.json
│ │ ├── GFateClimbing2TotemType.json
│ │ ├── GFateRideShooting.json
│ │ ├── GFateType.json
│ │ ├── GameRewardObtainType.json
│ │ ├── GardeningSeed.json
│ │ ├── GathererCrafterTool.json
│ │ ├── GathererReductionReward.json
│ │ ├── GatheringCondition.json
│ │ ├── GatheringExp.json
│ │ ├── GatheringItem.json
│ │ ├── GatheringItemLevelConvertTable.json
│ │ ├── GatheringItemPoint.json
│ │ ├── GatheringLeve.json
│ │ ├── GatheringLeveRoute.json
│ │ ├── GatheringLeveRule.json
│ │ ├── GatheringNotebookList.json
│ │ ├── GatheringPoint.json
│ │ ├── GatheringPointBase.json
│ │ ├── GatheringPointBonus.json
│ │ ├── GatheringPointBonusType.json
│ │ ├── GatheringPointName.json
│ │ ├── GatheringPointTransient.json
│ │ ├── GatheringRarePopTimeTable.json
│ │ ├── GatheringSubCategory.json
│ │ ├── GatheringType.json
│ │ ├── GcArmyCaptureTactics.json
│ │ ├── GcArmyEquipPreset.json
│ │ ├── GcArmyExpedition.json
│ │ ├── GcArmyExpeditionMemberBonus.json
│ │ ├── GcArmyExpeditionType.json
│ │ ├── GcArmyMemberGrow.json
│ │ ├── GcArmyTraining.json
│ │ ├── GeneralAction.json
│ │ ├── GilShop.json
│ │ ├── GilShopItem.json
│ │ ├── GimmickAccessor.json
│ │ ├── GimmickJump.json
│ │ ├── GimmickRect.json
│ │ ├── Glasses.json
│ │ ├── GlassesStyle.json
│ │ ├── GoldSaucerArcadeMachine.json
│ │ ├── GoldSaucerTextData.json
│ │ ├── GrandCompany.json
│ │ ├── GrandCompanyRank.json
│ │ ├── GroupPoseFrame.json
│ │ ├── GroupPoseStamp.json
│ │ ├── GroupPoseStampCategory.json
│ │ ├── GuardianDeity.json
│ │ ├── Guide.json
│ │ ├── GuidePage.json
│ │ ├── GuidePageString.json
│ │ ├── GuideTitle.json
│ │ ├── GuildOrder.json
│ │ ├── GuildOrderGuide.json
│ │ ├── GuildOrderOfficer.json
│ │ ├── GuildleveAssignment.json
│ │ ├── GuildleveAssignmentCategory.json
│ │ ├── GuildleveAssignmentTalk.json
│ │ ├── HWDAnnounce.json
│ │ ├── HWDCrafterSupply.json
│ │ ├── HWDCrafterSupplyReward.json
│ │ ├── HWDCrafterSupplyTerm.json
│ │ ├── HWDDevLayerControl.json
│ │ ├── HWDDevLevelUI.json
│ │ ├── HWDDevLively.json
│ │ ├── HWDDevProgress.json
│ │ ├── HWDGathereInspectTerm.json
│ │ ├── HWDGathererInspection.json
│ │ ├── HWDGathererInspectionReward.json
│ │ ├── HWDInfoBoardArticle.json
│ │ ├── HWDInfoBoardArticleTransient.json
│ │ ├── HWDInfoBoardArticleType.json
│ │ ├── HWDLevelChangeDeception.json
│ │ ├── HWDSharedGroup.json
│ │ ├── HWDSharedGroupControlParam.json
│ │ ├── HairMakeType.json
│ │ ├── HouseRetainerPose.json
│ │ ├── HousingAethernet.json
│ │ ├── HousingAppeal.json
│ │ ├── HousingEmploymentNpcList.json
│ │ ├── HousingEmploymentNpcRace.json
│ │ ├── HousingExterior.json
│ │ ├── HousingFurniture.json
│ │ ├── HousingLandSet.json
│ │ ├── HousingMapMarkerInfo.json
│ │ ├── HousingMerchantPose.json
│ │ ├── HousingPlacement.json
│ │ ├── HousingPreset.json
│ │ ├── HousingUnitedExterior.json
│ │ ├── HousingYardObject.json
│ │ ├── HowTo.json
│ │ ├── HowToCategory.json
│ │ ├── HowToPage.json
│ │ ├── HugeCraftworksNpc.json
│ │ ├── HugeCraftworksRank.json
│ │ ├── IKDContentBonus.json
│ │ ├── IKDFishParam.json
│ │ ├── IKDRoute.json
│ │ ├── IKDRouteTable.json
│ │ ├── IKDSpot.json
│ │ ├── IconLanguage.json
│ │ ├── InclusionShop.json
│ │ ├── InclusionShopCategory.json
│ │ ├── InclusionShopSeries.json
│ │ ├── InclusionShopWelcom.json
│ │ ├── InclusionShopWelcomText.json
│ │ ├── IndividualWeather.json
│ │ ├── InstanceContent.json
│ │ ├── InstanceContentBuff.json
│ │ ├── InstanceContentGuide.json
│ │ ├── InstanceContentQICData.json
│ │ ├── InstanceContentTextData.json
│ │ ├── Item.json
│ │ ├── ItemAction.json
│ │ ├── ItemActionTelepo.json
│ │ ├── ItemBarterCheck.json
│ │ ├── ItemFood.json
│ │ ├── ItemLevel.json
│ │ ├── ItemRepairPrice.json
│ │ ├── ItemRepairResource.json
│ │ ├── ItemRetainerLevelUp.json
│ │ ├── ItemSearchCategory.json
│ │ ├── ItemSeries.json
│ │ ├── ItemSortCategory.json
│ │ ├── ItemSpecialBonus.json
│ │ ├── ItemStainCondition.json
│ │ ├── ItemUICategory.json
│ │ ├── Jingle.json
│ │ ├── JobHudManual.json
│ │ ├── JobHudManualPriority.json
│ │ ├── JournalCategory.json
│ │ ├── JournalGenre.json
│ │ ├── JournalSection.json
│ │ ├── KineDriverOffGroup.json
│ │ ├── Knockback.json
│ │ ├── LegacyQuest.json
│ │ ├── Leve.json
│ │ ├── LeveAssignmentType.json
│ │ ├── LeveClient.json
│ │ ├── LeveRewardItem.json
│ │ ├── LeveRewardItemGroup.json
│ │ ├── LeveString.json
│ │ ├── LeveVfx.json
│ │ ├── Level.json
│ │ ├── Lobby.json
│ │ ├── LogFilter.json
│ │ ├── LogKind.json
│ │ ├── LogMessage.json
│ │ ├── LotteryExchangeShop.json
│ │ ├── MJIAnimals.json
│ │ ├── MJIBuilding.json
│ │ ├── MJIBuildingPlace.json
│ │ ├── MJICraftworksObject.json
│ │ ├── MJICraftworksObjectTheme.json
│ │ ├── MJICraftworksPopularity.json
│ │ ├── MJICraftworksPopularityType.json
│ │ ├── MJICraftworksRankRatio.json
│ │ ├── MJICraftworksSupplyDefine.json
│ │ ├── MJICraftworksTension.json
│ │ ├── MJICropSeed.json
│ │ ├── MJIDisposalShopItem.json
│ │ ├── MJIDisposalShopUICategory.json
│ │ ├── MJIFarmPastureRank.json
│ │ ├── MJIFunction.json
│ │ ├── MJIGardenscaping.json
│ │ ├── MJIGathering.json
│ │ ├── MJIGatheringItem.json
│ │ ├── MJIGatheringObject.json
│ │ ├── MJIGatheringTool.json
│ │ ├── MJIHudMode.json
│ │ ├── MJIItemCategory.json
│ │ ├── MJIItemPouch.json
│ │ ├── MJIKeyItem.json
│ │ ├── MJILandmark.json
│ │ ├── MJILandmarkPlace.json
│ │ ├── MJILivelyActor.json
│ │ ├── MJIMinionPopAreas.json
│ │ ├── MJIName.json
│ │ ├── MJINekomimiRequest.json
│ │ ├── MJIProgress.json
│ │ ├── MJIRank.json
│ │ ├── MJIRecipe.json
│ │ ├── MJIRecipeMaterial.json
│ │ ├── MJIStockyardManagementArea.json
│ │ ├── MJIStockyardManagementTable.json
│ │ ├── MJIText.json
│ │ ├── MJIVillageAppearanceSG.json
│ │ ├── MJIVillageAppearanceUI.json
│ │ ├── MJIVillageDevelopment.json
│ │ ├── MKDLore.json
│ │ ├── MYCTemporaryItem.json
│ │ ├── MYCTemporaryItemUICategory.json
│ │ ├── MYCWarResultNotebook.json
│ │ ├── MacroIcon.json
│ │ ├── MacroIconRedirectOld.json
│ │ ├── MainCommand.json
│ │ ├── MainCommandCategory.json
│ │ ├── MandervilleWeaponEnhance.json
│ │ ├── ManeuversArmor.json
│ │ ├── Map.json
│ │ ├── MapCondition.json
│ │ ├── MapExclusive.json
│ │ ├── MapMarker.json
│ │ ├── MapMarkerRegion.json
│ │ ├── MapReplace.json
│ │ ├── MapSymbol.json
│ │ ├── MapTransientPvPMap.json
│ │ ├── MapType.json
│ │ ├── Marker.json
│ │ ├── Materia.json
│ │ ├── MateriaGrade.json
│ │ ├── MateriaJoinRate.json
│ │ ├── MateriaJoinRateGatherCraft.json
│ │ ├── McGuffin.json
│ │ ├── McGuffinUIData.json
│ │ ├── MiniGameRA.json
│ │ ├── MiniGameTurnBreakAction.json
│ │ ├── MiniGameTurnBreakConst.json
│ │ ├── MiniGameTurnBreakEnemy.json
│ │ ├── MiniGameTurnBreakPop.json
│ │ ├── MiniGameTurnBreakPopOffset.json
│ │ ├── MiniGameTurnBreakStage.json
│ │ ├── MiniGameTurnBreakStatus.json
│ │ ├── MinionRace.json
│ │ ├── MinionRules.json
│ │ ├── MinionSkillType.json
│ │ ├── MirageStoreSetItem.json
│ │ ├── MirageStoreSetItemLookup.json
│ │ ├── MobHuntOrder.json
│ │ ├── MobHuntOrderType.json
│ │ ├── MobHuntReward.json
│ │ ├── MobHuntRewardCap.json
│ │ ├── MobHuntTarget.json
│ │ ├── ModelChara.json
│ │ ├── ModelSkeleton.json
│ │ ├── ModelState.json
│ │ ├── MonsterNote.json
│ │ ├── MonsterNoteTarget.json
│ │ ├── MotionTimeline.json
│ │ ├── MotionTimelineBlendTable.json
│ │ ├── Mount.json
│ │ ├── MountAction.json
│ │ ├── MountCustomize.json
│ │ ├── MountFlyingCondition.json
│ │ ├── MountSpeed.json
│ │ ├── MountTransient.json
│ │ ├── MoveTimeline.json
│ │ ├── MoveVfx.json
│ │ ├── MovieStaffList.json
│ │ ├── MovieSubtitle.json
│ │ ├── MovieSubtitle500.json
│ │ ├── MovieSubtitleVoyage.json
│ │ ├── MultipleHelp.json
│ │ ├── MultipleHelpPage.json
│ │ ├── MultipleHelpString.json
│ │ ├── NotebookDivision.json
│ │ ├── NotebookDivisionCategory.json
│ │ ├── NotoriousMonster.json
│ │ ├── NotoriousMonsterTerritory.json
│ │ ├── NpcEquip.json
│ │ ├── NpcYell.json
│ │ ├── Omen.json
│ │ ├── Omikuji.json
│ │ ├── OmikujiGuidance.json
│ │ ├── OnlineStatus.json
│ │ ├── OpenContent.json
│ │ ├── OpenContentCandidateName.json
│ │ ├── Opening.json
│ │ ├── Orchestrion.json
│ │ ├── OrchestrionCategory.json
│ │ ├── OrchestrionPath.json
│ │ ├── OrchestrionUiparam.json
│ │ ├── Ornament.json
│ │ ├── OrnamentAction.json
│ │ ├── ParamGrow.json
│ │ ├── PartyContent.json
│ │ ├── PartyContentCutscene.json
│ │ ├── PartyContentTextData.json
│ │ ├── PatchMark.json
│ │ ├── Perform.json
│ │ ├── PerformGroup.json
│ │ ├── PerformTransient.json
│ │ ├── Pet.json
│ │ ├── PetAction.json
│ │ ├── PetMirage.json
│ │ ├── PhysicsGroup.json
│ │ ├── PhysicsWind.json
│ │ ├── Picture.json
│ │ ├── PlaceName.json
│ │ ├── PlantPotFlowerSeed.json
│ │ ├── PlayerSearchLocation.json
│ │ ├── PlayerSearchSubLocation.json
│ │ ├── PreHandler.json
│ │ ├── PresetCamera.json
│ │ ├── PresetCameraAdjust.json
│ │ ├── PreviewableItems.json
│ │ ├── PublicContent.json
│ │ ├── PublicContentCutscene.json
│ │ ├── PublicContentTextData.json
│ │ ├── PvPAction.json
│ │ ├── PvPActionSort.json
│ │ ├── PvPBaseParamValue.json
│ │ ├── PvPRank.json
│ │ ├── PvPSelectTrait.json
│ │ ├── PvPSeries.json
│ │ ├── PvPSeriesLevel.json
│ │ ├── PvPTrait.json
│ │ ├── Quest.json
│ │ ├── QuestAcceptAdditionCondition.json
│ │ ├── QuestBattle.json
│ │ ├── QuestChapter.json
│ │ ├── QuestClassJobReward.json
│ │ ├── QuestClassJobSupply.json
│ │ ├── QuestDefineClient.json
│ │ ├── QuestDerivedClass.json
│ │ ├── QuestEffect.json
│ │ ├── QuestEffectDefine.json
│ │ ├── QuestEventAreaEntranceInfo.json
│ │ ├── QuestLinkMarker.json
│ │ ├── QuestLinkMarkerIcon.json
│ │ ├── QuestLinkMarkerSet.json
│ │ ├── QuestRedo.json
│ │ ├── QuestRedoChapterUI.json
│ │ ├── QuestRedoChapterUICategory.json
│ │ ├── QuestRedoChapterUITab.json
│ │ ├── QuestRedoIncompChapter.json
│ │ ├── QuestRepeatFlag.json
│ │ ├── QuestRewardOther.json
│ │ ├── QuestSelectTitle.json
│ │ ├── QuestSetDefine.json
│ │ ├── QuickChat.json
│ │ ├── QuickChatTransient.json
│ │ ├── RPParameter.json
│ │ ├── Race.json
│ │ ├── RacingChocoboItem.json
│ │ ├── RacingChocoboName.json
│ │ ├── RacingChocoboNameCategory.json
│ │ ├── RacingChocoboNameInfo.json
│ │ ├── RacingChocoboParam.json
│ │ ├── RaidFinderParam.json
│ │ ├── ReactionEventObject.json
│ │ ├── ReactionEventObjectInfo.json
│ │ ├── RecastNavimesh.json
│ │ ├── Recipe.json
│ │ ├── RecipeLevelTable.json
│ │ ├── RecipeLookup.json
│ │ ├── RecipeNotebookList.json
│ │ ├── RecommendContents.json
│ │ ├── Relic.json
│ │ ├── Relic3.json
│ │ ├── RelicItem.json
│ │ ├── RelicNote.json
│ │ ├── RelicNoteCategory.json
│ │ ├── ReplaceAction.json
│ │ ├── Resident.json
│ │ ├── ResistanceWeaponAdjust.json
│ │ ├── RetainerFortuneRewardRange.json
│ │ ├── RetainerTask.json
│ │ ├── RetainerTaskLvRange.json
│ │ ├── RetainerTaskNormal.json
│ │ ├── RetainerTaskParameter.json
│ │ ├── RetainerTaskRandom.json
│ │ ├── RideShooting.json
│ │ ├── RideShootingTargetType.json
│ │ ├── RideShootingTextData.json
│ │ ├── SatisfactionArbitration.json
│ │ ├── SatisfactionBonusGuarantee.json
│ │ ├── SatisfactionNpc.json
│ │ ├── SatisfactionSupply.json
│ │ ├── SatisfactionSupplyReward.json
│ │ ├── ScenarioTree.json
│ │ ├── ScenarioTreeTips.json
│ │ ├── ScenarioTreeTipsClassQuest.json
│ │ ├── ScenarioType.json
│ │ ├── ScreenImage.json
│ │ ├── SecretRecipeBook.json
│ │ ├── SharlayanCraftWorks.json
│ │ ├── SharlayanCraftWorksSupply.json
│ │ ├── ShellFixedFromCommand.json
│ │ ├── SkyIsland2Mission.json
│ │ ├── SkyIsland2MissionDetail.json
│ │ ├── SkyIsland2MissionType.json
│ │ ├── SkyIsland2RangeType.json
│ │ ├── Snipe.json
│ │ ├── SnipeTalk.json
│ │ ├── SnipeTalkName.json
│ │ ├── SpearfishingComboTarget.json
│ │ ├── SpearfishingItem.json
│ │ ├── SpearfishingNotebook.json
│ │ ├── SpearfishingRecordPage.json
│ │ ├── SpearfishingSilhouette.json
│ │ ├── SpecialShop.json
│ │ ├── SpecialShopItemCategory.json
│ │ ├── Stain.json
│ │ ├── StainTransient.json
│ │ ├── StanceChange.json
│ │ ├── Status.json
│ │ ├── StatusHitEffect.json
│ │ ├── StatusLoopVFX.json
│ │ ├── Story.json
│ │ ├── SubmarineExploration.json
│ │ ├── SubmarineMap.json
│ │ ├── SubmarinePart.json
│ │ ├── SubmarineRank.json
│ │ ├── SwitchTalk.json
│ │ ├── SwitchTalkVariation.json
│ │ ├── TelepoRelay.json
│ │ ├── TerritoryType.json
│ │ ├── TerritoryTypeTelepo.json
│ │ ├── TerritoryTypeTransient.json
│ │ ├── TextCommand.json
│ │ ├── TextCommandParam.json
│ │ ├── TiltParam.json
│ │ ├── Title.json
│ │ ├── TofuEditParam.json
│ │ ├── TofuObject.json
│ │ ├── TofuObjectCategory.json
│ │ ├── TofuPreset.json
│ │ ├── TofuPresetCategory.json
│ │ ├── TofuPresetObject.json
│ │ ├── Tomestones.json
│ │ ├── TomestonesItem.json
│ │ ├── TopicSelect.json
│ │ ├── Town.json
│ │ ├── Trait.json
│ │ ├── TraitRecast.json
│ │ ├── TraitTransient.json
│ │ ├── Transformation.json
│ │ ├── Treasure.json
│ │ ├── TreasureHuntRank.json
│ │ ├── TreasureModel.json
│ │ ├── TreasureSpot.json
│ │ ├── Tribe.json
│ │ ├── TripleTriad.json
│ │ ├── TripleTriadCard.json
│ │ ├── TripleTriadCardObtain.json
│ │ ├── TripleTriadCardRarity.json
│ │ ├── TripleTriadCardResident.json
│ │ ├── TripleTriadCardType.json
│ │ ├── TripleTriadCompetition.json
│ │ ├── TripleTriadResident.json
│ │ ├── TripleTriadRule.json
│ │ ├── Tutorial.json
│ │ ├── TutorialDPS.json
│ │ ├── TutorialHealer.json
│ │ ├── TutorialTank.json
│ │ ├── UDS_Event.json
│ │ ├── UDS_Property.json
│ │ ├── UIColor.json
│ │ ├── UIConst.json
│ │ ├── UILevelLookup.json
│ │ ├── VFX.json
│ │ ├── VVDData.json
│ │ ├── VVDNotebookContents.json
│ │ ├── VVDNotebookSeries.json
│ │ ├── VVDRouteData.json
│ │ ├── VVDVariantAction.json
│ │ ├── VaseFlower.json
│ │ ├── Warp.json
│ │ ├── WarpCondition.json
│ │ ├── WarpLogic.json
│ │ ├── WeaponTimeline.json
│ │ ├── Weather.json
│ │ ├── WeatherGroup.json
│ │ ├── WeatherRate.json
│ │ ├── WeatherReportReplace.json
│ │ ├── WebGuidance.json
│ │ ├── WebURL.json
│ │ ├── WeddingBGM.json
│ │ ├── WeeklyBingoOrderData.json
│ │ ├── WeeklyBingoRewardData.json
│ │ ├── WeeklyBingoText.json
│ │ ├── WeeklyLotBonus.json
│ │ ├── World.json
│ │ ├── WorldDCGroupType.json
│ │ ├── YKW.json
│ │ ├── YardCatalogCategory.json
│ │ ├── YardCatalogItemList.json
│ │ ├── ZoneSharedGroup.json
│ │ └── game.ver
│ ├── EorzeaDateTime.Formatter.cs
│ ├── EorzeaDateTime.cs
│ ├── Ex/
│ │ ├── Column.cs
│ │ ├── DataReader.cs
│ │ ├── DataReaders/
│ │ │ ├── DelegateDataReader.cs
│ │ │ ├── PackedBooleanDataReader.cs
│ │ │ └── StringDataReader.cs
│ │ ├── DataRowBase.cs
│ │ ├── DataSheet.Enumerator.cs
│ │ ├── DataSheet.cs
│ │ ├── ExCollection.cs
│ │ ├── Header.cs
│ │ ├── IDataRow.cs
│ │ ├── IDataSheet.Generic.cs
│ │ ├── IDataSheet.cs
│ │ ├── IMultiRow.cs
│ │ ├── IMultiSheet.Generic.cs
│ │ ├── IMultiSheet.cs
│ │ ├── IRow.cs
│ │ ├── ISheet.Generic.cs
│ │ ├── ISheet.cs
│ │ ├── Language.cs
│ │ ├── MultiRow.cs
│ │ ├── MultiSheet.Enumerator.cs
│ │ ├── MultiSheet.cs
│ │ ├── PartialDataSheet.Enumerator.cs
│ │ ├── PartialDataSheet.cs
│ │ ├── Relational/
│ │ │ ├── Definition/
│ │ │ │ ├── GroupDataDefinition.cs
│ │ │ │ ├── IDataDefinition.cs
│ │ │ │ ├── PositionedDataDefinition.cs
│ │ │ │ ├── RelationDefinition.cs
│ │ │ │ ├── RepeatDataDefinition.cs
│ │ │ │ ├── SheetDefinition.cs
│ │ │ │ ├── SingleDataDefinition.cs
│ │ │ │ └── ViewDefinition.cs
│ │ │ ├── IRelationalDataRow.cs
│ │ │ ├── IRelationalDataSheet.Generic.cs
│ │ │ ├── IRelationalDataSheet.cs
│ │ │ ├── IRelationalMultiRow.cs
│ │ │ ├── IRelationalMultiSheet.Generic.cs
│ │ │ ├── IRelationalMultiSheet.cs
│ │ │ ├── IRelationalRow.cs
│ │ │ ├── IRelationalSheet.Generic.cs
│ │ │ ├── IRelationalSheet.cs
│ │ │ ├── IValueConverter.cs
│ │ │ ├── RelationalColumn.cs
│ │ │ ├── RelationalDataIndex.cs
│ │ │ ├── RelationalDataSheet.cs
│ │ │ ├── RelationalExCollection.cs
│ │ │ ├── RelationalHeader.cs
│ │ │ ├── RelationalMultiRow.cs
│ │ │ ├── RelationalMultiSheet.cs
│ │ │ ├── RelationalPartialDataSheet.cs
│ │ │ ├── Update/
│ │ │ │ ├── ChangeType.cs
│ │ │ │ ├── Changes/
│ │ │ │ │ ├── DefinitionMoved.cs
│ │ │ │ │ ├── DefinitionRemoved.cs
│ │ │ │ │ ├── FieldChanged.cs
│ │ │ │ │ ├── RowAdded.cs
│ │ │ │ │ ├── RowRemoved.cs
│ │ │ │ │ ├── SheetLanguageAdded.cs
│ │ │ │ │ ├── SheetLanguageRemoved.cs
│ │ │ │ │ ├── SheetRemoved.cs
│ │ │ │ │ └── SheetTypeChanged.cs
│ │ │ │ ├── ColumnComparer.cs
│ │ │ │ ├── Comparer.cs
│ │ │ │ ├── DefinitionUpdater.cs
│ │ │ │ ├── IChange.cs
│ │ │ │ ├── RelationUpdater.cs
│ │ │ │ ├── SheetComparer.cs
│ │ │ │ ├── SheetUpdater.cs
│ │ │ │ └── UpdateProgress.cs
│ │ │ └── ValueConverters/
│ │ │ ├── ColorConverter.cs
│ │ │ ├── ComplexLinkConverter.cs
│ │ │ ├── GenericReferenceConverter.cs
│ │ │ ├── IconConverter.cs
│ │ │ ├── MultiReferenceConverter.cs
│ │ │ ├── QuadConverter.cs
│ │ │ ├── SheetLinkConverter.cs
│ │ │ └── TomestoneOrItemReferenceConverter.cs
│ │ ├── Variant1/
│ │ │ ├── DataRow.cs
│ │ │ └── RelationalDataRow.cs
│ │ └── Variant2/
│ │ ├── DataRow.cs
│ │ ├── RelationalDataRow.cs
│ │ └── SubRow.cs
│ ├── Graphics/
│ │ ├── Bone.cs
│ │ ├── BoundingBox.cs
│ │ ├── ColorMap.cs
│ │ ├── Exports/
│ │ │ ├── ModelExport.cs
│ │ │ └── Obj.cs
│ │ ├── ImcFile.cs
│ │ ├── ImcPart.cs
│ │ ├── ImcVariant.cs
│ │ ├── Lgb/
│ │ │ ├── ILgbEntry.cs
│ │ │ ├── LgbENpcEntry.cs
│ │ │ ├── LgbEntryType.cs
│ │ │ ├── LgbEventObjectEntry.cs
│ │ │ ├── LgbFile.cs
│ │ │ ├── LgbGimmickEntry.cs
│ │ │ ├── LgbGroup.cs
│ │ │ ├── LgbLightEntry.cs
│ │ │ ├── LgbModelEntry.cs
│ │ │ └── LgbVfxEntry.cs
│ │ ├── Material.cs
│ │ ├── MaterialDefinition.cs
│ │ ├── MaterialHeader.cs
│ │ ├── MaterialMetadataHeader.cs
│ │ ├── MaterialTextureParameter.cs
│ │ ├── Mesh.cs
│ │ ├── MeshHeader.cs
│ │ ├── MeshPart.cs
│ │ ├── MeshPartHeader.cs
│ │ ├── Model.cs
│ │ ├── ModelAttribute.cs
│ │ ├── ModelBoundingBoxes.cs
│ │ ├── ModelDefinition.cs
│ │ ├── ModelDefinitionHeader.cs
│ │ ├── ModelFile.cs
│ │ ├── ModelHeader.cs
│ │ ├── ModelQuality.cs
│ │ ├── ModelVariantIdentifier.cs
│ │ ├── PapAnimation.cs
│ │ ├── PapFile.cs
│ │ ├── Pcb/
│ │ │ ├── IPcbBlockData.cs
│ │ │ ├── PcbBlockData.cs
│ │ │ ├── PcbBlockDataType.cs
│ │ │ ├── PcbBlockEntry.cs
│ │ │ └── PcbFile.cs
│ │ ├── Sgb/
│ │ │ ├── ISgbData.cs
│ │ │ ├── ISgbGroupEntry.cs
│ │ │ ├── SgbDataType.cs
│ │ │ ├── SgbFile.cs
│ │ │ ├── SgbGimmickEntry.cs
│ │ │ ├── SgbGroup.cs
│ │ │ ├── SgbGroup1CEntry.cs
│ │ │ ├── SgbGroupEntryType.cs
│ │ │ ├── SgbLightEntry.cs
│ │ │ ├── SgbModelEntry.cs
│ │ │ └── SgbVfxEntry.cs
│ │ ├── ShPk/
│ │ │ ├── Parameter.cs
│ │ │ ├── ParameterHeader.cs
│ │ │ ├── ParameterType.cs
│ │ │ ├── ShPkFile.cs
│ │ │ ├── ShPkHeader.cs
│ │ │ ├── ShaderHeader.cs
│ │ │ ├── ShaderParameterReference.cs
│ │ │ └── ShaderType.cs
│ │ ├── SklbFile.cs
│ │ ├── Territory.cs
│ │ ├── TerritoryParts/
│ │ │ └── Terrain.cs
│ │ ├── TransformedModel.cs
│ │ ├── Unknowns/
│ │ │ ├── BoneIndices.cs
│ │ │ ├── BoneList.cs
│ │ │ ├── MaterialStruct1.cs
│ │ │ ├── MaterialStruct2.cs
│ │ │ ├── ModelStruct1.cs
│ │ │ ├── ModelStruct2.cs
│ │ │ ├── ModelStruct3.cs
│ │ │ ├── ModelStruct5.cs
│ │ │ ├── ModelStruct6.cs
│ │ │ └── ModelStruct7.cs
│ │ ├── Vector2.cs
│ │ ├── Vector3.cs
│ │ ├── Vector4.cs
│ │ ├── Vertex.cs
│ │ ├── VertexAttribute.cs
│ │ ├── VertexDataType.cs
│ │ ├── VertexFormat.cs
│ │ ├── VertexFormatElement.cs
│ │ └── VertexReader.cs
│ ├── HalfHelper.cs
│ ├── IO/
│ │ ├── Directory.Enumeration.cs
│ │ ├── Directory.cs
│ │ ├── EmptyFile.cs
│ │ ├── File.cs
│ │ ├── FileCommonHeader.cs
│ │ ├── FileDefault.cs
│ │ ├── FileFactory.cs
│ │ ├── FileType.cs
│ │ ├── Hash.cs
│ │ ├── IIndexFile.cs
│ │ ├── IPackSource.cs
│ │ ├── Index.cs
│ │ ├── Index2.cs
│ │ ├── Index2File.cs
│ │ ├── Index2Header.cs
│ │ ├── Index2Source.Enumerator.cs
│ │ ├── Index2Source.cs
│ │ ├── IndexDirectory.cs
│ │ ├── IndexFile.cs
│ │ ├── IndexHeader.cs
│ │ ├── IndexSource.Enumerator.cs
│ │ ├── IndexSource.cs
│ │ ├── Pack.cs
│ │ ├── PackCollection.cs
│ │ └── PackIdentifier.cs
│ ├── Imaging/
│ │ ├── GftdEntry.cs
│ │ ├── GraphicsFileTextureDefinition.cs
│ │ ├── IconHelper.cs
│ │ ├── ImageConverter.cs
│ │ ├── ImageFile.cs
│ │ ├── ImageFormat.cs
│ │ └── ImageHeader.cs
│ ├── Libra/
│ │ ├── Achievement.cs
│ │ ├── AchievementCategory.cs
│ │ ├── AchievementKind.cs
│ │ ├── Action.cs
│ │ ├── BNpcName.Parse.cs
│ │ ├── BNpcName.cs
│ │ ├── BNpcName_PlaceName.cs
│ │ ├── BaseParam.cs
│ │ ├── BeastTribe.cs
│ │ ├── ClassJob.cs
│ │ ├── ClassJobCategory.cs
│ │ ├── ClassJob_ClassJobCategory.cs
│ │ ├── Colosseum.cs
│ │ ├── ContentRoulette.cs
│ │ ├── ContentType.cs
│ │ ├── CraftType.cs
│ │ ├── ENpcResident.Parse.cs
│ │ ├── ENpcResident.cs
│ │ ├── ENpcResident_PlaceName.cs
│ │ ├── ENpcResident_Quest.cs
│ │ ├── Emote.cs
│ │ ├── Entities.cs
│ │ ├── FCHierarchy.cs
│ │ ├── FCRank.cs
│ │ ├── FCReputation.cs
│ │ ├── Frontline01.cs
│ │ ├── GCRankGridaniaFemaleText.cs
│ │ ├── GCRankGridaniaMaleText.cs
│ │ ├── GCRankLimsaFemaleText.cs
│ │ ├── GCRankLimsaMaleText.cs
│ │ ├── GCRankUldahFemaleText.cs
│ │ ├── GCRankUldahMaleText.cs
│ │ ├── Gathering.cs
│ │ ├── GatheringType.cs
│ │ ├── GeneralAction.cs
│ │ ├── GrandCompany.cs
│ │ ├── GuardianDeity.cs
│ │ ├── GuildOrder.cs
│ │ ├── InstanceContent.cs
│ │ ├── InstanceContentType.cs
│ │ ├── Item.Parse.cs
│ │ ├── Item.cs
│ │ ├── ItemCategory.cs
│ │ ├── ItemSery.cs
│ │ ├── ItemSpecialBonu.cs
│ │ ├── ItemUICategory.cs
│ │ ├── ItemUIKind.cs
│ │ ├── Item_ClassJob.cs
│ │ ├── JournalCategory.cs
│ │ ├── JournalGenre.cs
│ │ ├── JsonReaderExtensions.cs
│ │ ├── LibraModel.Context.cs
│ │ ├── LibraModel.Context.tt
│ │ ├── LibraModel.Designer.cs
│ │ ├── LibraModel.cs
│ │ ├── LibraModel.edmx
│ │ ├── LibraModel.edmx.diagram
│ │ ├── LibraModel.tt
│ │ ├── LodestoneSystemDefine.cs
│ │ ├── NotebookDivision.cs
│ │ ├── PlaceName.cs
│ │ ├── Quest.cs
│ │ ├── QuestWebEx.cs
│ │ ├── QuestWebType.cs
│ │ ├── Quest_ClassJob.cs
│ │ ├── Race.cs
│ │ ├── Recipe.cs
│ │ ├── RecipeElement.cs
│ │ ├── Shop.cs
│ │ ├── Status.cs
│ │ ├── Title.cs
│ │ ├── Tomestone.cs
│ │ └── Town.cs
│ ├── OrderedBitConverter.cs
│ ├── Range.cs
│ ├── SaintCoinach.csproj
│ ├── Sound/
│ │ ├── ScdAdpcmEntry.cs
│ │ ├── ScdCodec.cs
│ │ ├── ScdEntry.cs
│ │ ├── ScdEntryHeader.cs
│ │ ├── ScdFile.cs
│ │ ├── ScdHeader.cs
│ │ ├── ScdOggCryptType.cs
│ │ └── ScdOggEntry.cs
│ ├── Text/
│ │ ├── DecodeExpressionType.cs
│ │ ├── DefaultEvaluationFunctionProvider.cs
│ │ ├── EvaluationHelper.cs
│ │ ├── EvaluationParameters.cs
│ │ ├── Expressions/
│ │ │ ├── CloseTag.cs
│ │ │ ├── ExpressionCollection.cs
│ │ │ ├── GenericExpression.cs
│ │ │ ├── IValueExpression.cs
│ │ │ ├── ObjectWithDisplay.cs
│ │ │ ├── OpenTag.cs
│ │ │ └── SurroundedExpression.cs
│ │ ├── IEvaluationFunctionProvider.cs
│ │ ├── IExpression.cs
│ │ ├── INode.cs
│ │ ├── IntegerType.cs
│ │ ├── NodeFlags.cs
│ │ ├── Nodes/
│ │ │ ├── ArgumentCollection.cs
│ │ │ ├── CloseTag.cs
│ │ │ ├── Comparison.cs
│ │ │ ├── DefaultElement.cs
│ │ │ ├── EmptyElement.cs
│ │ │ ├── GenericElement.cs
│ │ │ ├── IConditionalNode.cs
│ │ │ ├── IExpressionNode.cs
│ │ │ ├── INodeVisitor.cs
│ │ │ ├── INodeWithArguments.cs
│ │ │ ├── INodeWithChildren.cs
│ │ │ ├── IStaticNode.cs
│ │ │ ├── IfElement.cs
│ │ │ ├── IfEqualsElement.cs
│ │ │ ├── OpenTag.cs
│ │ │ ├── Parameter.cs
│ │ │ ├── StaticByteArray.cs
│ │ │ ├── StaticInteger.cs
│ │ │ ├── StaticString.cs
│ │ │ ├── SwitchElement.cs
│ │ │ └── TopLevelParameter.cs
│ │ ├── Parameters/
│ │ │ ├── ObjectParameters.cs
│ │ │ ├── ParameterBase.cs
│ │ │ └── PlayerParameters.cs
│ │ ├── Processor/
│ │ │ ├── Expressions/
│ │ │ │ ├── EmptyExpression.cs
│ │ │ │ ├── ExpressionCollection.cs
│ │ │ │ └── StaticExpression.cs
│ │ │ └── IExpression.cs
│ │ ├── StringTokens.cs
│ │ ├── TagType.cs
│ │ ├── XivString.cs
│ │ └── XivStringDecoder.cs
│ ├── UpdateReport.cs
│ ├── Xiv/
│ │ ├── Achievement.cs
│ │ ├── AchievementCategory.cs
│ │ ├── AchievementKind.cs
│ │ ├── Action.cs
│ │ ├── ActionBase.cs
│ │ ├── ActionCategory.cs
│ │ ├── ActionTransient.cs
│ │ ├── Addon.cs
│ │ ├── Adventure.cs
│ │ ├── AetherCurrent.cs
│ │ ├── AirshipExplorationLevel.cs
│ │ ├── AirshipExplorationLog.cs
│ │ ├── AirshipExplorationParamType.cs
│ │ ├── AirshipExplorationPoint.cs
│ │ ├── BGM.cs
│ │ ├── BNpc.cs
│ │ ├── BNpcBase.cs
│ │ ├── BNpcData.cs
│ │ ├── BNpcLocation.cs
│ │ ├── BNpcName.cs
│ │ ├── BaseParam.cs
│ │ ├── BeastReputationRank.cs
│ │ ├── BeastTribe.cs
│ │ ├── BuddyAction.cs
│ │ ├── BuddyEquip.cs
│ │ ├── CharaMakeCustomize.cs
│ │ ├── CharaMakeType.cs
│ │ ├── ChocoboRace.cs
│ │ ├── ChocoboRaceAbility.cs
│ │ ├── ChocoboRaceAbilityType.cs
│ │ ├── ChocoboRaceItem.cs
│ │ ├── ChocoboRaceRank.cs
│ │ ├── ChocoboRaceStatus.cs
│ │ ├── ChocoboRaceTerritory.cs
│ │ ├── ClassJob.cs
│ │ ├── ClassJobActionBase.cs
│ │ ├── ClassJobCategory.cs
│ │ ├── Collections/
│ │ │ ├── BNpcCollection.cs
│ │ │ ├── ClassJobActionCollection.cs
│ │ │ ├── ENpcCollection.cs
│ │ │ ├── EquipSlotCollection.cs
│ │ │ ├── ItemCollection.cs
│ │ │ └── ShopCollection.cs
│ │ ├── Companion.cs
│ │ ├── CompanionTransient.cs
│ │ ├── CompanyAction.cs
│ │ ├── CompanyCraftDraft.cs
│ │ ├── CompanyCraftDraftCategory.cs
│ │ ├── CompanyCraftDraftCategoryTxt.cs
│ │ ├── CompanyCraftManufactoryState.cs
│ │ ├── CompanyCraftPart.cs
│ │ ├── CompanyCraftProcess.Request.cs
│ │ ├── CompanyCraftProcess.cs
│ │ ├── CompanyCraftSequence.cs
│ │ ├── CompanyCraftSupplyItem.cs
│ │ ├── CompanyCraftType.cs
│ │ ├── ContentBase.cs
│ │ ├── ContentFinderCondition.cs
│ │ ├── ContentMemberType.cs
│ │ ├── ContentReward.cs
│ │ ├── ContentRoulette.cs
│ │ ├── ContentType.cs
│ │ ├── CraftAction.cs
│ │ ├── CraftLeve.cs
│ │ ├── CraftLeveItem.cs
│ │ ├── CraftLevelDifference.cs
│ │ ├── CraftType.cs
│ │ ├── CustomTalk.cs
│ │ ├── ENpc.cs
│ │ ├── ENpcBase.cs
│ │ ├── ENpcResident.cs
│ │ ├── EObj.cs
│ │ ├── Emote.cs
│ │ ├── EmoteCategory.cs
│ │ ├── EquipSlot.cs
│ │ ├── EquipSlotCategory.cs
│ │ ├── EventAction.cs
│ │ ├── EventItem.cs
│ │ ├── FCRank.cs
│ │ ├── Fate.cs
│ │ ├── FccShop.cs
│ │ ├── FishParameter.cs
│ │ ├── FishingSpot.cs
│ │ ├── GCScripShopCategory.cs
│ │ ├── GCScripShopItem.cs
│ │ ├── GCShop.cs
│ │ ├── GCShopItemCategory.cs
│ │ ├── GatheringCondition.cs
│ │ ├── GatheringExp.cs
│ │ ├── GatheringItem.cs
│ │ ├── GatheringItemBase.cs
│ │ ├── GatheringNotebookList.cs
│ │ ├── GatheringNotebookRegion.cs
│ │ ├── GatheringPoint.cs
│ │ ├── GatheringPointBase.cs
│ │ ├── GatheringPointBonus.cs
│ │ ├── GatheringPointBonusType.cs
│ │ ├── GatheringPointName.cs
│ │ ├── GatheringSubCategory.cs
│ │ ├── GatheringType.cs
│ │ ├── GeneralAction.cs
│ │ ├── GenericLocation.cs
│ │ ├── GilShop.cs
│ │ ├── GilShopItem.cs
│ │ ├── GoldSaucerTextData.cs
│ │ ├── GrandCompany.cs
│ │ ├── GrandCompanyRank.cs
│ │ ├── GuardianDeity.cs
│ │ ├── HousingFurniture.cs
│ │ ├── HousingItem.cs
│ │ ├── HousingItemCategory.cs
│ │ ├── HousingLayoutLimit.cs
│ │ ├── HousingYardObject.cs
│ │ ├── IContentReward.cs
│ │ ├── IItemSource.cs
│ │ ├── ILocatable.cs
│ │ ├── ILocation.cs
│ │ ├── IParameterObject.cs
│ │ ├── IQuantifiable.cs
│ │ ├── IQuantifiableXivString.cs
│ │ ├── IShop.cs
│ │ ├── IShopListing.cs
│ │ ├── IShopListingItem.cs
│ │ ├── IXivRow.cs
│ │ ├── IXivSheet.Generic.cs
│ │ ├── IXivSheet.cs
│ │ ├── IXivSubRow.cs
│ │ ├── InstanceContent.cs
│ │ ├── InstanceContentData.Fight.cs
│ │ ├── InstanceContentData.RewardItem.cs
│ │ ├── InstanceContentData.Treasure.cs
│ │ ├── InstanceContentData.cs
│ │ ├── Item.cs
│ │ ├── ItemAction.cs
│ │ ├── ItemActions/
│ │ │ ├── AchievementScroll.cs
│ │ │ ├── AdventureBook.cs
│ │ │ ├── AetherytePendulum.cs
│ │ │ ├── AttributeReset.cs
│ │ │ ├── BuddyEquipUnlock.cs
│ │ │ ├── BuddySummon.cs
│ │ │ ├── ChocoboActionReset.cs
│ │ │ ├── ChocoboFeed.cs
│ │ │ ├── ChocoboLevelCapIncrease.cs
│ │ │ ├── CompanionUnlock.cs
│ │ │ ├── CompanyEffect.cs
│ │ │ ├── CustomizeUnlock.cs
│ │ │ ├── DesynthSkillReset.cs
│ │ │ ├── Enhancement.cs
│ │ │ ├── EquipmentCoffer.cs
│ │ │ ├── EternalBondInvitation.cs
│ │ │ ├── EternityRing.cs
│ │ │ ├── Fantasia.cs
│ │ │ ├── FateContentAction.cs
│ │ │ ├── FieldNoteUnlock.cs
│ │ │ ├── Fireworks.cs
│ │ │ ├── FolkloreBook.cs
│ │ │ ├── Food.cs
│ │ │ ├── FriendlyEffect.cs
│ │ │ ├── GpRecovery.cs
│ │ │ ├── Heavenscracker.cs
│ │ │ ├── HostileEffect.cs
│ │ │ ├── HpMpRecovery.cs
│ │ │ ├── HpRecovery.cs
│ │ │ ├── ItemRoulette.cs
│ │ │ ├── MgpCard.cs
│ │ │ ├── MountUnlock.cs
│ │ │ ├── MpRecovery.cs
│ │ │ ├── OrchestrionRollUnlock.cs
│ │ │ ├── OrnamentUnlock.cs
│ │ │ ├── PointRecovery.cs
│ │ │ ├── Raise.cs
│ │ │ ├── RealmRebornRed.cs
│ │ │ ├── RecipeBookUnlock.cs
│ │ │ ├── Sanction.cs
│ │ │ ├── SphereScroll.cs
│ │ │ ├── StatusRemoval.cs
│ │ │ ├── SustainPotion.cs
│ │ │ ├── TeleportationTicket.cs
│ │ │ ├── TpRecovery.cs
│ │ │ └── TripleTriadCardUnlock.cs
│ │ ├── ItemBase.cs
│ │ ├── ItemComparer.cs
│ │ ├── ItemFood.cs
│ │ ├── ItemLevel.cs
│ │ ├── ItemSearchCategory.cs
│ │ ├── ItemSeries.cs
│ │ ├── ItemSpecialBonus.cs
│ │ ├── ItemUICategory.cs
│ │ ├── Items/
│ │ │ ├── Accessory.cs
│ │ │ ├── Armour.cs
│ │ │ ├── CraftingTool.cs
│ │ │ ├── Equipment.cs
│ │ │ ├── GatheringTool.cs
│ │ │ ├── Housing.cs
│ │ │ ├── MagicWeapon.cs
│ │ │ ├── MateriaItem.cs
│ │ │ ├── PhysicalWeapon.cs
│ │ │ ├── Shield.cs
│ │ │ ├── SoulCrystal.cs
│ │ │ ├── Usable.cs
│ │ │ └── Weapon.cs
│ │ ├── JournalCategory.cs
│ │ ├── JournalGenre.cs
│ │ ├── JournalSection.cs
│ │ ├── Leve.cs
│ │ ├── LeveAssignmentType.cs
│ │ ├── LeveClient.cs
│ │ ├── LeveRewardItem.cs
│ │ ├── LeveRewardItemGroup.cs
│ │ ├── LeveVfx.cs
│ │ ├── Level.cs
│ │ ├── LogFilter.cs
│ │ ├── LogKind.cs
│ │ ├── LogKindCategoryText.cs
│ │ ├── LogMessage.cs
│ │ ├── MYCWarResultNotebook.cs
│ │ ├── MainCommand.cs
│ │ ├── MainCommandCategory.cs
│ │ ├── Map.cs
│ │ ├── MasterpieceSupplyDuty.CollectableItem.cs
│ │ ├── MasterpieceSupplyDuty.cs
│ │ ├── Materia.cs
│ │ ├── MinionRace.cs
│ │ ├── MinionSkillType.cs
│ │ ├── ModelChara.cs
│ │ ├── MonsterNote.cs
│ │ ├── MonsterNoteTarget.cs
│ │ ├── Mount.cs
│ │ ├── NpcEquip.cs
│ │ ├── OnlineStatus.cs
│ │ ├── Ornament.cs
│ │ ├── ParamGrow.cs
│ │ ├── Parameter.cs
│ │ ├── ParameterCollection.cs
│ │ ├── ParameterType.cs
│ │ ├── ParameterValue.cs
│ │ ├── ParameterValueFixed.cs
│ │ ├── ParameterValueRelative.cs
│ │ ├── ParameterValueRelativeLimited.cs
│ │ ├── PlaceName.cs
│ │ ├── PrerequisiteQuestsRequirement.cs
│ │ ├── PrerequisiteQuestsRequirementType.cs
│ │ ├── ProbabilityPair.cs
│ │ ├── Quad.cs
│ │ ├── Quest.cs
│ │ ├── QuestRepeatInterval.cs
│ │ ├── QuestRequirements.ClassJobRequirement.cs
│ │ ├── QuestRequirements.InstanceContentRequirement.cs
│ │ ├── QuestRequirements.PreviousQuestRequirement.cs
│ │ ├── QuestRequirements.cs
│ │ ├── QuestRewardGroupType.cs
│ │ ├── QuestRewardItem.cs
│ │ ├── QuestRewardItemGroup.cs
│ │ ├── QuestRewardOther.cs
│ │ ├── QuestRewards.cs
│ │ ├── Race.cs
│ │ ├── RacingChocoboItem.cs
│ │ ├── RacingChocoboName.cs
│ │ ├── RacingChocoboNameCategory.cs
│ │ ├── RacingChocoboNameInfo.cs
│ │ ├── RacingChocoboParam.cs
│ │ ├── Recipe.cs
│ │ ├── RecipeElement.cs
│ │ ├── RecipeIngredient.cs
│ │ ├── RecipeIngredientType.cs
│ │ ├── RecipeLevel.cs
│ │ ├── RecipeLevelTable.cs
│ │ ├── RelicNote.cs
│ │ ├── RelicNoteCategory.cs
│ │ ├── RelicNoteCategoryText.cs
│ │ ├── RetainerTask.cs
│ │ ├── RetainerTaskBase.cs
│ │ ├── RetainerTaskNormal.cs
│ │ ├── RetainerTaskRandom.cs
│ │ ├── Salvage.cs
│ │ ├── Sheets/
│ │ │ ├── InventoryItemSheet.cs
│ │ │ └── ItemActionSheet.cs
│ │ ├── ShopListingItem.cs
│ │ ├── SpearfishingItem.cs
│ │ ├── SpecialShop.cs
│ │ ├── SpecialShopListing.cs
│ │ ├── Stain.cs
│ │ ├── Status.cs
│ │ ├── TerritoryType.cs
│ │ ├── Title.cs
│ │ ├── Tomestone.cs
│ │ ├── TomestonesItem.cs
│ │ ├── Trait.cs
│ │ ├── Tribe.cs
│ │ ├── TripleTriad.cs
│ │ ├── TripleTriadCard.cs
│ │ ├── TripleTriadCardRarity.cs
│ │ ├── TripleTriadCardResident.cs
│ │ ├── TripleTriadCardType.cs
│ │ ├── TripleTriadCompetition.cs
│ │ ├── TripleTriadRule.cs
│ │ ├── Weather.cs
│ │ ├── WeatherRate.cs
│ │ ├── XivCollection.cs
│ │ ├── XivRow.cs
│ │ ├── XivSheet.Enumerator.cs
│ │ ├── XivSheet.cs
│ │ ├── XivSheet2.Enumerator.cs
│ │ ├── XivSheet2.cs
│ │ ├── XivSheetAttribute.cs
│ │ └── XivSubRow.cs
│ ├── app.config
│ └── packages.config
├── SaintCoinach.Cmd/
│ ├── App.config
│ ├── Commands/
│ │ ├── AllExdCommand.cs
│ │ ├── AllExdRawCommand.cs
│ │ ├── BgmCommand.cs
│ │ ├── ExdCommand.cs
│ │ ├── ExdHeaderCommand.cs
│ │ ├── FurnitureExpCommand.cs
│ │ ├── HDUiCommand.cs
│ │ ├── ImageCommand.cs
│ │ ├── LanguageCommand.cs
│ │ ├── MapCommand.cs
│ │ ├── RawCommand.cs
│ │ ├── RawExdCommand.cs
│ │ ├── SqlExport.cs
│ │ └── UiCommand.cs
│ ├── ExdHelper.cs
│ ├── Program.cs
│ ├── Properties/
│ │ ├── Settings.Designer.cs
│ │ └── Settings.settings
│ └── SaintCoinach.Cmd.csproj
├── SaintCoinach.Graphics.Viewer/
│ ├── AnimatedModel.cs
│ ├── Animation.cs
│ ├── AnimationContainer.cs
│ ├── AnimationPlayer.cs
│ ├── Camera.cs
│ ├── Component.cs
│ ├── ComponentContainer.cs
│ ├── Content/
│ │ ├── BgColorChangeMaterial.cs
│ │ ├── BgMaterial.cs
│ │ ├── CharacterMaterial.cs
│ │ ├── ContentMesh.cs
│ │ ├── ContentMeshPart.cs
│ │ ├── ContentModel.cs
│ │ ├── ContentSgb.cs
│ │ ├── ContentTerritory.cs
│ │ ├── CrystalMaterial.cs
│ │ ├── Cube.cs
│ │ ├── HairMaterial.cs
│ │ ├── IrisMaterial.cs
│ │ ├── MaterialBase.cs
│ │ ├── PrimitiveMesh.cs
│ │ ├── PrimitiveModel.cs
│ │ └── SkinMaterial.cs
│ ├── Data/
│ │ ├── CustomizeParameters.cs
│ │ └── ParametersBase.cs
│ ├── Drawable3DComponent.cs
│ ├── EffectFactory.cs
│ ├── Effects/
│ │ ├── BgColorChangeEffect.cs
│ │ ├── BgEffect.cs
│ │ ├── CharacterEffect.cs
│ │ ├── CrystalEffect.cs
│ │ ├── CustomizeParameterEffectVariable.cs
│ │ ├── DirectionalLight.cs
│ │ ├── EffectBase.cs
│ │ ├── EffectDirectionalLightVariable.cs
│ │ ├── EffectTextureVariable.cs
│ │ ├── HLSL/
│ │ │ ├── BasicEffect.fx
│ │ │ ├── Bg.fx
│ │ │ ├── BgColorChange.fx
│ │ │ ├── BgUvScroll.fx
│ │ │ ├── Character.fx
│ │ │ ├── Common.Skinned.fxh
│ │ │ ├── Common.fxh
│ │ │ ├── Crystal.fx
│ │ │ ├── CustomizeParameter.fxh
│ │ │ ├── Hair.fx
│ │ │ ├── Iris.fx
│ │ │ ├── Lighting.fxh
│ │ │ ├── Skin.fx
│ │ │ └── Structures.fxh
│ │ ├── HairEffect.cs
│ │ ├── IrisEffect.cs
│ │ ├── SkinEffect.cs
│ │ └── SkinnedEffect.cs
│ ├── Engine.cs
│ ├── EngineTime.cs
│ ├── FormEngine.cs
│ ├── FormInputService.cs
│ ├── IComponent.cs
│ ├── IContentComponent.cs
│ ├── IDrawable3DComponent.cs
│ ├── IImageRendererSource.cs
│ ├── IInputService.cs
│ ├── IUpdateableComponent.cs
│ ├── ImageRenderer.cs
│ ├── Interop/
│ │ ├── FbxExport.cs
│ │ ├── HavokInterop.cs
│ │ ├── InteropAnimation.cs
│ │ ├── InteropMesh.cs
│ │ ├── InteropTransform.cs
│ │ ├── InteropVector4.cs
│ │ └── InteropVertex.cs
│ ├── Keyboard.cs
│ ├── MaterialFactory.cs
│ ├── ModelFactory.cs
│ ├── Mouse.cs
│ ├── MouseState.cs
│ ├── ParametersExtensions.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ ├── RendererSources/
│ │ ├── BaseImageRendererSource.cs
│ │ ├── EquipmentImageRendererSource.cs
│ │ └── MonsterImageRendererSource.cs
│ ├── SaintCoinach.Graphics.Viewer.csproj
│ ├── Skeleton.cs
│ ├── TextureFactory.cs
│ ├── VectorConverter.cs
│ ├── Vertex3D.cs
│ └── app.config
└── SaintCoinach.sln
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
root = true
# Code
[*.cs]
indent_size = 4
indent_style = space
csharp_new_line_before_open_brace = all:warning
================================================
FILE: .gitattributes
================================================
# Auto detect text files and perform LF normalization
* text=auto
# Custom for Visual Studio
*.cs diff=csharp
*.sln merge=union
*.csproj merge=union
*.vbproj merge=union
*.fsproj merge=union
*.dbproj merge=union
# Standard to msysgit
*.doc diff=astextplain
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain
================================================
FILE: .github/RELEASE.md
================================================
This is an automated SaintCoinach release based on recent changes.
Please note that your Anti-Virus program may detect SaintCoinach as a false positive.
================================================
FILE: .github/workflows/build.yml
================================================
name: Build SaintCoinach
on: [push, pull_request]
concurrency: build-${{ github.ref }}
jobs:
build:
name: Build on Windows
runs-on: windows-2025
steps:
- uses: actions/checkout@v2
- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: '7.x.x'
- name: Define Version
id: define-version
run: |
$env:COMMIT = $env:GITHUB_SHA.Substring(0, 7)
echo "::set-output name=commit::$env:COMMIT"
- name: Restore dependencies
run: dotnet restore
- name: Build
run: dotnet build -c Release
- name: Create Release ZIPs
if: ${{ github.ref == 'refs/heads/master' }}
run: |
mkdir release-out
Compress-Archive -Path .\Godbert\bin\Release\net7.0-windows\* -DestinationPath .\release-out\Godbert.zip -Force
Compress-Archive -Path .\SaintCoinach.Cmd\bin\Release\net7.0\* -DestinationPath .\release-out\SaintCoinach.Cmd.zip -Force
- name: Create Release
uses: softprops/action-gh-release@v1
if: ${{ github.ref == 'refs/heads/master' }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
files: release-out/**
name: Release for ${{ steps.define-version.outputs.commit }}
body_path: .github\RELEASE.md
prerelease: false
tag_name: ${{ steps.define-version.outputs.commit }}
================================================
FILE: .github/workflows/json-validation.yaml
================================================
name: Validate ex JSON definitions
# This workflow is triggered on pushes to the repository.
on: [push, pull_request]
jobs:
build:
name: validate-json
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Install jsonlint
run: sudo npm install jsonlint -g
- name: Validate schemas
run: set -e; for f in $(find SaintCoinach/Definitions/ -name *.json -print); do echo -n "$f - "; jsonlint $f -q; echo "OK!"; done
================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# User-specific files
*.suo
*.user
*.sln.docstates
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
build/
bld/
[Bb]in/
[Oo]bj/
# Roslyn cache directories
*.ide/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
#NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
*.cachefile
.vs/
# Visual Studio profiler
*.psess
*.vsp
*.vspx
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding addin-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# NCrunch
_NCrunch_*
.*crunch*.local.xml
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# If using the old MSBuild-Integrated Package Restore, uncomment this:
#!**/packages/repositories.config
# Windows Azure Build Output
csx/
*.build.csdef
# Windows Store app package directory
AppPackages/
# Others
sql/
*.Cache
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.pfx
*.publishsettings
node_modules/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
*.mdf
*.ldf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
# Microsoft Fakes
FakesAssemblies/
# =========================
# Operating System Files
# =========================
# OSX
# =========================
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear on external disk
.Spotlight-V100
.Trashes
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
# Windows
# =========================
# Windows image file caches
Thumbs.db
ehthumbs.db
# Folder config file
Desktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msm
*.msp
# DX Things
*.tkb
*.StyleCop
# JetBrains
.idea
SaintCoinach.Cmd/Properties/launchSettings.json
================================================
FILE: DotSquish/Alpha.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DotSquish {
internal static class Alpha {
#region DXT3
private static int FloatToInt(float a, int limit) {
// Use ANSI round-to-zero behaviour to get round-to-nearest.
var i = (int)(a + .5f);
if (i < 0)
i = 0;
else if (i > limit)
i = limit;
return i;
}
public static void CompressAlphaDxt3(byte[] rgba, byte[] target, int targetOffset, int mask) {
// Quantise and pack alpha values pairwise.
for (int i = 0; i < 8; ++i) {
// Qnatise down to 4 bits.
var alpha1 = rgba[8 * i + 3] * (15f / 255f);
var alpha2 = rgba[8 * i + 7] * (15f / 255f);
var quant1 = FloatToInt(alpha1, 15);
var quant2 = FloatToInt(alpha2, 15);
// Set alpha to zero where masked.
var bit1 = 1 << (2 * i);
var bit2 = 1 << (2 * i + 1);
if ((mask & bit1) == 0)
quant1 = 0;
if ((mask & bit2) == 0)
quant2 = 0;
// Pack into the byte.
target[targetOffset + i] = (byte)(quant1 | (quant2 << 4));
}
}
public static void DecompressAlphaDxt3(byte[] block, int blockOffset, byte[] target, int targetOffset) {
// Unpack the alpha values pairwise.
for (int i = 0; i < 8; ++i) {
// Quantise down to 4 bits.
var quant = block[blockOffset + i];
// Unpack the values.
var lo = quant & 0x0f;
var hi = quant & 0xf0;
// Convert back up to bytes.
target[targetOffset + 8 * i + 3] = (byte)(lo | (lo << 4));
target[targetOffset + 8 * i + 7] = (byte)(hi | (hi >> 4));
}
}
#endregion
#region DXT5
private static void FixRange(ref int min, ref int max, int steps) {
if (max - min < steps)
max = Math.Min(min + steps, 255);
if (max - min < steps)
min = Math.Max(0, max - steps);
}
private static int FitCodes(byte[] rgba, int mask, byte[] codes, out byte[] indices) {
indices = new byte[16];
// Fit each alpha value to the codebook.
var err = 0;
for (int i = 0; i < 16; ++i) {
// Check this pixel is valid.
var bit = 1 << i;
if ((mask & bit) == 0) {
// Use the first code.
indices[i] = 0;
continue;
}
// Find the least error and corresponding index.
var value = rgba[4 * i + 3];
var least = int.MaxValue;
var index = 0;
for (int j = 0; j < 8; ++j) {
// Get the squared error from this code.
var dist = ((int)value) - ((int)codes[j]);
dist *= dist;
// Compare with the best so far.
if (dist < least) {
least = dist;
index = j;
}
}
// Save this index and accumulate the error.
indices[i] = (byte)index;
err += least;
}
// Return the total error.
return err;
}
private static void WriteAlphaBlock(int alpha0, int alpha1, byte[] indices, byte[] target, int targetOffset) {
// Write the first two bytes.
target[targetOffset + 0] = (byte)alpha0;
target[targetOffset + 1] = (byte)alpha1;
var indOff = 0;
var retOff = 2;
for (int i = 0; i < 2; ++i) {
// Pack 8 3-bit values.
var value = 0;
for (int j = 0; j < 8; ++j) {
var index = indices[indOff++];
value |= (index << 3 * j);
}
// Store in 3 bytes
for (int j = 0; j < 3; ++j) {
var b = (value >> (8 * j)) & 0xFF;
target[targetOffset + retOff++] = (byte)b;
}
}
}
private static void WriteAlphaBlock5(int alpha0, int alpha1, byte[] indices, byte[] target, int targetOffset) {
// Check the relative values of the endpoints.
if (alpha0 > alpha1) {
var swapped = new byte[16];
for (int i = 0; i < 16; ++i) {
var index = indices[i];
if (index == 0)
swapped[i] = 1;
else if (index == 1)
swapped[i] = 0;
else if (index <= 5)
swapped[i] = (byte)(7 - index);
else
swapped[i] = index;
}
// Write the block.
WriteAlphaBlock(alpha1, alpha0, swapped, target, targetOffset);
} else {
// Write the block.
WriteAlphaBlock(alpha0, alpha1, indices, target, targetOffset);
}
}
private static void WriteAlphaBlock7(int alpha0, int alpha1, byte[] indices, byte[] target, int targetOffset) {
// Check the relative values of the endpoints.
if (alpha0 > alpha1) {
var swapped = new byte[16];
for (int i = 0; i < 16; ++i) {
var index = indices[i];
if (index == 0)
swapped[i] = 1;
else if (index == 1)
swapped[i] = 0;
else
swapped[i] = (byte)(9 - index);
}
// Write the block.
WriteAlphaBlock(alpha1, alpha0, swapped, target, targetOffset);
} else {
// Write the block.
WriteAlphaBlock(alpha0, alpha1, indices, target, targetOffset);
}
}
public static void CompressAlphaDxt5(byte[] rgba, int mask, byte[] target, int targetOffset) {
// Get the range for 5-alpha and 7-alpha interpolation.
int min5 = 255, max5 = 0;
int min7 = 255, max7 = 0;
for (int i = 0; i < 16; ++i) {
// Check this pixel is valid.
var bit = 1 << i;
if ((mask & bit) == 0)
continue;
// Incorporate into the min/max.
int value = rgba[4 * i + 3];
if (value < min7)
min7 = value;
if (value > max7)
max7 = value;
if (value != 0 && value < min5)
min5 = value;
if (value != 255 && value > max5)
max5 = value;
}
// Handle the case that no valid range was found.
if (min5 > max5)
min5 = max5;
if (min7 > max7)
min7 = max7;
// Fix the range to be the minimum in each case.
FixRange(ref min5, ref max5, 5);
FixRange(ref min7, ref max7, 7);
// Set up the 5-alpha code book.
var codes5 = new byte[8];
codes5[0] = (byte)min5;
codes5[1] = (byte)max5;
for (int i = 1; i < 5; ++i)
codes5[i + 1] = (byte)(((5 - i) * min5 + i * max5) / 5);
codes5[6] = 0;
codes5[7] = 255;
// Set up the 7-alpha code book.
var codes7 = new byte[8];
codes7[0] = (byte)min7;
codes7[1] = (byte)max7;
for (int i = 1; i < 7; ++i)
codes7[i + 1] = (byte)(((7 - i) * min7 + i * max7) / 7);
// Fit the data to both code books.
byte[] indices5, indices7;
var err5 = FitCodes(rgba, mask, codes5, out indices5);
var err7 = FitCodes(rgba, mask, codes7, out indices7);
// Save the block with least error.
if (err5 <= err7)
WriteAlphaBlock5(min5, max5, indices5, target, targetOffset);
else
WriteAlphaBlock7(min7, max7, indices7, target, targetOffset);
}
public static void DecompressAlphaDxt5(byte[] block, int blockOffset, byte[] target, int targetOffset) {
// Get the two alpha values.
var alpha0 = block[blockOffset + 0];
var alpha1 = block[blockOffset + 1];
// Compare the values to build the codebook.
var codes = new byte[8];
codes[0] = alpha0;
codes[1] = alpha1;
if (alpha0 <= alpha1) {
// Use the 5-alpha codebook.
for (int i = 1; i < 5; ++i)
codes[1 + i] = (byte)(((5 - i) * alpha0 + i * alpha1) / 5);
codes[6] = 0;
codes[7] = 255;
} else {
// Use the 7-alpha codebook.
for (int i = 1; i < 7; ++i)
codes[1 + i] = (byte)(((7 - i) * alpha0 + i * alpha1) / 7);
}
// Decode the incdices
var indices = new byte[16];
var blOff = 2;
var indOff = 0;
for (int i = 0; i < 2; ++i) {
// Grab 3 bytes
int value = 0;
for (int j = 0; j < 3; ++j) {
var b = block[blockOffset + blOff++];
value |= (b << 8 * j);
}
// Unpack 8 3-bit values from it
for (int j = 0; j < 8; ++j) {
var index = (value >> 3 * j) & 0x7;
indices[indOff++] = (byte)index;
}
}
// Write out the index codebook values.
for (int i = 0; i < 16; ++i)
target[targetOffset + 4 * i + 3] = codes[indices[i]];
}
#endregion
}
}
================================================
FILE: DotSquish/ClusterFit.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DotSquish {
internal class ClusterFit : ColourFit {
const int MaxIterations = 8;
#region Fields
private int _IterationCount;
private Vector3 _Principle;
private byte[] _Order = new byte[16 * MaxIterations];
private Vector4[] _PointsWeight = new Vector4[16];
private Vector4 _XSumWSum;
private Vector4 _Metric;
private Vector4 _BestError;
#endregion
#region Constructor
protected ClusterFit(ColourSet colours, SquishOptions flags) : base(colours, flags) {
// Set the iteration count.
this._IterationCount = flags.HasFlag(SquishOptions.ColourIterativeClusterFit) ? MaxIterations : 1;
// Initialise the best error.
this._BestError = new Vector4(float.MaxValue);
// Initialize the metric
var perceptual = flags.HasFlag(SquishOptions.ColourMetricPerceptual);
if (perceptual)
this._Metric = new Vector4(0.2126f, 0.7152f, 0.0722f, 0.0f);
else
this._Metric = new Vector4(1.0f);
// Get the covariance matrix.
var covariance = Sym3x3.ComputeWeightedCovariance(colours.Count, colours.Points, colours.Weights);
// Compute the principle component
this._Principle = Sym3x3.ComputePrincipledComponent(covariance);
}
#endregion
#region Methods
protected bool ConstructOrdering(Vector3 axis, int iteration) {
// Build the list of dot products.
var dps = new float[16];
var ordOff = 16 * iteration;
for (int i = 0; i < _Colours.Count; ++i) {
dps[i] = Vector3.Dot(_Colours.Points[i], axis);
this._Order[ordOff + i] = (byte)i;
}
// Stable sort using them.
for (int i = 0; i < _Colours.Count; ++i) {
for (int j = i; j > 0 && dps[j] < dps[j - 1]; --j) {
var _dps = dps[j];
var _order = _Order[ordOff + j];
dps[j] = dps[j - 1];
dps[j - 1] = _dps;
_Order[ordOff + j] = _Order[ordOff + j - 1];
_Order[ordOff + j - 1] = _order;
}
}
// Check this ordering is unique
for (int it = 0; it < iteration; ++it) {
var prevOff = 16 * it;
var same = true;
for (int i = 0; i < _Colours.Count; ++i) {
if (_Order[ordOff + i] != _Order[prevOff + i]) {
same = false;
break;
}
}
if (same)
return false;
}
// Copy the ordering and weight all the points
this._XSumWSum = new Vector4(0f);
for (int i = 0; i < _Colours.Count; ++i) {
var j = _Order[ordOff + i];
var p = new Vector4(_Colours.Points[j].X, _Colours.Points[j].Y, _Colours.Points[j].Z, 1f);
var w = new Vector4(_Colours.Weights[j]);
var x = p * w;
this._PointsWeight[i] = x;
this._XSumWSum += x;
}
return true;
}
protected override void Compress3(byte[] block) {
// Declare variables
var count = _Colours.Count;
var zero = new Vector4(0f);
var half = new Vector4(.5f);
var one = new Vector4(1f);
var two = new Vector4(2f);
var half_half2 = new Vector4(.5f, .5f, .5f, .25f);
var grid = new Vector4(31f, 63f, 31f, 0f);
var gridrcp = new Vector4(1f / 31f, 1f / 63f, 1f / 31f, 0f);
// Prepare the ordering using the principle axis.
ConstructOrdering(_Principle, 0);
// Check all possible clusters and iterate on the total order.
var bestStart = zero;
var bestEnd = zero;
var bestError = this._BestError;
var bestIndices = new byte[16];
//var bestIteration = 0;
//int besti = 0, bestj = 0;
//// Loop over iterations (we avoid the case that all points in first or last cluster)
//for (int iterationIndex = 0; ; ) {
// throw new NotImplementedException();
//}
throw new NotImplementedException();
}
protected override void Compress4(byte[] block) {
throw new NotImplementedException();
}
#endregion
}
}
================================================
FILE: DotSquish/ColourBlock.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DotSquish {
internal static class ColourBlock {
private static int Unpack565(byte[] packed, int packedOffset, byte[] colour, int colourOffset) {
// Build the packed value.
var value = (int)packed[packedOffset] | ((int)packed[packedOffset + 1] << 8);
// Get the components in the stored range.
var red = (byte)((value >> 11) & 0x1F);
var green = (byte)((value >> 5) & 0x3F);
var blue = (byte)(value & 0x1F);
// Scale up to 8 bits
colour[colourOffset + 0] = (byte)((red << 3) | (red >> 2));
colour[colourOffset + 1] = (byte)((green << 2) | (green >> 4));
colour[colourOffset + 2] = (byte)((blue << 3) | (blue >> 2));
colour[colourOffset + 3] = 255;
return value;
}
public static byte[] DecompressColour(byte[] block, int blockOffset, bool isDxt1) {
// Unpack the endpoints
var codes = new byte[16];
var a = Unpack565(block, blockOffset + 0, codes, 0);
var b = Unpack565(block, blockOffset + 2, codes, 4);
// Generate the midpoints.
for (int i = 0; i < 3; ++i) {
var c = codes[i];
var d = codes[4 + i];
if (isDxt1 && a <= b) {
codes[8 + i] = (byte)((c + d) / 2);
codes[12 + i] = 0;
} else {
codes[8 + i] = (byte)(((2 * c) + d) / 3);
codes[12 + i] = (byte)((c + (2 * d)) / 3);
}
}
// Fill in alpha for the intermediate values.
codes[8 + 3] = 255;
codes[12 + 3] = (byte)((isDxt1 && a <= b) ? 0 : 255);
// Unpack the indices
var indices = new byte[16];
for (int i = 0; i < 4; i++) {
var packed = block[blockOffset + 4 + i];
indices[4 * i + 0] = (byte)(packed & 0x3);
indices[4 * i + 1] = (byte)((packed >> 2) & 0x3);
indices[4 * i + 2] = (byte)((packed >> 4) & 0x3);
indices[4 * i + 3] = (byte)((packed >> 6) & 0x3);
}
// Store the colours
var rgba = new byte[4 * 16];
for (int i = 0; i < 16; ++i) {
var offset = 4 * indices[i];
for (int j = 0; j < 4; ++j)
rgba[4 * i + j] = codes[offset + j];
}
return rgba;
}
}
}
================================================
FILE: DotSquish/ColourFit.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DotSquish {
internal abstract class ColourFit {
#region Fields
protected ColourSet _Colours;
private SquishOptions _Flags;
#endregion
#region Constructor
protected ColourFit(ColourSet colours, SquishOptions flags) {
this._Colours = colours;
this._Flags = flags;
}
#endregion
#region Public
public void Compress(ref byte[] block) {
if (this._Flags.HasFlag(SquishOptions.DXT1)) {
Compress3(block);
if (!this._Colours.IsTransparent)
Compress4(block);
} else
Compress4(block);
}
#endregion
#region Protected
protected abstract void Compress3(byte[] block);
protected abstract void Compress4(byte[] block);
#endregion
}
}
================================================
FILE: DotSquish/ColourSet.cs
================================================
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DotSquish {
internal class ColourSet {
#region Fields
private int _Count = 0;
private Vector3[] _Points = new Vector3[16];
private float[] _Weights = new float[16];
private int[] _Remap = new int[16];
private bool _IsTransparent = false;
#endregion
#region Properties
public int Count { get { return this._Count; } }
public Vector3[] Points { get { return this._Points; } }
public float[] Weights { get { return this._Weights; } }
public bool IsTransparent { get { return this._IsTransparent; } }
#endregion
#region Constructor
public ColourSet(byte[] rgba, int mask, SquishOptions flags) {
// Check the compression mode.
var isDxt1 = flags.HasFlag(SquishOptions.DXT1);
var weightByAlpha = flags.HasFlag(SquishOptions.WeightColourByAlpha);
// Create he minimal set.
for (int i = 0; i < 16; ++i) {
// Check this pixel is enabled.
int bit = 1 << i;
if ((mask & bit) == 0) {
this._Remap[i] = -1;
continue;
}
// Check for transparent pixels when using DXT1.
if (isDxt1 && rgba[4 * i + 3] < 128) {
this._Remap[i] = -1;
this._IsTransparent = true;
}
// Loop over previous points for a match.
for (int j = 0; ; ++j) {
// Allocate a new point.
if (j == i) {
// Normalise coordinates to [0,1].
var x = rgba[4 * i] / 255f;
var y = rgba[4 * i + 1] / 255f;
var z = rgba[4 * i + 2] / 255f;
// Ensure there is always a non-zero weight even for zero alpha.
var w = (rgba[4 * i + 3] + 1) / 256f;
// Add the point.
this._Points[this._Count] = new Vector3(x, y, z);
this._Weights[this._Count] = w;
this._Remap[i] = this._Count;
// Advance.
++this._Count;
break;
}
// Check for a match.
int oldBit = 1 << j;
var match = ((mask & oldBit) != 0)
&& (rgba[4 * i] == rgba[4 * j])
&& (rgba[4 * i + 1] == rgba[4 * j + 1])
&& (rgba[4 * i + 3] == rgba[4 * j + 2])
&& (rgba[4 * j + 3] >= 128 || !isDxt1);
if (match) {
// Get index of the match.
var index = this._Remap[j];
// Ensure there is always a non-zero weight even for zero alpha.
var w = (rgba[4 * i + 3] + 1) / 256f;
// Map this point and increase the weight.
this._Weights[index] += (weightByAlpha ? w : 1f);
this._Remap[i] = index;
break;
}
}
}
// Square root the weights.
for (int i = 0; i < this._Count; ++i)
this._Weights[i] = (float)Math.Sqrt(this._Weights[i]);
}
#endregion
#region Methods
public void RemapIndices(byte[] source, byte[] target, int targetOffset) {
for (int i = 0; i < 16; ++i) {
var j = this._Remap[i];
if (j == -1)
target[i + targetOffset] = 3;
else
target[i + targetOffset] = source[j];
}
}
#endregion
}
}
================================================
FILE: DotSquish/DotSquish.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ProjectGuid>{F9681545-4BEA-4FD3-9AB9-A67BD37AB36D}</ProjectGuid>
<TargetFramework>net7.0</TargetFramework>
<OutputPath>bin\$(Configuration)\</OutputPath>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugType>full</DebugType>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Drawing.Common" Version="7.0.0" />
</ItemGroup>
</Project>
================================================
FILE: DotSquish/Flags.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DotSquish {
[Flags]
public enum SquishOptions {
/// <summary>
/// Use DXT1 compression.
/// </summary>
DXT1 = (1 << 0),
/// <summary>
/// Use DXT3 compression.
/// </summary>
DXT3 = (1 << 1),
/// <summary>
/// Use DXT5 compression.
/// </summary>
DXT5 = (1 << 2),
/// <summary>
/// Use a very slow but very high quality colour compressor.
/// </summary>
ColourIterativeClusterFit = (1 << 3),
/// <summary>
/// Use a slow but high quality colour compressor (default).
/// </summary>
ColourClusterFit = (1 << 4),
/// <summary>
/// Use a fast but low quality colour compressor.
/// </summary>
ColourRangeFit = (1 << 5),
/// <summary>
/// Use a perceptual metric for colour error (default).
/// </summary>
ColourMetricPerceptual = (1 << 6),
/// <summary>
/// Use a uniform metric for colour error.
/// </summary>
ColourMetricUniform = (1 << 7),
/// <summary>
/// Weight the colour by alpha during cluster fit (off by default).
/// </summary>
WeightColourByAlpha = (1 << 8),
}
public static class SquishOptionsExtensions {
public static SquishOptions GetMethod(this SquishOptions self) {
return (self & (SquishOptions.DXT1 | SquishOptions.DXT3 | SquishOptions.DXT5));
}
public static SquishOptions GetFit(this SquishOptions self) {
return (self & (SquishOptions.ColourIterativeClusterFit | SquishOptions.ColourClusterFit | SquishOptions.ColourRangeFit));
}
public static SquishOptions GetMetric(this SquishOptions self) {
return (self & (SquishOptions.ColourMetricPerceptual | SquishOptions.ColourMetricUniform));
}
public static SquishOptions GetExtra(this SquishOptions self) {
return (self & (SquishOptions.WeightColourByAlpha));
}
}
}
================================================
FILE: DotSquish/Maths.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DotSquish {
internal struct Vector3 {
public float X, Y, Z;
public Vector3(float value) {
this.X = this.Y = this.Z = value;
}
public Vector3(float x, float y, float z) {
this.X = x;
this.Y = y;
this.Z = z;
}
public static Vector3 operator +(Vector3 v1, Vector3 v2) {
return new Vector3(
v1.X + v2.X,
v1.Y + v2.Y,
v1.Z + v2.Z);
}
public static Vector3 operator -(Vector3 v) {
return new Vector3(
- v.X,
- v.Y,
- v.Z);
}
public static Vector3 operator -(Vector3 v1, Vector3 v2) {
return new Vector3(
v1.X - v2.X,
v1.Y - v2.Y,
v1.Z - v2.Z);
}
public static Vector3 operator *(Vector3 v1, Vector3 v2) {
return new Vector3(
v1.X * v2.X,
v1.Y * v2.Y,
v1.Z * v2.Z);
}
public static Vector3 operator *(Vector3 v1, float v2) {
return new Vector3(
v1.X * v2,
v1.Y * v2,
v1.Z * v2);
}
public static Vector3 operator *(float v1, Vector3 v2) {
return (v2 * v1);
}
public static Vector3 operator /(Vector3 v1, Vector3 v2) {
return new Vector3(
v1.X / v2.X,
v1.Y / v2.Y,
v1.Z / v2.Z);
}
public static Vector3 operator /(Vector3 v1, float v2) {
return new Vector3(
v1.X / v2,
v1.Y / v2,
v1.Z / v2);
}
public static float Dot(Vector3 v1, Vector3 v2) {
return v1.X * v2.X + v1.Y * v2.Y + v1.Z * v2.Z;
}
public static Vector3 Min(Vector3 v1, Vector3 v2) {
return new Vector3(
(float)Math.Min(v1.X, v2.X),
(float)Math.Min(v1.Y, v2.Y),
(float)Math.Min(v1.Z, v2.Z));
}
public static Vector3 Max(Vector3 v1, Vector3 v2) {
return new Vector3(
(float)Math.Max(v1.X, v2.X),
(float)Math.Max(v1.Y, v2.Y),
(float)Math.Max(v1.Z, v2.Z));
}
public static Vector3 Max(Vector3 v) {
return new Vector3(
(float)(v.X > 0f ? Math.Floor(v.X) : Math.Ceiling(v.X)),
(float)(v.Y > 0f ? Math.Floor(v.Y) : Math.Ceiling(v.Y)),
(float)(v.Z > 0f ? Math.Floor(v.Z) : Math.Ceiling(v.Z)));
}
}
internal struct Vector4 {
public float X, Y, Z, W;
public Vector4(float value) {
this.X = this.Y = this.Z = this.W = value;
}
public Vector4(float x, float y, float z, float w) {
this.X = x;
this.Y = y;
this.Z = z;
this.W = w;
}
public static Vector4 operator +(Vector4 v1, Vector4 v2) {
return new Vector4(
v1.X + v2.X,
v1.Y + v2.Y,
v1.Z + v2.Z,
v1.W + v2.W);
}
public static Vector4 operator -(Vector4 v) {
return new Vector4(
-v.X,
-v.Y,
-v.Z,
-v.W);
}
public static Vector4 operator -(Vector4 v1, Vector4 v2) {
return new Vector4(
v1.X - v2.X,
v1.Y - v2.Y,
v1.Z - v2.Z,
v1.W - v2.W);
}
public static Vector4 operator *(Vector4 v1, Vector4 v2) {
return new Vector4(
v1.X * v2.X,
v1.Y * v2.Y,
v1.Z * v2.Z,
v1.W * v2.W);
}
public static Vector4 operator *(Vector4 v1, float v2) {
return new Vector4(
v1.X * v2,
v1.Y * v2,
v1.Z * v2,
v1.W * v2);
}
public static Vector4 operator *(float v1, Vector4 v2) {
return (v2 * v1);
}
public static Vector4 operator /(Vector4 v1, Vector4 v2) {
return new Vector4(
v1.X / v2.X,
v1.Y / v2.Y,
v1.Z / v2.Z,
v1.W / v2.W);
}
public static Vector4 operator /(Vector4 v1, float v2) {
return new Vector4(
v1.X / v2,
v1.Y / v2,
v1.Z / v2,
v1.W / v2);
}
}
internal class Sym3x3 {
private float[] _X = new float[6];
public float this[int index] {
get { return this._X[index]; }
set { this._X[index] = value; }
}
public Sym3x3() { }
public Sym3x3(float s) {
for (int i = 0; i < 6; ++i)
this._X[i] = s;
}
public static Sym3x3 ComputeWeightedCovariance(int n, Vector3[] points, float[] weights) {
// Compute the centroid.
var total = 0f;
var centroid = new Vector3(0f);
for (int i = 0; i < n; ++i) {
total += weights[i];
centroid += weights[i] * points[i];
}
centroid /= total;
// Accumulate the covariance matrix.
var covariance = new Sym3x3(0f);
for (int i = 0; i < n; ++i) {
var a = points[i] - centroid;
var b = weights[i] * a;
covariance[0] += a.X * b.X;
covariance[1] += a.X * b.Y;
covariance[2] += a.X * b.Z;
covariance[3] += a.Y * b.Y;
covariance[4] += a.Y * b.Z;
covariance[5] += a.Z * b.Z;
}
return covariance;
}
private static Vector3 GetMultiplicity1Evector(Sym3x3 matrix, float evalue) {
// Compute M
var m = new Sym3x3();
m[0] = matrix[0] - evalue;
m[1] = matrix[1];
m[2] = matrix[2];
m[3] = matrix[3] - evalue;
m[4] = matrix[4];
m[5] = matrix[5] - evalue;
// Compute U
var u = new Sym3x3();
u[0] = (m[3] * m[5]) - (m[4] * m[4]);
u[1] = (m[2] * m[4]) - (m[1] * m[5]);
u[2] = (m[1] * m[4]) - (m[2] * m[3]);
u[3] = (m[0] * m[5]) - (m[2] * m[2]);
u[4] = (m[1] * m[2]) - (m[4] * m[0]);
u[5] = (m[0] * m[3]) - (m[1] * m[1]);
// Find the largest component.
var mc = Math.Abs(u[0]);
var mi = 0;
for (int i = 1; i < 6; ++i) {
var c = Math.Abs(u[i]);
if (c > mc) {
mc = c;
mi = i;
}
}
// Pick the column with this component.
switch (mi) {
case 0:
return new Vector3(u[0], u[1], u[2]);
case 1:
case 3:
return new Vector3(u[1], u[3], u[4]);
default:
return new Vector3(u[2], u[4], u[5]);
}
}
private static Vector3 GetMultiplicity2Evector(Sym3x3 matrix, float evalue) {
// Compute M
var m = new Sym3x3();
m[0] = matrix[0] - evalue;
m[1] = matrix[1];
m[2] = matrix[2];
m[3] = matrix[3] - evalue;
m[4] = matrix[4];
m[5] = matrix[5] - evalue;
// Find the largest component.
var mc = Math.Abs(m[0]);
var mi = 0;
for (int i = 1; i < 6; ++i) {
var c = Math.Abs(m[i]);
if (c > mc) {
mc = c;
mi = i;
}
}
// pick the first eigenvector based on this index
switch (mi) {
case 0:
case 1:
return new Vector3(-m[1], m[0], 0.0f);
case 2:
return new Vector3(m[2], 0.0f, -m[0]);
case 3:
case 4:
return new Vector3(0.0f, -m[4], m[3]);
default:
return new Vector3(0.0f, -m[5], m[4]);
}
}
public static Vector3 ComputePrincipledComponent(Sym3x3 matrix) {
// Compute the cubic coefficients
var c0 =
(matrix[0] * matrix[3] * matrix[5])
+ (matrix[1] * matrix[2] * matrix[4] * 2f)
- (matrix[0] * matrix[4] * matrix[4])
- (matrix[3] * matrix[2] * matrix[2])
- (matrix[5] * matrix[1] * matrix[1]);
var c1 =
(matrix[0] * matrix[3])
+ (matrix[0] * matrix[5])
+ (matrix[3] * matrix[5])
- (matrix[1] * matrix[1])
- (matrix[2] * matrix[2])
- (matrix[4] * matrix[4]);
var c2 = matrix[0] + matrix[3] + matrix[5];
// Compute the quadratic coefficients
var a = c1 - ((1f / 3f) * c2 * c2);
var b = ((-2f / 27f) * c2 * c2 * c2) + ((1f / 3f) * c1 * c2) - c0;
// Compute the root count check;
var Q = (.25f * b * b) + ((1f / 27f) * a * a * a);
// Test the multiplicity.
if (float.Epsilon < Q)
return new Vector3(1f); // Only one root, which implies we have a multiple of the identity.
else if (Q < -float.Epsilon) {
// Three distinct roots
var theta = Math.Atan2(Math.Sqrt(Q), -.5f * b);
var rho = Math.Sqrt((.25f * b * b) - Q);
var rt = Math.Pow(rho, 1f / 3f);
var ct = Math.Cos(theta / 3f);
var st = Math.Sin(theta / 3f);
var l1 = ((1f / 3f) * c2) + (2f * rt * ct);
var l2 = ((1f / 3f) * c2) - (rt * (ct + (Math.Sqrt(3f) * st)));
var l3 = ((1f / 3f) * c2) - (rt * (ct - (Math.Sqrt(3f) * st)));
// Pick the larger.
if (Math.Abs(l2) > Math.Abs(l1))
l1 = l2;
if (Math.Abs(l3) > Math.Abs(l1))
l1 = l3;
// Get the eigenvector
return GetMultiplicity1Evector(matrix, (float)l1);
} else { // Q very close to 0
// Two roots
double rt;
if (b < 0.0f)
rt = -Math.Pow(-.5f * b, 1f / 3f);
else
rt = Math.Pow(.5f * b, 1f / 3f);
var l1 = ((1f / 3f) * c2) + rt;
var l2 = ((1f / 3f) * c2) - (2f * rt);
// Get the eigenvector
if (Math.Abs(l1) > Math.Abs(l2))
return GetMultiplicity2Evector(matrix, (float)l1);
else
return GetMultiplicity1Evector(matrix, (float)l2);
}
}
}
}
================================================
FILE: DotSquish/Squish.cs
================================================
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DotSquish {
public static class Squish {
public static int GetStorageRequirements(int width, int height, SquishOptions flags) {
var blockCount = ((width + 3) / 4) * ((height + 3) / 4);
var blockSize = flags.HasFlag(SquishOptions.DXT1) ? 8 : 16;
return blockCount * blockSize;
}
#region On buffer
public static byte[] CompressBlock(byte[] rgba, SquishOptions flags) {
return CompressBlockMasked(rgba, 0xFFFF, flags);
}
public static byte[] CompressBlockMasked(byte[] rgba, int mask, SquishOptions flags) {
throw new NotImplementedException();
}
public static byte[] DecompressBlock(byte[] block, int blockOffset, SquishOptions flags) {
// Get the block locations
var colOff = blockOffset;
var alphaOff = blockOffset;
if ((flags & (SquishOptions.DXT3 | SquishOptions.DXT5)) != 0)
colOff += 8;
// Decompress colour.
var rgba = ColourBlock.DecompressColour(block, colOff, flags.HasFlag(SquishOptions.DXT1));
// Decompress alpha seperately if necessary.
if (flags.HasFlag(SquishOptions.DXT3))
Alpha.DecompressAlphaDxt3(block, alphaOff, rgba, 0);
else if (flags.HasFlag(SquishOptions.DXT5))
Alpha.DecompressAlphaDxt5(block, alphaOff, rgba, 0);
return rgba;
}
public static byte[] CompressImage(byte[] rgba, int width, int height, SquishOptions flags) {
throw new NotImplementedException();
}
public static byte[] DecompressImage(byte[] blocks, int width, int height, SquishOptions flags) {
return DecompressImage(blocks, 0, width, height, flags);
}
public static byte[] DecompressImage(byte[] blocks, int offset, int width, int height, SquishOptions flags) {
var argb = new byte[4 * width * height];
var bytesPerBlock = flags.HasFlag(SquishOptions.DXT1) ? 8 : 16;
var blockOffset = offset;
// Loop over blocks.
for (int y = 0; y < height; y += 4) {
for (int x = 0; x < width; x += 4) {
// Decompress the block.
var targetRgba = DecompressBlock(blocks, blockOffset, flags);
// Write the decompressed pixels to the correct image locations.
var sourcePixelOffset = 0;
for (int py = 0; py < 4; ++py) {
for (int px = 0; px < 4; ++px) {
// Get the target location.
var sx = x + px;
var sy = y + py;
if (sx < width && sy < height) {
var targetPixelOffset = 4 * ((width * sy) + sx);
// Copy the rgba value
argb[targetPixelOffset + 0] = targetRgba[sourcePixelOffset + 2];
argb[targetPixelOffset + 1] = targetRgba[sourcePixelOffset + 1];
argb[targetPixelOffset + 2] = targetRgba[sourcePixelOffset + 0];
argb[targetPixelOffset + 3] = targetRgba[sourcePixelOffset + 3];
}
sourcePixelOffset += 4;
}
}
// advance
blockOffset += bytesPerBlock;
}
}
return argb;
}
public static Image DecompressToBitmap(byte[] blocks, int width, int height, SquishOptions flags) {
return DecompressToBitmap(blocks, 0, width, height, flags);
}
public static unsafe Image DecompressToBitmap(byte[] blocks, int offset, int width, int height, SquishOptions flags) {
var fullBuffer = new byte[4 * width * height];
var bufferOffset = 0;
var bytesPerBlock = flags.HasFlag(SquishOptions.DXT1) ? 8 : 16;
var blockOffset = offset;
// Loop over blocks.
for (int y = 0; y < height; y += 4) {
for (int x = 0; x < width; x += 4) {
// Decompress the block.
var targetRgba = DecompressBlock(blocks, blockOffset, flags);
// Write the decompressed pixels to the correct image locations.
var sourcePixelOffset = 0;
for (int py = 0; py < 4; ++py) {
for (int px = 0; px < 4; ++px) {
// Get the target location.
var sx = x + px;
var sy = y + py;
if (sx < width && sy < height) {
var i = 4 * (sx + (sy * width));
fullBuffer[bufferOffset + i + 0] = targetRgba[sourcePixelOffset + 2];
fullBuffer[bufferOffset + i + 1] = targetRgba[sourcePixelOffset + 1];
fullBuffer[bufferOffset + i + 2] = targetRgba[sourcePixelOffset + 0];
fullBuffer[bufferOffset + i + 3] = targetRgba[sourcePixelOffset + 3];
}
sourcePixelOffset += 4; // Skip this pixel as it is outside the image.
}
}
// advance
blockOffset += bytesPerBlock;
}
}
Image ret;
fixed (byte* p = fullBuffer) {
var ptr = (IntPtr)p;
var tempImage = new Bitmap(width, height, 4 * width, System.Drawing.Imaging.PixelFormat.Format32bppArgb, ptr);
ret = new Bitmap(tempImage);
}
return ret;
}
#endregion
#region On stream
public static void CompressBlock(Stream input, Stream output, SquishOptions flags) {
CompressBlockMasked(input, output, 0xFFFF, flags);
}
public static void CompressBlockMasked(Stream input, Stream output, int mask, SquishOptions flags){
throw new NotImplementedException();
}
public static void DecompressBlock(Stream input, Stream output, SquishOptions flags) {
throw new NotImplementedException();
}
public static void CompressImage(Stream input, Stream output, int width, int height, SquishOptions flags) {
throw new NotImplementedException();
}
public static void DecompressImage(Stream input, Stream output, int width, int height, SquishOptions flags) {
throw new NotImplementedException();
}
#endregion
}
}
================================================
FILE: Godbert/App.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="Godbert.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
</startup>
<userSettings>
<Godbert.Properties.Settings>
<setting name="GamePath" serializeAs="String">
<value/>
</setting>
</Godbert.Properties.Settings>
</userSettings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Data.SQLite" publicKeyToken="db937bc2d44ff139" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-1.0.96.0" newVersion="1.0.96.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
================================================
FILE: Godbert/App.xaml
================================================
<Application x:Class="Godbert.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>
================================================
FILE: Godbert/App.xaml.cs
================================================
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using Ookii.Dialogs.Wpf;
namespace Godbert {
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application {
protected override void OnStartup(StartupEventArgs e) {
if (!RequestGamePath()) {
MainWindow = null;
Shutdown(1);
return;
}
SaintCoinach.Graphics.Viewer.Interop.HavokInterop.InitializeMTA();
base.OnStartup(e);
this.Exit += App_Exit;
}
private void App_Exit(object sender, ExitEventArgs e) {
Settings.Default.Save();
}
#region Startup
private static bool RequestGamePath() {
string path = Godbert.Properties.Settings.Default.GamePath;
if (!IsValidGamePath(path)) {
string programDir;
if (Environment.Is64BitProcess)
programDir = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86);
else
programDir = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
path = System.IO.Path.Combine(programDir, "SquareEnix", "FINAL FANTASY XIV - A Realm Reborn");
if (IsValidGamePath(path)) {
var msgResult = System.Windows.MessageBox.Show(string.Format("Found game installation at \"{0}\". Is this correct?", path), "Confirm game installation", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.Yes);
if (msgResult == MessageBoxResult.Yes) {
Godbert.Properties.Settings.Default.GamePath = path;
Godbert.Properties.Settings.Default.Save();
return true;
}
path = null;
}
}
VistaFolderBrowserDialog dlg = null;
while (!IsValidGamePath(path)) {
var result = (dlg ?? (dlg = new VistaFolderBrowserDialog {
Description = "Please select the directory of your FFXIV:ARR game installation (should contain 'boot' and 'game' directories).",
ShowNewFolderButton = false,
})).ShowDialog();
if (!result.GetValueOrDefault(false)) {
var msgResult = System.Windows.MessageBox.Show("Cannot continue without a valid game installation, quit the program?", "That's no good", MessageBoxButton.YesNo, MessageBoxImage.Error, MessageBoxResult.No);
if (msgResult == MessageBoxResult.Yes)
return false;
}
path = dlg.SelectedPath;
}
Godbert.Properties.Settings.Default.GamePath = path;
Godbert.Properties.Settings.Default.Save();
return true;
}
public static bool IsValidGamePath(string path) {
if (string.IsNullOrWhiteSpace(path))
return false;
if (!Directory.Exists(path))
return false;
return File.Exists(Path.Combine(path, "game", "ffxivgame.ver"));
}
#endregion
}
}
================================================
FILE: Godbert/Commands/DelegateCommand.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Godbert.Commands {
public class DelegateCommand : System.Windows.Input.ICommand {
#region Fields
private Action _Target;
#endregion
#region Constructor
public DelegateCommand(Action target) {
_Target = target;
}
#endregion
#region ICommand Members
public bool CanExecute(object parameter) {
return true;
}
public void Execute(object parameter) {
_Target();
}
#endregion
#region ICommand Members
event EventHandler System.Windows.Input.ICommand.CanExecuteChanged {
add { }
remove { }
}
#endregion
}
public class DelegateCommand<T> : System.Windows.Input.ICommand {
#region Fields
private Action<T> _Target;
#endregion
#region Constructor
public DelegateCommand(Action<T> target) {
_Target = target;
}
#endregion
#region ICommand Members
public bool CanExecute(object parameter) {
return parameter == null || (parameter is T);
}
public void Execute(object parameter) {
_Target((T)parameter);
}
#endregion
#region ICommand Members
event EventHandler System.Windows.Input.ICommand.CanExecuteChanged {
add { }
remove { }
}
#endregion
}
}
================================================
FILE: Godbert/Controls/AttachedImage.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;
namespace Godbert.Controls {
public static class AttachedImage {
public static readonly DependencyProperty ImageProperty = DependencyProperty.RegisterAttached("Image",
typeof(SaintCoinach.Imaging.ImageFile), typeof(AttachedImage), new PropertyMetadata(AttachedImageChanged));
public static readonly DependencyProperty ImageTypeProperty = DependencyProperty.RegisterAttached("ImageType",
typeof(string), typeof(AttachedImage), new PropertyMetadata(AttachedImageChanged));
public static readonly DependencyProperty UseImageTypeProperty = DependencyProperty.RegisterAttached("UseImageType",
typeof(bool), typeof(AttachedImage), new PropertyMetadata(true, AttachedImageChanged));
public static readonly DependencyProperty IsSizeRestrictedProperty = DependencyProperty.RegisterAttached("IsSizeRestricted",
typeof(bool?), typeof(AttachedImage), new PropertyMetadata(null, AttachedImageChanged));
private static readonly Dictionary<string, WeakReference<ImageSource>> _SourceCache =
new Dictionary<string, WeakReference<ImageSource>>();
public static bool GetUseImageType(DependencyObject o) {
return (bool)o.GetValue(UseImageTypeProperty);
}
public static void SetUseImageType(DependencyObject o, bool newValue) {
o.SetValue(UseImageTypeProperty, newValue);
}
public static bool? GetIsSizeRestricted(DependencyObject o) {
return (bool?)o.GetValue(IsSizeRestrictedProperty);
}
public static void SetIsSizeRestricted(DependencyObject o, bool? newValue) {
o.SetValue(IsSizeRestrictedProperty, newValue);
}
public static SaintCoinach.Imaging.ImageFile GetImage(DependencyObject o) {
return (SaintCoinach.Imaging.ImageFile)o.GetValue(ImageProperty);
}
public static void SetImage(DependencyObject o, SaintCoinach.Imaging.ImageFile v) {
o.SetValue(ImageProperty, v);
}
public static string GetImageType(DependencyObject o) {
return (string)o.GetValue(ImageTypeProperty);
}
public static void SetImageType(DependencyObject o, string v) {
o.SetValue(ImageTypeProperty, v);
}
private static void AttachedImageChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) {
var img = (Image)o;
var srcImage = GetImage(o);
var srcImageType = GetImageType(o);
var useSrcImageType = GetUseImageType(o);
if (!useSrcImageType)
srcImageType = null;
double w = double.PositiveInfinity, h = double.PositiveInfinity;
if (srcImage != null) {
var useImage = GetImageOfType(srcImage, srcImageType);
w = useImage.Width;
h = useImage.Height;
img.Source = GetAsImageSource(useImage);
} else
img.Source = null;
var sizeRestrict = GetIsSizeRestricted(o);
if (sizeRestrict.HasValue) {
if (sizeRestrict.Value == false)
w = h = double.PositiveInfinity;
img.MaxWidth = w;
img.MaxHeight = h;
}
}
private static ImageSource GetAsImageSource(SaintCoinach.Imaging.ImageFile file) {
if (file == null)
return null;
var key = file.Path;
WeakReference<ImageSource> targetRef;
ImageSource target;
if (!_SourceCache.TryGetValue(key, out targetRef) || !targetRef.TryGetTarget(out target)) {
target = CreateSource(file);
if (targetRef == null)
_SourceCache.Add(key, new WeakReference<ImageSource>(target));
else
targetRef.SetTarget(target);
}
return target;
}
private static SaintCoinach.Imaging.ImageFile GetImageOfType(SaintCoinach.Imaging.ImageFile original,
string type) {
if (string.IsNullOrWhiteSpace(type))
return original;
if (!original.Path.StartsWith("ui/icon/"))
return original; // XXX: Exception instead?
var dirPath = original.Path.Substring(0, "ui/icon/000000/".Length);
var targetPath = string.Format("{0}{1}/{2}", dirPath, type, original.Path.Split('/').Last());
SaintCoinach.IO.File typeFile;
if (original.Pack.Collection.TryGetFile(targetPath, out typeFile))
return (SaintCoinach.Imaging.ImageFile)typeFile;
return original;
}
private static ImageSource CreateSource(SaintCoinach.Imaging.ImageFile file) {
var argb = SaintCoinach.Imaging.ImageConverter.GetA8R8G8B8(file);
return BitmapSource.Create(
file.Width, file.Height,
96, 96,
PixelFormats.Bgra32, null,
argb, file.Width * 4);
}
}
}
================================================
FILE: Godbert/Controls/ColumnFactory.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using SaintCoinach.Ex.Relational;
using SaintCoinach.Ex.Relational.Definition;
using SaintCoinach.Ex;
using SaintCoinach.Ex.DataReaders;
namespace Godbert.Controls {
static class ColumnFactory {
public static DataGridColumn Create(RelationalColumn column) {
var sheetDef = column.Header.SheetDefinition;
Type defType = null;
if (sheetDef != null)
defType = sheetDef.GetValueType(column.Index);
var targetType = defType ?? column.Reader.Type;
var header = BuildHeader(column);
var binding = CreateCellBinding(column);
DataGridColumn target = null;
if (typeof(SaintCoinach.Imaging.ImageFile).IsAssignableFrom(targetType))
target = new RawDataGridImageColumn(column) {
Binding = binding,
};
else if (typeof(System.Drawing.Color).IsAssignableFrom(targetType))
target = new RawDataGridColorColumn(column) {
Binding = binding
};
target = target ?? new RawDataGridTextColumn(column) {
Binding = binding
};
target.Header = header;
target.IsReadOnly = true;
target.CanUserSort = true;
return target;
}
private static string BuildHeader(RelationalColumn column) {
var sb = new StringBuilder();
sb.Append(column.Index);
if (!string.IsNullOrWhiteSpace(column.Name))
sb.AppendFormat(": {0}", column.Name);
sb.Append(Environment.NewLine);
sb.Append(column.Reader.Type.Name);
if (column.ValueType != column.Reader.Name)
sb.AppendFormat(" > {0}", column.ValueType);
if (Settings.Default.ShowOffsets) {
if (column.Reader is PackedBooleanDataReader)
sb.AppendFormat(" [{0:X}&{1:X2}]", column.Offset, ((PackedBooleanDataReader)column.Reader).Mask);
else
sb.AppendFormat(" [{0:X}]", column.Offset);
}
return sb.ToString();
}
private static Binding CreateCellBinding(RelationalColumn column) {
return new Binding {
Converter = CellConverterInstance,
ConverterParameter = column.Index,
Mode = BindingMode.OneWay
};
}
public static bool ForceRaw;
public static readonly System.Windows.Data.IValueConverter CellConverterInstance = new CellConverter();
private class CellConverter : System.Windows.Data.IValueConverter {
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
var row = value as IRow;
if (row == null)
return null;
var i = System.Convert.ToInt32(parameter);
if (ForceRaw || RawDataGrid.ColumnSetToRaw[i])
return row.GetRaw(i);
return row[i] ?? row.GetRaw(i);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
throw new NotImplementedException();
}
#endregion
}
}
}
================================================
FILE: Godbert/Controls/INavigatable.cs
================================================
using SaintCoinach.Ex;
using SaintCoinach.Ex.Relational;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace Godbert.Controls
{
public interface INavigatable
{
IRow OnNavigate(object sender, RoutedEventArgs e);
}
}
================================================
FILE: Godbert/Controls/IRawDataColumn.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SaintCoinach.Ex.Relational;
namespace Godbert.Controls {
public interface IRawDataColumn {
IComparer<object> GetComparer(System.ComponentModel.ListSortDirection direction);
RelationalColumn Column { get; }
}
}
================================================
FILE: Godbert/Controls/RawDataGrid.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.ComponentModel;
using System.Windows.Input;
using SaintCoinach.Ex.Relational;
using Godbert.ViewModels;
using SaintCoinach.Xiv;
using System.Collections;
using System.Windows.Controls.Primitives;
using System.Windows.Media;
using SaintCoinach.Ex;
namespace Godbert.Controls {
public class RawDataGrid : DataGrid {
#region DependencyProperties
public static readonly DependencyProperty SheetProperty = DependencyProperty.Register("Sheet", typeof(IRelationalSheet), typeof(RawDataGrid), new PropertyMetadata(OnSheetChanged));
public static readonly DependencyProperty FilterProperty = DependencyProperty.Register("Filter", typeof(string), typeof(RawDataGrid), new PropertyMetadata(OnFilterChanged));
public IRelationalSheet Sheet {
get { return (IRelationalSheet)GetValue(SheetProperty); }
set { SetValue(SheetProperty, value); }
}
public string Filter {
get { return (string)GetValue(FilterProperty); }
set { SetValue(FilterProperty, value); }
}
private static void OnSheetChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) {
((RawDataGrid)o).OnSheetChanged((IRelationalSheet)e.OldValue, (IRelationalSheet)e.NewValue);
}
public static bool[] ColumnSetToRaw;
protected virtual void OnSheetChanged(IRelationalSheet oldValue, IRelationalSheet newValue) {
this.Columns.Clear();
if (newValue != null)
{
var keyPath = newValue.Header.Variant == 1 ? "Key" : "FullKey";
//prevent multiple enumeration
var columns = newValue.Header.Columns.ToList();
if (Settings.Default.SortByOffsets)
columns.Sort((x, y) => x.Offset.CompareTo(y.Offset));
ColumnSetToRaw = new bool[columns.Count];
Columns.Add(new RawDataGridKeyColumn(keyPath) { CanUserSort = true });
foreach (var col in columns)
Columns.Add(ColumnFactory.Create(col));
var source = new RawDataItemsSource(newValue);
if (!string.IsNullOrWhiteSpace(Filter))
source.Filter = Filter;
this.ItemsSource = source;
}
else
this.ItemsSource = null;
}
private static void OnFilterChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) {
((RawDataGrid)o).OnFilterChanged((string)e.OldValue, (string)e.NewValue);
}
protected virtual void OnFilterChanged(string oldValue, string newValue) {
var src = this.ItemsSource as RawDataItemsSource;
if (src == null)
return;
if (string.IsNullOrWhiteSpace(newValue))
src.Filter = null;
else
src.Filter = newValue;
}
#endregion
protected override void OnSorting(DataGridSortingEventArgs eventArgs) {
eventArgs.Handled = true;
var src = this.ItemsSource as RawDataItemsSource;
var col = eventArgs.Column as IRawDataColumn;
if (src == null || col == null)
return;
var nextDir = (eventArgs.Column.SortDirection != ListSortDirection.Ascending) ? ListSortDirection.Ascending : ListSortDirection.Descending;
eventArgs.Column.SortDirection = nextDir;
var cmp = col.GetComparer(nextDir);
src.Comparer = cmp;
}
protected override void OnMouseDown(MouseButtonEventArgs e) {
base.OnMouseDown(e);
if (e.RightButton == MouseButtonState.Pressed)
{
var cell = GetClickedHeader(e);
if (cell == null)
return;
if (cell.Column is RawDataGridImageColumn ||
cell.Column is RawDataGridTextColumn ||
cell.Column is RawDataGridColorColumn)
{
ColumnFactory.ForceRaw = !ColumnFactory.ForceRaw;
Items.Refresh();
e.Handled = true;
}
}
if (e.MiddleButton == MouseButtonState.Pressed)
{
var cellHeader = GetClickedHeader(e);
if (cellHeader != null)
{
if (cellHeader.Column is RawDataGridImageColumn ||
cellHeader.Column is RawDataGridTextColumn ||
cellHeader.Column is RawDataGridColorColumn)
{
var columnIndex = ((IRawDataColumn) cellHeader.Column).Column.Index;
ColumnSetToRaw[columnIndex] = !ColumnSetToRaw[columnIndex];
Items.Refresh();
e.Handled = true;
}
return;
}
var cell = GetClickedCell(e);
if (cell == null)
return;
var dataView = WpfHelper.FindParent<Views.DataView>(cell);
if (dataView == null)
return;
var dataViewModel = dataView.DataContext as DataViewModel;
if (dataViewModel == null)
return;
var row = cell.DataContext as IRow;
if (row == null)
return;
var dataColumn = cell.Column as IRawDataColumn;
if (dataColumn == null)
return;
var bookmark = new BookmarkViewModel() {
SheetName = dataViewModel.SelectedSheetName,
Key = row.Key,
RowDefault = row.ToString(),
ColumnName = dataColumn.Column?.Name,
ColumnIndex = dataColumn.Column?.Index
};
if (dataViewModel.Bookmarks.Contains(bookmark)) {
dataViewModel.Bookmarks.Remove(bookmark);
return;
}
dataViewModel.Bookmarks.Add(bookmark);
}
}
private DataGridColumnHeader GetClickedHeader(MouseButtonEventArgs e)
{
DependencyObject dep = (DependencyObject)e.OriginalSource;
// iteratively traverse the visual tree
while ((dep != null) &&
!(dep is DataGridCell) &&
!(dep is DataGridColumnHeader))
{
dep = VisualTreeHelper.GetParent(dep);
}
return dep as DataGridColumnHeader;
}
protected override void OnMouseDoubleClick(MouseButtonEventArgs e) {
var cell = GetClickedCell(e);
if (cell == null)
return;
var navigatable = cell.Column as INavigatable;
if (navigatable == null)
return;
var mainWindow = WpfHelper.FindParent<MainWindow>(cell);
if (mainWindow == null)
return;
var mainViewModel = mainWindow.DataContext as MainViewModel;
if (mainViewModel == null)
return;
var row = navigatable.OnNavigate(cell, e);
if (row == null)
return;
mainViewModel.Data.SelectedSheetName = row.Sheet.Name;
SelectRow(row, null);
}
private static DataGridCell GetClickedCell(MouseButtonEventArgs e) {
if (e.OriginalSource is FrameworkElement source)
return WpfHelper.FindParent<DataGridCell>(source);
return null;
}
public void SelectRow(IRow row, int? columnIndex) {
this.SelectedItem = row;
this.UpdateLayout();
if (this.SelectedItem == null)
return;
DataGridColumn selectedColumn = null;
if (columnIndex != null)
selectedColumn = (DataGridColumn)this.Columns.OfType<IRawDataColumn>().FirstOrDefault(c => c.Column?.Index == columnIndex);
this.ScrollIntoView(this.SelectedItem, selectedColumn);
}
}
}
================================================
FILE: Godbert/Controls/RawDataGridColorColumn.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Input;
using System.Windows.Media;
using System.ComponentModel;
using SaintCoinach.Ex.Relational;
using SaintCoinach.Ex;
namespace Godbert.Controls {
public class RawDataGridColorColumn : DataGridBoundColumn, IRawDataColumn {
private RelationalColumn _Column;
private ContextMenu _ContextMenu;
public RawDataGridColorColumn(RelationalColumn column) {
_Column = column;
_ContextMenu = new ContextMenu();
var mi = new MenuItem {
Header = "Copy",
};
mi.Click += OnCopyClick;
_ContextMenu.Items.Add(mi);
}
void OnCopyClick(object sender, RoutedEventArgs e) {
var fe = sender as FrameworkElement;
if (fe == null)
return;
var ctx = fe.DataContext;
if (!(ctx is System.Drawing.Color))
return;
var src = (System.Drawing.Color)ctx;
System.Windows.Clipboard.SetDataObject(string.Format("#{0:X8}", src.ToArgb()));
}
protected override FrameworkElement GenerateEditingElement(DataGridCell cell, object dataItem) {
throw new NotImplementedException();
}
protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem) {
Border obj = cell != null ? cell.Content as Border : null;
if (obj == null) {
obj = new Border {
HorizontalAlignment = HorizontalAlignment.Stretch,
VerticalAlignment = VerticalAlignment.Stretch,
};
obj.SetBinding(Border.BackgroundProperty, new Binding {
Converter = ColorConverterInstance
});
obj.ContextMenu = _ContextMenu;
}
var bind = Binding;
if (bind == null)
BindingOperations.ClearBinding(obj, Border.DataContextProperty);
else
BindingOperations.SetBinding(obj, Border.DataContextProperty, bind);
return obj;
}
private static readonly ColorConverter ColorConverterInstance = new ColorConverter();
private class ColorConverter : System.Windows.Data.IValueConverter {
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
if (!(value is System.Drawing.Color))
return null;
var src = (System.Drawing.Color)value;
return new SolidColorBrush(System.Windows.Media.Color.FromArgb(src.A, src.R, src.G, src.B));
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) {
throw new NotImplementedException();
}
#endregion
}
#region IRawDataColumn Members
public RelationalColumn Column => _Column;
public IComparer<object> GetComparer(ListSortDirection direction) {
return new Comparer {
Column = _Column,
Direction = direction,
};
}
private class Comparer : IComparer<object> {
public ListSortDirection Direction;
public RelationalColumn Column;
#region IComparer<object> Members
public int Compare(object x, object y) {
if (Direction == ListSortDirection.Descending)
return -InnerCompare(x, y);
return InnerCompare(x, y);
}
private int InnerCompare(object x, object y) {
var rx = x as IRow;
var ry = y as IRow;
if (rx == ry)
return 0;
if (rx == null)
return -1;
if (ry == null)
return 1;
var vx = rx[Column.Index];
var vy = ry[Column.Index];
if (vx == vy)
return 0;
if (!(vx is System.Drawing.Color))
return -1;
if (!(vy is System.Drawing.Color))
return 1;
var cx = (System.Drawing.Color)vx;
var cy = (System.Drawing.Color)vy;
return cx.ToArgb().CompareTo(cy.ToArgb());
}
#endregion
}
#endregion
}
}
================================================
FILE: Godbert/Controls/RawDataGridImageColumn.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.ComponentModel;
using SaintCoinach.Ex.Relational;
using SaintCoinach.Ex;
namespace Godbert.Controls {
public class RawDataGridImageColumn : DataGridBoundColumn, IRawDataColumn {
private RelationalColumn _Column;
private ContextMenu _ContextMenu;
public RawDataGridImageColumn(RelationalColumn column) {
_Column = column;
_ContextMenu = new ContextMenu();
var mi = new MenuItem {
Header = "Save image",
};
mi.Click += OnSaveImageClick;
_ContextMenu.Items.Add(mi);
}
void OnSaveImageClick(object sender, RoutedEventArgs e) {
var fe = sender as FrameworkElement;
if (fe == null)
return;
var ctx = fe.DataContext as IRelationalRow;
if (ctx == null)
return;
var img = ctx[_Column.Index] as SaintCoinach.Imaging.ImageFile;
if (img == null)
return;
var dlg = new Microsoft.Win32.SaveFileDialog {
DefaultExt = ".png",
Filter = "PNG Files (*.png)|*.png",
AddExtension = true,
OverwritePrompt = true,
FileName = SetExt(img.Path.Split('/').Last(), "png"),
};
if (dlg.ShowDialog().GetValueOrDefault(false))
img.GetImage().Save(dlg.FileName);
}
private static string SetExt(string orig, string ext) {
var sb = new StringBuilder(orig);
var idx = orig.LastIndexOf('.');
if (idx > 0)
sb.Remove(idx, sb.Length - idx);
sb.Append('.');
sb.Append(ext);
return sb.ToString();
}
protected override FrameworkElement GenerateEditingElement(DataGridCell cell, object dataItem) {
throw new NotImplementedException();
}
protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem) {
Image obj = cell != null ? cell.Content as Image : null;
if (obj == null) {
obj = new Image {
Stretch = System.Windows.Media.Stretch.Uniform,
ContextMenu = _ContextMenu,
};
AttachedImage.SetIsSizeRestricted(obj, true);
}
var bind = Binding;
if (bind == null)
BindingOperations.ClearBinding(obj, AttachedImage.ImageProperty);
else
BindingOperations.SetBinding(obj, AttachedImage.ImageProperty, bind);
return obj;
}
#region IRawDataColumn Members
public RelationalColumn Column => _Column;
public IComparer<object> GetComparer(ListSortDirection direction) {
return new Comparer {
Column = _Column,
Direction = direction,
};
}
private class Comparer : IComparer<object> {
public ListSortDirection Direction;
public RelationalColumn Column;
#region IComparer<object> Members
public int Compare(object x, object y) {
if (Direction == ListSortDirection.Descending)
return -InnerCompare(x, y);
return InnerCompare(x, y);
}
private int InnerCompare(object x, object y) {
var rx = x as IRow;
var ry = y as IRow;
if (rx == ry)
return 0;
if (rx == null)
return -1;
if (ry == null)
return 1;
var vx = rx[Column.Index] as SaintCoinach.Imaging.ImageFile;
var vy = ry[Column.Index] as SaintCoinach.Imaging.ImageFile;
if (vx == vy)
return 0;
if (vx == null)
return -1;
if (vy == null)
return 1;
return vx.Path.CompareTo(vy.Path);
}
#endregion
}
#endregion
}
}
================================================
FILE: Godbert/Controls/RawDataGridKeyColumn.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using SaintCoinach.Ex.Relational;
namespace Godbert.Controls {
public class RawDataGridKeyColumn : DataGridTextColumn, IRawDataColumn {
public RawDataGridKeyColumn(string keyPath) {
this.Header = "Key";
this.IsReadOnly = true;
this.Binding = new Binding(keyPath) { Mode = BindingMode.OneWay };
}
#region IRawDataColumn Members
public RelationalColumn Column => null;
public IComparer<object> GetComparer(System.ComponentModel.ListSortDirection direction) {
return new Comparer {
Direction = direction,
};
}
private class Comparer : IComparer<object> {
public ListSortDirection Direction;
#region IComparer<object> Members
public int Compare(object x, object y) {
if (Direction == ListSortDirection.Descending)
return -InnerCompare(x, y);
return InnerCompare(x, y);
}
private int InnerCompare(object x, object y) {
var rx = x as IRelationalRow;
var ry = y as IRelationalRow;
if (rx == ry)
return 0;
if (rx == null)
return -1;
if (ry == null)
return 1;
return rx.Key.CompareTo(ry.Key);
}
#endregion
}
#endregion
}
}
================================================
FILE: Godbert/Controls/RawDataGridTextColumn.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.ComponentModel;
using SaintCoinach.Ex.Relational;
using SaintCoinach.Ex;
namespace Godbert.Controls {
public class RawDataGridTextColumn : DataGridTextColumn, IRawDataColumn, INavigatable {
private RelationalColumn _Column;
private ContextMenu _ContextMenu;
public RawDataGridTextColumn(RelationalColumn column) {
_Column = column;
_ContextMenu = new ContextMenu();
var mi = new MenuItem {
Header = "Copy",
};
mi.Click += OnCopyClick;
_ContextMenu.Items.Add(mi);
}
void OnCopyClick(object sender, RoutedEventArgs e) {
var fe = sender as FrameworkElement;
if (fe == null)
return;
var ctx = fe.DataContext as IRelationalRow;
if (ctx == null)
return;
var val = ctx[_Column.Index];
if (val == null)
return;
System.Windows.Clipboard.SetDataObject(val.ToString());
}
public IRow OnNavigate(object sender, RoutedEventArgs e) {
var fe = sender as FrameworkElement;
if (fe == null)
return null;
var ctx = fe.DataContext as IRow;
if (ctx == null)
return null;
return ctx[_Column.Index] as IRow;
}
protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem) {
var ele = base.GenerateElement(cell, dataItem);
ele.ContextMenu = _ContextMenu;
return ele;
}
#region IRawDataColumn Members
public RelationalColumn Column => _Column;
public IComparer<object> GetComparer(ListSortDirection direction) {
return new Comparer {
Column = _Column,
Direction = direction,
};
}
private class Comparer : IComparer<object> {
private NaturalComparer _NaturalComparer = new NaturalComparer(StringComparer.OrdinalIgnoreCase);
public ListSortDirection Direction;
public RelationalColumn Column;
#region IComparer<object> Members
public int Compare(object x, object y) {
if (Direction == ListSortDirection.Descending)
return -InnerCompare(x, y);
return InnerCompare(x, y);
}
private int InnerCompare(object x, object y) {
var rx = x as IRow;
var ry = y as IRow;
if (rx == ry)
return 0;
if (rx == null)
return -1;
if (ry == null)
return 1;
var vx = ColumnFactory.ForceRaw || RawDataGrid.ColumnSetToRaw[Column.Index] ? rx.GetRaw(Column.Index) : rx[Column.Index];
var vy = ColumnFactory.ForceRaw || RawDataGrid.ColumnSetToRaw[Column.Index] ? ry.GetRaw(Column.Index) : ry[Column.Index];
if (vx == vy)
return 0;
if (vx == null)
return -1;
if (vy == null)
return 1;
var sx = vx.ToString();
var sy = vy.ToString();
return _NaturalComparer.Compare(sx, sy);
}
#endregion
}
#endregion
}
}
================================================
FILE: Godbert/Controls/RawDataItemsSource.cs
================================================
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SaintCoinach.Ex;
using SaintCoinach.Ex.Relational;
namespace Godbert.Controls {
public class RawDataItemsSource : IEnumerable, INotifyCollectionChanged {
#region Fields
private IRelationalSheet _Sheet;
private IComparer<object> _Comparer;
private object[] _Items;
private string _Filter;
private Tuple<IRow, string>[] _RowSearchIndex;
#endregion
#region Properties
public IComparer<object> Comparer {
get { return _Comparer; }
set {
_Comparer = value;
_Items = null;
CollectionChanged?.Invoke(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
}
}
public string Filter {
get { return _Filter; }
set {
_Filter = value;
_Items = null;
CollectionChanged?.Invoke(this, new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
}
}
public IEnumerable Items {
get {
if (_Items != null)
return Items;
if (_Sheet.Header.Variant == 1)
return GetVariant1Items();
else
return GetVariant2Items();
}
}
private IEnumerable GetVariant1Items()
{
if (_Comparer == null && _Filter == null)
return _Sheet;
_Items = FilterAndCompare(_Sheet.Cast<object>()).ToArray();
return _Items;
}
private IEnumerable GetVariant2Items()
{
var rows = _Sheet.Cast<SaintCoinach.Xiv.XivSubRow>();
_Items = FilterAndCompare(rows).ToArray();
return _Items;
}
private IEnumerable<object> FilterAndCompare(IEnumerable<object> results)
{
if (_Filter != null) {
var rows = results.OfType<IRow>().ToArray();
if (_RowSearchIndex == null)
BuildSearchIndex(rows);
results = FilterMatchingRows();
}
if (_Comparer != null)
results = results.OrderBy(o => o, Comparer);
return results;
}
#endregion
#region Filter
private void BuildSearchIndex(IRow[] rows) {
if (rows.Length == 0)
return;
var start = DateTime.Now;
System.Diagnostics.Debug.WriteLine($"Rebuilding search index for {_Sheet.Name}...");
var newIndex = new ConcurrentBag<Tuple<IRow, string>>();
var columns = rows[0].Sheet.Header.Columns.ToArray();
Parallel.ForEach(rows, row => {
var index = new StringBuilder();
index.Append(row.Key.ToString());
index.Append("||");
foreach (var value in row.ColumnValues()) {
if (value != null) {
index.Append(value.ToString());
index.Append("||");
}
}
newIndex.Add(Tuple.Create(row, index.ToString()));
});
_RowSearchIndex = newIndex.OrderBy(r => r.Item1.Key).ToArray();
System.Diagnostics.Debug.WriteLine($"{_Sheet.Name} search index complete. Elapsed {DateTime.Now - start}.");
}
private IRow[] FilterMatchingRows() {
return _RowSearchIndex
.Where(r => r.Item2.IndexOf(_Filter, StringComparison.OrdinalIgnoreCase) >= 0)
.Select(r => r.Item1)
.ToArray();
}
#endregion
#region Constructor
public RawDataItemsSource(IRelationalSheet sheet) {
_Sheet = sheet;
}
#endregion
#region INotifyCollectionChanged Members
public event NotifyCollectionChangedEventHandler CollectionChanged;
#endregion
#region IEnumerable Members
public IEnumerator GetEnumerator() {
return Items.GetEnumerator();
}
#endregion
}
}
================================================
FILE: Godbert/EngineHelper.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Godbert {
using SaintCoinach.Graphics.Viewer;
public class EngineHelper {
public delegate IComponent ComponentFunction(Engine engine);
public delegate IComponent[] MultiComponentFunction(Engine engine);
#region Fields
private List<EngineInstance> _Instances = new List<EngineInstance>();
#endregion
#region Things
public EngineInstance AddToLast(string title, ComponentFunction func) { return AddToLast(title, (e) => new IComponent[] { func(e) }); }
public EngineInstance AddToLast(string title, MultiComponentFunction func) {
EngineInstance target = null;
lock (_Instances) {
if (_Instances.Count > 0)
target = _Instances[_Instances.Count - 1];
}
if (target == null)
return OpenInNew(title, func);
target.AddComponent(func);
target.SetTitle(target.Engine.Form.Text + ", " + title);
return target;
}
public EngineInstance ReplaceInLast(string title, ComponentFunction func) { return ReplaceInLast(title, (e) => new IComponent[] { func(e) }); }
public EngineInstance ReplaceInLast(string title, MultiComponentFunction func) {
EngineInstance target = null;
lock (_Instances) {
if (_Instances.Count > 0)
target = _Instances[_Instances.Count - 1];
}
if (target == null)
return OpenInNew(title, func);
target.ReplaceComponents(func);
target.SetTitle(title);
return target;
}
public EngineInstance OpenInNew(string title, ComponentFunction func) { return OpenInNew(title, (e) => new IComponent[] { func(e) }); }
public EngineInstance OpenInNew(string title, MultiComponentFunction func) {
var instance = new EngineInstance(title);
lock (_Instances)
_Instances.Add(instance);
instance.Stopped += OnInstanceStopped;
instance.AddComponent(func);
instance.RunAsync();
return instance;
}
public EngineInstance GetOrCreate(string title) {
EngineInstance target = null;
lock (_Instances) {
if (_Instances.Count > 0)
target = _Instances[_Instances.Count - 1];
}
if (target == null)
return OpenNew(title);
return target;
}
public EngineInstance OpenNew(string title) {
var instance = new EngineInstance(title);
lock (_Instances)
_Instances.Add(instance);
instance.Stopped += OnInstanceStopped;
instance.RunAsync();
return instance;
}
void OnInstanceStopped(object sender, EventArgs e) {
lock (_Instances)
_Instances.Remove(sender as EngineInstance);
}
#endregion
}
}
================================================
FILE: Godbert/EngineInstance.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace Godbert {
using SaintCoinach.Graphics.Viewer;
public class EngineInstance {
#region Helper class
class ComponentInjector : IUpdateableComponent, IDrawable3DComponent, IContentComponent {
internal List<EngineHelper.MultiComponentFunction> AddQueue = new List<EngineHelper.MultiComponentFunction>();
internal EngineHelper.MultiComponentFunction Replacement;
internal string SetTitle;
private FormEngine _Engine;
private ComponentContainer _InnerContainer = new ComponentContainer();
public ComponentInjector(FormEngine engine) {
_Engine = engine;
}
#region IUpdateableComponent Members
public bool IsEnabled {
get { return true; }
}
public void Update(EngineTime engineTime) {
if (!string.IsNullOrWhiteSpace(SetTitle)) {
_Engine.Form.Text = SetTitle;
SetTitle = null;
}
if (Replacement != null) {
lock (AddQueue)
AddQueue.Clear();
_InnerContainer.Clear();
var l = Replacement(_Engine);
foreach (var c in l) {
if (c != null)
_InnerContainer.Add(c);
}
Replacement = null;
}
EngineHelper.MultiComponentFunction[] toAdd;
lock (AddQueue) {
toAdd = AddQueue.ToArray();
AddQueue.Clear();
}
foreach (var f in toAdd) {
var l = f(_Engine);
foreach (var c in l) {
if (c != null)
_InnerContainer.Add(c);
}
}
_InnerContainer.Update(engineTime);
}
#endregion
#region IDrawable3DComponent Members
public bool IsVisible {
get { return true; }
}
public void Draw(EngineTime time, ref SharpDX.Matrix world, ref SharpDX.Matrix view, ref SharpDX.Matrix projection) {
_InnerContainer.Draw(time, ref world, ref view, ref projection);
}
#endregion
#region IContentComponent Members
private bool _IsLoaded;
public bool IsLoaded {
get { return _IsLoaded; }
private set { _IsLoaded = value; }
}
public void LoadContent() {
_InnerContainer.LoadContent();
_IsLoaded = true;
}
public void UnloadContent() {
_IsLoaded = false;
_InnerContainer.UnloadContent();
}
#endregion
}
#endregion
#region Fields
private ComponentInjector _Injector;
#endregion
#region Properties
public FormEngine Engine { get; private set; }
#endregion
#region Event
public event EventHandler Stopped;
#endregion
#region Constructor
public EngineInstance(string title) {
Engine = new FormEngine(title);
Engine.Components.Add(_Injector = new ComponentInjector(Engine));
}
#endregion
#region Things
public void SetTitle(string newTitle) {
_Injector.SetTitle = newTitle;
}
public void AddComponent(EngineHelper.MultiComponentFunction component) {
lock (_Injector.AddQueue)
_Injector.AddQueue.Add(component);
}
public void ReplaceComponents(EngineHelper.MultiComponentFunction newComponents) {
_Injector.Replacement = newComponents;
}
public void RunAsync() {
var t = new Thread(this.Run);
t.IsBackground = true;
t.Name = "Renderer";
t.Start();
}
private void Run() {
try {
Engine.Run();
} catch (Exception e) {
System.Windows.MessageBox.Show(e.ToString(), "Engine failure", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
System.Diagnostics.Debug.WriteLine(string.Format("Engine failure: {0}", e));
} finally {
Engine = null;
_Injector = null;
GC.Collect();
Stopped?.Invoke(this, EventArgs.Empty);
}
}
#endregion
}
}
================================================
FILE: Godbert/Godbert.csproj
================================================
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ProjectGuid>{6A5DA7FF-791E-4A43-BF65-B6942917F7D9}</ProjectGuid>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<OutputType>WinExe</OutputType>
<TargetFramework>net7.0-windows</TargetFramework>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<BootstrapperEnabled>true</BootstrapperEnabled>
<AssemblyTitle>Godbert</AssemblyTitle>
<Product>Godbert</Product>
<Copyright>Copyright © Rogueadyn 2015</Copyright>
<OutputPath>bin\$(Configuration)\</OutputPath>
<UseWpf>true</UseWpf>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugType>full</DebugType>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>Godbert.ico</ApplicationIcon>
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Ookii.Dialogs.Wpf" Version="5.0.1" />
<PackageReference Include="SharpDX" Version="4.2.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\SaintCoinach.Graphics.Viewer\SaintCoinach.Graphics.Viewer.csproj" />
<ProjectReference Include="..\SaintCoinach\SaintCoinach.csproj" />
</ItemGroup>
<ItemGroup>
<Resource Include="Godbert.ico" />
</ItemGroup>
</Project>
================================================
FILE: Godbert/MainWindow.xaml
================================================
<Window x:Class="Godbert.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:Godbert.ViewModels"
xmlns:views="clr-namespace:Godbert.Views"
xmlns:ex="clr-namespace:SaintCoinach.Ex;assembly=SaintCoinach"
Title="Godbert" Height="800" Width="1024" Icon="Godbert.ico">
<Window.DataContext>
<vm:MainViewModel />
</Window.DataContext>
<DockPanel LastChildFill="True">
<Menu DockPanel.Dock="Top">
<MenuItem Header="Language">
<MenuItem Header="English"
IsChecked="{Binding Path=IsEnglish, Mode=OneWay}"
Command="{Binding Path=LanguageCommand}"
CommandParameter="{x:Static ex:Language.English}" />
<MenuItem Header="Japanese"
IsChecked="{Binding Path=IsJapanese, Mode=OneWay}"
Command="{Binding Path=LanguageCommand}"
CommandParameter="{x:Static ex:Language.Japanese}" />
<MenuItem Header="German"
IsChecked="{Binding Path=IsGerman, Mode=OneWay}"
Command="{Binding Path=LanguageCommand}"
CommandParameter="{x:Static ex:Language.German}" />
<MenuItem Header="French"
IsChecked="{Binding Path=IsFrench, Mode=OneWay}"
Command="{Binding Path=LanguageCommand}"
CommandParameter="{x:Static ex:Language.French}" />
<MenuItem Header="ChineseSimplified"
IsChecked="{Binding Path=IsChineseSimplified, Mode=OneWay}"
Command="{Binding Path=LanguageCommand}"
CommandParameter="{x:Static ex:Language.ChineseSimplified}" />
<MenuItem Header="Korean"
IsChecked="{Binding Path=IsKorean, Mode=OneWay}"
Command="{Binding Path=LanguageCommand}"
CommandParameter="{x:Static ex:Language.Korean}" />
</MenuItem>
<MenuItem Header="Various">
<MenuItem Header="New Window"
Command="{Binding Path=NewWindowCommand}" />
<Separator />
<MenuItem Header="Change game location"
Command="{Binding Path=GameLocationCommand}" />
</MenuItem>
<MenuItem Header="Settings">
<MenuItem Header="Show Offsets"
IsChecked="{Binding Path=ShowOffsets, Mode=OneWay}"
Command="{Binding Path=ShowOffsetsCommand}" />
<MenuItem Header="Sort by Offsets"
IsChecked="{Binding Path=SortByOffsets, Mode=OneWay}"
Command="{Binding Path=SortByOffsetsCommand}" />
</MenuItem>
</Menu>
<TabControl>
<TabItem Header="Data" DataContext="{Binding Path=Data}">
<views:DataView />
</TabItem>
<TabItem Header="3D">
<TabControl>
<TabItem Header="Equipment" DataContext="{Binding Equipment}">
<views:EquipmentView />
</TabItem>
<TabItem Header="Furniture" DataContext="{Binding Furniture}">
<views:FurnitureView />
</TabItem>
<TabItem Header="Monsters" DataContext="{Binding Monsters}">
<views:MonstersView />
</TabItem>
<TabItem Header="Territories" DataContext="{Binding Territories}">
<views:TerritoryView />
</TabItem>
<TabItem Header="Demi-humans" DataContext="{Binding Demihuman}">
<views:DemihumansView />
</TabItem>
<TabItem Header="Help">
<views:Help3DView />
</TabItem>
</TabControl>
</TabItem>
</TabControl>
</DockPanel>
</Window>
================================================
FILE: Godbert/MainWindow.xaml.cs
================================================
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace Godbert {
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
var settings = Settings.Default;
if (settings.MainWindowWidth > 0)
Width = Settings.Default.MainWindowWidth;
if (settings.MainWindowHeight > 0)
Height = Settings.Default.MainWindowHeight;
if (settings.MainWindowLeft > 0)
Left = Settings.Default.MainWindowLeft;
if (settings.MainWindowTop > 0)
Top = Settings.Default.MainWindowTop;
}
protected override void OnClosing(CancelEventArgs e) {
base.OnClosing(e);
Settings.Default.MainWindowHeight = Height;
Settings.Default.MainWindowWidth = Width;
Settings.Default.MainWindowLeft = Left;
Settings.Default.MainWindowTop = Top;
}
}
}
================================================
FILE: Godbert/Models/ModelCharaHierarchy.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SaintCoinach.Xiv;
namespace Godbert.Models {
public class ModelCharaHierarchy : IEnumerable<ModelCharaMain> {
#region Properties
public string MainFormat { get; set; }
public string SubFormat { get; set; }
public string VariantFormat { get; set; }
#endregion
#region Constructor
public ModelCharaHierarchy(string mainFormat, string subFormat, string variantFormat) {
this.MainFormat = mainFormat;
this.SubFormat = subFormat;
this.VariantFormat = variantFormat;
}
#endregion
#region Fields
private SortedDictionary<int, ModelCharaMain> _Items = new SortedDictionary<int, ModelCharaMain>();
#endregion
#region Collection
public void Add(ModelChara modelChara) {
Add(modelChara.ModelKey, modelChara.BaseKey, modelChara.Variant);
}
public void Add(int main, int sub, int variant) {
ModelCharaMain mcm;
if (!_Items.TryGetValue(main, out mcm))
_Items.Add(main, mcm = new ModelCharaMain(this, string.Format(MainFormat, main), main));
mcm.Add(sub, variant);
}
public bool Contains(int main, int sub, int variant) {
ModelCharaMain mcm;
if (!_Items.TryGetValue(main, out mcm))
return false;
return mcm.Contains(sub, variant);
}
public void Clear() {
_Items.Clear();
}
#endregion
#region IEnumerable<ModelCharaMain> Members
public IEnumerator<ModelCharaMain> GetEnumerator() {
return _Items.Values.GetEnumerator();
}
#endregion
#region IEnumerable Members
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
return GetEnumerator();
}
#endregion
}
}
================================================
FILE: Godbert/Models/ModelCharaMain.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Godbert.Models {
public class ModelCharaMain : IEnumerable<ModelCharaSub> {
#region Properties
public int Value { get; set; }
public string DisplayName { get; set; }
public ModelCharaHierarchy Parent { get; private set; }
#endregion
#region Constructor
public ModelCharaMain(ModelCharaHierarchy parent, string displayName, int value) {
this.Parent = parent;
this.Value = value;
this.DisplayName = displayName;
}
#endregion
#region Fields
private SortedDictionary<int, ModelCharaSub> _Items = new SortedDictionary<int, ModelCharaSub>();
#endregion
#region Collection
public void Add(int sub, int variant) {
ModelCharaSub mcs;
if (!_Items.TryGetValue(sub, out mcs))
_Items.Add(sub, mcs = new ModelCharaSub(this, string.Format(Parent.SubFormat, sub), sub));
mcs.Add(variant);
}
public bool Contains(int sub, int variant) {
ModelCharaSub mcs;
if (!_Items.TryGetValue(sub, out mcs))
return false;
return mcs.Contains(variant);
}
public void Clear() {
_Items.Clear();
}
#endregion
#region IEnumerable<ModelCharaMain> Members
public IEnumerator<ModelCharaSub> GetEnumerator() {
return _Items.Values.GetEnumerator();
}
#endregion
#region IEnumerable Members
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
return GetEnumerator();
}
#endregion
public override string ToString() {
return DisplayName;
}
}
}
================================================
FILE: Godbert/Models/ModelCharaSub.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Godbert.Models {
public class ModelCharaSub : IEnumerable<ModelCharaVariant> {
#region Properties
public int Value { get; set; }
public string DisplayName { get; set; }
public ModelCharaMain Parent { get; private set; }
#endregion
#region Constructor
public ModelCharaSub(ModelCharaMain parent, string displayName, int value) {
this.Parent = parent;
this.Value = value;
this.DisplayName = displayName;
}
#endregion
#region Fields
private SortedDictionary<int, ModelCharaVariant> _Items = new SortedDictionary<int, ModelCharaVariant>();
#endregion
#region Collection
public void Add(int variant) {
if (!_Items.ContainsKey(variant))
_Items.Add(variant, new ModelCharaVariant(this, string.Format(Parent.Parent.VariantFormat, variant), variant));
}
public bool Contains(int variant) {
return _Items.ContainsKey(variant);
}
public void Clear() {
_Items.Clear();
}
#endregion
#region IEnumerable<ModelCharaMain> Members
public IEnumerator<ModelCharaVariant> GetEnumerator() {
return _Items.Values.GetEnumerator();
}
#endregion
#region IEnumerable Members
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() {
return GetEnumerator();
}
#endregion
public override string ToString() {
return string.Format("{0} / {1}", Parent, DisplayName);
}
}
}
================================================
FILE: Godbert/Models/ModelCharaVariant.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Godbert.Models {
public class ModelCharaVariant {
#region Properties
public int Value { get; set; }
public string DisplayName { get; set; }
public ModelCharaSub Parent { get; private set; }
#endregion
#region Constructor
public ModelCharaVariant(ModelCharaSub parent, string displayName, int value) {
this.Parent = parent;
this.Value = value;
this.DisplayName = displayName;
}
#endregion
public override string ToString() {
return string.Format("{0} / {1}", Parent, DisplayName);
}
}
}
================================================
FILE: Godbert/NaturalComparer.cs
================================================
// Taken from http://www.codeproject.com/Articles/22517/Natural-Sort-Comparer
// Modified to allow for different StringComparison
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace Godbert {
public class NaturalComparer : Comparer<string>, IDisposable {
private Dictionary<string, string[]> table;
public NaturalComparer() : this(StringComparer.Ordinal) { }
public NaturalComparer(StringComparer partsComparer) {
table = new Dictionary<string, string[]>();
this.PartsComparer = partsComparer;
}
public StringComparer PartsComparer { get; set; }
public void Dispose() {
table.Clear();
table = null;
}
public override int Compare(string x, string y) {
if (x == y) {
return 0;
}
if (x == null)
return -1;
if (y == null)
return 1;
string[] x1, y1;
if (!table.TryGetValue(x, out x1)) {
x1 = Regex.Split(x.Replace(" ", ""), "([0-9]+)");
table.Add(x, x1);
}
if (!table.TryGetValue(y, out y1)) {
y1 = Regex.Split(y.Replace(" ", ""), "([0-9]+)");
table.Add(y, y1);
}
for (int i = 0; i < x1.Length && i < y1.Length; i++) {
if (x1[i] != y1[i]) {
// This always returned, modified to only return if not equal
var partCmp = PartCompare(x1[i], y1[i]);
if (partCmp != 0)
return partCmp;
}
}
if (y1.Length > x1.Length) {
return 1;
} else if (x1.Length > y1.Length) {
return -1;
} else {
return 0;
}
}
private int PartCompare(string left, string right) {
int x, y;
if (!int.TryParse(left, out x) || !int.TryParse(right, out y))
return PartsComparer.Compare(left, right);
return x.CompareTo(y);
}
}
}
================================================
FILE: Godbert/ObservableBase.cs
================================================
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
namespace Godbert {
public class ObservableBase : INotifyPropertyChanged {
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName) {
var h = PropertyChanged;
if (h != null)
h(this, new PropertyChangedEventArgs(propertyName));
}
protected virtual void OnPropertyChanged<TProperty>(Expression<Func<TProperty>> property) {
MemberExpression memberExpression;
if (property.Body is UnaryExpression) {
var unaryExpression = (UnaryExpression)property.Body;
memberExpression = (MemberExpression)unaryExpression.Operand;
} else {
memberExpression = (MemberExpression)property.Body;
}
OnPropertyChanged(memberExpression.Member.Name);
}
#endregion
}
}
================================================
FILE: Godbert/Properties/AssemblyInfo.cs
================================================
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows;
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
//In order to begin building localizable applications, set
//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
//inside a <PropertyGroup>. For example, if you are using US english
//in your source files, set the <UICulture> to en-US. Then uncomment
//the NeutralResourceLanguage attribute below. Update the "en-US" in
//the line below to match the UICulture setting in the project file.
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
================================================
FILE: Godbert/Properties/Resources.Designer.cs
================================================
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Godbert.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Godbert.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}
================================================
FILE: Godbert/Properties/Resources.resx
================================================
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>
================================================
FILE: Godbert/Properties/Settings.Designer.cs
================================================
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Godbert.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.3.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string GamePath {
get {
return ((string)(this["GamePath"]));
}
set {
this["GamePath"] = value;
}
}
}
}
================================================
FILE: Godbert/Properties/Settings.settings
================================================
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="Godbert.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="GamePath" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
</Settings>
</SettingsFile>
================================================
FILE: Godbert/Settings.cs
================================================
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Godbert {
public class Settings {
#region IO Boilerplate
public static Settings Default { get; } = Load();
private static string FileName => Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Godbert", "settings.json");
private static Settings Load() {
try {
if (File.Exists(FileName)) {
var text = File.ReadAllText(FileName);
return JsonConvert.DeserializeObject<Settings>(text) ?? new Settings();
}
} catch (Exception) {
// Error reading settings. Return default.
}
return new Settings();
}
public void Save() {
var path = Path.GetDirectoryName(FileName);
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
var text = JsonConvert.SerializeObject(this, Formatting.Indented);
try {
File.WriteAllText(FileName, text);
} catch (IOException) {
// Error saving settings. Ignore.
}
}
#endregion
public double MainWindowLeft;
public double MainWindowTop;
public double MainWindowWidth;
public double MainWindowHeight;
public string SelectedSheetName;
public string FilterSheetTerm;
public string FilterDataTerm;
public bool ShowOffsets;
public bool SortByOffsets;
}
}
================================================
FILE: Godbert/ViewModels/BookmarkViewModel.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Godbert.ViewModels {
public class BookmarkViewModel {
public string SheetName { get; set; }
public int Key { get; set; }
public string RowDefault { get; set; }
public int? ColumnIndex { get; set; }
public string ColumnName { get; set; }
public override string ToString() {
var rowIdentifier = $"{SheetName}#{Key}";
var sb = new StringBuilder();
sb.Append(rowIdentifier);
if (ColumnName != null)
sb.Append($" [{ColumnIndex} {ColumnName}]");
else if (ColumnIndex != null)
sb.Append($" [{ColumnIndex}]");
if (!string.IsNullOrWhiteSpace(RowDefault) && RowDefault != rowIdentifier) {
sb.AppendLine();
sb.Append(RowDefault);
}
return sb.ToString();
}
public override bool Equals(object obj) {
var b = obj as BookmarkViewModel;
if (b == null)
return false;
return b.SheetName == SheetName && b.Key == Key && b.ColumnIndex == ColumnIndex;
}
public override int GetHashCode() {
return SheetName.GetHashCode() ^ Key.GetHashCode() ^ (ColumnIndex ?? 0).GetHashCode();
}
}
}
================================================
FILE: Godbert/ViewModels/DataViewModel.cs
================================================
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using System.Windows;
using SaintCoinach.Ex.Relational;
namespace Godbert.ViewModels {
using Commands;
public class DataViewModel : ObservableBase {
#region Fields
private string _SelectedSheetName;
private IRelationalSheet _SelectedSheet;
private DelegateCommand _ExportCsvCommand;
private string _FilterSheetTerm;
private IEnumerable<string> _FilteredSheets;
private string _FilterDataTerm;
private ObservableCollection<BookmarkViewModel> _Bookmarks = new ObservableCollection<BookmarkViewModel>();
#endregion
#region Properties
public ICommand ExportCsvCommand { get { return _ExportCsvCommand ?? (_ExportCsvCommand = new DelegateCommand(OnExportCsv)); } }
public SaintCoinach.ARealmReversed Realm { get; private set; }
public MainViewModel Parent { get; private set; }
public IEnumerable<string> FilteredSheetNames { get { return _FilteredSheets; } }
public string SelectedSheetName {
get { return _SelectedSheetName; }
set {
_SelectedSheetName = value;
_SelectedSheet = null;
OnPropertyChanged(() => SelectedSheetName);
OnPropertyChanged(() => SelectedSheet);
Settings.Default.SelectedSheetName = value;
}
}
public IRelationalSheet SelectedSheet {
get {
if (string.IsNullOrWhiteSpace(SelectedSheetName))
return null;
if (_SelectedSheet == null)
_SelectedSheet = Realm.GameData.GetSheet(SelectedSheetName);
return _SelectedSheet;
}
}
public string FilterSheetTerm {
get { return _FilterSheetTerm; }
set {
_FilterSheetTerm = value;
if (string.IsNullOrWhiteSpace(value))
_FilteredSheets = Realm.GameData.AvailableSheets;
else
_FilteredSheets = Realm.GameData.AvailableSheets.Where(s => s.IndexOf(value, StringComparison.OrdinalIgnoreCase) >= 0).ToArray();
OnPropertyChanged(() => FilterSheetTerm);
OnPropertyChanged(() => FilteredSheetNames);
Settings.Default.FilterSheetTerm = value;
}
}
public string FilterDataTerm {
get { return _FilterDataTerm; }
set {
_FilterDataTerm = value;
OnPropertyChanged(() => FilterDataTerm);
Settings.Default.FilterDataTerm = value;
}
}
public ObservableCollection<BookmarkViewModel> Bookmarks {
get { return _Bookmarks; }
}
public Visibility BookmarksVisibility {
get { return _Bookmarks.Count > 0 ? Visibility.Visible : Visibility.Collapsed; }
}
#endregion
#region Constructor
public DataViewModel(SaintCoinach.ARealmReversed realm, MainViewModel parent) {
this.Realm = realm;
this.Parent = parent;
_FilteredSheets = Realm.GameData.AvailableSheets;
_SelectedSheetName = Settings.Default.SelectedSheetName;
_FilterDataTerm = Settings.Default.FilterDataTerm;
FilterSheetTerm = Settings.Default.FilterSheetTerm;
_Bookmarks.CollectionChanged += _Bookmarks_CollectionChanged;
}
#endregion
#region Export
private void OnExportCsv() {
if (SelectedSheet == null)
return;
var dlg = new Microsoft.Win32.SaveFileDialog {
DefaultExt = ".csv",
Filter = "CSV Files (*.csv)|*.csv",
AddExtension = true,
OverwritePrompt = true,
FileName = FixName(SelectedSheet.Name) + ".csv"
};
if (dlg.ShowDialog().GetValueOrDefault(false))
SaveAsCsv(SelectedSheet, dlg.FileName);
}
private static string FixName(string original) {
var idx = original.LastIndexOf('/');
if (idx >= 0)
return original.Substring(idx + 1);
return original;
}
static void SaveAsCsv(IRelationalSheet sheet, string path) {
using (var s = new StreamWriter(path, false, Encoding.UTF8)) {
var indexLine = new StringBuilder("key");
var nameLine = new StringBuilder("#");
var typeLine = new StringBuilder("int32");
var colIndices = new List<int>();
foreach (var col in sheet.Header.Columns) {
indexLine.AppendFormat(",{0}", col.Index);
nameLine.AppendFormat(",{0}", col.Name);
typeLine.AppendFormat(",{0}", col.ValueType);
colIndices.Add(col.Index);
}
s.WriteLine(indexLine);
s.WriteLine(nameLine);
s.WriteLine(typeLine);
foreach (var row in sheet.Cast<SaintCoinach.Ex.IRow>().OrderBy(_ => _.Key)) {
s.Write(row.Key);
foreach (var col in colIndices) {
var v = row[col];
if (v == null)
s.Write(",");
else if (v is IDictionary<int, object>)
WriteDict(s, v as IDictionary<int, object>);
else if (IsUnescaped(v))
s.Write(",{0}", v);
else
s.Write(",\"{0}\"", v.ToString().Replace("\"", "\"\""));
}
s.WriteLine();
}
}
}
static void WriteDict(StreamWriter s, IDictionary<int, object> v) {
s.Write(",\"");
var isFirst = true;
foreach (var kvp in v) {
if (isFirst)
isFirst = false;
else
s.Write(",");
s.Write("[{0},", kvp.Key);
if (kvp.Value != null)
s.Write(kvp.Value.ToString().Replace("\"", "\"\""));
s.Write("]");
}
s.Write("\"");
}
static bool IsUnescaped(object self) {
return (self is Boolean
|| self is Byte
|| self is SByte
|| self is Int16
|| self is Int32
|| self is Int64
|| self is UInt16
|| self is UInt32
|| self is UInt64
|| self is Single
|| self is Double);
}
#endregion
private void _Bookmarks_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) {
OnPropertyChanged(() => BookmarksVisibility);
}
}
}
================================================
FILE: Godbert/ViewModels/DemihumanViewModel.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using SaintCoinach.Graphics;
using SaintCoinach.Graphics.Viewer;
using SaintCoinach.Graphics.Viewer.Content;
using SaintCoinach.Xiv;
namespace Godbert.ViewModels {
using Commands;
public class DemihumanViewModel : ObservableBase {
const string ImcPathFormat = "chara/demihuman/d{0:D4}/obj/equipment/e{1:D4}/e{1:D4}.imc";
static readonly string[] ModelPathFormats = new string[] {
"chara/demihuman/d{0:D4}/obj/equipment/e{1:D4}/model/d{0:D4}e{1:D4}_met.mdl",
"chara/demihuman/d{0:D4}/obj/equipment/e{1:D4}/model/d{0:D4}e{1:D4}_top.mdl",
"chara/demihuman/d{0:D4}/obj/equipment/e{1:D4}/model/d{0:D4}e{1:D4}_glv.mdl",
"chara/demihuman/d{0:D4}/obj/equipment/e{1:D4}/model/d{0:D4}e{1:D4}_dwn.mdl",
"chara/demihuman/d{0:D4}/obj/equipment/e{1:D4}/model/d{0:D4}e{1:D4}_sho.mdl",
};
#region Fields
private Models.ModelCharaHierarchy _Entries;
private object _SelectedEntry;
private bool[] _SelectedParts = new bool[] {
true,
true,
true,
true,
true
};
#endregion
#region Properties
public MainViewModel Parent { get; private set; }
public Models.ModelCharaHierarchy Entries {
get { return _Entries; }
private set {
_Entries = value;
OnPropertyChanged(() => Entries);
}
}
public object SelectedEntry {
get { return _SelectedEntry; }
set {
_SelectedEntry = value;
OnPropertyChanged(() => SelectedEntry);
OnPropertyChanged(() => IsValidSelection);
}
}
public bool IsValidSelection { get { return SelectedEntry is Models.ModelCharaVariant; } }
public bool ShowPart0 {
get { return _SelectedParts[0]; }
set {
_SelectedParts[0] = value;
OnPropertyChanged(() => ShowPart0);
}
}
public bool ShowPart1 {
get { return _SelectedParts[1]; }
set {
_SelectedParts[1] = value;
OnPropertyChanged(() => ShowPart0);
}
}
public bool ShowPart2 {
get { return _SelectedParts[2]; }
set {
_SelectedParts[2] = value;
OnPropertyChanged(() => ShowPart0);
}
}
public bool ShowPart3 {
get { return _SelectedParts[3]; }
set {
_SelectedParts[3] = value;
OnPropertyChanged(() => ShowPart3);
}
}
public bool ShowPart4 {
get { return _SelectedParts[4]; }
set {
_SelectedParts[4] = value;
OnPropertyChanged(() => ShowPart4);
}
}
#endregion
#region Constructor
public DemihumanViewModel(MainViewModel parent) {
this.Parent = parent;
Entries = new Models.ModelCharaHierarchy("d{0:D4}", "e{0:D4}", "v{0:D4}");
foreach (var mc in parent.Realm.GameData.GetSheet<ModelChara>().Where(mc => mc.Type == 2)) {
var imcPath = string.Format(ImcPathFormat, mc.ModelKey, mc.BaseKey);
if (parent.Realm.Packs.FileExists(imcPath))
Entries.Add(mc);
}
}
#endregion
#region Commands
private ICommand _AddCommand;
private ICommand _ReplaceCommand;
private ICommand _NewCommand;
public ICommand AddCommand { get { return _AddCommand ?? (_AddCommand = new DelegateCommand(OnAdd)); } }
public ICommand ReplaceCommand { get { return _ReplaceCommand ?? (_ReplaceCommand = new DelegateCommand(OnReplace)); } }
public ICommand NewCommand { get { return _NewCommand ?? (_NewCommand = new DelegateCommand(OnNew)); } }
private void OnAdd() {
string title;
Tuple<ModelDefinition, ImcVariant>[] models;
if (TryGetModel(out title, out models))
Parent.EngineHelper.AddToLast(title, (e) => models.Select(m => new SaintCoinach.Graphics.Viewer.Content.ContentModel(e, m.Item2, m.Item1, ModelQuality.High)).ToArray());
}
private void OnReplace() {
string title;
Tuple<ModelDefinition, ImcVariant>[] models;
if (TryGetModel(out title, out models))
Parent.EngineHelper.ReplaceInLast(title, (e) => models.Select(m => new SaintCoinach.Graphics.Viewer.Content.ContentModel(e, m.Item2, m.Item1, ModelQuality.High)).ToArray());
}
private void OnNew() {
string title;
Tuple<ModelDefinition, ImcVariant>[] models;
if (TryGetModel(out title, out models))
Parent.EngineHelper.OpenInNew(title, (e) => models.Select(m => new SaintCoinach.Graphics.Viewer.Content.ContentModel(e, m.Item2, m.Item1, ModelQuality.High)).ToArray());
}
private bool TryGetModel(out string title, out Tuple<ModelDefinition, ImcVariant>[] models) {
title = null;
models = null;
var asVariant = SelectedEntry as Models.ModelCharaVariant;
if (asVariant == null)
return false;
title = asVariant.ToString();
int v = asVariant.Value;
int e = asVariant.Parent.Value;
var d = asVariant.Parent.Parent.Value;
var imcPath = string.Format(ImcPathFormat, d, e);
SaintCoinach.IO.File imcFileBase;
if (!Parent.Realm.Packs.TryGetFile(imcPath, out imcFileBase)) {
System.Windows.MessageBox.Show(string.Format("Unable to find files for {0}.", title), "File not found", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
return false;
}
try {
var imcFile = new ImcFile(imcFileBase);
var modelsList = new List<Tuple<ModelDefinition, ImcVariant>>();
foreach(var part in imcFile.Parts) {
if (!_SelectedParts[part.Bit])
continue;
var variant = part.Variants[v];
if(variant.Variant == 0)
continue;
var mdlPath = string.Format(ModelPathFormats[part.Bit], d, e);
SaintCoinach.IO.File mdlBase;
if(!Parent.Realm.Packs.TryGetFile(mdlPath, out mdlBase))
continue;
var mdl = ((ModelFile)mdlBase).GetModelDefinition();
modelsList.Add(Tuple.Create(mdl, variant));
}
if(modelsList.Count == 0) {
System.Windows.MessageBox.Show(string.Format("No models found for {0}.", title), "No models", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
return false;
}
models = modelsList.ToArray();
return true;
} catch (Exception ex) {
System.Windows.MessageBox.Show(string.Format("Unable to load model for {0}:{1}{2}", title, Environment.NewLine, ex), "Failure to load", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
return false;
}
}
#endregion
#region Brute-force
private bool _IsBruteForceAvailable = true;
private ICommand _BruteForceCommand;
public bool IsBruteForceAvailable {
get { return _IsBruteForceAvailable; }
private set {
_IsBruteForceAvailable = value;
OnPropertyChanged(() => IsBruteForceAvailable);
}
}
public ICommand BruteForceCommand { get { return _BruteForceCommand ?? (_BruteForceCommand = new DelegateCommand(OnBruteForce)); } }
private void OnBruteForce() {
IsBruteForceAvailable = false;
var progDlg = new Ookii.Dialogs.Wpf.ProgressDialog();
progDlg.WindowTitle = "Brute-forcing";
progDlg.Text = "This is going to take a while...";
progDlg.DoWork += DoBruteForceWork;
progDlg.RunWorkerCompleted += OnBruteForceComplete;
progDlg.ShowDialog(System.Windows.Application.Current.MainWindow);
progDlg.ProgressBarStyle = Ookii.Dialogs.Wpf.ProgressBarStyle.ProgressBar;
progDlg.ShowTimeRemaining = true;
}
void OnBruteForceComplete(object sender, System.ComponentModel.RunWorkerCompletedEventArgs eventArgs) {
if (eventArgs.Cancelled)
IsBruteForceAvailable = true;
}
void DoBruteForceWork(object sender, System.ComponentModel.DoWorkEventArgs eventArgs) {
var dlg = (Ookii.Dialogs.Wpf.ProgressDialog)sender;
var newEntries = new Models.ModelCharaHierarchy(Entries.MainFormat, Entries.SubFormat, Entries.VariantFormat);
for (var d = 0; d < 10000; ++d) {
if (dlg.CancellationPending)
return;
dlg.ReportProgress(d / 100, null, string.Format("Current progress: {0:P}", d / 10000.0));
for (var e = 0; e < 10000; ++e) {
//dlg.ReportProgress(((d * 10000) + e) / (10000 * 100));
var imcPath = string.Format(ImcPathFormat, d, e);
SaintCoinach.IO.File imcBase;
if (!Parent.Realm.Packs.TryGetFile(imcPath, out imcBase))
continue;
try {
var imc = new SaintCoinach.Graphics.ImcFile(imcBase);
for (var v = 1; v < imc.Count; ++v) {
/*if (Entries.Contains(d, e, v))
continue;*/
var any = false;
foreach (var p in imc.Parts) {
if (p.Variants[v].Variant != 0) {
any = true;
break;
}
}
if (any)
newEntries.Add(d, e, v);
}
} catch (Exception ex) {
Console.Error.WriteLine("Failed parsing imc file {0}:{1}{2}", imcPath, Environment.NewLine, ex);
}
}
}
Entries = newEntries;
}
#endregion
}
}
================================================
FILE: Godbert/ViewModels/EquipmentViewModel.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using SaintCoinach.Graphics;
using SaintCoinach.Graphics.Viewer;
using SaintCoinach.Xiv;
using SaintCoinach.Xiv.Items;
namespace Godbert.ViewModels {
using Commands;
public class EquipmentViewModel : ObservableBase {
#region Fields
private Equipment[] _AllEquipment;
private Equipment[] _FilteredEquipment;
private Equipment _SelectedEquipment;
private Stain _SelectedStain;
private string _FilterTerm;
#endregion
#region Properties
public MainViewModel Parent { get; private set; }
public IEnumerable<Equipment> AllEquipment { get { return _AllEquipment; } }
public IEnumerable<Equipment> FilteredEquipment { get { return _FilteredEquipment; } }
public Equipment SelectedEquipment {
get { return _SelectedEquipment; }
set {
_SelectedEquipment = value;
OnPropertyChanged(() => SelectedEquipment);
}
}
public IEnumerable<Stain> Stains { get; private set; }
public Stain SelectedStain {
get { return _SelectedStain; }
set {
_SelectedStain = value;
OnPropertyChanged(() => SelectedStain);
}
}
public string FilterTerm {
get { return _FilterTerm; }
set {
_FilterTerm = value;
if (string.IsNullOrWhiteSpace(value))
_FilteredEquipment = _AllEquipment;
else
_FilteredEquipment = _AllEquipment.Where(e => e.Name.ToString().IndexOf(value, StringComparison.OrdinalIgnoreCase) >= 0).ToArray();
OnPropertyChanged(() => FilterTerm);
OnPropertyChanged(() => FilteredEquipment);
}
}
#endregion
#region Constructor
public EquipmentViewModel(MainViewModel parent) {
this.Parent = parent;
// Ignore waist and soul crystals
_AllEquipment = Parent.Realm.GameData.GetSheet<Item>().OfType<Equipment>().Where(e => !e.EquipSlotCategory.PossibleSlots.Any(s => s.Key == 5 || s.Key == 13)).OrderBy(e => e.Name).ToArray();
Stains = Parent.Realm.GameData.GetSheet<Stain>();
_FilteredEquipment = _AllEquipment;
}
#endregion
#region Command
private ICommand _AddCommand;
private ICommand _ReplaceCommand;
private ICommand _NewCommand;
public ICommand AddCommand { get { return _AddCommand ?? (_AddCommand = new DelegateCommand(OnAdd)); } }
public ICommand ReplaceCommand { get { return _ReplaceCommand ?? (_ReplaceCommand = new DelegateCommand(OnReplace)); } }
public ICommand NewCommand { get { return _NewCommand ?? (_NewCommand = new DelegateCommand(OnNew)); } }
private void OnAdd() {
if (TryGetModel(out var model, out var variant))
Parent.EngineHelper.AddToLast(SelectedEquipment.Name, (e) => new SaintCoinach.Graphics.Viewer.Content.ContentModel(e, variant, model, ModelQuality.High));
}
private void OnReplace() {
if (TryGetModel(out var model, out var variant))
Parent.EngineHelper.ReplaceInLast(SelectedEquipment.Name, (e) => new SaintCoinach.Graphics.Viewer.Content.ContentModel(e, variant, model, ModelQuality.High));
}
private void OnNew() {
if (TryGetModel(out var model, out var variant))
Parent.EngineHelper.OpenInNew(SelectedEquipment.Name, (e) => new SaintCoinach.Graphics.Viewer.Content.ContentModel(e, variant, model, ModelQuality.High));
}
private bool TryGetModel(out ModelDefinition model, out ModelVariantIdentifier variant) {
model = null;
variant = default(ModelVariantIdentifier);
if (SelectedEquipment == null)
return false;
var charType = SelectedEquipment.GetModelCharacterType();
if (charType == 0)
return false;
try {
model = SelectedEquipment.GetModel(charType, out variant.ImcVariant);
if (SelectedEquipment.IsDyeable && SelectedStain != null)
variant.StainKey = SelectedStain.Key;
var result = (model != null);
if (!result)
System.Windows.MessageBox.Show(string.Format("Unable to find model for {0} (c{1:D4}).", SelectedEquipment.Name, charType), "Model not found", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
return result;
} catch (Exception e) {
System.Windows.MessageBox.Show(string.Format("Failed to load model for {0} (c{1:D4}):{2}{3}", SelectedEquipment.Name, charType, Environment.NewLine, e), "Read failure", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
return false;
}
}
#endregion
#region Refresh
public void Refresh() {
_FilteredEquipment = _FilteredEquipment.ToArray();
OnPropertyChanged(() => FilteredEquipment);
}
#endregion
}
}
================================================
FILE: Godbert/ViewModels/FurnitureViewModel.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using SaintCoinach.Graphics;
using SaintCoinach.Graphics.Sgb;
using SaintCoinach.Graphics.Viewer;
using SaintCoinach.Xiv;
namespace Godbert.ViewModels {
using Commands;
public class FurnitureViewModel : ObservableBase {
#region Fields
private HousingItem[] _AllFurniture;
private HousingItem[] _FilteredFurniture;
private HousingItem _SelectedFurniture;
private Stain _SelectedStain;
private string _FilterTerm;
private SaintCoinach.Graphics.Viewer.Data.ParametersBase _Parameters = new SaintCoinach.Graphics.Viewer.Data.ParametersBase();
#endregion
#region Properties
public MainViewModel Parent { get; private set; }
public IEnumerable<HousingItem> AllFurniture { get { return _AllFurniture; } }
public IEnumerable<HousingItem> FilteredFurniture { get { return _FilteredFurniture; } }
public HousingItem SelectedFurniture {
get { return _SelectedFurniture; }
set {
_SelectedFurniture = value;
OnPropertyChanged(() => SelectedFurniture);
}
}
public IEnumerable<Stain> Stains { get; private set; }
public Stain SelectedStain {
get { return _SelectedStain; }
set {
if (value == null || value.Key == 0)
_Parameters.Remove(SaintCoinach.Graphics.Viewer.Content.BgColorChangeMaterial.ColorParameterKey);
else
_Parameters.Set(SaintCoinach.Graphics.Viewer.Content.BgColorChangeMaterial.ColorParameterKey, new SharpDX.Vector4(value.Color.R / 255f, value.Color.G / 255f, value.Color.B / 255f, value.Color.A / 255f));
_SelectedStain = value;
OnPropertyChanged(() => SelectedStain);
}
}
public string FilterTerm {
get { return _FilterTerm; }
set {
_FilterTerm = value;
if (string.IsNullOrWhiteSpace(value))
_FilteredFurniture = _AllFurniture;
else
_FilteredFurniture = _AllFurniture.Where(e => e.Item.Name.ToString().IndexOf(value, StringComparison.OrdinalIgnoreCase) >= 0).ToArray();
OnPropertyChanged(() => FilterTerm);
OnPropertyChanged(() => FilteredFurniture);
}
}
#endregion
#region Constructor
public FurnitureViewModel(MainViewModel parent) {
this.Parent = parent;
var indoor = Parent.Realm.GameData.GetSheet<HousingFurniture>();
var outdoor = Parent.Realm.GameData.GetSheet<HousingYardObject>();
_AllFurniture = indoor.Cast<HousingItem>().Concat(outdoor.Cast<HousingItem>()).Where(_ => _.Item != null && _.Item.Key != 0 && _.Item.Name.ToString().Length > 0).OrderBy(_ => _.Item.Name).ToArray();
Stains = Parent.Realm.GameData.GetSheet<Stain>();
_FilteredFurniture = _AllFurniture;
}
#endregion
#region Command
private ICommand _AddCommand;
private ICommand _ReplaceCommand;
private ICommand _NewCommand;
public ICommand AddCommand { get { return _AddCommand ?? (_AddCommand = new DelegateCommand(OnAdd)); } }
public ICommand ReplaceCommand { get { return _ReplaceCommand ?? (_ReplaceCommand = new DelegateCommand(OnReplace)); } }
public ICommand NewCommand { get { return _NewCommand ?? (_NewCommand = new DelegateCommand(OnNew)); } }
private void OnAdd() {
SgbFile scene;
if (TryGetModel(out scene))
Parent.EngineHelper.AddToLast(SelectedFurniture.Item.Name, (e) => new SaintCoinach.Graphics.Viewer.Content.ContentSgb(e, scene, (SaintCoinach.Graphics.Viewer.Data.ParametersBase)_Parameters.Clone()));
}
private void OnReplace() {
SgbFile scene;
if (TryGetModel(out scene))
Parent.EngineHelper.ReplaceInLast(SelectedFurniture.Item.Name, (e) => new SaintCoinach.Graphics.Viewer.Content.ContentSgb(e, scene, (SaintCoinach.Graphics.Viewer.Data.ParametersBase)_Parameters.Clone()));
}
private void OnNew() {
SgbFile scene;
if (TryGetModel(out scene))
Parent.EngineHelper.OpenInNew(SelectedFurniture.Item.Name, (e) => new SaintCoinach.Graphics.Viewer.Content.ContentSgb(e, scene, (SaintCoinach.Graphics.Viewer.Data.ParametersBase)_Parameters.Clone()));
}
private bool TryGetModel(out SgbFile model) {
model = null;
if (SelectedFurniture == null)
return false;
try {
model = SelectedFurniture.GetScene();
var result = (model != null);
if (!result)
System.Windows.MessageBox.Show(string.Format("Unable to find model for {0}.", SelectedFurniture.Item.Name), "Model not found", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
return result;
} catch (Exception e) {
System.Windows.MessageBox.Show(string.Format("Failed to load model for {0}:{2}{3}", SelectedFurniture.Item.Name, Environment.NewLine, e), "Read failure", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
return false;
}
}
#endregion
#region Refresh
public void Refresh() {
_FilteredFurniture = _FilteredFurniture.ToArray();
OnPropertyChanged(() => FilteredFurniture);
}
#endregion
}
}
================================================
FILE: Godbert/ViewModels/MainViewModel.cs
================================================
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
namespace Godbert.ViewModels {
using Commands;
using SaintCoinach;
using SaintCoinach.Xiv;
public class MainViewModel : ObservableBase {
#region Properties
public ARealmReversed Realm { get; private set; }
public EngineHelper EngineHelper { get; private set; }
public EquipmentViewModel Equipment { get; private set; }
public FurnitureViewModel Furniture { get; private set; }
public MonstersViewModel Monsters { get; private set; }
public TerritoryViewModel Territories { get; private set; }
public DemihumanViewModel Demihuman { get; private set; }
public DataViewModel Data { get; private set; }
public bool IsEnglish { get { return Realm.GameData.ActiveLanguage == SaintCoinach.Ex.Language.English; } }
public bool IsJapanese { get { return Realm.GameData.ActiveLanguage == SaintCoinach.Ex.Language.Japanese; } }
public bool IsFrench { get { return Realm.GameData.ActiveLanguage == SaintCoinach.Ex.Language.French; } }
public bool IsGerman { get { return Realm.GameData.ActiveLanguage == SaintCoinach.Ex.Language.German; } }
public bool IsChineseSimplified { get { return Realm.GameData.ActiveLanguage == SaintCoinach.Ex.Language.ChineseSimplified; } }
public bool IsKorean { get { return Realm.GameData.ActiveLanguage == SaintCoinach.Ex.Language.Korean; } }
public bool SortByOffsets { get { return Settings.Default.SortByOffsets;} }
public bool ShowOffsets { get { return Settings.Default.ShowOffsets; } }
#endregion
#region Events
public event EventHandler DataGridChanged;
#endregion
#region Constructor
public MainViewModel() {
if (!App.IsValidGamePath(Properties.Settings.Default.GamePath))
return;
var languages = new[] { SaintCoinach.Ex.Language.English, SaintCoinach.Ex.Language.ChineseSimplified, SaintCoinach.Ex.Language.Korean };
NotSupportedException lastException = null;
foreach (var language in languages) {
try {
var realm = new ARealmReversed(Properties.Settings.Default.GamePath, language);
Initialize(realm);
lastException = null;
break;
}
catch (NotSupportedException e) {
lastException = e;
continue;
}
}
if (lastException != null) {
throw new AggregateException(new[] { lastException });
}
}
public MainViewModel(ARealmReversed realm) {
Initialize(realm);
}
void Initialize(ARealmReversed realm) {
realm.Packs.GetPack(new SaintCoinach.IO.PackIdentifier("exd", SaintCoinach.IO.PackIdentifier.DefaultExpansion, 0)).KeepInMemory = true;
Realm = realm;
EngineHelper = new EngineHelper();
Equipment = new EquipmentViewModel(this);
Furniture = new FurnitureViewModel(this);
Monsters = new MonstersViewModel(this);
Territories = new TerritoryViewModel(this);
Demihuman = new DemihumanViewModel(this);
Data = new DataViewModel(Realm, this);
}
#endregion
#region Commands
private ICommand _LanguageCommand;
private ICommand _GameLocationCommand;
private ICommand _NewWindowCommand;
private ICommand _ShowOffsetsCommand;
private ICommand _SortByOffsetsCommand;
public ICommand LanguageCommand { get { return _LanguageCommand ?? (_LanguageCommand = new Commands.DelegateCommand<SaintCoinach.Ex.Language>(OnLanguage)); } }
public ICommand GameLocationCommand { get { return _GameLocationCommand ?? (_GameLocationCommand = new Commands.DelegateCommand(OnGameLocation)); } }
public ICommand NewWindowCommand { get { return _NewWindowCommand ?? (_NewWindowCommand = new Commands.DelegateCommand(OnNewWindowCommand)); } }
public ICommand ShowOffsetsCommand { get { return _ShowOffsetsCommand ?? (_ShowOffsetsCommand = new Commands.DelegateCommand(OnShowOffsetsCommand)); } }
public ICommand SortByOffsetsCommand { get { return _SortByOffsetsCommand ?? (_SortByOffsetsCommand= new Commands.DelegateCommand(OnSortByOffsetsCommand)); } }
private void OnLanguage(SaintCoinach.Ex.Language newLanguage) {
Realm.GameData.ActiveLanguage = newLanguage;
OnPropertyChanged(() => IsEnglish);
OnPropertyChanged(() => IsJapanese);
OnPropertyChanged(() => IsGerman);
OnPropertyChanged(() => IsFrench);
OnPropertyChanged(() => IsChineseSimplified);
OnPropertyChanged(() => IsKorean);
Equipment.Refresh();
Territories.Refresh();
}
private void OnGameLocation() {
var res = System.Windows.MessageBox.Show("If you continue the application will restart and ask you for the game's installation directory, do you want to continue?", "Change game location", System.Windows.MessageBoxButton.YesNo, System.Windows.MessageBoxImage.Exclamation);
if (res == System.Windows.MessageBoxResult.Yes) {
Properties.Settings.Default.GamePath = null;
Properties.Settings.Default.Save();
var current = System.Diagnostics.Process.GetCurrentProcess();
var startInfo = new System.Diagnostics.ProcessStartInfo(current.MainModule.FileName);
startInfo.WorkingDirectory = Directory.GetCurrentDirectory();
System.Diagnostics.Process.Start(startInfo);
App.Current.Shutdown();
}
}
private void OnNewWindowCommand() {
Mouse.OverrideCursor = Cursors.Wait;
try {
var viewModel = new MainViewModel(Realm);
var window = new MainWindow() { DataContext = viewModel };
window.Show();
}
finally {
Mouse.OverrideCursor = null;
}
}
private void OnShowOffsetsCommand() {
Settings.Default.ShowOffsets = !Settings.Default.ShowOffsets;
OnPropertyChanged(() => ShowOffsets);
}
private void OnSortByOffsetsCommand() {
Settings.Default.SortByOffsets = !Settings.Default.SortByOffsets;
OnPropertyChanged(() => SortByOffsets);
}
#endregion
}
}
================================================
FILE: Godbert/ViewModels/MapsViewModel.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using SaintCoinach.Graphics;
using SaintCoinach.Graphics.Viewer;
using SaintCoinach.Xiv;
namespace Godbert.ViewModels {
using Commands;
public class MapsViewModel : ObservableBase {
#region Fields
private Map[] _Maps;
private Map _SelectedMap;
#endregion
#region Properties
public MainViewModel Parent { get; private set; }
public IEnumerable<Map> Maps { get { return _Maps; } }
public Map SelectedMap {
get { return _SelectedMap; }
set {
_SelectedMap = value;
OnPropertyChanged(() => SelectedMap);
}
}
#endregion
#region Constructor
public MapsViewModel(MainViewModel parent) {
this.Parent = parent;
var allMaps = parent.Realm.GameData.GetSheet<Map>();
_Maps = allMaps.Where(m => m.TerritoryType != null && m.TerritoryType.Key > 1 && m.PlaceName != null && m.PlaceName.Key != 0 && m.RegionPlaceName != null && m.RegionPlaceName.Key != 0).ToArray();
}
#endregion
#region Commands
private ICommand _OpenCommand;
public ICommand OpenCommand { get { return _OpenCommand ?? (_OpenCommand = new DelegateCommand(OnOpen)); } }
private void OnOpen() {
if (SelectedMap == null)
return;
var n = string.Format("({0}) {1}: {2}", SelectedMap.Id, SelectedMap.RegionPlaceName, SelectedMap.PlaceName);
try {
var t = SelectedMap.GetTerritory();
if (t == null)
System.Windows.MessageBox.Show(string.Format("Could not find territory data for {0}.", n), "Territory not found", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
else
Parent.EngineHelper.OpenInNew(n, (e) => new SaintCoinach.Graphics.Viewer.Content.ContentTerritory(e, t));
} catch (Exception e) {
System.Windows.MessageBox.Show(string.Format("Error reading territory for {0}:{1}{2}", n, Environment.NewLine, e), "Failure to read territory", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
}
}
#endregion
#region Refresh
public void Refresh() {
_Maps = _Maps.ToArray();
OnPropertyChanged(() => Maps);
}
#endregion
}
}
================================================
FILE: Godbert/ViewModels/MonstersViewModel.cs
================================================
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Forms;
using System.Windows.Input;
using Ookii.Dialogs.Wpf;
using SaintCoinach.Graphics;
using SaintCoinach.Graphics.Viewer;
using SaintCoinach.Graphics.Viewer.Content;
using SaintCoinach.Graphics.Viewer.Interop;
using SaintCoinach.IO;
using SaintCoinach.Xiv;
using SaintCoinach.Xiv.ItemActions;
using Directory = System.IO.Directory;
using File = SaintCoinach.IO.File;
using ProgressBarStyle = Ookii.Dialogs.Wpf.ProgressBarStyle;
namespace Godbert.ViewModels {
using Commands;
public class MonstersViewModel : ObservableBase {
const string ImcPathFormat = "chara/monster/m{0:D4}/obj/body/b{1:D4}/b{1:D4}.imc";
const string ModelPathFormat = "chara/monster/m{0:D4}/obj/body/b{1:D4}/model/m{0:D4}b{1:D4}.mdl";
const string SkeletonPathFormat = "chara/monster/m{0:D4}/skeleton/base/b{1:D4}/skl_m{0:D4}b{1:D4}.sklb";
const string PapPathFormat = "chara/monster/m{0:D4}/animation/a0001/bt_common/resident/monster.pap";
#region Fields
private Models.ModelCharaHierarchy _Entries;
private object _SelectedEntry;
private bool _IsExporting = false;
public bool IsExporting {
get { return _IsExporting; }
private set {
_IsExporting = value;
OnPropertyChanged(() => IsExporting);
}
}
#endregion
#region Properties
public Models.ModelCharaHierarchy Entries {
get { return _Entries; }
private set {
_Entries = value;
OnPropertyChanged(() => Entries);
}
}
public object SelectedEntry {
get { return _SelectedEntry; }
set {
_SelectedEntry = value;
OnPropertyChanged(() => SelectedEntry);
OnPropertyChanged(() => IsValidSelection);
}
}
public bool IsValidSelection { get { return SelectedEntry is Models.ModelCharaVariant; } }
public MainViewModel Parent { get; private set; }
#endregion
#region Constructor
public MonstersViewModel(MainViewModel parent) {
this.Parent = parent;
var modelCharaSheet = Parent.Realm.GameData.GetSheet<ModelChara>();
Entries = new Models.ModelCharaHierarchy("m{0:D4}", "b{0:D4}", "v{0:D4}");
foreach(var mc in modelCharaSheet.Where(mc => mc.Type == 3)) {
var imcPath = string.Format(ImcPathFormat, mc.ModelKey, mc.BaseKey);
var mdlPath = string.Format(ModelPathFormat, mc.ModelKey, mc.BaseKey);
if(!Parent.Realm.Packs.FileExists(imcPath) ||!Parent.Realm.Packs.FileExists(mdlPath))
continue;
Entries.Add(mc);
}
}
#endregion
#region Command
private ICommand _AddCommand;
private ICommand _ReplaceCommand;
private ICommand _ExportCommand;
private ICommand _NewCommand;
public ICommand AddCommand { get { return _AddCommand ?? (_AddCommand = new DelegateCommand(OnAdd)); } }
public ICommand ReplaceCommand { get { return _ReplaceCommand ?? (_ReplaceCommand = new DelegateCommand(OnReplace)); } }
public ICommand ExportCommand { get { return _ExportCommand ?? (_ExportCommand = new DelegateCommand(OnExport)); } }
public ICommand NewCommand { get { return _NewCommand ?? (_NewCommand = new DelegateCommand(OnNew)); } }
private void OnAdd() {
Skeleton skele;
ModelDefinition model;
ImcVariant variant;
int m, b;
if (TryGetModel(out skele, out model, out variant, out m, out b))
Parent.EngineHelper.AddToLast(SelectedEntry.ToString(), (e) => CreateModel(e, skele, model, variant, m, b));
}
private void OnReplace() {
Skeleton skele;
ModelDefinition model;
ImcVariant variant;
int m, b;
if (TryGetModel(out skele, out model, out variant, out m, out b))
Parent.EngineHelper.ReplaceInLast(SelectedEntry.ToString(), (e) => CreateModel(e, skele, model, variant, m, b));
}
private void OnExport()
{
Skeleton skele;
ModelDefinition model;
ImcVariant variant;
int m, b;
if (!TryGetModel(out skele, out model, out variant, out m, out b)) return;
List<PapFile> paps = SearchPaps(model.File.Path, m);
VistaFolderBrowserDialog dialog = new VistaFolderBrowserDialog
{
Description = "Select folder to export to",
UseDescriptionForTitle = true
};
bool? result = dialog.ShowDialog();
if (result.HasValue && result.Value && !string.IsNullOrEmpty(dialog.SelectedPath))
{
Task.Run(() =>
{
string identifier = SelectedEntry.ToString().Replace(" / ", "_");
string folderName = Path.Combine(dialog.SelectedPath, identifier);
Directory.CreateDirectory(folderName);
string fileName = Path.Combine(folderName, identifier + ".fbx");
// Set IsExporting for feedback
IsExporting = true;
int exportResult = FbxExport.ExportFbx(fileName, model.GetModel(0).Meshes, skele, paps);
FbxExport.ExportMonsterMaterials(Parent.Realm, folderName, model.GetModel(0).Definition.Materials, variant);
IsExporting = false;
if (exportResult == 0)
System.Windows.MessageBox.Show("The export of " + Path.GetFileName(fileName) + " has completed.",
"Export Complete",
MessageBoxButton.OK,
MessageBoxImage.Information,
MessageBoxResult.OK,
System.Windows.MessageBoxOptions.DefaultDesktopOnly);
else
System.Windows.MessageBox.Show("The export of " + Path.GetFileName(fileName) + " has failed.",
"Export Failed",
MessageBoxButton.OK,
MessageBoxImage.Error,
MessageBoxResult.OK,
System.Windows.MessageBoxOptions.DefaultDesktopOnly);
});
}
}
private void OnNew() {
Skeleton skele;
ModelDefinition model;
ImcVariant variant;
int m, b;
if (TryGetModel(out skele, out model, out variant, out m, out b))
Parent.EngineHelper.OpenInNew(SelectedEntry.ToString(), (e) => CreateModel(e, skele, model, variant, m, b));
}
static string[] DefaultAnimationNames = { "cbnm_id0", "cbbm_id0" };
private List<PapFile> SearchPaps(string modelPath, int m)
{
/* The files found in these paths will all be exported
* If more paths are found, you can add them here
* A good starting point might be attempting to determine how
* a0002 animations are decided? */
string[] searchPaths =
{
"chara/monster/m{0:D4}/animation/a{1:D4}/bt_common/mon_sp/m{0:D4}",
"chara/monster/m{0:D4}/animation/a{1:D4}/bt_common/mon_sp/m{0:D4}/hide",
"chara/monster/m{0:D4}/animation/a{1:D4}/bt_common/mon_sp/m{0:D4}/show",
"chara/monster/m{0:D4}/animation/a{1:D4}/bt_common/event",
"chara/monster/m{0:D4}/animation/a{1:D4}/bt_common/minion",
"chara/monster/m{0:D4}/animation/a{1:D4}/bt_common/resident",
"chara/monster/m{0:D4}/animation/a{1:D4}/bt_common/specialpop"
};
SaintCoinach.IO.Directory d;
List<PapFile> allFiles = new List<PapFile>();
// Animations are in the same pack as the model itself
Pack p = Parent.Realm.Packs.GetPack(PackIdentifier.Get(modelPath));
foreach (string path in searchPaths) {
string currentFullPath = string.Format(path, m, 1);
((IndexSource)p.Source).TryGetDirectory(currentFullPath, out d);
if (d == null)
continue;
IEnumerator<File> dirEnumerator = d.GetEnumerator();
while (dirEnumerator.MoveNext())
allFiles.Add(new PapFile(dirEnumerator.Current));
dirEnumerator.Dispose();
}
return allFiles;
}
private IComponent CreateModel(Engine engine, Skeleton skeleton, ModelDefinition model, ImcVariant variant, int m, int b) {
var component = new AnimatedModel(engine, skeleton, variant, model, ModelQuality.High) {};
var papPath = string.Format(PapPathFormat, m, b);
SaintCoinach.IO.File papFileBase;
if (Parent.Realm.Packs.TryGetFile(papPath, out papFileBase)) {
var anim = new AnimationContainer(skeleton, new PapFile(papFileBase));
var hasAnim = false;
for(var i = 0; i < DefaultAnimationNames.Length && !hasAnim; ++i) {
var n = DefaultAnimationNames[i];
if (anim.AnimationNames.Contains(n)) {
component.AnimationPlayer.Animation = anim.Get(n);
hasAnim = true;
}
}
if (!hasAnim)
component.AnimationPlayer.Animation = anim.Get(0);
}
return component;
}
private bool TryGetModel(out Skeleton skeleton, out ModelDefinition model, out ImcVariant variant, out int m, out int b) {
model = null;
skeleton = null;
variant = ImcVariant.Default;
m = 0;
b = 0;
var asVariant = SelectedEntry as Models.ModelCharaVariant;
if (asVariant == null)
return false;
int v = asVariant.Value;
b = asVariant.Parent.Value;
m = asVariant.Parent.Parent.Value;
var imcPath = string.Format(ImcPathFormat, m, b);
var mdlPath = string.Format(ModelPathFormat, m, b);
var sklPath = string.Format(SkeletonPathFormat, m, 1);// b);
SaintCoinach.IO.File imcFileBase;
SaintCoinach.IO.File mdlFileBase;
if (!Parent.Realm.Packs.TryGetFile(imcPath, out imcFileBase) || !Parent.Realm.Packs.TryGetFile(mdlPath, out mdlFileBase) || !(mdlFileBase is ModelFile)) {
System.Windows.MessageBox.Show(string.Format("Unable to find files for {0}.", asVariant), "File not found", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
return false;
}
SaintCoinach.IO.File sklFileBase;
if(!Parent.Realm.Packs.TryGetFile(sklPath, out sklFileBase)) {
System.Windows.MessageBox.Show(string.Format("Unable to find skeleton for {0}.", asVariant), "File not found", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
return false;
}
skeleton = new Skeleton(new SklbFile(sklFileBase));
try {
var imcFile = new ImcFile(imcFileBase);
model = ((ModelFile)mdlFileBase).GetModelDefinition();
variant = imcFile.GetVariant(v);
return true;
} catch (Exception e) {
System.Windows.MessageBox.Show(string.Format("Unable to load model for {0}:{1}{2}", asVariant, Environment.NewLine, e), "Failure to load", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
return false;
}
}
#endregion
#region Brute-force
private bool _IsBruteForceAvailable = true;
private ICommand _BruteForceCommand;
public bool IsBruteForceAvailable {
get { return _IsBruteForceAvailable; }
private set {
_IsBruteForceAvailable = value;
OnPropertyChanged(() => IsBruteForceAvailable);
}
}
public ICommand BruteForceCommand { get { return _BruteForceCommand ?? (_BruteForceCommand = new DelegateCommand(OnBruteForce)); } }
private void OnBruteForce() {
IsBruteForceAvailable = false;
var progDlg = new Ookii.Dialogs.Wpf.ProgressDialog();
progDlg.WindowTitle = "Brute-forcing";
progDlg.Text = "This is going to take a while...";
progDlg.DoWork += DoBruteForceWork;
progDlg.RunWorkerCompleted += OnBruteForceComplete;
progDlg.ShowDialog(System.Windows.Application.Current.MainWindow);
progDlg.ProgressBarStyle = Ookii.Dialogs.Wpf.ProgressBarStyle.ProgressBar;
progDlg.ShowTimeRemaining = true;
}
void OnBruteForceComplete(object sender, System.ComponentModel.RunWorkerCompletedEventArgs eventArgs) {
if (eventArgs.Cancelled)
IsBruteForceAvailable = true;
}
void DoBruteForceWork(object sender, System.ComponentModel.DoWorkEventArgs eventArgs) {
var dlg = (Ookii.Dialogs.Wpf.ProgressDialog)sender;
var newEntries = new Models.ModelCharaHierarchy(Entries.MainFormat, Entries.SubFormat, Entries.VariantFormat);
for (var m = 0; m < 10000; ++m) {
if (dlg.CancellationPending)
return;
dlg.ReportProgress(m / 100, null, string.Format("Current progress: {0:P}", m / 10000.0));
for (var b = 0; b < 10000; ++b) {
var imcPath = string.Format(ImcPathFormat, m, b);
SaintCoinach.IO.File imcBase;
if (!Parent.Realm.Packs.TryGetFile(imcPath, out imcBase))
continue;
try {
var imc = new SaintCoinach.Graphics.ImcFile(imcBase);
for (var v = 1; v < imc.Count; ++v) {
if (Entries.Contains(m, b, v))
continue;
var any = false;
foreach (var p in imc.Parts) {
if (p.Variants[v].Variant != 0) {
any = true;
break;
}
}
if (any)
newEntries.Add(m, b, v);
}
} catch (Exception ex) {
Console.Error.WriteLine("Failed parsing imc file {0}:{1}{2}", imcPath, Environment.NewLine, ex);
}
}
}
Entries = newEntries;
}
#endregion
}
}
================================================
FILE: Godbert/ViewModels/TerritoryViewModel.cs
================================================
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Input;
using SaintCoinach.Graphics;
using SaintCoinach.Graphics.Viewer;
using SaintCoinach;
using SaintCoinach.Xiv;
namespace Godbert.ViewModels {
using Commands;
using SharpDX;
using SaintCoinach.Graphics;
public class TerritoryViewModel : ObservableBase {
class ExportCancelException : Exception {
public ExportCancelException(string message) : base(message) {
}
}
#region Fields
private TerritoryView[] _AllTerritories;
private TerritoryView[] _FilteredTerritories;
private TerritoryView _SelectedTerritory;
private string _FilterTerm;
private Ookii.Dialogs.Wpf.ProgressDialog _Progress;
#endregion
#region Properties
public MainViewModel Parent { get; private set; }
public IEnumerable<TerritoryView> AllTerritories { get { return _AllTerritories; } }
public IEnumerable<TerritoryView> FilteredTerritories { get { return _FilteredTerritories; } }
public TerritoryView SelectedTerritory {
get { return _SelectedTerritory; }
set {
_SelectedTerritory = value;
OnPropertyChanged(() => SelectedTerritory);
}
}
public string FilterTerm {
get { return _FilterTerm; }
set {
_FilterTerm = value;
if (string.IsNullOrWhiteSpace(value))
_FilteredTerritories = _AllTerritories;
else
_FilteredTerritories = _AllTerritories.Where(e => e.Name.IndexOf(value, StringComparison.OrdinalIgnoreCase) >= 0).ToArray();
OnPropertyChanged(() => FilterTerm);
OnPropertyChanged(() => FilteredTerritories);
}
}
#endregion
#region Constructor
public TerritoryViewModel(MainViewModel parent) {
this.Parent = parent;
var allTerritoryTypes = parent.Realm.GameData.GetSheet<TerritoryType>();
_AllTerritories = allTerritoryTypes
.Where(t => !string.IsNullOrEmpty(t.Bg.ToString()))
.Select(t => new TerritoryView(t))
.OrderBy(m => m.PlaceNames)
.ThenBy(m => m.TerritoryType.Key)
.ToArray();
_FilteredTerritories = _AllTerritories;
}
#endregion
#region Commands
private ICommand _OpenCommand;
private ICommand _ExportCommand;
public ICommand OpenCommand { get { return _OpenCommand ?? (_OpenCommand = new DelegateCommand(OnOpen)); } }
public ICommand ExportCommand { get { return _ExportCommand ?? (_ExportCommand = new DelegateCommand(OnExport)); } }
private void OnOpen() {
if (SelectedTerritory == null)
return;
try {
var t = new Territory(SelectedTerritory.TerritoryType);
if (t == null)
System.Windows.MessageBox.Show(string.Format("Could not find territory data for {0}.", SelectedTerritory.Name), "Territory not found", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
else
Parent.EngineHelper.OpenInNew(SelectedTerritory.Name, (e) => new SaintCoinach.Graphics.Viewer.Content.ContentTerritory(e, t));
} catch (Exception e) {
System.Windows.MessageBox.Show(string.Format("Error reading territory for {0}:{1}{2}", SelectedTerritory.Name, Environment.NewLine, e), "Failure to read territory", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
}
}
private void OnExport() {
if (SelectedTerritory == null)
return;
try {
Territory territory = new Territory(SelectedTerritory.TerritoryType);
if (territory == null) {
System.Windows.MessageBox.Show($"Could not find territory data for {SelectedTerritory.Name}", "Territory not found", System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error);
return;
}
_Progress = new Ookii.Dialogs.Wpf.ProgressDialog() {
WindowTitle = "Exporting territory " + territory.Name
};
_Progress.Show();
_Progress.DoWork += (object sender, System.ComponentModel.DoWorkEventArgs eventArgs) => {
_Export(territory, (Ookii.Dialogs.Wpf.ProgressDialog)sender);
};
}
catch (Exception e) {
Sys
gitextract_w62xzu50/ ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── RELEASE.md │ └── workflows/ │ ├── build.yml │ └── json-validation.yaml ├── .gitignore ├── DotSquish/ │ ├── Alpha.cs │ ├── ClusterFit.cs │ ├── ColourBlock.cs │ ├── ColourFit.cs │ ├── ColourSet.cs │ ├── DotSquish.csproj │ ├── Flags.cs │ ├── Maths.cs │ └── Squish.cs ├── Godbert/ │ ├── App.config │ ├── App.xaml │ ├── App.xaml.cs │ ├── Commands/ │ │ └── DelegateCommand.cs │ ├── Controls/ │ │ ├── AttachedImage.cs │ │ ├── ColumnFactory.cs │ │ ├── INavigatable.cs │ │ ├── IRawDataColumn.cs │ │ ├── RawDataGrid.cs │ │ ├── RawDataGridColorColumn.cs │ │ ├── RawDataGridImageColumn.cs │ │ ├── RawDataGridKeyColumn.cs │ │ ├── RawDataGridTextColumn.cs │ │ └── RawDataItemsSource.cs │ ├── EngineHelper.cs │ ├── EngineInstance.cs │ ├── Godbert.csproj │ ├── MainWindow.xaml │ ├── MainWindow.xaml.cs │ ├── Models/ │ │ ├── ModelCharaHierarchy.cs │ │ ├── ModelCharaMain.cs │ │ ├── ModelCharaSub.cs │ │ └── ModelCharaVariant.cs │ ├── NaturalComparer.cs │ ├── ObservableBase.cs │ ├── Properties/ │ │ ├── AssemblyInfo.cs │ │ ├── Resources.Designer.cs │ │ ├── Resources.resx │ │ ├── Settings.Designer.cs │ │ └── Settings.settings │ ├── Settings.cs │ ├── ViewModels/ │ │ ├── BookmarkViewModel.cs │ │ ├── DataViewModel.cs │ │ ├── DemihumanViewModel.cs │ │ ├── EquipmentViewModel.cs │ │ ├── FurnitureViewModel.cs │ │ ├── MainViewModel.cs │ │ ├── MapsViewModel.cs │ │ ├── MonstersViewModel.cs │ │ └── TerritoryViewModel.cs │ ├── Views/ │ │ ├── DataView.xaml │ │ ├── DataView.xaml.cs │ │ ├── DemihumansView.xaml │ │ ├── DemihumansView.xaml.cs │ │ ├── EquipmentView.xaml │ │ ├── EquipmentView.xaml.cs │ │ ├── FurnitureView.xaml │ │ ├── FurnitureView.xaml.cs │ │ ├── Help3DView.xaml │ │ ├── Help3DView.xaml.cs │ │ ├── MapsView.xaml │ │ ├── MapsView.xaml.cs │ │ ├── MonstersView.xaml │ │ ├── MonstersView.xaml.cs │ │ ├── TerritoryView.xaml │ │ └── TerritoryView.xaml.cs │ └── WpfHelper.cs ├── LICENSE ├── NewAdditionsByPatch.txt ├── README.md ├── SaintCoinach/ │ ├── ARealmReversed.cs │ ├── ByteArrayExtensions.cs │ ├── Definitions/ │ │ ├── AOZArrangement.json │ │ ├── AOZBoss.json │ │ ├── AOZContent.json │ │ ├── AOZContentBriefingBNpc.json │ │ ├── AOZContentBriefingObject.json │ │ ├── AOZReport.json │ │ ├── AOZScore.json │ │ ├── Achievement.json │ │ ├── AchievementCategory.json │ │ ├── AchievementHideCondition.json │ │ ├── AchievementKind.json │ │ ├── AchievementTarget.json │ │ ├── Action.json │ │ ├── ActionCastTimeline.json │ │ ├── ActionCastVFX.json │ │ ├── ActionCategory.json │ │ ├── ActionComboRoute.json │ │ ├── ActionIndirection.json │ │ ├── ActionParam.json │ │ ├── ActionProcStatus.json │ │ ├── ActionTimeline.json │ │ ├── ActionTimelineMove.json │ │ ├── ActionTimelineReplace.json │ │ ├── ActionTransient.json │ │ ├── ActivityFeedButtons.json │ │ ├── ActivityFeedCaptions.json │ │ ├── ActivityFeedGroupCaptions.json │ │ ├── ActivityFeedImages.json │ │ ├── Addon.json │ │ ├── Adventure.json │ │ ├── AdventureExPhase.json │ │ ├── AetherCurrent.json │ │ ├── AetherCurrentCompFlgSet.json │ │ ├── AetherialWheel.json │ │ ├── Aetheryte.json │ │ ├── AetheryteSystemDefine.json │ │ ├── AetheryteTransient.json │ │ ├── AirshipExplorationLevel.json │ │ ├── AirshipExplorationLog.json │ │ ├── AirshipExplorationParamType.json │ │ ├── AirshipExplorationPart.json │ │ ├── AirshipExplorationPoint.json │ │ ├── AkatsukiNote.json │ │ ├── AkatsukiNoteString.json │ │ ├── AnimaWeapon5.json │ │ ├── AnimaWeapon5Param.json │ │ ├── AnimaWeapon5PatternGroup.json │ │ ├── AnimaWeapon5SpiritTalk.json │ │ ├── AnimaWeapon5SpiritTalkParam.json │ │ ├── AnimaWeapon5TradeItem.json │ │ ├── AnimaWeaponFUITalk.json │ │ ├── AnimaWeaponFUITalkParam.json │ │ ├── AnimaWeaponIcon.json │ │ ├── AnimaWeaponItem.json │ │ ├── AnimationLOD.json │ │ ├── AozAction.json │ │ ├── AozActionTransient.json │ │ ├── AquariumFish.json │ │ ├── AquariumWater.json │ │ ├── ArchiveItem.json │ │ ├── ArrayEventHandler.json │ │ ├── AttackType.json │ │ ├── Attract.json │ │ ├── BGM.json │ │ ├── BGMFade.json │ │ ├── BGMFadeType.json │ │ ├── BGMScene.json │ │ ├── BGMSituation.json │ │ ├── BGMSwitch.json │ │ ├── BGMSystemDefine.json │ │ ├── BNpcAnnounceIcon.json │ │ ├── BNpcBase.json │ │ ├── BNpcBasePopVfx.json │ │ ├── BNpcCustomize.json │ │ ├── BNpcName.json │ │ ├── BNpcParts.json │ │ ├── BNpcState.json │ │ ├── BacklightColor.json │ │ ├── Ballista.json │ │ ├── Balloon.json │ │ ├── BannerBg.json │ │ ├── BannerCondition.json │ │ ├── BannerDecoration.json │ │ ├── BannerDesignPreset.json │ │ ├── BannerFacial.json │ │ ├── BannerFrame.json │ │ ├── BannerObtainHintType.json │ │ ├── BannerPreset.json │ │ ├── BannerTimeline.json │ │ ├── BaseParam.json │ │ ├── BattleLeve.json │ │ ├── BattleLeveRule.json │ │ ├── BeastRankBonus.json │ │ ├── BeastReputationRank.json │ │ ├── BeastTribe.json │ │ ├── Behavior.json │ │ ├── BehaviorPath.json │ │ ├── BenchmarkOverrideEquipment.json │ │ ├── Booster.json │ │ ├── Buddy.json │ │ ├── BuddyAction.json │ │ ├── BuddyEquip.json │ │ ├── BuddyItem.json │ │ ├── BuddyRank.json │ │ ├── BuddySkill.json │ │ ├── CSBonusContent.json │ │ ├── CSBonusContentIdentifier.json │ │ ├── CSBonusContentType.json │ │ ├── CSBonusMission.json │ │ ├── CSBonusMissionType.json │ │ ├── CSBonusSeason.json │ │ ├── CSBonusTextData.json │ │ ├── Cabinet.json │ │ ├── CabinetCategory.json │ │ ├── Calendar.json │ │ ├── Carry.json │ │ ├── Channeling.json │ │ ├── CharaCardBase.json │ │ ├── CharaCardDecoration.json │ │ ├── CharaCardDesignCategory.json │ │ ├── CharaCardDesignPreset.json │ │ ├── CharaCardDesignType.json │ │ ├── CharaCardHeader.json │ │ ├── CharaCardPlayStyle.json │ │ ├── CharaMakeClassEquip.json │ │ ├── CharaMakeCustomize.json │ │ ├── CharaMakeName.json │ │ ├── CharaMakeType.json │ │ ├── ChocoboRace.json │ │ ├── ChocoboRaceAbility.json │ │ ├── ChocoboRaceAbilityType.json │ │ ├── ChocoboRaceItem.json │ │ ├── ChocoboRaceRank.json │ │ ├── ChocoboRaceStatus.json │ │ ├── ChocoboRaceTerritory.json │ │ ├── ChocoboRaceTutorial.json │ │ ├── ChocoboRaceWeather.json │ │ ├── ChocoboTaxi.json │ │ ├── ChocoboTaxiStand.json │ │ ├── CircleActivity.json │ │ ├── ClassJob.json │ │ ├── ClassJobActionSort.json │ │ ├── ClassJobCategory.json │ │ ├── CollectablesShop.json │ │ ├── CollectablesShopItem.json │ │ ├── CollectablesShopItemGroup.json │ │ ├── CollectablesShopRefine.json │ │ ├── CollectablesShopRewardItem.json │ │ ├── CollectablesShopRewardScrip.json │ │ ├── Companion.json │ │ ├── CompanionMove.json │ │ ├── CompanionTransient.json │ │ ├── CompanyAction.json │ │ ├── CompanyCraftDraft.json │ │ ├── CompanyCraftDraftCategory.json │ │ ├── CompanyCraftManufactoryState.json │ │ ├── CompanyCraftPart.json │ │ ├── CompanyCraftProcess.json │ │ ├── CompanyCraftSequence.json │ │ ├── CompanyCraftSupplyItem.json │ │ ├── CompanyCraftType.json │ │ ├── CompanyLeve.json │ │ ├── CompanyLeveRule.json │ │ ├── CompleteJournal.json │ │ ├── CompleteJournalCategory.json │ │ ├── Completion.json │ │ ├── Condition.json │ │ ├── ConfigKey.json │ │ ├── ContentCloseCycle.json │ │ ├── ContentEventItem.json │ │ ├── ContentExAction.json │ │ ├── ContentFinderCondition.json │ │ ├── ContentFinderConditionTransient.json │ │ ├── ContentGauge.json │ │ ├── ContentGaugeColor.json │ │ ├── ContentMemberType.json │ │ ├── ContentNpc.json │ │ ├── ContentNpcTalk.json │ │ ├── ContentRandomSelect.json │ │ ├── ContentRoulette.json │ │ ├── ContentRouletteOpenRule.json │ │ ├── ContentRouletteRoleBonus.json │ │ ├── ContentTalk.json │ │ ├── ContentTalkParam.json │ │ ├── ContentType.json │ │ ├── ContentsNote.json │ │ ├── ContentsTutorial.json │ │ ├── ContentsTutorialPage.json │ │ ├── CraftAction.json │ │ ├── CraftLeve.json │ │ ├── CraftLeveTalk.json │ │ ├── CraftLevelDifference.json │ │ ├── CraftType.json │ │ ├── Credit.json │ │ ├── CreditBackImage.json │ │ ├── CreditCast.json │ │ ├── CreditList.json │ │ ├── CreditListText.json │ │ ├── CustomTalk.json │ │ ├── CustomTalkDefineClient.json │ │ ├── CustomTalkNestHandlers.json │ │ ├── CutSceneIncompQuest.json │ │ ├── CutScreenImage.json │ │ ├── Cutscene.json │ │ ├── CutsceneMotion.json │ │ ├── CutsceneWorkIndex.json │ │ ├── CycleTime.json │ │ ├── DailySupplyItem.json │ │ ├── DawnContent.json │ │ ├── DawnContentParticipable.json │ │ ├── DawnGrowMember.json │ │ ├── DawnMember.json │ │ ├── DawnMemberUIParam.json │ │ ├── DawnQuestMember.json │ │ ├── DeepDungeon.json │ │ ├── DeepDungeonBan.json │ │ ├── DeepDungeonDanger.json │ │ ├── DeepDungeonDemiclone.json │ │ ├── DeepDungeonEquipment.json │ │ ├── DeepDungeonFloorEffectUI.json │ │ ├── DeepDungeonItem.json │ │ ├── DeepDungeonLayer.json │ │ ├── DeepDungeonMagicStone.json │ │ ├── DeepDungeonMap5X.json │ │ ├── DeepDungeonRoom.json │ │ ├── DeepDungeonStatus.json │ │ ├── DefaultTalk.json │ │ ├── DefaultTalkLipSyncType.json │ │ ├── DeliveryQuest.json │ │ ├── Description.json │ │ ├── DescriptionPage.json │ │ ├── DescriptionSection.json │ │ ├── DescriptionString.json │ │ ├── DisposalShop.json │ │ ├── DisposalShopFilterType.json │ │ ├── DisposalShopItem.json │ │ ├── DpsChallenge.json │ │ ├── DpsChallengeOfficer.json │ │ ├── DpsChallengeTransient.json │ │ ├── DynamicEvent.json │ │ ├── DynamicEventEnemyType.json │ │ ├── DynamicEventSingleBattle.json │ │ ├── DynamicEventType.json │ │ ├── ENpcBase.json │ │ ├── ENpcDressUp.json │ │ ├── ENpcDressUpDress.json │ │ ├── ENpcResident.json │ │ ├── EObj.json │ │ ├── EObjName.json │ │ ├── EmjAddon.json │ │ ├── EmjDani.json │ │ ├── Emote.json │ │ ├── EmoteCategory.json │ │ ├── EmoteMode.json │ │ ├── EquipRaceCategory.json │ │ ├── EquipSlotCategory.json │ │ ├── EurekaAetherItem.json │ │ ├── EurekaAethernet.json │ │ ├── EurekaDungeonPortal.json │ │ ├── EurekaGrowData.json │ │ ├── EurekaLogosMixerProbability.json │ │ ├── EurekaMagiaAction.json │ │ ├── EurekaMagiciteItem.json │ │ ├── EurekaMagiciteItemType.json │ │ ├── EurekaSphereElementAdjust.json │ │ ├── EventAction.json │ │ ├── EventCustomIconType.json │ │ ├── EventIconPriority.json │ │ ├── EventIconPriorityPair.json │ │ ├── EventIconType.json │ │ ├── EventItem.json │ │ ├── EventItemCastTimeline.json │ │ ├── EventItemHelp.json │ │ ├── EventItemTimeline.json │ │ ├── EventPathMove.json │ │ ├── EventSystemDefine.json │ │ ├── ExVersion.json │ │ ├── ExportedGatheringPoint.json │ │ ├── ExportedSG.json │ │ ├── ExtraCommand.json │ │ ├── FCActivity.json │ │ ├── FCActivityCategory.json │ │ ├── FCAuthority.json │ │ ├── FCAuthorityCategory.json │ │ ├── FCChestName.json │ │ ├── FCCrestSymbol.json │ │ ├── FCHierarchy.json │ │ ├── FCProfile.json │ │ ├── FCRank.json │ │ ├── FCReputation.json │ │ ├── FCRights.json │ │ ├── FGSAddon.json │ │ ├── FGSStageUI.json │ │ ├── FashionCheckThemeCategory.json │ │ ├── FashionCheckWeeklyTheme.json │ │ ├── Fate.json │ │ ├── FateEvent.json │ │ ├── FateMode.json │ │ ├── FateProgressUI.json │ │ ├── FateShop.json │ │ ├── FateTokenType.json │ │ ├── FccShop.json │ │ ├── Festival.json │ │ ├── FieldMarker.json │ │ ├── FishParameter.json │ │ ├── FishingBaitParameter.json │ │ ├── FishingNoteInfo.json │ │ ├── FishingRecordType.json │ │ ├── FishingRecordTypeTransient.json │ │ ├── FishingSpot.json │ │ ├── FittingShop.json │ │ ├── FittingShopCategory.json │ │ ├── FittingShopCategoryItem.json │ │ ├── FittingShopItemSet.json │ │ ├── Frontline03.json │ │ ├── FurnitureCatalogCategory.json │ │ ├── FurnitureCatalogItemList.json │ │ ├── GCRankGridaniaFemaleText.json │ │ ├── GCRankGridaniaMaleText.json │ │ ├── GCRankLimsaFemaleText.json │ │ ├── GCRankLimsaMaleText.json │ │ ├── GCRankUldahFemaleText.json │ │ ├── GCRankUldahMaleText.json │ │ ├── GCScripShopCategory.json │ │ ├── GCScripShopItem.json │ │ ├── GCShop.json │ │ ├── GCShopItemCategory.json │ │ ├── GCSupplyDuty.json │ │ ├── GCSupplyDutyReward.json │ │ ├── GFATE.json │ │ ├── GFateClimbing2.json │ │ ├── GFateClimbing2Content.json │ │ ├── GFateClimbing2TotemType.json │ │ ├── GFateRideShooting.json │ │ ├── GFateType.json │ │ ├── GameRewardObtainType.json │ │ ├── GardeningSeed.json │ │ ├── GathererCrafterTool.json │ │ ├── GathererReductionReward.json │ │ ├── GatheringCondition.json │ │ ├── GatheringExp.json │ │ ├── GatheringItem.json │ │ ├── GatheringItemLevelConvertTable.json │ │ ├── GatheringItemPoint.json │ │ ├── GatheringLeve.json │ │ ├── GatheringLeveRoute.json │ │ ├── GatheringLeveRule.json │ │ ├── GatheringNotebookList.json │ │ ├── GatheringPoint.json │ │ ├── GatheringPointBase.json │ │ ├── GatheringPointBonus.json │ │ ├── GatheringPointBonusType.json │ │ ├── GatheringPointName.json │ │ ├── GatheringPointTransient.json │ │ ├── GatheringRarePopTimeTable.json │ │ ├── GatheringSubCategory.json │ │ ├── GatheringType.json │ │ ├── GcArmyCaptureTactics.json │ │ ├── GcArmyEquipPreset.json │ │ ├── GcArmyExpedition.json │ │ ├── GcArmyExpeditionMemberBonus.json │ │ ├── GcArmyExpeditionType.json │ │ ├── GcArmyMemberGrow.json │ │ ├── GcArmyTraining.json │ │ ├── GeneralAction.json │ │ ├── GilShop.json │ │ ├── GilShopItem.json │ │ ├── GimmickAccessor.json │ │ ├── GimmickJump.json │ │ ├── GimmickRect.json │ │ ├── Glasses.json │ │ ├── GlassesStyle.json │ │ ├── GoldSaucerArcadeMachine.json │ │ ├── GoldSaucerTextData.json │ │ ├── GrandCompany.json │ │ ├── GrandCompanyRank.json │ │ ├── GroupPoseFrame.json │ │ ├── GroupPoseStamp.json │ │ ├── GroupPoseStampCategory.json │ │ ├── GuardianDeity.json │ │ ├── Guide.json │ │ ├── GuidePage.json │ │ ├── GuidePageString.json │ │ ├── GuideTitle.json │ │ ├── GuildOrder.json │ │ ├── GuildOrderGuide.json │ │ ├── GuildOrderOfficer.json │ │ ├── GuildleveAssignment.json │ │ ├── GuildleveAssignmentCategory.json │ │ ├── GuildleveAssignmentTalk.json │ │ ├── HWDAnnounce.json │ │ ├── HWDCrafterSupply.json │ │ ├── HWDCrafterSupplyReward.json │ │ ├── HWDCrafterSupplyTerm.json │ │ ├── HWDDevLayerControl.json │ │ ├── HWDDevLevelUI.json │ │ ├── HWDDevLively.json │ │ ├── HWDDevProgress.json │ │ ├── HWDGathereInspectTerm.json │ │ ├── HWDGathererInspection.json │ │ ├── HWDGathererInspectionReward.json │ │ ├── HWDInfoBoardArticle.json │ │ ├── HWDInfoBoardArticleTransient.json │ │ ├── HWDInfoBoardArticleType.json │ │ ├── HWDLevelChangeDeception.json │ │ ├── HWDSharedGroup.json │ │ ├── HWDSharedGroupControlParam.json │ │ ├── HairMakeType.json │ │ ├── HouseRetainerPose.json │ │ ├── HousingAethernet.json │ │ ├── HousingAppeal.json │ │ ├── HousingEmploymentNpcList.json │ │ ├── HousingEmploymentNpcRace.json │ │ ├── HousingExterior.json │ │ ├── HousingFurniture.json │ │ ├── HousingLandSet.json │ │ ├── HousingMapMarkerInfo.json │ │ ├── HousingMerchantPose.json │ │ ├── HousingPlacement.json │ │ ├── HousingPreset.json │ │ ├── HousingUnitedExterior.json │ │ ├── HousingYardObject.json │ │ ├── HowTo.json │ │ ├── HowToCategory.json │ │ ├── HowToPage.json │ │ ├── HugeCraftworksNpc.json │ │ ├── HugeCraftworksRank.json │ │ ├── IKDContentBonus.json │ │ ├── IKDFishParam.json │ │ ├── IKDRoute.json │ │ ├── IKDRouteTable.json │ │ ├── IKDSpot.json │ │ ├── IconLanguage.json │ │ ├── InclusionShop.json │ │ ├── InclusionShopCategory.json │ │ ├── InclusionShopSeries.json │ │ ├── InclusionShopWelcom.json │ │ ├── InclusionShopWelcomText.json │ │ ├── IndividualWeather.json │ │ ├── InstanceContent.json │ │ ├── InstanceContentBuff.json │ │ ├── InstanceContentGuide.json │ │ ├── InstanceContentQICData.json │ │ ├── InstanceContentTextData.json │ │ ├── Item.json │ │ ├── ItemAction.json │ │ ├── ItemActionTelepo.json │ │ ├── ItemBarterCheck.json │ │ ├── ItemFood.json │ │ ├── ItemLevel.json │ │ ├── ItemRepairPrice.json │ │ ├── ItemRepairResource.json │ │ ├── ItemRetainerLevelUp.json │ │ ├── ItemSearchCategory.json │ │ ├── ItemSeries.json │ │ ├── ItemSortCategory.json │ │ ├── ItemSpecialBonus.json │ │ ├── ItemStainCondition.json │ │ ├── ItemUICategory.json │ │ ├── Jingle.json │ │ ├── JobHudManual.json │ │ ├── JobHudManualPriority.json │ │ ├── JournalCategory.json │ │ ├── JournalGenre.json │ │ ├── JournalSection.json │ │ ├── KineDriverOffGroup.json │ │ ├── Knockback.json │ │ ├── LegacyQuest.json │ │ ├── Leve.json │ │ ├── LeveAssignmentType.json │ │ ├── LeveClient.json │ │ ├── LeveRewardItem.json │ │ ├── LeveRewardItemGroup.json │ │ ├── LeveString.json │ │ ├── LeveVfx.json │ │ ├── Level.json │ │ ├── Lobby.json │ │ ├── LogFilter.json │ │ ├── LogKind.json │ │ ├── LogMessage.json │ │ ├── LotteryExchangeShop.json │ │ ├── MJIAnimals.json │ │ ├── MJIBuilding.json │ │ ├── MJIBuildingPlace.json │ │ ├── MJICraftworksObject.json │ │ ├── MJICraftworksObjectTheme.json │ │ ├── MJICraftworksPopularity.json │ │ ├── MJICraftworksPopularityType.json │ │ ├── MJICraftworksRankRatio.json │ │ ├── MJICraftworksSupplyDefine.json │ │ ├── MJICraftworksTension.json │ │ ├── MJICropSeed.json │ │ ├── MJIDisposalShopItem.json │ │ ├── MJIDisposalShopUICategory.json │ │ ├── MJIFarmPastureRank.json │ │ ├── MJIFunction.json │ │ ├── MJIGardenscaping.json │ │ ├── MJIGathering.json │ │ ├── MJIGatheringItem.json │ │ ├── MJIGatheringObject.json │ │ ├── MJIGatheringTool.json │ │ ├── MJIHudMode.json │ │ ├── MJIItemCategory.json │ │ ├── MJIItemPouch.json │ │ ├── MJIKeyItem.json │ │ ├── MJILandmark.json │ │ ├── MJILandmarkPlace.json │ │ ├── MJILivelyActor.json │ │ ├── MJIMinionPopAreas.json │ │ ├── MJIName.json │ │ ├── MJINekomimiRequest.json │ │ ├── MJIProgress.json │ │ ├── MJIRank.json │ │ ├── MJIRecipe.json │ │ ├── MJIRecipeMaterial.json │ │ ├── MJIStockyardManagementArea.json │ │ ├── MJIStockyardManagementTable.json │ │ ├── MJIText.json │ │ ├── MJIVillageAppearanceSG.json │ │ ├── MJIVillageAppearanceUI.json │ │ ├── MJIVillageDevelopment.json │ │ ├── MKDLore.json │ │ ├── MYCTemporaryItem.json │ │ ├── MYCTemporaryItemUICategory.json │ │ ├── MYCWarResultNotebook.json │ │ ├── MacroIcon.json │ │ ├── MacroIconRedirectOld.json │ │ ├── MainCommand.json │ │ ├── MainCommandCategory.json │ │ ├── MandervilleWeaponEnhance.json │ │ ├── ManeuversArmor.json │ │ ├── Map.json │ │ ├── MapCondition.json │ │ ├── MapExclusive.json │ │ ├── MapMarker.json │ │ ├── MapMarkerRegion.json │ │ ├── MapReplace.json │ │ ├── MapSymbol.json │ │ ├── MapTransientPvPMap.json │ │ ├── MapType.json │ │ ├── Marker.json │ │ ├── Materia.json │ │ ├── MateriaGrade.json │ │ ├── MateriaJoinRate.json │ │ ├── MateriaJoinRateGatherCraft.json │ │ ├── McGuffin.json │ │ ├── McGuffinUIData.json │ │ ├── MiniGameRA.json │ │ ├── MiniGameTurnBreakAction.json │ │ ├── MiniGameTurnBreakConst.json │ │ ├── MiniGameTurnBreakEnemy.json │ │ ├── MiniGameTurnBreakPop.json │ │ ├── MiniGameTurnBreakPopOffset.json │ │ ├── MiniGameTurnBreakStage.json │ │ ├── MiniGameTurnBreakStatus.json │ │ ├── MinionRace.json │ │ ├── MinionRules.json │ │ ├── MinionSkillType.json │ │ ├── MirageStoreSetItem.json │ │ ├── MirageStoreSetItemLookup.json │ │ ├── MobHuntOrder.json │ │ ├── MobHuntOrderType.json │ │ ├── MobHuntReward.json │ │ ├── MobHuntRewardCap.json │ │ ├── MobHuntTarget.json │ │ ├── ModelChara.json │ │ ├── ModelSkeleton.json │ │ ├── ModelState.json │ │ ├── MonsterNote.json │ │ ├── MonsterNoteTarget.json │ │ ├── MotionTimeline.json │ │ ├── MotionTimelineBlendTable.json │ │ ├── Mount.json │ │ ├── MountAction.json │ │ ├── MountCustomize.json │ │ ├── MountFlyingCondition.json │ │ ├── MountSpeed.json │ │ ├── MountTransient.json │ │ ├── MoveTimeline.json │ │ ├── MoveVfx.json │ │ ├── MovieStaffList.json │ │ ├── MovieSubtitle.json │ │ ├── MovieSubtitle500.json │ │ ├── MovieSubtitleVoyage.json │ │ ├── MultipleHelp.json │ │ ├── MultipleHelpPage.json │ │ ├── MultipleHelpString.json │ │ ├── NotebookDivision.json │ │ ├── NotebookDivisionCategory.json │ │ ├── NotoriousMonster.json │ │ ├── NotoriousMonsterTerritory.json │ │ ├── NpcEquip.json │ │ ├── NpcYell.json │ │ ├── Omen.json │ │ ├── Omikuji.json │ │ ├── OmikujiGuidance.json │ │ ├── OnlineStatus.json │ │ ├── OpenContent.json │ │ ├── OpenContentCandidateName.json │ │ ├── Opening.json │ │ ├── Orchestrion.json │ │ ├── OrchestrionCategory.json │ │ ├── OrchestrionPath.json │ │ ├── OrchestrionUiparam.json │ │ ├── Ornament.json │ │ ├── OrnamentAction.json │ │ ├── ParamGrow.json │ │ ├── PartyContent.json │ │ ├── PartyContentCutscene.json │ │ ├── PartyContentTextData.json │ │ ├── PatchMark.json │ │ ├── Perform.json │ │ ├── PerformGroup.json │ │ ├── PerformTransient.json │ │ ├── Pet.json │ │ ├── PetAction.json │ │ ├── PetMirage.json │ │ ├── PhysicsGroup.json │ │ ├── PhysicsWind.json │ │ ├── Picture.json │ │ ├── PlaceName.json │ │ ├── PlantPotFlowerSeed.json │ │ ├── PlayerSearchLocation.json │ │ ├── PlayerSearchSubLocation.json │ │ ├── PreHandler.json │ │ ├── PresetCamera.json │ │ ├── PresetCameraAdjust.json │ │ ├── PreviewableItems.json │ │ ├── PublicContent.json │ │ ├── PublicContentCutscene.json │ │ ├── PublicContentTextData.json │ │ ├── PvPAction.json │ │ ├── PvPActionSort.json │ │ ├── PvPBaseParamValue.json │ │ ├── PvPRank.json │ │ ├── PvPSelectTrait.json │ │ ├── PvPSeries.json │ │ ├── PvPSeriesLevel.json │ │ ├── PvPTrait.json │ │ ├── Quest.json │ │ ├── QuestAcceptAdditionCondition.json │ │ ├── QuestBattle.json │ │ ├── QuestChapter.json │ │ ├── QuestClassJobReward.json │ │ ├── QuestClassJobSupply.json │ │ ├── QuestDefineClient.json │ │ ├── QuestDerivedClass.json │ │ ├── QuestEffect.json │ │ ├── QuestEffectDefine.json │ │ ├── QuestEventAreaEntranceInfo.json │ │ ├── QuestLinkMarker.json │ │ ├── QuestLinkMarkerIcon.json │ │ ├── QuestLinkMarkerSet.json │ │ ├── QuestRedo.json │ │ ├── QuestRedoChapterUI.json │ │ ├── QuestRedoChapterUICategory.json │ │ ├── QuestRedoChapterUITab.json │ │ ├── QuestRedoIncompChapter.json │ │ ├── QuestRepeatFlag.json │ │ ├── QuestRewardOther.json │ │ ├── QuestSelectTitle.json │ │ ├── QuestSetDefine.json │ │ ├── QuickChat.json │ │ ├── QuickChatTransient.json │ │ ├── RPParameter.json │ │ ├── Race.json │ │ ├── RacingChocoboItem.json │ │ ├── RacingChocoboName.json │ │ ├── RacingChocoboNameCategory.json │ │ ├── RacingChocoboNameInfo.json │ │ ├── RacingChocoboParam.json │ │ ├── RaidFinderParam.json │ │ ├── ReactionEventObject.json │ │ ├── ReactionEventObjectInfo.json │ │ ├── RecastNavimesh.json │ │ ├── Recipe.json │ │ ├── RecipeLevelTable.json │ │ ├── RecipeLookup.json │ │ ├── RecipeNotebookList.json │ │ ├── RecommendContents.json │ │ ├── Relic.json │ │ ├── Relic3.json │ │ ├── RelicItem.json │ │ ├── RelicNote.json │ │ ├── RelicNoteCategory.json │ │ ├── ReplaceAction.json │ │ ├── Resident.json │ │ ├── ResistanceWeaponAdjust.json │ │ ├── RetainerFortuneRewardRange.json │ │ ├── RetainerTask.json │ │ ├── RetainerTaskLvRange.json │ │ ├── RetainerTaskNormal.json │ │ ├── RetainerTaskParameter.json │ │ ├── RetainerTaskRandom.json │ │ ├── RideShooting.json │ │ ├── RideShootingTargetType.json │ │ ├── RideShootingTextData.json │ │ ├── SatisfactionArbitration.json │ │ ├── SatisfactionBonusGuarantee.json │ │ ├── SatisfactionNpc.json │ │ ├── SatisfactionSupply.json │ │ ├── SatisfactionSupplyReward.json │ │ ├── ScenarioTree.json │ │ ├── ScenarioTreeTips.json │ │ ├── ScenarioTreeTipsClassQuest.json │ │ ├── ScenarioType.json │ │ ├── ScreenImage.json │ │ ├── SecretRecipeBook.json │ │ ├── SharlayanCraftWorks.json │ │ ├── SharlayanCraftWorksSupply.json │ │ ├── ShellFixedFromCommand.json │ │ ├── SkyIsland2Mission.json │ │ ├── SkyIsland2MissionDetail.json │ │ ├── SkyIsland2MissionType.json │ │ ├── SkyIsland2RangeType.json │ │ ├── Snipe.json │ │ ├── SnipeTalk.json │ │ ├── SnipeTalkName.json │ │ ├── SpearfishingComboTarget.json │ │ ├── SpearfishingItem.json │ │ ├── SpearfishingNotebook.json │ │ ├── SpearfishingRecordPage.json │ │ ├── SpearfishingSilhouette.json │ │ ├── SpecialShop.json │ │ ├── SpecialShopItemCategory.json │ │ ├── Stain.json │ │ ├── StainTransient.json │ │ ├── StanceChange.json │ │ ├── Status.json │ │ ├── StatusHitEffect.json │ │ ├── StatusLoopVFX.json │ │ ├── Story.json │ │ ├── SubmarineExploration.json │ │ ├── SubmarineMap.json │ │ ├── SubmarinePart.json │ │ ├── SubmarineRank.json │ │ ├── SwitchTalk.json │ │ ├── SwitchTalkVariation.json │ │ ├── TelepoRelay.json │ │ ├── TerritoryType.json │ │ ├── TerritoryTypeTelepo.json │ │ ├── TerritoryTypeTransient.json │ │ ├── TextCommand.json │ │ ├── TextCommandParam.json │ │ ├── TiltParam.json │ │ ├── Title.json │ │ ├── TofuEditParam.json │ │ ├── TofuObject.json │ │ ├── TofuObjectCategory.json │ │ ├── TofuPreset.json │ │ ├── TofuPresetCategory.json │ │ ├── TofuPresetObject.json │ │ ├── Tomestones.json │ │ ├── TomestonesItem.json │ │ ├── TopicSelect.json │ │ ├── Town.json │ │ ├── Trait.json │ │ ├── TraitRecast.json │ │ ├── TraitTransient.json │ │ ├── Transformation.json │ │ ├── Treasure.json │ │ ├── TreasureHuntRank.json │ │ ├── TreasureModel.json │ │ ├── TreasureSpot.json │ │ ├── Tribe.json │ │ ├── TripleTriad.json │ │ ├── TripleTriadCard.json │ │ ├── TripleTriadCardObtain.json │ │ ├── TripleTriadCardRarity.json │ │ ├── TripleTriadCardResident.json │ │ ├── TripleTriadCardType.json │ │ ├── TripleTriadCompetition.json │ │ ├── TripleTriadResident.json │ │ ├── TripleTriadRule.json │ │ ├── Tutorial.json │ │ ├── TutorialDPS.json │ │ ├── TutorialHealer.json │ │ ├── TutorialTank.json │ │ ├── UDS_Event.json │ │ ├── UDS_Property.json │ │ ├── UIColor.json │ │ ├── UIConst.json │ │ ├── UILevelLookup.json │ │ ├── VFX.json │ │ ├── VVDData.json │ │ ├── VVDNotebookContents.json │ │ ├── VVDNotebookSeries.json │ │ ├── VVDRouteData.json │ │ ├── VVDVariantAction.json │ │ ├── VaseFlower.json │ │ ├── Warp.json │ │ ├── WarpCondition.json │ │ ├── WarpLogic.json │ │ ├── WeaponTimeline.json │ │ ├── Weather.json │ │ ├── WeatherGroup.json │ │ ├── WeatherRate.json │ │ ├── WeatherReportReplace.json │ │ ├── WebGuidance.json │ │ ├── WebURL.json │ │ ├── WeddingBGM.json │ │ ├── WeeklyBingoOrderData.json │ │ ├── WeeklyBingoRewardData.json │ │ ├── WeeklyBingoText.json │ │ ├── WeeklyLotBonus.json │ │ ├── World.json │ │ ├── WorldDCGroupType.json │ │ ├── YKW.json │ │ ├── YardCatalogCategory.json │ │ ├── YardCatalogItemList.json │ │ ├── ZoneSharedGroup.json │ │ └── game.ver │ ├── EorzeaDateTime.Formatter.cs │ ├── EorzeaDateTime.cs │ ├── Ex/ │ │ ├── Column.cs │ │ ├── DataReader.cs │ │ ├── DataReaders/ │ │ │ ├── DelegateDataReader.cs │ │ │ ├── PackedBooleanDataReader.cs │ │ │ └── StringDataReader.cs │ │ ├── DataRowBase.cs │ │ ├── DataSheet.Enumerator.cs │ │ ├── DataSheet.cs │ │ ├── ExCollection.cs │ │ ├── Header.cs │ │ ├── IDataRow.cs │ │ ├── IDataSheet.Generic.cs │ │ ├── IDataSheet.cs │ │ ├── IMultiRow.cs │ │ ├── IMultiSheet.Generic.cs │ │ ├── IMultiSheet.cs │ │ ├── IRow.cs │ │ ├── ISheet.Generic.cs │ │ ├── ISheet.cs │ │ ├── Language.cs │ │ ├── MultiRow.cs │ │ ├── MultiSheet.Enumerator.cs │ │ ├── MultiSheet.cs │ │ ├── PartialDataSheet.Enumerator.cs │ │ ├── PartialDataSheet.cs │ │ ├── Relational/ │ │ │ ├── Definition/ │ │ │ │ ├── GroupDataDefinition.cs │ │ │ │ ├── IDataDefinition.cs │ │ │ │ ├── PositionedDataDefinition.cs │ │ │ │ ├── RelationDefinition.cs │ │ │ │ ├── RepeatDataDefinition.cs │ │ │ │ ├── SheetDefinition.cs │ │ │ │ ├── SingleDataDefinition.cs │ │ │ │ └── ViewDefinition.cs │ │ │ ├── IRelationalDataRow.cs │ │ │ ├── IRelationalDataSheet.Generic.cs │ │ │ ├── IRelationalDataSheet.cs │ │ │ ├── IRelationalMultiRow.cs │ │ │ ├── IRelationalMultiSheet.Generic.cs │ │ │ ├── IRelationalMultiSheet.cs │ │ │ ├── IRelationalRow.cs │ │ │ ├── IRelationalSheet.Generic.cs │ │ │ ├── IRelationalSheet.cs │ │ │ ├── IValueConverter.cs │ │ │ ├── RelationalColumn.cs │ │ │ ├── RelationalDataIndex.cs │ │ │ ├── RelationalDataSheet.cs │ │ │ ├── RelationalExCollection.cs │ │ │ ├── RelationalHeader.cs │ │ │ ├── RelationalMultiRow.cs │ │ │ ├── RelationalMultiSheet.cs │ │ │ ├── RelationalPartialDataSheet.cs │ │ │ ├── Update/ │ │ │ │ ├── ChangeType.cs │ │ │ │ ├── Changes/ │ │ │ │ │ ├── DefinitionMoved.cs │ │ │ │ │ ├── DefinitionRemoved.cs │ │ │ │ │ ├── FieldChanged.cs │ │ │ │ │ ├── RowAdded.cs │ │ │ │ │ ├── RowRemoved.cs │ │ │ │ │ ├── SheetLanguageAdded.cs │ │ │ │ │ ├── SheetLanguageRemoved.cs │ │ │ │ │ ├── SheetRemoved.cs │ │ │ │ │ └── SheetTypeChanged.cs │ │ │ │ ├── ColumnComparer.cs │ │ │ │ ├── Comparer.cs │ │ │ │ ├── DefinitionUpdater.cs │ │ │ │ ├── IChange.cs │ │ │ │ ├── RelationUpdater.cs │ │ │ │ ├── SheetComparer.cs │ │ │ │ ├── SheetUpdater.cs │ │ │ │ └── UpdateProgress.cs │ │ │ └── ValueConverters/ │ │ │ ├── ColorConverter.cs │ │ │ ├── ComplexLinkConverter.cs │ │ │ ├── GenericReferenceConverter.cs │ │ │ ├── IconConverter.cs │ │ │ ├── MultiReferenceConverter.cs │ │ │ ├── QuadConverter.cs │ │ │ ├── SheetLinkConverter.cs │ │ │ └── TomestoneOrItemReferenceConverter.cs │ │ ├── Variant1/ │ │ │ ├── DataRow.cs │ │ │ └── RelationalDataRow.cs │ │ └── Variant2/ │ │ ├── DataRow.cs │ │ ├── RelationalDataRow.cs │ │ └── SubRow.cs │ ├── Graphics/ │ │ ├── Bone.cs │ │ ├── BoundingBox.cs │ │ ├── ColorMap.cs │ │ ├── Exports/ │ │ │ ├── ModelExport.cs │ │ │ └── Obj.cs │ │ ├── ImcFile.cs │ │ ├── ImcPart.cs │ │ ├── ImcVariant.cs │ │ ├── Lgb/ │ │ │ ├── ILgbEntry.cs │ │ │ ├── LgbENpcEntry.cs │ │ │ ├── LgbEntryType.cs │ │ │ ├── LgbEventObjectEntry.cs │ │ │ ├── LgbFile.cs │ │ │ ├── LgbGimmickEntry.cs │ │ │ ├── LgbGroup.cs │ │ │ ├── LgbLightEntry.cs │ │ │ ├── LgbModelEntry.cs │ │ │ └── LgbVfxEntry.cs │ │ ├── Material.cs │ │ ├── MaterialDefinition.cs │ │ ├── MaterialHeader.cs │ │ ├── MaterialMetadataHeader.cs │ │ ├── MaterialTextureParameter.cs │ │ ├── Mesh.cs │ │ ├── MeshHeader.cs │ │ ├── MeshPart.cs │ │ ├── MeshPartHeader.cs │ │ ├── Model.cs │ │ ├── ModelAttribute.cs │ │ ├── ModelBoundingBoxes.cs │ │ ├── ModelDefinition.cs │ │ ├── ModelDefinitionHeader.cs │ │ ├── ModelFile.cs │ │ ├── ModelHeader.cs │ │ ├── ModelQuality.cs │ │ ├── ModelVariantIdentifier.cs │ │ ├── PapAnimation.cs │ │ ├── PapFile.cs │ │ ├── Pcb/ │ │ │ ├── IPcbBlockData.cs │ │ │ ├── PcbBlockData.cs │ │ │ ├── PcbBlockDataType.cs │ │ │ ├── PcbBlockEntry.cs │ │ │ └── PcbFile.cs │ │ ├── Sgb/ │ │ │ ├── ISgbData.cs │ │ │ ├── ISgbGroupEntry.cs │ │ │ ├── SgbDataType.cs │ │ │ ├── SgbFile.cs │ │ │ ├── SgbGimmickEntry.cs │ │ │ ├── SgbGroup.cs │ │ │ ├── SgbGroup1CEntry.cs │ │ │ ├── SgbGroupEntryType.cs │ │ │ ├── SgbLightEntry.cs │ │ │ ├── SgbModelEntry.cs │ │ │ └── SgbVfxEntry.cs │ │ ├── ShPk/ │ │ │ ├── Parameter.cs │ │ │ ├── ParameterHeader.cs │ │ │ ├── ParameterType.cs │ │ │ ├── ShPkFile.cs │ │ │ ├── ShPkHeader.cs │ │ │ ├── ShaderHeader.cs │ │ │ ├── ShaderParameterReference.cs │ │ │ └── ShaderType.cs │ │ ├── SklbFile.cs │ │ ├── Territory.cs │ │ ├── TerritoryParts/ │ │ │ └── Terrain.cs │ │ ├── TransformedModel.cs │ │ ├── Unknowns/ │ │ │ ├── BoneIndices.cs │ │ │ ├── BoneList.cs │ │ │ ├── MaterialStruct1.cs │ │ │ ├── MaterialStruct2.cs │ │ │ ├── ModelStruct1.cs │ │ │ ├── ModelStruct2.cs │ │ │ ├── ModelStruct3.cs │ │ │ ├── ModelStruct5.cs │ │ │ ├── ModelStruct6.cs │ │ │ └── ModelStruct7.cs │ │ ├── Vector2.cs │ │ ├── Vector3.cs │ │ ├── Vector4.cs │ │ ├── Vertex.cs │ │ ├── VertexAttribute.cs │ │ ├── VertexDataType.cs │ │ ├── VertexFormat.cs │ │ ├── VertexFormatElement.cs │ │ └── VertexReader.cs │ ├── HalfHelper.cs │ ├── IO/ │ │ ├── Directory.Enumeration.cs │ │ ├── Directory.cs │ │ ├── EmptyFile.cs │ │ ├── File.cs │ │ ├── FileCommonHeader.cs │ │ ├── FileDefault.cs │ │ ├── FileFactory.cs │ │ ├── FileType.cs │ │ ├── Hash.cs │ │ ├── IIndexFile.cs │ │ ├── IPackSource.cs │ │ ├── Index.cs │ │ ├── Index2.cs │ │ ├── Index2File.cs │ │ ├── Index2Header.cs │ │ ├── Index2Source.Enumerator.cs │ │ ├── Index2Source.cs │ │ ├── IndexDirectory.cs │ │ ├── IndexFile.cs │ │ ├── IndexHeader.cs │ │ ├── IndexSource.Enumerator.cs │ │ ├── IndexSource.cs │ │ ├── Pack.cs │ │ ├── PackCollection.cs │ │ └── PackIdentifier.cs │ ├── Imaging/ │ │ ├── GftdEntry.cs │ │ ├── GraphicsFileTextureDefinition.cs │ │ ├── IconHelper.cs │ │ ├── ImageConverter.cs │ │ ├── ImageFile.cs │ │ ├── ImageFormat.cs │ │ └── ImageHeader.cs │ ├── Libra/ │ │ ├── Achievement.cs │ │ ├── AchievementCategory.cs │ │ ├── AchievementKind.cs │ │ ├── Action.cs │ │ ├── BNpcName.Parse.cs │ │ ├── BNpcName.cs │ │ ├── BNpcName_PlaceName.cs │ │ ├── BaseParam.cs │ │ ├── BeastTribe.cs │ │ ├── ClassJob.cs │ │ ├── ClassJobCategory.cs │ │ ├── ClassJob_ClassJobCategory.cs │ │ ├── Colosseum.cs │ │ ├── ContentRoulette.cs │ │ ├── ContentType.cs │ │ ├── CraftType.cs │ │ ├── ENpcResident.Parse.cs │ │ ├── ENpcResident.cs │ │ ├── ENpcResident_PlaceName.cs │ │ ├── ENpcResident_Quest.cs │ │ ├── Emote.cs │ │ ├── Entities.cs │ │ ├── FCHierarchy.cs │ │ ├── FCRank.cs │ │ ├── FCReputation.cs │ │ ├── Frontline01.cs │ │ ├── GCRankGridaniaFemaleText.cs │ │ ├── GCRankGridaniaMaleText.cs │ │ ├── GCRankLimsaFemaleText.cs │ │ ├── GCRankLimsaMaleText.cs │ │ ├── GCRankUldahFemaleText.cs │ │ ├── GCRankUldahMaleText.cs │ │ ├── Gathering.cs │ │ ├── GatheringType.cs │ │ ├── GeneralAction.cs │ │ ├── GrandCompany.cs │ │ ├── GuardianDeity.cs │ │ ├── GuildOrder.cs │ │ ├── InstanceContent.cs │ │ ├── InstanceContentType.cs │ │ ├── Item.Parse.cs │ │ ├── Item.cs │ │ ├── ItemCategory.cs │ │ ├── ItemSery.cs │ │ ├── ItemSpecialBonu.cs │ │ ├── ItemUICategory.cs │ │ ├── ItemUIKind.cs │ │ ├── Item_ClassJob.cs │ │ ├── JournalCategory.cs │ │ ├── JournalGenre.cs │ │ ├── JsonReaderExtensions.cs │ │ ├── LibraModel.Context.cs │ │ ├── LibraModel.Context.tt │ │ ├── LibraModel.Designer.cs │ │ ├── LibraModel.cs │ │ ├── LibraModel.edmx │ │ ├── LibraModel.edmx.diagram │ │ ├── LibraModel.tt │ │ ├── LodestoneSystemDefine.cs │ │ ├── NotebookDivision.cs │ │ ├── PlaceName.cs │ │ ├── Quest.cs │ │ ├── QuestWebEx.cs │ │ ├── QuestWebType.cs │ │ ├── Quest_ClassJob.cs │ │ ├── Race.cs │ │ ├── Recipe.cs │ │ ├── RecipeElement.cs │ │ ├── Shop.cs │ │ ├── Status.cs │ │ ├── Title.cs │ │ ├── Tomestone.cs │ │ └── Town.cs │ ├── OrderedBitConverter.cs │ ├── Range.cs │ ├── SaintCoinach.csproj │ ├── Sound/ │ │ ├── ScdAdpcmEntry.cs │ │ ├── ScdCodec.cs │ │ ├── ScdEntry.cs │ │ ├── ScdEntryHeader.cs │ │ ├── ScdFile.cs │ │ ├── ScdHeader.cs │ │ ├── ScdOggCryptType.cs │ │ └── ScdOggEntry.cs │ ├── Text/ │ │ ├── DecodeExpressionType.cs │ │ ├── DefaultEvaluationFunctionProvider.cs │ │ ├── EvaluationHelper.cs │ │ ├── EvaluationParameters.cs │ │ ├── Expressions/ │ │ │ ├── CloseTag.cs │ │ │ ├── ExpressionCollection.cs │ │ │ ├── GenericExpression.cs │ │ │ ├── IValueExpression.cs │ │ │ ├── ObjectWithDisplay.cs │ │ │ ├── OpenTag.cs │ │ │ └── SurroundedExpression.cs │ │ ├── IEvaluationFunctionProvider.cs │ │ ├── IExpression.cs │ │ ├── INode.cs │ │ ├── IntegerType.cs │ │ ├── NodeFlags.cs │ │ ├── Nodes/ │ │ │ ├── ArgumentCollection.cs │ │ │ ├── CloseTag.cs │ │ │ ├── Comparison.cs │ │ │ ├── DefaultElement.cs │ │ │ ├── EmptyElement.cs │ │ │ ├── GenericElement.cs │ │ │ ├── IConditionalNode.cs │ │ │ ├── IExpressionNode.cs │ │ │ ├── INodeVisitor.cs │ │ │ ├── INodeWithArguments.cs │ │ │ ├── INodeWithChildren.cs │ │ │ ├── IStaticNode.cs │ │ │ ├── IfElement.cs │ │ │ ├── IfEqualsElement.cs │ │ │ ├── OpenTag.cs │ │ │ ├── Parameter.cs │ │ │ ├── StaticByteArray.cs │ │ │ ├── StaticInteger.cs │ │ │ ├── StaticString.cs │ │ │ ├── SwitchElement.cs │ │ │ └── TopLevelParameter.cs │ │ ├── Parameters/ │ │ │ ├── ObjectParameters.cs │ │ │ ├── ParameterBase.cs │ │ │ └── PlayerParameters.cs │ │ ├── Processor/ │ │ │ ├── Expressions/ │ │ │ │ ├── EmptyExpression.cs │ │ │ │ ├── ExpressionCollection.cs │ │ │ │ └── StaticExpression.cs │ │ │ └── IExpression.cs │ │ ├── StringTokens.cs │ │ ├── TagType.cs │ │ ├── XivString.cs │ │ └── XivStringDecoder.cs │ ├── UpdateReport.cs │ ├── Xiv/ │ │ ├── Achievement.cs │ │ ├── AchievementCategory.cs │ │ ├── AchievementKind.cs │ │ ├── Action.cs │ │ ├── ActionBase.cs │ │ ├── ActionCategory.cs │ │ ├── ActionTransient.cs │ │ ├── Addon.cs │ │ ├── Adventure.cs │ │ ├── AetherCurrent.cs │ │ ├── AirshipExplorationLevel.cs │ │ ├── AirshipExplorationLog.cs │ │ ├── AirshipExplorationParamType.cs │ │ ├── AirshipExplorationPoint.cs │ │ ├── BGM.cs │ │ ├── BNpc.cs │ │ ├── BNpcBase.cs │ │ ├── BNpcData.cs │ │ ├── BNpcLocation.cs │ │ ├── BNpcName.cs │ │ ├── BaseParam.cs │ │ ├── BeastReputationRank.cs │ │ ├── BeastTribe.cs │ │ ├── BuddyAction.cs │ │ ├── BuddyEquip.cs │ │ ├── CharaMakeCustomize.cs │ │ ├── CharaMakeType.cs │ │ ├── ChocoboRace.cs │ │ ├── ChocoboRaceAbility.cs │ │ ├── ChocoboRaceAbilityType.cs │ │ ├── ChocoboRaceItem.cs │ │ ├── ChocoboRaceRank.cs │ │ ├── ChocoboRaceStatus.cs │ │ ├── ChocoboRaceTerritory.cs │ │ ├── ClassJob.cs │ │ ├── ClassJobActionBase.cs │ │ ├── ClassJobCategory.cs │ │ ├── Collections/ │ │ │ ├── BNpcCollection.cs │ │ │ ├── ClassJobActionCollection.cs │ │ │ ├── ENpcCollection.cs │ │ │ ├── EquipSlotCollection.cs │ │ │ ├── ItemCollection.cs │ │ │ └── ShopCollection.cs │ │ ├── Companion.cs │ │ ├── CompanionTransient.cs │ │ ├── CompanyAction.cs │ │ ├── CompanyCraftDraft.cs │ │ ├── CompanyCraftDraftCategory.cs │ │ ├── CompanyCraftDraftCategoryTxt.cs │ │ ├── CompanyCraftManufactoryState.cs │ │ ├── CompanyCraftPart.cs │ │ ├── CompanyCraftProcess.Request.cs │ │ ├── CompanyCraftProcess.cs │ │ ├── CompanyCraftSequence.cs │ │ ├── CompanyCraftSupplyItem.cs │ │ ├── CompanyCraftType.cs │ │ ├── ContentBase.cs │ │ ├── ContentFinderCondition.cs │ │ ├── ContentMemberType.cs │ │ ├── ContentReward.cs │ │ ├── ContentRoulette.cs │ │ ├── ContentType.cs │ │ ├── CraftAction.cs │ │ ├── CraftLeve.cs │ │ ├── CraftLeveItem.cs │ │ ├── CraftLevelDifference.cs │ │ ├── CraftType.cs │ │ ├── CustomTalk.cs │ │ ├── ENpc.cs │ │ ├── ENpcBase.cs │ │ ├── ENpcResident.cs │ │ ├── EObj.cs │ │ ├── Emote.cs │ │ ├── EmoteCategory.cs │ │ ├── EquipSlot.cs │ │ ├── EquipSlotCategory.cs │ │ ├── EventAction.cs │ │ ├── EventItem.cs │ │ ├── FCRank.cs │ │ ├── Fate.cs │ │ ├── FccShop.cs │ │ ├── FishParameter.cs │ │ ├── FishingSpot.cs │ │ ├── GCScripShopCategory.cs │ │ ├── GCScripShopItem.cs │ │ ├── GCShop.cs │ │ ├── GCShopItemCategory.cs │ │ ├── GatheringCondition.cs │ │ ├── GatheringExp.cs │ │ ├── GatheringItem.cs │ │ ├── GatheringItemBase.cs │ │ ├── GatheringNotebookList.cs │ │ ├── GatheringNotebookRegion.cs │ │ ├── GatheringPoint.cs │ │ ├── GatheringPointBase.cs │ │ ├── GatheringPointBonus.cs │ │ ├── GatheringPointBonusType.cs │ │ ├── GatheringPointName.cs │ │ ├── GatheringSubCategory.cs │ │ ├── GatheringType.cs │ │ ├── GeneralAction.cs │ │ ├── GenericLocation.cs │ │ ├── GilShop.cs │ │ ├── GilShopItem.cs │ │ ├── GoldSaucerTextData.cs │ │ ├── GrandCompany.cs │ │ ├── GrandCompanyRank.cs │ │ ├── GuardianDeity.cs │ │ ├── HousingFurniture.cs │ │ ├── HousingItem.cs │ │ ├── HousingItemCategory.cs │ │ ├── HousingLayoutLimit.cs │ │ ├── HousingYardObject.cs │ │ ├── IContentReward.cs │ │ ├── IItemSource.cs │ │ ├── ILocatable.cs │ │ ├── ILocation.cs │ │ ├── IParameterObject.cs │ │ ├── IQuantifiable.cs │ │ ├── IQuantifiableXivString.cs │ │ ├── IShop.cs │ │ ├── IShopListing.cs │ │ ├── IShopListingItem.cs │ │ ├── IXivRow.cs │ │ ├── IXivSheet.Generic.cs │ │ ├── IXivSheet.cs │ │ ├── IXivSubRow.cs │ │ ├── InstanceContent.cs │ │ ├── InstanceContentData.Fight.cs │ │ ├── InstanceContentData.RewardItem.cs │ │ ├── InstanceContentData.Treasure.cs │ │ ├── InstanceContentData.cs │ │ ├── Item.cs │ │ ├── ItemAction.cs │ │ ├── ItemActions/ │ │ │ ├── AchievementScroll.cs │ │ │ ├── AdventureBook.cs │ │ │ ├── AetherytePendulum.cs │ │ │ ├── AttributeReset.cs │ │ │ ├── BuddyEquipUnlock.cs │ │ │ ├── BuddySummon.cs │ │ │ ├── ChocoboActionReset.cs │ │ │ ├── ChocoboFeed.cs │ │ │ ├── ChocoboLevelCapIncrease.cs │ │ │ ├── CompanionUnlock.cs │ │ │ ├── CompanyEffect.cs │ │ │ ├── CustomizeUnlock.cs │ │ │ ├── DesynthSkillReset.cs │ │ │ ├── Enhancement.cs │ │ │ ├── EquipmentCoffer.cs │ │ │ ├── EternalBondInvitation.cs │ │ │ ├── EternityRing.cs │ │ │ ├── Fantasia.cs │ │ │ ├── FateContentAction.cs │ │ │ ├── FieldNoteUnlock.cs │ │ │ ├── Fireworks.cs │ │ │ ├── FolkloreBook.cs │ │ │ ├── Food.cs │ │ │ ├── FriendlyEffect.cs │ │ │ ├── GpRecovery.cs │ │ │ ├── Heavenscracker.cs │ │ │ ├── HostileEffect.cs │ │ │ ├── HpMpRecovery.cs │ │ │ ├── HpRecovery.cs │ │ │ ├── ItemRoulette.cs │ │ │ ├── MgpCard.cs │ │ │ ├── MountUnlock.cs │ │ │ ├── MpRecovery.cs │ │ │ ├── OrchestrionRollUnlock.cs │ │ │ ├── OrnamentUnlock.cs │ │ │ ├── PointRecovery.cs │ │ │ ├── Raise.cs │ │ │ ├── RealmRebornRed.cs │ │ │ ├── RecipeBookUnlock.cs │ │ │ ├── Sanction.cs │ │ │ ├── SphereScroll.cs │ │ │ ├── StatusRemoval.cs │ │ │ ├── SustainPotion.cs │ │ │ ├── TeleportationTicket.cs │ │ │ ├── TpRecovery.cs │ │ │ └── TripleTriadCardUnlock.cs │ │ ├── ItemBase.cs │ │ ├── ItemComparer.cs │ │ ├── ItemFood.cs │ │ ├── ItemLevel.cs │ │ ├── ItemSearchCategory.cs │ │ ├── ItemSeries.cs │ │ ├── ItemSpecialBonus.cs │ │ ├── ItemUICategory.cs │ │ ├── Items/ │ │ │ ├── Accessory.cs │ │ │ ├── Armour.cs │ │ │ ├── CraftingTool.cs │ │ │ ├── Equipment.cs │ │ │ ├── GatheringTool.cs │ │ │ ├── Housing.cs │ │ │ ├── MagicWeapon.cs │ │ │ ├── MateriaItem.cs │ │ │ ├── PhysicalWeapon.cs │ │ │ ├── Shield.cs │ │ │ ├── SoulCrystal.cs │ │ │ ├── Usable.cs │ │ │ └── Weapon.cs │ │ ├── JournalCategory.cs │ │ ├── JournalGenre.cs │ │ ├── JournalSection.cs │ │ ├── Leve.cs │ │ ├── LeveAssignmentType.cs │ │ ├── LeveClient.cs │ │ ├── LeveRewardItem.cs │ │ ├── LeveRewardItemGroup.cs │ │ ├── LeveVfx.cs │ │ ├── Level.cs │ │ ├── LogFilter.cs │ │ ├── LogKind.cs │ │ ├── LogKindCategoryText.cs │ │ ├── LogMessage.cs │ │ ├── MYCWarResultNotebook.cs │ │ ├── MainCommand.cs │ │ ├── MainCommandCategory.cs │ │ ├── Map.cs │ │ ├── MasterpieceSupplyDuty.CollectableItem.cs │ │ ├── MasterpieceSupplyDuty.cs │ │ ├── Materia.cs │ │ ├── MinionRace.cs │ │ ├── MinionSkillType.cs │ │ ├── ModelChara.cs │ │ ├── MonsterNote.cs │ │ ├── MonsterNoteTarget.cs │ │ ├── Mount.cs │ │ ├── NpcEquip.cs │ │ ├── OnlineStatus.cs │ │ ├── Ornament.cs │ │ ├── ParamGrow.cs │ │ ├── Parameter.cs │ │ ├── ParameterCollection.cs │ │ ├── ParameterType.cs │ │ ├── ParameterValue.cs │ │ ├── ParameterValueFixed.cs │ │ ├── ParameterValueRelative.cs │ │ ├── ParameterValueRelativeLimited.cs │ │ ├── PlaceName.cs │ │ ├── PrerequisiteQuestsRequirement.cs │ │ ├── PrerequisiteQuestsRequirementType.cs │ │ ├── ProbabilityPair.cs │ │ ├── Quad.cs │ │ ├── Quest.cs │ │ ├── QuestRepeatInterval.cs │ │ ├── QuestRequirements.ClassJobRequirement.cs │ │ ├── QuestRequirements.InstanceContentRequirement.cs │ │ ├── QuestRequirements.PreviousQuestRequirement.cs │ │ ├── QuestRequirements.cs │ │ ├── QuestRewardGroupType.cs │ │ ├── QuestRewardItem.cs │ │ ├── QuestRewardItemGroup.cs │ │ ├── QuestRewardOther.cs │ │ ├── QuestRewards.cs │ │ ├── Race.cs │ │ ├── RacingChocoboItem.cs │ │ ├── RacingChocoboName.cs │ │ ├── RacingChocoboNameCategory.cs │ │ ├── RacingChocoboNameInfo.cs │ │ ├── RacingChocoboParam.cs │ │ ├── Recipe.cs │ │ ├── RecipeElement.cs │ │ ├── RecipeIngredient.cs │ │ ├── RecipeIngredientType.cs │ │ ├── RecipeLevel.cs │ │ ├── RecipeLevelTable.cs │ │ ├── RelicNote.cs │ │ ├── RelicNoteCategory.cs │ │ ├── RelicNoteCategoryText.cs │ │ ├── RetainerTask.cs │ │ ├── RetainerTaskBase.cs │ │ ├── RetainerTaskNormal.cs │ │ ├── RetainerTaskRandom.cs │ │ ├── Salvage.cs │ │ ├── Sheets/ │ │ │ ├── InventoryItemSheet.cs │ │ │ └── ItemActionSheet.cs │ │ ├── ShopListingItem.cs │ │ ├── SpearfishingItem.cs │ │ ├── SpecialShop.cs │ │ ├── SpecialShopListing.cs │ │ ├── Stain.cs │ │ ├── Status.cs │ │ ├── TerritoryType.cs │ │ ├── Title.cs │ │ ├── Tomestone.cs │ │ ├── TomestonesItem.cs │ │ ├── Trait.cs │ │ ├── Tribe.cs │ │ ├── TripleTriad.cs │ │ ├── TripleTriadCard.cs │ │ ├── TripleTriadCardRarity.cs │ │ ├── TripleTriadCardResident.cs │ │ ├── TripleTriadCardType.cs │ │ ├── TripleTriadCompetition.cs │ │ ├── TripleTriadRule.cs │ │ ├── Weather.cs │ │ ├── WeatherRate.cs │ │ ├── XivCollection.cs │ │ ├── XivRow.cs │ │ ├── XivSheet.Enumerator.cs │ │ ├── XivSheet.cs │ │ ├── XivSheet2.Enumerator.cs │ │ ├── XivSheet2.cs │ │ ├── XivSheetAttribute.cs │ │ └── XivSubRow.cs │ ├── app.config │ └── packages.config ├── SaintCoinach.Cmd/ │ ├── App.config │ ├── Commands/ │ │ ├── AllExdCommand.cs │ │ ├── AllExdRawCommand.cs │ │ ├── BgmCommand.cs │ │ ├── ExdCommand.cs │ │ ├── ExdHeaderCommand.cs │ │ ├── FurnitureExpCommand.cs │ │ ├── HDUiCommand.cs │ │ ├── ImageCommand.cs │ │ ├── LanguageCommand.cs │ │ ├── MapCommand.cs │ │ ├── RawCommand.cs │ │ ├── RawExdCommand.cs │ │ ├── SqlExport.cs │ │ └── UiCommand.cs │ ├── ExdHelper.cs │ ├── Program.cs │ ├── Properties/ │ │ ├── Settings.Designer.cs │ │ └── Settings.settings │ └── SaintCoinach.Cmd.csproj ├── SaintCoinach.Graphics.Viewer/ │ ├── AnimatedModel.cs │ ├── Animation.cs │ ├── AnimationContainer.cs │ ├── AnimationPlayer.cs │ ├── Camera.cs │ ├── Component.cs │ ├── ComponentContainer.cs │ ├── Content/ │ │ ├── BgColorChangeMaterial.cs │ │ ├── BgMaterial.cs │ │ ├── CharacterMaterial.cs │ │ ├── ContentMesh.cs │ │ ├── ContentMeshPart.cs │ │ ├── ContentModel.cs │ │ ├── ContentSgb.cs │ │ ├── ContentTerritory.cs │ │ ├── CrystalMaterial.cs │ │ ├── Cube.cs │ │ ├── HairMaterial.cs │ │ ├── IrisMaterial.cs │ │ ├── MaterialBase.cs │ │ ├── PrimitiveMesh.cs │ │ ├── PrimitiveModel.cs │ │ └── SkinMaterial.cs │ ├── Data/ │ │ ├── CustomizeParameters.cs │ │ └── ParametersBase.cs │ ├── Drawable3DComponent.cs │ ├── EffectFactory.cs │ ├── Effects/ │ │ ├── BgColorChangeEffect.cs │ │ ├── BgEffect.cs │ │ ├── CharacterEffect.cs │ │ ├── CrystalEffect.cs │ │ ├── CustomizeParameterEffectVariable.cs │ │ ├── DirectionalLight.cs │ │ ├── EffectBase.cs │ │ ├── EffectDirectionalLightVariable.cs │ │ ├── EffectTextureVariable.cs │ │ ├── HLSL/ │ │ │ ├── BasicEffect.fx │ │ │ ├── Bg.fx │ │ │ ├── BgColorChange.fx │ │ │ ├── BgUvScroll.fx │ │ │ ├── Character.fx │ │ │ ├── Common.Skinned.fxh │ │ │ ├── Common.fxh │ │ │ ├── Crystal.fx │ │ │ ├── CustomizeParameter.fxh │ │ │ ├── Hair.fx │ │ │ ├── Iris.fx │ │ │ ├── Lighting.fxh │ │ │ ├── Skin.fx │ │ │ └── Structures.fxh │ │ ├── HairEffect.cs │ │ ├── IrisEffect.cs │ │ ├── SkinEffect.cs │ │ └── SkinnedEffect.cs │ ├── Engine.cs │ ├── EngineTime.cs │ ├── FormEngine.cs │ ├── FormInputService.cs │ ├── IComponent.cs │ ├── IContentComponent.cs │ ├── IDrawable3DComponent.cs │ ├── IImageRendererSource.cs │ ├── IInputService.cs │ ├── IUpdateableComponent.cs │ ├── ImageRenderer.cs │ ├── Interop/ │ │ ├── FbxExport.cs │ │ ├── HavokInterop.cs │ │ ├── InteropAnimation.cs │ │ ├── InteropMesh.cs │ │ ├── InteropTransform.cs │ │ ├── InteropVector4.cs │ │ └── InteropVertex.cs │ ├── Keyboard.cs │ ├── MaterialFactory.cs │ ├── ModelFactory.cs │ ├── Mouse.cs │ ├── MouseState.cs │ ├── ParametersExtensions.cs │ ├── Properties/ │ │ └── AssemblyInfo.cs │ ├── RendererSources/ │ │ ├── BaseImageRendererSource.cs │ │ ├── EquipmentImageRendererSource.cs │ │ └── MonsterImageRendererSource.cs │ ├── SaintCoinach.Graphics.Viewer.csproj │ ├── Skeleton.cs │ ├── TextureFactory.cs │ ├── VectorConverter.cs │ ├── Vertex3D.cs │ └── app.config └── SaintCoinach.sln
Showing preview only (291K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3005 symbols across 774 files)
FILE: DotSquish/Alpha.cs
class Alpha (line 8) | internal static class Alpha {
method FloatToInt (line 10) | private static int FloatToInt(float a, int limit) {
method CompressAlphaDxt3 (line 21) | public static void CompressAlphaDxt3(byte[] rgba, byte[] target, int t...
method DecompressAlphaDxt3 (line 42) | public static void DecompressAlphaDxt3(byte[] block, int blockOffset, ...
method FixRange (line 60) | private static void FixRange(ref int min, ref int max, int steps) {
method FitCodes (line 66) | private static int FitCodes(byte[] rgba, int mask, byte[] codes, out b...
method WriteAlphaBlock (line 104) | private static void WriteAlphaBlock(int alpha0, int alpha1, byte[] ind...
method WriteAlphaBlock5 (line 126) | private static void WriteAlphaBlock5(int alpha0, int alpha1, byte[] in...
method WriteAlphaBlock7 (line 149) | private static void WriteAlphaBlock7(int alpha0, int alpha1, byte[] in...
method CompressAlphaDxt5 (line 170) | public static void CompressAlphaDxt5(byte[] rgba, int mask, byte[] tar...
method DecompressAlphaDxt5 (line 229) | public static void DecompressAlphaDxt5(byte[] block, int blockOffset, ...
FILE: DotSquish/ClusterFit.cs
class ClusterFit (line 8) | internal class ClusterFit : ColourFit {
method ClusterFit (line 22) | protected ClusterFit(ColourSet colours, SquishOptions flags) : base(co...
method ConstructOrdering (line 45) | protected bool ConstructOrdering(Vector3 axis, int iteration) {
method Compress3 (line 94) | protected override void Compress3(byte[] block) {
method Compress4 (line 123) | protected override void Compress4(byte[] block) {
FILE: DotSquish/ColourBlock.cs
class ColourBlock (line 8) | internal static class ColourBlock {
method Unpack565 (line 9) | private static int Unpack565(byte[] packed, int packedOffset, byte[] c...
method DecompressColour (line 26) | public static byte[] DecompressColour(byte[] block, int blockOffset, b...
FILE: DotSquish/ColourFit.cs
class ColourFit (line 8) | internal abstract class ColourFit {
method ColourFit (line 15) | protected ColourFit(ColourSet colours, SquishOptions flags) {
method Compress (line 22) | public void Compress(ref byte[] block) {
method Compress3 (line 33) | protected abstract void Compress3(byte[] block);
method Compress4 (line 34) | protected abstract void Compress4(byte[] block);
FILE: DotSquish/ColourSet.cs
class ColourSet (line 9) | internal class ColourSet {
method ColourSet (line 26) | public ColourSet(byte[] rgba, int mask, SquishOptions flags) {
method RemapIndices (line 97) | public void RemapIndices(byte[] source, byte[] target, int targetOffse...
FILE: DotSquish/Flags.cs
type SquishOptions (line 8) | [Flags]
class SquishOptionsExtensions (line 47) | public static class SquishOptionsExtensions {
method GetMethod (line 48) | public static SquishOptions GetMethod(this SquishOptions self) {
method GetFit (line 51) | public static SquishOptions GetFit(this SquishOptions self) {
method GetMetric (line 54) | public static SquishOptions GetMetric(this SquishOptions self) {
method GetExtra (line 57) | public static SquishOptions GetExtra(this SquishOptions self) {
FILE: DotSquish/Maths.cs
type Vector3 (line 8) | internal struct Vector3 {
method Vector3 (line 11) | public Vector3(float value) {
method Vector3 (line 14) | public Vector3(float x, float y, float z) {
method Dot (line 66) | public static float Dot(Vector3 v1, Vector3 v2) {
method Min (line 69) | public static Vector3 Min(Vector3 v1, Vector3 v2) {
method Max (line 75) | public static Vector3 Max(Vector3 v1, Vector3 v2) {
method Max (line 81) | public static Vector3 Max(Vector3 v) {
type Vector4 (line 88) | internal struct Vector4 {
method Vector4 (line 91) | public Vector4(float value) {
method Vector4 (line 94) | public Vector4(float x, float y, float z, float w) {
class Sym3x3 (line 155) | internal class Sym3x3 {
method Sym3x3 (line 162) | public Sym3x3() { }
method Sym3x3 (line 163) | public Sym3x3(float s) {
method ComputeWeightedCovariance (line 168) | public static Sym3x3 ComputeWeightedCovariance(int n, Vector3[] points...
method GetMultiplicity1Evector (line 194) | private static Vector3 GetMultiplicity1Evector(Sym3x3 matrix, float ev...
method GetMultiplicity2Evector (line 235) | private static Vector3 GetMultiplicity2Evector(Sym3x3 matrix, float ev...
method ComputePrincipledComponent (line 273) | public static Vector3 ComputePrincipledComponent(Sym3x3 matrix) {
FILE: DotSquish/Squish.cs
class Squish (line 11) | public static class Squish {
method GetStorageRequirements (line 12) | public static int GetStorageRequirements(int width, int height, Squish...
method CompressBlock (line 19) | public static byte[] CompressBlock(byte[] rgba, SquishOptions flags) {
method CompressBlockMasked (line 22) | public static byte[] CompressBlockMasked(byte[] rgba, int mask, Squish...
method DecompressBlock (line 25) | public static byte[] DecompressBlock(byte[] block, int blockOffset, Sq...
method CompressImage (line 44) | public static byte[] CompressImage(byte[] rgba, int width, int height,...
method DecompressImage (line 47) | public static byte[] DecompressImage(byte[] blocks, int width, int hei...
method DecompressImage (line 50) | public static byte[] DecompressImage(byte[] blocks, int offset, int wi...
method DecompressToBitmap (line 86) | public static Image DecompressToBitmap(byte[] blocks, int width, int h...
method DecompressToBitmap (line 89) | public static unsafe Image DecompressToBitmap(byte[] blocks, int offse...
method CompressBlock (line 136) | public static void CompressBlock(Stream input, Stream output, SquishOp...
method CompressBlockMasked (line 139) | public static void CompressBlockMasked(Stream input, Stream output, in...
method DecompressBlock (line 142) | public static void DecompressBlock(Stream input, Stream output, Squish...
method CompressImage (line 145) | public static void CompressImage(Stream input, Stream output, int widt...
method DecompressImage (line 148) | public static void DecompressImage(Stream input, Stream output, int wi...
FILE: Godbert/App.xaml.cs
class App (line 16) | public partial class App : Application {
method OnStartup (line 17) | protected override void OnStartup(StartupEventArgs e) {
method App_Exit (line 31) | private void App_Exit(object sender, ExitEventArgs e) {
method RequestGamePath (line 37) | private static bool RequestGamePath() {
method IsValidGamePath (line 82) | public static bool IsValidGamePath(string path) {
FILE: Godbert/Commands/DelegateCommand.cs
class DelegateCommand (line 8) | public class DelegateCommand : System.Windows.Input.ICommand {
method DelegateCommand (line 14) | public DelegateCommand(Action target) {
method CanExecute (line 21) | public bool CanExecute(object parameter) {
method Execute (line 26) | public void Execute(object parameter) {
method DelegateCommand (line 47) | public DelegateCommand(Action<T> target) {
method CanExecute (line 54) | public bool CanExecute(object parameter) {
method Execute (line 58) | public void Execute(object parameter) {
class DelegateCommand (line 41) | public class DelegateCommand<T> : System.Windows.Input.ICommand {
method DelegateCommand (line 14) | public DelegateCommand(Action target) {
method CanExecute (line 21) | public bool CanExecute(object parameter) {
method Execute (line 26) | public void Execute(object parameter) {
method DelegateCommand (line 47) | public DelegateCommand(Action<T> target) {
method CanExecute (line 54) | public bool CanExecute(object parameter) {
method Execute (line 58) | public void Execute(object parameter) {
FILE: Godbert/Controls/AttachedImage.cs
class AttachedImage (line 10) | public static class AttachedImage {
method GetUseImageType (line 26) | public static bool GetUseImageType(DependencyObject o) {
method SetUseImageType (line 29) | public static void SetUseImageType(DependencyObject o, bool newValue) {
method GetIsSizeRestricted (line 33) | public static bool? GetIsSizeRestricted(DependencyObject o) {
method SetIsSizeRestricted (line 37) | public static void SetIsSizeRestricted(DependencyObject o, bool? newVa...
method GetImage (line 41) | public static SaintCoinach.Imaging.ImageFile GetImage(DependencyObject...
method SetImage (line 45) | public static void SetImage(DependencyObject o, SaintCoinach.Imaging.I...
method GetImageType (line 49) | public static string GetImageType(DependencyObject o) {
method SetImageType (line 53) | public static void SetImageType(DependencyObject o, string v) {
method AttachedImageChanged (line 57) | private static void AttachedImageChanged(DependencyObject o, Dependenc...
method GetAsImageSource (line 88) | private static ImageSource GetAsImageSource(SaintCoinach.Imaging.Image...
method GetImageOfType (line 106) | private static SaintCoinach.Imaging.ImageFile GetImageOfType(SaintCoin...
method CreateSource (line 122) | private static ImageSource CreateSource(SaintCoinach.Imaging.ImageFile...
FILE: Godbert/Controls/ColumnFactory.cs
class ColumnFactory (line 16) | static class ColumnFactory {
method Create (line 17) | public static DataGridColumn Create(RelationalColumn column) {
method BuildHeader (line 47) | private static string BuildHeader(RelationalColumn column) {
method CreateCellBinding (line 68) | private static Binding CreateCellBinding(RelationalColumn column) {
class CellConverter (line 79) | private class CellConverter : System.Windows.Data.IValueConverter {
method Convert (line 85) | public object Convert(object value, Type targetType, object paramete...
method ConvertBack (line 98) | public object ConvertBack(object value, Type targetType, object para...
FILE: Godbert/Controls/INavigatable.cs
type INavigatable (line 12) | public interface INavigatable
method OnNavigate (line 14) | IRow OnNavigate(object sender, RoutedEventArgs e);
FILE: Godbert/Controls/IRawDataColumn.cs
type IRawDataColumn (line 9) | public interface IRawDataColumn {
method GetComparer (line 10) | IComparer<object> GetComparer(System.ComponentModel.ListSortDirection ...
FILE: Godbert/Controls/RawDataGrid.cs
class RawDataGrid (line 21) | public class RawDataGrid : DataGrid {
method OnSheetChanged (line 36) | private static void OnSheetChanged(DependencyObject o, DependencyPrope...
method OnSheetChanged (line 42) | protected virtual void OnSheetChanged(IRelationalSheet oldValue, IRela...
method OnFilterChanged (line 71) | private static void OnFilterChanged(DependencyObject o, DependencyProp...
method OnFilterChanged (line 75) | protected virtual void OnFilterChanged(string oldValue, string newValu...
method OnSorting (line 88) | protected override void OnSorting(DataGridSortingEventArgs eventArgs) {
method OnMouseDown (line 104) | protected override void OnMouseDown(MouseButtonEventArgs e) {
method GetClickedHeader (line 182) | private DataGridColumnHeader GetClickedHeader(MouseButtonEventArgs e)
method OnMouseDoubleClick (line 197) | protected override void OnMouseDoubleClick(MouseButtonEventArgs e) {
method GetClickedCell (line 223) | private static DataGridCell GetClickedCell(MouseButtonEventArgs e) {
method SelectRow (line 230) | public void SelectRow(IRow row, int? columnIndex) {
FILE: Godbert/Controls/RawDataGridColorColumn.cs
class RawDataGridColorColumn (line 17) | public class RawDataGridColorColumn : DataGridBoundColumn, IRawDataColumn {
method RawDataGridColorColumn (line 21) | public RawDataGridColorColumn(RelationalColumn column) {
method OnCopyClick (line 31) | void OnCopyClick(object sender, RoutedEventArgs e) {
method GenerateEditingElement (line 44) | protected override FrameworkElement GenerateEditingElement(DataGridCel...
method GenerateElement (line 47) | protected override FrameworkElement GenerateElement(DataGridCell cell,...
class ColorConverter (line 71) | private class ColorConverter : System.Windows.Data.IValueConverter {
method Convert (line 75) | public object Convert(object value, Type targetType, object paramete...
method ConvertBack (line 83) | public object ConvertBack(object value, Type targetType, object para...
method GetComparer (line 93) | public IComparer<object> GetComparer(ListSortDirection direction) {
class Comparer (line 101) | private class Comparer : IComparer<object> {
method Compare (line 107) | public int Compare(object x, object y) {
method InnerCompare (line 113) | private int InnerCompare(object x, object y) {
FILE: Godbert/Controls/RawDataGridImageColumn.cs
class RawDataGridImageColumn (line 15) | public class RawDataGridImageColumn : DataGridBoundColumn, IRawDataColumn {
method RawDataGridImageColumn (line 19) | public RawDataGridImageColumn(RelationalColumn column) {
method OnSaveImageClick (line 30) | void OnSaveImageClick(object sender, RoutedEventArgs e) {
method SetExt (line 54) | private static string SetExt(string orig, string ext) {
method GenerateEditingElement (line 66) | protected override FrameworkElement GenerateEditingElement(DataGridCel...
method GenerateElement (line 69) | protected override FrameworkElement GenerateElement(DataGridCell cell,...
method GetComparer (line 91) | public IComparer<object> GetComparer(ListSortDirection direction) {
class Comparer (line 99) | private class Comparer : IComparer<object> {
method Compare (line 105) | public int Compare(object x, object y) {
method InnerCompare (line 111) | private int InnerCompare(object x, object y) {
FILE: Godbert/Controls/RawDataGridKeyColumn.cs
class RawDataGridKeyColumn (line 14) | public class RawDataGridKeyColumn : DataGridTextColumn, IRawDataColumn {
method RawDataGridKeyColumn (line 15) | public RawDataGridKeyColumn(string keyPath) {
method GetComparer (line 25) | public IComparer<object> GetComparer(System.ComponentModel.ListSortDir...
class Comparer (line 33) | private class Comparer : IComparer<object> {
method Compare (line 38) | public int Compare(object x, object y) {
method InnerCompare (line 44) | private int InnerCompare(object x, object y) {
FILE: Godbert/Controls/RawDataGridTextColumn.cs
class RawDataGridTextColumn (line 14) | public class RawDataGridTextColumn : DataGridTextColumn, IRawDataColumn,...
method RawDataGridTextColumn (line 18) | public RawDataGridTextColumn(RelationalColumn column) {
method OnCopyClick (line 28) | void OnCopyClick(object sender, RoutedEventArgs e) {
method OnNavigate (line 44) | public IRow OnNavigate(object sender, RoutedEventArgs e) {
method GenerateElement (line 56) | protected override FrameworkElement GenerateElement(DataGridCell cell,...
method GetComparer (line 65) | public IComparer<object> GetComparer(ListSortDirection direction) {
class Comparer (line 73) | private class Comparer : IComparer<object> {
method Compare (line 80) | public int Compare(object x, object y) {
method InnerCompare (line 86) | private int InnerCompare(object x, object y) {
FILE: Godbert/Controls/RawDataItemsSource.cs
class RawDataItemsSource (line 14) | public class RawDataItemsSource : IEnumerable, INotifyCollectionChanged {
method GetVariant1Items (line 52) | private IEnumerable GetVariant1Items()
method GetVariant2Items (line 61) | private IEnumerable GetVariant2Items()
method FilterAndCompare (line 68) | private IEnumerable<object> FilterAndCompare(IEnumerable<object> results)
method BuildSearchIndex (line 85) | private void BuildSearchIndex(IRow[] rows) {
method FilterMatchingRows (line 114) | private IRow[] FilterMatchingRows() {
method RawDataItemsSource (line 125) | public RawDataItemsSource(IRelationalSheet sheet) {
method GetEnumerator (line 139) | public IEnumerator GetEnumerator() {
FILE: Godbert/EngineHelper.cs
class EngineHelper (line 10) | public class EngineHelper {
method AddToLast (line 19) | public EngineInstance AddToLast(string title, ComponentFunction func) ...
method AddToLast (line 20) | public EngineInstance AddToLast(string title, MultiComponentFunction f...
method ReplaceInLast (line 33) | public EngineInstance ReplaceInLast(string title, ComponentFunction fu...
method ReplaceInLast (line 34) | public EngineInstance ReplaceInLast(string title, MultiComponentFuncti...
method OpenInNew (line 47) | public EngineInstance OpenInNew(string title, ComponentFunction func) ...
method OpenInNew (line 48) | public EngineInstance OpenInNew(string title, MultiComponentFunction f...
method GetOrCreate (line 60) | public EngineInstance GetOrCreate(string title) {
method OpenNew (line 70) | public EngineInstance OpenNew(string title) {
method OnInstanceStopped (line 81) | void OnInstanceStopped(object sender, EventArgs e) {
FILE: Godbert/EngineInstance.cs
class EngineInstance (line 10) | public class EngineInstance {
class ComponentInjector (line 12) | class ComponentInjector : IUpdateableComponent, IDrawable3DComponent, ...
method ComponentInjector (line 20) | public ComponentInjector(FormEngine engine) {
method Update (line 30) | public void Update(EngineTime engineTime) {
method Draw (line 71) | public void Draw(EngineTime time, ref SharpDX.Matrix world, ref Shar...
method LoadContent (line 84) | public void LoadContent() {
method UnloadContent (line 89) | public void UnloadContent() {
method EngineInstance (line 111) | public EngineInstance(string title) {
method SetTitle (line 118) | public void SetTitle(string newTitle) {
method AddComponent (line 121) | public void AddComponent(EngineHelper.MultiComponentFunction component) {
method ReplaceComponents (line 125) | public void ReplaceComponents(EngineHelper.MultiComponentFunction newC...
method RunAsync (line 128) | public void RunAsync() {
method Run (line 135) | private void Run() {
FILE: Godbert/MainWindow.xaml.cs
class MainWindow (line 21) | public partial class MainWindow : Window {
method MainWindow (line 22) | public MainWindow() {
method OnClosing (line 36) | protected override void OnClosing(CancelEventArgs e) {
FILE: Godbert/Models/ModelCharaHierarchy.cs
class ModelCharaHierarchy (line 10) | public class ModelCharaHierarchy : IEnumerable<ModelCharaMain> {
method ModelCharaHierarchy (line 18) | public ModelCharaHierarchy(string mainFormat, string subFormat, string...
method Add (line 30) | public void Add(ModelChara modelChara) {
method Add (line 33) | public void Add(int main, int sub, int variant) {
method Contains (line 39) | public bool Contains(int main, int sub, int variant) {
method Clear (line 45) | public void Clear() {
method GetEnumerator (line 52) | public IEnumerator<ModelCharaMain> GetEnumerator() {
method GetEnumerator (line 60) | System.Collections.IEnumerator System.Collections.IEnumerable.GetEnume...
FILE: Godbert/Models/ModelCharaMain.cs
class ModelCharaMain (line 8) | public class ModelCharaMain : IEnumerable<ModelCharaSub> {
method ModelCharaMain (line 16) | public ModelCharaMain(ModelCharaHierarchy parent, string displayName, ...
method Add (line 28) | public void Add(int sub, int variant) {
method Contains (line 34) | public bool Contains(int sub, int variant) {
method Clear (line 40) | public void Clear() {
method GetEnumerator (line 47) | public IEnumerator<ModelCharaSub> GetEnumerator() {
method GetEnumerator (line 55) | System.Collections.IEnumerator System.Collections.IEnumerable.GetEnume...
method ToString (line 61) | public override string ToString() {
FILE: Godbert/Models/ModelCharaSub.cs
class ModelCharaSub (line 8) | public class ModelCharaSub : IEnumerable<ModelCharaVariant> {
method ModelCharaSub (line 16) | public ModelCharaSub(ModelCharaMain parent, string displayName, int va...
method Add (line 28) | public void Add(int variant) {
method Contains (line 32) | public bool Contains(int variant) {
method Clear (line 35) | public void Clear() {
method GetEnumerator (line 42) | public IEnumerator<ModelCharaVariant> GetEnumerator() {
method GetEnumerator (line 50) | System.Collections.IEnumerator System.Collections.IEnumerable.GetEnume...
method ToString (line 56) | public override string ToString() {
FILE: Godbert/Models/ModelCharaVariant.cs
class ModelCharaVariant (line 8) | public class ModelCharaVariant {
method ModelCharaVariant (line 16) | public ModelCharaVariant(ModelCharaSub parent, string displayName, int...
method ToString (line 23) | public override string ToString() {
FILE: Godbert/NaturalComparer.cs
class NaturalComparer (line 8) | public class NaturalComparer : Comparer<string>, IDisposable {
method NaturalComparer (line 11) | public NaturalComparer() : this(StringComparer.Ordinal) { }
method NaturalComparer (line 12) | public NaturalComparer(StringComparer partsComparer) {
method Dispose (line 19) | public void Dispose() {
method Compare (line 24) | public override int Compare(string x, string y) {
method PartCompare (line 60) | private int PartCompare(string left, string right) {
FILE: Godbert/ObservableBase.cs
class ObservableBase (line 10) | public class ObservableBase : INotifyPropertyChanged {
method OnPropertyChanged (line 15) | protected virtual void OnPropertyChanged(string propertyName) {
method OnPropertyChanged (line 21) | protected virtual void OnPropertyChanged<TProperty>(Expression<Func<TP...
FILE: Godbert/Properties/Resources.Designer.cs
class Resources (line 22) | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resource...
method Resources (line 31) | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Mic...
FILE: Godbert/Properties/Settings.Designer.cs
class Settings (line 14) | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
FILE: Godbert/Settings.cs
class Settings (line 10) | public class Settings {
method Load (line 17) | private static Settings Load() {
method Save (line 30) | public void Save() {
FILE: Godbert/ViewModels/BookmarkViewModel.cs
class BookmarkViewModel (line 8) | public class BookmarkViewModel {
method ToString (line 15) | public override string ToString() {
method Equals (line 34) | public override bool Equals(object obj) {
method GetHashCode (line 42) | public override int GetHashCode() {
FILE: Godbert/ViewModels/DataViewModel.cs
class DataViewModel (line 16) | public class DataViewModel : ObservableBase {
method DataViewModel (line 92) | public DataViewModel(SaintCoinach.ARealmReversed realm, MainViewModel ...
method OnExportCsv (line 107) | private void OnExportCsv() {
method FixName (line 122) | private static string FixName(string original) {
method SaveAsCsv (line 128) | static void SaveAsCsv(IRelationalSheet sheet, string path) {
method WriteDict (line 165) | static void WriteDict(StreamWriter s, IDictionary<int, object> v) {
method IsUnescaped (line 180) | static bool IsUnescaped(object self) {
method _Bookmarks_CollectionChanged (line 195) | private void _Bookmarks_CollectionChanged(object sender, System.Collec...
FILE: Godbert/ViewModels/DemihumanViewModel.cs
class DemihumanViewModel (line 16) | public class DemihumanViewModel : ObservableBase {
method DemihumanViewModel (line 95) | public DemihumanViewModel(MainViewModel parent) {
method OnAdd (line 116) | private void OnAdd() {
method OnReplace (line 122) | private void OnReplace() {
method OnNew (line 128) | private void OnNew() {
method TryGetModel (line 135) | private bool TryGetModel(out string title, out Tuple<ModelDefinition, ...
method OnBruteForce (line 204) | private void OnBruteForce() {
method OnBruteForceComplete (line 217) | void OnBruteForceComplete(object sender, System.ComponentModel.RunWork...
method DoBruteForceWork (line 222) | void DoBruteForceWork(object sender, System.ComponentModel.DoWorkEvent...
FILE: Godbert/ViewModels/EquipmentViewModel.cs
class EquipmentViewModel (line 17) | public class EquipmentViewModel : ObservableBase {
method EquipmentViewModel (line 62) | public EquipmentViewModel(MainViewModel parent) {
method OnAdd (line 82) | private void OnAdd() {
method OnReplace (line 86) | private void OnReplace() {
method OnNew (line 90) | private void OnNew() {
method TryGetModel (line 95) | private bool TryGetModel(out ModelDefinition model, out ModelVariantId...
method Refresh (line 121) | public void Refresh() {
FILE: Godbert/ViewModels/FurnitureViewModel.cs
class FurnitureViewModel (line 17) | public class FurnitureViewModel : ObservableBase {
method FurnitureViewModel (line 67) | public FurnitureViewModel(MainViewModel parent) {
method OnAdd (line 88) | private void OnAdd() {
method OnReplace (line 93) | private void OnReplace() {
method OnNew (line 98) | private void OnNew() {
method TryGetModel (line 104) | private bool TryGetModel(out SgbFile model) {
method Refresh (line 124) | public void Refresh() {
FILE: Godbert/ViewModels/MainViewModel.cs
class MainViewModel (line 16) | public class MainViewModel : ObservableBase {
method MainViewModel (line 43) | public MainViewModel() {
method MainViewModel (line 68) | public MainViewModel(ARealmReversed realm) {
method Initialize (line 72) | void Initialize(ARealmReversed realm) {
method OnLanguage (line 99) | private void OnLanguage(SaintCoinach.Ex.Language newLanguage) {
method OnGameLocation (line 113) | private void OnGameLocation() {
method OnNewWindowCommand (line 127) | private void OnNewWindowCommand() {
method OnShowOffsetsCommand (line 139) | private void OnShowOffsetsCommand() {
method OnSortByOffsetsCommand (line 145) | private void OnSortByOffsetsCommand() {
FILE: Godbert/ViewModels/MapsViewModel.cs
class MapsViewModel (line 15) | public class MapsViewModel : ObservableBase {
method MapsViewModel (line 34) | public MapsViewModel(MainViewModel parent) {
method OnOpen (line 47) | private void OnOpen() {
method Refresh (line 65) | public void Refresh() {
FILE: Godbert/ViewModels/MonstersViewModel.cs
class MonstersViewModel (line 26) | public class MonstersViewModel : ObservableBase {
method MonstersViewModel (line 68) | public MonstersViewModel(MainViewModel parent) {
method OnAdd (line 95) | private void OnAdd() {
method OnReplace (line 103) | private void OnReplace() {
method OnExport (line 111) | private void OnExport()
method OnNew (line 162) | private void OnNew() {
method SearchPaps (line 173) | private List<PapFile> SearchPaps(string modelPath, int m)
method CreateModel (line 211) | private IComponent CreateModel(Engine engine, Skeleton skeleton, Model...
method TryGetModel (line 235) | private bool TryGetModel(out Skeleton skeleton, out ModelDefinition mo...
method OnBruteForce (line 295) | private void OnBruteForce() {
method OnBruteForceComplete (line 308) | void OnBruteForceComplete(object sender, System.ComponentModel.RunWork...
method DoBruteForceWork (line 313) | void DoBruteForceWork(object sender, System.ComponentModel.DoWorkEvent...
FILE: Godbert/ViewModels/TerritoryViewModel.cs
class TerritoryViewModel (line 15) | public class TerritoryViewModel : ObservableBase {
class ExportCancelException (line 16) | class ExportCancelException : Exception {
method ExportCancelException (line 17) | public ExportCancelException(string message) : base(message) {
method TerritoryViewModel (line 57) | public TerritoryViewModel(MainViewModel parent) {
method OnOpen (line 79) | private void OnOpen() {
method OnExport (line 95) | private void OnExport() {
method _Export (line 118) | private void _Export(Territory territory, Ookii.Dialogs.Wpf.ProgressDi...
method Refresh (line 481) | public void Refresh() {
class TerritoryView (line 488) | public class TerritoryView
method TerritoryView (line 490) | public TerritoryView(TerritoryType territory)
FILE: Godbert/Views/DataView.xaml.cs
class DataView (line 21) | public partial class DataView : UserControl {
method DataView (line 22) | public DataView() {
method DataView_DataContextChanged (line 28) | private void DataView_DataContextChanged(object sender, DependencyProp...
method MainViewModel_DataGridChanged (line 33) | private void MainViewModel_DataGridChanged(object sender, EventArgs e) {
method RowSizeChanged (line 40) | public void RowSizeChanged(object sender, SizeChangedEventArgs e)
method _BookmarksList_SelectionChanged (line 52) | private void _BookmarksList_SelectionChanged(object sender, SelectionC...
method BookmarkListItem_MouseDown (line 73) | private void BookmarkListItem_MouseDown(object sender, MouseButtonEven...
FILE: Godbert/Views/DemihumansView.xaml.cs
class DemihumansView (line 20) | public partial class DemihumansView : UserControl {
method DemihumansView (line 21) | public DemihumansView() {
method DemihumanTreeView_SelectedItemChanged (line 25) | private void DemihumanTreeView_SelectedItemChanged(object sender, Rout...
FILE: Godbert/Views/EquipmentView.xaml.cs
class EquipmentView (line 20) | public partial class EquipmentView : UserControl {
method EquipmentView (line 21) | public EquipmentView() {
FILE: Godbert/Views/FurnitureView.xaml.cs
class FurnitureView (line 20) | public partial class FurnitureView : UserControl {
method FurnitureView (line 21) | public FurnitureView() {
FILE: Godbert/Views/Help3DView.xaml.cs
class Help3DView (line 20) | public partial class Help3DView : UserControl {
method Help3DView (line 21) | public Help3DView() {
FILE: Godbert/Views/MapsView.xaml.cs
class MapsView (line 20) | public partial class MapsView : UserControl {
method MapsView (line 21) | public MapsView() {
FILE: Godbert/Views/MonstersView.xaml.cs
class MonstersView (line 20) | public partial class MonstersView : UserControl {
method MonstersView (line 21) | public MonstersView() {
method MonsterTreeView_SelectedItemChanged (line 24) | private void MonsterTreeView_SelectedItemChanged(object sender, Routed...
FILE: Godbert/Views/TerritoryView.xaml.cs
class TerritoryView (line 21) | public partial class TerritoryView : UserControl {
method TerritoryView (line 22) | public TerritoryView() {
FILE: Godbert/WpfHelper.cs
class WpfHelper (line 10) | public static class WpfHelper {
method FindParent (line 11) | public static T FindParent<T>(DependencyObject child) where T : class {
FILE: SaintCoinach.Cmd/Commands/AllExdCommand.cs
class AllExdCommand (line 17) | public class AllExdCommand : AsyncActionCommandBase {
method AllExdCommand (line 20) | public AllExdCommand(ARealmReversed realm)
method InvokeAsync (line 25) | public override async Task InvokeAsync(string[] paramList) {
FILE: SaintCoinach.Cmd/Commands/AllExdRawCommand.cs
class AllExdRawCommand (line 15) | public class AllExdRawCommand : AsyncActionCommandBase
method AllExdRawCommand (line 23) | public AllExdRawCommand(ARealmReversed realm)
method InvokeAsync (line 34) | public override async Task InvokeAsync(string[] paramList)
FILE: SaintCoinach.Cmd/Commands/BgmCommand.cs
class BgmCommand (line 11) | public class BgmCommand : AsyncActionCommandBase {
method BgmCommand (line 14) | public BgmCommand(ARealmReversed realm)
method InvokeAsync (line 19) | public override async Task InvokeAsync(string[] paramList) {
method ExportFile (line 78) | private bool ExportFile(string filePath, string suffix) {
method IsMatch (line 121) | private bool IsMatch(String[] searchStrings, string filePath) {
FILE: SaintCoinach.Cmd/Commands/ExdCommand.cs
class ExdCommand (line 11) | public class ExdCommand : AsyncActionCommandBase {
method ExdCommand (line 14) | public ExdCommand(ARealmReversed realm)
method InvokeAsync (line 19) | public override async Task InvokeAsync(string[] paramList) {
FILE: SaintCoinach.Cmd/Commands/ExdHeaderCommand.cs
class ExdHeaderCommand (line 12) | public class ExdHeaderCommand : AsyncActionCommandBase {
method ExdHeaderCommand (line 15) | public ExdHeaderCommand(ARealmReversed realm)
method InvokeAsync (line 21) | public override async Task InvokeAsync(string[] paramList) {
class SheetHeader (line 47) | private class SheetHeader {
class SheetColumn (line 52) | private class SheetColumn {
FILE: SaintCoinach.Cmd/Commands/FurnitureExpCommand.cs
class MdlCommand (line 16) | public class MdlCommand : AsyncActionCommandBase {
method MdlCommand (line 20) | public MdlCommand(ARealmReversed realm)
method InvokeAsync (line 30) | public override async Task InvokeAsync(string[] paramList) {
method ExportFile (line 67) | private bool ExportFile(string filePath) {
method WriteFunction (line 96) | private bool WriteFunction(string filePath) {
FILE: SaintCoinach.Cmd/Commands/HDUiCommand.cs
class HDUiCommand (line 9) | public class HDUiCommand : AsyncActionCommandBase {
method HDUiCommand (line 23) | public HDUiCommand(ARealmReversed realm)
method InvokeAsync (line 28) | public override async Task InvokeAsync(string[] paramList) {
method Process (line 69) | private int Process(int i) {
method Process (line 77) | private bool Process(int i, string version) {
FILE: SaintCoinach.Cmd/Commands/ImageCommand.cs
class ImageCommand (line 12) | public class ImageCommand : AsyncActionCommandBase {
method ImageCommand (line 15) | public ImageCommand(ARealmReversed realm)
method InvokeAsync (line 20) | public override async Task InvokeAsync(string[] paramList) {
FILE: SaintCoinach.Cmd/Commands/LanguageCommand.cs
class LanguageCommand (line 13) | public class LanguageCommand : AsyncActionCommandBase {
method LanguageCommand (line 16) | public LanguageCommand(ARealmReversed realm)
method InvokeAsync (line 21) | public override async Task InvokeAsync(string[] paramList) {
FILE: SaintCoinach.Cmd/Commands/MapCommand.cs
class MapCommand (line 13) | public class MapCommand : AsyncActionCommandBase {
method MapCommand (line 16) | public MapCommand(ARealmReversed realm)
method InvokeAsync (line 21) | public override async Task InvokeAsync(string[] paramList) {
method FormatToExtension (line 84) | static string FormatToExtension(ImageFormat format) {
method ToPathSafeString (line 93) | static string ToPathSafeString(string input, char invalidReplacement =...
FILE: SaintCoinach.Cmd/Commands/RawCommand.cs
class RawCommand (line 12) | public class RawCommand : AsyncActionCommandBase {
method RawCommand (line 15) | public RawCommand(ARealmReversed realm)
method InvokeAsync (line 20) | public override async Task InvokeAsync(string[] paramList) {
FILE: SaintCoinach.Cmd/Commands/RawExdCommand.cs
class RawExdCommand (line 12) | public class RawExdCommand : AsyncActionCommandBase {
method RawExdCommand (line 15) | public RawExdCommand(ARealmReversed realm)
method InvokeAsync (line 20) | public override async Task InvokeAsync(string[] paramList) {
FILE: SaintCoinach.Cmd/Commands/SqlExport.cs
class SqlExport (line 16) | public class SqlExport : AsyncActionCommandBase
method SqlExport (line 20) | public SqlExport(ARealmReversed realm) :
method GetSqlType (line 26) | private string GetSqlType(Type type)
method IsUnescaped (line 58) | static bool IsUnescaped(object self) {
method GetTableName (line 72) | private string GetTableName(ISheet sheet)
method DoRowData (line 77) | private void DoRowData(ISheet sheet, XivRow row, List<string> data, St...
method WriteVariant1Rows (line 109) | private void WriteVariant1Rows(ISheet sheet, StringBuilder sb)
method WriteVairant2Rows (line 137) | private void WriteVairant2Rows(ISheet sheet, StringBuilder sb)
method WriteRows (line 167) | private void WriteRows(ISheet sheet, StringBuilder sb)
method InvokeAsync (line 175) | public override async Task InvokeAsync(string[] paramList)
FILE: SaintCoinach.Cmd/Commands/UiCommand.cs
class UiCommand (line 9) | public class UiCommand : AsyncActionCommandBase {
method UiCommand (line 23) | public UiCommand(ARealmReversed realm)
method InvokeAsync (line 28) | public override async Task InvokeAsync(string[] paramList) {
method Process (line 67) | private int Process(int i) {
method Process (line 75) | private bool Process(int i, string version) {
FILE: SaintCoinach.Cmd/ExdHelper.cs
class ExdHelper (line 13) | static class ExdHelper {
method SaveAsCsv (line 16) | public static void SaveAsCsv(Ex.Relational.IRelationalSheet sheet, Lan...
method WriteRows (line 39) | public static void WriteRows(StreamWriter s, ISheet sheet, Language la...
method WriteRowsCore (line 49) | static void WriteRowsCore(StreamWriter s, IEnumerable<Ex.IRow> rows, L...
method WriteRowKey (line 80) | static void WriteRowKey(StreamWriter s, Ex.IRow row) {
method WriteSubRowKey (line 84) | static void WriteSubRowKey(StreamWriter s, Ex.IRow row) {
method IsUnescaped (line 89) | static bool IsUnescaped(object self) {
FILE: SaintCoinach.Cmd/Program.cs
class ConsoleProgressReporter (line 8) | class ConsoleProgressReporter : IProgress<Ex.Relational.Update.UpdatePro...
method Report (line 12) | public void Report(Ex.Relational.Update.UpdateProgress value) {
class Program (line 18) | class Program {
method Main (line 19) | private static void Main(string[] args) {
method Setup (line 62) | static void Setup(RootCommand rootCmd, ARealmReversed realm) {
method SearchForDataPaths (line 71) | static string[] SearchForDataPaths() {
FILE: SaintCoinach.Cmd/Properties/Settings.Designer.cs
class Settings (line 14) | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
FILE: SaintCoinach.Graphics.Viewer/AnimatedModel.cs
class AnimatedModel (line 11) | public class AnimatedModel : Viewer.Content.ContentModel {
method AnimatedModel (line 27) | public AnimatedModel(Engine engine, Skeleton skeleton, ModelVariantIde...
method AnimatedModel (line 28) | public AnimatedModel(Engine engine, Skeleton skeleton, ModelVariantIde...
method AnimatedModel (line 29) | public AnimatedModel(Engine engine, Skeleton skeleton, ModelVariantIde...
method AnimatedModel (line 30) | public AnimatedModel(Engine engine, Skeleton skeleton, ModelVariantIde...
method Update (line 44) | public override void Update(EngineTime engineTime) {
method Draw (line 66) | public override void Draw(EngineTime time, ref Matrix world, ref Matri...
FILE: SaintCoinach.Graphics.Viewer/Animation.cs
class Animation (line 12) | public class Animation {
class Interop (line 14) | static class Interop {
method getDuration (line 15) | [DllImport("hkAnimationInterop.dll", CallingConvention = CallingConv...
method getFrameDuration (line 17) | [DllImport("hkAnimationInterop.dll", CallingConvention = CallingConv...
method getNumFrames (line 19) | [DllImport("hkAnimationInterop.dll", CallingConvention = CallingConv...
method getPose (line 21) | [DllImport("hkAnimationInterop.dll", CallingConvention = CallingConv...
method Animation (line 39) | internal Animation(AnimationContainer container, IntPtr ptr, string na...
method GetPose (line 51) | public Matrix[] GetPose(float timestamp) {
FILE: SaintCoinach.Graphics.Viewer/AnimationContainer.cs
class AnimationContainer (line 12) | public class AnimationContainer : IDisposable {
class Interop (line 14) | static class Interop {
method loadAnimationContainer (line 15) | [DllImport("hkAnimationInterop.dll", CallingConvention = CallingConv...
method unloadAnimationContainer (line 18) | [DllImport("hkAnimationInterop.dll", CallingConvention = CallingConv...
method getNumAnimations (line 21) | [DllImport("hkAnimationInterop.dll", CallingConvention = CallingConv...
method getAnimation (line 24) | [DllImport("hkAnimationInterop.dll", CallingConvention = CallingConv...
method AnimationContainer (line 43) | public AnimationContainer(Skeleton skeleton, PapFile file) {
method Get (line 57) | public Animation Get(string name) {
method Get (line 60) | public Animation Get(int index) {
method Dispose (line 71) | protected virtual void Dispose(bool disposing) {
method Dispose (line 87) | public void Dispose() {
FILE: SaintCoinach.Graphics.Viewer/AnimationPlayer.cs
class AnimationPlayer (line 11) | public class AnimationPlayer : IUpdateableComponent {
method GetPose (line 45) | public Matrix[] GetPose() {
method Reset (line 56) | public void Reset() {
method Update (line 63) | public void Update(EngineTime engineTime) {
FILE: SaintCoinach.Graphics.Viewer/Camera.cs
class Camera (line 12) | public class Camera : IUpdateableComponent {
method Camera (line 57) | public Camera(Engine engine) {
method Reset (line 65) | public void Reset() {
method GetRotation (line 72) | public Matrix GetRotation() {
method UpdateViewMatrix (line 75) | private void UpdateViewMatrix() {
method AddToCameraPosition (line 87) | public void AddToCameraPosition(Vector3 vectorToAdd) {
method Contains (line 96) | public bool Contains(BoundingBox bbox) {
method IsVisible (line 100) | public bool IsVisible(BoundingBox bounds) {
method IsVisible (line 103) | public bool IsVisible(Vector3 point) {
method IsVisible (line 106) | public bool IsVisible(Vector4 point) {
method Update (line 114) | public void Update(EngineTime time) {
FILE: SaintCoinach.Graphics.Viewer/Component.cs
class Component (line 8) | public abstract class Component : IUpdateableComponent, IContentComponent {
method LoadContent (line 17) | public virtual void LoadContent() {
method UnloadContent (line 21) | public virtual void UnloadContent() {
method Update (line 32) | public virtual void Update(EngineTime engineTime) {
FILE: SaintCoinach.Graphics.Viewer/ComponentContainer.cs
class ComponentContainer (line 8) | public class ComponentContainer : System.Collections.ObjectModel.Collect...
method Draw (line 14) | public void Draw(EngineTime time, ref SharpDX.Matrix world, ref SharpD...
method Update (line 26) | public void Update(EngineTime engineTime) {
method LoadContent (line 40) | public void LoadContent() {
method UnloadContent (line 46) | public void UnloadContent() {
method InsertItem (line 55) | protected override void InsertItem(int index, IComponent item) {
method SetItem (line 62) | protected override void SetItem(int index, IComponent item) {
FILE: SaintCoinach.Graphics.Viewer/Content/BgColorChangeMaterial.cs
class BgColorChangeMaterial (line 11) | public class BgColorChangeMaterial : MaterialBase {
type BgColorChangeParameter (line 16) | [Flags]
method BgColorChangeMaterial (line 57) | public BgColorChangeMaterial(Engine engine, Material baseMaterial)
method Apply (line 89) | public override void Apply(Data.ParametersBase parameters) {
FILE: SaintCoinach.Graphics.Viewer/Content/BgMaterial.cs
class BgMaterial (line 11) | public class BgMaterial : MaterialBase {
type BgParameter (line 14) | [Flags]
method BgMaterial (line 74) | public BgMaterial(Engine engine, Material baseMaterial)
method Apply (line 115) | public override void Apply(Data.ParametersBase parameters) {
FILE: SaintCoinach.Graphics.Viewer/Content/CharacterMaterial.cs
class CharacterMaterial (line 11) | public class CharacterMaterial : MaterialBase {
type CharacterParameter (line 14) | [Flags]
method CharacterMaterial (line 76) | public CharacterMaterial(Engine engine, Material baseMaterial)
method Apply (line 116) | public override void Apply(Data.ParametersBase parameters) {
FILE: SaintCoinach.Graphics.Viewer/Content/ContentMesh.cs
class ContentMesh (line 11) | public class ContentMesh : Drawable3DComponent {
method ContentMesh (line 22) | public ContentMesh(ContentModel model, PrimitiveMesh primitive, ModelV...
method LoadContent (line 33) | public override void LoadContent() {
method UnloadContent (line 42) | public override void UnloadContent() {
method Draw (line 50) | public override void Draw(EngineTime time, ref SharpDX.Matrix world, r...
FILE: SaintCoinach.Graphics.Viewer/Content/ContentMeshPart.cs
class ContentMeshPart (line 9) | public class ContentMeshPart {
method ContentMeshPart (line 16) | public ContentMeshPart(ContentMesh mesh, MeshPart basePart) {
method Draw (line 27) | public void Draw(Device device) {
FILE: SaintCoinach.Graphics.Viewer/Content/ContentModel.cs
class ContentModel (line 10) | public class ContentModel : Drawable3DComponent {
method ContentModel (line 27) | public ContentModel(Engine engine, ModelVariantIdentifier variant, Mod...
method ContentModel (line 28) | public ContentModel(Engine engine, ModelVariantIdentifier variant, Mod...
method ContentModel (line 29) | public ContentModel(Engine engine, ModelVariantIdentifier variant, Mod...
method ContentModel (line 30) | public ContentModel(Engine engine, ModelVariantIdentifier variant, Mod...
method ContentModel (line 39) | public ContentModel(Engine engine, TransformedModel transformedModel) ...
method ContentModel (line 40) | public ContentModel(Engine engine, TransformedModel transformedModel, ...
method Init (line 58) | private void Init() {
method LoadContent (line 68) | public override void LoadContent() {
method UnloadContent (line 84) | public override void UnloadContent() {
method Draw (line 93) | public override void Draw(EngineTime time, ref SharpDX.Matrix world, r...
method Update (line 102) | public override void Update(EngineTime engineTime) {
FILE: SaintCoinach.Graphics.Viewer/Content/ContentSgb.cs
class ContentSgb (line 9) | public class ContentSgb : Drawable3DComponent {
method ContentSgb (line 21) | public ContentSgb(Engine engine, Sgb.SgbFile sgbFile, Data.ParametersB...
method ContentSgb (line 22) | public ContentSgb(Engine engine, Sgb.SgbFile sgbFile):this(engine, sgb...
method ContentSgb (line 23) | public ContentSgb(Engine engine, Sgb.SgbFile sgbFile, Data.ParametersB...
method LoadContent (line 76) | public override void LoadContent() {
method UnloadContent (line 80) | public override void UnloadContent() {
method Update (line 84) | public override void Update(EngineTime engineTime) {
method Draw (line 88) | public override void Draw(EngineTime time, ref SharpDX.Matrix world, r...
FILE: SaintCoinach.Graphics.Viewer/Content/ContentTerritory.cs
class ContentTerritory (line 11) | public class ContentTerritory : Drawable3DComponent {
method ContentTerritory (line 22) | public ContentTerritory(Engine engine, Territory territory) : base(eng...
method LoadContent (line 88) | public override void LoadContent() {
method UnloadContent (line 93) | public override void UnloadContent() {
method Update (line 98) | public override void Update(EngineTime engineTime) {
method Draw (line 103) | public override void Draw(EngineTime time, ref SharpDX.Matrix world, r...
FILE: SaintCoinach.Graphics.Viewer/Content/CrystalMaterial.cs
class CrystalMaterial (line 11) | public class CrystalMaterial : MaterialBase {
type CrystalParameter (line 16) | [Flags]
method CrystalMaterial (line 57) | public CrystalMaterial(Engine engine, Material baseMaterial)
method Apply (line 92) | public override void Apply(Data.ParametersBase parameters) {
FILE: SaintCoinach.Graphics.Viewer/Content/Cube.cs
class Cube (line 13) | public class Cube : Drawable3DComponent {
method Cube (line 21) | public Cube(Engine engine) : base(engine) {
method LoadContent (line 25) | public override void LoadContent() {
method UnloadContent (line 90) | public override void UnloadContent() {
method Draw (line 94) | public override void Draw(EngineTime time, ref SharpDX.Matrix world, r...
FILE: SaintCoinach.Graphics.Viewer/Content/HairMaterial.cs
class HairMaterial (line 11) | public class HairMaterial : MaterialBase {
type HairParameter (line 14) | [Flags]
method HairMaterial (line 37) | public HairMaterial(Engine engine, Material baseMaterial)
method Apply (line 66) | public override void Apply(Data.ParametersBase parameters) {
FILE: SaintCoinach.Graphics.Viewer/Content/IrisMaterial.cs
class IrisMaterial (line 11) | public class IrisMaterial : MaterialBase {
type IrisParameter (line 14) | [Flags]
method IrisMaterial (line 44) | public IrisMaterial(Engine engine, Material baseMaterial)
method Apply (line 73) | public override void Apply(Data.ParametersBase parameters) {
FILE: SaintCoinach.Graphics.Viewer/Content/MaterialBase.cs
class MaterialBase (line 11) | public abstract class MaterialBase {
method MaterialBase (line 36) | protected MaterialBase(Engine engine, Material baseMaterial) {
method Apply (line 45) | public abstract void Apply(Data.ParametersBase parameters);
FILE: SaintCoinach.Graphics.Viewer/Content/PrimitiveMesh.cs
class PrimitiveMesh (line 14) | public class PrimitiveMesh : IDisposable {
method PrimitiveMesh (line 23) | public PrimitiveMesh(Device device, Mesh baseMesh) {
method Dispose (line 38) | public void Dispose() {
FILE: SaintCoinach.Graphics.Viewer/Content/PrimitiveModel.cs
class PrimitiveModel (line 12) | public class PrimitiveModel : IDisposable {
method PrimitiveModel (line 19) | public PrimitiveModel(Device device, Model baseModel) {
method Dispose (line 27) | public void Dispose() {
FILE: SaintCoinach.Graphics.Viewer/Content/SkinMaterial.cs
class SkinMaterial (line 11) | public class SkinMaterial : MaterialBase {
type SkinParameter (line 14) | [Flags]
method SkinMaterial (line 40) | public SkinMaterial(Engine engine, Material baseMaterial)
method Apply (line 72) | public override void Apply(Data.ParametersBase parameters) {
FILE: SaintCoinach.Graphics.Viewer/Data/CustomizeParameters.cs
class CustomizeParameters (line 11) | public class CustomizeParameters : ParametersBase {
method CustomizeParameters (line 56) | public CustomizeParameters() { Set(CustomizeParametersKey, this); }
method CustomizeParameters (line 57) | public CustomizeParameters(ParametersBase copyFrom) : base(copyFrom) {
method Clone (line 62) | public override object Clone() {
FILE: SaintCoinach.Graphics.Viewer/Data/ParametersBase.cs
class ParametersBase (line 8) | public class ParametersBase : ICloneable {
method ParametersBase (line 14) | public ParametersBase() { }
method ParametersBase (line 15) | public ParametersBase(ParametersBase copyFrom) {
method Set (line 21) | public void Set<T>(string key, T value) {
method Contains (line 27) | public bool Contains(string key) {
method Contains (line 30) | public bool Contains<T>(string key) {
method Remove (line 33) | public bool Remove(string key) {
method Get (line 36) | public T Get<T>(string key) {
method TryGetValue (line 39) | public bool TryGetValue<T>(string key, out T value) {
method Clone (line 50) | public virtual object Clone() {
FILE: SaintCoinach.Graphics.Viewer/Drawable3DComponent.cs
class Drawable3DComponent (line 8) | public abstract class Drawable3DComponent : Component, IDrawable3DCompon...
method Drawable3DComponent (line 18) | protected Drawable3DComponent(Engine engine) {
method Draw (line 28) | public abstract void Draw(EngineTime time, ref SharpDX.Matrix world, r...
FILE: SaintCoinach.Graphics.Viewer/EffectFactory.cs
class EffectFactory (line 13) | public class EffectFactory : IDisposable {
class ShaderCompilerInclude (line 15) | class ShaderCompilerInclude : Include {
method ShaderCompilerInclude (line 23) | public ShaderCompilerInclude(string path) {
method Close (line 30) | public void Close(Stream stream) {
method Open (line 35) | public Stream Open(IncludeType type, string fileName, Stream parentS...
method Dispose (line 58) | public void Dispose() {
method EffectFactory (line 79) | public EffectFactory(Engine engine) {
method GetEffect (line 85) | public Effects.EffectBase GetEffect(string name) {
method GetEffect (line 127) | private Effects.EffectBase GetEffect(string key, string file, Func<Com...
method GetCompilationResult (line 137) | private CompilationResult GetCompilationResult(string key, string file) {
method Dispose (line 156) | public void Dispose() {
method UnloadAll (line 160) | public void UnloadAll() {
FILE: SaintCoinach.Graphics.Viewer/Effects/BgColorChangeEffect.cs
class BgColorChangeEffect (line 12) | public class BgColorChangeEffect : EffectBase {
method BgColorChangeEffect (line 36) | public BgColorChangeEffect(Device device, byte[] byteCode) : this(devi...
method BgColorChangeEffect (line 37) | public BgColorChangeEffect(Device device, byte[] byteCode, EffectFlags...
method Init (line 44) | private void Init() {
FILE: SaintCoinach.Graphics.Viewer/Effects/BgEffect.cs
class BgEffect (line 12) | public class BgEffect : EffectBase {
method BgEffect (line 44) | public BgEffect(Device device, byte[] byteCode) : this(device, byteCod...
method BgEffect (line 45) | public BgEffect(Device device, byte[] byteCode, EffectFlags flags)
method Init (line 52) | private void Init() {
FILE: SaintCoinach.Graphics.Viewer/Effects/CharacterEffect.cs
class CharacterEffect (line 12) | public class CharacterEffect : SkinnedEffect {
method CharacterEffect (line 40) | public CharacterEffect(Device device, byte[] byteCode) : this(device, ...
method CharacterEffect (line 41) | public CharacterEffect(Device device, byte[] byteCode, EffectFlags flags)
method Init (line 48) | private void Init() {
FILE: SaintCoinach.Graphics.Viewer/Effects/CrystalEffect.cs
class CrystalEffect (line 12) | public class CrystalEffect : EffectBase {
method CrystalEffect (line 36) | public CrystalEffect(Device device, byte[] byteCode) : this(device, by...
method CrystalEffect (line 37) | public CrystalEffect(Device device, byte[] byteCode, EffectFlags flags)
method Init (line 44) | private void Init() {
FILE: SaintCoinach.Graphics.Viewer/Effects/CustomizeParameterEffectVariable.cs
class CustomizeParameterEffectVariable (line 11) | public class CustomizeParameterEffectVariable {
method CustomizeParameterEffectVariable (line 43) | public CustomizeParameterEffectVariable(EffectBase effect) {
method Set (line 53) | public void Set(Data.CustomizeParameters parmeters) {
FILE: SaintCoinach.Graphics.Viewer/Effects/DirectionalLight.cs
type DirectionalLight (line 11) | [StructLayout(LayoutKind.Sequential)]
FILE: SaintCoinach.Graphics.Viewer/Effects/EffectBase.cs
class EffectBase (line 13) | public abstract class EffectBase : Effect {
method EffectBase (line 98) | protected EffectBase(Device device, byte[] byteCode) : this(device, by...
method EffectBase (line 99) | protected EffectBase(Device device, byte[] byteCode, EffectFlags flags)
method Init (line 107) | private void Init() {
method SetDefaults (line 128) | public virtual void SetDefaults() {
method Apply (line 170) | public void Apply(ref Matrix world, ref Matrix view, ref Matrix projec...
method GetInputLayout (line 195) | public InputLayout GetInputLayout(EffectPass pass) {
method Dispose (line 210) | protected override void Dispose(bool disposing) {
FILE: SaintCoinach.Graphics.Viewer/Effects/EffectDirectionalLightVariable.cs
class EffectDirectionalLightVariable (line 12) | public class EffectDirectionalLightVariable {
method EffectDirectionalLightVariable (line 36) | public EffectDirectionalLightVariable(EffectVariable structureVar) {
method Set (line 45) | public void Set(DirectionalLight light) {
method Get (line 51) | public DirectionalLight Get() {
FILE: SaintCoinach.Graphics.Viewer/Effects/EffectTextureVariable.cs
class EffectTextureVariable (line 12) | public class EffectTextureVariable {
method EffectTextureVariable (line 30) | public EffectTextureVariable(Effect effect, string name) {
FILE: SaintCoinach.Graphics.Viewer/Effects/HairEffect.cs
class HairEffect (line 12) | public class HairEffect : SkinnedEffect {
method HairEffect (line 32) | public HairEffect(Device device, byte[] byteCode) : this(device, byteC...
method HairEffect (line 33) | public HairEffect(Device device, byte[] byteCode, EffectFlags flags)
method Init (line 40) | private void Init() {
FILE: SaintCoinach.Graphics.Viewer/Effects/IrisEffect.cs
class IrisEffect (line 12) | public class IrisEffect : SkinnedEffect {
method IrisEffect (line 32) | public IrisEffect(Device device, byte[] byteCode) : this(device, byteC...
method IrisEffect (line 33) | public IrisEffect(Device device, byte[] byteCode, EffectFlags flags)
method Init (line 40) | private void Init() {
FILE: SaintCoinach.Graphics.Viewer/Effects/SkinEffect.cs
class SkinEffect (line 12) | public class SkinEffect : SkinnedEffect {
method SkinEffect (line 36) | public SkinEffect(Device device, byte[] byteCode) : this(device, byteC...
method SkinEffect (line 37) | public SkinEffect(Device device, byte[] byteCode, EffectFlags flags)
method Init (line 44) | private void Init() {
FILE: SaintCoinach.Graphics.Viewer/Effects/SkinnedEffect.cs
class SkinnedEffect (line 12) | public abstract class SkinnedEffect : EffectBase {
method SkinnedEffect (line 33) | protected SkinnedEffect(Device device, byte[] byteCode) : this(device,...
method SkinnedEffect (line 34) | protected SkinnedEffect(Device device, byte[] byteCode, EffectFlags fl...
FILE: SaintCoinach.Graphics.Viewer/Engine.cs
class Engine (line 20) | public abstract class Engine : IDisposable {
method Engine (line 115) | protected Engine() {
method CreateDevice (line 122) | protected abstract Device CreateDevice(int width, int height);
method CreateRenderTarget (line 123) | protected abstract Texture2D CreateRenderTarget(int width, int height);
method Resize (line 124) | protected virtual void Resize(int newWidth, int newHeight) {
method SetUp (line 135) | protected void SetUp(int width, int height) {
method CreateView (line 160) | protected void CreateView(int width, int height) {
method Initialize (line 189) | protected virtual void Initialize() {
method Load (line 202) | protected void Load() {
method LoadContent (line 211) | protected virtual void LoadContent() { }
method Unload (line 213) | protected void Unload() {
method UnloadContent (line 228) | protected virtual void UnloadContent() { }
method EngineLoop (line 232) | protected void EngineLoop() {
method EngineLoop (line 244) | protected void EngineLoop(EngineTime time) {
method Present (line 254) | protected abstract void Present();
method Update (line 256) | protected virtual void Update(EngineTime time) {
method BeforeDraw (line 260) | protected virtual void BeforeDraw(EngineTime time) {
method Draw (line 267) | protected virtual void Draw(EngineTime time) {
method AfterDraw (line 274) | protected virtual void AfterDraw(EngineTime time) {
method Draw3D (line 278) | private void Draw3D(EngineTime time, ref Matrix world, ref Matrix view...
method Dispose (line 286) | public void Dispose() {
method Dispose (line 290) | protected virtual void Dispose(bool disposing) {
FILE: SaintCoinach.Graphics.Viewer/EngineTime.cs
type EngineTime (line 8) | public struct EngineTime {
method EngineTime (line 14) | public EngineTime(TimeSpan totalTime, TimeSpan elapsedTime) {
FILE: SaintCoinach.Graphics.Viewer/FormEngine.cs
class FormEngine (line 21) | public class FormEngine : Engine {
method FormEngine (line 54) | public FormEngine(string title) {
method Run (line 60) | public void Run() {
method Form_ClientSizeChanged (line 79) | void Form_ClientSizeChanged(object sender, EventArgs e) {
method CreateDevice (line 85) | protected override Device CreateDevice(int width, int height) {
method Resize (line 104) | protected override void Resize(int newWidth, int newHeight) {
method CreateRenderTarget (line 108) | protected override Texture2D CreateRenderTarget(int width, int height) {
method Draw (line 114) | protected override void Draw(EngineTime time) {
method Present (line 119) | protected override void Present() {
method Dispose (line 122) | protected override void Dispose(bool disposing) {
method ResizeToClient (line 150) | protected void ResizeToClient() {
method ResizeToScreenshot (line 153) | protected void ResizeToScreenshot() {
method TakeScreenshot (line 156) | protected void TakeScreenshot(EngineTime time) {
method Update (line 171) | protected override void Update(EngineTime time) {
FILE: SaintCoinach.Graphics.Viewer/FormInputService.cs
class FormInputService (line 13) | public class FormInputService : IInputService {
method FormInputService (line 23) | public FormInputService(Form form) {
method GetDownKeys (line 34) | public IEnumerable<Keys> GetDownKeys() {
method GetDownMouseButtons (line 40) | public IEnumerable<MouseButtons> GetDownMouseButtons() {
method Form_LostFocus (line 49) | void Form_LostFocus(object sender, EventArgs e) {
method Form_MouseUp (line 55) | void Form_MouseUp(object sender, MouseEventArgs e) {
method Form_MouseDown (line 60) | void Form_MouseDown(object sender, MouseEventArgs e) {
method Form_MouseMove (line 67) | void Form_MouseMove(object sender, MouseEventArgs e) {
method Form_KeyUp (line 70) | void Form_KeyUp(object sender, KeyEventArgs e) {
method Form_KeyDown (line 75) | void Form_KeyDown(object sender, KeyEventArgs e) {
FILE: SaintCoinach.Graphics.Viewer/IComponent.cs
type IComponent (line 8) | public interface IComponent {
FILE: SaintCoinach.Graphics.Viewer/IContentComponent.cs
type IContentComponent (line 8) | public interface IContentComponent {
method LoadContent (line 10) | void LoadContent();
method UnloadContent (line 11) | void UnloadContent();
FILE: SaintCoinach.Graphics.Viewer/IDrawable3DComponent.cs
type IDrawable3DComponent (line 11) | public interface IDrawable3DComponent : IComponent {
method Draw (line 16) | void Draw(EngineTime time, ref Matrix world, ref Matrix view, ref Matr...
FILE: SaintCoinach.Graphics.Viewer/IImageRendererSource.cs
type IImageRendererSource (line 9) | public interface IImageRendererSource {
method MoveNext (line 16) | bool MoveNext();
method Reset (line 17) | void Reset(Engine engine);
FILE: SaintCoinach.Graphics.Viewer/IInputService.cs
type IInputService (line 12) | public interface IInputService {
method GetDownKeys (line 14) | IEnumerable<Keys> GetDownKeys();
method GetDownMouseButtons (line 15) | IEnumerable<MouseButtons> GetDownMouseButtons();
FILE: SaintCoinach.Graphics.Viewer/IUpdateableComponent.cs
type IUpdateableComponent (line 8) | public interface IUpdateableComponent : IComponent {
method Update (line 10) | void Update(EngineTime engineTime);
FILE: SaintCoinach.Graphics.Viewer/ImageRenderer.cs
class ImageRenderer (line 12) | public class ImageRenderer : Engine {
class NullInputService (line 14) | class NullInputService : IInputService {
method GetDownKeys (line 23) | public IEnumerable<System.Windows.Forms.Keys> GetDownKeys() {
method GetDownMouseButtons (line 27) | public IEnumerable<System.Windows.Forms.MouseButtons> GetDownMouseBu...
method ImageRenderer (line 44) | public ImageRenderer(IImageRendererSource source, int renderWidth, int...
method ImageRenderer (line 45) | public ImageRenderer(IImageRendererSource source, int renderWidth, int...
method Run (line 55) | public void Run() {
method SetUpCamera (line 86) | protected virtual void SetUpCamera(Graphics.BoundingBox bbox, bool opp...
method CreateDevice (line 116) | protected override SharpDX.Direct3D11.Device CreateDevice(int width, i...
method CreateRenderTarget (line 120) | protected override SharpDX.Direct3D11.Texture2D CreateRenderTarget(int...
method Present (line 136) | protected override void Present() {
method Draw (line 144) | protected override void Draw(EngineTime time) {
FILE: SaintCoinach.Graphics.Viewer/Interop/FbxExport.cs
class FbxExport (line 16) | public static class FbxExport
class Interop (line 18) | static class Interop
method exportFbx (line 20) | [DllImport("fbxInterop.dll", CallingConvention = CallingConvention.C...
method ExportFbx (line 28) | [HandleProcessCorruptedStateExceptions]
method ExportMonsterMaterials (line 97) | public static void ExportMonsterMaterials(ARealmReversed realm, string...
FILE: SaintCoinach.Graphics.Viewer/Interop/HavokInterop.cs
class HavokInterop (line 11) | public static class HavokInterop {
method HavokInterop (line 23) | static HavokInterop() {
method InitializeSTA (line 26) | public static void InitializeSTA() {
method InitializeMTA (line 34) | public static void InitializeMTA() {
method Execute (line 46) | internal static void Execute(Action action) {
method Execute (line 49) | internal static T Execute<T>(Func<T> func) {
method HavokLoop (line 69) | static void HavokLoop() {
method initHkInterop (line 106) | [DllImport("hkAnimationInterop.dll", CallingConvention = CallingConven...
method quitHkInterop (line 108) | [DllImport("hkAnimationInterop.dll", CallingConvention = CallingConven...
FILE: SaintCoinach.Graphics.Viewer/Interop/InteropAnimation.cs
class InteropAnimation (line 13) | class InteropAnimation : IDisposable {
class Interop (line 14) | static class Interop {
method loadAnimation (line 15) | [DllImport("fbxInterop.dll", CallingConvention = CallingConvention.C...
method unloadAnimation (line 20) | [DllImport("fbxInterop.dll", CallingConvention = CallingConvention.C...
method InteropAnimation (line 26) | public InteropAnimation(PapFile pap)
method Dispose (line 36) | protected virtual void Dispose(bool disposing) {
method Dispose (line 51) | public void Dispose() {
FILE: SaintCoinach.Graphics.Viewer/Interop/InteropMesh.cs
class InteropMesh (line 13) | class InteropMesh : IDisposable
class Interop (line 15) | static class Interop
method loadMesh (line 17) | [DllImport("fbxInterop.dll", CallingConvention = CallingConvention.C...
method unloadMesh (line 23) | [DllImport("fbxInterop.dll", CallingConvention = CallingConvention.C...
method InteropMesh (line 40) | public InteropMesh(Mesh[] ma)
method InteropMesh (line 90) | public InteropMesh(Mesh m)
method GetInteropVector4 (line 117) | private InteropVector4 GetInteropVector4(Vector3 v3)
method GetInteropVector4 (line 128) | private InteropVector4 GetInteropVector4(Vector4 v4)
method GetInteropVector4 (line 140) | private InteropVector4 GetInteropVector4(Vector4? v4, InteropVector4 dv)
method GetInteropVector4 (line 147) | private InteropVector4 GetInteropVector4(Vector3? v3, InteropVector4 d...
method GetInteropVertex (line 153) | private InteropVertex GetInteropVertex(Vertex v)
method Dispose (line 183) | protected virtual void Dispose(bool disposing) {
method Dispose (line 199) | public void Dispose() {
FILE: SaintCoinach.Graphics.Viewer/Interop/InteropTransform.cs
type InteropTransform (line 8) | [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServi...
method ToTransformationMatrix (line 14) | public SharpDX.Matrix ToTransformationMatrix() {
FILE: SaintCoinach.Graphics.Viewer/Interop/InteropVector4.cs
type InteropVector4 (line 8) | [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServi...
FILE: SaintCoinach.Graphics.Viewer/Interop/InteropVertex.cs
type InteropVertex (line 9) | [System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServi...
FILE: SaintCoinach.Graphics.Viewer/Keyboard.cs
class Keyboard (line 12) | public class Keyboard : IUpdateableComponent {
method Keyboard (line 22) | public Keyboard(Engine engine) {
method IsKeyDown (line 28) | public bool IsKeyDown(Keys key) {
method IsKeyUp (line 31) | public bool IsKeyUp(Keys key) {
method WasKeyReleased (line 34) | public bool WasKeyReleased(Keys key) {
method WasKeyPressed (line 37) | public bool WasKeyPressed(Keys key) {
method Update (line 46) | public void Update(EngineTime time) {
FILE: SaintCoinach.Graphics.Viewer/MaterialFactory.cs
class MaterialFactory (line 8) | public class MaterialFactory : IDisposable {
method MaterialFactory (line 15) | public MaterialFactory(Engine engine) {
method Get (line 21) | public Content.MaterialBase Get(Material material) {
method Dispose (line 62) | public void Dispose() {
method UnloadAll (line 66) | public void UnloadAll() {
FILE: SaintCoinach.Graphics.Viewer/ModelFactory.cs
class ModelFactory (line 8) | public class ModelFactory : IDisposable {
method ModelFactory (line 15) | public ModelFactory(Engine engine) {
method Get (line 21) | public Content.PrimitiveModel Get(ModelDefinition definition, ModelQua...
method Dispose (line 39) | public void Dispose() {
method UnloadAll (line 43) | public void UnloadAll() {
FILE: SaintCoinach.Graphics.Viewer/Mouse.cs
class Mouse (line 11) | public class Mouse : IUpdateableComponent {
method GetState (line 19) | public MouseState GetState() {
method Mouse (line 25) | public Mouse(Engine engine) {
method Update (line 38) | public void Update(EngineTime engineTime) {
FILE: SaintCoinach.Graphics.Viewer/MouseState.cs
type MouseState (line 10) | public struct MouseState {
FILE: SaintCoinach.Graphics.Viewer/ParametersExtensions.cs
class ParametersExtensions (line 8) | static class ParametersExtensions {
method GetValueOrDefault (line 9) | public static T GetValueOrDefault<T>(this Data.ParametersBase self, st...
method GetValueOrDefault (line 12) | public static T GetValueOrDefault<T>(this Data.ParametersBase self, st...
FILE: SaintCoinach.Graphics.Viewer/RendererSources/BaseImageRendererSource.cs
class BaseImageRendererSource (line 8) | public abstract class BaseImageRendererSource : IImageRendererSource {
method MoveNext (line 25) | public abstract bool MoveNext();
method Reset (line 27) | public virtual void Reset(Engine engine) {
FILE: SaintCoinach.Graphics.Viewer/RendererSources/EquipmentImageRendererSource.cs
class EquipmentImageRendererSource (line 8) | public class EquipmentImageRendererSource : BaseImageRendererSource {
method EquipmentImageRendererSource (line 18) | public EquipmentImageRendererSource(IEnumerable<Xiv.Item> items) : thi...
method EquipmentImageRendererSource (line 19) | public EquipmentImageRendererSource(IEnumerable<Xiv.Item> items, IEnum...
method EquipmentImageRendererSource (line 20) | public EquipmentImageRendererSource(IEnumerable<Xiv.Items.Equipment> e...
method EquipmentImageRendererSource (line 21) | public EquipmentImageRendererSource(IEnumerable<Xiv.Items.Equipment> e...
method MoveNext (line 31) | public override bool MoveNext() {
method MoveNextStain (line 65) | private bool MoveNextStain() {
method GetTargetFile (line 85) | protected System.IO.FileInfo GetTargetFile(Xiv.Items.Equipment item) {
method GetTargetFile (line 88) | protected virtual System.IO.FileInfo GetTargetFile(Xiv.Items.Equipment...
method GetName (line 96) | protected string GetName(Xiv.Items.Equipment item) {
method GetName (line 99) | protected virtual string GetName(Xiv.Items.Equipment item, Xiv.Stain s...
method Reset (line 107) | public override void Reset(Engine engine) {
FILE: SaintCoinach.Graphics.Viewer/RendererSources/MonsterImageRendererSource.cs
class MonsterImageRendererSource (line 8) | public class MonsterImageRendererSource : BaseImageRendererSource {
method MonsterImageRendererSource (line 11) | public MonsterImageRendererSource(IEnumerable<Xiv.ModelChara> monsters) {
method MoveNext (line 15) | public override bool MoveNext() {
method Reset (line 39) | public override void Reset(Engine engine) {
FILE: SaintCoinach.Graphics.Viewer/Skeleton.cs
class Skeleton (line 12) | public class Skeleton : IDisposable {
class Interop (line 14) | static class Interop {
method loadSkeleton (line 15) | [DllImport("hkAnimationInterop.dll", CallingConvention = CallingConv...
method unloadSkeleton (line 18) | [DllImport("hkAnimationInterop.dll", CallingConvention = CallingConv...
method getNumBones (line 21) | [DllImport("hkAnimationInterop.dll", CallingConvention = CallingConv...
method getBoneNames (line 24) | [DllImport("hkAnimationInterop.dll", CallingConvention = CallingConv...
method getReferencePose (line 27) | [DllImport("hkAnimationInterop.dll", CallingConvention = CallingConv...
method getParentIndices (line 30) | [DllImport("hkAnimationInterop.dll", CallingConvention = CallingConv...
method Skeleton (line 48) | public Skeleton(SklbFile file) {
method Dispose (line 79) | protected virtual void Dispose(bool disposing) {
method Dispose (line 95) | public void Dispose() {
FILE: SaintCoinach.Graphics.Viewer/TextureFactory.cs
class TextureFactory (line 12) | public class TextureFactory : IDisposable {
method TextureFactory (line 20) | public TextureFactory(Engine engine) {
method GetResource (line 26) | public ShaderResourceView GetResource(Imaging.ImageFile source) {
method GetTexture (line 37) | public unsafe Texture2D GetTexture(Imaging.ImageFile source) {
method Dispose (line 89) | public void Dispose() {
method UnloadAll (line 93) | public void UnloadAll() {
FILE: SaintCoinach.Graphics.Viewer/VectorConverter.cs
class VectorConverter (line 8) | public static class VectorConverter {
method ToDx (line 9) | public static SharpDX.Vector3 ToDx(this Graphics.Vector3 self) {
method ToDx (line 16) | public static SharpDX.Vector3 ToDx(this Graphics.Vector3? self, SharpD...
method ToDx (line 21) | public static SharpDX.Vector4 ToDx(this Graphics.Vector4 self) {
method ToDx3 (line 29) | public static SharpDX.Vector3 ToDx3(this Graphics.Vector4 self) {
method ToDx (line 36) | public static SharpDX.Vector4 ToDx(this Graphics.Vector4? self, SharpD...
FILE: SaintCoinach.Graphics.Viewer/Vertex3D.cs
type Vertex3D (line 13) | [StructLayout(LayoutKind.Sequential)]
method Vertex3D (line 39) | public Vertex3D(Vertex src) {
FILE: SaintCoinach/ARealmReversed.cs
class ARealmReversed (line 23) | public class ARealmReversed {
method Setup (line 141) | private void Setup(ZipFile zip) {
method ARealmReversed (line 163) | public ARealmReversed(string gamePath, Language language) : this(new D...
method ARealmReversed (line 171) | public ARealmReversed(string gamePath, string storePath, Language lang...
method ARealmReversed (line 180) | public ARealmReversed(string gamePath, string storePath, Language lang...
method ARealmReversed (line 189) | public ARealmReversed(DirectoryInfo gameDirectory, FileInfo storeFile,...
method ReadDefinition (line 217) | private RelationDefinition ReadDefinition() {
method ReadDefinition (line 246) | private static RelationDefinition ReadDefinition(ZipFile zip, string v...
method StorePacks (line 264) | private void StorePacks(ZipFile zip) {
method UpdateVersion (line 277) | private void UpdateVersion(ZipFile zip) {
method StoreDefinitionInZip (line 287) | private static void StoreDefinitionInZip(ZipFile zip, RelationDefiniti...
method StoreDefinitionOnFilesystem (line 308) | private static void StoreDefinitionOnFilesystem(RelationDefinition def...
method SheetToJson (line 318) | private static string SheetToJson(SheetDefinition sheetDef) {
method StoreReport (line 328) | private static void StoreReport(ZipFile zip, UpdateReport report) {
method Update (line 350) | public UpdateReport Update(bool detectDataChanges, IProgress<UpdatePro...
method ExtractPacks (line 427) | private static string ExtractPacks(ZipFile zip, string previousVersion) {
FILE: SaintCoinach/ByteArrayExtensions.cs
class ByteArrayExtensions (line 10) | public static class ByteArrayExtensions {
method ToStructure (line 11) | public static T ToStructure<T>(this byte[] bytes, int offset) where T ...
method ToStructure (line 14) | public static T ToStructure<T>(this byte[] bytes, ref int offset) wher...
method ToStructures (line 27) | public static T[] ToStructures<T>(this byte[] bytes, int count, int of...
method ToStructures (line 30) | public static T[] ToStructures<T>(this byte[] bytes, int count, ref in...
method ReadString (line 37) | public static string ReadString(this byte[] buffer, int offset) {
method ReadString (line 40) | public static string ReadString(this byte[] buffer, ref int offset) {
FILE: SaintCoinach/EorzeaDateTime.Formatter.cs
class EorzeaDateTime (line 8) | public partial class EorzeaDateTime : IFormattable {
method ToString (line 20) | public override string ToString() {
method ToString (line 54) | public string ToString(string format, IFormatProvider formatProvider) {
class Formatter (line 63) | private static class Formatter {
method Format (line 136) | public static string Format(EorzeaDateTime dateTime, string format, ...
method TryFinishSequence (line 198) | private static void TryFinishSequence(EorzeaDateTime dateTime, Strin...
class Specifier (line 209) | private class Specifier {
FILE: SaintCoinach/EorzeaDateTime.cs
class EorzeaDateTime (line 15) | public partial class EorzeaDateTime {
method EorzeaDateTime (line 237) | public EorzeaDateTime(EorzeaDateTime source) {
method EorzeaDateTime (line 248) | public EorzeaDateTime() : this(DateTime.UtcNow) { }
method EorzeaDateTime (line 254) | public EorzeaDateTime(int unixTime) : this((long)unixTime) { }
method EorzeaDateTime (line 260) | public EorzeaDateTime(long unixTime) {
method EorzeaDateTime (line 269) | public EorzeaDateTime(DateTime time) {
method GetTimeSpan (line 279) | public TimeSpan GetTimeSpan() {
method GetUnixTime (line 287) | public long GetUnixTime() {
method SetUnixTime (line 303) | public EorzeaDateTime SetUnixTime(long time) {
method SetEorzeaTime (line 315) | private void SetEorzeaTime(double eorzeaSeconds) {
method GetRealTime (line 333) | public DateTime GetRealTime() {
method SetRealTime (line 342) | public EorzeaDateTime SetRealTime(DateTime time) {
method Clone (line 426) | public EorzeaDateTime Clone() {
FILE: SaintCoinach/Ex/Column.cs
class Column (line 5) | public class Column {
method Column (line 59) | public Column(Header header, int index, byte[] buffer, int offset) {
method Read (line 81) | public virtual object Read(byte[] buffer, IDataRow row) {
method Read (line 85) | public virtual object Read(byte[] buffer, IDataRow row, int offset) {
method ReadRaw (line 95) | public object ReadRaw(byte[] buffer, IDataRow row) {
method ReadRaw (line 99) | public object ReadRaw(byte[] buffer, IDataRow row, int offset) {
FILE: SaintCoinach/Ex/DataReader.cs
class DataReader (line 11) | public abstract class DataReader {
method DataReader (line 54) | static DataReader() {
method GetReader (line 100) | public static DataReader GetReader(int type) {
method Read (line 114) | public abstract object Read(byte[] buffer, Column col, IDataRow row);
method Read (line 116) | public abstract object Read(byte[] buffer, int offset);
method GetFieldOffset (line 124) | protected static int GetFieldOffset(Column col, IDataRow row) {
FILE: SaintCoinach/Ex/DataReaders/DelegateDataReader.cs
class DelegateDataReader (line 7) | public class DelegateDataReader : DataReader {
method DelegateDataReader (line 66) | internal DelegateDataReader(string name, int length, Type type, ReadDe...
method Read (line 82) | public override object Read(byte[] buffer, Column col, IDataRow row) {
method Read (line 87) | public override object Read(byte[] buffer, int offset) {
FILE: SaintCoinach/Ex/DataReaders/PackedBooleanDataReader.cs
class PackedBooleanDataReader (line 7) | public class PackedBooleanDataReader : DataReader {
method PackedBooleanDataReader (line 47) | public PackedBooleanDataReader(byte mask) {
method Read (line 63) | public override object Read(byte[] buffer, Column col, IDataRow row) {
method Read (line 68) | public override object Read(byte[] buffer, int offset) {
FILE: SaintCoinach/Ex/DataReaders/StringDataReader.cs
class StringDataReader (line 7) | public class StringDataReader : DataReader {
method Read (line 40) | public override object Read(byte[] buffer, Column col, IDataRow row) {
method Read (line 61) | public override object Read(byte[] buffer, int offset) {
FILE: SaintCoinach/Ex/DataRowBase.cs
class DataRowBase (line 6) | public abstract class DataRowBase : IDataRow {
method DataRowBase (line 15) | protected DataRowBase(IDataSheet sheet, int key, int offset) {
method GetRaw (line 50) | public virtual object GetRaw(int columnIndex) {
method ColumnValues (line 55) | public IEnumerable<object> ColumnValues() {
FILE: SaintCoinach/Ex/DataSheet.Enumerator.cs
class DataSheet (line 8) | partial class DataSheet<T> {
class Enumerator (line 9) | private class Enumerator : IEnumerator<T> {
method Enumerator (line 17) | public Enumerator(DataSheet<T> sheet) {
method Dispose (line 35) | public void Dispose() {
method MoveNext (line 50) | public bool MoveNext() {
method Reset (line 60) | public void Reset() {
FILE: SaintCoinach/Ex/DataSheet.cs
class DataSheet (line 10) | public partial class DataSheet<T> : IDataSheet<T> where T : IDataRow {
method DataSheet (line 22) | public DataSheet(ExCollection collection, Header header, Language lang...
method GetEnumerator (line 50) | public IEnumerator<T> GetEnumerator() {
method GetEnumerator (line 58) | IEnumerator IEnumerable.GetEnumerator() {
method GetBuffer (line 66) | public byte[] GetBuffer() {
method CreatePartialSheet (line 74) | protected virtual ISheet<T> CreatePartialSheet(Range range, File file) {
method GetPartialFile (line 82) | protected File GetPartialFile(Range range) {
method GetPartialSheet (line 91) | protected ISheet<T> GetPartialSheet(int row) {
method CreateAllPartialSheets (line 108) | private void CreateAllPartialSheets() {
method CreatePartialSheet (line 119) | private ISheet<T> CreatePartialSheet(Range range) {
method ContainsRow (line 141) | public bool ContainsRow(int row) {
FILE: SaintCoinach/Ex/ExCollection.cs
class ExCollection (line 13) | public class ExCollection {
method ExCollection (line 38) | public ExCollection(PackCollection packCollection) {
method BuildIndex (line 50) | private void BuildIndex() {
method SheetExists (line 84) | public bool SheetExists(int id) {
method SheetExists (line 88) | public bool SheetExists(string name) {
method GetSheet (line 93) | public ISheet<T> GetSheet<T>(int id) where T : IRow {
method GetSheet (line 97) | public ISheet GetSheet(int id) {
method GetSheet (line 102) | public ISheet<T> GetSheet<T>(string name) where T : IRow {
method GetSheet (line 106) | public ISheet GetSheet(string name) {
method FixName (line 125) | public string FixName(string name) {
method CreateHeader (line 135) | protected virtual Header CreateHeader(string name, File file) {
method CreateSheet (line 139) | protected virtual ISheet CreateSheet(Header header) {
method CreateSheet (line 145) | private ISheet CreateSheet<T>(Header header) where T : IDataRow {
FILE: SaintCoinach/Ex/Header.cs
class Header (line 9) | public class Header {
method Header (line 63) | public Header(ExCollection collection, string name, File file) {
method GetColumn (line 75) | public Column GetColumn(int index) {
method CreateColumn (line 81) | protected virtual Column CreateColumn(int index, byte[] data, int offs...
method Build (line 89) | private void Build() {
method ReadColumns (line 115) | private void ReadColumns(byte[] buffer, ref int position) {
method ReadPartialFiles (line 127) | private void ReadPartialFiles(byte[] buffer, ref int position) {
method ReadSuffixes (line 143) | private void ReadSuffixes(byte[] buffer, ref int position) {
FILE: SaintCoinach/Ex/IDataRow.cs
type IDataRow (line 2) | public interface IDataRow : IRow {
FILE: SaintCoinach/Ex/IDataSheet.Generic.cs
type IDataSheet (line 2) | public interface IDataSheet<out T> : ISheet<T>, IDataSheet
FILE: SaintCoinach/Ex/IDataSheet.cs
type IDataSheet (line 2) | public interface IDataSheet : ISheet {
method GetBuffer (line 9) | byte[] GetBuffer();
FILE: SaintCoinach/Ex/IMultiRow.cs
type IMultiRow (line 2) | public interface IMultiRow : IRow {
method GetRaw (line 8) | object GetRaw(int columnIndex, Language language);
FILE: SaintCoinach/Ex/IMultiSheet.Generic.cs
type IMultiSheet (line 4) | public interface IMultiSheet<out TMulti, out TData> : ISheet<TMulti>, IM...
method GetLocalisedSheet (line 14) | new ISheet<TData> GetLocalisedSheet(Language language);
FILE: SaintCoinach/Ex/IMultiSheet.cs
type IMultiSheet (line 4) | public interface IMultiSheet : ISheet {
method GetLocalisedSheet (line 12) | ISheet GetLocalisedSheet(Language language);
FILE: SaintCoinach/Ex/IRow.cs
type IRow (line 4) | public interface IRow {
method GetRaw (line 11) | object GetRaw(int columnIndex);
method ColumnValues (line 15) | IEnumerable<object> ColumnValues();
FILE: SaintCoinach/Ex/ISheet.Generic.cs
type ISheet (line 4) | public interface ISheet<out T> : IEnumerable<T>, ISheet where T : IRow {
FILE: SaintCoinach/Ex/ISheet.cs
type ISheet (line 5) | public interface ISheet : IEnumerable {
method ContainsRow (line 18) | bool ContainsRow(int row);
FILE: SaintCoinach/Ex/Language.cs
type Language (line 8) | public enum Language {
class LanguageExtensions (line 22) | public static class LanguageExtensions {
method LanguageExtensions (line 48) | static LanguageExtensions() {
method GetCode (line 61) | public static string GetCode(this Language self) {
method GetSuffix (line 73) | public static string GetSuffix(this Language self) {
method GetFromCode (line 80) | public static Language GetFromCode(string code) {
FILE: SaintCoinach/Ex/MultiRow.cs
class MultiRow (line 4) | public class MultiRow : IMultiRow {
method MultiRow (line 9) | public MultiRow(IMultiSheet sheet, int key) {
method GetRaw (line 30) | object IRow.GetRaw(int columnIndex) {
method GetRaw (line 34) | object IMultiRow.GetRaw(int columnIndex, Language language) {
method ColumnValues (line 38) | public IEnumerable<object> ColumnValues() {
FILE: SaintCoinach/Ex/MultiSheet.Enumerator.cs
class MultiSheet (line 8) | partial class MultiSheet<TMulti, TData> {
class Enumerator (line 9) | private class Enumerator : IEnumerator<TMulti> {
method Enumerator (line 16) | public Enumerator(MultiSheet<TMulti, TData> sheet) {
method Dispose (line 32) | public void Dispose() {
method MoveNext (line 44) | public bool MoveNext() {
method Reset (line 48) | public void Reset() {
FILE: SaintCoinach/Ex/MultiSheet.cs
class MultiSheet (line 8) | public partial class MultiSheet<TMulti, TData> : IMultiSheet<TMulti, TData>
method MultiSheet (line 22) | public MultiSheet(ExCollection collection, Header header) {
method GetLocalisedSheet (line 41) | public ISheet<TData> GetLocalisedSheet(Language language) {
method GetEnumerator (line 54) | public IEnumerator<TMulti> GetEnumerator() {
method GetEnumerator (line 62) | IEnumerator IEnumerable.GetEnumerator() {
method CreateMultiRow (line 70) | protected virtual TMulti CreateMultiRow(int row) {
method CreateLocalisedSheet (line 74) | protected virtual ISheet<TData> CreateLocalisedSheet(Language language) {
method ContainsRow (line 94) | public bool ContainsRow(int row) {
method GetLocalisedSheet (line 108) | ISheet IMultiSheet.GetLocalisedSheet(Language language) {
FILE: SaintCoinach/Ex/PartialDataSheet.Enumerator.cs
class PartialDataSheet (line 8) | partial class PartialDataSheet<T> {
class Enumerator (line 9) | private class Enumerator : IEnumerator<T> {
method Enumerator (line 16) | public Enumerator(PartialDataSheet<T> sheet) {
method Dispose (line 35) | public void Dispose() {
method MoveNext (line 47) | public bool MoveNext() {
method Reset (line 51) | public void Reset() {
FILE: SaintCoinach/Ex/PartialDataSheet.cs
class PartialDataSheet (line 10) | public partial class PartialDataSheet<T> : IDataSheet<T> where T : IData...
method PartialDataSheet (line 29) | public PartialDataSheet(IDataSheet<T> sourceSheet, Range range, File f...
method GetEnumerator (line 44) | public IEnumerator<T> GetEnumerator() {
method GetEnumerator (line 52) | IEnumerator IEnumerable.GetEnumerator() {
method GetBuffer (line 60) | public byte[] GetBuffer() {
method Build (line 68) | private void Build() {
method CreateRow (line 97) | protected virtual T CreateRow(int key, int offset) {
method GetAllRows (line 105) | public IEnumerable<T> GetAllRows() {
method ContainsRow (line 130) | public bool ContainsRow(int row) {
FILE: SaintCoinach/Ex/Relational/Definition/GroupDataDefinition.cs
class GroupDataDefinition (line 7) | public class GroupDataDefinition : IDataDefinition {
method Clone (line 29) | public IDataDefinition Clone() {
method Convert (line 40) | public object Convert(IDataRow row, object value, int index) {
method GetName (line 60) | public string GetName(int index) {
method GetValueTypeName (line 78) | public string GetValueTypeName(int index) {
method GetValueType (line 96) | public Type GetValueType(int index) {
method ToJson (line 118) | public JObject ToJson() {
method FromJson (line 125) | public static GroupDataDefinition FromJson(JToken obj) {
method ResolveReferences (line 131) | public void ResolveReferences(SheetDefinition sheetDef) {
FILE: SaintCoinach/Ex/Relational/Definition/IDataDefinition.cs
type IDataDefinition (line 5) | public interface IDataDefinition {
method Convert (line 15) | object Convert(IDataRow row, object value, int index);
method GetName (line 18) | string GetName(int index);
method GetValueTypeName (line 21) | string GetValueTypeName(int index);
method GetValueType (line 24) | Type GetValueType(int index);
method Clone (line 26) | IDataDefinition Clone();
method ToJson (line 28) | JObject ToJson();
method ResolveReferences (line 30) | void ResolveReferences(SheetDefinition sheetDef);
class DataDefinitionSerializer (line 33) | public static class DataDefinitionSerializer {
method FromJson (line 34) | public static IDataDefinition FromJson(JToken obj) {
FILE: SaintCoinach/Ex/Relational/Definition/PositionedDataDefinition.cs
class PositionedDataDefinition (line 5) | public class PositionedDataDefinition {
method Clone (line 16) | public PositionedDataDefinition Clone() {
method Convert (line 28) | public object Convert(IDataRow row, object value, int index) {
method GetName (line 36) | public string GetName(int index) {
method GetValueTypeName (line 44) | public string GetValueTypeName(int index) {
method GetValueType (line 52) | public Type GetValueType(int index) {
method ToJson (line 64) | public JObject ToJson() {
method FromJson (line 71) | public static PositionedDataDefinition FromJson(JToken obj) {
method ResolveReferences (line 78) | public void ResolveReferences(SheetDefinition sheetDef) {
FILE: SaintCoinach/Ex/Relational/Definition/RelationDefinition.cs
class RelationDefinition (line 10) | public class RelationDefinition {
method Compile (line 33) | public void Compile() {
method TryGetSheet (line 46) | public bool TryGetSheet(string name, out SheetDefinition def) {
method GetOrCreateSheet (line 53) | public SheetDefinition GetOrCreateSheet(string name) {
method ToJson (line 66) | public JObject ToJson() {
method FromJson (line 73) | public static RelationDefinition FromJson(JToken obj) {
method FromJson (line 80) | public static RelationDefinition FromJson(string json) {
FILE: SaintCoinach/Ex/Relational/Definition/RepeatDataDefinition.cs
class RepeatDataDefinition (line 6) | public class RepeatDataDefinition : IDataDefinition {
method RepeatDataDefinition (line 17) | public RepeatDataDefinition() {
method Clone (line 25) | public IDataDefinition Clone() {
method Convert (line 35) | public object Convert(IDataRow row, object value, int index) {
method GetName (line 44) | public string GetName(int index) {
method GetValueTypeName (line 55) | public string GetValueTypeName(int index) {
method GetValueType (line 64) | public Type GetValueType(int index) {
method ToJson (line 77) | public JObject ToJson() {
method FromJson (line 85) | public static RepeatDataDefinition FromJson(JToken obj) {
method ResolveReferences (line 92) | public void ResolveReferences(SheetDefinition sheetDef) {
FILE: SaintCoinach/Ex/Relational/Definition/SheetDefinition.cs
class SheetDefinition (line 7) | public class SheetDefinition {
method Compile (line 36) | public void Compile() {
method TryGetDefinition (line 71) | public bool TryGetDefinition(int index, out PositionedDataDefinition d...
method GetDefaultColumnIndex (line 81) | public int? GetDefaultColumnIndex() {
method FindColumn (line 87) | public int? FindColumn(string columnName) {
method GetAllColumnNames (line 105) | public IEnumerable<string> GetAllColumnNames() {
method GetColumnName (line 118) | public string GetColumnName(int index) {
method GetValueTypeName (line 125) | public string GetValueTypeName(int index) {
method GetValueType (line 132) | public Type GetValueType(int index) {
method Convert (line 139) | public object Convert(IDataRow row, object value, int index) {
method ToJson (line 147) | public JObject ToJson() {
method FromJson (line 157) | public static SheetDefinition FromJson(JToken obj) {
method ToString (line 173) | public override string ToString() {
FILE: SaintCoinach/Ex/Relational/Definition/SingleDataDefinition.cs
class SingleDataDefinition (line 6) | public class SingleDataDefinition : IDataDefinition {
method Clone (line 16) | public IDataDefinition Clone() {
method Convert (line 25) | public object Convert(IDataRow row, object value, int index) {
method GetName (line 32) | public string GetName(int index) {
method GetValueTypeName (line 39) | public string GetValueTypeName(int index) {
method GetValueType (line 46) | public Type GetValueType(int index) {
method ToJson (line 57) | public JObject ToJson() {
method FromJson (line 66) | public static SingleDataDefinition FromJson(JToken obj) {
method ResolveReferences (line 95) | public void ResolveReferences(SheetDefinition sheetDef) {
FILE: SaintCoinach/Ex/Relational/Definition/ViewDefinition.cs
class ViewDefinition (line 11) | public class ViewDefinition {
method FromJson (line 15) | public static ViewDefinition FromJson(JToken obj) {
class ViewColumnDefinition (line 23) | public class ViewColumnDefinition {
method FromJson (line 27) | public static ViewColumnDefinition FromJson(JObject obj) {
FILE: SaintCoinach/Ex/Relational/IRelationalDataRow.cs
type IRelationalDataRow (line 2) | public interface IRelationalDataRow : IRelationalRow, IDataRow {
FILE: SaintCoinach/Ex/Relational/IRelationalDataSheet.Generic.cs
type IRelationalDataSheet (line 2) | public interface IRelationalDataSheet<out T> : IRelationalDataSheet, IDa...
FILE: SaintCoinach/Ex/Relational/IRelationalDataSheet.cs
type IRelationalDataSheet (line 2) | public interface IRelationalDataSheet : IRelationalSheet, IDataSheet { }
FILE: SaintCoinach/Ex/Relational/IRelationalMultiRow.cs
type IRelationalMultiRow (line 2) | public interface IRelationalMultiRow : IRelationalRow, IMultiRow {
method GetRaw (line 7) | object GetRaw(string columnName, Language language);
FILE: SaintCoinach/Ex/Relational/IRelationalMultiSheet.Generic.cs
type IRelationalMultiSheet (line 4) | public interface IRelationalMultiSheet<out TMulti, out TData> : IMultiSh...
method GetLocalisedSheet (line 15) | new IRelationalSheet<TData> GetLocalisedSheet(Language language);
FILE: SaintCoinach/Ex/Relational/IRelationalMultiSheet.cs
type IRelationalMultiSheet (line 4) | public interface IRelationalMultiSheet : IRelationalSheet, IMultiSheet {
method GetLocalisedSheet (line 12) | new IRelationalSheet GetLocalisedSheet(Language language);
FILE: SaintCoinach/Ex/Relational/IRelationalRow.cs
type IRelationalRow (line 2) | public interface IRelationalRow : IRow {
method GetRaw (line 9) | object GetRaw(string columnName);
FILE: SaintCoinach/Ex/Relational/IRelationalSheet.Generic.cs
type IRelationalSheet (line 2) | public interface IRelationalSheet<out T> : ISheet<T>, IRelationalSheet w...
FILE: SaintCoinach/Ex/Relational/IRelationalSheet.cs
type IRelationalSheet (line 4) | public interface IRelationalSheet : ISheet {
method IndexedLookup (line 14) | IRelationalRow IndexedLookup(string index, int key);
FILE: SaintCoinach/Ex/Relational/IValueConverter.cs
type IValueConverter (line 6) | public interface IValueConverter {
method Convert (line 14) | object Convert(IDataRow row, object rawValue);
method ToJson (line 16) | JObject ToJson();
method ResolveReferences (line 18) | void ResolveReferences(SheetDefinition sheetDef);
FILE: SaintCoinach/Ex/Relational/RelationalColumn.cs
class RelationalColumn (line 4) | public class RelationalColumn : Column {
method RelationalColumn (line 49) | public RelationalColumn(RelationalHeader header, int index, byte[] buf...
method Read (line 58) | public override object Read(byte[] buffer, IDataRow row) {
method Read (line 65) | public override object Read(byte[] buffer, IDataRow row, int offset) {
method ToString (line 74) | public override string ToString() {
FILE: SaintCoinach/Ex/Relational/RelationalDataIndex.cs
class RelationalDataIndex (line 8) | public class RelationalDataIndex<T> where T : IDataRow {
method RelationalDataIndex (line 23) | public RelationalDataIndex (IDataSheet<T> sourceSheet, Column indexCol...
method BuildIndex (line 30) | private void BuildIndex() {
FILE: SaintCoinach/Ex/Relational/RelationalDataSheet.cs
class RelationalDataSheet (line 8) | public class RelationalDataSheet<T> : DataSheet<T>, IRelationalDataSheet...
method RelationalDataSheet (line 18) | public RelationalDataSheet(RelationalExCollection collection, Relation...
method CreatePartialSheet (line 28) | protected override ISheet<T> CreatePartialSheet(Range range, File file) {
method IndexedLookup (line 40) | public IRelationalRow IndexedLookup(string indexName, int key) {
FILE: SaintCoinach/Ex/Relational/RelationalExCollection.cs
class RelationalExCollection (line 7) | public class RelationalExCollection : ExCollection {
method RelationalExCollection (line 24) | public RelationalExCollection(PackCollection packCollection) : base(pa...
method CreateHeader (line 32) | protected override Header CreateHeader(string name, File file) {
method CreateSheet (line 36) | protected override ISheet CreateSheet(Header header) {
method CreateSheet (line 43) | private ISheet CreateSheet<T>(RelationalHeader header) where T : IRela...
method GetSheet (line 53) | public new IRelationalSheet<T> GetSheet<T>(int id) where T : IRelation...
method GetSheet (line 57) | public new IRelationalSheet GetSheet(int id) {
method GetSheet (line 61) | public new IRelationalSheet<T> GetSheet<T>(string name) where T : IRel...
method GetSheet (line 65) | public new IRelationalSheet GetSheet(string name) {
method FindReference (line 74) | public IRelationalRow FindReference(int key) {
FILE: SaintCoinach/Ex/Relational/RelationalHeader.cs
class RelationalHeader (line 8) | public class RelationalHeader : Header {
method RelationalHeader (line 47) | public RelationalHeader(RelationalExCollection collection, string name...
method GetColumn (line 56) | public new RelationalColumn GetColumn(int index) {
method GetOrCreateSheetDefinition (line 60) | public SheetDefinition GetOrCreateSheetDefinition() {
method CreateColumn (line 66) | protected override Column CreateColumn(int index, byte[] data, int off...
method FindColumn (line 74) | public RelationalColumn FindColumn(string name) {
FILE: SaintCoinach/Ex/Relational/RelationalMultiRow.cs
class RelationalMultiRow (line 2) | public class RelationalMultiRow : MultiRow, IRelationalMultiRow {
method RelationalMultiRow (line 7) | public RelationalMultiRow(IMultiSheet sheet, int key) : base(sheet, ke...
method ToString (line 23) | public override string ToString() {
method GetRaw (line 38) | object IRelationalRow.GetRaw(string columnName) {
method GetRaw (line 42) | object IRelationalMultiRow.GetRaw(string columnName, Language language) {
FILE: SaintCoinach/Ex/Relational/RelationalMultiSheet.cs
class RelationalMultiSheet (line 6) | public class RelationalMultiSheet<TMulti, TData> : MultiSheet<TMulti, TD...
method RelationalMultiSheet (line 11) | public RelationalMultiSheet(RelationalExCollection collection, Relatio...
method GetLocalisedSheet (line 22) | public new IRelationalSheet<TData> GetLocalisedSheet(Language language) {
method CreateLocalisedSheet (line 30) | protected override ISheet<TData> CreateLocalisedSheet(Language languag...
method IndexedLookup (line 42) | IRelationalRow IRelationalSheet.IndexedLookup(string index, int key) {...
method GetLocalisedSheet (line 50) | IRelationalSheet IRelationalMultiSheet.GetLocalisedSheet(Language lang...
FILE: SaintCoinach/Ex/Relational/RelationalPartialDataSheet.cs
class RelationalPartialDataSheet (line 8) | public class RelationalPartialDataSheet<T> : PartialDataSheet<T>, IRelat...
method RelationalPartialDataSheet (line 18) | public RelationalPartialDataSheet(IRelationalDataSheet<T> sourceSheet,...
method IndexedLookup (line 32) | public IRelationalRow IndexedLookup(string index, int key) {
FILE: SaintCoinach/Ex/Relational/Update/ChangeType.cs
type ChangeType (line 4) | [Flags]
FILE: SaintCoinach/Ex/Relational/Update/Changes/DefinitionMoved.cs
class DefinitionMoved (line 4) | [Serializable]
method DefinitionMoved (line 16) | public DefinitionMoved(string sheetName, int prevIndex, int newIndex, ...
method ToString (line 28) | public override string ToString() {
FILE: SaintCoinach/Ex/Relational/Update/Changes/DefinitionRemoved.cs
class DefinitionRemoved (line 4) | [Serializable]
method DefinitionRemoved (line 22) | public DefinitionRemoved(string sheetName, int prevIndex) {
method DefinitionRemoved (line 28) | public DefinitionRemoved(string sheetName, int prevIndex, int newIndex...
method ToString (line 40) | public override string ToString() {
FILE: SaintCoinach/Ex/Relational/Update/Changes/FieldChanged.cs
class FieldChanged (line 4) | [Serializable]
method FieldChanged (line 18) | public FieldChanged(string sheetName,
method ToString (line 45) | public override string ToString() {
FILE: SaintCoinach/Ex/Relational/Update/Changes/RowAdded.cs
class RowAdded (line 4) | [Serializable]
method RowAdded (line 14) | public RowAdded(string sheetName, int row) {
method ToString (line 24) | public override string ToString() {
FILE: SaintCoinach/Ex/Relational/Update/Changes/RowRemoved.cs
class RowRemoved (line 4) | [Serializable]
method RowRemoved (line 14) | public RowRemoved(string sheetName, int row) {
method ToString (line 24) | public override string ToString() {
FILE: SaintCoinach/Ex/Relational/Update/Changes/SheetLanguageAdded.cs
class SheetLanguageAdded (line 4) | [Serializable]
method SheetLanguageAdded (line 14) | public SheetLanguageAdded(string name, Language language) {
method ToString (line 24) | public override string ToString() {
FILE: SaintCoinach/Ex/Relational/Update/Changes/SheetLanguageRemoved.cs
class SheetLanguageRemoved (line 4) | [Serializable]
method SheetLanguageRemoved (line 14) | public SheetLanguageRemoved(string name, Language language) {
method ToString (line 24) | public override string ToString() {
FILE: SaintCoinach/Ex/Relational/Update/Changes/SheetRemoved.cs
class SheetRemoved (line 4) | [Serializable]
method SheetRemoved (line 8) | public SheetRemoved(string name) {
method ToString (line 17) | public override string ToString() {
FILE: SaintCoinach/Ex/Relational/Update/Changes/SheetTypeChanged.cs
class SheetTypeChanged (line 4) | [Serializable]
method SheetTypeChanged (line 8) | public SheetTypeChanged(string name) {
method ToString (line 17) | public override string ToString() {
FILE: SaintCoinach/Ex/Relational/Update/ColumnComparer.cs
class ColumnComparer (line 10) | public abstract class ColumnComparer {
method Create (line 13) | public static ColumnComparer Create(Column column, IEnumerable<Column>...
method IsCompatibleIndex (line 28) | public bool IsCompatibleIndex(int index) {
method IsCompatibleType (line 32) | public abstract bool IsCompatibleType(Type type, Type candidateType);
method Compare (line 34) | public abstract bool Compare(object v1, object v2);
class PrimitiveColumnComparer (line 37) | public class PrimitiveColumnComparer : ColumnComparer {
method Compare (line 38) | public override bool Compare(object v1, object v2) {
method IsCompatibleType (line 42) | public override bool IsCompatibleType(Type type, Type candidateType) {
class StringColumnComparer (line 47) | public class StringColumnComparer : ColumnComparer {
method Compare (line 50) | public override bool Compare(object v1, object v2) {
method ComputeLevenshtein (line 70) | public static int ComputeLevenshtein(string s, string t) {
method IsCompatibleType (line 111) | public override bool IsCompatibleType(Type type, Type candidateType) {
FILE: SaintCoinach/Ex/Relational/Update/Comparer.cs
class Comparer (line 9) | static class Comparer {
method IsMatch (line 10) | public static bool IsMatch(object v1, object v2) {
method IsMatch (line 46) | public static bool IsMatch(IDictionary v1, IDictionary v2) {
method IsPrimitive (line 58) | private static bool IsPrimitive(object o) {
method IsPrimitiveType (line 78) | public static bool IsPrimitiveType(Type t) {
method ToDecimal (line 95) | private static Decimal ToDecimal(object o) {
FILE: SaintCoinach/Ex/Relational/Update/DefinitionUpdater.cs
class DefinitionUpdater (line 8) | public class DefinitionUpdater {
method DefinitionUpdater (line 25) | public DefinitionUpdater(SheetDefinition sheetDefinition, PositionedDa...
method GetMatches (line 34) | public IDictionary<int, double> GetMatches() {
method MatchRow (line 38) | public void MatchRow(object[] previousRowData, object[] updatedRowData...
method GetDefinition (line 99) | public PositionedDataDefinition GetDefinition(int index) {
FILE: SaintCoinach/Ex/Relational/Update/IChange.cs
type IChange (line 2) | public interface IChange {
FILE: SaintCoinach/Ex/Relational/Update/RelationUpdater.cs
class RelationUpdater (line 13) | public class RelationUpdater {
method RelationUpdater (line 37) | public RelationUpdater(PackCollection previousPacks,
method Update (line 60) | public IEnumerable<IChange> Update(bool detectDataChanges) {
method MemoryGuard (line 136) | private static T MemoryGuard<T>(Func<T> func) {
class NullProgress (line 153) | private class NullProgress : IProgress<UpdateProgress> {
method Report (line 156) | public void Report(UpdateProgress value) { }
FILE: SaintCoinach/Ex/Relational/Update/SheetComparer.cs
class SheetComparer (line 12) | public class SheetComparer {
method SheetComparer (line 28) | public SheetComparer(IRelationalSheet prevSheet,
class ColumnMap (line 45) | private class ColumnMap {
method Compare (line 55) | public IEnumerable<IChange> Compare() {
method Compare (line 123) | private static IEnumerable<IChange> Compare(ISheet previousSheet,
method CompareVariant2 (line 153) | private static IEnumerable<IChange> CompareVariant2(ISheet previousSheet,
FILE: SaintCoinach/Ex/Relational/Update/SheetUpdater.cs
class SheetUpdater (line 10) | public class SheetUpdater {
method SheetUpdater (line 31) | public SheetUpdater(IRelationalSheet prevSheet,
method AddMoveChange (line 53) | void AddMoveChange(DefinitionUpdater updater, int newIndex, double con...
method Update (line 68) | public IEnumerable<IChange> Update() {
method IsUnusedColumnRange (line 103) | bool IsUnusedColumnRange(int index, int length) {
method ProcessDefinitionMatches (line 106) | void ProcessDefinitionMatches() {
method ProcessColumnMatches (line 148) | void ProcessColumnMatches() {
method ProcessLeftovers (line 182) | void ProcessLeftovers() {
method MatchRows (line 193) | private IEnumerable<DefinitionUpdater> MatchRows() {
method MatchVariant2Rows (line 222) | private IEnumerable<DefinitionUpdater> MatchVariant2Rows(DefinitionUpd...
FILE: SaintCoinach/Ex/Relational/Update/UpdateProgress.cs
type UpdateProgress (line 5) | public struct UpdateProgress {
method IncrementStep (line 18) | public void IncrementStep()
method ToString (line 23) | public override string ToString() {
FILE: SaintCoinach/Ex/Relational/ValueConverters/ColorConverter.cs
class ColorConverter (line 7) | public class ColorConverter : IValueConverter {
method ColorConverter (line 16) | public ColorConverter() {
method Convert (line 27) | public object Convert(IDataRow row, object rawValue) {
method ToJson (line 40) | public JObject ToJson() {
method FromJson (line 46) | public static ColorConverter FromJson(JToken obj) {
method ResolveReferences (line 50) | public void ResolveReferences(SheetDefinition sheetDef) { }
FILE: SaintCoinach/Ex/Relational/ValueConverters/ComplexLinkConverter.cs
class ComplexLinkConverter (line 11) | public class ComplexLinkConverter : IValueConverter {
method Convert (line 20) | public object Convert(IDataRow row, object rawValue) {
method ToJson (line 46) | public JObject ToJson() {
method FromJson (line 53) | public static ComplexLinkConverter FromJson(JToken obj) {
type IRowProducer (line 63) | interface IRowProducer {
method GetRow (line 64) | IRow GetRow(IRelationalSheet sheet, int key);
class PrimaryKeyRowProducer (line 67) | class PrimaryKeyRowProducer : IRowProducer {
method GetRow (line 68) | public IRow GetRow(IRelationalSheet sheet, int key) {
class IndexedRowProducer (line 73) | class IndexedRowProducer : IRowProducer {
method GetRow (line 76) | public IRow GetRow(IRelationalSheet sheet, int key) {
type IProjectable (line 81) | interface IProjectable {
method Project (line 82) | object Project(IRow row);
class IdentityProjection (line 85) | class IdentityProjection : IProjectable {
method Project (line 86) | public object Project(IRow row) {
class ColumnProjection (line 91) | class ColumnProjection : IProjectable {
method Project (line 94) | public object Project(IRow row) {
class LinkCondition (line 100) | class LinkCondition {
method Match (line 106) | public bool Match(IDataRow row) {
class SheetLinkData (line 116) | abstract class SheetLinkData {
method GetRow (line 125) | public abstract IRow GetRow(int key, ExCollection collection);
method ToJson (line 127) | public virtual JObject ToJson() {
method FromJson (line 143) | public static SheetLinkData FromJson(JObject obj) {
class SingleSheetLinkData (line 182) | class SingleSheetLinkData : SheetLinkData {
method ToJson (line 185) | public override JObject ToJson() {
method GetRow (line 191) | public override IRow GetRow(int key, ExCollection collection) {
class MultiSheetLinkData (line 197) | class MultiSheetLinkData : SheetLinkData {
method ToJson (line 200) | public override JObject ToJson() {
method GetRow (line 206) | public override IRow GetRow(int key, ExCollection collection) {
method ResolveReferences (line 220) | public void ResolveReferences(SheetDefinition sheetDef) {
FILE: SaintCoinach/Ex/Relational/ValueConverters/GenericReferenceConverter.cs
class GenericReferenceConverter (line 10) | public class GenericReferenceConverter : IValueConverter {
method Convert (line 17) | public object Convert(IDataRow row, object rawValue) {
method ToJson (line 27) | public JObject ToJson() {
method FromJson (line 33) | public static GenericReferenceConverter FromJson(JToken obj) {
method ResolveReferences (line 37) | public void ResolveReferences(SheetDefinition sheetDef) { }
FILE: SaintCoinach/Ex/Relational/ValueConverters/IconConverter.cs
class IconConverter (line 8) | public class IconConverter : IValueConverter {
method Convert (line 14) | public object Convert(IDataRow row, object rawValue) {
method ToJson (line 27) | public JObject ToJson() {
method FromJson (line 33) | public static IconConverter FromJson(JToken obj) {
method ResolveReferences (line 37) | public void ResolveReferences(SheetDefinition sheetDef) { }
FILE: SaintCoinach/Ex/Relational/ValueConverters/MultiReferenceConverter.cs
class MultiReferenceConverter (line 10) | public class MultiReferenceConverter : IValueConverter {
method Convert (line 22) | public object Convert(IDataRow row, object rawValue) {
method ToJson (line 43) | public JObject ToJson() {
method FromJson (line 50) | public static MultiReferenceConverter FromJson(JToken obj) {
method ResolveReferences (line 56) | public void ResolveReferences(SheetDefinition sheetDef) { }
FILE: SaintCoinach/Ex/Relational/ValueConverters/QuadConverter.cs
class QuadConverter (line 11) | public class QuadConverter : IValueConverter {
method Convert (line 19) | public object Convert(IDataRow row, object rawValue) {
method ToJson (line 27) | public JObject ToJson() {
method FromJson (line 33) | public static QuadConverter FromJson(JToken obj) {
method ResolveReferences (line 37) | public void ResolveReferences(SheetDefinition sheetDef) { }
FILE: SaintCoinach/Ex/Relational/ValueConverters/SheetLinkConverter.cs
class SheetLinkConverter (line 6) | public class SheetLinkConverter : IValueConverter {
method Convert (line 18) | public object Convert(IDataRow row, object rawValue) {
method ToJson (line 33) | public JObject ToJson() {
method FromJson (line 40) | public static SheetLinkConverter FromJson(JToken obj) {
method ResolveReferences (line 46) | public void ResolveReferences(SheetDefinition sheetDef) { }
FILE: SaintCoinach/Ex/Relational/ValueConverters/TomestoneOrItemReferenceConverter.cs
class TomestoneOrItemReferenceConverter (line 11) | public class TomestoneOrItemReferenceConverter : IValueConverter {
method Convert (line 19) | public object Convert(IDataRow row, object rawValue) {
method BuildTomestoneRewardIndex (line 33) | private Dictionary<int, Item> BuildTomestoneRewardIndex(ExCollection c...
method ToJson (line 48) | public JObject ToJson() {
method FromJson (line 54) | public static TomestoneOrItemReferenceConverter FromJson(JToken obj) {
method ResolveReferences (line 58) | public void ResolveReferences(SheetDefinition sheetDef) { }
FILE: SaintCoinach/Ex/Variant1/DataRow.cs
class DataRow (line 9) | public class DataRow : DataRowBase {
method DataRow (line 16) | public DataRow(IDataSheet sheet, int key, int offset) : base(sheet, ke...
FILE: SaintCoinach/Ex/Variant1/RelationalDataRow.cs
class RelationalDataRow (line 11) | public class RelationalDataRow : DataRow, IRelationalDataRow {
method ToString (line 18) | public override string ToString() {
method RelationalDataRow (line 27) | public RelationalDataRow(IDataSheet sheet, int key, int offset) : base...
method GetColumnValue (line 54) | private object GetColumnValue(string columnName) {
method GetRaw (line 61) | object IRelationalRow.GetRaw(string columnName) {
FILE: SaintCoinach/Ex/Variant2/DataRow.cs
class DataRow (line 9) | public class DataRow : DataRowBase {
method GetSubRow (line 32) | public SubRow GetSubRow(int key) {
method DataRow (line 39) | public DataRow(IDataSheet sheet, int key, int offset) : base(sheet, ke...
method Read (line 49) | protected virtual void Read() {
method GetRaw (line 70) | public override object GetRaw(int column) {
FILE: SaintCoinach/Ex/Variant2/RelationalDataRow.cs
class RelationalDataRow (line 10) | public class RelationalDataRow : DataRow, IRelationalDataRow {
method ToString (line 13) | public override string ToString() {
method RelationalDataRow (line 22) | public RelationalDataRow(IDataSheet sheet, int key, int offset) : base...
method GetRaw (line 46) | object IRelationalRow.GetRaw(string columnName) {
FILE: SaintCoinach/Ex/Variant2/SubRow.cs
class SubRow (line 9) | public class SubRow : DataRowBase, IRelationalDataRow {
method SubRow (line 17) | public SubRow(IDataRow parent, int key, int offset) : base(parent.Shee...
method GetRaw (line 47) | object IRelationalRow.GetRaw(string columnName) {
FILE: SaintCoinach/Graphics/Bone.cs
class Bone (line 8) | [System.Diagnostics.DebuggerDisplay("{Name} ( {Unknown1.X}, {Unknown1.Y}...
method Bone (line 19) | internal Bone(ModelDefinition definition, int index, byte[] buffer, re...
FILE: SaintCoinach/Graphics/BoundingBox.cs
type BoundingBox (line 9) | [StructLayout(LayoutKind.Sequential)]
method Scale (line 14) | public BoundingBox Scale(float factor) { return Scale(new Vector3 { X ...
method Scale (line 15) | public BoundingBox Scale(Vector3 factor) {
method Grow (line 45) | public BoundingBox Grow(float change) { return Grow(new Vector3 { X = ...
method Grow (line 46) | public BoundingBox Grow(Vector3 change) {
FILE: SaintCoinach/Graphics/ColorMap.cs
class ColorMap (line 9) | public class ColorMap {
method ColorMap (line 13) | public ColorMap(IO.File file) {
method Build (line 19) | private void Build() {
FILE: SaintCoinach/Graphics/Exports/ModelExport.cs
class ModelExport (line 9) | public class ModelExport {
method GetErrors (line 14) | public string GetErrors() {
method ModelExport (line 18) | private ModelExport() { }
method AsObj (line 20) | public static ModelExport AsObj(Model model, ImcVariant variant) {
class MeshExport (line 35) | public class MeshExport {
method MeshExport (line 46) | public MeshExport(byte[] bytes, Material material) {
method ExportTextures (line 52) | private void ExportTextures(Material material) {
FILE: SaintCoinach/Graphics/Exports/Obj.cs
class Obj (line 8) | public static class Obj {
method GetBytes (line 9) | public static byte[] GetBytes(Mesh mesh) {
FILE: SaintCoinach/Graphics/ImcFile.cs
class ImcFile (line 8) | public class ImcFile {
method ImcFile (line 21) | public ImcFile(IO.File sourceFile) {
method GetVariant (line 44) | public ImcVariant GetVariant(int index) {
method GetVariant (line 47) | public ImcVariant GetVariant(byte partKey, int index) {
FILE: SaintCoinach/Graphics/ImcPart.cs
class ImcPart (line 9) | public class ImcPart {
method ImcPart (line 22) | internal ImcPart(byte[] buffer, byte bit, ref int offset) {
FILE: SaintCoinach/Graphics/ImcVariant.cs
type ImcVariant (line 9) | [StructLayout(LayoutKind.Sequential)]
FILE: SaintCoinach/Graphics/Lgb/ILgbEntry.cs
type ILgbEntry (line 8) | public interface ILgbEntry {
FILE: SaintCoinach/Graphics/Lgb/LgbENpcEntry.cs
class LgbENpcEntry (line 9) | public class LgbENpcEntry : ILgbEntry {
type HeaderData (line 11) | [StructLayout(LayoutKind.Sequential)]
method LgbENpcEntry (line 31) | public LgbENpcEntry(IO.PackCollection packs, byte[] buffer, int offset) {
FILE: SaintCoinach/Graphics/Lgb/LgbEntryType.cs
type LgbEntryType (line 13) | public enum LgbEntryType : int {
FILE: SaintCoinach/Graphics/Lgb/LgbEventObjectEntry.cs
class LgbEventObjectEntry (line 9) | public class LgbEventObjectEntry : ILgbEntry {
type HeaderData (line 15) | [StructLayout(LayoutKind.Sequential)]
method LgbEventObjectEntry (line 37) | public LgbEventObjectEntry(IO.PackCollection packs, byte[] buffer, int...
method LoadSheets (line 63) | private void LoadSheets(IO.PackCollection packs) {
FILE: SaintCoinach/Graphics/Lgb/LgbFile.cs
class LgbFile (line 9) | public class LgbFile {
type HeaderData (line 11) | [StructLayout(LayoutKind.Sequential)]
method LgbFile (line 32) | public LgbFile(IO.File file) {
method Build (line 40) | private void Build() {
FILE: SaintCoinach/Graphics/Lgb/LgbGimmickEntry.cs
class LgbGimmickEntry (line 9) | public class LgbGimmickEntry : ILgbEntry {
type HeaderData (line 11) | [StructLayout(LayoutKind.Sequential)]
method LgbGimmickEntry (line 33) | public LgbGimmickEntry(IO.PackCollection packs, byte[] buffer, int off...
FILE: SaintCoinach/Graphics/Lgb/LgbGroup.cs
class LgbGroup (line 10) | public class LgbGroup {
type HeaderData (line 12) | [StructLayout(LayoutKind.Sequential)]
method LgbGroup (line 45) | public LgbGroup(LgbFile parent, byte[] buffer, int offset) {
method ToString (line 94) | public override string ToString() => Name ?? "(null)";
FILE: SaintCoinach/Graphics/Lgb/LgbLightEntry.cs
class LgbLightEntry (line 9) | public class LgbLightEntry : ILgbEntry {
type HeaderData (line 11) | [StructLayout(LayoutKind.Sequential)]
method LgbLightEntry (line 44) | public LgbLightEntry(IO.PackCollection packs, byte[] buffer, int offse...
FILE: SaintCoinach/Graphics/Lgb/LgbModelEntry.cs
class LgbModelEntry (line 10) | public class LgbModelEntry : ILgbEntry {
type HeaderData (line 12) | [StructLayout(LayoutKind.Sequential)]
method LgbModelEntry (line 42) | public LgbModelEntry(IO.PackCollection packs, byte[] buffer, int offse...
FILE: SaintCoinach/Graphics/Lgb/LgbVfxEntry.cs
class LgbVfxEntry (line 9) | public class LgbVfxEntry : ILgbEntry {
type HeaderData (line 11) | [StructLayout(LayoutKind.Sequential)]
method LgbVfxEntry (line 33) | public LgbVfxEntry(IO.PackCollection packs, byte[] buffer, int offset) {
FILE: SaintCoinach/Graphics/Material.cs
class Material (line 8) | [System.Diagnostics.DebuggerDisplay("{File.Path}")]
method Material (line 35) | public Material(MaterialDefinition definition, IO.File file, ImcVarian...
method Build (line 45) | private void Build() {
method ReadStrings (line 88) | private static string[] ReadStrings(byte[] buffer, ref int offsetOffse...
method GetColorSet (line 99) | public unsafe System.Drawing.Image GetColorSet() {
method GetColorValue (line 121) | private static byte GetColorValue(float half) {
FILE: SaintCoinach/Graphics/MaterialDefinition.cs
class MaterialDefinition (line 9) | [System.Diagnostics.DebuggerDisplay("{Name}")]
class PathExpander (line 32) | private class PathExpander {
method PathExpander (line 38) | public PathExpander(string pattern, string replacementFormat, string...
method TryExpand (line 45) | public bool TryExpand(string input, out string path, out string stai...
method TryExpand (line 108) | static bool TryExpand(string input, out string path, out string staine...
method MaterialDefinition (line 142) | internal MaterialDefinition(ModelDefinition definition, int index) {
method Get (line 164) | public Material Get(ModelVariantIdentifier variantId) {
method Get (line 169) | public Material Get() {
method Get (line 173) | public Material Get(ImcVariant variant) {
method Get (line 179) | public Material Get(ImcVariant variant, int stainKey) {
method Create (line 187) | private Material Create(string path, ImcVariant variant) {
FILE: SaintCoinach/Graphics/MaterialHeader.cs
type MaterialHeader (line 9) | public struct MaterialHeader {
FILE: SaintCoinach/Graphics/MaterialMetadataHeader.cs
type MaterialMetadataHeader (line 9) | [StructLayout(LayoutKind.Sequential)]
FILE: SaintCoinach/Graphics/MaterialTextureParameter.cs
type MaterialTextureParameter (line 9) | [StructLayout(LayoutKind.Sequential)]
FILE: SaintCoinach/Graphics/Mesh.cs
class Mesh (line 8) | public class Mesh {
method Mesh (line 27) | public Mesh(Model model, int index, byte[] vertexBuffer, byte[] indexB...
method ReadIndices (line 41) | private void ReadIndices(byte[] buffer) {
method ReadVertices (line 49) | private void ReadVertices(byte[] buffer) {
FILE: SaintCoinach/Graphics/MeshHeader.cs
type MeshHeader (line 9) | [StructLayout(LayoutKind.Sequential)]
FILE: SaintCoinach/Graphics/MeshPart.cs
class MeshPart (line 8) | public class MeshPart {
method MeshPart (line 19) | internal MeshPart(Mesh mesh, MeshPartHeader header, byte[] indexBuffer) {
FILE: SaintCoinach/Graphics/MeshPartHeader.cs
type MeshPartHeader (line 9) | [StructLayout(LayoutKind.Sequential)]
FILE: SaintCoinach/Graphics/Model.cs
class Model (line 8) | public class Model {
method Model (line 17) | public Model(ModelDefinition definition, ModelQuality quality) {
method Build (line 26) | private void Build() {
FILE: SaintCoinach/Graphics/ModelAttribute.cs
class ModelAttribute (line 8) | public class ModelAttribute {
method ModelAttribute (line 92) | public ModelAttribute(ModelDefinition definition, int index) {
FILE: SaintCoinach/Graphics/ModelBoundingBoxes.cs
type ModelBoundingBoxes (line 9) | [StructLayout(LayoutKind.Sequential)]
FILE: SaintCoinach/Graphics/ModelDefinition.cs
class ModelDefinition (line 8) | public class ModelDefinition {
method ModelDefinition (line 46) | public ModelDefinition(ModelFile file) {
method GetModel (line 54) | public Model GetModel(int quality) { return GetModel((ModelQuality)qua...
method GetModel (line 55) | public Model GetModel(ModelQuality quality) {
method Build (line 64) | private void Build() {
method BuildVertexFormats (line 129) | private void BuildVertexFormats() {
method ReadStrings (line 139) | private static string[] ReadStrings(byte[] buffer, int count, ref int ...
FILE: SaintCoinach/Graphics/ModelDefinitionHeader.cs
type ModelDefinitionHeader (line 9) | [StructLayout(LayoutKind.Sequential)]
FILE: SaintCoinach/Graphics/ModelFile.cs
class ModelFile (line 14) | public class ModelFile : File {
method ModelFile (line 32) | public ModelFile(Pack pack, FileCommonHeader commonHeader) : base(pack...
method GetModelDefinition (line 38) | public ModelDefinition GetModelDefinition() {
method GetData (line 52) | public override byte[] GetData() {
method GetPart (line 75) | public byte[] GetPart(int part) {
method ReadPart (line 93) | private byte[] ReadPart(int part) {
method GetBlockOffsets (line 118) | private int[] GetBlockOffsets() {
FILE: SaintCoinach/Graphics/ModelHeader.cs
type ModelHeader (line 9) | [StructLayout(LayoutKind.Sequential)]
FILE: SaintCoinach/Graphics/ModelQuality.cs
type ModelQuality (line 2) | public enum ModelQuality : int {
FILE: SaintCoinach/Graphics/ModelVariantIdentifier.cs
type ModelVariantIdentifier (line 8) | public struct ModelVariantIdentifier {
FILE: SaintCoinach/Graphics/PapAnimation.cs
class PapAnimation (line 8) | public class PapAnimation {
method PapAnimation (line 18) | internal PapAnimation(PapFile file, byte[] buffer, ref int offset) {
FILE: SaintCoinach/Graphics/PapFile.cs
class PapFile (line 9) | public class PapFile {
type HeaderData (line 10) | [StructLayout(LayoutKind.Sequential, Pack = 1)]
method PapFile (line 33) | public PapFile(IO.File file) {
method Build (line 41) | private void Build() {
FILE: SaintCoinach/Graphics/Pcb/IPcbBlockData.cs
type IPcbBlockData (line 8) | public interface IPcbBlockData {
FILE: SaintCoinach/Graphics/Pcb/PcbBlockData.cs
class PcbBlockData (line 8) | public class PcbBlockData {
type VertexI16 (line 9) | public struct VertexI16 {
type IndexData (line 14) | public struct IndexData {
FILE: SaintCoinach/Graphics/Pcb/PcbBlockDataType.cs
type PcbBlockDataType (line 8) | public enum PcbBlockDataType {
FILE: SaintCoinach/Graphics/Pcb/PcbBlockEntry.cs
class PcbBlockEntry (line 9) | public class PcbBlockEntry {
type HeaderData (line 11) | [StructLayout(LayoutKind.Sequential)]
method PcbBlockEntry (line 32) | public PcbBlockEntry(PcbFile parent, byte[] buffer, int offset)
method ParseBlockEntry (line 42) | private void ParseBlockEntry(byte[] buffer, int offset, int globalOffs...
method Build (line 47) | private void Build(byte[] buffer)
FILE: SaintCoinach/Graphics/Pcb/PcbFile.cs
class PcbFile (line 11) | public class PcbFile
type HeaderData (line 14) | [StructLayout(LayoutKind.Sequential)]
method PcbFile (line 31) | public PcbFile(IO.File file)
method Build (line 41) | private void Build()
method ParsePcbBlockEntry (line 64) | private void ParsePcbBlockEntry(byte[] buffer, int entryOffset, int gl...
FILE: SaintCoinach/Graphics/Sgb/ISgbData.cs
type ISgbData (line 8) | public interface ISgbData {
FILE: SaintCoinach/Graphics/Sgb/ISgbGroupEntry.cs
type ISgbGroupEntry (line 8) | public interface ISgbGroupEntry {
FILE: SaintCoinach/Graphics/Sgb/SgbDataType.cs
type SgbDataType (line 8) | public enum SgbDataType : int {
FILE: SaintCoinach/Graphics/Sgb/SgbFile.cs
class SgbFile (line 9) | public class SgbFile {
type HeaderData (line 11) | [StructLayout(LayoutKind.Sequential)]
method SgbFile (line 50) | public SgbFile(IO.File file) {
method Build (line 58) | private void Build() {
FILE: SaintCoinach/Graphics/Sgb/SgbGimmickEntry.cs
class SgbGimmickEntry (line 10) | public class SgbGimmickEntry : ISgbGroupEntry {
type HeaderData (line 12) | [StructLayout(LayoutKind.Sequential)]
method SgbGimmickEntry (line 34) | public SgbGimmickEntry(IO.PackCollection packs, byte[] buffer, int off...
FILE: SaintCoinach/Graphics/Sgb/SgbGroup.cs
class SgbGroup (line 9) | public class SgbGroup : ISgbData {
type HeaderData (line 11) | [StructLayout(LayoutKind.Sequential)]
type Offset1CHeaderData (line 37) | [StructLayout(LayoutKind.Sequential)]
method SgbGroup (line 69) | public SgbGroup(SgbFile parent, byte[] buffer, int offset, bool isOffs...
FILE: SaintCoinach/Graphics/Sgb/SgbGroup1CEntry.cs
class SgbGroup1CEntry (line 10) | public class SgbGroup1CEntry : ISgbGroupEntry {
type HeaderData (line 11) | [StructLayout(LayoutKind.Sequential)]
method SgbGroup1CEntry (line 27) | public SgbGroup1CEntry(IO.PackCollection packs, byte[] buffer, int off...
FILE: SaintCoinach/Graphics/Sgb/SgbGroupEntryType.cs
type SgbGroupEntryType (line 8) | public enum SgbGroupEntryType : int {
FILE: SaintCoinach/Graphics/Sgb/SgbLightEntry.cs
class SgbLightEntry (line 9) | public class SgbLightEntry : ISgbGroupEntry {
type HeaderData (line 11) | [StructLayout(LayoutKind.Sequential)]
method SgbLightEntry (line 44) | public SgbLightEntry(IO.PackCollection packs, byte[] buffer, int offse...
FILE: SaintCoinach/Graphics/Sgb/SgbModelEntry.cs
class SgbModelEntry (line 10) | public class SgbModelEntry : ISgbGroupEntry {
type HeaderData (line 12) | [StructLayout(LayoutKind.Sequential)]
method SgbModelEntry (line 36) | public SgbModelEntry(IO.PackCollection packs, byte[] buffer, int offse...
FILE: SaintCoinach/Graphics/Sgb/SgbVfxEntry.cs
class SgbVfxEntry (line 9) | public class SgbVfxEntry : ISgbGroupEntry {
type HeaderData (line 11) | [StructLayout(LayoutKind.Sequential)]
method SgbVfxEntry (line 42) | public SgbVfxEntry(IO.PackCollection packs, byte[] buffer, int offset) {
FILE: SaintCoinach/Graphics/ShPk/Parameter.cs
class Parameter (line 4) | public class Parameter {
method Parameter (line 18) | public Parameter(ShPkFile file, ParameterHeader header, byte[] buffer) {
FILE: SaintCoinach/Graphics/ShPk/ParameterHeader.cs
class ParameterHeader (line 4) | public class ParameterHeader {
method ParameterHeader (line 24) | public ParameterHeader(ParameterType type, byte[] buffer, int offset) {
FILE: SaintCoinach/Graphics/ShPk/ParameterType.cs
type ParameterType (line 2) | public enum ParameterType {
FILE: SaintCoinach/Graphics/ShPk/ShPkFile.cs
class ShPkFile (line 7) | public class ShPkFile {
method ShPkFile (line 20) | public ShPkFile(File sourceFile) {
method Build (line 32) | private void Build() {
FILE: SaintCoinach/Graphics/ShPk/ShPkHeader.cs
class ShPkHeader (line 6) | public class ShPkHeader {
method ShPkHeader (line 31) | public ShPkHeader(byte[] buffer) {
FILE: SaintCoinach/Graphics/ShPk/ShaderHeader.cs
class ShaderHeader (line 6) | public class ShaderHeader {
method ShaderHeader (line 19) | public ShaderHeader(ShaderType type, byte[] buffer, int offset) {
FILE: SaintCoinach/Graphics/ShPk/ShaderParameterReference.cs
class ShaderParameterReference (line 4) | public class ShaderParameterReference {
method ShaderParameterReference (line 22) | public ShaderParameterReference(ParameterType type, byte[] buffer, int...
FILE: SaintCoinach/Graphics/ShPk/ShaderType.cs
type ShaderType (line 2) | public enum ShaderType {
FILE: SaintCoinach/Graphics/SklbFile.cs
class SklbFile (line 9) | public class SklbFile {
type HeaderData (line 10) | [StructLayout(LayoutKind.Sequential, Pack = 1)]
method SklbFile (line 25) | public SklbFile(IO.File file) {
method Build (line 33) | private void Build() {
FILE: SaintCoinach/Graphics/Territory.cs
class Territory (line 8) | public class Territory {
method Territory (line 18) | public Territory(Xiv.TerritoryType type) : this(type.Sheet.Collection....
method Territory (line 21) | public Territory(IO.PackCollection packs, string name, string levelPat...
method Build (line 32) | private void Build() {
method TryGetLgb (line 40) | private Lgb.LgbFile TryGetLgb(string name) {
FILE: SaintCoinach/Graphics/TerritoryParts/Terrain.cs
class Terrain (line 8) | public class Terrain {
method Terrain (line 15) | public Terrain(IO.File file) {
method Build (line 23) | private void Build() {
FILE: SaintCoinach/Graphics/TransformedModel.cs
class TransformedModel (line 8) | public class TransformedModel {
method TransformedModel (line 17) | public TransformedModel(ModelDefinition model, Vector3 translation, Ve...
FILE: SaintCoinach/Graphics/Unknowns/BoneIndices.cs
type BoneIndices (line 9) | public struct BoneIndices { // 8 in hsl, provides references to bones f...
method BoneIndices (line 15) | public BoneIndices(byte[] buffer, ref int offset) {
FILE: SaintCoinach/Graphics/Unknowns/BoneList.cs
type BoneList (line 9) | [StructLayout(LayoutKind.Sequential)]
FILE: SaintCoinach/Graphics/Unknowns/MaterialStruct1.cs
type MaterialStruct1 (line 9) | [StructLayout(LayoutKind.Sequential)]
FILE: SaintCoinach/Graphics/Unknowns/MaterialStruct2.cs
type MaterialStruct2 (line 9) | [StructLayout(LayoutKind.Sequential)]
FILE: SaintCoinach/Graphics/Unknowns/ModelStruct1.cs
type ModelStruct1 (line 9) | [StructLayout(LayoutKind.Sequential)]
FILE: SaintCoinach/Graphics/Unknowns/ModelStruct2.cs
type ModelStruct2 (line 9) | [StructLayout(LayoutKind.Sequential)]
FILE: SaintCoinach/Graphics/Unknowns/ModelStruct3.cs
type ModelStruct3 (line 9) | [StructLayout(LayoutKind.Sequential)]
FILE: SaintCoinach/Graphics/Unknowns/ModelStruct5.cs
type ModelStruct5 (line 9) | [StructLayout(LayoutKind.Sequential)]
FILE: SaintCoinach/Graphics/Unknowns/ModelStruct6.cs
type ModelStruct6 (line 9) | [StructLayout(LayoutKind.Sequential)]
FILE: SaintCoinach/Graphics/Unknowns/ModelStruct7.cs
type ModelStruct7 (line 9) | [StructLayout(LayoutKind.Sequential)]
FILE: SaintCoinach/Graphics/Vector2.cs
type Vector2 (line 9) | [System.Diagnostics.DebuggerDisplay("( {X}, {Y} )")]
FILE: SaintCoinach/Graphics/Vector3.cs
type Vector3 (line 9) | [System.Diagnostics.DebuggerDisplay("( {X}, {Y}, {Z} )")]
FILE: SaintCoinach/Graphics/Vector4.cs
type Vector4 (line 9) | [System.Diagnostics.DebuggerDisplay("( {X}, {Y}, {Z}, {W} )")]
FILE: SaintCoinach/Graphics/Vertex.cs
type Vertex (line 8) | public struct Vertex {
FILE: SaintCoinach/Graphics/VertexAttribute.cs
type VertexAttribute (line 8) | public enum VertexAttribute : byte {
FILE: SaintCoinach/Graphics/VertexDataType.cs
type VertexDataType (line 8) | public enum VertexDataType : byte {
FILE: SaintCoinach/Graphics/VertexFormat.cs
class VertexFormat (line 9) | public class VertexFormat {
method VertexFormat (line 15) | internal VertexFormat(byte[] buffer, ref int offset) {
FILE: SaintCoinach/Graphics/VertexFormatElement.cs
type VertexFormatElement (line 9) | [StructLayout(LayoutKind.Sequential)]
FILE: SaintCoinach/Graphics/VertexReader.cs
class VertexReader (line 8) | static class VertexReader {
method Read (line 9) | public static Vertex Read(byte[] buffer, VertexFormat format, int[] of...
method ReadElement (line 20) | static void ReadElement(byte[] buffer, VertexFormatElement element, in...
method ForceToVector3 (line 52) | static Vector3 ForceToVector3(object value) {
method ForceToVector4 (line 65) | static Vector4 ForceToVector4(object value) {
method ReadData (line 88) | static object ReadData(byte[] buffer, VertexDataType type, int offset) {
FILE: SaintCoinach/HalfHelper.cs
class HalfHelper (line 5) | public static class HalfHelper {
method Pack (line 7) | public static unsafe ushort Pack(float value) {
method Unpack (line 22) | public static float Unpack(byte[] buffer, int offset) {
method Unpack (line 26) | public static unsafe float Unpack(ushort value) {
FILE: SaintCoinach/IO/Directory.Enumeration.cs
class Directory (line 5) | partial class Directory : IEnumerable<File> {
class Enumerator (line 8) | private class Enumerator : IEnumerator<File> {
method Enumerator (line 21) | public Enumerator(Directory dir) {
method Dispose (line 38) | public void Dispose() { }
method MoveNext (line 46) | public bool MoveNext() {
method Reset (line 55) | public void Reset() {
method GetEnumerator (line 67) | public IEnumerator<File> GetEnumerator() {
method GetEnumerator (line 71) | IEnumerator IEnumerable.GetEnumerator() {
FILE: SaintCoinach/IO/Directory.cs
class Directory (line 9) | public partial class Directory : IPackSource {
method Directory (line 34) | public Directory(Pack pack, IndexDirectory index) {
method ToString (line 43) | public override string ToString() {
method FileExists (line 49) | public bool FileExists(string name) {
method FileExists (line 57) | public bool FileExists(uint fileKey) {
method GetFile (line 61) | public File GetFile(string name) {
method GetFile (line 74) | public File GetFile(uint key) {
method TryGetFile (line 91) | public bool TryGetFile(string name, out File file) {
method TryGetFile (line 103) | public bool TryGetFile(uint key, out File file) {
FILE: SaintCoinach/IO/EmptyFile.cs
class EmptyFile (line 2) | public class EmptyFile : File {
method EmptyFile (line 5) | public EmptyFile(Pack pack, FileCommonHeader header) : base(pack, head...
method GetData (line 9) | public override byte[] GetData() {
FILE: SaintCoinach/IO/File.cs
class File (line 9) | public abstract class File {
method File (line 27) | protected File(Pack pack, FileCommonHeader commonHeader) {
method ToString (line 34) | public override string ToString() {
method GetData (line 40) | public abstract byte[] GetData();
method GetStream (line 42) | public virtual Stream GetStream() {
method GetSourceStream (line 50) | protected Stream GetSourceStream() {
method ReadBlock (line 54) | protected static byte[] ReadBlock(Stream stream) {
method ReadBlock (line 63) | protected static void ReadBlock(Stream inStream, Stream outStream) {
method Inflate (line 126) | private static void Inflate(byte[] buffer, Stream outStream) {
method GetHashCode (line 134) | public override int GetHashCode() {
method Equals (line 137) | public override bool Equals(object obj) {
FILE: SaintCoinach/IO/FileCommonHeader.cs
class FileCommonHeader (line 8) | public class FileCommonHeader {
method FileCommonHeader (line 26) | public FileCommonHeader(IIndexFile index, Stream stream) {
method GetBuffer (line 39) | public byte[] GetBuffer() {
method Read (line 47) | private void Read(Stream stream) {
FILE: SaintCoinach/IO/FileDefault.cs
class FileDefault (line 8) | public class FileDefault : File {
method FileDefault (line 17) | public FileDefault(Pack pack, FileCommonHeader header) : base(pack, he...
method GetData (line 23) | public override byte[] GetData() {
method Read (line 38) | private byte[] Read() {
FILE: SaintCoinach/IO/FileFactory.cs
class FileFactory (line 7) | public static class FileFactory {
method Get (line 8) | public static File Get(Pack pack, IIndexFile file) {
FILE: SaintCoinach/IO/FileType.cs
type FileType (line 2) | public enum FileType {
FILE: SaintCoinach/IO/Hash.cs
class Hash (line 7) | public static class Hash {
method Compute (line 53) | private static uint Compute(uint[] table, uint seed, byte[] buffer, in...
method Compute (line 70) | public static uint Compute(uint seed, byte[] buffer, int start, int si...
method Compute (line 76) | public static uint Compute(string value) {
method TryGetSqPackKey (line 129) | public static bool TryGetSqPackKey(string path, out byte key) {
method TryGetSqPackName (line 137) | public static bool TryGetSqPackName(byte key, out string name) {
FILE: SaintCoinach/IO/IIndexFile.cs
type IIndexFile (line 8) | public interface IIndexFile : IEquatable<IIndexFile> {
FILE: SaintCoinach/IO/IPackSource.cs
type IPackSource (line 8) | public interface IPackSource : IEnumerable<File> {
method FileExists (line 9) | bool FileExists(string path);
method TryGetFile (line 10) | bool TryGetFile(string path, out File value);
method GetFile (line 11) | File GetFile(string path);
FILE: SaintCoinach/IO/Index.cs
class Index (line 15) | public class Index {
method Index (line 26) | public Index(PackIdentifier packId, string path) {
method Index (line 35) | public Index(PackIdentifier packId, Stream stream) {
method Index (line 42) | public Index(PackIdentifier packId, BinaryReader reader) {
method Build (line 52) | private void Build(BinaryReader reader) {
method ReadHeader (line 64) | private void ReadHeader(BinaryReader reader) {
method ReadDirectories (line 74) | private void ReadDirectories(BinaryReader reader) {
FILE: SaintCoinach/IO/Index2.cs
class Index2 (line 15) | public class Index2 {
method Index2 (line 26) | public Index2(PackIdentifier packId, string path) {
method Index2 (line 35) | public Index2(PackIdentifier packId, Stream stream) {
method Index2 (line 42) | public Index2(PackIdentifier packId, BinaryReader reader) {
method Build (line 52) | private void Build(BinaryReader reader) {
method ReadHeader (line 64) | private void ReadHeader(BinaryReader reader) {
method ReadFiles (line 74) | private void ReadFiles(BinaryReader reader) {
FILE: SaintCoinach/IO/Index2File.cs
class Index2File (line 9) | public class Index2File : IIndexFile {
method Index2File (line 25) | public Index2File(PackIdentifier packId, BinaryReader reader) {
method GetHashCode (line 38) | public override int GetHashCode() {
method Equals (line 41) | public override bool Equals(object obj) {
method Equals (line 46) | public bool Equals(IIndexFile other) {
FILE: SaintCoinach/IO/Index2Header.cs
class Index2Header (line 12) | public class Index2Header {
method Index2Header (line 29) | public Index2Header(BinaryReader reader) {
FILE: SaintCoinach/IO/Index2Source.Enumerator.cs
class Index2Source (line 8) | partial class Index2Source {
class Enumerator (line 9) | public class Enumerator : IEnumerator<File> {
method Enumerator (line 13) | public Enumerator(Index2Source source) {
method Dispose (line 28) | public void Dispose() {
method MoveNext (line 40) | public bool MoveNext() {
method Reset (line 44) | public void Reset() {
method GetEnumerator (line 51) | public IEnumerator<File> GetEnumerator() {
method GetEnumerator (line 54) | System.Collections.IEnumerator System.Collections.IEnumerable.GetEnume...
FILE: SaintCoinach/IO/Index2Source.cs
class Index2Source (line 8) | public partial class Index2Source : IPackSource {
method Index2Source (line 28) | internal Index2Source(Pack pack, Index2 index) {
method FileExists (line 36) | public bool FileExists(string path) {
method FileExists (line 44) | public bool FileExists(uint hash) {
method TryGetFile (line 48) | public bool TryGetFile(string path, out File value) {
method TryGetFile (line 59) | public bool TryGetFile(uint hash, out File value) {
method GetFile (line 76) | public File GetFile(string path) {
method GetFile (line 86) | public File GetFile(uint hash) {
FILE: SaintCoinach/IO/IndexDirectory.cs
class IndexDirectory (line 10) | public class IndexDirectory {
method IndexDirectory (line 23) | public IndexDirectory(PackIdentifier packId, BinaryReader reader) {
method ReadMeta (line 36) | private void ReadMeta(BinaryReader reader) {
method ReadFiles (line 45) | private void ReadFiles(BinaryReader reader) {
FILE: SaintCoinach/IO/IndexFile.cs
class IndexFile (line 7) | public class IndexFile : IIndexFile {
method IndexFile (line 24) | public IndexFile(PackIdentifier packId, BinaryReader reader) {
method GetHashCode (line 40) | public override int GetHashCode() {
method Equals (line 43) | public override bool Equals(object obj) {
method Equals (line 48) | public bool Equals(IIndexFile other) {
FILE: SaintCoinach/IO/IndexHeader.cs
type IndexHeader (line 7) | public struct IndexHeader {
method IndexHeader (line 28) | public IndexHeader(BinaryReader reader) {
FILE: SaintCoinach/IO/IndexSource.Enumerator.cs
class IndexSource (line 8) | partial class IndexSource {
class Enumerator (line 9) | public class Enumerator : IEnumerator<File> {
method Enumerator (line 14) | public Enumerator(IndexSource source) {
method Dispose (line 32) | public void Dispose() {
method MoveNext (line 50) | public bool MoveNext() {
method Reset (line 64) | public void Reset() {
method GetEnumerator (line 74) | public IEnumerator<File> GetEnumerator() {
method GetEnumerator (line 77) | System.Collections.IEnumerator System.Collections.IEnumerable.GetEnume...
FILE: SaintCoinach/IO/IndexSource.cs
class IndexSource (line 8) | public partial class IndexSource : IPackSource {
method IndexSource (line 28) | internal IndexSource(Pack pack, Index index) {
method DirectoryExists (line 36) | public bool DirectoryExists(string path) {
method DirectoryExists (line 44) | public bool DirectoryExists(uint key) {
method GetDirectory (line 48) | public Directory GetDirectory(string path) {
method GetDirectory (line 59) | public Directory GetDirectory(uint key) {
method TryGetDirectory (line 69) | public bool TryGetDirectory(string path, out Directory directory) {
method TryGetDirectory (line 81) | public bool TryGetDirectory(uint key, out Directory directory) {
method FileExists (line 95) | public bool FileExists(string path) {
method GetFile (line 105) | public File GetFile(string path) {
method GetFile (line 116) | public File GetFile(uint directoryKey, uint fileKey) {
method TryGetFile (line 121) | public bool TryGetFile(string path, out File file) {
method TryGetFile (line 137) | public bool TryGetFile(uint directoryKey, uint fileKey, out File file) {
FILE: SaintCoinach/IO/Pack.cs
class Pack (line 13) | public partial class Pack : IEnumerable<File> {
method GetDataStream (line 60) | public Stream GetDataStream(byte datFile = 0) {
method ToString (line 97) | public override string ToString() {
method Pack (line 104) | public Pack(string dataPath, PackIdentifier id) : this(null, new Direc...
method Pack (line 105) | public Pack(DirectoryInfo dataDirectory, PackIdentifier id) : this(nul...
method Pack (line 107) | public Pack(PackCollection collection, string dataPath, PackIdentifier...
method Pack (line 110) | public Pack(PackCollection collection, DirectoryInfo dataDirectory, Pa...
method FileExists (line 134) | public bool FileExists(string path) {
method TryGetFile (line 137) | public bool TryGetFile(string path, out File value) {
method GetFile (line 140) | public File GetFile(string path) {
method GetEnumerator (line 148) | public IEnumerator<File> GetEnumerator() {
method GetEnumerator (line 156) | System.Collections.IEnumerator System.Collections.IEnumerable.GetEnume...
FILE: SaintCoinach/IO/PackCollection.cs
class PackCollection (line 7) | public class PackCollection {
method PackCollection (line 24) | public PackCollection(string dataDirectory) : this(new DirectoryInfo(d...
method PackCollection (line 26) | public PackCollection(DirectoryInfo dataDirectory) {
method FileExists (line 39) | public bool FileExists(string path) {
method GetFile (line 43) | public File GetFile(string path) {
method GetPack (line 48) | public Pack GetPack(PackIdentifier id) {
method GetPack (line 52) | public Pack GetPack(string path) {
method TryGetFile (line 57) | public bool TryGetFile(string path, out File file) {
method TryGetPack (line 65) | public bool TryGetPack(string path, out Pack pack) {
FILE: SaintCoinach/IO/PackIdentifier.cs
type PackIdentifier (line 8) | public struct PackIdentifier {
method PackIdentifier (line 57) | public PackIdentifier(byte type, byte expansion, byte number) {
method PackIdentifier (line 65) | public PackIdentifier(string type, string expansion, byte number) {
method GetHashCode (line 74) | public override int GetHashCode() {
method Equals (line 77) | public override bool Equals(object obj) {
method Equals (line 82) | public bool Equals(PackIdentifier other) {
method Get (line 86) | public static PackIdentifier Get(string fullPath) {
method TryGet (line 91) | public static bool TryGet(string fullPath, out PackIdentifier value) {
FILE: SaintCoinach/Imaging/GftdEntry.cs
type GftdEntry (line 10) | [StructLayout(LayoutKind.Sequential)]
FILE: SaintCoinach/Imaging/GraphicsFileTextureDefinition.cs
class GraphicsFileTextureDefinition (line 10) | public class GraphicsFileTextureDefinition : IEnumerable<GftdEntry> {
method GraphicsFileTextureDefinition (line 22) | public GraphicsFileTextureDefinition(IO.File file) {
method GetEnumerator (line 41) | IEnumerator<GftdEntry> IEnumerable<GftdEntry>.GetEnumerator() {
method GetEnumerator (line 49) | System.Collections.IEnumerator System.Collections.IEnumerable.GetEnume...
FILE: SaintCoinach/Imaging/IconHelper.cs
class IconHelper (line 11) | public static class IconHelper {
method GetIconFile (line 17) | private static File GetIconFile(IO.PackCollection pack, string filePat...
method GetIcon (line 30) | public static Imaging.ImageFile GetIcon(IO.PackCollection pack, int nr) {
method GetIcon (line 33) | public static Imaging.ImageFile GetIcon(IO.PackCollection pack, Langua...
method GetIcon (line 39) | public static Imaging.ImageFile GetIcon(IO.PackCollection pack, string...
FILE: SaintCoinach/Imaging/ImageConverter.cs
type DDS_PIXELFORMAT (line 12) | struct DDS_PIXELFORMAT {
type DDS_HEADER (line 23) | struct DDS_HEADER {
type DDSD_ENUM (line 51) | enum DDSD_ENUM : uint {
type DDPF_ENUM (line 62) | enum DDPF_ENUM : uint {
class ImageConverter (line 72) | public class ImageConverter {
method Convert (line 117) | public static Image Convert(ImageFile file) {
method Convert (line 121) | public static unsafe Image Convert(byte[] src, ImageFormat format, int...
method GetA8R8G8B8 (line 133) | public static byte[] GetA8R8G8B8(ImageFile file) {
method GetA8R8G8B8 (line 137) | public static byte[] GetA8R8G8B8(byte[] src, ImageFormat format, int w...
method GetDDS (line 150) | public static byte[] GetDDS(ImageFile file) {
method ProcessA16R16G16B16_Float (line 226) | private static void ProcessA16R16G16B16_Float(byte[] src, byte[] dst, ...
method ProcessA1R5G5B5 (line 237) | private static void ProcessA1R5G5B5(byte[] src, byte[] dst, int width,...
method ProcessA4R4G4B4 (line 254) | private static void ProcessA4R4G4B4(byte[] src, byte[] dst, int width,...
method ProcessA8R8G8B8 (line 263) | private static void ProcessA8R8G8B8(byte[] src, byte[] dst, int width,...
method ProcessDxt1 (line 269) | private static void ProcessDxt1(byte[] src, byte[] dst, int width, int...
method ProcessDxt3 (line 274) | private static void ProcessDxt3(byte[] src, byte[] dst, int width, int...
method ProcessDxt5 (line 279) | private static void ProcessDxt5(byte[] src, byte[] dst, int width, int...
method ProcessR3G3B2 (line 284) | private static void ProcessR3G3B2(byte[] src, byte[] dst, int width, i...
method ProcessBC5 (line 299) | private static void ProcessBC5(byte[] src, byte[] dst, int width, int ...
method ProcessBC7 (line 303) | private static void ProcessBC7(byte[] src, byte[] dst, int width, int ...
method ProcessBC (line 307) | private static void ProcessBC(byte[] src, byte[] dst, int width, int h...
FILE: SaintCoinach/Imaging/ImageFile.cs
class ImageFile (line 16) | public class ImageFile : File {
method ImageFile (line 35) | public ImageFile(Pack pack, FileCommonHeader commonHeader)
method ImageFile (line 43) | public ImageFile(FileDefault file) : base(file.Pack, file.CommonHeader) {
method GetImage (line 57) | public Image GetImage() {
method GetData (line 70) | public override byte[] GetData() {
method Read (line 83) | private byte[] Read() {
method GetBlockOffsets (line 98) | private IEnumerable<int> GetBlockOffsets() {
FILE: SaintCoinach/Imaging/ImageFormat.cs
type ImageFormat (line 2) | public enum ImageFormat {
FILE: SaintCoinach/Imaging/ImageHeader.cs
class ImageHeader (line 8) | public class ImageHeader {
method ImageHeader (line 32) | public ImageHeader(Stream stream) {
method GetBuffer (line 53) | public byte[] GetBuffer() {
FILE: SaintCoinach/Libra/Achievement.cs
class Achievement (line 15) | public partial class Achievement
FILE: SaintCoinach/Libra/AchievementCategory.cs
class AchievementCategory (line 15) | public partial class AchievementCategory
FILE: SaintCoinach/Libra/AchievementKind.cs
class AchievementKind (line 15) | public partial class AchievementKind
FILE: SaintCoinach/Libra/Action.cs
class Action (line 15) | public partial class Action
FILE: SaintCoinach/Libra/BNpcName.Parse.cs
class BNpcName (line 11) | partial class BNpcName {
method Parse (line 32) | public void Parse() {
method ParseRegions (line 65) | private void ParseRegions(JsonTextReader reader) {
FILE: SaintCoinach/Libra/BNpcName.cs
class BNpcName (line 15) | public partial class BNpcName
FILE: SaintCoinach/Libra/BNpcName_PlaceName.cs
class BNpcName_PlaceName (line 15) | public partial class BNpcName_PlaceName
FILE: SaintCoinach/Libra/BaseParam.cs
class BaseParam (line 15) | public partial class BaseParam
FILE: SaintCoinach/Libra/BeastTribe.cs
class BeastTribe (line 15) | public partial class BeastTribe
FILE: SaintCoinach/Libra/ClassJob.cs
class ClassJob (line 15) | public partial class ClassJob
FILE: SaintCoinach/Libra/ClassJobCategory.cs
class ClassJobCategory (line 15) | public partial class ClassJobCategory
FILE: SaintCoinach/Libra/ClassJob_ClassJobCategory.cs
class ClassJob_ClassJobCategory (line 15) | public partial class ClassJob_ClassJobCategory
FILE: SaintCoinach/Libra/Colosseum.cs
class Colosseum (line 15) | public partial class Colosseum
FILE: SaintCoinach/Libra/ContentRoulette.cs
class ContentRoulette (line 15) | public partial class ContentRoulette
FILE: SaintCoinach/Libra/ContentType.cs
class ContentType (line 15) | public partial class ContentType
FILE: SaintCoinach/Libra/CraftType.cs
class CraftType (line 15) | public partial class CraftType
FILE: SaintCoinach/Libra/ENpcResident.Parse.cs
class ENpcResident (line 12) | partial class ENpcResident {
method Parse (line 30) | public void Parse() {
method ParseCoordinate (line 64) | private void ParseCoordinate(JsonTextReader reader) {
method ParseShops (line 96) | private void ParseShops(JsonTextReader reader) {
FILE: SaintCoinach/Libra/ENpcResident.cs
class ENpcResident (line 15) | public partial class ENpcResident
FILE: SaintCoinach/Libra/ENpcResident_PlaceName.cs
class ENpcResident_PlaceName (line 15) | public partial class ENpcResident_PlaceName
FILE: SaintCoinach/Libra/ENpcResident_Quest.cs
class ENpcResident_Quest (line 15) | public partial class ENpcResident_Quest
FILE: SaintCoinach/Libra/Emote.cs
class Emote (line 15) | public partial class Emote
FILE: SaintCoinach/Libra/Entities.cs
class Entities (line 8) | public partial class Entities {
method Entities (line 9) | public Entities(string connectionString) : base(connectionString) { }
FILE: SaintCoinach/Libra/FCHierarchy.cs
class FCHierarchy (line 15) | public partial class FCHierarchy
FILE: SaintCoinach/Libra/FCRank.cs
class FCRank (line 15) | public partial class FCRank
FILE: SaintCoinach/Libra/FCReputation.cs
class FCReputation (line 15) | public partial class FCReputation
FILE: SaintCoinach/Libra/Frontline01.cs
class Frontline01 (line 15) | public partial class Frontline01
FILE: SaintCoinach/Libra/GCRankGridaniaFemaleText.cs
class GCRankGridaniaFemaleText (line 15) | public partial class GCRankGridaniaFemaleText
FILE: SaintCoinach/Libra/GCRankGridaniaMaleText.cs
class GCRankGridaniaMaleText (line 15) | public partial class GCRankGridaniaMaleText
FILE: SaintCoinach/Libra/GCRankLimsaFemaleText.cs
class GCRankLimsaFemaleText (line 15) | public partial class GCRankLimsaFemaleText
FILE: SaintCoinach/Libra/GCRankLimsaMaleText.cs
class GCRankLimsaMaleText (line 15) | public partial class GCRankLimsaMaleText
FILE: SaintCoinach/Libra/GCRankUldahFemaleText.cs
class GCRankUldahFemaleText (line 15) | public partial class GCRankUldahFemaleText
FILE: SaintCoinach/Libra/GCRankUldahMaleText.cs
class GCRankUldahMaleText (line 15) | public partial class GCRankUldahMaleText
FILE: SaintCoinach/Libra/Gathering.cs
class Gathering (line 15) | public partial class Gathering
FILE: SaintCoinach/Libra/GatheringType.cs
class GatheringType (line 15) | public partial class GatheringType
FILE: SaintCoinach/Libra/GeneralAction.cs
class GeneralAction (line 15) | public partial class GeneralAction
FILE: SaintCoinach/Libra/GrandCompany.cs
class GrandCompany (line 15) | public partial class GrandCompany
FILE: SaintCoinach/Libra/GuardianDeity.cs
class GuardianDeity (line 15) | public partial class GuardianDeity
FILE: SaintCoinach/Libra/GuildOrder.cs
class GuildOrder (line 15) | public partial class GuildOrder
FILE: SaintCoinach/Libra/InstanceContent.cs
class InstanceContent (line 15) | public partial class InstanceContent
FILE: SaintCoinach/Libra/InstanceContentType.cs
class InstanceContentType (line 15) | public partial class InstanceContentType
FILE: SaintCoinach/Libra/Item.Parse.cs
class Item (line 10) | partial class Item {
class Bonus (line 46) | public class Bonus {
class BasicParam (line 50) | public class BasicParam {
class Action (line 54) | public abstract class Action {
class FixedAction (line 57) | public class FixedAction : Action {
class RelativeAction (line 60) | public class RelativeAction : Action {
class SeriesBonus (line 64) | public class SeriesBonus {
method Parse (line 112) | public void Parse() {
method ParseColor (line 235) | private System.Drawing.Color ParseColor(JsonReader reader) {
method ParseActions (line 246) | private Action[] ParseActions(JsonReader r) {
method ParseAction (line 255) | private Action ParseAction(JsonReader r) {
method ParseBonuses (line 294) | private Bonus[] ParseBonuses(JsonReader r) {
method ParseBonus (line 303) | private Bonus ParseBonus(JsonReader r) {
method ParseBasicParam (line 314) | private BasicParam[] ParseBasicParam(JsonReader r) {
method ParseSeriesBonuses (line 331) | private SeriesBonus ParseSeriesBonuses(JsonReader r) {
method ParseSeriesBonus (line 355) | private void ParseSeriesBonus(JsonReader r, SeriesBonus bonus) {
FILE: SaintCoinach/Libra/Item.cs
class Item (line 15) | public partial class Item
FILE: SaintCoinach/Libra/ItemCategory.cs
class ItemCategory (line 15) | public partial class ItemCategory
FILE: SaintCoinach/Libra/ItemSery.cs
class ItemSery (line 15) | public partial class ItemSery
FILE: SaintCoinach/Libra/ItemSpecialBonu.cs
class ItemSpecialBonu (line 15) | public partial class ItemSpecialBonu
FILE: SaintCoinach/Libra/ItemUICategory.cs
class ItemUICategory (line 15) | public partial class ItemUICategory
FILE: SaintCoinach/Libra/ItemUIKind.cs
class ItemUIKind (line 15) | public partial class ItemUIKind
FILE: SaintCoinach/Libra/Item_ClassJob.cs
class Item_ClassJob (line 15) | public partial class Item_ClassJob
FILE: SaintCoinach/Libra/JournalCategory.cs
class JournalCategory (line 15) | public partial class JournalCategory
FILE: SaintCoinach/Libra/JournalGenre.cs
class JournalGenre (line 15) | public partial class JournalGenre
FILE: SaintCoinach/Libra/JsonReaderExtensions.cs
class JsonReaderExtensions (line 10) | public static class JsonReaderExtensions {
method ReadInt32 (line 11) | public static Int32 ReadInt32(this JsonReader r) {
method ReadInt32Array (line 17) | public static Int32[] ReadInt32Array(this JsonReader r) {
method ReadInt64 (line 30) | public static Int64 ReadInt64(this JsonReader r) {
method ReadInt64Array (line 36) | public static Int64[] ReadInt64Array(this JsonReader r) {
method ReadSingle (line 49) | public static Single ReadSingle(this JsonReader r) {
method ReadSingleArray (line 55) | public static Single[] ReadSingleArray(this JsonReader r) {
FILE: SaintCoinach/Libra/LibraModel.Context.cs
class Entities (line 16) | public partial class Entities : DbContext
method Entities (line 18) | public Entities()
method OnModelCreating (line 23) | protected override void OnModelCreating(DbModelBuilder modelBuilder)
FILE: SaintCoinach/Libra/LodestoneSystemDefine.cs
class LodestoneSystemDefine (line 15) | public partial class LodestoneSystemDefine
FILE: SaintCoinach/Libra/NotebookDivision.cs
class NotebookDivision (line 15) | public partial class NotebookDivision
FILE: SaintCoinach/Libra/PlaceName.cs
class PlaceName (line 15) | public partial class PlaceName
FILE: SaintCoinach/Libra/Quest.cs
class Quest (line 15) | public partial class Quest
FILE: SaintCoinach/Libra/QuestWebEx.cs
class QuestWebEx (line 15) | public partial class QuestWebEx
FILE: SaintCoinach/Libra/QuestWebType.cs
class QuestWebType (line 15) | public partial class QuestWebType
FILE: SaintCoinach/Libra/Quest_ClassJob.cs
class Quest_ClassJob (line 15) | public partial class Quest_ClassJob
FILE: SaintCoinach/Libra/Race.cs
class Race (line 15) | public partial class Race
FILE: SaintCoinach/Libra/Recipe.cs
class Recipe (line 15) | public partial class Recipe
FILE: SaintCoinach/Libra/RecipeElement.cs
class RecipeElement (line 15) | public partial class RecipeElement
FILE: SaintCoinach/Libra/Shop.cs
class Shop (line 15) | public partial class Shop
FILE: SaintCoinach/Libra/Status.cs
class Status (line 15) | public partial class Status
FILE: SaintCoinach/Libra/Title.cs
class Title (line 15) | public partial class Title
FILE: SaintCoinach/Libra/Tomestone.cs
class Tomestone (line 15) | public partial class Tomestone
FILE: SaintCoinach/Libra/Town.cs
class Town (line 15) | public partial class Town
FILE: SaintCoinach/OrderedBitConverter.cs
class OrderedBitConverter (line 11) | public static class OrderedBitConverter {
method CheckEndian (line 22) | private static void CheckEndian(ref byte[] data, bool bigEndian) {
method GetBytes (line 40) | public static byte[] GetBytes(Int16 value, bool bigEndian) {
method GetBytes (line 55) | public static byte[] GetBytes(UInt16 value, bool bigEndian) {
method GetBytes (line 68) | public static byte[] GetBytes(Int32 value, bool bigEndian) {
method GetBytes (line 83) | public static byte[] GetBytes(UInt32 value, bool bigEndian) {
method GetBytes (line 96) | public static byte[] GetBytes(Int64 value, bool bigEndian) {
method GetBytes (line 111) | public static byte[] GetBytes(UInt64 value, bool bigEndian) {
method GetBytes (line 124) | public static byte[] GetBytes(Single value, bool bigEndian) {
method GetBytes (line 139) | public static byte[] GetBytes(Double value, bool bigEndian) {
method ToInt16 (line 163) | public static Int16 ToInt16(byte[] buffer, int offset, bool bigEndian) {
method ToUInt16 (line 189) | public static UInt16 ToUInt16(byte[] buffer, int offset, bool bigEndia...
method ToInt32 (line 207) | public static Int32 ToInt32(byte[] buffer, int offset, bool bigEndian) {
method ToUInt32 (line 233) | public static UInt32 ToUInt32(byte[] buffer, int offset, bool bigEndia...
method ToInt64 (line 251) | public static Int64 ToInt64(byte[] buffer, int offset, bool bigEndian) {
method ToUInt64 (line 277) | public static UInt64 ToUInt64(byte[] buffer, int offset, bool bigEndia...
method ToSingle (line 295) | public static Single ToSingle(byte[] buffer, int offset, bool bigEndia...
method ToDouble (line 321) | public static Double ToDouble(byte[] buffer, int offset, bool bigEndia...
FILE: SaintCoinach/Range.cs
type Range (line 9) | public struct Range {
method Range (line 62) | public Range(int start, int length) {
method Contains (line 74) | public bool Contains(int value) {
method Intersects (line 83) | public bool Intersects(Range other) {
method Contains (line 96) | public static bool Contains(IEnumerable<Range> ranges, int value) {
method Combine (line 106) | public static Range[] Combine(IEnumerable<Range> ranges) {
FILE: SaintCoinach/Sound/ScdAdpcmEntry.cs
class ScdAdpcmEntry (line 8) | public class ScdAdpcmEntry : ScdEntry {
method ScdAdpcmEntry (line 14) | internal ScdAdpcmEntry(ScdFile file, ScdEntryHeader header, int chunks...
method GetDecoded (line 20) | public override byte[] GetDecoded() {
method Decode (line 25) | private void Decode(int chunksOffset, int dataOffset) {
FILE: SaintCoinach/Sound/ScdCodec.cs
type ScdCodec (line 8) | public enum ScdCodec : int {
FILE: SaintCoinach/Sound/ScdEntry.cs
class ScdEntry (line 8) | public abstract class ScdEntry {
method ScdEntry (line 19) | protected ScdEntry(ScdFile file, ScdEntryHeader header) {
method GetDecoded (line 25) | public abstract byte[] GetDecoded();
FILE: SaintCoinach/Sound/ScdEntryHeader.cs
type ScdEntryHeader (line 9) | [StructLayout(LayoutKind.Sequential)]
FILE: SaintCoinach/Sound/ScdFile.cs
class ScdFile (line 9) | public class ScdFile {
method ScdFile (line 23) | public ScdFile(IO.File sourceFile) {
method Decode (line 31) | private void Decode() {
method Init (line 59) | private void Init() {
method ReadScdHeader (line 75) | private void ReadScdHeader(int offset) {
method ReadEntryHeader (line 90) | private ScdEntryHeader ReadEntryHeader(int offset) {
method CreateEntry (line 105) | private ScdEntry CreateEntry(ScdEntryHeader header, int chunksOffset, ...
method ReadInt16 (line 122) | internal short ReadInt16(int offset) {
method ReadInt32 (line 126) | internal int ReadInt32(int offset) {
method ReadInt64 (line 130) | internal long ReadInt64(int offset) {
method ReadInt16 (line 134) | internal short ReadInt16(int offset, bool littleEndian) {
method ReadInt32 (line 144) | internal int ReadInt32(int offset, bool littleEndian) {
method ReadInt64 (line 154) | internal long ReadInt64(int offset, bool littleEndian) {
FILE: SaintCoinach/Sound/ScdHeader.cs
type ScdHeader (line 9) | [StructLayout(LayoutKind.Sequential)]
FILE: SaintCoinach/Sound/ScdOggCryptType.cs
type ScdOggCryptType (line 8) | public enum ScdOggCryptType : short {
FILE: SaintCoinach/Sound/ScdOggEntry.cs
class ScdOggEntry (line 8) | public class ScdOggEntry : ScdEntry {
method ScdOggEntry (line 51) | internal ScdOggEntry(ScdFile file, ScdEntryHeader header, int dataOffset)
method GetDecoded (line 57) | public override byte[] GetDecoded() {
method Decode (line 62) | private void Decode(int dataOffset) {
method XorUsingTable (line 97) | private void XorUsingTable() {
FILE: SaintCoinach/Text/DecodeExpressionType.cs
type DecodeExpressionType (line 8) | public enum DecodeExpressionType : byte {
FILE: SaintCoinach/Text/DefaultEvaluationFunctionProvider.cs
class DefaultEvaluationFunctionProvider (line 12) | public class DefaultEvaluationFunctionProvider : IEvaluationFunctionProv...
method DefaultEvaluationFunctionProvider (line 33) | public DefaultEvaluationFunctionProvider(XivCollection data) {
method SetEvaluator (line 53) | public void SetEvaluator(TagType tag, GenericTagEvaluator evaluator) {
method EvaluateGenericElement (line 63) | public IExpression EvaluateGenericElement(EvaluationParameters paramet...
method EvaluateDefaultGenericElement (line 68) | protected virtual IExpression EvaluateDefaultGenericElement(Evaluation...
method EvaluateTwoDigitValue (line 85) | protected virtual IExpression EvaluateTwoDigitValue(EvaluationParamete...
method EvaluateZeroPaddedValue (line 90) | protected virtual IExpression EvaluateZeroPaddedValue(EvaluationParame...
method EvaluateTime (line 98) | protected virtual IExpression EvaluateTime(EvaluationParameters parame...
method EvaluateSheet (line 124) | protected virtual IExpression EvaluateSheet(EvaluationParameters param...
method EvaluateSheetWithAttributive (line 162) | protected virtual IExpression EvaluateSheetWithAttributive(EvaluationP...
method Compare (line 211) | public bool Compare(EvaluationParameters parameters, DecodeExpressionT...
method ExpressionsEqual (line 245) | protected bool ExpressionsEqual(IExpression left, IExpression right) {
method GetFinalObect (line 251) | protected object GetFinalObect(IExpression expr) {
method EqualsEx (line 266) | protected bool EqualsEx(object left, object right) {
method ToBoolean (line 300) | public bool ToBoolean(IExpression value) {
method ToInteger (line 323) | public int ToInteger(IExpression value) {
method TryConvertToInteger (line 329) | public bool TryConvertToInteger(IExpression value, out int result) {
method TryConvert (line 358) | bool TryConvert(object value, out bool result) {
method TryConvert (line 399) | bool TryConvert(object value, out int result) {
FILE: SaintCoinach/Text/EvaluationHelper.cs
class EvaluationHelper (line 10) | static class EvaluationHelper {
method TryEvaluate (line 11) | public static IExpression TryEvaluate(this INode self, EvaluationParam...
FILE: SaintCoinach/Text/EvaluationParameters.cs
class EvaluationParameters (line 8) | public class EvaluationParameters {
method EvaluationParameters (line 27) | public EvaluationParameters(IEvaluationFunctionProvider functionProvid...
method EvaluationParameters (line 36) | public EvaluationParameters(EvaluationParameters copyFrom) {
FILE: SaintCoinach/Text/Expressions/CloseTag.cs
class CloseTag (line 8) | public class CloseTag : IExpression {
method CloseTag (line 13) | public CloseTag(TagType tag) {
method ToString (line 19) | public override string ToString() {
method ToString (line 24) | public void ToString(StringBuilder output) {
FILE: SaintCoinach/Text/Expressions/ExpressionCollection.cs
class ExpressionCollection (line 8) | public class ExpressionCollection : IExpression {
method ExpressionCollection (line 14) | public ExpressionCollection(params IExpression[] children) : this((IEn...
method ExpressionCollection (line 15) | public ExpressionCollection(IEnumerable<IExpression> children) {
method ToString (line 22) | public override string ToString() {
method ToString (line 27) | public void ToString(StringBuilder output) {
FILE: SaintCoinach/Text/Expressions/GenericExpression.cs
class GenericExpression (line 8) | public class GenericExpression : IValueExpression {
method GenericExpression (line 15) | public GenericExpression(object value) {
method ToString (line 19) | public override string ToString() {
method ToString (line 24) | public void ToString(StringBuilder output) {
FILE: SaintCoinach/Text/Expressions/IValueExpression.cs
type IValueExpression (line 8) | public interface IValueExpression : IExpression {
FILE: SaintCoinach/Text/Expressions/ObjectWithDisplay.cs
class ObjectWithDisplay (line 8) | public class ObjectWithDisplay {
method ObjectWithDisplay (line 15) | public ObjectWithDisplay(object display, object obj) {
method ToString (line 24) | public override string ToString() {
FILE: SaintCoinach/Text/Expressions/OpenTag.cs
class OpenTag (line 8) | public class OpenTag : IExpression {
method OpenTag (line 15) | public OpenTag(TagType tag, IEnumerable<IExpression> arguments) {
method ToString (line 25) | public override string ToString() {
method ToString (line 30) | public void ToString(StringBuilder output) {
FILE: SaintCoinach/Text/Expressions/SurroundedExpression.cs
class SurroundedExpression (line 8) | public class SurroundedExpression : IValueExpression {
method SurroundedExpression (line 17) | public SurroundedExpression(object prefix, object value, object suffix) {
method ToString (line 23) | public override string ToString() {
method ToString (line 28) | public void ToString(StringBuilder output) {
FILE: SaintCoinach/Text/IEvaluationFunctionProvider.cs
type IEvaluationFunctionProvider (line 10) | public interface IEvaluationFunctionProvider {
method Compare (line 11) | bool Compare(EvaluationParameters parameters, DecodeExpressionType com...
method EvaluateGenericElement (line 12) | IExpression EvaluateGenericElement(EvaluationParameters parameters, No...
method ToBoolean (line 13) | bool ToBoolean(IExpression value);
method TryConvertToInteger (line 15) | bool TryConvertToInteger(IExpression value, out int result);
method ToInteger (line 16) | int ToInteger(IExpression value);
FILE: SaintCoinach/Text/IExpression.cs
type IExpression (line 8) | public interface IExpression {
method ToString (line 9) | void ToString(StringBuilder output);
FILE: SaintCoinach/Text/INode.cs
type INode (line 8) | public interface INode {
method ToString (line 11) | void ToString(StringBuilder builder);
method Accept (line 12) | T Accept<T>(SaintCoinach.Text.Nodes.INodeVisitor<T> visitor);
FILE: SaintCoinach/Text/IntegerType.cs
type IntegerType (line 8) | public enum IntegerType {
FILE: SaintCoinach/Text/NodeFlags.cs
type NodeFlags (line 8) | [Flags]
FILE: SaintCoinach/Text/Nodes/ArgumentCollection.cs
class ArgumentCollection (line 8) | public class ArgumentCollection : IEnumerable<INode> {
method ArgumentCollection (line 14) | public ArgumentCollection(IEnumerable<INode> items) {
method ToString (line 21) | public override string ToString() {
method ToString (line 26) | public void ToString(StringBuilder builder) {
method GetEnumerator (line 40) | public IEnumerator<INode> GetEnumerator() {
method GetEnumerator (line 48) | System.Collections.IEnumerator System.Collections.IEnumerable.GetEnume...
FILE: SaintCoinach/Text/Nodes/CloseTag.cs
class CloseTag (line 8) | public class CloseTag : IExpressionNode {
method CloseTag (line 14) | public CloseTag(TagType tag) {
method ToString (line 18) | public override string ToString() {
method ToString (line 23) | public void ToString(StringBuilder builder) {
method Accept (line 30) | public T Accept<T>(SaintCoinach.Text.Nodes.INodeVisitor<T> visitor) {
method Evaluate (line 36) | public IExpression Evaluate(EvaluationParameters parameters) {
FILE: SaintCoinach/Text/Nodes/Comparison.cs
class Comparison (line 8) | public class Comparison : INode, IExpressionNode {
method Comparison (line 19) | public Comparison(DecodeExpressionType comparisonType, INode left, INo...
method ToString (line 25) | public override string ToString() {
method ToString (line 30) | public void ToString(StringBuilder builder) {
method Accept (line 41) | public T Accept<T>(SaintCoinach.Text.Nodes.INodeVisitor<T> visitor) {
method Evaluate (line 47) | public IExpression Evaluate(EvaluationParameters parameters) {
FILE: SaintCoinach/Text/Nodes/DefaultElement.cs
class DefaultElement (line 8) | public class DefaultElement : INode {
method DefaultElement (line 16) | public DefaultElement(TagType tag, byte[] innerBuffer) {
method ToString (line 21) | public override string ToString() {
method ToString (line 26) | public void ToString(StringBuilder builder) {
method Accept (line 44) | public T Accept<T>(SaintCoinach.Text.Nodes.INodeVisitor<T> visitor) {
FILE: SaintCoinach/Text/Nodes/EmptyElement.cs
class EmptyElement (line 8) | public class EmptyElement : INode {
method EmptyElement (line 14) | public EmptyElement(TagType tag) {
method ToString (line 18) | public override string ToString() {
method ToString (line 23) | public void ToString(StringBuilder builder) {
method Accept (line 30) | public T Accept<T>(SaintCoinach.Text.Nodes.INodeVisitor<T> visitor) {
FILE: SaintCoinach/Text/Nodes/GenericElement.cs
class GenericElement (line 8) | public class GenericElement : INode, INodeWithChildren, INodeWithArgumen...
method GenericElement (line 27) | public GenericElement(TagType tag, INode content, params INode[] argum...
method GenericElement (line 28) | public GenericElement(TagType tag, INode content, IEnumerable<INode> a...
method ToString (line 34) | public override string ToString() {
method ToString (line 39) | public void ToString(StringBuilder builder) {
method Accept (line 60) | public T Accept<T>(SaintCoinach.Text.Nodes.INodeVisitor<T> visitor) {
method Evaluate (line 74) | public IExpression Evaluate(EvaluationParameters parameters) {
FILE: SaintCoinach/Text/Nodes/IConditionalNode.cs
type IConditionalNode (line 8) | public interface IConditionalNode : IExpressionNode {
FILE: SaintCoinach/Text/Nodes/IExpressionNode.cs
type IExpressionNode (line 8) | public interface IExpressionNode : INode {
method Evaluate (line 9) | IExpression Evaluate(EvaluationParameters parameters);
FILE: SaintCoinach/Text/Nodes/INodeVisitor.cs
type INodeVisitor (line 8) | public interface INodeVisitor<T> {
method Visit (line 9) | T Visit(XivString xivString);
method Visit (line 10) | T Visit(OpenTag openTag);
method Visit (line 11) | T Visit(CloseTag closeTag);
method Visit (line 12) | T Visit(IfElement ifElement);
method Visit (line 13) | T Visit(GenericElement genericElement);
method Visit (line 14) | T Visit(EmptyElement emptyElement);
method Visit (line 15) | T Visit(DefaultElement defaultElement);
method Visit (line 16) | T Visit(Comparison comparison);
method Visit (line 17) | T Visit(TopLevelParameter topLevelParameter);
method Visit (line 18) | T Visit(SwitchElement switchElement);
method Visit (line 19) | T Visit(StaticString staticString);
method Visit (line 20) | T Visit(StaticInteger staticInteger);
method Visit (line 21) | T Visit(StaticByteArray staticByteArray);
method Visit (line 22) | T Visit(Parameter parameter);
FILE: SaintCoinach/Text/Nodes/INodeWithArguments.cs
type INodeWithArguments (line 8) | public interface INodeWithArguments : INode {
FILE: SaintCoinach/Text/Nodes/INodeWithChildren.cs
type INodeWithChildren (line 8) | public interface INodeWithChildren : INode {
FILE: SaintCoinach/Text/Nodes/IStaticNode.cs
type IStaticNode (line 8) | public interface IStaticNode : INode {
FILE: SaintCoinach/Text/Nodes/IfElement.cs
class IfElement (line 8) | public class IfElement : INode, IConditionalNode {
method IfElement (line 20) | public IfElement(TagType tag, INode condition, INode trueValue, INode ...
method ToString (line 29) | public override string ToString() {
method ToString (line 34) | public void ToString(StringBuilder builder) {
method Accept (line 56) | public T Accept<T>(SaintCoinach.Text.Nodes.INodeVisitor<T> visitor) {
method Evaluate (line 62) | public IExpression Evaluate(EvaluationParameters parameters) {
FILE: SaintCoinach/Text/Nodes/IfEqualsElement.cs
class IfEqualsElement (line 8) | public class IfEqualsElement : IfElement {
method IfEqualsElement (line 9) | public IfEqualsElement(TagType tag, INode leftValue, INode rightValue,...
FILE: SaintCoinach/Text/Nodes/OpenTag.cs
class OpenTag (line 8) | public class OpenTag : INode, IExpressionNode {
method OpenTag (line 16) | public OpenTag(TagType tag, params INode[] arguments) : this(tag, (IEn...
method OpenTag (line 17) | public OpenTag(TagType tag, IEnumerable<INode> arguments) {
method ToString (line 22) | public override string ToString() {
method ToString (line 27) | public void ToString(StringBuilder builder) {
method Accept (line 36) | public T Accept<T>(SaintCoinach.Text.Nodes.INodeVisitor<T> visitor) {
method Evaluate (line 42) | public IExpression Evaluate(EvaluationParameters parameters) {
FILE: SaintCoinach/Text/Nodes/Parameter.cs
class Parameter (line 8) | public class Parameter : INode, IExpressionNode {
method Parameter (line 17) | public Parameter(DecodeExpressionType parameterType, INode parameterIn...
method ToString (line 24) | public override string ToString() {
method ToString (line 29) | public void ToString(StringBuilder builder) {
method Accept (line 36) | public T Accept<T>(SaintCoinach.Text.Nodes.INodeVisitor<T> visitor) {
method Evaluate (line 42) | public IExpression Evaluate(EvaluationParameters parameters) {
FILE: SaintCoinach/Text/Nodes/StaticByteArray.cs
class StaticByteArray (line 8) | public class StaticByteArray : INode, IStaticNode {
method StaticByteArray (line 15) | public StaticByteArray(byte[] value) {
method ToString (line 19) | public override string ToString() {
method ToString (line 24) | public void ToString(StringBuilder builder) {
method Accept (line 29) | public T Accept<T>(SaintCoinach.Text.Nodes.INodeVisitor<T> visitor) {
FILE: SaintCoinach/Text/Nodes/StaticInteger.cs
class StaticInteger (line 8) | public class StaticInteger : IStaticNode {
method StaticInteger (line 15) | public StaticInteger(int value) {
method ToString (line 19) | public override string ToString() {
method ToString (line 22) | public void ToString(StringBuilder builder) {
method Accept (line 26) | public T Accept<T>(SaintCoinach.Text.Nodes.INodeVisitor<T> visitor) {
FILE: SaintCoinach/Text/Nodes/StaticString.cs
class StaticString (line 8) | public class StaticString : IStaticNode {
method StaticString (line 15) | public StaticString(string value) {
method ToString (line 19) | public override string ToString() {
method ToString (line 22) | public void ToString(StringBuilder builder) {
method Accept (line 26) | public T Accept<T>(SaintCoinach.Text.Nodes.INodeVisitor<T> visitor) {
FILE: SaintCoinach/Text/Nodes/SwitchElement.cs
class SwitchElement (line 9) | public class SwitchElement : INode, IExpressionNode {
method SwitchElement (line 19) | public SwitchElement(TagType tag, INode caseSwitch, IDictionary<int, I...
method ToString (line 29) | public override string ToString() {
method ToString (line 34) | public void ToString(StringBuilder builder) {
method Accept (line 64) | public T Accept<T>(SaintCoinach.Text.Nodes.INodeVisitor<T> visitor) {
method Evaluate (line 70) | public IExpression Evaluate(EvaluationParameters parameters) {
FILE: SaintCoinach/Text/Nodes/TopLevelParameter.cs
class TopLevelParameter (line 8) | public class TopLevelParameter : INode, IExpressionNode {
method TopLevelParameter (line 13) | public TopLevelParameter(int value) {
method Evaluate (line 19) | public IExpression Evaluate(EvaluationParameters parameters) {
method ToString (line 31) | public override string ToString() {
method ToString (line 36) | public void ToString(StringBuilder builder) {
method Accept (line 43) | public T Accept<T>(SaintCoinach.Text.Nodes.INodeVisitor<T> visitor) {
FILE: SaintCoinach/Text/Parameters/ObjectParameters.cs
class ObjectParameters (line 8) | public class ObjectParameters : ParameterBase {
method ObjectParameters (line 14) | public ObjectParameters() { }
method ObjectParameters (line 15) | public ObjectParameters(ParameterBase copyFrom) : base(copyFrom) { }
FILE: SaintCoinach/Text/Parameters/ParameterBase.cs
class ParameterBase (line 8) | public class ParameterBase {
method ParameterBase (line 19) | public ParameterBase() {
method ParameterBase (line 22) | public ParameterBase(ParameterBase copyFrom) {
method Clear (line 30) | public void Clear() {
method Remove (line 33) | public bool Remove(int index) {
FILE: SaintCoinach/Text/Parameters/PlayerParameters.cs
class PlayerParameters (line 10) | public class PlayerParameters : ParameterBase {
method PlayerParameters (line 18) | public PlayerParameters() { }
method PlayerParameters (line 19) | public PlayerParameters(ParameterBase copyFrom) : base(copyFrom) { }
FILE: SaintCoinach/Text/Processor/Expressions/EmptyExpression.cs
class EmptyExpression (line 8) | public class EmptyExpression : IExpression {
FILE: SaintCoinach/Text/Processor/Expressions/ExpressionCollection.cs
class ExpressionCollection (line 8) | public class ExpressionCollection : List<IExpression>, IExpression {
FILE: SaintCoinach/Text/Processor/Expressions/StaticExpression.cs
class StaticExpression (line 8) | public class StaticExpression : IExpression {
method StaticExpression (line 13) | public StaticExpression(object value) {
FILE: SaintCoinach/Text/Processor/IExpression.cs
type IExpression (line 8) | public interface IExpression {
FILE: SaintCoinach/Text/StringTokens.cs
class StringTokens (line 8) | public static class StringTokens {
FILE: SaintCoinach/Text/TagType.cs
type TagType (line 8) | public enum TagType : byte {
FILE: SaintCoinach/Text/XivString.cs
class XivString (line 10) | public class XivString : INode, IExpressionNode, INodeWithChildren, ICom...
method XivString (line 29) | public XivString(params INode[] children) : this((IEnumerable<INode>)c...
method XivString (line 30) | public XivString(IEnumerable<INode> children) {
method ToString (line 34) | public override string ToString() {
method ToString (line 47) | public void ToString(StringBuilder builder) {
method GetHashCode (line 56) | public override int GetHashCode() {
method Equals (line 59) | public override bool Equals(object obj) {
method CompareTo (line 105) | public int CompareTo(object obj) {
method CompareTo (line 119) | public int CompareTo(XivString other) {
method CompareTo (line 127) | public int CompareTo(string other) {
method Equals (line 135) | public bool Equals(XivString other) {
method Equals (line 143) | public bool Equals(string other) {
method Evaluate (line 151) | public IExpression Evaluate(EvaluationParameters parameters) {
method Accept (line 157) | public T Accept<T>(SaintCoinach.Text.Nodes.INodeVisitor<T> visitor) {
FILE: SaintCoinach/Text/XivStringDecoder.cs
class XivStringDecoder (line 11) | public class XivStringDecoder {
method XivStringDecoder (line 53) | public XivStringDecoder() {
method SetDecoder (line 87) | public void SetDecoder(TagType tag, TagDecoder decoder) {
method Decode (line 96) | public XivString Decode(byte[] buffer) {
method Decode (line 102) | public XivString Decode(BinaryReader input, int length) {
method DecodeTag (line 128) | private INode DecodeTag(BinaryReader input) {
method AddStatic (line 148) | private void AddStatic(List<byte> pending, List<INode> targetParts) {
method DecodeTagDefault (line 157) | protected INode DecodeTagDefault(BinaryReader input, TagType tag, int ...
method DecodeExpression (line 160) | protected INode DecodeExpression(BinaryReader input) {
method DecodeExpression (line 164) | protected INode DecodeExpression(BinaryReader input, DecodeExpressionT...
method DecodeGenericElement (line 225) | protected INode DecodeGenericElement(BinaryReader input, TagType tag, ...
method DecodeGenericElementWithVariableArguments (line 240) | protected INode DecodeGenericElementWithVariableArguments(BinaryReader...
method DecodeGenericSurroundingTag (line 247) | protected INode DecodeGenericSurroundingTag(BinaryReader input, TagTyp...
method DecodeZeroPaddedValue (line 260) | protected INode DecodeZeroPaddedValue(BinaryReader input, TagType tag,...
method DecodeColor (line 265) | protected INode DecodeColor(BinaryReader input, TagType tag, int lengt...
method DecodeFormat (line 272) | protected INode DecodeFormat(BinaryReader input, TagType tag, int leng...
method DecodeIf (line 279) | protected INode DecodeIf(BinaryReader input, TagType tag, int length) {
method DecodeIfEquals (line 293) | protected INode DecodeIfEquals(BinaryReader input, TagType tag, int le...
method DecodeConditionalOutputs (line 309) | protected void DecodeConditionalOutputs(BinaryReader input, int end, o...
method DecodeSwitch (line 328) | protected INode DecodeSwitch(BinaryReader input, TagType tag, int leng...
method GetInteger (line 342) | protected static int GetInteger(BinaryReader input) {
method GetInteger (line 347) | protected static int GetInteger(BinaryReader input, IntegerType type) {
FILE: SaintCoinach/UpdateReport.cs
class UpdateReport (line 13) | public class UpdateReport {
method UpdateReport (line 44) | public UpdateReport(string previousVersion, string updatedVersion, IEn...
method ToJson (line 54) | public JObject ToJson() {
FILE: SaintCoinach/Xiv/Achievement.cs
class Achievement (line 5) | public class Achievement : XivRow, IItemSource {
method Achievement (line 23) | public Achievement(IXivSheet sheet, IRelationalRow sourceRow) : base(s...
method ToString (line 29) | public override string ToString() {
FILE: SaintCoinach/Xiv/AchievementCategory.cs
class AchievementCategory (line 4) | public class AchievementCategory : XivRow {
method AchievementCategory (line 16) | public AchievementCategory(IXivSheet sheet, IRelationalRow sourceRow) ...
method ToString (line 22) | public override string ToString() {
FILE: SaintCoinach/Xiv/AchievementKind.cs
class AchievementKind (line 4) | public class AchievementKind : XivRow {
method AchievementKind (line 15) | public AchievementKind(IXivSheet sheet, IRelationalRow sourceRow) : ba...
method ToString (line 21) | public override string ToString() {
FILE: SaintCoinach/Xiv/Action.cs
class Action (line 6) | public class Action : ClassJobActionBase {
method Action (line 40) | public Action(IXivSheet sheet, IRelationalRow sourceRow) : base(sheet,...
method GetMpCost (line 48) | public int GetMpCost(int level) {
FILE: SaintCoinach/Xiv/ActionBase.cs
class ActionBase (line 10) | public abstract class ActionBase : XivRow {
method ActionBase (line 27) | protected ActionBase(IXivSheet sheet, IRelationalRow sourceRow) : base...
method ToString (line 31) | public override string ToString() {
FILE: SaintCoinach/Xiv/ActionCategory.cs
class ActionCategory (line 4) | public class ActionCategory : XivRow {
method ActionCategory (line 15) | public ActionCategory(IXivSheet sheet, IRelationalRow sourceRow) : bas...
method ToString (line 21) | public override string ToString() {
FILE: SaintCoinach/Xiv/ActionTransient.cs
class ActionTransient (line 10) | public class ActionTransient : XivRow
method ActionTransient (line 16) | public ActionTransient(IXivSheet sheet, IRelationalRow sourceRow) : ba...
FILE: SaintCoinach/Xiv/Addon.cs
class Addon (line 4) | public class Addon : XivRow {
method Addon (line 15) | public Addon(IXivSheet sheet, IRelationalRow sourceRow) : base(sheet, ...
method ToString (line 21) | public override string ToString() {
FILE: SaintCoinach/Xiv/Adventure.cs
class Adventure (line 7) | public class Adventure : XivRow, ILocatable {
method Adventure (line 40) | public Adventure(IXivSheet sheet, IRelationalRow sourceRow) : base(she...
method ToString (line 46) | public override string ToString() {
FILE: SaintCoinach/Xiv/AetherCurrent.cs
class AetherCurrent (line 8) | [Obsolete("Replaced by QuestRewardOther.")]
method AetherCurrent (line 43) | public AetherCurrent(IXivSheet sheet, SaintCoinach.Ex.Relational.IRela...
FILE: SaintCoinach/Xiv/AirshipExplorationLevel.cs
class AirshipExplorationLevel (line 8) | public class AirshipExplorationLevel : XivRow {
method AirshipExplorationLevel (line 17) | public AirshipExplorationLevel(IXivSheet sheet, SaintCoinach.Ex.Relati...
FILE: SaintCoinach/Xiv/AirshipExplorationLog.cs
class AirshipExplorationLog (line 8) | public class AirshipExplorationLog : XivRow {
method AirshipExplorationLog (line 17) | public AirshipExplorationLog(IXivSheet sheet, SaintCoinach.Ex.Relation...
method ToString (line 21) | public override string ToString() {
FILE: SaintCoinach/Xiv/AirshipExplorationParamType.cs
class AirshipExplorationParamType (line 8) | public class AirshipExplorationParamType : XivRow {
method AirshipExplorationParamType (line 17) | public AirshipExplorationParamType(IXivSheet sheet, SaintCoinach.Ex.Re...
method ToString (line 21) | public override string ToString() {
FILE: SaintCoinach/Xiv/AirshipExplorationPoint.cs
class AirshipExplorationPoint (line 8) | public class AirshipExplorationPoint : XivRow {
method AirshipExplorationPoint (line 26) | public AirshipExplorationPoint(IXivSheet sheet, SaintCoinach.Ex.Relati...
FILE: SaintCoinach/Xiv/BGM.cs
class BGM (line 5) | public class BGM : XivRow {
method BGM (line 16) | public BGM(IXivSheet sheet, IRelationalRow sourceRow) : base(sheet, so...
method ToString (line 22) | public override string ToString() {
FILE: SaintCoinach/Xiv/BNpc.cs
class BNpc (line 14) | public class BNpc : ILocatable, IItemSource {
method BNpc (line 80) | public BNpc(Collections.BNpcCollection collection, Libra.BNpcName libr...
method BuildLocations (line 91) | private BNpcLocation[] BuildLocations(Libra.BNpcName libraRow) {
method BuildItems (line 114) | private Item[] BuildItems(Libra.BNpcName libraRow) {
method BuildInstanceContents (line 125) | private InstanceContent[] BuildInstanceContents(Libra.BNpcName libraRo...
method ToString (line 137) | public override string ToString() {
FILE: SaintCoinach/Xiv/BNpcBase.cs
class BNpcBase (line 10) | public class BNpcBase : XivRow {
method BNpcBase (line 45) | public BNpcBase(IXivSheet sheet, IRelationalRow sourceRow) : base(shee...
FILE: SaintCoinach/Xiv/BNpcData.cs
class BNpcData (line 11) | public class BNpcData {
method BNpcData (line 18) | public BNpcData(XivCollection collection, Libra.BNpcName libraRow) {
FILE: SaintCoinach/Xiv/BNpcLocation.cs
class BNpcLocation (line 8) | public class BNpcLocation : ILocation {
method BNpcLocation (line 23) | public BNpcLocation(PlaceName regionPlaceName, PlaceName placeName, in...
FILE: SaintCoinach/Xiv/BNpcName.cs
class BNpcName (line 7) | public class BNpcName : XivRow, ILocatable, IItemSource, IQuantifiableXi...
method BNpcName (line 35) | public BNpcName(IXivSheet sheet, IRelationalRow sourceRow) : base(shee...
method ToString (line 39) | public override string ToString() {
FILE: SaintCoinach/Xiv/BaseParam.cs
class BaseParam (line 9) | public class BaseParam : XivRow {
method BaseParam (line 32) | public BaseParam(IXivSheet sheet, IRelationalRow sourceRow) : base(she...
method ToString (line 41) | public override string ToString() {
method GetMaximum (line 52) | public int GetMaximum(EquipSlotCategory category) {
method GetModifier (line 62) | public int GetModifier(int role) {
FILE: SaintCoinach/Xiv/BeastReputationRank.cs
class BeastReputationRank (line 4) | public class BeastReputationRank : XivRow {
method BeastReputationRank (line 16) | public BeastReputationRank(IXivSheet sheet, IRelationalRow sourceRow) ...
method ToString (line 22) | public override string ToString() {
FILE: SaintCoinach/Xiv/BeastTribe.cs
class BeastTribe (line 5) | public class BeastTribe : XivRow {
method BeastTribe (line 19) | public BeastTribe(IXivSheet sheet, IRelationalRow sourceRow) : base(sh...
method ToString (line 25) | public override string ToString() {
FILE: SaintCoinach/Xiv/BuddyAction.cs
class BuddyAction (line 5) | public class BuddyAction : XivRow {
method BuddyAction (line 19) | public BuddyAction(IXivSheet sheet, IRelationalRow sourceRow) : base(s...
method ToString (line 25) | public override string ToString() {
FILE: SaintCoinach/Xiv/BuddyEquip.cs
class BuddyEquip (line 5) | public class BuddyEquip : XivRow, IQuantifiableXivString {
method BuddyEquip (line 22) | public BuddyEquip(IXivSheet sheet, IRelationalRow sourceRow) : base(sh...
method ToString (line 28) | public override string ToString() {
FILE: SaintCoinach/Xiv/CharaMakeCustomize.cs
class CharaMakeCustomize (line 5) | public class CharaMakeCustomize : XivRow, IXivRow {
method CharaMakeCustomize (line 13) | public CharaMakeCustomize(IXivSheet sheet, IRelationalRow sourceRow) :...
FILE: SaintCoinach/Xiv/CharaMakeType.cs
class CharaMakeType (line 6) | public class CharaMakeType : XivRow, IXivRow {
method CharaMakeType (line 16) | public CharaMakeType(IXivSheet sheet, IRelationalRow sourceRow) : base...
method BuildItems (line 18) | private CharaMakeFeatureIcon[] BuildItems() {
class CharaMakeFeatureIcon (line 31) | public class CharaMakeFeatureIcon {
method CharaMakeFeatureIcon (line 34) | public CharaMakeFeatureIcon(ImageFile image, int count) {
FILE: SaintCoinach/Xiv/ChocoboRace.cs
class ChocoboRace (line 10) | public class ChocoboRace : XivRow {
method ChocoboRace (line 20) | public ChocoboRace(IXivSheet sheet, IRelationalRow sourceRow) : base(s...
method ToString (line 24) | public override string ToString() {
FILE: SaintCoinach/Xiv/ChocoboRaceAbility.cs
class ChocoboRaceAbility (line 10) | public class ChocoboRaceAbility : ActionBase {
method ChocoboRaceAbility (line 20)
Condensed preview — 1641 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,642K chars).
[
{
"path": ".editorconfig",
"chars": 112,
"preview": "root = true\n\n# Code\n[*.cs]\nindent_size = 4\nindent_style = space\ncsharp_new_line_before_open_brace = all:warning\n"
},
{
"path": ".gitattributes",
"chars": 483,
"preview": "# Auto detect text files and perform LF normalization\n* text=auto\n\n# Custom for Visual Studio\n*.cs diff=csharp\n*.sln"
},
{
"path": ".github/RELEASE.md",
"chars": 154,
"preview": "This is an automated SaintCoinach release based on recent changes.\n\nPlease note that your Anti-Virus program may detect "
},
{
"path": ".github/workflows/build.yml",
"chars": 1441,
"preview": "name: Build SaintCoinach\non: [push, pull_request]\nconcurrency: build-${{ github.ref }}\n\njobs:\n build:\n name: Build o"
},
{
"path": ".github/workflows/json-validation.yaml",
"chars": 472,
"preview": "name: Validate ex JSON definitions\n# This workflow is triggered on pushes to the repository.\non: [push, pull_request]\n\nj"
},
{
"path": ".gitignore",
"chars": 3375,
"preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User"
},
{
"path": "DotSquish/Alpha.cs",
"chars": 10317,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nna"
},
{
"path": "DotSquish/ClusterFit.cs",
"chars": 4765,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nna"
},
{
"path": "DotSquish/ColourBlock.cs",
"chars": 2650,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nna"
},
{
"path": "DotSquish/ColourFit.cs",
"chars": 1000,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nna"
},
{
"path": "DotSquish/ColourSet.cs",
"chars": 4020,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Thr"
},
{
"path": "DotSquish/DotSquish.csproj",
"chars": 668,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n <PropertyGroup>\n <ProjectGuid>{F9681545-4BEA-4FD3-9AB9-A67BD37AB36D}</ProjectGui"
},
{
"path": "DotSquish/Flags.cs",
"chars": 2182,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nna"
},
{
"path": "DotSquish/Maths.cs",
"chars": 11309,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nna"
},
{
"path": "DotSquish/Squish.cs",
"chars": 7058,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing System.Drawing.Imaging;\nusing System.IO;\nus"
},
{
"path": "Godbert/App.config",
"chars": 1232,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n <configSections>\n <sectionGroup name=\"userSettings\" ty"
},
{
"path": "Godbert/App.xaml",
"chars": 308,
"preview": "<Application x:Class=\"Godbert.App\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n "
},
{
"path": "Godbert/App.xaml.cs",
"chars": 3395,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Configuration;\nusing System.Data;\nusing System.IO;\nusing S"
},
{
"path": "Godbert/Commands/DelegateCommand.cs",
"chars": 1586,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nna"
},
{
"path": "Godbert/Controls/AttachedImage.cs",
"chars": 5367,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;"
},
{
"path": "Godbert/Controls/ColumnFactory.cs",
"chars": 3634,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "Godbert/Controls/INavigatable.cs",
"chars": 333,
"preview": "using SaintCoinach.Ex;\nusing SaintCoinach.Ex.Relational;\nusing System;\nusing System.Collections.Generic;\nusing System.L"
},
{
"path": "Godbert/Controls/IRawDataColumn.cs",
"chars": 358,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "Godbert/Controls/RawDataGrid.cs",
"chars": 8434,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "Godbert/Controls/RawDataGridColorColumn.cs",
"chars": 4747,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "Godbert/Controls/RawDataGridImageColumn.cs",
"chars": 4366,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "Godbert/Controls/RawDataGridKeyColumn.cs",
"chars": 1701,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nus"
},
{
"path": "Godbert/Controls/RawDataGridTextColumn.cs",
"chars": 3619,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "Godbert/Controls/RawDataItemsSource.cs",
"chars": 4436,
"preview": "using System;\nusing System.Collections;\nusing System.Collections.Concurrent;\nusing System.Collections.Generic;\nusing Sy"
},
{
"path": "Godbert/EngineHelper.cs",
"chars": 3202,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading;\nusing Sys"
},
{
"path": "Godbert/EngineInstance.cs",
"chars": 4844,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading;\nusing Sys"
},
{
"path": "Godbert/Godbert.csproj",
"chars": 1745,
"preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n <PropertyGroup>\n <ProjectGuid>{6A5DA7FF-791E-4A43-BF65-B6942917F7D9}</ProjectGui"
},
{
"path": "Godbert/MainWindow.xaml",
"chars": 4328,
"preview": "<Window x:Class=\"Godbert.MainWindow\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n "
},
{
"path": "Godbert/MainWindow.xaml.cs",
"chars": 1421,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Text;\nusin"
},
{
"path": "Godbert/Models/ModelCharaHierarchy.cs",
"chars": 2036,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nus"
},
{
"path": "Godbert/Models/ModelCharaMain.cs",
"chars": 1903,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nna"
},
{
"path": "Godbert/Models/ModelCharaSub.cs",
"chars": 1774,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nna"
},
{
"path": "Godbert/Models/ModelCharaVariant.cs",
"chars": 760,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nna"
},
{
"path": "Godbert/NaturalComparer.cs",
"chars": 2188,
"preview": "// Taken from http://www.codeproject.com/Articles/22517/Natural-Sort-Comparer\n// Modified to allow for different StringC"
},
{
"path": "Godbert/ObservableBase.cs",
"chars": 1138,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Linq.Expre"
},
{
"path": "Godbert/Properties/AssemblyInfo.cs",
"chars": 1649,
"preview": "using System.Reflection;\nusing System.Resources;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropSer"
},
{
"path": "Godbert/Properties/Resources.Designer.cs",
"chars": 2778,
"preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n// This code w"
},
{
"path": "Godbert/Properties/Resources.resx",
"chars": 5494,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <!-- \n Microsoft ResX Schema \n \n Version 2.0\n \n The prim"
},
{
"path": "Godbert/Properties/Settings.Designer.cs",
"chars": 1481,
"preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n// This code w"
},
{
"path": "Godbert/Properties/Settings.settings",
"chars": 396,
"preview": "<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\""
},
{
"path": "Godbert/Settings.cs",
"chars": 1696,
"preview": "using Newtonsoft.Json;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System"
},
{
"path": "Godbert/ViewModels/BookmarkViewModel.cs",
"chars": 1418,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\n\nna"
},
{
"path": "Godbert/ViewModels/DataViewModel.cs",
"chars": 7214,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.IO;\nusing System.Lin"
},
{
"path": "Godbert/ViewModels/DemihumanViewModel.cs",
"chars": 10843,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "Godbert/ViewModels/EquipmentViewModel.cs",
"chars": 5367,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "Godbert/ViewModels/FurnitureViewModel.cs",
"chars": 5797,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "Godbert/ViewModels/MainViewModel.cs",
"chars": 6766,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Thr"
},
{
"path": "Godbert/ViewModels/MapsViewModel.cs",
"chars": 2582,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "Godbert/ViewModels/MonstersViewModel.cs",
"chars": 15410,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Text;\nusing System.Thr"
},
{
"path": "Godbert/ViewModels/TerritoryViewModel.cs",
"chars": 29467,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows.Input;\nusing SaintCoinach.Graph"
},
{
"path": "Godbert/Views/DataView.xaml",
"chars": 4762,
"preview": "<UserControl x:Class=\"Godbert.Views.DataView\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presenta"
},
{
"path": "Godbert/Views/DataView.xaml.cs",
"chars": 3061,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "Godbert/Views/DemihumansView.xaml",
"chars": 3914,
"preview": "<UserControl x:Class=\"Godbert.Views.DemihumansView\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/pr"
},
{
"path": "Godbert/Views/DemihumansView.xaml.cs",
"chars": 897,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "Godbert/Views/EquipmentView.xaml",
"chars": 2187,
"preview": "<UserControl x:Class=\"Godbert.Views.EquipmentView\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/pre"
},
{
"path": "Godbert/Views/EquipmentView.xaml.cs",
"chars": 637,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "Godbert/Views/FurnitureView.xaml",
"chars": 2176,
"preview": "<UserControl x:Class=\"Godbert.Views.FurnitureView\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/pre"
},
{
"path": "Godbert/Views/FurnitureView.xaml.cs",
"chars": 637,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "Godbert/Views/Help3DView.xaml",
"chars": 3913,
"preview": "<UserControl x:Class=\"Godbert.Views.Help3DView\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presen"
},
{
"path": "Godbert/Views/Help3DView.xaml.cs",
"chars": 628,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "Godbert/Views/MapsView.xaml",
"chars": 1028,
"preview": "<UserControl x:Class=\"Godbert.Views.MapsView\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presenta"
},
{
"path": "Godbert/Views/MapsView.xaml.cs",
"chars": 622,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "Godbert/Views/MonstersView.xaml",
"chars": 3268,
"preview": "<UserControl x:Class=\"Godbert.Views.MonstersView\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/pres"
},
{
"path": "Godbert/Views/MonstersView.xaml.cs",
"chars": 885,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "Godbert/Views/TerritoryView.xaml",
"chars": 1667,
"preview": "<UserControl x:Class=\"Godbert.Views.TerritoryView\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/pre"
},
{
"path": "Godbert/Views/TerritoryView.xaml.cs",
"chars": 637,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "Godbert/WpfHelper.cs",
"chars": 606,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "LICENSE",
"chars": 482,
"preview": " DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE\n Version 2, December 2004\n\n Copyright (C) 200"
},
{
"path": "NewAdditionsByPatch.txt",
"chars": 2777,
"preview": "\n Channeling.json:\n{\n \"index\": 2,\n \"name\": \"AddedIn{5-3}\"\n}\n\n\n\n ContentFinderCondition.json:\n {\n \"index\": 19,\n \"na"
},
{
"path": "README.md",
"chars": 7460,
"preview": "# Saint Coinach\n\nA .NET library written in C# for extracting game assets and reading game assets from **Final Fantasy XI"
},
{
"path": "SaintCoinach/ARealmReversed.cs",
"chars": 19680,
"preview": "using System;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.Serialization.Formatte"
},
{
"path": "SaintCoinach/ByteArrayExtensions.cs",
"chars": 1829,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime;\nusing System.Runtime.InteropSe"
},
{
"path": "SaintCoinach/Definitions/AOZArrangement.json",
"chars": 259,
"preview": "{\n \"sheet\": \"AOZArrangement\",\n \"definitions\": [\n {\n \"name\": \"AOZContentBriefingBNpc\",\n \"converter\": {\n "
},
{
"path": "SaintCoinach/Definitions/AOZBoss.json",
"chars": 261,
"preview": "{\n \"sheet\": \"AOZBoss\",\n \"defaultColumn\": \"Boss\",\n \"definitions\": [\n {\n \"name\": \"Boss\",\n \"converter\": {\n "
},
{
"path": "SaintCoinach/Definitions/AOZContent.json",
"chars": 2767,
"preview": "{\n \"sheet\": \"AOZContent\",\n \"definitions\": [\n {\n \"name\": \"StandardFinishTime\"\n },\n {\n \"index\": 1,\n "
},
{
"path": "SaintCoinach/Definitions/AOZContentBriefingBNpc.json",
"chars": 1693,
"preview": "{\n \"sheet\": \"AOZContentBriefingBNpc\",\n \"defaultColumn\": \"BNpcName\",\n \"definitions\": [\n {\n \"name\": \"BNpcName\","
},
{
"path": "SaintCoinach/Definitions/AOZContentBriefingObject.json",
"chars": 151,
"preview": "{\n \"sheet\": \"AOZContentBriefingObject\",\n \"definitions\": [\n {\n \"name\": \"Icon\",\n \"converter\": {\n \"ty"
},
{
"path": "SaintCoinach/Definitions/AOZReport.json",
"chars": 246,
"preview": "{\n \"sheet\": \"AOZReport\",\n \"definitions\": [\n {\n \"index\": 1,\n \"name\": \"Reward\",\n \"converter\": {\n "
},
{
"path": "SaintCoinach/Definitions/AOZScore.json",
"chars": 277,
"preview": "{\n \"sheet\": \"AOZScore\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"IsHidden\"\n },\n {\n "
},
{
"path": "SaintCoinach/Definitions/Achievement.json",
"chars": 4420,
"preview": "{\n \"sheet\": \"Achievement\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"AchievementCategory\",\n "
},
{
"path": "SaintCoinach/Definitions/AchievementCategory.json",
"chars": 446,
"preview": "{\n \"sheet\": \"AchievementCategory\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"Name\"\n },\n "
},
{
"path": "SaintCoinach/Definitions/AchievementHideCondition.json",
"chars": 227,
"preview": "{\n \"sheet\": \"AchievementHideCondition\",\n \"definitions\": [\n {\n \"name\": \"HideAchievement\"\n },\n {\n \"in"
},
{
"path": "SaintCoinach/Definitions/AchievementKind.json",
"chars": 169,
"preview": "{\n \"sheet\": \"AchievementKind\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"Name\"\n },\n {\n "
},
{
"path": "SaintCoinach/Definitions/AchievementTarget.json",
"chars": 172,
"preview": "{\n \"sheet\": \"AchievementTarget\",\n \"defaultColumn\": \"Value\",\n \"definitions\": [\n {\n \"name\": \"Type\"\n },\n {"
},
{
"path": "SaintCoinach/Definitions/Action.json",
"chars": 4352,
"preview": "{\n \"sheet\": \"Action\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"Name\"\n },\n {\n \"inde"
},
{
"path": "SaintCoinach/Definitions/ActionCastTimeline.json",
"chars": 337,
"preview": "{\n \"sheet\": \"ActionCastTimeline\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"Name\",\n \"conv"
},
{
"path": "SaintCoinach/Definitions/ActionCastVFX.json",
"chars": 190,
"preview": "{\n \"sheet\": \"ActionCastVFX\",\n \"defaultColumn\": \"VFX\",\n \"definitions\": [\n {\n \"name\": \"VFX\",\n \"converter\":"
},
{
"path": "SaintCoinach/Definitions/ActionCategory.json",
"chars": 115,
"preview": "{\n \"sheet\": \"ActionCategory\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"Name\"\n }\n ]\n}"
},
{
"path": "SaintCoinach/Definitions/ActionComboRoute.json",
"chars": 334,
"preview": "{\n \"sheet\": \"ActionComboRoute\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"Name\"\n },\n {\n "
},
{
"path": "SaintCoinach/Definitions/ActionIndirection.json",
"chars": 486,
"preview": "{\n \"sheet\": \"ActionIndirection\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"Name\",\n \"conve"
},
{
"path": "SaintCoinach/Definitions/ActionParam.json",
"chars": 112,
"preview": "{\n \"sheet\": \"ActionParam\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"Name\"\n }\n ]\n}"
},
{
"path": "SaintCoinach/Definitions/ActionProcStatus.json",
"chars": 202,
"preview": "{\n \"sheet\": \"ActionProcStatus\",\n \"defaultColumn\": \"Status\",\n \"definitions\": [\n {\n \"name\": \"Status\",\n \"co"
},
{
"path": "SaintCoinach/Definitions/ActionTimeline.json",
"chars": 1019,
"preview": "{\n \"sheet\": \"ActionTimeline\",\n \"defaultColumn\": \"Key\",\n \"definitions\": [\n {\n \"name\": \"Type\"\n },\n {\n "
},
{
"path": "SaintCoinach/Definitions/ActionTimelineMove.json",
"chars": 56,
"preview": "{\n \"sheet\": \"ActionTimelineMove\",\n \"definitions\": []\n}"
},
{
"path": "SaintCoinach/Definitions/ActionTimelineReplace.json",
"chars": 323,
"preview": "{\n \"sheet\": \"ActionTimelineReplace\",\n \"definitions\": [\n {\n \"name\": \"Old\",\n \"converter\": {\n \"type\":"
},
{
"path": "SaintCoinach/Definitions/ActionTransient.json",
"chars": 130,
"preview": "{\n \"sheet\": \"ActionTransient\",\n \"defaultColumn\": \"Description\",\n \"definitions\": [\n {\n \"name\": \"Description\"\n "
},
{
"path": "SaintCoinach/Definitions/ActivityFeedButtons.json",
"chars": 289,
"preview": "{\n \"sheet\": \"ActivityFeedButtons\",\n \"definitions\": [\n {\n \"index\": 1,\n \"name\": \"BannerURL\"\n },\n {\n "
},
{
"path": "SaintCoinach/Definitions/ActivityFeedCaptions.json",
"chars": 242,
"preview": "{\n \"sheet\": \"ActivityFeedCaptions\",\n \"definitions\": [\n {\n \"name\": \"JA\"\n },\n {\n \"index\": 1,\n \"n"
},
{
"path": "SaintCoinach/Definitions/ActivityFeedGroupCaptions.json",
"chars": 247,
"preview": "{\n \"sheet\": \"ActivityFeedGroupCaptions\",\n \"definitions\": [\n {\n \"name\": \"JA\"\n },\n {\n \"index\": 1,\n "
},
{
"path": "SaintCoinach/Definitions/ActivityFeedImages.json",
"chars": 350,
"preview": "{\n \"sheet\": \"ActivityFeedImages\",\n \"definitions\": [\n {\n \"name\": \"ExpansionImage\"\n },\n {\n \"index\": 1"
},
{
"path": "SaintCoinach/Definitions/Addon.json",
"chars": 106,
"preview": "{\n \"sheet\": \"Addon\",\n \"defaultColumn\": \"Text\",\n \"definitions\": [\n {\n \"name\": \"Text\"\n }\n ]\n}"
},
{
"path": "SaintCoinach/Definitions/Adventure.json",
"chars": 1264,
"preview": "{\n \"sheet\": \"Adventure\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"Level\",\n \"converter\": "
},
{
"path": "SaintCoinach/Definitions/AdventureExPhase.json",
"chars": 606,
"preview": "{\n \"sheet\": \"AdventureExPhase\",\n \"definitions\": [\n {\n \"name\": \"Quest\",\n \"converter\": {\n \"type\": \"l"
},
{
"path": "SaintCoinach/Definitions/AetherCurrent.json",
"chars": 196,
"preview": "{\n \"sheet\": \"AetherCurrent\",\n \"defaultColumn\": \"Quest\",\n \"definitions\": [\n {\n \"name\": \"Quest\",\n \"convert"
},
{
"path": "SaintCoinach/Definitions/AetherCurrentCompFlgSet.json",
"chars": 422,
"preview": "{\n \"sheet\": \"AetherCurrentCompFlgSet\",\n \"definitions\": [\n {\n \"name\": \"Territory\",\n \"converter\": {\n "
},
{
"path": "SaintCoinach/Definitions/AetherialWheel.json",
"chars": 430,
"preview": "{\n \"sheet\": \"AetherialWheel\",\n \"definitions\": [\n {\n \"name\": \"Item{Unprimed}\",\n \"converter\": {\n \"ty"
},
{
"path": "SaintCoinach/Definitions/Aetheryte.json",
"chars": 1751,
"preview": "{\n \"sheet\": \"Aetheryte\",\n \"defaultColumn\": \"PlaceName\",\n \"definitions\": [\n {\n \"name\": \"Singular\"\n },\n {"
},
{
"path": "SaintCoinach/Definitions/AetheryteSystemDefine.json",
"chars": 181,
"preview": "{\n \"sheet\": \"AetheryteSystemDefine\",\n \"defaultColumn\": \"Text\",\n \"definitions\": [\n {\n \"name\": \"Text\"\n },\n "
},
{
"path": "SaintCoinach/Definitions/AetheryteTransient.json",
"chars": 56,
"preview": "{\n \"sheet\": \"AetheryteTransient\",\n \"definitions\": []\n}"
},
{
"path": "SaintCoinach/Definitions/AirshipExplorationLevel.json",
"chars": 158,
"preview": "{\n \"sheet\": \"AirshipExplorationLevel\",\n \"definitions\": [\n {\n \"name\": \"Capacity\"\n },\n {\n \"index\": 1,"
},
{
"path": "SaintCoinach/Definitions/AirshipExplorationLog.json",
"chars": 122,
"preview": "{\n \"sheet\": \"AirshipExplorationLog\",\n \"defaultColumn\": \"Text\",\n \"definitions\": [\n {\n \"name\": \"Text\"\n }\n ]"
},
{
"path": "SaintCoinach/Definitions/AirshipExplorationParamType.json",
"chars": 128,
"preview": "{\n \"sheet\": \"AirshipExplorationParamType\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"Name\"\n "
},
{
"path": "SaintCoinach/Definitions/AirshipExplorationPart.json",
"chars": 598,
"preview": "{\n \"sheet\": \"AirshipExplorationPart\",\n \"definitions\": [\n {\n \"name\": \"Slot\"\n },\n {\n \"index\": 1,\n "
},
{
"path": "SaintCoinach/Definitions/AirshipExplorationPoint.json",
"chars": 709,
"preview": "{\n \"sheet\": \"AirshipExplorationPoint\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"Name\"\n },\n"
},
{
"path": "SaintCoinach/Definitions/AkatsukiNote.json",
"chars": 50,
"preview": "{\n \"sheet\": \"AkatsukiNote\",\n \"definitions\": []\n}"
},
{
"path": "SaintCoinach/Definitions/AkatsukiNoteString.json",
"chars": 56,
"preview": "{\n \"sheet\": \"AkatsukiNoteString\",\n \"definitions\": []\n}"
},
{
"path": "SaintCoinach/Definitions/AnimaWeapon5.json",
"chars": 462,
"preview": "{\n \"sheet\": \"AnimaWeapon5\",\n \"definitions\": [\n {\n \"name\": \"Item\",\n \"converter\": {\n \"type\": \"link\","
},
{
"path": "SaintCoinach/Definitions/AnimaWeapon5Param.json",
"chars": 264,
"preview": "{\n \"sheet\": \"AnimaWeapon5Param\",\n \"defaultColumn\": \"BaseParam\",\n \"definitions\": [\n {\n \"name\": \"BaseParam\",\n "
},
{
"path": "SaintCoinach/Definitions/AnimaWeapon5PatternGroup.json",
"chars": 125,
"preview": "{\n \"sheet\": \"AnimaWeapon5PatternGroup\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"Name\"\n }\n"
},
{
"path": "SaintCoinach/Definitions/AnimaWeapon5SpiritTalk.json",
"chars": 233,
"preview": "{\n \"sheet\": \"AnimaWeapon5SpiritTalk\",\n \"defaultColumn\": \"Dialogue\",\n \"definitions\": [\n {\n \"name\": \"Dialogue\","
},
{
"path": "SaintCoinach/Definitions/AnimaWeapon5SpiritTalkParam.json",
"chars": 192,
"preview": "{\n \"sheet\": \"AnimaWeapon5SpiritTalkParam\",\n \"defaultColumn\": \"Prologue\",\n \"definitions\": [\n {\n \"name\": \"Prolo"
},
{
"path": "SaintCoinach/Definitions/AnimaWeapon5TradeItem.json",
"chars": 831,
"preview": "{\n \"sheet\": \"AnimaWeapon5TradeItem\",\n \"definitions\": [\n {\n \"index\": 1,\n \"name\": \"CrystalSand\",\n \"con"
},
{
"path": "SaintCoinach/Definitions/AnimaWeaponFUITalk.json",
"chars": 225,
"preview": "{\n \"sheet\": \"AnimaWeaponFUITalk\",\n \"defaultColumn\": \"Dialogue\",\n \"definitions\": [\n {\n \"name\": \"Dialogue\",\n "
},
{
"path": "SaintCoinach/Definitions/AnimaWeaponFUITalkParam.json",
"chars": 188,
"preview": "{\n \"sheet\": \"AnimaWeaponFUITalkParam\",\n \"defaultColumn\": \"Prologue\",\n \"definitions\": [\n {\n \"name\": \"Prologue\""
},
{
"path": "SaintCoinach/Definitions/AnimaWeaponIcon.json",
"chars": 587,
"preview": "{\n \"sheet\": \"AnimaWeaponIcon\",\n \"definitions\": [\n {\n \"name\": \"Hyperconductive\",\n \"converter\": {\n \""
},
{
"path": "SaintCoinach/Definitions/AnimaWeaponItem.json",
"chars": 251,
"preview": "{\n \"sheet\": \"AnimaWeaponItem\",\n \"definitions\": [\n {\n \"type\": \"repeat\",\n \"count\": 14,\n \"definition\": "
},
{
"path": "SaintCoinach/Definitions/AnimationLOD.json",
"chars": 350,
"preview": "{\n \"sheet\": \"AnimationLOD\",\n \"definitions\": [\n {\n \"name\": \"CameraDistance\"\n },\n {\n \"index\": 1,\n "
},
{
"path": "SaintCoinach/Definitions/AozAction.json",
"chars": 247,
"preview": "{\n \"sheet\": \"AozAction\",\n \"defaultColumn\": \"Action\",\n \"definitions\": [\n {\n \"name\": \"Action\",\n \"converter"
},
{
"path": "SaintCoinach/Definitions/AozActionTransient.json",
"chars": 1877,
"preview": "{\n \"sheet\": \"AozActionTransient\",\n \"defaultColumn\": \"Action\",\n \"definitions\": [\n {\n \"name\": \"Number\"\n },\n "
},
{
"path": "SaintCoinach/Definitions/AquariumFish.json",
"chars": 393,
"preview": "{\n \"sheet\": \"AquariumFish\",\n \"defaultColumn\": \"Item\",\n \"definitions\": [\n {\n \"name\": \"AquariumWater\",\n \"c"
},
{
"path": "SaintCoinach/Definitions/AquariumWater.json",
"chars": 132,
"preview": "{\n \"sheet\": \"AquariumWater\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"index\": 1,\n \"name\": \"Name\""
},
{
"path": "SaintCoinach/Definitions/ArchiveItem.json",
"chars": 49,
"preview": "{\n \"sheet\": \"ArchiveItem\",\n \"definitions\": []\n}"
},
{
"path": "SaintCoinach/Definitions/ArrayEventHandler.json",
"chars": 461,
"preview": "{\n \"sheet\": \"ArrayEventHandler\",\n \"definitions\": [\n {\n \"type\": \"repeat\",\n \"count\": 16,\n \"definition\""
},
{
"path": "SaintCoinach/Definitions/AttackType.json",
"chars": 111,
"preview": "{\n \"sheet\": \"AttackType\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"Name\"\n }\n ]\n}"
},
{
"path": "SaintCoinach/Definitions/Attract.json",
"chars": 340,
"preview": "{\n \"sheet\": \"Attract\",\n \"definitions\": [\n {\n \"name\": \"MaxDistance\"\n },\n {\n \"index\": 1,\n \"name\""
},
{
"path": "SaintCoinach/Definitions/BGM.json",
"chars": 476,
"preview": "{\n \"sheet\": \"BGM\",\n \"defaultColumn\": \"File\",\n \"definitions\": [\n {\n \"name\": \"File\"\n },\n {\n \"index\":"
},
{
"path": "SaintCoinach/Definitions/BGMFade.json",
"chars": 285,
"preview": "{\n \"sheet\": \"BGMFade\",\n \"definitions\": [\n {\n \"name\": \"SceneOut\"\n },\n {\n \"index\": 1,\n \"name\": \""
},
{
"path": "SaintCoinach/Definitions/BGMFadeType.json",
"chars": 277,
"preview": "{\n \"sheet\": \"BGMFadeType\",\n \"definitions\": [\n {\n \"name\": \"FadeOutTime\"\n },\n {\n \"index\": 1,\n \"n"
},
{
"path": "SaintCoinach/Definitions/BGMScene.json",
"chars": 335,
"preview": "{\n \"sheet\": \"BGMScene\",\n \"definitions\": [\n {\n \"name\": \"EnableDisableRestart\"\n },\n {\n \"index\": 1,\n "
},
{
"path": "SaintCoinach/Definitions/BGMSituation.json",
"chars": 708,
"preview": "{\n \"sheet\": \"BGMSituation\",\n \"definitions\": [\n {\n \"name\": \"DaytimeID\",\n \"converter\": {\n \"type\": \"l"
},
{
"path": "SaintCoinach/Definitions/BGMSwitch.json",
"chars": 499,
"preview": "{\n \"sheet\": \"BGMSwitch\",\n \"definitions\": [\n {\n \"name\": \"BGMSystemDefine\",\n \"converter\": {\n \"type\":"
},
{
"path": "SaintCoinach/Definitions/BGMSystemDefine.json",
"chars": 120,
"preview": "{\n \"sheet\": \"BGMSystemDefine\",\n \"defaultColumn\": \"Define\",\n \"definitions\": [\n {\n \"name\": \"Define\"\n }\n ]\n}"
},
{
"path": "SaintCoinach/Definitions/BNpcAnnounceIcon.json",
"chars": 170,
"preview": "{\n \"sheet\": \"BNpcAnnounceIcon\",\n \"defaultColumn\": \"Icon\",\n \"definitions\": [\n {\n \"name\": \"Icon\",\n \"conver"
},
{
"path": "SaintCoinach/Definitions/BNpcBase.json",
"chars": 1519,
"preview": "{\n \"sheet\": \"BNpcBase\",\n \"definitions\": [\n {\n \"name\": \"Behavior\",\n \"converter\": {\n \"type\": \"link\","
},
{
"path": "SaintCoinach/Definitions/BNpcBasePopVfx.json",
"chars": 52,
"preview": "{\n \"sheet\": \"BNpcBasePopVfx\",\n \"definitions\": []\n}"
},
{
"path": "SaintCoinach/Definitions/BNpcCustomize.json",
"chars": 1706,
"preview": "{\n \"sheet\": \"BNpcCustomize\",\n \"definitions\": [\n {\n \"name\": \"Race\",\n \"converter\": {\n \"type\": \"link\""
},
{
"path": "SaintCoinach/Definitions/BNpcName.json",
"chars": 466,
"preview": "{\n \"sheet\": \"BNpcName\",\n \"defaultColumn\": \"Singular\",\n \"definitions\": [\n {\n \"name\": \"Singular\"\n },\n {\n "
},
{
"path": "SaintCoinach/Definitions/BNpcParts.json",
"chars": 2121,
"preview": "{\n \"sheet\": \"BNpcParts\",\n \"definitions\": [\n {\n \"name\": \"BNpcBase[1]\",\n \"converter\": {\n \"type\": \"li"
},
{
"path": "SaintCoinach/Definitions/BNpcState.json",
"chars": 678,
"preview": "{\n \"sheet\": \"BNpcState\",\n \"definitions\": [\n {\n \"name\": \"Slot\"\n },\n {\n \"index\": 1,\n \"name\": \"Ov"
},
{
"path": "SaintCoinach/Definitions/BacklightColor.json",
"chars": 171,
"preview": "{\n \"sheet\": \"BacklightColor\",\n \"defaultColumn\": \"Color\",\n \"definitions\": [\n {\n \"name\": \"Color\",\n \"conver"
},
{
"path": "SaintCoinach/Definitions/Ballista.json",
"chars": 928,
"preview": "{\n \"sheet\": \"Ballista\",\n \"definitions\": [\n {\n \"name\": \"BNPC\",\n \"converter\": {\n \"type\": \"link\",\n "
},
{
"path": "SaintCoinach/Definitions/Balloon.json",
"chars": 170,
"preview": "{\n \"sheet\": \"Balloon\",\n \"defaultColumn\": \"Dialogue\",\n \"definitions\": [\n {\n \"name\": \"Slowly\"\n },\n {\n "
},
{
"path": "SaintCoinach/Definitions/BannerBg.json",
"chars": 528,
"preview": "{\n \"sheet\": \"BannerBg\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"Image\",\n \"converter\": {"
},
{
"path": "SaintCoinach/Definitions/BannerCondition.json",
"chars": 4706,
"preview": "{\n \"sheet\": \"BannerCondition\",\n \"definitions\": [\n {\n \"name\": \"UnlockType1\"\n },\n {\n \"index\": 1,\n "
},
{
"path": "SaintCoinach/Definitions/BannerDecoration.json",
"chars": 536,
"preview": "{\n \"sheet\": \"BannerDecoration\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"Image\",\n \"conve"
},
{
"path": "SaintCoinach/Definitions/BannerDesignPreset.json",
"chars": 603,
"preview": "{\n \"sheet\": \"BannerDesignPreset\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"Background\",\n "
},
{
"path": "SaintCoinach/Definitions/BannerFacial.json",
"chars": 376,
"preview": "{\n \"sheet\": \"BannerFacial\",\n \"definitions\": [\n {\n \"name\": \"Emote\",\n \"converter\": {\n \"type\": \"link\""
},
{
"path": "SaintCoinach/Definitions/BannerFrame.json",
"chars": 531,
"preview": "{\n \"sheet\": \"BannerFrame\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"Image\",\n \"converter\""
},
{
"path": "SaintCoinach/Definitions/BannerObtainHintType.json",
"chars": 121,
"preview": "{\n \"sheet\": \"BannerObtainHintType\",\n \"defaultColumn\": \"Text\",\n \"definitions\": [\n {\n \"name\": \"Text\"\n }\n ]\n"
},
{
"path": "SaintCoinach/Definitions/BannerPreset.json",
"chars": 50,
"preview": "{\n \"sheet\": \"BannerPreset\",\n \"definitions\": []\n}"
},
{
"path": "SaintCoinach/Definitions/BannerTimeline.json",
"chars": 1268,
"preview": "{\n \"sheet\": \"BannerTimeline\",\n \"definitions\": [\n {\n \"name\": \"Type\"\n },\n {\n \"index\": 1,\n \"name\""
},
{
"path": "SaintCoinach/Definitions/BaseParam.json",
"chars": 1614,
"preview": "{\n \"sheet\": \"BaseParam\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"PacketIndex\"\n },\n {\n "
},
{
"path": "SaintCoinach/Definitions/BattleLeve.json",
"chars": 2957,
"preview": "{\n \"sheet\": \"BattleLeve\",\n \"definitions\": [\n {\n \"type\": \"repeat\",\n \"count\": 8,\n \"definition\": {\n "
},
{
"path": "SaintCoinach/Definitions/BattleLeveRule.json",
"chars": 115,
"preview": "{\n \"sheet\": \"BattleLeveRule\",\n \"defaultColumn\": \"Rule\",\n \"definitions\": [\n {\n \"name\": \"Rule\"\n }\n ]\n}"
},
{
"path": "SaintCoinach/Definitions/BeastRankBonus.json",
"chars": 757,
"preview": "{\n \"sheet\": \"BeastRankBonus\",\n \"definitions\": [\n {\n \"name\": \"Neutral\"\n },\n {\n \"index\": 1,\n \"na"
},
{
"path": "SaintCoinach/Definitions/BeastReputationRank.json",
"chars": 381,
"preview": "{\n \"sheet\": \"BeastReputationRank\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"RequiredReputatio"
},
{
"path": "SaintCoinach/Definitions/BeastTribe.json",
"chars": 1424,
"preview": "{\n \"sheet\": \"BeastTribe\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"index\": 1,\n \"name\": \"MinLevel"
},
{
"path": "SaintCoinach/Definitions/Behavior.json",
"chars": 580,
"preview": "{\n \"sheet\": \"Behavior\",\n \"definitions\": [\n {\n \"index\": 2,\n \"name\": \"Condition[0]Target\"\n },\n {\n "
},
{
"path": "SaintCoinach/Definitions/BehaviorPath.json",
"chars": 321,
"preview": "{\n \"sheet\": \"BehaviorPath\",\n \"definitions\": [\n {\n \"name\": \"IsTurnTransition\"\n },\n {\n \"index\": 1,\n "
},
{
"path": "SaintCoinach/Definitions/BenchmarkOverrideEquipment.json",
"chars": 2476,
"preview": "{\n \"sheet\": \"BenchmarkOverrideEquipment\",\n \"definitions\": [\n {\n \"index\": 4,\n \"name\": \"Model{MainHand}\"\n "
},
{
"path": "SaintCoinach/Definitions/Booster.json",
"chars": 45,
"preview": "{\n \"sheet\": \"Booster\",\n \"definitions\": []\n}"
},
{
"path": "SaintCoinach/Definitions/Buddy.json",
"chars": 678,
"preview": "{\n \"sheet\": \"Buddy\",\n \"definitions\": [\n {\n \"name\": \"Base\"\n },\n {\n \"index\": 1,\n \"name\": \"QuestR"
},
{
"path": "SaintCoinach/Definitions/BuddyAction.json",
"chars": 495,
"preview": "{\n \"sheet\": \"BuddyAction\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"Name\"\n },\n {\n "
},
{
"path": "SaintCoinach/Definitions/BuddyEquip.json",
"chars": 1232,
"preview": "{\n \"sheet\": \"BuddyEquip\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"Singular\"\n },\n {\n "
},
{
"path": "SaintCoinach/Definitions/BuddyItem.json",
"chars": 331,
"preview": "{\n \"sheet\": \"BuddyItem\",\n \"definitions\": [\n {\n \"name\": \"Item\",\n \"converter\": {\n \"type\": \"link\",\n "
},
{
"path": "SaintCoinach/Definitions/BuddyRank.json",
"chars": 90,
"preview": "{\n \"sheet\": \"BuddyRank\",\n \"definitions\": [\n {\n \"name\": \"ExpRequired\"\n }\n ]\n}"
},
{
"path": "SaintCoinach/Definitions/BuddySkill.json",
"chars": 693,
"preview": "{\n \"sheet\": \"BuddySkill\",\n \"definitions\": [\n {\n \"name\": \"BuddyLevel\"\n },\n {\n \"index\": 1,\n \"nam"
},
{
"path": "SaintCoinach/Definitions/CSBonusContent.json",
"chars": 715,
"preview": "{\n \"sheet\": \"CSBonusContent\",\n \"defaultColumn\": \"Content[0]\",\n \"definitions\": [\n {\n \"name\": \"ContentType\",\n "
},
{
"path": "SaintCoinach/Definitions/CSBonusContentIdentifier.json",
"chars": 2583,
"preview": "{\n \"sheet\": \"CSBonusContentIdentifier\",\n \"defaultColumn\": \"Content\",\n \"definitions\": [\n {\n \"name\": \"ContentLi"
},
{
"path": "SaintCoinach/Definitions/CSBonusContentType.json",
"chars": 678,
"preview": "{\n \"sheet\": \"CSBonusContentType\",\n \"defaultColumn\": \"ContentType\",\n \"definitions\": [\n {\n \"name\": \"ContentType"
},
{
"path": "SaintCoinach/Definitions/CSBonusMission.json",
"chars": 280,
"preview": "{\n \"sheet\": \"CSBonusMission\",\n \"definitions\": [\n {\n \"index\": 0,\n \"type\": \"repeat\",\n \"count\": 2,\n "
},
{
"path": "SaintCoinach/Definitions/CSBonusMissionType.json",
"chars": 56,
"preview": "{\n \"sheet\": \"CSBonusMissionType\",\n \"definitions\": []\n}"
},
{
"path": "SaintCoinach/Definitions/CSBonusSeason.json",
"chars": 539,
"preview": "{\n \"sheet\": \"CSBonusSeason\",\n \"definitions\": [\n {\n \"index\": 5,\n \"name\": \"Item\",\n \"converter\": {\n "
},
{
"path": "SaintCoinach/Definitions/CSBonusTextData.json",
"chars": 116,
"preview": "{\n \"sheet\": \"CSBonusTextData\",\n \"defaultColumn\": \"Text\",\n \"definitions\": [\n {\n \"name\": \"Text\"\n }\n ]\n}"
},
{
"path": "SaintCoinach/Definitions/Cabinet.json",
"chars": 441,
"preview": "{\n \"sheet\": \"Cabinet\",\n \"defaultColumn\": \"Item\",\n \"definitions\": [\n {\n \"name\": \"Item\",\n \"converter\": {\n "
},
{
"path": "SaintCoinach/Definitions/CabinetCategory.json",
"chars": 423,
"preview": "{\n \"sheet\": \"CabinetCategory\",\n \"defaultColumn\": \"Category\",\n \"definitions\": [\n {\n \"name\": \"MenuOrder\"\n },"
},
{
"path": "SaintCoinach/Definitions/Calendar.json",
"chars": 285,
"preview": "{\n \"sheet\": \"Calendar\",\n \"definitions\": [\n {\n \"type\": \"repeat\",\n \"count\": 32,\n \"definition\": {\n "
},
{
"path": "SaintCoinach/Definitions/Carry.json",
"chars": 136,
"preview": "{\n \"sheet\": \"Carry\",\n \"definitions\": [\n {\n \"name\": \"Model\"\n },\n {\n \"index\": 1,\n \"name\": \"Timel"
},
{
"path": "SaintCoinach/Definitions/Channeling.json",
"chars": 142,
"preview": "{\n \"sheet\": \"Channeling\",\n \"definitions\": [\n {\n \"name\": \"File\"\n },\n {\n \"index\": 1,\n \"name\": \"W"
},
{
"path": "SaintCoinach/Definitions/CharaCardBase.json",
"chars": 486,
"preview": "{\n \"sheet\": \"CharaCardBase\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"Image\",\n \"converte"
},
{
"path": "SaintCoinach/Definitions/CharaCardDecoration.json",
"chars": 545,
"preview": "{\n \"sheet\": \"CharaCardDecoration\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"Category\"\n },\n"
},
{
"path": "SaintCoinach/Definitions/CharaCardDesignCategory.json",
"chars": 61,
"preview": "{\n \"sheet\": \"CharaCardDesignCategory\",\n \"definitions\": []\n}"
},
{
"path": "SaintCoinach/Definitions/CharaCardDesignPreset.json",
"chars": 1380,
"preview": "{\n \"sheet\": \"CharaCardDesignPreset\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"BasePlate\",\n "
},
{
"path": "SaintCoinach/Definitions/CharaCardDesignType.json",
"chars": 57,
"preview": "{\n \"sheet\": \"CharaCardDesignType\",\n \"definitions\": []\n}"
},
{
"path": "SaintCoinach/Definitions/CharaCardHeader.json",
"chars": 604,
"preview": "{\n \"sheet\": \"CharaCardHeader\",\n \"defaultColumn\": \"Name\",\n \"definitions\": [\n {\n \"name\": \"TopImage\",\n \"con"
}
]
// ... and 1441 more files (download for full content)
About this extraction
This page contains the full source code of the xivapi/SaintCoinach GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1641 files (2.3 MB), approximately 676.5k tokens, and a symbol index with 3005 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.