Showing preview only (1,847K chars total). Download the full file or copy to clipboard to get everything.
Repository: MgAl2O4/FFTriadBuddy
Branch: master
Commit: 425f72ecb3ba
Files: 169
Total size: 1.7 MB
Directory structure:
gitextract_9t11ryri/
├── .gitignore
├── FFTriadBuddy.sln
├── LICENSE
├── README.md
├── assets/
│ └── data/
│ ├── cards.xml
│ ├── hashes.xml
│ ├── loc.xml
│ ├── npcs.xml
│ └── tournaments.xml
├── datasource/
│ └── !Start.bat
├── ml/
│ ├── patternMatch/
│ │ ├── nn.py
│ │ ├── run-everything.bat
│ │ ├── train-cactpot.py
│ │ └── train-triad.py
│ └── solver/
│ ├── agents/
│ │ ├── agent.py
│ │ ├── agentDQN.py
│ │ └── agentRandom.py
│ ├── environment.py
│ ├── gameSession.py
│ ├── gamelogic/
│ │ ├── triadCard.py
│ │ ├── triadDeck.py
│ │ ├── triadGame.py
│ │ └── triadMods.py
│ ├── main.py
│ ├── perfTests.py
│ └── utils/
│ ├── codeGenerator.py
│ ├── estimatorTorch.py
│ └── trainingMemory.py
└── sources/
├── App.config
├── FFTriadBuddy.csproj
├── Properties/
│ ├── AssemblyInfo.cs
│ ├── Resources.resx
│ ├── Settings.Designer.cs
│ └── Settings.settings
├── data/
│ ├── ImageHashDB.cs
│ ├── LocalizationDB.cs
│ ├── PlayerSettingsDB.cs
│ ├── TriadCardDB.cs
│ ├── TriadNpcDB.cs
│ └── TriadTournamentDB.cs
├── gamelogic/
│ ├── FavDeckSolver.cs
│ ├── MiniCactpotGame.cs
│ ├── TriadCard.cs
│ ├── TriadDeck.cs
│ ├── TriadDeckOptimizer.cs
│ ├── TriadGameAgent.cs
│ ├── TriadGameModifier.cs
│ ├── TriadGameScreenMemory.cs
│ ├── TriadGameSimulation.cs
│ ├── TriadGameSolver.cs
│ └── tests/
│ ├── TriadGameScreenTests.cs
│ └── TriadGameTests.cs
├── googleapi/
│ ├── GoogleClientMissingIdentifiers.cs
│ ├── GoogleDriveService.cs
│ └── GoogleOAuth2.cs
├── loc/
│ ├── strings.cs
│ ├── strings.de.resx
│ ├── strings.es.resx
│ ├── strings.fr.resx
│ ├── strings.ja.resx
│ ├── strings.ko.resx
│ ├── strings.resx
│ └── strings.zh.resx
├── ui/
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── modelproxy/
│ │ ├── BulkObservableCollection.cs
│ │ ├── CardModelProxy.cs
│ │ ├── IconDB.cs
│ │ ├── ImageHashDataModelProxy.cs
│ │ ├── ModelProxyDB.cs
│ │ ├── NpcModelProxy.cs
│ │ ├── RuleModelProxy.cs
│ │ ├── SettingsModel.cs
│ │ ├── TournamentModelProxy.cs
│ │ └── TriadGameModel.cs
│ ├── view/
│ │ ├── AdjustCardDialog.xaml
│ │ ├── AdjustCardDialog.xaml.cs
│ │ ├── AdjustHashDialog.xaml
│ │ ├── AdjustHashDialog.xaml.cs
│ │ ├── DialogWindow.xaml
│ │ ├── DialogWindow.xaml.cs
│ │ ├── FavDeckEditDialog.xaml
│ │ ├── FavDeckEditDialog.xaml.cs
│ │ ├── FavDeckPreview.xaml
│ │ ├── FavDeckPreview.xaml.cs
│ │ ├── MainWindow.xaml
│ │ ├── MainWindow.xaml.cs
│ │ ├── OverlayWindowInteractive.xaml
│ │ ├── OverlayWindowInteractive.xaml.cs
│ │ ├── OverlayWindowTransparent.xaml
│ │ ├── OverlayWindowTransparent.xaml.cs
│ │ ├── PageCards.xaml
│ │ ├── PageCards.xaml.cs
│ │ ├── PageInfo.xaml
│ │ ├── PageInfo.xaml.cs
│ │ ├── PageNpcs.xaml
│ │ ├── PageNpcs.xaml.cs
│ │ ├── PageScreenshot.xaml
│ │ ├── PageScreenshot.xaml.cs
│ │ ├── PageSetup.xaml
│ │ ├── PageSetup.xaml.cs
│ │ ├── PageSimulate.xaml
│ │ ├── PageSimulate.xaml.cs
│ │ ├── controls/
│ │ │ ├── NumTextBox.xaml
│ │ │ ├── NumTextBox.xaml.cs
│ │ │ ├── OutlinedTextBlock.cs
│ │ │ ├── SearchableComboBox.xaml
│ │ │ └── SearchableComboBox.xaml.cs
│ │ ├── controls-triad/
│ │ │ ├── CardGridView.xaml
│ │ │ ├── CardGridView.xaml.cs
│ │ │ ├── CardView.xaml
│ │ │ ├── CardView.xaml.cs
│ │ │ ├── DeckView.xaml
│ │ │ ├── DeckView.xaml.cs
│ │ │ ├── PlayerDeckPreview.xaml
│ │ │ └── PlayerDeckPreview.xaml.cs
│ │ └── utils/
│ │ ├── CanvasExtensions.cs
│ │ ├── CardDragDropExtension.cs
│ │ ├── Converters.cs
│ │ ├── ListViewExtensions.cs
│ │ ├── OverlayWindowService.cs
│ │ └── ViewUtils.cs
│ └── viewmodel/
│ ├── AdjustCardViewModel.cs
│ ├── AdjustHashViewModel.cs
│ ├── CardCollectionViewModel.cs
│ ├── CardViewModel.cs
│ ├── ContextActionViewModel.cs
│ ├── DeckViewModel.cs
│ ├── FavDeckEditViewModel.cs
│ ├── ImageCardDataViewModel.cs
│ ├── LocalSavesViewModel.cs
│ ├── MainWindowViewModel.cs
│ ├── OverlayWindowViewModel.cs
│ ├── PageCardsViewModel.cs
│ ├── PageInfoViewModel.cs
│ ├── PageNpcsViewModel.cs
│ ├── PageScreenshotViewModel.cs
│ ├── PageSetupViewModel.cs
│ ├── PageSimulateViewModel.cs
│ ├── SetupFavDeckViewModel.cs
│ ├── SimulateRulesViewModel.cs
│ ├── SolvableDeckViewModel.cs
│ ├── ViewModelUtils.cs
│ └── WinChanceViewModel.cs
├── utils/
│ ├── DataCoverter.cs
│ ├── TestManager.cs
│ ├── XInputStub.cs
│ ├── datamine/
│ │ ├── CsvData.cs
│ │ └── GameData.cs
│ └── tlsh/
│ ├── BucketSize.cs
│ ├── ChecksumSize.cs
│ ├── TlshBuilder.cs
│ ├── TlshHash.cs
│ └── TlshUtilities.cs
├── utils-shared/
│ ├── AssetManager.cs
│ ├── GithubUpdater.cs
│ ├── JsonParser.cs
│ ├── LocResourceManager.cs
│ ├── Logger.cs
│ ├── MLDataExporter.cs
│ └── MLUtils.cs
└── vision/
├── ImageUtils.cs
├── MLClassifierCactpot.cs
├── MLClassifierTriadDigit.cs
├── ScannerBase.cs
├── ScannerCactpot.cs
├── ScannerTriad.cs
├── ScreenAnalyzer.cs
└── ScreenReader.cs
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
*.json
*.lnk
sources/assets.zip
sources/googleapi/GoogleClientIdentifiers.cs
test/*
datasource/*
releases/*
ml/*/data/*
ml/.vscode/*
!datasource/!Start.bat
!dalamud/*.json
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Mono auto generated files
mono_crash.*
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/
# Visual Studio 2017 auto generated files
Generated\ Files/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
# Benchmark Results
BenchmarkDotNet.Artifacts/
# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/
# StyleCop
StyleCopReport.xml
# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb
# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap
# Visual Studio Trace Files
*.e2e
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding add-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json
# Visual Studio code coverage results
*.coverage
*.coveragexml
# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets
# Microsoft Azure Build Output
csx/
*.build.csdef
# Microsoft Azure Emulator
ecf/
rcf/
# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload
# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/
# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs
# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk
# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak
# SQL Server files
*.mdf
*.ldf
*.ndf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- Backup*.rdl
# Microsoft Fakes
FakesAssemblies/
# GhostDoc plugin setting file
*.GhostDoc.xml
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw
# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions
# Paket dependency manager
.paket/paket.exe
paket-files/
# FAKE - F# Make
.fake/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config
# Tabs Studio
*.tss
# Telerik's JustMock configuration file
*.jmconfig
# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs
# OpenCover UI analysis results
OpenCover/
# Azure Stream Analytics local run output
ASALocalRun/
# MSBuild Binary and Structured Log
*.binlog
# NVidia Nsight GPU debugger configuration file
*.nvuser
# MFractors (Xamarin productivity tool) working folder
.mfractor/
# Local History for Visual Studio
.localhistory/
# BeatPulse healthcheck temp database
healthchecksdb
# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/
================================================
FILE: FFTriadBuddy.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27703.2026
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FFTriadBuddy", "sources\FFTriadBuddy.csproj", "{4FE48C06-9E9C-46C9-A53E-CFE06EFDCBDC}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4FE48C06-9E9C-46C9-A53E-CFE06EFDCBDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4FE48C06-9E9C-46C9-A53E-CFE06EFDCBDC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4FE48C06-9E9C-46C9-A53E-CFE06EFDCBDC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4FE48C06-9E9C-46C9-A53E-CFE06EFDCBDC}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {4BB10FD8-07CE-4000-A373-6D18CE17C244}
EndGlobalSection
EndGlobal
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2019 MgAl2O4
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# FFTriadBuddy
Helper program for Triple Triad minigame in [Final Fantasy XIV](https://www.finalfantasyxiv.com/), NPC matches only.
(All used icons are property of SQUARE-ENIX Ltd. All rights reserved)
Features:
* suggest next move in standalone simulation
* suggest next move with in-game overlay (screenshot based)
* organize cards and npc fights
* prepare deck for given npc
* all game rules are supported
* **super secret** Mini Cactpot mode for in-game overlay
Dalamud plugin can be found here: https://github.com/MgAl2O4/FFTriadBuddyDalamud
## Instructions
1. Download [latest release](https://github.com/MgAl2O4/FFTriadBuddy/releases/latest)
2. Unpack and run.
Program will attempt to auto update on startup from this repository.
## Known issues
UI buttons glitching out after mouse over:
Please refer to [this bug report](https://github.com/MgAl2O4/FFTriadBuddy/issues/53#issuecomment-879286853) for solution, it's a known incompatibility between UI framework and Nahimic software.
## Bug reports
Bug happens. Whenever it's related to Play: Screenshot mode not recognizing images/cards correctly, please include a screenshot in bug report. Ideally, the one saved by tool in secret-debug-mode, which is exact input image for processing.
* make sure that game show broken state and board is not obscured
* switch to Play: Simulate tab, press [F12] and hit "Apply rule" button
* look for screenshot-source-xx.jpg file, saved next to tool's executable
## Translation
Localization of game data (cards, npcs, rules, tournaments, etc) is created from client datamining and is more or less automatic. Tool's UI is now separate from it, but relies on people to contribute translations.
You can help with translation here: https://crowdin.com/project/fftriadbuddy
Contact: MgAl2O4@protonmail.com
================================================
FILE: assets/data/cards.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<root>
<card id="1" rarity="0" type="0" up="4" lt="2" dn="3" rt="4" sort="1" group="0" />
<card id="2" rarity="0" type="0" up="2" lt="2" dn="7" rt="2" sort="2" group="0" />
<card id="3" rarity="0" type="0" up="4" lt="3" dn="3" rt="3" sort="3" group="0" />
<card id="4" rarity="0" type="0" up="2" lt="3" dn="4" rt="4" sort="4" group="0" />
<card id="5" rarity="0" type="0" up="2" lt="4" dn="3" rt="5" sort="5" group="0" />
<card id="6" rarity="0" type="0" up="3" lt="4" dn="3" rt="3" sort="6" group="0" />
<card id="7" rarity="0" type="0" up="4" lt="2" dn="5" rt="3" sort="7" group="0" />
<card id="8" rarity="0" type="0" up="3" lt="3" dn="3" rt="4" sort="8" group="0" />
<card id="9" rarity="0" type="0" up="5" lt="2" dn="5" rt="2" sort="9" group="0" />
<card id="10" rarity="0" type="0" up="2" lt="5" dn="2" rt="5" sort="10" group="0" />
<card id="11" rarity="0" type="0" up="5" lt="5" dn="2" rt="2" sort="11" group="0" />
<card id="12" rarity="0" type="0" up="2" lt="5" dn="5" rt="2" sort="12" group="0" />
<card id="13" rarity="0" type="0" up="3" lt="7" dn="2" rt="1" sort="13" group="0" />
<card id="14" rarity="0" type="1" up="1" lt="4" dn="7" rt="1" sort="14" group="0" />
<card id="15" rarity="0" type="1" up="6" lt="1" dn="3" rt="4" sort="15" group="0" />
<card id="16" rarity="0" type="1" up="2" lt="4" dn="5" rt="4" sort="16" group="0" />
<card id="17" rarity="0" type="1" up="2" lt="2" dn="4" rt="6" sort="17" group="0" />
<card id="18" rarity="0" type="1" up="4" lt="5" dn="3" rt="3" sort="18" group="0" />
<card id="19" rarity="0" type="3" up="7" lt="2" dn="3" rt="2" sort="19" group="0" />
<card id="20" rarity="0" type="1" up="2" lt="1" dn="3" rt="7" sort="20" group="0" />
<card id="21" rarity="1" type="0" up="3" lt="6" dn="7" rt="2" sort="21" group="0" />
<card id="22" rarity="1" type="0" up="2" lt="3" dn="6" rt="7" sort="22" group="0" />
<card id="23" rarity="1" type="0" up="6" lt="7" dn="2" rt="3" sort="23" group="0" />
<card id="24" rarity="1" type="0" up="7" lt="3" dn="2" rt="6" sort="24" group="0" />
<card id="25" rarity="1" type="0" up="7" lt="7" dn="2" rt="2" sort="25" group="0" />
<card id="26" rarity="1" type="0" up="2" lt="2" dn="7" rt="7" sort="26" group="0" />
<card id="27" rarity="1" type="1" up="6" lt="6" dn="2" rt="6" sort="27" group="0" />
<card id="28" rarity="1" type="0" up="7" lt="5" dn="5" rt="3" sort="28" group="0" />
<card id="29" rarity="1" type="0" up="3" lt="7" dn="5" rt="5" sort="29" group="0" />
<card id="30" rarity="1" type="0" up="5" lt="5" dn="3" rt="7" sort="30" group="0" />
<card id="31" rarity="1" type="4" up="3" lt="7" dn="7" rt="1" sort="31" group="0" />
<card id="32" rarity="1" type="4" up="7" lt="1" dn="3" rt="7" sort="32" group="0" />
<card id="33" rarity="1" type="0" up="5" lt="3" dn="7" rt="5" sort="33" group="0" />
<card id="34" rarity="1" type="0" up="1" lt="7" dn="3" rt="7" sort="34" group="0" />
<card id="35" rarity="1" type="1" up="6" lt="2" dn="6" rt="6" sort="35" group="0" />
<card id="36" rarity="1" type="1" up="2" lt="6" dn="6" rt="6" sort="36" group="0" />
<card id="37" rarity="1" type="1" up="6" lt="6" dn="6" rt="2" sort="37" group="0" />
<card id="38" rarity="2" type="0" up="7" lt="8" dn="4" rt="2" sort="38" group="0" />
<card id="39" rarity="2" type="0" up="8" lt="3" dn="7" rt="3" sort="39" group="0" />
<card id="40" rarity="2" type="2" up="7" lt="1" dn="6" rt="7" sort="40" group="0" />
<card id="41" rarity="2" type="2" up="1" lt="7" dn="7" rt="6" sort="41" group="0" />
<card id="42" rarity="2" type="2" up="7" lt="6" dn="1" rt="7" sort="42" group="0" />
<card id="43" rarity="2" type="2" up="7" lt="6" dn="7" rt="1" sort="43" group="0" />
<card id="44" rarity="2" type="0" up="5" lt="6" dn="6" rt="6" sort="44" group="0" />
<card id="45" rarity="2" type="0" up="6" lt="6" dn="5" rt="6" sort="45" group="0" />
<card id="46" rarity="2" type="3" up="2" lt="3" dn="8" rt="7" sort="46" group="0" />
<card id="47" rarity="2" type="4" up="4" lt="1" dn="8" rt="7" sort="47" group="0" />
<card id="48" rarity="2" type="3" up="3" lt="7" dn="8" rt="2" sort="48" group="0" />
<card id="49" rarity="2" type="3" up="7" lt="8" dn="1" rt="4" sort="49" group="0" />
<card id="50" rarity="2" type="3" up="8" lt="1" dn="4" rt="7" sort="50" group="0" />
<card id="51" rarity="3" type="4" up="7" lt="8" dn="9" rt="1" sort="51" group="0" />
<card id="52" rarity="3" type="2" up="8" lt="8" dn="1" rt="8" sort="52" group="0" />
<card id="53" rarity="3" type="2" up="8" lt="1" dn="8" rt="8" sort="53" group="0" />
<card id="54" rarity="3" type="2" up="8" lt="8" dn="8" rt="1" sort="54" group="0" />
<card id="55" rarity="3" type="2" up="1" lt="8" dn="8" rt="8" sort="55" group="0" />
<card id="56" rarity="3" type="3" up="9" lt="8" dn="3" rt="5" sort="56" group="0" />
<card id="57" rarity="3" type="0" up="4" lt="9" dn="4" rt="8" sort="57" group="0" />
<card id="58" rarity="3" type="0" up="5" lt="9" dn="9" rt="2" sort="58" group="0" />
<card id="59" rarity="3" type="3" up="9" lt="3" dn="3" rt="9" sort="59" group="0" />
<card id="60" rarity="3" type="3" up="9" lt="4" dn="9" rt="3" sort="60" group="0" />
<card id="61" rarity="4" type="2" up="9" lt="5" dn="9" rt="6" sort="61" group="0" />
<card id="62" rarity="4" type="0" up="1" lt="8" dn="10" rt="8" sort="62" group="0" />
<card id="63" rarity="4" type="0" up="10" lt="6" dn="4" rt="8" sort="63" group="0" />
<card id="64" rarity="4" type="4" up="4" lt="10" dn="5" rt="9" sort="64" group="0" />
<card id="65" rarity="4" type="0" up="5" lt="9" dn="10" rt="3" sort="65" group="0" />
<card id="66" rarity="4" type="0" up="9" lt="10" dn="1" rt="7" sort="66" group="0" />
<card id="67" rarity="4" type="0" up="6" lt="2" dn="9" rt="10" sort="67" group="0" />
<card id="68" rarity="4" type="0" up="10" lt="2" dn="5" rt="10" sort="1001" group="5" />
<card id="69" rarity="4" type="0" up="10" lt="5" dn="10" rt="1" sort="1002" group="5" />
<card id="70" rarity="4" type="0" up="8" lt="2" dn="8" rt="10" sort="1003" group="5" />
<card id="71" rarity="4" type="0" up="4" lt="10" dn="4" rt="10" sort="1004" group="5" />
<card id="72" rarity="4" type="0" up="4" lt="4" dn="10" rt="10" sort="1005" group="5" />
<card id="73" rarity="4" type="0" up="10" lt="10" dn="2" rt="5" sort="1006" group="5" />
<card id="74" rarity="4" type="0" up="9" lt="3" dn="9" rt="8" sort="1007" group="5" />
<card id="75" rarity="4" type="0" up="6" lt="10" dn="10" rt="1" sort="1008" group="5" />
<card id="76" rarity="4" type="0" up="5" lt="10" dn="6" rt="8" sort="1009" group="5" />
<card id="77" rarity="4" type="0" up="10" lt="7" dn="1" rt="9" sort="1010" group="5" />
<card id="78" rarity="4" type="0" up="4" lt="9" dn="7" rt="9" sort="1011" group="5" />
<card id="79" rarity="4" type="0" up="1" lt="7" dn="10" rt="9" sort="1012" group="5" />
<card id="80" rarity="4" type="0" up="9" lt="1" dn="7" rt="10" sort="1013" group="5" />
<card id="81" rarity="0" type="0" up="4" lt="1" dn="1" rt="7" sort="68" group="0" />
<card id="82" rarity="1" type="1" up="2" lt="6" dn="4" rt="7" sort="69" group="0" />
<card id="83" rarity="1" type="1" up="6" lt="3" dn="7" rt="3" sort="70" group="0" />
<card id="84" rarity="1" type="0" up="7" lt="7" dn="1" rt="3" sort="71" group="0" />
<card id="85" rarity="1" type="0" up="5" lt="5" dn="5" rt="5" sort="72" group="0" />
<card id="86" rarity="2" type="0" up="5" lt="1" dn="7" rt="8" sort="73" group="0" />
<card id="87" rarity="2" type="0" up="1" lt="5" dn="8" rt="7" sort="74" group="0" />
<card id="88" rarity="2" type="0" up="8" lt="8" dn="2" rt="3" sort="75" group="0" />
<card id="89" rarity="2" type="0" up="8" lt="2" dn="3" rt="8" sort="76" group="0" />
<card id="90" rarity="2" type="0" up="4" lt="8" dn="8" rt="1" sort="77" group="0" />
<card id="91" rarity="2" type="0" up="1" lt="4" dn="8" rt="8" sort="78" group="0" />
<card id="92" rarity="2" type="0" up="8" lt="3" dn="8" rt="1" sort="79" group="0" />
<card id="93" rarity="2" type="0" up="1" lt="8" dn="3" rt="8" sort="80" group="0" />
<card id="94" rarity="2" type="0" up="8" lt="4" dn="1" rt="7" sort="81" group="0" />
<card id="95" rarity="2" type="0" up="7" lt="1" dn="5" rt="8" sort="82" group="0" />
<card id="96" rarity="3" type="0" up="1" lt="5" dn="9" rt="9" sort="83" group="0" />
<card id="97" rarity="3" type="2" up="9" lt="7" dn="8" rt="1" sort="84" group="0" />
<card id="98" rarity="3" type="2" up="1" lt="9" dn="7" rt="8" sort="85" group="0" />
<card id="99" rarity="4" type="0" up="10" lt="7" dn="3" rt="8" sort="86" group="0" />
<card id="100" rarity="4" type="0" up="3" lt="8" dn="10" rt="7" sort="87" group="0" />
<card id="101" rarity="0" type="0" up="1" lt="3" dn="7" rt="2" sort="88" group="0" />
<card id="102" rarity="1" type="0" up="5" lt="4" dn="6" rt="5" sort="89" group="0" />
<card id="103" rarity="1" type="0" up="4" lt="6" dn="3" rt="6" sort="90" group="0" />
<card id="104" rarity="1" type="0" up="6" lt="5" dn="3" rt="5" sort="91" group="0" />
<card id="105" rarity="1" type="0" up="6" lt="6" dn="3" rt="4" sort="92" group="0" />
<card id="106" rarity="1" type="0" up="7" lt="7" dn="3" rt="2" sort="93" group="0" />
<card id="107" rarity="1" type="0" up="6" lt="3" dn="7" rt="3" sort="94" group="0" />
<card id="108" rarity="2" type="0" up="8" lt="2" dn="7" rt="4" sort="95" group="0" />
<card id="109" rarity="2" type="0" up="5" lt="5" dn="5" rt="8" sort="96" group="0" />
<card id="110" rarity="2" type="0" up="6" lt="6" dn="3" rt="6" sort="97" group="0" />
<card id="111" rarity="2" type="0" up="3" lt="7" dn="3" rt="7" sort="98" group="0" />
<card id="112" rarity="2" type="0" up="6" lt="4" dn="7" rt="4" sort="99" group="0" />
<card id="113" rarity="2" type="0" up="6" lt="5" dn="6" rt="6" sort="100" group="0" />
<card id="114" rarity="2" type="0" up="6" lt="6" dn="5" rt="7" sort="101" group="0" />
<card id="115" rarity="2" type="1" up="8" lt="5" dn="4" rt="5" sort="102" group="0" />
<card id="116" rarity="2" type="0" up="7" lt="8" dn="4" rt="3" sort="103" group="0" />
<card id="117" rarity="2" type="1" up="2" lt="2" dn="8" rt="8" sort="104" group="0" />
<card id="118" rarity="3" type="0" up="9" lt="5" dn="7" rt="6" sort="105" group="0" />
<card id="119" rarity="4" type="4" up="8" lt="8" dn="6" rt="8" sort="106" group="0" />
<card id="120" rarity="4" type="0" up="7" lt="1" dn="10" rt="9" sort="107" group="0" />
<card id="121" rarity="1" type="0" up="7" lt="2" dn="7" rt="2" sort="108" group="0" />
<card id="122" rarity="1" type="3" up="2" lt="7" dn="2" rt="7" sort="109" group="0" />
<card id="123" rarity="2" type="0" up="8" lt="4" dn="5" rt="4" sort="110" group="0" />
<card id="124" rarity="2" type="0" up="2" lt="8" dn="4" rt="7" sort="111" group="0" />
<card id="125" rarity="2" type="0" up="7" lt="3" dn="6" rt="4" sort="112" group="0" />
<card id="126" rarity="2" type="0" up="3" lt="6" dn="6" rt="6" sort="113" group="0" />
<card id="127" rarity="2" type="0" up="7" lt="1" dn="7" rt="5" sort="114" group="0" />
<card id="128" rarity="2" type="1" up="3" lt="7" dn="2" rt="8" sort="115" group="0" />
<card id="129" rarity="2" type="0" up="4" lt="6" dn="8" rt="4" sort="116" group="0" />
<card id="130" rarity="2" type="0" up="6" lt="6" dn="6" rt="3" sort="117" group="0" />
<card id="131" rarity="2" type="0" up="8" lt="3" dn="2" rt="7" sort="118" group="0" />
<card id="132" rarity="2" type="0" up="1" lt="7" dn="6" rt="7" sort="119" group="0" />
<card id="133" rarity="2" type="0" up="4" lt="7" dn="3" rt="7" sort="120" group="0" />
<card id="134" rarity="2" type="0" up="7" lt="4" dn="7" rt="3" sort="121" group="0" />
<card id="135" rarity="3" type="0" up="9" lt="4" dn="6" rt="7" sort="122" group="0" />
<card id="136" rarity="3" type="0" up="7" lt="7" dn="7" rt="7" sort="123" group="0" />
<card id="137" rarity="3" type="2" up="6" lt="8" dn="8" rt="6" sort="124" group="0" />
<card id="138" rarity="3" type="3" up="9" lt="7" dn="3" rt="7" sort="125" group="0" />
<card id="139" rarity="3" type="0" up="8" lt="6" dn="8" rt="6" sort="126" group="0" />
<card id="140" rarity="4" type="0" up="7" lt="10" dn="7" rt="6" sort="127" group="0" />
<card id="141" rarity="1" type="0" up="4" lt="3" dn="7" rt="3" sort="128" group="0" />
<card id="142" rarity="1" type="0" up="2" lt="6" dn="3" rt="6" sort="129" group="0" />
<card id="143" rarity="1" type="0" up="7" lt="6" dn="3" rt="3" sort="130" group="0" />
<card id="144" rarity="1" type="0" up="5" lt="6" dn="4" rt="6" sort="131" group="0" />
<card id="145" rarity="1" type="0" up="2" lt="7" dn="7" rt="2" sort="132" group="0" />
<card id="146" rarity="2" type="0" up="1" lt="8" dn="4" rt="8" sort="133" group="0" />
<card id="147" rarity="2" type="0" up="1" lt="6" dn="7" rt="7" sort="134" group="0" />
<card id="148" rarity="2" type="0" up="4" lt="6" dn="4" rt="7" sort="135" group="0" />
<card id="149" rarity="2" type="0" up="5" lt="6" dn="7" rt="6" sort="136" group="0" />
<card id="150" rarity="3" type="0" up="6" lt="8" dn="6" rt="8" sort="137" group="0" />
<card id="151" rarity="3" type="0" up="9" lt="6" dn="5" rt="6" sort="138" group="0" />
<card id="152" rarity="3" type="0" up="5" lt="8" dn="7" rt="8" sort="139" group="0" />
<card id="153" rarity="4" type="0" up="7" lt="7" dn="10" rt="6" sort="140" group="0" />
<card id="154" rarity="0" type="0" up="3" lt="4" dn="4" rt="1" sort="141" group="0" />
<card id="155" rarity="0" type="0" up="6" lt="1" dn="4" rt="1" sort="142" group="0" />
<card id="156" rarity="0" type="4" up="4" lt="3" dn="2" rt="3" sort="143" group="0" />
<card id="157" rarity="1" type="0" up="4" lt="3" dn="6" rt="6" sort="144" group="0" />
<card id="158" rarity="1" type="0" up="7" lt="3" dn="4" rt="5" sort="145" group="0" />
<card id="159" rarity="1" type="1" up="5" lt="5" dn="6" rt="3" sort="146" group="0" />
<card id="160" rarity="1" type="4" up="6" lt="3" dn="6" rt="3" sort="147" group="0" />
<card id="161" rarity="2" type="0" up="5" lt="7" dn="1" rt="7" sort="148" group="0" />
<card id="162" rarity="2" type="1" up="7" lt="6" dn="6" rt="2" sort="149" group="0" />
<card id="163" rarity="2" type="2" up="7" lt="3" dn="2" rt="8" sort="150" group="0" />
<card id="164" rarity="2" type="0" up="4" lt="7" dn="6" rt="5" sort="151" group="0" />
<card id="165" rarity="3" type="3" up="8" lt="1" dn="7" rt="9" sort="152" group="0" />
<card id="166" rarity="3" type="3" up="9" lt="9" dn="2" rt="5" sort="153" group="0" />
<card id="167" rarity="3" type="4" up="3" lt="9" dn="3" rt="9" sort="154" group="0" />
<card id="168" rarity="4" type="2" up="10" lt="8" dn="5" rt="6" sort="155" group="0" />
<card id="169" rarity="0" type="0" up="1" lt="4" dn="2" rt="6" sort="156" group="0" />
<card id="170" rarity="1" type="0" up="5" lt="7" dn="4" rt="4" sort="157" group="0" />
<card id="171" rarity="1" type="4" up="3" lt="5" dn="4" rt="7" sort="158" group="0" />
<card id="172" rarity="1" type="4" up="3" lt="5" dn="5" rt="5" sort="159" group="0" />
<card id="173" rarity="1" type="0" up="4" lt="7" dn="1" rt="6" sort="167" group="0" />
<card id="174" rarity="2" type="0" up="3" lt="8" dn="5" rt="5" sort="160" group="0" />
<card id="175" rarity="2" type="4" up="5" lt="7" dn="4" rt="5" sort="161" group="0" />
<card id="176" rarity="2" type="4" up="6" lt="2" dn="6" rt="7" sort="162" group="0" />
<card id="177" rarity="2" type="0" up="8" lt="8" dn="4" rt="1" sort="163" group="0" />
<card id="178" rarity="2" type="0" up="2" lt="7" dn="8" rt="3" sort="168" group="0" />
<card id="179" rarity="3" type="0" up="4" lt="4" dn="8" rt="9" sort="164" group="0" />
<card id="180" rarity="3" type="4" up="3" lt="5" dn="9" rt="7" sort="165" group="0" />
<card id="181" rarity="3" type="0" up="6" lt="8" dn="4" rt="7" sort="169" group="0" />
<card id="182" rarity="4" type="2" up="3" lt="7" dn="8" rt="10" sort="166" group="0" />
<card id="183" rarity="0" type="1" up="1" lt="6" dn="1" rt="5" sort="170" group="0" />
<card id="184" rarity="1" type="1" up="4" lt="5" dn="5" rt="4" sort="171" group="0" />
<card id="185" rarity="1" type="1" up="3" lt="7" dn="5" rt="2" sort="172" group="0" />
<card id="186" rarity="1" type="0" up="4" lt="1" dn="4" rt="7" sort="173" group="0" />
<card id="187" rarity="1" type="0" up="5" lt="6" dn="2" rt="6" sort="174" group="0" />
<card id="188" rarity="2" type="0" up="6" lt="3" dn="8" rt="3" sort="175" group="0" />
<card id="189" rarity="2" type="0" up="8" lt="8" dn="3" rt="1" sort="176" group="0" />
<card id="190" rarity="2" type="2" up="2" lt="8" dn="3" rt="8" sort="177" group="0" />
<card id="191" rarity="2" type="2" up="3" lt="7" dn="7" rt="5" sort="178" group="0" />
<card id="192" rarity="2" type="4" up="7" lt="4" dn="7" rt="4" sort="179" group="0" />
<card id="193" rarity="2" type="0" up="4" lt="7" dn="8" rt="2" sort="180" group="0" />
<card id="194" rarity="2" type="0" up="3" lt="5" dn="6" rt="8" sort="181" group="0" />
<card id="195" rarity="2" type="0" up="6" lt="7" dn="4" rt="4" sort="182" group="0" />
<card id="196" rarity="2" type="0" up="6" lt="6" dn="7" rt="4" sort="183" group="0" />
<card id="197" rarity="3" type="2" up="7" lt="8" dn="8" rt="2" sort="184" group="0" />
<card id="198" rarity="3" type="4" up="9" lt="2" dn="8" rt="6" sort="185" group="0" />
<card id="199" rarity="3" type="3" up="2" lt="8" dn="8" rt="7" sort="186" group="0" />
<card id="200" rarity="3" type="3" up="6" lt="9" dn="1" rt="8" sort="187" group="0" />
<card id="201" rarity="4" type="4" up="6" lt="6" dn="7" rt="10" sort="188" group="0" />
<card id="202" rarity="4" type="0" up="2" lt="10" dn="5" rt="10" sort="189" group="0" />
<card id="203" rarity="0" type="0" up="5" lt="2" dn="5" rt="1" sort="190" group="0" />
<card id="204" rarity="1" type="0" up="7" lt="2" dn="2" rt="6" sort="191" group="0" />
<card id="205" rarity="1" type="1" up="1" lt="5" dn="7" rt="5" sort="192" group="0" />
<card id="206" rarity="2" type="0" up="2" lt="7" dn="6" rt="7" sort="193" group="0" />
<card id="207" rarity="2" type="0" up="5" lt="8" dn="6" rt="3" sort="194" group="0" />
<card id="208" rarity="2" type="0" up="4" lt="7" dn="1" rt="8" sort="195" group="0" />
<card id="209" rarity="3" type="0" up="9" lt="2" dn="5" rt="8" sort="196" group="0" />
<card id="210" rarity="4" type="0" up="1" lt="10" dn="10" rt="6" sort="197" group="0" />
<card id="211" rarity="0" type="0" up="3" lt="2" dn="1" rt="6" sort="198" group="0" />
<card id="212" rarity="1" type="0" up="4" lt="2" dn="7" rt="4" sort="199" group="0" />
<card id="213" rarity="1" type="0" up="6" lt="4" dn="4" rt="4" sort="200" group="0" />
<card id="214" rarity="1" type="0" up="6" lt="2" dn="3" rt="7" sort="201" group="0" />
<card id="215" rarity="2" type="0" up="7" lt="7" dn="1" rt="7" sort="202" group="0" />
<card id="216" rarity="2" type="0" up="7" lt="1" dn="7" rt="7" sort="203" group="0" />
<card id="217" rarity="2" type="3" up="8" lt="4" dn="8" rt="2" sort="204" group="0" />
<card id="218" rarity="2" type="1" up="3" lt="3" dn="8" rt="7" sort="205" group="0" />
<card id="219" rarity="3" type="0" up="8" lt="9" dn="1" rt="7" sort="206" group="0" />
<card id="220" rarity="4" type="0" up="10" lt="2" dn="7" rt="9" sort="207" group="0" />
<card id="221" rarity="0" type="0" up="6" lt="1" dn="1" rt="5" sort="212" group="0" />
<card id="222" rarity="1" type="0" up="2" lt="7" dn="5" rt="6" sort="213" group="0" />
<card id="223" rarity="1" type="0" up="3" lt="7" dn="3" rt="5" sort="215" group="0" />
<card id="224" rarity="2" type="0" up="3" lt="8" dn="4" rt="8" sort="208" group="0" />
<card id="225" rarity="2" type="0" up="4" lt="7" dn="5" rt="7" sort="214" group="0" />
<card id="226" rarity="2" type="0" up="3" lt="8" dn="7" rt="3" sort="216" group="0" />
<card id="227" rarity="2" type="0" up="5" lt="8" dn="2" rt="7" sort="217" group="0" />
<card id="228" rarity="3" type="2" up="2" lt="7" dn="7" rt="8" sort="209" group="0" />
<card id="229" rarity="4" type="0" up="7" lt="6" dn="10" rt="7" sort="210" group="0" />
<card id="230" rarity="4" type="0" up="10" lt="5" dn="10" rt="2" sort="211" group="0" />
<card id="231" rarity="0" type="0" up="7" lt="1" dn="1" rt="4" sort="224" group="0" />
<card id="232" rarity="1" type="0" up="3" lt="7" dn="1" rt="7" sort="218" group="0" />
<card id="233" rarity="2" type="0" up="2" lt="6" dn="6" rt="7" sort="219" group="0" />
<card id="234" rarity="2" type="0" up="5" lt="8" dn="5" rt="5" sort="220" group="0" />
<card id="235" rarity="2" type="0" up="1" lt="7" dn="7" rt="7" sort="221" group="0" />
<card id="236" rarity="2" type="0" up="4" lt="8" dn="4" rt="7" sort="225" group="0" />
<card id="237" rarity="2" type="0" up="7" lt="2" dn="8" rt="5" sort="226" group="0" />
<card id="238" rarity="2" type="4" up="8" lt="4" dn="1" rt="8" sort="222" group="0" />
<card id="239" rarity="4" type="0" up="10" lt="8" dn="1" rt="8" sort="227" group="0" />
<card id="240" rarity="4" type="0" up="6" lt="9" dn="3" rt="10" sort="223" group="0" />
<card id="241" rarity="0" type="3" up="1" lt="4" dn="1" rt="7" sort="228" group="0" />
<card id="242" rarity="1" type="0" up="4" lt="5" dn="3" rt="7" sort="235" group="0" />
<card id="243" rarity="1" type="0" up="7" lt="1" dn="1" rt="7" sort="236" group="0" />
<card id="244" rarity="2" type="4" up="6" lt="5" dn="8" rt="3" sort="229" group="0" />
<card id="245" rarity="2" type="0" up="7" lt="4" dn="4" rt="8" sort="237" group="0" />
<card id="246" rarity="2" type="0" up="7" lt="7" dn="7" rt="1" sort="230" group="0" />
<card id="247" rarity="2" type="0" up="6" lt="6" dn="6" rt="6" sort="231" group="0" />
<card id="248" rarity="3" type="1" up="6" lt="9" dn="6" rt="7" sort="232" group="0" />
<card id="249" rarity="3" type="0" up="9" lt="4" dn="8" rt="4" sort="238" group="0" />
<card id="250" rarity="4" type="0" up="6" lt="10" dn="7" rt="7" sort="233" group="0" />
<card id="251" rarity="4" type="3" up="6" lt="8" dn="8" rt="8" sort="234" group="0" />
<card id="252" rarity="4" type="0" up="7" lt="10" dn="9" rt="1" sort="1014" group="5" />
<card id="253" rarity="0" type="0" up="1" lt="7" dn="2" rt="3" sort="239" group="0" />
<card id="254" rarity="0" type="0" up="7" lt="2" dn="2" rt="2" sort="240" group="0" />
<card id="255" rarity="0" type="0" up="5" lt="1" dn="6" rt="1" sort="241" group="0" />
<card id="256" rarity="1" type="0" up="7" lt="4" dn="4" rt="4" sort="242" group="0" />
<card id="257" rarity="1" type="1" up="7" lt="5" dn="5" rt="1" sort="243" group="0" />
<card id="258" rarity="1" type="0" up="6" lt="4" dn="7" rt="1" sort="244" group="0" />
<card id="259" rarity="1" type="0" up="1" lt="3" dn="7" rt="7" sort="245" group="0" />
<card id="260" rarity="2" type="0" up="2" lt="6" dn="8" rt="6" sort="246" group="0" />
<card id="261" rarity="2" type="0" up="8" lt="6" dn="6" rt="2" sort="247" group="0" />
<card id="262" rarity="2" type="0" up="6" lt="2" dn="6" rt="8" sort="248" group="0" />
<card id="263" rarity="2" type="0" up="6" lt="8" dn="2" rt="6" sort="249" group="0" />
<card id="264" rarity="2" type="0" up="8" lt="5" dn="5" rt="5" sort="250" group="0" />
<card id="265" rarity="2" type="0" up="1" lt="8" dn="8" rt="3" sort="251" group="0" />
<card id="266" rarity="2" type="0" up="4" lt="4" dn="7" rt="6" sort="252" group="0" />
<card id="267" rarity="3" type="0" up="8" lt="3" dn="8" rt="8" sort="253" group="0" />
<card id="268" rarity="3" type="3" up="2" lt="9" dn="5" rt="9" sort="254" group="0" />
<card id="269" rarity="3" type="3" up="9" lt="2" dn="5" rt="9" sort="255" group="0" />
<card id="270" rarity="3" type="0" up="1" lt="9" dn="9" rt="5" sort="256" group="0" />
<card id="271" rarity="4" type="0" up="8" lt="6" dn="6" rt="10" sort="257" group="0" />
<card id="272" rarity="4" type="0" up="1" lt="9" dn="9" rt="9" sort="258" group="0" />
<card id="273" rarity="0" type="0" up="2" lt="7" dn="2" rt="2" sort="259" group="0" />
<card id="274" rarity="0" type="0" up="1" lt="2" dn="6" rt="4" sort="260" group="0" />
<card id="275" rarity="1" type="0" up="3" lt="5" dn="6" rt="5" sort="261" group="0" />
<card id="276" rarity="1" type="1" up="7" lt="6" dn="2" rt="4" sort="262" group="0" />
<card id="277" rarity="1" type="1" up="7" lt="4" dn="6" rt="2" sort="263" group="0" />
<card id="278" rarity="2" type="0" up="8" lt="7" dn="2" rt="4" sort="264" group="0" />
<card id="279" rarity="2" type="0" up="4" lt="6" dn="6" rt="8" sort="265" group="0" />
<card id="280" rarity="3" type="0" up="7" lt="7" dn="9" rt="4" sort="266" group="0" />
<card id="281" rarity="4" type="0" up="10" lt="9" dn="7" rt="1" sort="267" group="0" />
<card id="282" rarity="4" type="0" up="4" lt="8" dn="6" rt="10" sort="268" group="0" />
<card id="283" rarity="0" type="0" up="2" lt="2" dn="2" rt="7" sort="269" group="0" />
<card id="284" rarity="0" type="1" up="4" lt="6" dn="2" rt="2" sort="270" group="0" />
<card id="285" rarity="1" type="0" up="2" lt="4" dn="7" rt="6" sort="271" group="0" />
<card id="286" rarity="1" type="0" up="5" lt="5" dn="6" rt="4" sort="278" group="0" />
<card id="287" rarity="2" type="0" up="6" lt="2" dn="8" rt="6" sort="272" group="0" />
<card id="288" rarity="2" type="0" up="8" lt="7" dn="1" rt="6" sort="273" group="0" />
<card id="289" rarity="2" type="0" up="7" lt="5" dn="8" rt="2" sort="274" group="0" />
<card id="290" rarity="2" type="0" up="5" lt="6" dn="3" rt="8" sort="275" group="0" />
<card id="291" rarity="3" type="4" up="8" lt="7" dn="1" rt="9" sort="276" group="0" />
<card id="292" rarity="4" type="0" up="9" lt="9" dn="2" rt="9" sort="277" group="0" />
<card id="293" rarity="4" type="4" up="10" lt="10" dn="4" rt="1" sort="279" group="0" />
<card id="294" rarity="0" type="1" up="2" lt="4" dn="6" rt="2" sort="280" group="0" />
<card id="295" rarity="1" type="0" up="1" lt="7" dn="1" rt="7" sort="288" group="0" />
<card id="296" rarity="1" type="0" up="6" lt="4" dn="2" rt="6" sort="281" group="0" />
<card id="297" rarity="2" type="0" up="5" lt="4" dn="7" rt="7" sort="282" group="0" />
<card id="298" rarity="2" type="4" up="8" lt="4" dn="6" rt="6" sort="289" group="0" />
<card id="299" rarity="2" type="0" up="6" lt="1" dn="7" rt="8" sort="290" group="0" />
<card id="300" rarity="3" type="0" up="8" lt="4" dn="9" rt="4" sort="283" group="0" />
<card id="301" rarity="3" type="3" up="7" lt="9" dn="8" rt="1" sort="284" group="0" />
<card id="302" rarity="3" type="4" up="1" lt="9" dn="8" rt="7" sort="285" group="0" />
<card id="303" rarity="4" type="0" up="4" lt="8" dn="10" rt="6" sort="286" group="0" />
<card id="304" rarity="4" type="2" up="2" lt="10" dn="10" rt="5" sort="287" group="0" />
<card id="305" rarity="0" type="0" up="4" lt="7" dn="1" rt="1" sort="297" group="0" />
<card id="306" rarity="1" type="0" up="3" lt="3" dn="7" rt="6" sort="291" group="0" />
<card id="307" rarity="2" type="0" up="6" lt="1" dn="8" rt="7" sort="298" group="0" />
<card id="308" rarity="2" type="0" up="8" lt="7" dn="6" rt="1" sort="299" group="0" />
<card id="309" rarity="2" type="0" up="4" lt="8" dn="6" rt="6" sort="300" group="0" />
<card id="310" rarity="2" type="0" up="6" lt="6" dn="4" rt="8" sort="301" group="0" />
<card id="311" rarity="2" type="0" up="8" lt="6" dn="4" rt="6" sort="302" group="0" />
<card id="312" rarity="3" type="4" up="7" lt="1" dn="9" rt="8" sort="292" group="0" />
<card id="313" rarity="3" type="0" up="7" lt="9" dn="7" rt="1" sort="293" group="0" />
<card id="314" rarity="3" type="0" up="5" lt="9" dn="1" rt="9" sort="294" group="0" />
<card id="315" rarity="4" type="0" up="10" lt="5" dn="8" rt="6" sort="295" group="0" />
<card id="316" rarity="4" type="2" up="5" lt="9" dn="6" rt="9" sort="296" group="0" />
<card id="317" rarity="1" type="0" up="5" lt="4" dn="4" rt="7" sort="303" group="0" />
<card id="318" rarity="2" type="2" up="8" lt="2" dn="8" rt="4" sort="304" group="0" />
<card id="319" rarity="2" type="4" up="7" lt="5" dn="8" rt="3" sort="305" group="0" />
<card id="320" rarity="2" type="2" up="8" lt="3" dn="4" rt="7" sort="309" group="0" />
<card id="321" rarity="2" type="0" up="1" lt="6" dn="7" rt="8" sort="310" group="0" />
<card id="322" rarity="2" type="0" up="8" lt="1" dn="7" rt="6" sort="311" group="0" />
<card id="323" rarity="3" type="0" up="9" lt="1" dn="7" rt="8" sort="306" group="0" />
<card id="324" rarity="3" type="4" up="9" lt="8" dn="7" rt="1" sort="307" group="0" />
<card id="325" rarity="3" type="0" up="4" lt="4" dn="9" rt="9" sort="312" group="0" />
<card id="326" rarity="4" type="0" up="6" lt="10" dn="4" rt="8" sort="308" group="0" />
<card id="327" rarity="0" type="0" up="4" lt="4" dn="3" rt="4" sort="313" group="0" />
<card id="328" rarity="0" type="0" up="3" lt="4" dn="4" rt="4" sort="314" group="0" />
<card id="329" rarity="0" type="0" up="5" lt="4" dn="1" rt="4" sort="315" group="0" />
<card id="330" rarity="1" type="1" up="4" lt="4" dn="7" rt="4" sort="316" group="0" />
<card id="331" rarity="1" type="0" up="4" lt="6" dn="6" rt="4" sort="317" group="0" />
<card id="332" rarity="1" type="0" up="7" lt="3" dn="7" rt="1" sort="318" group="0" />
<card id="333" rarity="2" type="0" up="6" lt="8" dn="7" rt="1" sort="319" group="0" />
<card id="334" rarity="2" type="0" up="8" lt="7" dn="3" rt="3" sort="320" group="0" />
<card id="335" rarity="2" type="0" up="5" lt="8" dn="5" rt="6" sort="332" group="0" />
<card id="336" rarity="2" type="2" up="4" lt="1" dn="8" rt="8" sort="321" group="0" />
<card id="337" rarity="2" type="0" up="7" lt="1" dn="8" rt="6" sort="322" group="0" />
<card id="338" rarity="2" type="0" up="7" lt="7" dn="3" rt="7" sort="323" group="0" />
<card id="339" rarity="3" type="2" up="5" lt="1" dn="9" rt="9" sort="324" group="0" />
<card id="340" rarity="3" type="4" up="9" lt="3" dn="6" rt="8" sort="325" group="0" />
<card id="341" rarity="3" type="3" up="4" lt="9" dn="9" rt="3" sort="326" group="0" />
<card id="342" rarity="3" type="0" up="7" lt="9" dn="6" rt="6" sort="327" group="0" />
<card id="343" rarity="3" type="0" up="9" lt="3" dn="7" rt="7" sort="328" group="0" />
<card id="344" rarity="4" type="2" up="5" lt="10" dn="3" rt="10" sort="329" group="0" />
<card id="345" rarity="4" type="2" up="10" lt="3" dn="10" rt="5" sort="330" group="0" />
<card id="346" rarity="4" type="4" up="6" lt="6" dn="9" rt="9" sort="331" group="0" />
<card id="347" rarity="0" type="0" up="1" lt="6" dn="5" rt="1" sort="333" group="0" />
<card id="348" rarity="0" type="0" up="1" lt="1" dn="7" rt="4" sort="341" group="0" />
<card id="349" rarity="1" type="1" up="4" lt="7" dn="4" rt="4" sort="342" group="0" />
<card id="350" rarity="2" type="0" up="6" lt="8" dn="1" rt="7" sort="334" group="0" />
<card id="351" rarity="2" type="0" up="7" lt="6" dn="1" rt="8" sort="335" group="0" />
<card id="352" rarity="2" type="0" up="8" lt="1" dn="6" rt="7" sort="336" group="0" />
<card id="353" rarity="2" type="0" up="6" lt="7" dn="8" rt="1" sort="337" group="0" />
<card id="354" rarity="3" type="0" up="8" lt="1" dn="9" rt="7" sort="338" group="0" />
<card id="355" rarity="3" type="0" up="7" lt="8" dn="1" rt="9" sort="339" group="0" />
<card id="356" rarity="4" type="0" up="7" lt="10" dn="2" rt="9" sort="340" group="0" />
<card id="357" rarity="0" type="0" up="1" lt="5" dn="1" rt="6" sort="349" group="0" />
<card id="358" rarity="1" type="0" up="2" lt="4" dn="6" rt="6" sort="350" group="0" />
<card id="359" rarity="1" type="0" up="7" lt="2" dn="5" rt="5" sort="351" group="0" />
<card id="360" rarity="1" type="0" up="4" lt="7" dn="2" rt="6" sort="352" group="0" />
<card id="361" rarity="2" type="0" up="6" lt="7" dn="7" rt="4" sort="343" group="0" />
<card id="362" rarity="2" type="0" up="1" lt="6" dn="8" rt="7" sort="344" group="0" />
<card id="363" rarity="2" type="1" up="2" lt="8" dn="8" rt="2" sort="353" group="0" />
<card id="364" rarity="3" type="0" up="7" lt="6" dn="8" rt="7" sort="345" group="0" />
<card id="365" rarity="3" type="0" up="6" lt="7" dn="7" rt="8" sort="346" group="0" />
<card id="366" rarity="3" type="0" up="5" lt="9" dn="5" rt="8" sort="347" group="0" />
<card id="367" rarity="4" type="0" up="9" lt="4" dn="10" rt="5" sort="348" group="0" />
<card id="368" rarity="0" type="0" up="6" lt="3" dn="1" rt="3" sort="354" group="0" />
<card id="369" rarity="0" type="0" up="2" lt="5" dn="5" rt="2" sort="360" group="0" />
<card id="370" rarity="1" type="0" up="5" lt="5" dn="7" rt="1" sort="355" group="0" />
<card id="371" rarity="1" type="0" up="4" lt="1" dn="6" rt="7" sort="356" group="0" />
<card id="372" rarity="2" type="0" up="5" lt="7" dn="5" rt="6" sort="361" group="0" />
<card id="373" rarity="2" type="0" up="8" lt="3" dn="2" rt="8" sort="362" group="0" />
<card id="374" rarity="2" type="0" up="1" lt="7" dn="6" rt="8" sort="357" group="0" />
<card id="375" rarity="3" type="0" up="8" lt="6" dn="7" rt="7" sort="358" group="0" />
<card id="376" rarity="3" type="0" up="7" lt="8" dn="6" rt="7" sort="359" group="0" />
<card id="377" rarity="4" type="0" up="4" lt="8" dn="7" rt="10" sort="363" group="0" />
<card id="378" rarity="0" type="0" up="4" lt="5" dn="1" rt="4" sort="369" group="0" />
<card id="379" rarity="1" type="0" up="7" lt="2" dn="6" rt="4" sort="370" group="0" />
<card id="380" rarity="1" type="0" up="3" lt="6" dn="7" rt="3" sort="371" group="0" />
<card id="381" rarity="2" type="0" up="6" lt="8" dn="4" rt="5" sort="364" group="0" />
<card id="382" rarity="2" type="0" up="3" lt="7" dn="5" rt="7" sort="365" group="0" />
<card id="383" rarity="2" type="0" up="4" lt="2" dn="8" rt="8" sort="372" group="0" />
<card id="384" rarity="2" type="0" up="7" lt="5" dn="2" rt="8" sort="373" group="0" />
<card id="385" rarity="3" type="0" up="5" lt="5" dn="9" rt="8" sort="366" group="0" />
<card id="386" rarity="3" type="0" up="8" lt="5" dn="5" rt="9" sort="374" group="0" />
<card id="387" rarity="4" type="0" up="10" lt="5" dn="2" rt="10" sort="367" group="0" />
<card id="388" rarity="4" type="0" up="9" lt="5" dn="10" rt="4" sort="368" group="0" />
<card id="389" rarity="0" type="0" up="2" lt="3" dn="4" rt="3" sort="385" group="0" />
<card id="390" rarity="1" type="0" up="5" lt="6" dn="2" rt="3" sort="386" group="0" />
<card id="391" rarity="1" type="0" up="4" lt="4" dn="5" rt="5" sort="387" group="0" />
<card id="392" rarity="1" type="0" up="5" lt="7" dn="4" rt="3" sort="389" group="0" />
<card id="393" rarity="2" type="0" up="5" lt="5" dn="7" rt="5" sort="388" group="0" />
<card id="394" rarity="2" type="0" up="8" lt="6" dn="7" rt="1" sort="375" group="0" />
<card id="395" rarity="2" type="0" up="1" lt="7" dn="8" rt="6" sort="376" group="0" />
<card id="396" rarity="2" type="0" up="1" lt="8" dn="6" rt="7" sort="377" group="0" />
<card id="397" rarity="2" type="0" up="1" lt="8" dn="7" rt="6" sort="378" group="0" />
<card id="398" rarity="2" type="0" up="7" lt="8" dn="6" rt="1" sort="379" group="0" />
<card id="399" rarity="2" type="0" up="7" lt="8" dn="1" rt="6" sort="380" group="0" />
<card id="400" rarity="2" type="0" up="7" lt="6" dn="8" rt="1" sort="381" group="0" />
<card id="401" rarity="2" type="0" up="7" lt="6" dn="6" rt="6" sort="382" group="0" />
<card id="402" rarity="3" type="0" up="6" lt="9" dn="6" rt="7" sort="383" group="0" />
<card id="403" rarity="3" type="2" up="9" lt="5" dn="7" rt="6" sort="390" group="0" />
<card id="404" rarity="4" type="0" up="9" lt="9" dn="9" rt="1" sort="384" group="0" />
<card id="405" rarity="4" type="0" up="10" lt="7" dn="8" rt="5" sort="1015" group="5" />
<card id="406" rarity="0" type="1" up="5" lt="3" dn="4" rt="2" sort="391" group="0" />
<card id="407" rarity="0" type="0" up="3" lt="5" dn="3" rt="3" sort="392" group="0" />
<card id="408" rarity="1" type="1" up="5" lt="5" dn="4" rt="5" sort="393" group="0" />
<card id="409" rarity="1" type="0" up="6" lt="5" dn="3" rt="4" sort="394" group="0" />
<card id="410" rarity="1" type="0" up="3" lt="5" dn="4" rt="6" sort="395" group="0" />
<card id="411" rarity="1" type="0" up="4" lt="6" dn="4" rt="5" sort="396" group="0" />
<card id="412" rarity="1" type="0" up="5" lt="3" dn="6" rt="5" sort="397" group="0" />
<card id="413" rarity="2" type="0" up="5" lt="7" dn="7" rt="2" sort="398" group="0" />
<card id="414" rarity="2" type="0" up="3" lt="7" dn="5" rt="6" sort="399" group="0" />
<card id="415" rarity="2" type="0" up="6" lt="6" dn="4" rt="6" sort="400" group="0" />
<card id="416" rarity="2" type="0" up="7" lt="7" dn="4" rt="4" sort="401" group="0" />
<card id="417" rarity="2" type="0" up="5" lt="3" dn="7" rt="6" sort="402" group="0" />
<card id="418" rarity="3" type="0" up="7" lt="5" dn="6" rt="8" sort="403" group="0" />
<card id="419" rarity="4" type="0" up="9" lt="8" dn="5" rt="7" sort="404" group="0" />
<card id="420" rarity="4" type="0" up="3" lt="10" dn="9" rt="5" sort="405" group="0" />
<card id="421" rarity="2" type="0" up="7" lt="3" dn="3" rt="8" sort="410" group="0" />
<card id="422" rarity="3" type="0" up="5" lt="7" dn="8" rt="6" sort="406" group="0" />
<card id="423" rarity="3" type="0" up="8" lt="8" dn="5" rt="5" sort="407" group="0" />
<card id="424" rarity="4" type="0" up="5" lt="5" dn="10" rt="9" sort="408" group="0" />
<card id="425" rarity="4" type="0" up="9" lt="10" dn="6" rt="3" sort="409" group="0" />
<card id="426" rarity="1" type="0" up="6" lt="4" dn="5" rt="4" sort="411" group="0" />
<card id="427" rarity="2" type="0" up="7" lt="8" dn="4" rt="4" sort="412" group="0" />
<card id="428" rarity="2" type="0" up="8" lt="4" dn="4" rt="7" sort="413" group="0" />
<card id="429" rarity="2" type="0" up="4" lt="4" dn="7" rt="8" sort="414" group="0" />
<card id="430" rarity="2" type="0" up="4" lt="7" dn="4" rt="8" sort="415" group="0" />
<card id="431" rarity="2" type="0" up="4" lt="7" dn="8" rt="4" sort="416" group="0" />
<card id="432" rarity="3" type="0" up="9" lt="7" dn="7" rt="2" sort="417" group="0" />
<card id="433" rarity="3" type="0" up="8" lt="2" dn="9" rt="6" sort="418" group="0" />
<card id="434" rarity="3" type="0" up="6" lt="8" dn="8" rt="5" sort="419" group="0" />
<card id="435" rarity="4" type="0" up="10" lt="10" dn="4" rt="4" sort="420" group="0" />
<card id="436" rarity="1" type="0" up="3" lt="6" dn="5" rt="4" sort="421" group="0" />
<card id="437" rarity="2" type="0" up="8" lt="5" dn="6" rt="3" sort="422" group="0" />
<card id="438" rarity="3" type="0" up="7" lt="7" dn="7" rt="7" sort="423" group="0" />
<card id="439" rarity="4" type="0" up="7" lt="9" dn="1" rt="10" sort="424" group="0" />
<card id="440" rarity="3" type="0" up="8" lt="6" dn="5" rt="8" sort="425" group="0" />
<card id="441" rarity="1" type="0" up="2" lt="5" dn="3" rt="7" sort="426" group="0" />
<card id="442" rarity="1" type="0" up="7" lt="2" dn="6" rt="2" sort="427" group="0" />
<card id="443" rarity="2" type="1" up="2" lt="7" dn="4" rt="8" sort="428" group="0" />
<card id="444" rarity="3" type="0" up="7" lt="4" dn="7" rt="9" sort="9999" group="0" />
</root>
================================================
FILE: assets/data/hashes.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<root>
<hash type="Rule" value="734146C648739673E4F01B3AE4FD069931BDE015D08686F620DBEB35495293199EF2F8" name="All Open" />
<hash type="Rule" value="6241880BB81B0288E63942B1FDBAC5E1103D09C2261379776879B3604CACD30D9F98D6" name="All Open" />
<hash type="Rule" value="AF41CD92A8B34270D4F57BB2C4FD06CC317DE469808A86F6108BE62949516324CEF2F8" name="All Open" />
<hash type="Rule" value="ED41E76E98AB8170F5B1C23668D81AD900BD2213F60A5873322D5C684D7E903DBF4AB3" name="Ascension" />
<hash type="Rule" value="1441DDF9972B8C08E0F69A38CA892585037F1AA6873593FF483FB1495C108856C8E1E4" name="Ascension" />
<hash type="Rule" value="4041568A6AB30B58FD3696BC1F692B4F203996D44236FABB60E71A3C08003114373AC4" name="Chaos" />
<hash type="Rule" value="394184035193A161E878C37E25A8A68D7B7C2BE4939AC83FF5B185419DA316430C5CEF" name="Descension" />
<hash type="Rule" value="5C41C3C41A43CABDC337243FDA67A4015E3A24CCD8AB5A3F30BAD5134E1205D0399399" name="Fallen Ace" />
<hash type="Rule" value="A841AC8F66A30F64FA3691BC6F997A5A643A9AE01375FEFB64D30A7D041031003B35C8" name="Order" />
<hash type="Rule" value="9A41211B2A359274C67143B743DD505901FB9DAD0374D7B73B6A089B1EC8C9321B4E6A" name="Plus" />
<hash type="Rule" value="C7418F435172FB72D795ACB80DCCE56998A863A8A1F1E0F50B138AC8588172573F1FD4" name="Plus" />
<hash type="Rule" value="12418EC062521FB0E5AC96F1185A853D037B06B598650667F8AE57F91D13C20EAB0CB8" name="Plus" />
<hash type="Rule" value="B54123C18ADF96A6C8779C70E24EF991173D598E424F0BFA4A0B2A0C1F6478056AB0D0" name="Reverse" />
<hash type="Rule" value="E5419E551D22C010C82698BF4A7D460E253BF48177FEEAF6180B52B9AD8127099B01DD" name="Same" />
<hash type="Rule" value="E341BF02FF17BD88E7754470FD5751E0B77CBC655546A2B22082A32B64F0C6A44E7E85" name="Same" />
<hash type="Rule" value="E441E2991921C119C935E5FE0ABD668D2037F4C073FDEBF3180B16648D9233566B65E8" name="Same" />
<hash type="Rule" value="6541CC069EEF3F52C465D737032950B62BEC1E988E2499B7A5270E175F0268B40D43D2" name="Same" />
<hash type="Rule" value="0B41F2FBE5EF4017F53561B582F227E166E40540D79125F7AECFA47A0C47D44D0B2096" name="Sudden Death" />
<hash type="Rule" value="7F419FF69DEF0123F232257791B667D085B40500D7802AFB9ACE68351D8FD89E275486" name="Sudden Death" />
<hash type="Rule" value="B841E4288D1F1A53E8FB8A7DA17F96DD142FA144DDF4A0E7501FC8852964CF001AE1C4" name="Swap" />
<hash type="Rule" value="D1410F9E6343689DC2F5C83D9DBC2488817F829EF1854937888CAC12F447D6076BE6D9" name="Three Open" />
<hash type="Rule" value="C041946CA6935D8EC0FA803EA8BC11C4803F0D9DA56785378488BC02E85BD2066BE2C4" name="Three Open" />
</root>
================================================
FILE: assets/data/loc.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<root>
<loc type="1" id="0" en="" />
<loc type="1" id="1" de="Zufällig" en="Roulette" fr="Roulette" ja="ルーレット" cn="天选" ko="무작위 규칙" />
<loc type="1" id="2" de="Alle offen" en="All Open" fr="Toutes sur table" ja="オールオープン" cn="全明牌" ko="모두 공개" />
<loc type="1" id="3" de="Drei offen" en="Three Open" fr="Trois sur table" ja="スリーオープン" cn="三明牌" ko="3장 공개" />
<loc type="1" id="4" de="Verlängerung" en="Sudden Death" fr="Mort subite" ja="サドンデス" cn="不胜不休" ko="연장전" />
<loc type="1" id="5" de="Umkehrung" en="Reverse" fr="Inversion" ja="リバース" cn="逆转" ko="역전" />
<loc type="1" id="6" de="Assfresser" en="Fallen Ace" fr="Tueur d'as" ja="エースキラー" cn="王牌杀手" ko="에이스 약화" />
<loc type="1" id="7" de="Gleich" en="Same" fr="Identique" ja="セイム" cn="同数" ko="동수" />
<loc type="1" id="8" de="Plus" en="Plus" fr="Plus" ja="プラス" cn="加算" ko="합산" />
<loc type="1" id="9" de="Bonus" en="Ascension" fr="Bonus" ja="タイプアセンド" cn="同类强化" ko="유형 강화" />
<loc type="1" id="10" de="Malus" en="Descension" fr="Malus" ja="タイプディセンド" cn="同类弱化" ko="유형 약화" />
<loc type="1" id="11" de="Ordnung" en="Order" fr="Ordre" ja="オーダー" cn="秩序" ko="순서대로" />
<loc type="1" id="12" de="Chaos" en="Chaos" fr="Chaos" ja="カオス" cn="混乱" ko="무작위 순서" />
<loc type="1" id="13" de="Tauschen" en="Swap" fr="Échange" ja="スワップ" cn="交换" ko="카드 교환" />
<loc type="1" id="14" de="Zufallshand" en="Random" fr="Aléatoire" ja="ランダムハンド" cn="随机" ko="무작위 패" />
<loc type="1" id="15" de="Improvisation" en="Draft" fr="Draft" ja="ドラフト" cn="选拔" ko="카드 선발" />
<loc type="2" id="0" en="" />
<loc type="2" id="1" de="Wilde Stämme" en="Society" fr="Homme-bête" ja="獣人タイプ" cn="兽人" ko="수인" />
<loc type="2" id="2" de="Primae" en="Primal" fr="Primordial" ja="蛮神タイプ" cn="蛮神" ko="야만신" />
<loc type="2" id="3" de="Bund" en="Scion" fr="Héritier" ja="暁タイプ" cn="拂晓" ko="새벽" />
<loc type="2" id="4" de="Garlear" en="Garlean" fr="Garlemaldais" ja="帝国タイプ" cn="帝国" ko="제국" />
<loc type="3" id="0" en="(hidden)" />
<loc type="3" id="1" de="Dodo" en="Dodo" fr="dodo" ja="ドードー" cn="渡渡鸟" ko="도도" />
<loc type="3" id="2" de="Tomberry" en="Tonberry" fr="tomberry" ja="トンベリ" cn="冬贝利" ko="톤베리" />
<loc type="3" id="3" de="Sabotender" en="Sabotender" fr="pampa" ja="サボテンダー" cn="仙人刺" ko="사보텐더" />
<loc type="3" id="4" de="Spriggan" en="Spriggan" fr="spriggan" ja="スプリガン" cn="魔石精" ko="스프리건" />
<loc type="3" id="5" de="Pudding" en="Pudding" fr="pudding" ja="プリン" cn="软糊怪" ko="푸딩" />
<loc type="3" id="6" de="Bomber" en="Bomb" fr="bombo" ja="ボム" cn="爆弹怪" ko="봄" />
<loc type="3" id="7" de="Mandragora" en="Mandragora" fr="mandragore" ja="マンドラゴラ" cn="蔓德拉" ko="만드라고라" />
<loc type="3" id="8" de="Kobalos" en="Coblyn" fr="coblyn" ja="コブラン" cn="矿爬虫" ko="코브란" />
<loc type="3" id="9" de="Morbol" en="Morbol" fr="morbol" ja="モルボル" cn="魔界花" ko="몰볼" />
<loc type="3" id="10" de="Coeurl" en="Coeurl" fr="coeurl" ja="クァール" cn="长须豹" ko="커얼" />
<loc type="3" id="11" de="Ahriman" en="Ahriman" fr="ahriman" ja="アーリマン" cn="冥鬼之眼" ko="아리만" />
<loc type="3" id="12" de="Goobbue" en="Goobbue" fr="goobbue" ja="グゥーブー" cn="古菩猩猩" ko="구부" />
<loc type="3" id="13" de="Chocobo" en="Chocobo" fr="chocobo" ja="チョコボ" cn="陆行鸟" ko="초코보" />
<loc type="3" id="14" de="Amalj'aa" en="Amalj'aa" fr="Amalj'aa" ja="アマルジャ" cn="蜥蜴人" ko="아말쟈" />
<loc type="3" id="15" de="Ixal" en="Ixal" fr="Ixal" ja="イクサル" cn="鸟人" ko="이크살" />
<loc type="3" id="16" de="Sylphe" en="Sylph" fr="Sylphe" ja="悪い子シルフ" cn="坏妖精" ko="말썽쟁이 실프" />
<loc type="3" id="17" de="Kobold" en="Kobold" fr="Kobold" ja="コボルド" cn="地灵" ko="코볼드" />
<loc type="3" id="18" de="Sahagin" en="Sahagin" fr="Sahuagin" ja="サハギン" cn="鱼人" ko="사하긴" />
<loc type="3" id="19" de="Tataru" en="Tataru Taru" fr="Tataru" ja="タタル・タル" cn="塔塔露·塔露" ko="타타루 타루" />
<loc type="3" id="20" de="Mogry" en="Moogle" fr="Mog" ja="モーグリ" cn="莫古力" ko="모그리" />
<loc type="3" id="21" de="Sirene" en="Siren" fr="sirène" ja="セイレーン" cn="塞壬" ko="세이렌" />
<loc type="3" id="22" de="Ultros & Typhon" en="Ultros & Typhon" fr="Orthros & Typhon" ja="オルトロス&テュポーン" cn="奥尔特罗斯&提丰" ko="오르트로스 & 티폰" />
<loc type="3" id="23" de="Dämonenwand" en="Demon Wall" fr="mur démonique" ja="デモンズウォール" cn="恶魔墙" ko="악마의 벽" />
<loc type="3" id="24" de="Sukkubus" en="Succubus" fr="succube" ja="サキュバス" cn="梦魔" ko="서큐버스" />
<loc type="3" id="25" de="Chimära" en="Chimera" fr="chimère" ja="キマイラ" cn="奇美拉" ko="키마이라" />
<loc type="3" id="26" de="Blauer Drache" en="Blue Dragon" fr="dragon bleu" ja="ブルードラゴン" cn="蓝龙" ko="푸른 용" />
<loc type="3" id="27" de="Bugaal Ja" en="Scarface Bugaal Ja" fr="Bugaal Ja" ja="美男のブガージャ" cn="美男子布迦加" ko="잘생긴 부가쟈" />
<loc type="3" id="28" de="Momodi" en="Momodi Modi" fr="Momodi" ja="モモディ・モディ" cn="莫莫蒂·莫蒂" ko="모모디 모디" />
<loc type="3" id="29" de="Baderon" en="Baderon Tenfingers" fr="Baderon" ja="十指のバデロン" cn="十指巴德龙" ko="열 손가락 바데론" />
<loc type="3" id="30" de="Miounne" en="Mother Miounne" fr="Miounne" ja="ミューヌ" cn="缪恩" ko="뮨" />
<loc type="3" id="31" de="Livia sas Junius" en="Livia sas Junius" fr="Livia" ja="リウィア・サス・ユニウス" cn="莉维亚·萨斯·尤尼乌斯" ko="리위아 사스 유니우스" />
<loc type="3" id="32" de="Rhitahtyn sas Arvina" en="Rhitahtyn sas Arvina" fr="Rhitahtyn" ja="リットアティン・サス・アルヴィナ" cn="里塔提恩·萨斯·阿维纳" ko="리트아틴 사스 아르비나" />
<loc type="3" id="33" de="Biggs & Wedge" en="Biggs & Wedge" fr="Biggs & Wedge" ja="ビッグス&ウェッジ" cn="比格斯&魏吉" ko="빅스 & 웨지" />
<loc type="3" id="34" de="Gerolt" en="Gerolt" fr="Gerolt" ja="ゲロルト・ブラックソーン" cn="盖罗尔特·布拉克索恩" ko="게롤트 블랙손" />
<loc type="3" id="35" de="Frixio" en="Frixio" fr="Frixio" ja="フリクシオ" cn="弗里克希奥" ko="프리크시오" />
<loc type="3" id="36" de="Mutagenix" en="Mutamix Bubblypots" fr="Mutamix" ja="ミュタミクス" cn="缪塔米克斯" ko="뮤타믹스" />
<loc type="3" id="37" de="Memeroon" en="Memeroon" fr="Memeroon" ja="メメルン" cn="梅梅卢恩" ko="메메룬" />
<loc type="3" id="38" de="Behemoth" en="Behemoth" fr="béhémoth" ja="ベヒーモス" cn="贝希摩斯" ko="베히모스" />
<loc type="3" id="39" de="Gilgamesch & Enkidu" en="Gilgamesh & Enkidu" fr="Gilgamesh & Enkidu" ja="ギルガメッシュ&エンキドゥ" cn="吉尔伽美什&恩奇都" ko="길가메시 & 엔키두" />
<loc type="3" id="40" de="Ifrit" en="Ifrit" fr="Ifrit" ja="イフリート" cn="伊弗利特" ko="이프리트" />
<loc type="3" id="41" de="Titan" en="Titan" fr="Titan" ja="タイタン" cn="泰坦" ko="타이탄" />
<loc type="3" id="42" de="Garuda" en="Garuda" fr="Garuda" ja="ガルーダ" cn="迦楼罗" ko="가루다" />
<loc type="3" id="43" de="Mogul Mog" en="Good King Moggle Mog XII" fr="Moggle Mog XII" ja="善王モグル・モグXII世" cn="贤王莫古尔·莫古十二世" ko="선왕 모그루 모그 XII세" />
<loc type="3" id="44" de="Raya-O-Senna & A-Ruhn-Senna" en="Raya-O-Senna & A-Ruhn-Senna" fr="Raya-O-Senna & A-Ruhn-Senna" ja="ラヤ・オ・センナ&ア・ルン・センナ" cn="拉雅·奥·神纳&阿·卢恩·神纳" ko="라야 오 센나 & 아 룬 센나" />
<loc type="3" id="45" de="Godbert Manderville" en="Godbert Manderville" fr="Godbert" ja="ゴッドベルト・マンダヴィル" cn="戈德伯特·曼德维尔" ko="고드베르트 맨더빌" />
<loc type="3" id="46" de="Thancred" en="Thancred" fr="Thancred" ja="サンクレッド" cn="桑克瑞德" ko="산크레드" />
<loc type="3" id="47" de="Nero tol Scaeva" en="Nero tol Scaeva" fr="Nero" ja="ネロ・トル・スカエウァ" cn="尼禄·托尔·斯卡艾瓦" ko="네로 톨 스카이와" />
<loc type="3" id="48" de="Papalymo & Yda" en="Papalymo & Yda" fr="Papalymo & Yda" ja="パパリモ&イダ" cn="帕帕力莫&伊达" ko="파파리모 & 이다" />
<loc type="3" id="49" de="Y'shtola" en="Y'shtola" fr="Y'shtola" ja="ヤ・シュトラ" cn="雅·修特拉" ko="야슈톨라" />
<loc type="3" id="50" de="Urianger" en="Urianger" fr="Urianger" ja="ウリエンジェ・オギュレ" cn="于里昂热·奥居雷" ko="위리앙제 오귀레" />
<loc type="3" id="51" de="Ultima-Waffe" en="Ultima Weapon" fr="Ultima Arma" ja="アルテマウェポン" cn="究极神兵" ko="알테마 웨폰" />
<loc type="3" id="52" de="Odin" en="Odin" fr="Odin" ja="オーディン" cn="奥丁" ko="오딘" />
<loc type="3" id="53" de="Ramuh" en="Ramuh" fr="Ramuh" ja="ラムウ" cn="拉姆" ko="라무" />
<loc type="3" id="54" de="Leviathan" en="Leviathan" fr="Léviathan" ja="リヴァイアサン" cn="利维亚桑" ko="리바이어선" />
<loc type="3" id="55" de="Shiva" en="Shiva" fr="Shiva" ja="シヴァ" cn="希瓦" ko="시바" />
<loc type="3" id="56" de="Minfilia" en="Minfilia" fr="Minfilia" ja="ミンフィリア" cn="敏菲利亚" ko="민필리아" />
<loc type="3" id="57" de="Lahabrea" en="Lahabrea" fr="Lahabrea" ja="アシエン・ラハブレア" cn="无影拉哈布雷亚" ko="아씨엔 라하브레아" />
<loc type="3" id="58" de="Cid Garlond" en="Cid Garlond" fr="Cid" ja="シド・ガーロンド" cn="西德·加隆德" ko="시드 갈론드" />
<loc type="3" id="59" de="Alphinaud & Alisaie" en="Alphinaud & Alisaie" fr="Alphinaud & Alisaie" ja="アルフィノ&アリゼー" cn="阿尔菲诺&阿莉塞" ko="알피노 & 알리제" />
<loc type="3" id="60" de="Louisoix Leveilleur" en="Louisoix Leveilleur" fr="Louisoix" ja="ルイゾワ・ルヴェユール" cn="路易索瓦·莱韦耶勒尔" ko="루이수아 르베유르" />
<loc type="3" id="61" de="Bahamut" en="Bahamut" fr="Bahamut" ja="バハムート" cn="巴哈姆特" ko="바하무트" />
<loc type="3" id="62" de="Hildibrand & Nashu" en="Hildibrand & Nashu Mhakaracca" fr="Hildibrand & Nashu Mhakaracca" ja="ヒルディブランド&ナシュ・マカラッカ" cn="希尔迪布兰德&娜修·玛卡拉卡" ko="힐디브랜드 & 나슈 마카라카" />
<loc type="3" id="63" de="Nanamo" en="Nanamo Ul Namo" fr="Nanamo" ja="ナナモ・ウル・ナモ" cn="娜娜莫·乌尔·娜莫" ko="나나모 울 나모" />
<loc type="3" id="64" de="Gaius van Baelsar" en="Gaius van Baelsar" fr="Gaius" ja="ガイウス・ヴァン・バエサル" cn="盖乌斯·范·巴埃萨" ko="가이우스 반 바일사르" />
<loc type="3" id="65" de="Merlwyb" en="Merlwyb Bloefhiswyn" fr="Merlwyb" ja="メルウィブ・ブルーフィスウィン" cn="梅尔维布·布鲁菲斯维因" ko="멜위브 블루피쉰" />
<loc type="3" id="66" de="Kan-E-Senna" en="Kan-E-Senna" fr="Kan-E-Senna" ja="カヌ・エ・センナ" cn="嘉恩·艾·神纳" ko="카느 에 센나" />
<loc type="3" id="67" de="Raubahn" en="Raubahn Aldynn" fr="Raubahn" ja="ラウバーン・アルディン" cn="劳班·阿尔丁" ko="라우반 알딘" />
<loc type="3" id="68" de="Krieger des Lichts" en="Warrior of Light" fr="Guerrier de la Lumière" ja="ウォーリア・オブ・ライト" cn="光之战士" ko="빛의 전사" />
<loc type="3" id="69" de="Firion" en="Firion" fr="Firion" ja="フリオニール" cn="弗利奥尼尔" ko="프리오닐" />
<loc type="3" id="70" de="Zwiebelritter" en="Onion Knight" fr="chevalier Oignon" ja="オニオンナイト" cn="洋葱剑士" ko="양파 기사" />
<loc type="3" id="71" de="Cecil Harvey" en="Cecil Harvey" fr="Cécil Harvey" ja="セシル・ハーヴィ" cn="塞西尔·哈维" ko="세실 하비" />
<loc type="3" id="72" de="Bartz Klauser" en="Bartz Klauser" fr="Bartz" ja="バッツ・クラウザー" cn="巴兹·克劳泽" ko="바츠 클라우저" />
<loc type="3" id="73" de="Terra Branford" en="Terra Branford" fr="Terra" ja="ティナ・ブランフォード" cn="蒂娜·布兰福德" ko="티나 브랜포드" />
<loc type="3" id="74" de="Cloud Strife" en="Cloud Strife" fr="Cloud" ja="クラウド・ストライフ" cn="克劳德·斯特莱夫" ko="클라우드 스트라이프" />
<loc type="3" id="75" de="Squall Leonhart" en="Squall Leonhart" fr="Squall" ja="スコール・レオンハート" cn="斯考尔·莱昂哈特" ko="스콜 레온하트" />
<loc type="3" id="76" de="Zidane Tribal" en="Zidane Tribal" fr="Djidane" ja="ジタン・トライバル" cn="吉坦·特莱巴尔" ko="지탄 트라이벌" />
<loc type="3" id="77" de="Tidus" en="Tidus" fr="Tidus" ja="ティーダ" cn="提达" ko="티다" />
<loc type="3" id="78" de="Shantotto" en="Shantotto" fr="Shantotto" ja="シャントット" cn="香托托" ko="샨토토" />
<loc type="3" id="79" de="Vaan" en="Vaan" fr="Vaan" ja="ヴァン" cn="梵" ko="반" />
<loc type="3" id="80" de="Lightning" en="Lightning" fr="Lightning" ja="ライトニング" cn="雷光" ko="라이트닝" />
<loc type="3" id="81" de="Geira-Katze" en="Gaelicat" fr="gaélichat" ja="ゲイラキャット" cn="风筝猫" ko="게일리캣" />
<loc type="3" id="82" de="Vanu Vanu" en="Vanu Vanu" fr="Vanu Vanu" ja="バヌバヌ" cn="瓦努族" ko="바누바누" />
<loc type="3" id="83" de="Gnath" en="Gnath" fr="Gnathe" ja="グナース" cn="骨颌族" ko="그나스" />
<loc type="3" id="84" de="Yugiri Nebelschleicher" en="Yugiri Mistwalker" fr="Yugiri" ja="霧隠のユウギリ" cn="雾中行者夕雾" ko="안개의 유우기리" />
<loc type="3" id="85" de="Chocomoppel" en="Fat Chocobo" fr="gros chocobo" ja="でぶチョコボ" cn="胖陆行鸟" ko="뚱보초코보" />
<loc type="3" id="86" de="Greif" en="Griffin" fr="griffon" ja="グリフィン" cn="狮鹫" ko="그리핀" />
<loc type="3" id="87" de="Tioman" en="Tioman" fr="Tioman" ja="ティオマン" cn="刁曼" ko="티오만" />
<loc type="3" id="88" de="Estinien" en="Estinien" fr="Estinien" ja="エスティニアン" cn="埃斯蒂尼安" ko="에스티니앙" />
<loc type="3" id="89" de="Lucia goe Junius" en="Lucia goe Junius" fr="Lucia" ja="ルキア" cn="露琪亚" ko="루키아" />
<loc type="3" id="90" de="Ysayle" en="Ysayle" fr="Ysayle" ja="イゼル" cn="伊塞勒" ko="이젤" />
<loc type="3" id="91" de="Hilda" en="Hilda" fr="Hilda" ja="ヒルダ" cn="希尔达" ko="힐다" />
<loc type="3" id="92" de="Matoya" en="Matoya" fr="Matoya" ja="マトーヤ" cn="玛托雅" ko="마토야" />
<loc type="3" id="93" de="Graf Edmont Fortemps" en="Count Edmont de Fortemps" fr="Edmont de Fortemps" ja="エドモン・ド・フォルタン" cn="埃德蒙·德·福尔唐" ko="에드몽 드 포르탕" />
<loc type="3" id="94" de="Byblos" en="Byblos" fr="Byblos" ja="ビブロス" cn="比布鲁斯" ko="비블로스" />
<loc type="3" id="95" de="Haurchefant" en="Haurchefant" fr="Haurchefant" ja="オルシュファン" cn="奥尔什方" ko="오르슈팡" />
<loc type="3" id="96" de="Aymeric" en="Aymeric" fr="Aymeric" ja="アイメリク" cn="艾默里克" ko="아이메리크" />
<loc type="3" id="97" de="Ravana" en="Ravana" fr="Ravana" ja="ラーヴァナ" cn="罗波那" ko="라바나" />
<loc type="3" id="98" de="Bismarck" en="Bismarck" fr="Bismarck" ja="ビスマルク" cn="俾斯麦" ko="비스마르크" />
<loc type="3" id="99" de="Nidhogg" en="Nidhogg" fr="Nidhogg" ja="ニーズヘッグ" cn="尼德霍格" ko="니드호그" />
<loc type="3" id="100" de="Midgardsormr" en="Midgardsormr" fr="Midgardsormr" ja="ミドガルズオルム" cn="尘世幻龙" ko="미드가르드오름" />
<loc type="3" id="101" de="Glotzauge" en="Deepeye" fr="oculus" ja="ディープアイ" cn="深瞳" ko="볼록눈" />
<loc type="3" id="102" de="Archaeornis" en="Archaeornis" fr="archéornis" ja="アルケオーニス" cn="古鸟" ko="아르케오니스" />
<loc type="3" id="103" de="Paissa" en="Paissa" fr="païssa" ja="パイッサ" cn="猴面雀" ko="파이싸" />
<loc type="3" id="104" de="Dhalmel" en="Dhalmel" fr="dhalmel" ja="ダルメル" cn="长颈驼" ko="달멜" />
<loc type="3" id="105" de="Bandersnatch" en="Bandersnatch" fr="bandersnatch" ja="バンダースナッチ" cn="斑攫兽" ko="밴더스내치" />
<loc type="3" id="106" de="Kriecher" en="Crawler" fr="chenille" ja="クロウラー" cn="毛爬虫" ko="누에" />
<loc type="3" id="107" de="Poroggo" en="Poroggo" fr="poroggo" ja="ポロッゴ" cn="智蛙" ko="포록고" />
<loc type="3" id="108" de="Vedrfölnir" en="Vedrfolnir" fr="Vedrfolnir" ja="ヴェズルフェルニル" cn="维德佛尔尼尔" ko="베드르폴니르" />
<loc type="3" id="109" de="Coeurl-Königin" en="Coeurlregina" fr="Regina coeurl" ja="クァールレギナ" cn="长须豹女王" ko="커얼레기나" />
<loc type="3" id="110" de="Progenitrix" en="Progenitrix" fr="Maman bombo" ja="マザーボム" cn="爆弹之母" ko="엄마 봄" />
<loc type="3" id="111" de="Belladonna" en="Belladonna" fr="Belladone" ja="ベラドンナ" cn="剧毒美人" ko="벨라돈나" />
<loc type="3" id="112" de="Echidna" en="Echidna" fr="Echidna" ja="エキドナ" cn="艾奇德娜" ko="에키드나" />
<loc type="3" id="113" de="Pipin Tarupin" en="Pipin Tarupin" fr="Pipin Tarupin" ja="ピピン・タルピン" cn="皮平·塔鲁平" ko="피핀 타루핀" />
<loc type="3" id="114" de="Julyan Manderville" en="Julyan Manderville" fr="Julyan Manderville" ja="ジュリアン・マンダヴィル" cn="茱莉安·曼德维尔" ko="줄리안 맨더빌" />
<loc type="3" id="115" de="Moglin" en="Moglin" fr="Moglin" ja="モグリン" cn="莫古灵" ko="모그린" />
<loc type="3" id="116" de="Charibert" en="Charibert" fr="Charibert" ja="シャリベル" cn="沙里贝尔" ko="샤리베르" />
<loc type="3" id="117" de="Rundblox" en="Roundrox" fr="Roundrox" ja="ラウンドロクス" cn="朗德洛克斯" ko="라운드록스" />
<loc type="3" id="118" de="Señor Kaktor" en="Senor Sabotender" fr="Señor Pampa" ja="セニョール・サボテンダー" cn="仙人刺先生" ko="세뇨르 사보텐더" />
<loc type="3" id="119" de="Regula van Hydrus" en="Regula van Hydrus" fr="Regula van Hydrus" ja="レグラ・ヴァン・ヒュドルス" cn="雷古拉·范·休著斯" ko="레굴라 반 히드루스" />
<loc type="3" id="120" de="Papst Thordan" en="Archbishop Thordan VII" fr="Thordan VII" ja="トールダン7世" cn="托尔丹七世" ko="토르당 7세" />
<loc type="3" id="121" de="Honoroit" en="Honoroit" fr="Honoroit" ja="オノロワ" cn="奥诺鲁瓦" ko="오노루아" />
<loc type="3" id="122" de="Grauer Felsen & Coultenet" en="Hoary Boulder & Coultenet" fr="Hoary Boulder & Coultenet" ja="ホーリー・ボルダー&クルトゥネ" cn="赫利·博尔达&库尔特内" ko="빛바랜 바위 & 쿨테네" />
<loc type="3" id="123" de="Brachiosaurus" en="Brachiosaur" fr="brachiosaure" ja="ブラキオレイドス" cn="腕龙" ko="브라키오레이도스" />
<loc type="3" id="124" de="Dunkelschuppe" en="Darkscale" fr="Sombrécaille" ja="ダークスケール" cn="暗鳞黑龙" ko="검은미늘" />
<loc type="3" id="125" de="Fenrir" en="Fenrir" fr="Fenrir" ja="フェンリル" cn="芬里尔" ko="펜리르" />
<loc type="3" id="126" de="Kraken" en="Kraken" fr="Kraken" ja="クラーケン" cn="克拉肯" ko="크라켄" />
<loc type="3" id="127" de="Statthalter" en="Vicegerent to the Warden" fr="adjoint de la Gardienne" ja="アーゼマヴァイスジェレント" cn="审理神代言者" ko="아제마 교황" />
<loc type="3" id="128" de="Molaa Ja Ja" en="Manxome Molaa Ja Ja" fr="Molaa Ja Ja" ja="光鱗のモラージャジャ" cn="光鳞兄弟莫拉加加" ko="빛나는 비늘의 몰라쟈쟈" />
<loc type="3" id="129" de="Ferdiad" en="Ferdiad" fr="Ferdiad" ja="フェルディア" cn="弗迪亚" ko="페르디아" />
<loc type="3" id="130" de="Calcobrina" en="Calcabrina" fr="Calcabrina" ja="カルコブリーナ" cn="卡尔克布莉娜" ko="칼카브리나" />
<loc type="3" id="131" de="Kuribu" en="Kuribu" fr="Kuribu" ja="クリブ" cn="基路伯" ko="쿠리부" />
<loc type="3" id="132" de="Phlegethon" en="Phlegethon" fr="Phlégéthon" ja="ティターン" cn="提坦" ko="티탄" />
<loc type="3" id="133" de="Artoirel" en="Artoirel de Fortemps" fr="Artoirel" ja="アルトアレール・ド・フォルタン" cn="阿图瓦雷尔·德·福尔唐" ko="아르투아렐 드 포르탕" />
<loc type="3" id="134" de="Emmanellain" en="Emmanellain de Fortemps" fr="Emmanellain" ja="エマネラン・ド・フォルタン" cn="埃马内兰·德·福尔唐" ko="에마넬랭 드 포르탕" />
<loc type="3" id="135" de="Xande" en="Xande" fr="Xande" ja="ザンデ" cn="赞德" ko="잔데" />
<loc type="3" id="136" de="Brutalus" en="Brute Justice" fr="Justicier" ja="ブルートジャスティス" cn="残暴正义号" ko="포악한 심판자" />
<loc type="3" id="137" de="Sephirot" en="Sephirot" fr="Sephirot" ja="セフィロト" cn="萨菲洛特" ko="세피로트" />
<loc type="3" id="138" de="F'lhaminn" en="F'lhaminn" fr="F'lhaminn" ja="フ・ラミン" cn="芙·拉敏" ko="프라민" />
<loc type="3" id="139" de="Vidofnir" en="Vidofnir" fr="Vidofnir" ja="ヴィゾーヴニル" cn="维德弗尼尔" ko="비도프니르" />
<loc type="3" id="140" de="Wolke der Dunkelheit" en="Cloud of Darkness" fr="Nuage de Ténèbres" ja="暗闇の雲" cn="暗黑之云" ko="어둠의 구름" />
<loc type="3" id="141" de="Lolorito Nanarito" en="Lolorito Nanarito" fr="Lolorito Nanarito" ja="ロロリト・ナナリト" cn="罗罗力特·纳纳力特" ko="로로리토 나나리토" />
<loc type="3" id="142" de="Gibrillont" en="Gibrillont" fr="Gibrillont" ja="ジブリオン" cn="吉布里隆" ko="지브리옹" />
<loc type="3" id="143" de="Laniaitte de Haillenarte" en="Laniaitte de Haillenarte" fr="Laniaitte de Haillenarte" ja="ラニエット・ド・アインハルト" cn="拉妮艾特·德·艾因哈特" ko="라니에트 드 아유나르트" />
<loc type="3" id="144" de="Rhoswen" en="Rhoswen" fr="Rhoswen" ja="ローズウェン" cn="罗丝温" ko="로즈웬" />
<loc type="3" id="145" de="Carvallain de Gorgagne" en="Carvallain de Gorgagne" fr="Carvallain de Gorgagne" ja="カルヴァラン・ド・ゴルガニュ" cn="卡尔瓦兰·德·戈尔加涅" ko="카르발랭 드 고르가뉴" />
<loc type="3" id="146" de="Kal Myhk" en="Kal Myhk" fr="Kal Myhk" ja="カル・ミーク" cn="卡尔·米克" ko="칼 미크" />
<loc type="3" id="147" de="Waukkeon" en="Waukkeon" fr="waukkeon" ja="ワウッケオン" cn="招雷巨蛇" ko="와우케온" />
<loc type="3" id="148" de="Kurator" en="Curator" fr="Conservateur" ja="キュレーター" cn="博物总管" ko="전시 책임자" />
<loc type="3" id="149" de="Rauschebart" en="Mistbeard" fr="Barbe-Brume" ja="霧髭" cn="大海盗雾须王" ko="안개수염" />
<loc type="3" id="150" de="Unei & Doga" en="Unei & Doga" fr="Unéi & Doga" ja="ウネ&ドーガ" cn="乌内&多加" ko="우네 & 도가" />
<loc type="3" id="151" de="Tiamat" en="Tiamat" fr="Tiamat" ja="ティアマット" cn="提亚马特" ko="티아마트" />
<loc type="3" id="152" de="Calofisteri" en="Calofisteri" fr="Calofisteri" ja="カロフィステリ" cn="卡洛菲斯提莉" ko="칼로피스테리" />
<loc type="3" id="153" de="Hraesvelgr" en="Hraesvelgr" fr="Hraesvelgr" ja="フレースヴェルグ" cn="赫拉斯瓦尔格" ko="흐레스벨그" />
<loc type="3" id="154" de="Apkallu" en="Apkallu" fr="apkallu" ja="アプカル" cn="碧企鹅" ko="아프칼루" />
<loc type="3" id="155" de="Kolibri" en="Colibri" fr="colibri" ja="コリブリ" cn="蜂鸟" ko="콜리브리" />
<loc type="3" id="156" de="Magitek-Todesklaue" en="Magitek Death Claw" fr="griffe de mort magitek" ja="魔導デスクロー" cn="魔导死亡爪" ko="마도 죽음손아귀" />
<loc type="3" id="157" de="Flüssige Flamme" en="Liquid Flame" fr="flamme liquide" ja="リクイドフレイム" cn="液态火焰" ko="액체 불꽃" />
<loc type="3" id="158" de="Schaf" en="Lost Lamb" fr="agneau égaré" ja="シープ" cn="迷途羊羔" ko="양" />
<loc type="3" id="159" de="Mogry-Postbote" en="Delivery Moogle" fr="Mog postier" ja="レターモーグリ" cn="邮差莫古力" ko="배달부 모그리" />
<loc type="3" id="160" de="Magitek-Colossus" en="Magitek Colossus" fr="colosse magitek" ja="魔導コロッサス" cn="魔导巨兵" ko="마도 콜로서스" />
<loc type="3" id="161" de="Strix" en="Strix" fr="Strix" ja="ストリックス" cn="博学林鸮" ko="스트릭스" />
<loc type="3" id="162" de="Tozol Huatotl" en="Tozol Huatotl" fr="Tozol Huatotl" ja="晴嵐のトゾル・ファトトル" cn="晴天霹雳托佐尔·法托特尔" ko="청풍의 토졸 후아토틀" />
<loc type="3" id="163" de="Prim-Alexander" en="Alexander Prime" fr="Primo-Alexander" ja="アレキサンダー・プライム" cn="至尊亚历山大" ko="알렉산더 프라임" />
<loc type="3" id="164" de="Brendt, Brennan & Bremondt" en="Brendt, Brennan, & Bremondt" fr="Brendt, Brennan & Bremondt" ja="気さくな三兄弟" cn="直爽的三兄弟" ko="넉살 좋은 삼형제" />
<loc type="3" id="165" de="Thancred (Heavensward)" en="Heavensward Thancred" fr="Thancred (Heavensward)" ja="サンクレッド(蒼天)" cn="桑克瑞德(苍穹)" ko="산크레드(창천의 이슈가르드)" />
<loc type="3" id="166" de="Y'shtola (Heavensward)" en="Heavensward Y'shtola" fr="Y'shtola (Heavensward)" ja="ヤ・シュトラ(蒼天)" cn="雅·修特拉(苍穹)" ko="야슈톨라(창천의 이슈가르드)" />
<loc type="3" id="167" de="Nael van Darnus" en="Nael van Darnus" fr="Nael van Darnus" ja="ネール・ヴァン・ダーナス" cn="奈尔·范·达纳斯" ko="넬 반 다르누스" />
<loc type="3" id="168" de="Sophia" en="Sophia" fr="Sophia" ja="ソフィア" cn="索菲娅" ko="소피아" />
<loc type="3" id="169" de="Opo-Opo" en="Opo-opo" fr="opo-opo" ja="オポオポ" cn="奥猴" ko="오포오포" />
<loc type="3" id="170" de="Adaman-Taimai" en="Adamantoise" fr="adamankhélone" ja="アダマンタス" cn="精金龟" ko="금강거북" />
<loc type="3" id="171" de="Magitek-Frontbrecher" en="Magitek Vanguard" fr="avant-garde magitek" ja="魔導ヴァンガード" cn="魔导先锋" ko="마도 뱅가드" />
<loc type="3" id="172" de="Magitek-Kanonenschiff" en="Magitek Gunship" fr="vaisseau magitek" ja="魔導ガンシップ" cn="魔导炮艇" ko="마도 건십" />
<loc type="3" id="173" de="Goldhäschen" en="Gold Saucer Attendant" fr="Abbelina" ja="バニー" cn="兔女郎" ko="토끼 소녀" />
<loc type="3" id="174" de="Lavaskorpion" en="Lava Scorpion" fr="scorpion de lave" ja="ラーヴァスコーピオン" cn="熔岩蝎" ko="용암 전갈" />
<loc type="3" id="175" de="Magitek-Prädator" en="Magitek Predator" fr="prédateur magitek" ja="魔導プレデター" cn="魔导猎手" ko="마도 프레데터" />
<loc type="3" id="176" de="Magitek-Himmelspanzer" en="Magitek Sky Armor" fr="armure aérienne magitek" ja="魔導スカイアーマー" cn="魔导浮空装甲" ko="마도 스카이아머" />
<loc type="3" id="177" de="Der Greif" en="The Griffin" fr="Le Griffon" ja="鉄仮面" cn="铁面公卿" ko="철가면" />
<loc type="3" id="178" de="Roland" en="Roland" fr="Roland" ja="ローランド" cn="罗兰德" ko="롤랜드" />
<loc type="3" id="179" de="Nihil-Diabolos" en="Diabolos Hollow" fr="Diabolos nihil" ja="ディアボロス・ホロー" cn="虚空迪亚波罗斯" ko="공허의 디아볼로스" />
<loc type="3" id="180" de="Panzerwaffe" en="Armored Weapon" fr="arme blindée" ja="アームドウェポン" cn="武装重甲" ko="무장 병기" />
<loc type="3" id="181" de="Gigi" en="Gigi" fr="Gigi" ja="ギギ" cn="吉吉" ko="기기" />
<loc type="3" id="182" de="Zurvan" en="Zurvan" fr="Zurvan" ja="ズルワーン" cn="祖尔宛" ko="주르반" />
<loc type="3" id="183" de="Namazuo" en="Namazu" fr="Namazu" ja="ナマズオ" cn="鲶鱼精" ko="나마즈오" />
<loc type="3" id="184" de="Kojin" en="Kojin" fr="Kojin" ja="コウジン" cn="甲人" ko="코우진" />
<loc type="3" id="185" de="Ananta" en="Ananta" fr="Ananta" ja="アナンタ" cn="阿难陀族" ko="아난타" />
<loc type="3" id="186" de="M'naago" en="M'naago" fr="M'naago" ja="メ・ナーゴ" cn="梅·娜格" ko="메나고" />
<loc type="3" id="187" de="Kotokaze" en="Kotokaze" fr="Kotokaze" ja="コトカゼ" cn="琴风" ko="코토카제" />
<loc type="3" id="188" de="Mammut" en="Mammoth" fr="mammouth" ja="マンモス" cn="长毛象" ko="매머드" />
<loc type="3" id="189" de="Phoebad" en="Phoebad" fr="phoebad" ja="フォーバッド" cn="弗巴德" ko="포배드" />
<loc type="3" id="190" de="Susano" en="Susano" fr="Susano" ja="スサノオ" cn="须佐之男" ko="스사노오" />
<loc type="3" id="191" de="Lakshmi" en="Lakshmi" fr="Lakshmi" ja="ラクシュミ" cn="吉祥天女" ko="락슈미" />
<loc type="3" id="192" de="Grynewaht" en="Grynewaht" fr="Grynewaht" ja="グリーンワート" cn="格林瓦特" ko="그륀바트" />
<loc type="3" id="193" de="Rasho" en="Rasho" fr="Rasho" ja="ラショウ" cn="罗生" ko="라쇼" />
<loc type="3" id="194" de="Cirina" en="Cirina" fr="Cirina" ja="シリナ" cn="其日娜" ko="시리나" />
<loc type="3" id="195" de="Magnai" en="Magnai" fr="Magnai" ja="マグナイ" cn="玛格奈" ko="마그나이" />
<loc type="3" id="196" de="Sadu" en="Sadu" fr="Sadu" ja="サドゥ" cn="纱都" ko="사두" />
<loc type="3" id="197" de="Shinryu" en="Shinryu" fr="Shinryu" ja="神龍" cn="神龙" ko="신룡" />
<loc type="3" id="198" de="Yotsuyu" en="Yotsuyu" fr="Yotsuyu" ja="ヨツユ" cn="夜露" ko="요츠유" />
<loc type="3" id="199" de="Krile" en="Krile" fr="Krile Baldesion" ja="クルル・バルデシオン" cn="可露儿·巴尔德西昂" ko="쿠루루 발데시온" />
<loc type="3" id="200" de="Lyse" en="Lyse" fr="Lyse" ja="リセ" cn="莉瑟" ko="리세" />
<loc type="3" id="201" de="Zenos yae Galvus" en="Zenos yae Galvus" fr="Zenos yae Galvus" ja="ゼノス・イェー・ガルヴァス" cn="芝诺斯·耶·加尔乌斯" ko="제노스 예 갈부스" />
<loc type="3" id="202" de="Hien" en="Hien" fr="Hien" ja="ヒエン" cn="飞燕" ko="히엔" />
<loc type="3" id="203" de="Moosling" en="Mossling" fr="moussemousse" ja="モスモス" cn="苔小妖" ko="이끼이끼" />
<loc type="3" id="204" de="Chapuli" en="Chapuli" fr="chapuli" ja="チャプリ" cn="洽普利蚱蜢" ko="큰메뚜기" />
<loc type="3" id="205" de="Qiqirn-Fleischfresser" en="Qiqirn Meateater" fr="Qiqirn croque-viande" ja="キキルン・ミートイーター" cn="卢恩人食肉者" ko="키키룬 고기냠냠이" />
<loc type="3" id="206" de="Hrodric Giftzunge" en="Hrodric Poisontongue" fr="Hrodric le Médisant" ja="直言のフロドリック" cn="直言不讳赫罗德里克" ko="입바른 흐로드릭" />
<loc type="3" id="207" de="Fordola rem Lupus" en="Fordola rem Lupis" fr="Fordola rem Lupus" ja="フォルドラ・レム・ルプス" cn="芙朵拉·雷姆·卢普斯" ko="포르돌라 렘 루푸스" />
<loc type="3" id="208" de="Rofocale" en="Rofocale" fr="Rofocale le Roi centaure" ja="人馬王ロフォカレ" cn="人马王洛弗卡勒" ko="인마왕 로포칼레" />
<loc type="3" id="209" de="Argath Thadalfus" en="Argath Thadalfus" fr="Argath Thadalfus" ja="冷血剣アルガス" cn="冷血剑阿加斯" ko="냉혈검 아르가스" />
<loc type="3" id="210" de="Raubahn & Pipin" en="Raubahn & Pipin" fr="Raubahn & Pipin" ja="ラウバーン&ピピン" cn="劳班&皮平" ko="라우반 & 피핀" />
<loc type="3" id="211" de="Koja" en="Koja" fr="koja" ja="コジャ" cn="高加颅" ko="코자" />
<loc type="3" id="212" de="Ango" en="Ango" fr="ango" ja="アンゴ" cn="安居鮟鱇" ko="안고" />
<loc type="3" id="213" de="Wegleitsystem" en="Guidance Node" fr="sphère de guidage" ja="誘導システム" cn="导航系统" ko="유도 시스템" />
<loc type="3" id="214" de="Tansui" en="Tansui" fr="Tansui" ja="タンスイ" cn="湛水" ko="탄스이" />
<loc type="3" id="215" de="Genbu" en="Genbu" fr="Genbu" ja="玄武" cn="玄武" ko="현무" />
<loc type="3" id="216" de="Byakko" en="Byakko" fr="Byakko" ja="白虎" cn="白虎" ko="백호" />
<loc type="3" id="217" de="Arenvald Lentinus" en="Arenvald Lentinus" fr="Arenvald Lentinus" ja="アレンヴァルド・レンティヌス" cn="阿雷恩瓦尔德·伦提努斯" ko="아렌발드 렌티누스" />
<loc type="3" id="218" de="Lupin" en="Lupin" fr="Lupin" ja="人狼族" cn="狼人族" ko="인랑족" />
<loc type="3" id="219" de="Hancock" en="Hancock" fr="Hancock" ja="ハンコック" cn="汉考克" ko="행콕" />
<loc type="3" id="220" de="Hisui & Kurenai" en="Hisui & Kurenai" fr="Hisui & Kurenai" ja="ヒスイ&クレナイ" cn="翡翠&红" ko="히스이 & 쿠레나이" />
<loc type="3" id="221" de="Wanyudo & Katasharin" en="Wanyudo & Katasharin" fr="wanyûdô & katasharin" ja="ワニュウドウ&カタシャリン" cn="轮入道&片轮车" ko="총각바퀴 & 처녀바퀴" />
<loc type="3" id="222" de="Hatamoto" en="Hatamoto" fr="hatamoto" ja="ハタモト" cn="旗本" ko="직속 무사" />
<loc type="3" id="223" de="Flöckchen" en="Yukinko" fr="yukinko" ja="ユキンコ" cn="雪童子" ko="눈요정" />
<loc type="3" id="224" de="Qitian Dasheng" en="Qitian Dasheng" fr="Qitian Dasheng" ja="セイテンタイセイ" cn="齐天大圣" ko="제천대성" />
<loc type="3" id="225" de="Hiruko" en="Hiruko" fr="Hiruko" ja="ヒルコ" cn="蛭子" ko="히루코" />
<loc type="3" id="226" de="Glückshase" en="Happy Bunny" fr="lapin du bonheur" ja="しあわせうさぎ" cn="幸福兔" ko="행운토끼" />
<loc type="3" id="227" de="Louhi" en="Louhi" fr="Louhi" ja="ロウヒ" cn="娄希" ko="로우히" />
<loc type="3" id="228" de="Tsukuyomi" en="Tsukuyomi" fr="Tsukuyomi" ja="ツクヨミ" cn="月读" ko="츠쿠요미" />
<loc type="3" id="229" de="Yiasmat" en="Yiazmat" fr="Yiazmat" ja="鬼龍ヤズマット" cn="鬼龙雅兹玛特" ko="귀룡 야즈마트" />
<loc type="3" id="230" de="Gosetsu" en="Gosetsu" fr="Gosetsu" ja="ゴウセツ" cn="豪雪" ko="고우세츠" />
<loc type="3" id="231" de="Karakuri Hannya" en="Karakuri Hanya" fr="hannya karakuri" ja="カラクリ・ハンニャ" cn="机关般若" ko="꼭두각시 한냐" />
<loc type="3" id="232" de="Muhtsu" en="Muud Suud" fr="moudsoud" ja="ムードスード" cn="姆德斯德" ko="무드수드" />
<loc type="3" id="233" de="Tokkapchi" en="Tokkapchi" fr="Tokkapchi" ja="トカップチ" cn="枯腐泥妖" ko="진흙장사" />
<loc type="3" id="234" de="Nebeldrache" en="Mist Dragon" fr="dragon des brumes" ja="ミストドラゴン" cn="雾龙" ko="안개 드래곤" />
<loc type="3" id="235" de="Suzaku" en="Suzaku" fr="Suzaku" ja="朱雀" cn="朱雀" ko="주작" />
<loc type="3" id="236" de="Pazuzu" en="Pazuzu" fr="Pazuzu" ja="パズズ" cn="帕祖祖" ko="파주주" />
<loc type="3" id="237" de="Penthesilea" en="Penthesilea" fr="Penthésilée" ja="ペンテシレイア" cn="彭忒西勒亚" ko="펜테실레이아" />
<loc type="3" id="238" de="Asahi sas Brutus" en="Asahi sas Brutus" fr="Asahi sas Brutus" ja="アサヒ・サス・ブルトゥス" cn="朝阳·萨斯·布鲁图斯" ko="아사히 사스 브루투스" />
<loc type="3" id="239" de="Yojinbo & Daigoro" en="Yojimbo & Daigoro" fr="Yojimbo & Daigoro" ja="ヨウジンボウ&ダイゴロウ" cn="保镖&大五郎" ko="요우진보 & 다이고로" />
<loc type="3" id="240" de="Omega" en="Omega" fr="Oméga" ja="オメガ" cn="欧米茄" ko="오메가" />
<loc type="3" id="241" de="Tataru (Stormblood)" en="Stormblood Tataru Taru" fr="Tataru (Stormblood)" ja="タタル・タル(紅蓮)" cn="塔塔露·塔露(红莲)" ko="타타루 타루(홍련)" />
<loc type="3" id="242" de="Dvergr" en="Dvergr" fr="Dvergr" ja="ドゥエルグ" cn="矮儒" ko="드베르그" />
<loc type="3" id="243" de="Ejika Tsunjika" en="Ejika Tsunjika" fr="Ejika Tsunjika" ja="エジカ・ツンジカ" cn="艾吉卡·岑吉卡" ko="에지카 츤지카" />
<loc type="3" id="244" de="Prometheus" en="Prometheus" fr="Prometheus" ja="プロメテウス" cn="普罗米修斯" ko="프로메테우스" />
<loc type="3" id="245" de="Kristallwächter" en="Provenance Watcher" fr="Gardien de Provenance" ja="プロヴェナンス・ウォッチャー" cn="起源守望者" ko="기원 관찰자" />
<loc type="3" id="246" de="Seiryu" en="Seiryu" fr="Seiryû" ja="青龍" cn="青龙" ko="청룡" />
<loc type="3" id="247" de="Alpha" en="Alpha" fr="Alpha" ja="アルファ" cn="阿尔法" ko="알파" />
<loc type="3" id="248" de="Majestät Goldbartel" en="Great Gold Whisker" fr="Altesse namazu nain doré" ja="ナマキン大王" cn="金鲶大王" ko="금마즈오 대왕" />
<loc type="3" id="249" de="Gilgamesch (Stormblood)" en="Stormblood Gilgamesh" fr="Gilgamesh (Stormblood)" ja="ギルガメッシュ(紅蓮)" cn="吉尔伽美什(红莲)" ko="길가메시(홍련)" />
<loc type="3" id="250" de="Cherub Ultima" en="Ultima, the High Seraph" fr="Ultima, la Grande Séraphine" ja="聖天使アルテマ" cn="圣天使阿尔蒂玛" ko="성천사 알테마" />
<loc type="3" id="251" de="Alphinaud & Alisaie (Stormblood)" en="Stormblood Alphinaud & Alisaie" fr="Alphinaud & Alisaie (Stormblood)" ja="アルフィノ&アリゼー(紅蓮)" cn="阿尔菲诺&阿莉塞(红莲)" ko="알피노 & 알리제(홍련)" />
<loc type="3" id="252" de="Noctis Lucis Caelum" en="Noctis Lucis Caelum" fr="Noctis Lucis Caelum" ja="ノクティス・ルシス・チェラム" cn="诺克提斯·路西斯·切拉姆" ko="녹티스 루시스 카일룸" />
<loc type="3" id="253" de="Amaro" en="Amaro" fr="amaro" ja="アマロ" cn="阿马罗" ko="아마로" />
<loc type="3" id="254" de="Böse Waffe" en="Evil Weapon" fr="arme maligne" ja="イビルウェポン" cn="恶魔兵装" ko="무기마" />
<loc type="3" id="255" de="Eheleute Chai" en="Lord and Lady Chai" fr="Chai-Nuzz & Dulia-Chai" ja="チャイ夫妻" cn="采夫妇" ko="차이 부부" />
<loc type="3" id="256" de="Riesenkaktor" en="Gigantender" fr="gigapampa" ja="ギガテンダー" cn="巨人掌" ko="기가텐더" />
<loc type="3" id="257" de="Feo Ul" en="Feo Ul" fr="Feo Ul" ja="フェオ=ウル" cn="菲奥·乌儿" ko="페오 울" />
<loc type="3" id="258" de="Runar" en="Runar" fr="Runar" ja="ルナル" cn="鲁纳尔" ko="루나르" />
<loc type="3" id="259" de="Grenoldt" en="Grenoldt" fr="Grenoldt" ja="グレノルト" cn="盖雷诺尔特" ko="그레놀트" />
<loc type="3" id="260" de="Philia" en="Philia" fr="Philia" ja="フィリア" cn="斐利亚" ko="필리아" />
<loc type="3" id="261" de="Titania" en="Titania" fr="Titania" ja="ティターニア" cn="妖灵王缇坦妮雅" ko="티타니아" />
<loc type="3" id="262" de="Eros" en="Eros" fr="Éros" ja="エロース" cn="艾洛斯" ko="에로스" />
<loc type="3" id="263" de="Storge" en="Storge" fr="Storgê" ja="ストルゲー" cn="斯托尔戈" ko="스토르게" />
<loc type="3" id="264" de="Formidabel" en="Formidable" fr="Formidable" ja="フォーミダブル" cn="畏惧装甲" ko="어마무시" />
<loc type="3" id="265" de="Lyna" en="Lyna" fr="Lyna" ja="ライナ" cn="莱楠" ko="라이나" />
<loc type="3" id="266" de="Närrinnen" en="Jongleurs of Eulmore" fr="bouffonnes d'Eulmore" ja="ユールモアの道化" cn="游末邦的小丑" ko="율모어의 광대" />
<loc type="3" id="267" de="Innozenz" en="Innocence" fr="Innocence" ja="イノセンス" cn="无瑕灵君" ko="이노센스" />
<loc type="3" id="268" de="Y'shtola (Shadowbringers)" en="Shadowbringers Y'shtola" fr="Y'shtola (Shadowbringers)" ja="ヤ・シュトラ(漆黒)" cn="雅·修特拉(暗影)" ko="야슈톨라(칠흑)" />
<loc type="3" id="269" de="Urianger (Shadowbringers)" en="Shadowbringers Urianger" fr="Urianger (Shadowbringers)" ja="ウリエンジェ(漆黒)" cn="于里昂热(暗影)" ko="위리앙제(칠흑)" />
<loc type="3" id="270" de="Ran'jit" en="Ran'jit" fr="Ran'jit" ja="ランジート" cn="兰吉特" ko="란지트" />
<loc type="3" id="271" de="Hades" en="Hades" fr="Hadès" ja="ハーデス" cn="哈迪斯" ko="하데스" />
<loc type="3" id="272" de="Ardbert" en="Ardbert" fr="Ardbert" ja="アルバート" cn="阿尔博特" ko="아르버트" />
<loc type="3" id="273" de="Hobgoblin" en="Hobgoblin" fr="hobgobelin" ja="ホブゴブリン" cn="大哥布林" ko="홉고블린" />
<loc type="3" id="274" de="Quiexie" en="Porxie" fr="porxie" ja="ポークシー" cn="仙子猪" ko="포크시" />
<loc type="3" id="275" de="Leguan" en="Iguana" fr="iguane" ja="イグアナ" cn="鬣蜥" ko="이구아나" />
<loc type="3" id="276" de="Nu Mou" en="Nu Mou" fr="Nu Mou" ja="ン・モゥ" cn="恩莫" ko="응 모우" />
<loc type="3" id="277" de="Fuath" en="Fuath" fr="Fuath" ja="フーア" cn="水妖" ko="푸아" />
<loc type="3" id="278" de="Leanan Sidhe" en="Leannan Sith" fr="Leannan Sith" ja="リャナンシー" cn="凉南希" ko="랴난시" />
<loc type="3" id="279" de="Einsiedler" en="Seeker of Solitude" fr="ermite du palais" ja="黒の導師" cn="漆黑导师" ko="검은 도사" />
<loc type="3" id="280" de="Orakel des Lichts" en="Oracle of Light" fr="prêtresse de la Lumière" ja="光の巫女" cn="光之巫女" ko="빛의 무녀" />
<loc type="3" id="281" de="Archaeotania" en="Archaeotania" fr="Archaeotania" ja="アルケオタニア" cn="古塔尼亚" ko="아르케오타니아" />
<loc type="3" id="282" de="9S" en="9S" fr="9S" ja="9S" cn="9S" ko="9S" />
<loc type="3" id="283" de="Blumenkorb" en="Flower Basket" fr="panier fleuri" ja="フラワーバスケット" cn="花束篮筐" ko="꽃바구니" />
<loc type="3" id="284" de="Qitari" en="Qitari" fr="Qitari" ja="キタリ" cn="奇塔利" ko="키타리" />
<loc type="3" id="285" de="Gnoll" en="Gnoll" fr="gnole" ja="ノール" cn="异豺" ko="놀" />
<loc type="3" id="286" de="Lizbeth" en="Lizbeth" fr="Lizbeth" ja="リズベス" cn="莉兹贝丝" ko="리즈베스" />
<loc type="3" id="287" de="Fledersquatch" en="Batsquatch" fr="Batsquatch" ja="バッツカッチ" cn="大脚野蝠" ko="배츠콰치" />
<loc type="3" id="288" de="Geläuterte Unzucht" en="Forgiven Obscenity" fr="obscénité pardonnée" ja="フォーギヴン・オブセニティー" cn="得到宽恕的猥亵" ko="면죄된 외설" />
<loc type="3" id="289" de="Huaca" en="Huaca" fr="Huaca" ja="フアガス" cn="华迦斯" ko="후아카" />
<loc type="3" id="290" de="Abscheuliches Monstrum" en="Unknown" fr="inconnu" ja="正体不明" cn="不明物体" ko="정체불명" />
<loc type="3" id="291" de="Rubin-Waffe" en="Ruby Weapon" fr="Arme Rubis" ja="ルビーウェポン" cn="红宝石神兵" ko="루비 웨폰" />
<loc type="3" id="292" de="Therion" en="Therion" fr="Mégatherion" ja="メガセリオン" cn="至大灾兽" ko="메가테리온" />
<loc type="3" id="293" de="Varis yae Galvus" en="Varis yae Galvus" fr="Varis yae Galvus" ja="ヴァリス・イェー・ガルヴァス" cn="瓦厉斯·耶·加尔乌斯" ko="바리스 예 갈부스" />
<loc type="3" id="294" de="Zwerg" en="Dwarf" fr="Nain" ja="ドワーフ" cn="矮人" ko="드워프" />
<loc type="3" id="295" de="Ehll Tou" en="Ehll Tou" fr="Ehll Tou" ja="エル・トゥ" cn="艾尔·图" ko="엘 투" />
<loc type="3" id="296" de="Zwergenpanzer" en="Rolling Tankard" fr="automatank" ja="ドワーフ戦車" cn="矮人战车" ko="드워프 전차" />
<loc type="3" id="297" de="Lugus" en="Lugus" fr="Lugus" ja="ルゴス" cn="卢格斯" ko="루구스" />
<loc type="3" id="298" de="Dawon" en="Dawon" fr="Dawon" ja="ドゥン" cn="达温" ko="다우언" />
<loc type="3" id="299" de="Adrammelech" en="Adrammelech" fr="Adrammelech" ja="アドラメレク" cn="阿德拉梅里克" ko="아드람멜렉" />
<loc type="3" id="300" de="Elidibus" en="Elidibus" fr="Elidibus" ja="アシエン・エリディブス" cn="无影艾里迪布斯" ko="아씨엔 엘리디부스" />
<loc type="3" id="301" de="Thancred (Shadowbringers)" en="Shadowbringers Thancred" fr="Thancred (Shadowbringers)" ja="サンクレッド(漆黒)" cn="桑克瑞德(暗影)" ko="산크레드(칠흑)" />
<loc type="3" id="302" de="Saphir-Waffe" en="Sapphire Weapon" fr="Arme Saphir" ja="サファイアウェポン" cn="蓝宝石神兵" ko="사파이어 웨폰" />
<loc type="3" id="303" de="2P" en="2P" fr="2P" ja="2P" cn="2P" ko="2P" />
<loc type="3" id="304" de="Krieger des Lichts (Shadowbringers)" en="Shadowbringers Warrior of Light" fr="Guerrier de la Lumière (Shadowbringers)" ja="ウォーリア・オブ・ライト(漆黒)" cn="光之战士(暗影)" ko="빛의 전사(칠흑)" />
<loc type="3" id="305" de="Blaubert Veilchenblau" en="Great Azuro" fr="Bleuet masqué" ja="マスク・ザ・ブルー" cn="蓝色假面" ko="청가면" />
<loc type="3" id="306" de="Muttersau" en="Mother Porxie" fr="mère porxie" ja="マザーポークシー" cn="仙子猪之母" ko="마더 포크시" />
<loc type="3" id="307" de="Trinität der Sucher" en="Trinity Seeker" fr="trinité soudée" ja="トリニティ・シーカー" cn="求道之三位一体" ko="탐구의 삼위일체" />
<loc type="3" id="308" de="Trinität der Eingeschworenen" en="Trinity Avowed" fr="trinité féale" ja="トリニティ・アヴァウド" cn="誓约之三位一体" ko="맹세의 삼위일체" />
<loc type="3" id="309" de="Azulmagia" en="Azulmagia" fr="Azulmagia" ja="アポカリョープス" cn="启示者" ko="아포칼리옵스" />
<loc type="3" id="310" de="Siegfried" en="Siegfried" fr="Siegfried" ja="ジークフリード" cn="齐格弗里德" ko="지크프리드" />
<loc type="3" id="311" de="Gogo der Mime" en="Gogo, Master of Mimicry" fr="Gogo le mime" ja="ものまね士ゴゴ" cn="模仿师格格" ko="흉내쟁이 고고" />
<loc type="3" id="312" de="Smaragd-Waffe" en="Emerald Weapon" fr="Arme Émeraude" ja="エメラルドウェポン" cn="绿宝石神兵" ko="에메랄드 웨폰" />
<loc type="3" id="313" de="Ryne" en="Ryne" fr="Ryne" ja="リーン" cn="琳" ko="린" />
<loc type="3" id="314" de="Gaia" en="Gaia" fr="Gaïa" ja="ガイア" cn="盖娅" ko="가이아" />
<loc type="3" id="315" de="Edens Verheißung" en="Eden's Promise" fr="Promesse d'Éden" ja="プロミス・オブ・エデン" cn="伊甸之约" ko="에덴의 약속" />
<loc type="3" id="316" de="Phoenix" en="Phoenix" fr="Phénix" ja="フェニックス" cn="不死鸟" ko="피닉스" />
<loc type="3" id="317" de="Kerkermeister" en="Keeper of the Keys" fr="gardien hypogéen" ja="キーパー・オブ・ダンジョン" cn="宝库守护者" ko="지하미궁 수호자" />
<loc type="3" id="318" de="Luna-Bahamut" en="Lunar Bahamut" fr="Luna-Bahamut" ja="ルナバハムート" cn="真月巴哈姆特" ko="루나 바하무트" />
<loc type="3" id="319" de="Valens van Varro" en="Valens van Varro" fr="Valens van Varro" ja="ウァレンス・ヴァン・ウァロ" cn="瓦伦斯·范·瓦罗" ko="발렌스 반 바로" />
<loc type="3" id="320" de="Luna-Ifrit" en="Lunar Ifrit" fr="Luna-Ifrit" ja="ルナイフリート" cn="真月伊弗利特" ko="루나 이프리트" />
<loc type="3" id="321" de="Shemhazai der IV. Legion" en="4th-make Shemhazai" fr="Shemhazai de la 4e légion" ja="IVレギオン・シュミハザ" cn="第四军团谢米哈扎" ko="IV군단 셰미하자" />
<loc type="3" id="322" de="Cuchulainn der IV. Legion" en="4th-make Cuchulainn" fr="Cúchulainn de la 4e légion" ja="IVレギオン・キュクレイン" cn="第四军团丘库雷因" ko="IV군단 쿠훌린" />
<loc type="3" id="323" de="G-Krieger" en="G-Warrior" fr="Guerrier-G" ja="Gウォリアー" cn="究极战士G型" ko="G 워리어" />
<loc type="3" id="324" de="Diamant-Waffe" en="Diamond Weapon" fr="Arme Diamant" ja="ダイヤウェポン" cn="钻石神兵" ko="다이아몬드 웨폰" />
<loc type="3" id="325" de="Diablo-Armament" en="Diablo Armament" fr="batterie d'artillerie Diablo" ja="ディアブロ・アーマメント" cn="迪亚布罗魔兵" ko="디아블로 아머먼트" />
<loc type="3" id="326" de="2B" en="2B" fr="2B" ja="2B" cn="2B" ko="2B" />
<loc type="3" id="327" de="Troll" en="Troll" fr="troll" ja="トロル" cn="巨魔" ko="트롤" />
<loc type="3" id="328" de="Pisaca" en="Pisaca" fr="pishacha" ja="ピシャーチャ" cn="毕舍遮" ko="피샤차" />
<loc type="3" id="329" de="Ea" en="Ea" fr="Éa" ja="イーア" cn="异亚" ko="이아" />
<loc type="3" id="330" de="Arkasodara" en="Arkasodara" fr="Arkasodara" ja="アルカソーダラ" cn="悌阳象族" ko="아르카소다라" />
<loc type="3" id="331" de="Loporrit" en="Loporrit" fr="Loporrite" ja="レポリット" cn="兔兔族" ko="레포릿" />
<loc type="3" id="332" de="Argos" en="Argos" fr="Argos" ja="アルゴス" cn="阿尔戈斯" ko="아르고스" />
<loc type="3" id="333" de="Hermes" en="Hermes" fr="Hermès" ja="ヘルメス" cn="赫尔墨斯" ko="헤르메스" />
<loc type="3" id="334" de="Splitterseele Amon" en="Amon the Undying" fr="Amon" ja="異執のアモン" cn="邪执外道的亚蒙" ko="이집의 아몬" />
<loc type="3" id="335" de="Erichthonios" en="Erichthonios" fr="Érichthonios" ja="エリクトニオス" cn="埃里克特翁尼亚斯" ko="에리크토니오스" />
<loc type="3" id="336" de="Magus-Schwestern" en="Magus Sisters" fr="sœurs Magus" ja="メーガス三姉妹" cn="梅加斯三姐妹" ko="메이거스 세 자매" />
<loc type="3" id="337" de="Meteion" en="Meteion" fr="Météion" ja="メーティオン" cn="梅蒂恩" ko="메테이온" />
<loc type="3" id="338" de="Fourchenault Leveilleur" en="Fourchenault Leveilleur" fr="Fourchenault" ja="フルシュノ・ルヴェユール" cn="富尔什诺·莱韦耶勒尔" ko="푸르슈노 르베유르" />
<loc type="3" id="339" de="Anima" en="Anima" fr="Anima" ja="アニマ" cn="阿尼玛" ko="아니마" />
<loc type="3" id="340" de="Quintus van Cinna" en="Quintus van Cinna" fr="Quintus van Cinna" ja="クイントゥス・ヴァン・キンナ" cn="昆图斯·范·秦纳" ko="퀸투스 반 킨나" />
<loc type="3" id="341" de="Alphinaud & Alisaie (Endwalker)" en="Endwalker Alphinaud & Alisaie" fr="Alphinaud & Alisaie (Endwalker)" ja="アルフィノ&アリゼー(暁月)" cn="阿尔菲诺&阿莉塞(晓月)" ko="알피노 & 알리제(효월)" />
<loc type="3" id="342" de="Hythlodaeus" en="Hythlodaeus" fr="Hythlodaeus" ja="ヒュトロダエウス" cn="希斯拉德" ko="휘틀로다이우스" />
<loc type="3" id="343" de="Vrtra" en="Vrtra" fr="Vrtra" ja="ヴリトラ" cn="弗栗多" ko="브리트라" />
<loc type="3" id="344" de="Zodiark" en="Zodiark" fr="Zordiarche" ja="ゾディアーク" cn="佐迪亚克" ko="조디아크" />
<loc type="3" id="345" de="Hydaelyn" en="Hydaelyn" fr="Hydaelyn" ja="ハイデリン" cn="海德林" ko="하이델린" />
<loc type="3" id="346" de="Zenos Galvus" en="Zenos Galvus" fr="Zenos Galvus" ja="ゼノス・ガルヴァス" cn="芝诺斯·加尔乌斯" ko="제노스 갈부스" />
<loc type="3" id="347" de="Schutzwall" en="Rampart" fr="rempart" ja="ランパート" cn="铁壁" ko="방어벽" />
<loc type="3" id="348" de="Hippowagen" en="Hippo Cart" fr="hippochar" ja="ヒッポカート" cn="河马车" ko="하마 마차" />
<loc type="3" id="349" de="Gajasura" en="Gajasura" fr="Gajasura" ja="ガジャースラ" cn="魔邪象族" ko="가자수라" />
<loc type="3" id="350" de="Rhalgr" en="Rhalgr" fr="Rhalgr" ja="ラールガー" cn="拉尔戈" ko="랄거" />
<loc type="3" id="351" de="Azeyma" en="Azeyma" fr="Azeyma" ja="アーゼマ" cn="阿泽玛" ko="아제마" />
<loc type="3" id="352" de="Nald" en="Nald" fr="Nald" ja="ナル" cn="纳尔" ko="날" />
<loc type="3" id="353" de="Thal" en="Thal" fr="Thal" ja="ザル" cn="札尔" ko="달" />
<loc type="3" id="354" de="Chi" en="Chi" fr="Khi" ja="カイ" cn="希" ko="키" />
<loc type="3" id="355" de="Daivadipa" en="Daivadipa" fr="Daivadipa" ja="ダイヴァディーパ" cn="明灯天王" ko="다이바디파" />
<loc type="3" id="356" de="Endsängerin" en="Endsinger" fr="chantre de l'anéantissement" ja="終焉を謳うもの" cn="讴歌终结之物" ko="종언을 노래하는 자" />
<loc type="3" id="357" de="N-7000" en="N-7000" fr="N-7000" ja="N-7000" cn="N-7000" ko="N-7000" />
<loc type="3" id="358" de="Geryon der Gewaltsame" en="Geryon the Steer" fr="Géryon le Dominateur" ja="覇道のゲーリュオン" cn="征服者革律翁" ko="패도의 게리온" />
<loc type="3" id="359" de="Gladiator von Sil'dih" en="Gladiator of Sil'dih" fr="gladiateur sildien" ja="シラディハ・グラディアトル" cn="希拉狄哈剑斗士" ko="실디하 검투사" />
<loc type="3" id="360" de="Ritter der Thorne" en="Thorne Knight" fr="chevalier-mage des Thorne" ja="ソーン・マジックナイト" cn="索恩自走人偶" ko="손 마법기사" />
<loc type="3" id="361" de="Beatrice" en="Beatrice" fr="Béatrice" ja="ベアトリーチェ" cn="贝雅特丽齐" ko="베아트리체" />
<loc type="3" id="362" de="Byregot" en="Byregot" fr="Byregot" ja="ビエルゴ" cn="比尔格" ko="비레고" />
<loc type="3" id="363" de="Zeless Gah" en="Shadowcaster Zeless Gah" fr="Zeless Gah" ja="影火のゼレズ・ガー" cn="鬼阴火泽雷斯·夏" ko="그림자불 젤레즈 가" />
<loc type="3" id="364" de="Scarmiglione" en="Scarmiglione" fr="Scarmiglione" ja="スカルミリョーネ" cn="斯卡米留尼" ko="스카르밀리오네" />
<loc type="3" id="365" de="Barbarizia" en="Barbariccia" fr="Barbariccia" ja="バルバリシア" cn="巴尔巴莉希娅" ko="바르바리차" />
<loc type="3" id="366" de="Leiter Lahabrea" en="Chief Keyward Lahabrea" fr="Lahabrea (passé)" ja="ラハブレア" cn="拉哈布雷亚" ko="라하브레아" />
<loc type="3" id="367" de="Hephaistos" en="Hephaistos" fr="Héphaïstos" ja="ヘファイストス" cn="赫淮斯托斯" ko="헤파이스토스" />
<loc type="3" id="368" de="Mechanik-Onmyoji & -Yojinbo" en="Clockwork Onmyoji & Clockwork Yojimbo" fr="prêtre onmyo mécanique & garde du corps mécanique" ja="からくり陰陽師&からくり用心棒" cn="机关阴阳师&机关保镖" ko="꼭두각시 음양사 & 꼭두각시 경호원" />
<loc type="3" id="369" de="Dreamingway" en="Dreamingway" fr="Dreamingway" ja="ドリーミングウェイ" cn="梦明威" ko="드리밍웨이" />
<loc type="3" id="370" de="Miaurizius" en="Felicitous Furball" fr="Chamoiselle" ja="ねこみみさん" cn="猫耳小员" ko="야옹 선생" />
<loc type="3" id="371" de="Anden" en="Anden" fr="Anden" ja="アンデン" cn="安登" ko="안덴" />
<loc type="3" id="372" de="Suprae-Lugae" en="Suprae-Lugae" fr="Super Lugae" ja="スーパールゲイエ" cn="超威卢格" ko="슈퍼 루게이에" />
<loc type="3" id="373" de="Gancanagh" en="Gancanagh" fr="Gancanagh" ja="ガンカナグー" cn="蜜言妖" ko="간카나" />
<loc type="3" id="374" de="Menphina" en="Menphina" fr="Menphina" ja="メネフィナ" cn="梅茵菲娜" ko="메느피나" />
<loc type="3" id="375" de="Cagnazzo" en="Cagnazzo" fr="Cagnazzo" ja="カイナッツォ" cn="凯纳槽" ko="카냐초" />
<loc type="3" id="376" de="Rubicante" en="Rubicante" fr="Rubicante" ja="ルビカンテ" cn="卢比坎特" ko="루비칸테" />
<loc type="3" id="377" de="Venat" en="Venat" fr="Venat" ja="ヴェーネス" cn="维涅斯" ko="베네스" />
<loc type="3" id="378" de="Kleiner Laternengeist" en="Okuri Chochin" fr="bake-chôchin" ja="バケチョウチン" cn="妖怪提灯" ko="요괴등" />
<loc type="3" id="379" de="Gorai der Entfesselte" en="Gorai the Uncaged" fr="Gôrai le fureteur" ja="鉄鼠ゴウライ" cn="铁鼠豪雷" ko="무쇠쥐 고우라이" />
<loc type="3" id="380" de="Moko der Rastlose" en="Moko the Restless" fr="Môko le tourmenté" ja="怨霊モウコ" cn="怨灵猛虎" ko="원령 모우코" />
<loc type="3" id="381" de="Oktomammut" en="Octomammoth" fr="octomammouth" ja="オクトマンモス" cn="八足巨妖" ko="옥토매머드" />
<loc type="3" id="382" de="Proto-Karfunkel" en="Proto-Carbuncle" fr="Proto-Carbuncle" ja="プロトカーバンクル" cn="原型宝石兽" ko="프로토 카벙클" />
<loc type="3" id="383" de="Goldor der Güldene" en="Goldor" fr="Goldor" ja="ゴールドル" cn="金德尔" ko="골도르" />
<loc type="3" id="384" de="Shishio" en="Shishio" fr="Shishiô" ja="獅子王" cn="狮子王" ko="사자왕" />
<loc type="3" id="385" de="Themis" en="Themis" fr="Thémis" ja="テミス" cn="特弥斯" ko="테미스" />
<loc type="3" id="386" de="Enenra" en="Enenra" fr="Enenra" ja="煙々羅" cn="烟烟罗" ko="엔엔라" />
<loc type="3" id="387" de="Golbez" en="Golbez" fr="Golbez" ja="ゴルベーザ" cn="高贝扎" ko="골베자" />
<loc type="3" id="388" de="Athena" en="Athena" fr="Athéna" ja="アテナ" cn="雅典娜" ko="아테나" />
<loc type="3" id="389" de="Ketuduke" en="Ketuduke" fr="Ketuduke" ja="ケトゥドゥケ" cn="凯图嘟凯" ko="케투두케" />
<loc type="3" id="390" de="Lala" en="Lala" fr="Lala" ja="ララ" cn="拉拉鲁" ko="랄랄" />
<loc type="3" id="391" de="Statice" en="Statice" fr="Statice" ja="スターチス" cn="斯塔缇丝" ko="스타티스" />
<loc type="3" id="392" de="Koyo-Koyo" en="PuPu" fr="Koyo K" ja="コヨコヨ" cn="可幽可幽" ko="코요코요" />
<loc type="3" id="393" de="Loquloqui" en="Loquloqui" fr="Loquloqui" ja="ロクロクイ" cn="罗库罗库伊" ko="로쿠로쿠이" />
<loc type="3" id="394" de="Nophica" en="Nophica" fr="Nophica" ja="ノフィカ" cn="诺菲卡" ko="노피카" />
<loc type="3" id="395" de="Althyk" en="Althyk" fr="Althyk" ja="アルジク" cn="阿尔基克" ko="알디크" />
<loc type="3" id="396" de="Nymeia" en="Nymeia" fr="Nymeia" ja="ニメーヤ" cn="妮美雅" ko="니메이아" />
<loc type="3" id="397" de="Halone" en="Halone" fr="Halone" ja="ハルオーネ" cn="哈罗妮" ko="할로네" />
<loc type="3" id="398" de="Thaliak" en="Thaliak" fr="Thaliak" ja="サリャク" cn="沙利亚克" ko="살리아크" />
<loc type="3" id="399" de="Llymlaen" en="Llymlaen" fr="Llymlaen" ja="リムレーン" cn="利姆莱茵" ko="리믈렌" />
<loc type="3" id="400" de="Oschon" en="Oschon" fr="Oschon" ja="オシュオン" cn="奥修昂" ko="오쉬온" />
<loc type="3" id="401" de="Durante" en="Durante" fr="Durante" ja="ドゥランテ" cn="杜兰特" ko="두란테" />
<loc type="3" id="402" de="Eulogia" en="Eulogia" fr="Eulogie" ja="エウロギア" cn="欧罗基亚" ko="에울로기아" />
<loc type="3" id="403" de="Asura" en="Asura" fr="Asura" ja="アスラ" cn="阿修罗" ko="아수라" />
<loc type="3" id="404" de="Zeromus" en="Zeromus" fr="Zeromus" ja="ゼロムス" cn="泽罗姆斯" ko="제로무스" />
<loc type="3" id="405" de="Clive Rosfield" en="Clive Rosfield" fr="Clive Rosfield" ja="クライヴ・ロズフィールド" cn="克莱夫·罗兹菲尔德" ko="클라이브 로즈필드" />
<loc type="3" id="406" de="Pelupelu" en="Pelupelu" fr="Pelupelu" ja="ペルペル" cn="佩鲁佩鲁族" ko="펠루펠루" />
<loc type="3" id="407" de="Alpaka" en="Alpaca" fr="alpaga" ja="アルパカ" cn="羊驼" ko="알파카" />
<loc type="3" id="408" de="Moblin" en="Moblin" fr="Mobelin" ja="モブリン" cn="莫布林" ko="모블린" />
<loc type="3" id="409" de="Zweigträger" en="Branchbearer" fr="sylveplume" ja="ブランチベアラー" cn="拟鸟枝" ko="나무전령" />
<loc type="3" id="410" de="Rroneek" en="Rroneek" fr="rroneek" ja="ロネーク" cn="犎牛" ko="로네크" />
<loc type="3" id="411" de="Einheit R8" en="Sentry R8" fr="sentinelle R" ja="セントリーR" cn="哨兵R" ko="보초병 R" />
<loc type="3" id="412" de="Auskunftsdrohne" en="Outrunner" fr="trékhoïde" ja="アウトランナー" cn="外勤机" ko="아웃러너" />
<loc type="3" id="413" de="Gulool Ja Ja" en="Gulool Ja Ja" fr="Gulool Ja Ja" ja="グルージャジャ" cn="古鲁加加" ko="굴루쟈쟈" />
<loc type="3" id="414" de="Schläfrich" en="Drowsie" fr="Somnolent" ja="ドラウジー" cn="瞌睡怪" ko="졸음보" />
<loc type="3" id="415" de="Ryoqor Terteh" en="Ryoqor Terteh" fr="Ryoqor Terteh" ja="リョコー・テーテ" cn="辽刻特特雪精" ko="료코 테테" />
<loc type="3" id="416" de="Hammerschädel" en="Maulskull" fr="Cabosseur" ja="モールスカル" cn="锤颅巨兵" ko="망치머리 거병" />
<loc type="3" id="417" de="Ambrose" en="Ambrose" fr="Ambrose" ja="アンブローズ" cn="安布罗斯" ko="앰브로즈" />
<loc type="3" id="418" de="Valigarmanda" en="Valigarmanda" fr="Valigarmanda" ja="ヴァリガルマンダ" cn="艳翼蛇鸟" ko="발리가르만다" />
<loc type="3" id="419" de="Zoraal Ja" en="Zoraal Ja" fr="Zoraal Ja" ja="ゾラージャ" cn="佐拉加" ko="조라쟈" />
<loc type="3" id="420" de="Ewige Königin" en="Queen Eternal" fr="Reine Éternité" ja="エターナルクイーン" cn="永恒女王" ko="이터널 퀸" />
<loc type="3" id="421" de="Schwarze Katze" en="Black Cat" fr="Black Cat" ja="ブラックキャット" cn="黑猫" ko="블랙 캣" />
<loc type="3" id="422" de="Otis" en="Otis" fr="Otis" ja="オーティス" cn="欧提斯" ko="오티스" />
<loc type="3" id="423" de="Cahciua" en="Cahciua" fr="Cahciua" ja="カフキワ" cn="喀赫奇瓦" ko="카흐키와" />
<loc type="3" id="424" de="Wuk Lamat" en="Wuk Lamat" fr="Wuk Lamat" ja="ウクラマト" cn="乌克·拉玛特" ko="우크라마트" />
<loc type="3" id="425" de="Sphene" en="Sphene" fr="Sphene" ja="スフェーン" cn="斯菲因" ko="스펜" />
<loc type="3" id="426" de="Forschungsleiter Kanilokka" en="Overseer Kanilokka" fr="Kanilokka" ja="所長カニロッカ" cn="卡尼洛喀站长" ko="소장 카닐로카" />
<loc type="3" id="427" de="Erzengel MR" en="Ark Angel MR" fr="Ark Angel MR" ja="Ark Angel MR" cn="方舟天使MR" ko="아크 엔젤 MR" />
<loc type="3" id="428" de="Erzengel TT" en="Ark Angel TT" fr="Ark Angel TT" ja="Ark Angel TT" cn="方舟天使TT" ko="아크 엔젤 TT" />
<loc type="3" id="429" de="Erzengel GK" en="Ark Angel GK" fr="Ark Angel GK" ja="Ark Angel GK" cn="方舟天使GK" ko="아크 엔젤 GK" />
<loc type="3" id="430" de="Erzengel HM" en="Ark Angel HM" fr="Ark Angel HM" ja="Ark Angel HM" cn="方舟天使HM" ko="아크 엔젤 HM" />
<loc type="3" id="431" de="Erzengel EV" en="Ark Angel EV" fr="Ark Angel EV" ja="Ark Angel EV" cn="方舟天使EV" ko="아크 엔젤 EV" />
<loc type="3" id="432" de="Ttokrrone" en="Ttokrrone" fr="Ttokrrone" ja="トクローネ" cn="得酷热涅" ko="토크로네" />
<loc type="3" id="433" de="Mica das Magische Mu" en="Mica the Magical Mu" fr="Mica le mu" ja="マイカ・ザ・ムー" cn="亩鼠米卡" ko="마술다람쥐 마이카" />
<loc type="3" id="434" de="Prishe" en="Prishe of the Distant Chains" fr="Prishe of the Distant Chains" ja="Prishe of the Distant Chains" cn="遥远的咒缚普利修" ko="아득한 주박의 프리슈" />
<loc type="3" id="435" de="Schattenlord" en="Shadow Lord" fr="Shadow Lord" ja="Shadow Lord" cn="暗之王" ko="어둠의 왕" />
<loc type="3" id="436" de="Mechalith" en="Valia Pira" fr="Obélisk" ja="ヴァリア・ピラ" />
<loc type="3" id="437" de="Ollier" en="Ollier" fr="Ollier" ja="オリアー" />
<loc type="3" id="438" de="Zelenia" en="Zelenia" fr="Zelenia" ja="ゼレニア" />
<loc type="3" id="439" de="Heulende Klinge" en="Howling Blade" fr="Howling Blade" ja="ハウリングブレード" />
<loc type="3" id="440" de="Magitaurus" en="Magitaur" fr="Magitaure" ja="マギタウロス" />
<loc type="3" id="441" de="Blauer Blättrich" en="Blue Leafkin" fr="sangfeuille bleu" ja="ブルーリフキン" />
<loc type="3" id="442" de="Wivre" en="Wivre" fr="wivre" ja="ウィヴル" />
<loc type="3" id="443" de="Doppro" en="Doppro" fr="Doppro" ja="ドプロ族" />
<loc type="3" id="444" de="König Elmer III." en="King Elmer III" fr="Elmer le Roi" ja="キングのエルマー" />
<loc type="4" id="1" de="Aurifort Kreuz" en="Aurifort of the Three Clubs" fr="Aurifort l'As de trèfle" ja="クラブのオリフォル" cn="梅花天王欧里福" ko="오리포르" />
<loc type="4" id="2" de="Baderon" en="Baderon" fr="Baderon" ja="バデロン" cn="巴德龙" ko="바데론" />
<loc type="4" id="3" de="Botan" en="Botan" fr="Botan" ja="ボタン" cn="牡丹" ko="보탄" />
<loc type="4" id="4" de="Buscarron" en="Buscarron" fr="Buscarron" ja="バスカロン" cn="巴斯卡隆" ko="버스카론" />
<loc type="4" id="5" de="Dominiac" en="Dominiac" fr="Dominiac" ja="ドミニアク" cn="多米尼亚克" ko="도미니아크" />
<loc type="4" id="6" de="Elaisse" en="Elaisse" fr="Elaisse" ja="エレイズ" cn="艾蕾兹" ko="엘레이스" />
<loc type="4" id="7" de="Ercanbald" en="Ercanbald" fr="Ercanbald" ja="アーカンバルド" cn="阿昆巴尔德" ko="어칸발드" />
<loc type="4" id="8" de="F'hobhas" en="F'hobhas" fr="F'hobhas" ja="フ・ホバス" cn="芙·霍芭丝" ko="프호바스" />
<loc type="4" id="9" de="Flichoirel [t] Hochnäsig[a]" en="Flichoirel the Lordling" fr="Flichoirel le Seigneurial" ja="高貴なるフリショワレル" cn="高贵的弗里休瓦雷尔" ko="고귀한 플리슈아렐" />
<loc type="4" id="10" de="Fufulupa" en="Fufulupa" fr="Fufulupa" ja="フフルパ" cn="弗弗鲁帕" ko="푸푸루파" />
<loc type="4" id="11" de="Garima" en="Garima" fr="Garima" ja="ガリマ" cn="伽利摩" ko="가리마" />
<loc type="4" id="12" de="Gegeruju" en="Gegeruju" fr="Gegeruju" ja="ゲゲルジュ" cn="格格鲁玖" ko="게게루주" />
<loc type="4" id="13" de="Gibrillont" en="Gibrillont" fr="Gibrillont" ja="ジブリオン" cn="吉布里隆" ko="지브리옹" />
<loc type="4" id="14" de="Guhtwint Karo" en="Guhtwint of the Three Diamonds" fr="Guhtwint l'As de carreau" ja="ダイヤのグートウィント" cn="方块天王古特文特" ko="구트빈트" />
<loc type="4" id="15" de="Gyoei" en="Gyoei" fr="Gyoei" ja="ギョエイ" cn="鱼影" ko="교에이" />
<loc type="4" id="16" de="Hab" en="Hab" fr="Hab" ja="ハブ" cn="哈布" ko="하브" />
<loc type="4" id="17" de="Hachinan" en="Hachinan" fr="Hachinan" ja="ハチナン" cn="八难" ko="하치난" />
<loc type="4" id="18" de="Salon-Meister" en="hall overseer" fr="croupier de l'arène" ja="ルームマスター" cn="对局室管理员" ko="카드 대결장 관리자" />
<loc type="4" id="19" de="Helmhart" en="Helmhart" fr="Helmhart" ja="ヘルムハート" cn="海尔姆哈特" ko="헬름하트" />
<loc type="4" id="20" de="Hetsukaze" en="Hetsukaze" fr="Hetsukaze" ja="ヘツカゼ" cn="边风" ko="헤츠카제" />
<loc type="4" id="21" de="Hokushin" en="Hokushin" fr="Hokushin" ja="ホクシン" cn="北辰" ko="호쿠신" />
<loc type="4" id="22" de="Sekretär[p] der Fortemps" en="House Fortemps manservant" fr="serviteur des Fortemps" ja="フォルタン家の執事" cn="福尔唐家的管家" ko="포르탕 가 집사" />
<loc type="4" id="23" de="gelangweilt[a] Garlear" en="idle imperial" fr="impérial désœuvré" ja="退屈そうな帝国兵" cn="无所事事的帝国兵" ko="지루해 보이는 제국병" />
<loc type="4" id="24" de="flüchtig[a] Garlear" en="imperial deserter" fr="soldat impérial" ja="帝国軍の脱走兵" cn="帝国军逃兵" ko="제국군 탈영병" />
<loc type="4" id="25" de="arbeitsfaul[a] Garlear" en="indolent imperial" fr="impérial paresseux" ja="気だるそうな帝国兵" cn="懒散的帝国兵" ko="나른해 보이는 제국 병사" />
<loc type="4" id="26" de="Garlond-Mitarbeiter" en="Ironworks hand" fr="employé des Forges" ja="ガーロンド社の調査員" cn="加隆德炼铁厂调查员" ko="갈론드 아이언웍스 조사원" />
<loc type="4" id="27" de="Isobe" en="Isobe" fr="Isobe" ja="イソベ" cn="矶边" ko="이소베" />
<loc type="4" id="28" de="Joellaut" en="Joellaut" fr="Joellaut" ja="ジョエロー" cn="若约" ko="조엘로" />
<loc type="4" id="29" de="Jonas Pik" en="Jonas of the Three Spades" fr="Jonas le Valet de pique" ja="スペードのジョナス" cn="黑桃天王乔纳斯" ko="조나스" />
<loc type="4" id="30" de="Kaizan" en="Kaizan" fr="Kaizan" ja="カイザン" cn="海山" ko="카이잔" />
<loc type="4" id="31" de="Kikimo" en="Kikimo" fr="Kikimo" ja="キキモ" cn="琪琪茉" ko="키키모" />
<loc type="4" id="32" de="König Elmer III." en="King Elmer III" fr="Elmer le Roi" ja="キングのエルマー" cn="幻卡王埃尔默" ko="엘머" />
<loc type="4" id="33" de="Kiuka" en="Kiuka" fr="Kiuka" ja="キウカ" cn="九夏" ko="키우카" />
<loc type="4" id="34" de="Klynthota" en="Klynthota" fr="Klynthota" ja="クリントータ" cn="克林托塔" ko="클륀토타" />
<loc type="4" id="35" de="Kotokaze" en="Kotokaze" fr="Kotokaze" ja="コトカゼ" cn="琴风" ko="코토카제" />
<loc type="4" id="36" de="Landenel" en="Landenel" fr="Landenel" ja="ランドゥネル" cn="朗德内尔" ko="랑드넬" />
<loc type="4" id="37" de="Laniaitte" en="Laniaitte" fr="Laniaitte" ja="ラニエット" cn="拉妮艾特" ko="라니에트" />
<loc type="4" id="38" de="Lewena" en="Lewena" fr="Lewena" ja="レウェナ" cn="莱维娜" ko="르웨나" />
<loc type="4" id="39" de="Linu Vali" en="Linu Vali" fr="Linu Vali" ja="リヌバリ" cn="利努瓦利" ko="리누바리" />
<loc type="4" id="40" de="Maisenta" en="Maisenta" fr="Maisenta" ja="黒兎堂 マイセンタ" cn="麦森塔" ko="마이센타" />
<loc type="4" id="41" de="Marcechamp" en="Marcechamp" fr="Marcechamp" ja="マルスシャン" cn="马塞尚" ko="마르스샹" />
<loc type="4" id="42" de="Marcette" en="Marcette" fr="Marcette" ja="マルセット" cn="马尔塞特" ko="마르세트" />
<loc type="4" id="43" de="Marielle" en="Marielle" fr="Marielle" ja="マリエル" cn="玛丽埃勒" ko="마리엘" />
<loc type="4" id="44" de="Masatsuchi" en="Masatsuchi" fr="Masatsuchi" ja="マサツチ" cn="正土" ko="마사츠치" />
<loc type="4" id="45" de="Vorarbeiter Mogzin" en="Master Mogzin" fr="Mogzin" ja="団長のモグジン" cn="团长莫古京" ko="단장 모그진" />
<loc type="4" id="46" de="Memeroon" en="Memeroon" fr="Memeroon" ja="メメルン" cn="梅梅卢恩" ko="메메룬" />
<loc type="4" id="47" de="Mero Roggo" en="Mero Roggo" fr="Mero Roggo" ja="メロ・ロッゴ" cn="梅罗·罗格" ko="메로 록고" />
<loc type="4" id="48" de="Nächtlicher Tau" en="Midnight Dew" fr="Midnight Dew" ja="ミッドナイト・デュー" cn="米德奈特·迪尤" ko="한밤의 이슬" />
<loc type="4" id="49" de="Mimidoa" en="Mimidoa" fr="Mimidoa" ja="ミミドア" cn="弥弥德亚" ko="미미도아" />
<loc type="4" id="50" de="Mogmill" en="Mogmill" fr="Mogmill" ja="モグミル" cn="莫古咪尔" ko="모그밀" />
<loc type="4" id="51" de="Momodi" en="Momodi" fr="Momodi" ja="モモディ" cn="莫莫蒂" ko="모모디" />
<loc type="4" id="52" de="Mordyn" en="Mordyn" fr="Mordyn" ja="モーディン" cn="莫丁" ko="모딘" />
<loc type="4" id="53" de="Miounne" en="Mother Miounne" fr="Miounne" ja="ミューヌ" cn="缪恩" ko="뮨" />
<loc type="4" id="54" de="Munglig" en="Munglig" fr="Munglig" ja="ムングリグ" cn="蒙力克" ko="문글리그" />
<loc type="4" id="55" de="Nell [t] Beschwipst[a]" en="Nell Half-full" fr="Nell la Boit-sans-soif" ja="酔いどれのネル" cn="醉鬼涅尔" ko="고주망태 넬" />
<loc type="4" id="56" de="Nigen" en="Nigen" fr="Nigen" ja="ニゲン" cn="尼坚" ko="니겐" />
<loc type="4" id="57" de="Noes" en="Noes" fr="Noes" ja="ノエス" cn="诺埃斯" ko="노에스" />
<loc type="4" id="58" de="O'kalkaya" en="O'kalkaya" fr="O'kalkaya" ja="オ・カルカヤ" cn="奥·卡尔卡雅" ko="오칼카야" />
<loc type="4" id="59" de="Ogodei" en="Ogodei" fr="Ogodei" ja="オゴデイ" cn="窝哥台" ko="오고데이" />
<loc type="4" id="60" de="Ourdilic" en="Ourdilic" fr="Ourdilic" ja="オルディリク" cn="奥尔蒂里克" ko="아우어딜릭" />
<loc type="4" id="61" de="Piralnaut" en="Piralnaut" fr="Piralnaut" ja="ピラルノー" cn="皮拉尔诺" ko="피랄노" />
<loc type="4" id="62" de="Stolzer Hirsch [t] Neureich[a]" en="Prideful Stag" fr="Prideful Stag le Parvenu" ja="成金のプライド・フルスタグ" cn="暴发户普莱多·福尔斯塔格" ko="졸부 거만한 수사슴" />
<loc type="4" id="63" de="R'ashaht Rhiki" en="R'ashaht Rhiki" fr="R'ashaht Rhiki" ja="ル・アシャ大甲佐" cn="尔·阿夏" ko="흑와단 대령 르아샤" />
<loc type="4" id="64" de="Rotschnabel-Materialverwalter" en="Redbill storeboy" fr="intendant des Becs-rouges" ja="レッドビルの資材係" cn="赤喙的资材负责人" ko="붉은부리 조달원" />
<loc type="4" id="65" de="Roger" en="Roger" fr="Roger" ja="ロジャー" cn="罗杰" ko="로저" />
<loc type="4" id="66" de="Rowena" en="Rowena" fr="Rowena" ja="ロウェナ" cn="罗薇娜" ko="로웨나" />
<loc type="4" id="67" de="Ruhtwyda Herz" en="Ruhtwyda of the Three Hearts" fr="Ruhtwyda la Dame de cœur" ja="ハートのルヒトウィダ" cn="红心天王鲁希特威达" ko="루트뷔다" />
<loc type="4" id="68" de="Seika" en="Seika" fr="Seika" ja="セイカ" cn="青花" ko="세이카" />
<loc type="4" id="69" de="Sezul Totoloq" en="Sezul Totoloc" fr="Sezul Totoloc" ja="セズル・トトロック" cn="赛兹尔·托托罗克" ko="세즐 토톨록" />
<loc type="4" id="70" de="Swift" en="Swift" fr="Swift Ryder" ja="スウィフト大闘佐" cn="斯威夫特" ko="불멸대 대령 스위프트" />
<loc type="4" id="71" de="Tappklix" en="Tapklix" fr="Tapklix" ja="タップクリクス" cn="塔普克里克斯" ko="탭클릭스" />
<loc type="4" id="72" de="Trachtoum" en="Trachtoum" fr="Trachtoum" ja="トラッハトゥーム" cn="特拉哈涂姆" ko="트라흐툼" />
<loc type="4" id="73" de="Triple Triad-Meisterin" en="Triple Triad master" fr="croupière" ja="トリプルトライアドマスター" cn="幻卡大师" ko="트리플 트라이어드 마스터" />
<loc type="4" id="74" de="Tsuzura" en="Tsuzura" fr="Tsuzura" ja="ツヅラ" cn="葛笼" ko="츠즈라" />
<loc type="4" id="75" de="Erdiger Strom" en="Umber Torrent" fr="Umber Torrent" ja="アンバー・トレント" cn="安博·托伦特" ko="암갈색 급류" />
<loc type="4" id="76" de="Ushiogi" en="Ushiogi" fr="Ushiogi" ja="ウシオギ" cn="潮木" ko="우시오기" />
<loc type="4" id="77" de="Macher" en="Vath deftarm" fr="Futé" ja="ウデキキ" cn="好身手" ko="으뜸이" />
<loc type="4" id="78" de="Nanka-Mampfa" en="voracious Vath" fr="Vathe vorace" ja="ナンカイーター" cn="啥都吃" ko="낭카 먹보" />
<loc type="4" id="79" de="Vorsaile Heuloix" en="Vorsaile Heuloix" fr="Vorsaile Heuloix" ja="ボルセル大牙佐" cn="沃尔赛勒" ko="쌍사당 대령 보르셀" />
<loc type="4" id="80" de="Wawalago" en="Wawalago" fr="Wawalago" ja="ワワラゴ" cn="瓦瓦拉哥" ko="와와라고" />
<loc type="4" id="81" de="Wymond" en="Wymond" fr="Wymond" ja="ワイモンド" cn="维蒙德" ko="와이먼드" />
<loc type="4" id="82" de="Wyra Lyehga [t] Geschickt[a]" en="Wyra “Greenhands” Lyehga" fr="Wyra Lyehga la Main verte" ja="緑の手のウィラ・リエーガ" cn="绿之手维拉·莉艾佳" ko="초록손 위라 리에가" />
<loc type="4" id="83" de="Yayake" en="Yayake" fr="Yayake" ja="呪術士ギルド受付 ヤヤケ" cn="雅雅凯" ko="야야케" />
<loc type="4" id="84" de="Gelber Mond" en="Yellow Moon" fr="Yellow Moon" ja="イエロー・ムーン" cn="耶萝·姆恩" ko="노란 달" />
<loc type="4" id="85" de="Yusui" en="Yusui" fr="Yusui" ja="ユウスイ" cn="涌水" ko="유우스이" />
<loc type="4" id="86" de="Glynard" en="Glynard" fr="Glynard" ja="グリナード" cn="格林纳德" ko="글리나드" />
<loc type="4" id="87" de="Gyuf Uin" en="Gyuf Uin" fr="Gyuf Uin" ja="ギュフ=ウィン" cn="久付·乌因" ko="규프 윈" />
<loc type="4" id="88" de="Hargra" en="Hargra" fr="Hargra" ja="ハルグラ" cn="哈格菈" ko="하르그라" />
<loc type="4" id="89" de="Drery" en="Drery" fr="Drery" ja="ドレーリー" cn="德雷利" ko="드레리" />
<loc type="4" id="90" de="Ibenart" en="Ibenart" fr="Ibenart" ja="イベナート" cn="伊贝纳特" ko="이베나트" />
<loc type="4" id="91" de="Lamlyn" en="Lamlyn" fr="Lamlyn" ja="ラムリン" cn="拉姆林" ko="라믈린" />
<loc type="4" id="92" de="Saushs Koal" en="Saushs Koal" fr="Saushs Koal" ja="サウスィー・コール" cn="萨乌嘶·涳尔" ko="사우쉬 콜" />
<loc type="4" id="93" de="Grewenn" en="Grewenn" fr="Grewenn" ja="グレウェン" cn="格雷文" ko="그레웬" />
<loc type="4" id="94" de="Eo Sigun" en="Eo Sigun" fr="Eo Sigun" ja="エオ=シグン" cn="艾奥·希坤" ko="에오 시군" />
<loc type="4" id="95" de="Redard" en="Redard" fr="Redard" ja="レダード" cn="瑞达德" ko="레다드" />
<loc type="4" id="96" de="Hanagasa" en="Hanagasa" fr="Hanagasa" ja="ハナガサ" cn="花笠" ko="하나가사" />
<loc type="4" id="97" de="Cobleva" en="Cobleva" fr="Cobleva" ja="コブレヴァ" cn="科布蕾瓦" ko="코블레바" />
<loc type="4" id="98" de="desertiert[a] Legionär" en="furtive former imperial" fr="soldat impérial plein d'entrain" ja="威勢のいい帝国兵" cn="很有气势的帝国兵" ko="주눅들지 않는 제국병" />
<loc type="4" id="99" de="Arsieu" en="Arsieu" fr="Arsieu" ja="アルシウ" cn="阿尔希乌" ko="아르시우" />
<loc type="4" id="100" de="Lewto-Sue" en="Lewto-Sue" fr="Lewto-Sue" ja="リュート・スー" cn="琉托·素" ko="류토 수" />
<loc type="4" id="101" de="Droyn" en="Droyn" fr="Droyn" ja="ドロイン" cn="德罗因" ko="드로인" />
<loc type="4" id="102" de="Sladkey" en="Sladkey" fr="Sladkey" ja="スラッドキー" cn="斯莱德基" ko="슬라드키" />
<loc type="4" id="103" de="Aiglephine" en="Aiglephine" fr="Aiglephine" ja="エグルフィーヌ" cn="艾格勒菲娜" ko="애글핀" />
<loc type="4" id="104" de="Qetanur" en="Qetanur" fr="Qetanur" ja="ケタヌール" cn="凯塔奴尔" ko="케타누르" />
<loc type="4" id="105" de="erfolgreich[a] Legionär" en="worldly imperial" fr="Garlemaldais avec de l'entregent" ja="世渡り上手な帝国兵" cn="懂世故的帝国兵" ko="처세에 능한 제국 병사" />
<loc type="4" id="106" de="Mehryde" en="Mehryde" fr="Mehryde" ja="メリード" cn="梅丽德" ko="메리드" />
<loc type="4" id="107" de="Cheatingway" en="Cheatingway" fr="Cheatingway" ja="チーティングウェイ" cn="诡行威" ko="치팅웨이" />
<loc type="4" id="108" de="Celia" en="Celia" fr="Celia" ja="セリア" cn="赛丽亚" ko="셀리아" />
<loc type="4" id="109" de="Prudence" en="Prudence" fr="Prudence" ja="プルーデンス" cn="普鲁登斯" ko="프루덴스" />
<loc type="4" id="110" de="Ghasa" en="Ghasa" fr="Ghasa" ja="ガーサ" cn="伽娑" ko="가사" />
<loc type="4" id="111" de="Kilfufu" en="Kilfufu" fr="Kilfufu" ja="キルフフ" cn="" />
<loc type="4" id="112" de="Kilfufu" en="Kilfufu" fr="Kilfufu" ja="キルフフ" cn="奇尔芙芙" ko="킬푸푸" />
<loc type="4" id="113" de="Gamingway" en="Gamingway" fr="Gamingway" ja="ゲーミングウェイ" cn="游兴威" ko="게이밍웨이" />
<loc type="4" id="114" de="Ruissenaud" en="Ruissenaud" fr="Ruissenaud" ja="ルイスノ" cn="吕斯诺" ko="루이스노" />
<loc type="4" id="115" de="Tokimori" en="Tokimori" fr="Tokimori" ja="トキモリ" cn="时守" ko="토키모리" />
<loc type="4" id="116" de="Ylaire" en="Ylaire" fr="Ylaire" ja="イレアー" cn="伊莱尔" ko="일레어" />
<loc type="4" id="117" de="Maillart" en="Maillart" fr="Maillart" ja="マリアルト" cn="马利亚尔特" ko="마야르" />
<loc type="4" id="118" de="Nyikweni" en="Nyikweni" fr="Nyikweni" ja="ニーケニ" cn="尼凯尼" ko="니퀘니" />
<loc type="4" id="119" de="Wopli" en="Wopli" fr="Wopli" ja="ウォーペリ" cn="沃皮利" ko="워펠리" />
<loc type="4" id="120" de="Warsowok" en="Warsowok" fr="Warsowok" ja="ワーソウォク" cn="瓦索沃坷" ko="와소워크" />
<loc type="4" id="121" de="Br'uk Noq" en="Br'uk Noq'" fr="Br'uk Noq" ja="ブルクノック" cn="布鲁克·诺可" ko="부르크노크" />
<loc type="4" id="122" de="Luwyawa" en="Luwyawa" fr="Luwyawa" ja="ルーヤワ" cn="鲁亚瓦" ko="루야와" />
<loc type="4" id="123" de="Uataaye" en="Uataaye" fr="Uataaye" ja="ワターエ" cn="瓦塔艾" ko="와타아예" />
<loc type="4" id="124" de="Larisa" en="Larisa" fr="Larisa" ja="ラリサ" cn="菈莉萨" ko="라리사" />
<loc type="4" id="125" de="Gavoll Ja" en="Gavoll Ja" fr="Gavoll Ja" ja="ガヴォージャ" cn="嘎乌加" ko="가보쟈" />
<loc type="4" id="126" de="Pawkukwe" en="Pawkukwe" fr="Pawkukwe" ja="パークケ" cn="帕库凯" ko="파쿠퀘" />
<loc type="4" id="127" de="Miitso" en="Miitso" fr="Miitso" ja="ミーゾ" cn="密泽" ko="미이조" />
<loc type="4" id="128" de="Heimtückisches Wiesel" en="Malevolent Weasel" fr="Malevolent Weasel" ja="マレヴォレント・ウィーゼル" cn="" ko="" />
<loc type="4" id="129" de="Pudeel Ja" en="Pudeel Ja" fr="Pudeel Ja" ja="プデージャ" />
<loc type="5" id="1" de="Gold Saucer" en="The Gold Saucer" fr="Gold Saucer" ja="ゴールドソーサー" cn="金碟游乐场" ko="골드 소서" />
<loc type="5" id="2" de="Obere Decks" en="Limsa Lominsa Upper Decks" fr="Limsa Lominsa - Le Tillac" ja="リムサ・ロミンサ:上甲板層" cn="利姆萨·罗敏萨上层甲板" ko="림사 로민사 상층 갑판" />
<loc type="5" id="3" de="Kugane" en="Kugane" fr="Kugane" ja="クガネ市街" cn="黄金港城区" ko="쿠가네" />
<loc type="5" id="4" de="Südwald" en="South Shroud" fr="Forêt du sud" ja="黒衣森:南部森林" cn="黑衣森林南部林区" ko="검은장막 숲 남부삼림" />
<loc type="5" id="5" de="Westliches Hochland von Coerthas" en="Coerthas Western Highlands" fr="Hautes terres du Coerthas occidental" ja="クルザス西部高地" cn="库尔札斯西部高地" ko="커르다스 서부고지" />
<loc type="5" id="6" de="Strebewerk" en="The Pillars" fr="Ishgard - Les Contreforts" ja="イシュガルド:上層" cn="伊修加德砥柱层" ko="이슈가르드 상층" />
<loc type="5" id="7" de="Rhalgrs Wacht" en="Rhalgr's Reach" fr="L'Étendue de Rhalgr" ja="ラールガーズリーチ" cn="神拳痕" ko="랄거의 손길" />
<loc type="5" id="8" de="Zentrales Thanalan" en="Central Thanalan" fr="Thanalan central" ja="中央ザナラーン" cn="中萨纳兰" ko="중부 다날란" />
<loc type="5" id="9" de="Weltensalon" en="The Battlehall" fr="Arène Triple Triade" ja="カードバトルルーム" cn="幻卡对局室" ko="카드 대결장" />
<loc type="5" id="10" de="Westliches Thanalan" en="Western Thanalan" fr="Thanalan occidental" ja="西ザナラーン" cn="西萨纳兰" ko="서부 다날란" />
<loc type="5" id="11" de="Abanisches Grenzland" en="The Fringes" fr="Les Marges" ja="ギラバニア辺境地帯" cn="基拉巴尼亚边区" ko="기라바니아 변방지대" />
<loc type="5" id="12" de="Östliches La Noscea" en="Eastern La Noscea" fr="Noscea orientale" ja="東ラノシア" cn="东拉诺西亚" ko="동부 라노시아" />
<loc type="5" id="13" de="Fundamente" en="Foundation" fr="Ishgard - L'Assise" ja="イシュガルド:下層" cn="伊修加德基础层" ko="이슈가르드 하층" />
<loc type="5" id="14" de="Gold Saucer" en="The Gold Saucer" fr="Gold Saucer" ja="ゴールドソーサー" cn="金碟游乐场" ko="골드 소서" />
<loc type="5" id="15" de="Yanxia" en="Yanxia" fr="Yanxia" ja="ヤンサ" cn="延夏" ko="얀샤" />
<loc type="5" id="16" de="Südliches Thanalan" en="Southern Thanalan" fr="Thanalan méridional" ja="南ザナラーン" cn="南萨纳兰" ko="남부 다날란" />
<loc type="5" id="17" de="Yanxia" en="Yanxia" fr="Yanxia" ja="ヤンサ" cn="延夏" ko="얀샤" />
<loc type="5" id="18" de="Weltensalon" en="The Battlehall" fr="Arène Triple Triade" ja="カードバトルルーム" cn="幻卡对局室" ko="카드 대결장" />
<loc type="5" id="19" de="Östliches Thanalan" en="Eastern Thanalan" fr="Thanalan oriental" ja="東ザナラーン" cn="东萨纳兰" ko="동부 다날란" />
<loc type="5" id="20" de="Kugane" en="Kugane" fr="Kugane" ja="クガネ市街" cn="黄金港城区" ko="쿠가네" />
<loc type="5" id="21" de="Kugane" en="Kugane" fr="Kugane" ja="クガネ市街" cn="黄金港城区" ko="쿠가네" />
<loc type="5" id="22" de="Anwesen der Fortemps" en="Fortemps Manor" fr="Manoir des Fortemps" ja="フォルタン伯爵邸" cn="福尔唐伯爵府" ko="포르탕 저택" />
<loc type="5" id="23" de="Azys Lla" en="Azys Lla" fr="Azys Lla" ja="アジス・ラー" cn="魔大陆阿济兹拉" ko="아지스 라" />
<loc type="5" id="24" de="Das Fenn" en="The Lochs" fr="Les Lacs" ja="ギラバニア湖畔地帯" cn="基拉巴尼亚湖区" ko="기라바니아 호반지대" />
<loc type="5" id="25" de="Mor Dhona" en="Mor Dhona" fr="Mor Dhona" ja="モードゥナ" cn="摩杜纳" ko="모르도나" />
<loc type="5" id="26" de="Rhalgrs Wacht" en="Rhalgr's Reach" fr="L'Étendue de Rhalgr" ja="ラールガーズリーチ" cn="神拳痕" ko="랄거의 손길" />
<loc type="5" id="27" de="Rubinsee" en="The Ruby Sea" fr="Mer de Rubis" ja="紅玉海" cn="红玉海" ko="홍옥해" />
<loc type="5" id="28" de="Zentrales Hochland von Coerthas" en="Coerthas Central Highlands" fr="Hautes terres du Coerthas central" ja="クルザス中央高地" cn="库尔札斯中央高地" ko="커르다스 중앙고지" />
<loc type="5" id="29" de="Gold Saucer" en="The Gold Saucer" fr="Gold Saucer" ja="ゴールドソーサー" cn="金碟游乐场" ko="골드 소서" />
<loc type="5" id="30" de="Rubinsee" en="The Ruby Sea" fr="Mer de Rubis" ja="紅玉海" cn="红玉海" ko="홍옥해" />
<loc type="5" id="31" de="Kugane" en="Kugane" fr="Kugane" ja="クガネ市街" cn="黄金港城区" ko="쿠가네" />
<loc type="5" id="32" de="Gold Saucer" en="The Gold Saucer" fr="Gold Saucer" ja="ゴールドソーサー" cn="金碟游乐场" ko="골드 소서" />
<loc type="5" id="33" de="Domanische Enklave" en="The Doman Enclave" fr="Quartier enclavé de Doma" ja="ドマ町人地" cn="多玛飞地" ko="도마 도읍지" />
<loc type="5" id="34" de="Mor Dhona" en="Mor Dhona" fr="Mor Dhona" ja="モードゥナ" cn="摩杜纳" ko="모르도나" />
<loc type="5" id="35" de="Kugane" en="Kugane" fr="Kugane" ja="クガネ市街" cn="黄金港城区" ko="쿠가네" />
<loc type="5" id="36" de="Südwald" en="South Shroud" fr="Forêt du sud" ja="黒衣森:南部森林" cn="黑衣森林南部林区" ko="검은장막 숲 남부삼림" />
<loc type="5" id="37" de="Abalathisches Wolkenmeer" en="The Sea of Clouds" fr="L'Écume des cieux d'Abalathia" ja="アバラシア雲海" cn="阿巴拉提亚云海" ko="아발라시아 구름바다" />
<loc type="5" id="38" de="Gold Saucer" en="The Gold Saucer" fr="Gold Saucer" ja="ゴールドソーサー" cn="金碟游乐场" ko="골드 소서" />
<loc type="5" id="39" de="Abalathisches Wolkenmeer" en="The Sea of Clouds" fr="L'Écume des cieux d'Abalathia" ja="アバラシア雲海" cn="阿巴拉提亚云海" ko="아발라시아 구름바다" />
<loc type="5" id="40" de="Neu-Gridania" en="New Gridania" fr="Nouvelle Gridania" ja="グリダニア:新市街" cn="格里达尼亚新街" ko="그리다니아 신시가지" />
<loc type="5" id="41" de="Dravanisches Vorland" en="The Dravanian Forelands" fr="Avant-pays dravanien" ja="高地ドラヴァニア" cn="龙堡参天高地" ko="고지 드라바니아" />
<loc type="5" id="42" de="Tiefer Wald" en="Central Shroud" fr="Forêt centrale" ja="黒衣森:中央森林" cn="黑衣森林中央林区" ko="검은장막 숲 중부삼림" />
<loc type="5" id="43" de="Abalathisches Wolkenmeer" en="The Sea of Clouds" fr="L'Écume des cieux d'Abalathia" ja="アバラシア雲海" cn="阿巴拉提亚云海" ko="아발라시아 구름바다" />
<loc type="5" id="44" de="Yanxia" en="Yanxia" fr="Yanxia" ja="ヤンサ" cn="延夏" ko="얀샤" />
<loc type="5" id="45" de="Wallende Nebel" en="The Churning Mists" fr="L'Écume des cieux de Dravania" ja="ドラヴァニア雲海" cn="翻云雾海" ko="드라바니아 구름바다" />
<loc type="5" id="46" de="Oberes La Noscea" en="Upper La Noscea" fr="Haute-Noscea" ja="高地ラノシア" cn="拉诺西亚高地" ko="고지 라노시아" />
<loc type="5" id="47" de="Dravanisches Hinterland" en="The Dravanian Hinterlands" fr="Arrière-pays dravanien" ja="低地ドラヴァニア" cn="龙堡内陆低地" ko="저지 드라바니아" />
<loc type="5" id="48" de="Frohehalde" en="Idyllshire" fr="Idyllée" ja="イディルシャイア" cn="田园郡" ko="이딜샤이어" />
<loc type="5" id="49" de="Unteres La Noscea" en="Lower La Noscea" fr="Basse-Noscea" ja="低地ラノシア" cn="拉诺西亚低地" ko="저지 라노시아" />
<loc type="5" id="50" de="Wallende Nebel" en="The Churning Mists" fr="L'Écume des cieux de Dravania" ja="ドラヴァニア雲海" cn="翻云雾海" ko="드라바니아 구름바다" />
<loc type="5" id="51" de="Nald-Kreuzgang" en="Ul'dah - Steps of Nald" fr="Ul'dah - Faubourg de Nald" ja="ウルダハ:ナル回廊" cn="乌尔达哈现世回廊" ko="울다하 날 회랑" />
<loc type="5" id="52" de="Obere Decks" en="Limsa Lominsa Upper Decks" fr="Limsa Lominsa - Le Tillac" ja="リムサ・ロミンサ:上甲板層" cn="利姆萨·罗敏萨上层甲板" ko="림사 로민사 상층 갑판" />
<loc type="5" id="53" de="Neu-Gridania" en="New Gridania" fr="Nouvelle Gridania" ja="グリダニア:新市街" cn="格里达尼亚新街" ko="그리다니아 신시가지" />
<loc type="5" id="54" de="Azim-Steppe" en="The Azim Steppe" fr="Steppe d'Azim" ja="アジムステップ" cn="太阳神草原" ko="아짐 대초원" />
<loc type="5" id="55" de="Weltensalon" en="The Battlehall" fr="Arène Triple Triade" ja="カードバトルルーム" cn="幻卡对局室" ko="카드 대결장" />
<loc type="5" id="56" de="Azim-Steppe" en="The Azim Steppe" fr="Steppe d'Azim" ja="アジムステップ" cn="太阳神草原" ko="아짐 대초원" />
<loc type="5" id="57" de="Alt-Gridania" en="Old Gridania" fr="Vieille Gridania" ja="グリダニア:旧市街" cn="格里达尼亚旧街" ko="그리다니아 구시가지" />
<loc type="5" id="58" de="Obere Decks" en="Limsa Lominsa Upper Decks" fr="Limsa Lominsa - Le Tillac" ja="リムサ・ロミンサ:上甲板層" cn="利姆萨·罗敏萨上层甲板" ko="림사 로민사 상층 갑판" />
<loc type="5" id="59" de="Azim-Steppe" en="The Azim Steppe" fr="Steppe d'Azim" ja="アジムステップ" cn="太阳神草原" ko="아짐 대초원" />
<loc type="5" id="60" de="Zentrales Hochland von Coerthas" en="Coerthas Central Highlands" fr="Hautes terres du Coerthas central" ja="クルザス中央高地" cn="库尔札斯中央高地" ko="커르다스 중앙고지" />
<loc type="5" id="61" de="Ostwald" en="East Shroud" fr="Forêt de l'est" ja="黒衣森:東部森林" cn="黑衣森林东部林区" ko="검은장막 숲 동부삼림" />
<loc type="5" id="62" de="Weltensalon" en="The Battlehall" fr="Arène Triple Triade" ja="カードバトルルーム" cn="幻卡对局室" ko="카드 대결장" />
<loc type="5" id="63" de="Obere Decks" en="Limsa Lominsa Upper Decks" fr="Limsa Lominsa - Le Tillac" ja="リムサ・ロミンサ:上甲板層" cn="利姆萨·罗敏萨上层甲板" ko="림사 로민사 상층 갑판" />
<loc type="5" id="64" de="Frohehalde" en="Idyllshire" fr="Idyllée" ja="イディルシャイア" cn="田园郡" ko="이딜샤이어" />
<loc type="5" id="65" de="Zentrales Thanalan" en="Central Thanalan" fr="Thanalan central" ja="中央ザナラーン" cn="中萨纳兰" ko="중부 다날란" />
<loc type="5" id="66" de="Mor Dhona" en="Mor Dhona" fr="Mor Dhona" ja="モードゥナ" cn="摩杜纳" ko="모르도나" />
<loc type="5" id="67" de="Gold Saucer" en="The Gold Saucer" fr="Gold Saucer" ja="ゴールドソーサー" cn="金碟游乐场" ko="골드 소서" />
<loc type="5" id="68" de="Frohehalde" en="Idyllshire" fr="Idyllée" ja="イディルシャイア" cn="田园郡" ko="이딜샤이어" />
<loc type="5" id="69" de="Nordwald" en="North Shroud" fr="Forêt du nord" ja="黒衣森:北部森林" cn="黑衣森林北部林区" ko="검은장막 숲 북부삼림" />
<loc type="5" id="70" de="Nald-Kreuzgang" en="Ul'dah - Steps of Nald" fr="Ul'dah - Faubourg de Nald" ja="ウルダハ:ナル回廊" cn="乌尔达哈现世回廊" ko="울다하 날 회랑" />
<loc type="5" id="71" de="Dravanisches Hinterland" en="The Dravanian Hinterlands" fr="Arrière-pays dravanien" ja="低地ドラヴァニア" cn="龙堡内陆低地" ko="저지 드라바니아" />
<loc type="5" id="72" de="Unteres La Noscea" en="Lower La Noscea" fr="Basse-Noscea" ja="低地ラノシア" cn="拉诺西亚低地" ko="저지 라노시아" />
<loc type="5" id="73" de="Gold Saucer" en="The Gold Saucer" fr="Gold Saucer" ja="ゴールドソーサー" cn="金碟游乐场" ko="골드 소서" />
<loc type="5" id="74" de="Rubinsee" en="The Ruby Sea" fr="Mer de Rubis" ja="紅玉海" cn="红玉海" ko="홍옥해" />
<loc type="5" id="75" de="Das Fenn" en="The Lochs" fr="Les Lacs" ja="ギラバニア湖畔地帯" cn="基拉巴尼亚湖区" ko="기라바니아 호반지대" />
<loc type="5" id="76" de="Rubinsee" en="The Ruby Sea" fr="Mer de Rubis" ja="紅玉海" cn="红玉海" ko="홍옥해" />
<loc type="5" id="77" de="Dravanisches Vorland" en="The Dravanian Forelands" fr="Avant-pays dravanien" ja="高地ドラヴァニア" cn="龙堡参天高地" ko="고지 드라바니아" />
<loc type="5" id="78" de="Dravanisches Vorland" en="The Dravanian Forelands" fr="Avant-pays dravanien" ja="高地ドラヴァニア" cn="龙堡参天高地" ko="고지 드라바니아" />
<loc type="5" id="79" de="Neu-Gridania" en="New Gridania" fr="Nouvelle Gridania" ja="グリダニア:新市街" cn="格里达尼亚新街" ko="그리다니아 신시가지" />
<loc type="5" id="80" de="Untere Decks" en="Limsa Lominsa Lower Decks" fr="Limsa Lominsa - L'Entrepont" ja="リムサ・ロミンサ:下甲板層" cn="利姆萨·罗敏萨下层甲板" ko="림사 로민사 하층 갑판" />
<loc type="5" id="81" de="Nald-Kreuzgang" en="Ul'dah - Steps of Nald" fr="Ul'dah - Faubourg de Nald" ja="ウルダハ:ナル回廊" cn="乌尔达哈现世回廊" ko="울다하 날 회랑" />
<loc type="5" id="82" de="Weltensalon" en="The Battlehall" fr="Arène Triple Triade" ja="カードバトルルーム" cn="幻卡对局室" ko="카드 대결장" />
<loc type="5" id="83" de="Nald-Kreuzgang" en="Ul'dah - Steps of Nald" fr="Ul'dah - Faubourg de Nald" ja="ウルダハ:ナル回廊" cn="乌尔达哈现世回廊" ko="울다하 날 회랑" />
<loc type="5" id="84" de="Thal-Kreuzgang" en="Ul'dah - Steps of Thal" fr="Ul'dah - Faubourg de Thal" ja="ウルダハ:ザル回廊" cn="乌尔达哈来生回廊" ko="울다하 달 회랑" />
<loc type="5" id="85" de="Rubinsee" en="The Ruby Sea" fr="Mer de Rubis" ja="紅玉海" cn="红玉海" ko="홍옥해" />
<loc type="5" id="86" de="Crystarium" en="The Crystarium" fr="Cristarium" ja="クリスタリウム市街" cn="水晶都" ko="크리스타리움" />
<loc type="5" id="87" de="Il Mheg" en="Il Mheg" fr="Il Mheg" ja="イル・メグ" cn="伊尔美格" ko="일 메그" />
<loc type="5" id="88" de="Der Große Wald Rak'tika" en="The Rak'tika Greatwood" fr="Rak'tika" ja="ラケティカ大森林" cn="拉凯提卡大森林" ko="라케티카 대삼림" />
<loc type="5" id="89" de="Amh Araeng" en="Amh Araeng" fr="Amh Araeng" ja="アム・アレーン" cn="安穆·艾兰" ko="아므 아랭" />
<loc type="5" id="90" de="Kholusia" en="Kholusia" fr="Kholusia" ja="コルシア島" cn="珂露西亚岛" ko="콜루시아 섬" />
<loc type="5" id="91" de="Seenland" en="Lakeland" fr="Grand-Lac" ja="レイクランド" cn="雷克兰德" ko="레이크랜드" />
<loc type="5" id="92" de="Tempest" en="The Tempest" fr="La Tempête" ja="テンペスト" cn="黑风海" ko="템페스트" />
<loc type="5" id="93" de="Eulmore" en="Eulmore" fr="Eulmore" ja="ユールモア市街" cn="游末邦" ko="율모어" />
<loc type="5" id="94" de="Il Mheg" en="Il Mheg" fr="Il Mheg" ja="イル・メグ" cn="伊尔美格" ko="일 메그" />
<loc type="5" id="95" de="Der Große Wald Rak'tika" en="The Rak'tika Greatwood" fr="Rak'tika" ja="ラケティカ大森林" cn="拉凯提卡大森林" ko="라케티카 대삼림" />
<loc type="5" id="96" de="Kugane" en="Kugane" fr="Kugane" ja="クガネ市街" cn="黄金港城区" ko="쿠가네" />
<loc type="5" id="97" de="Seenland" en="Lakeland" fr="Grand-Lac" ja="レイクランド" cn="雷克兰德" ko="레이크랜드" />
<loc type="5" id="98" de="Wendeklipp" en="Terncliff" fr="Rocasternes" ja="ターンクリフ" cn="燕鸥崖" ko="턴클리프" />
<loc type="5" id="99" de="Gangos" en="Gangos" fr="Gangos" ja="ガンゴッシュ" cn="甘戈斯" ko="강고스" />
<loc type="5" id="100" de="Amh Araeng" en="Amh Araeng" fr="Amh Araeng" ja="アム・アレーン" cn="安穆·艾兰" ko="아므 아랭" />
<loc type="5" id="101" de="Thal-Kreuzgang" en="Ul'dah - Steps of Thal" fr="Ul'dah - Faubourg de Thal" ja="ウルダハ:ザル回廊" cn="乌尔达哈来生回廊" ko="울다하 달 회랑" />
<loc type="5" id="102" de="Gangos" en="Gangos" fr="Gangos" ja="ガンゴッシュ" cn="甘戈斯" ko="강고스" />
<loc type="5" id="103" de="Labyrinthos" en="Labyrinthos" fr="Le Labyrinthos" ja="ラヴィリンソス" cn="迷津" ko="라비린토스" />
<loc type="5" id="104" de="Thavnair" en="Thavnair" fr="Thavnair" ja="サベネア島" cn="萨维奈岛" ko="사베네어 섬" />
<loc type="5" id="105" de="Garlemald" en="Garlemald" fr="Garlemald" ja="ガレマルド" cn="加雷马" ko="갈레말드" />
<loc type="5" id="106" de="Radz-at-Han" en="Radz-at-Han" fr="Radz-at-Han" ja="ラザハン" cn="拉札罕" ko="라자한" />
<loc type="5" id="107" de="Alt-Sharlayan" en="Old Sharlayan" fr="Vieille Sharlayan" ja="オールド・シャーレアン" cn="旧萨雷安" ko="올드 샬레이안" />
<loc type="5" id="108" de="Alt-Sharlayan" en="Old Sharlayan" fr="Vieille Sharlayan" ja="オールド・シャーレアン" cn="旧萨雷安" ko="올드 샬레이안" />
<loc type="5" id="109" de="Mor Dhona" en="Mor Dhona" fr="Mor Dhona" ja="モードゥナ" cn="摩杜纳" ko="모르도나" />
<loc type="5" id="110" de="Thavnair" en="Thavnair" fr="Thavnair" ja="サベネア島" cn="萨维奈岛" ko="사베네어 섬" />
<loc type="5" id="111" de="Nald-Kreuzgang" en="Ul'dah - Steps of Nald" fr="Ul'dah - Faubourg de Nald" ja="ウルダハ:ナル回廊" cn="乌尔达哈现世回廊" ko="울다하 날 회랑" />
<loc type="5" id="112" de="Nald-Kreuzgang" en="Ul'dah - Steps of Nald" fr="Ul'dah - Faubourg de Nald" ja="ウルダハ:ナル回廊" cn="乌尔达哈现世回廊" ko="울다하 날 회랑" />
<loc type="5" id="113" de="Mare Lamentorum" en="Mare Lamentorum" fr="Mare Lamentorum" ja="嘆きの海" cn="叹息海" ko="비탄의 바다" />
<loc type="5" id="114" de="Labyrinthos" en="Labyrinthos" fr="Le Labyrinthos" ja="ラヴィリンソス" cn="迷津" ko="라비린토스" />
<loc type="5" id="115" de="Kugane" en="Kugane" fr="Kugane" ja="クガネ市街" cn="黄金港城区" ko="쿠가네" />
<loc type="5" id="116" de="Alt-Gridania" en="Old Gridania" fr="Vieille Gridania" ja="グリダニア:旧市街" cn="格里达尼亚旧街" ko="그리다니아 구시가지" />
<loc type="5" id="117" de="Alt-Sharlayan" en="Old Sharlayan" fr="Vieille Sharlayan" ja="オールド・シャーレアン" cn="旧萨雷安" ko="올드 샬레이안" />
<loc type="5" id="118" de="Tuliyollal" en="Tuliyollal" fr="Tuliyollal" ja="トライヨラ" cn="图莱尤拉" ko="툴라이욜라" />
<loc type="5" id="119" de="Urqopacha" en="Urqopacha" fr="Urqopacha" ja="オルコ・パチャ" cn="奥阔帕恰山" ko="오르코 파차" />
<loc type="5" id="120" de="Kozama'uka" en="Kozama'uka" fr="Kozama'uka" ja="コザマル・カ" cn="克扎玛乌卡湿地" ko="코자말루 카" />
<loc type="5" id="121" de="Yak T'el" en="Yak T'el" fr="Yak T'el" ja="ヤクテル樹海" cn="亚克特尔树海" ko="야크텔 밀림" />
<loc type="5" id="122" de="Shaaloani" en="Shaaloani" fr="Shaaloani" ja="シャーローニ荒野" cn="夏劳尼荒野" ko="샬로니 황야" />
<loc type="5" id="123" de="Ewiges Erbe" en="Heritage Found" fr="L'Hoirie recouvrée" ja="ヘリテージファウンド" cn="遗产之地" ko="헤리티지 파운드" />
<loc type="5" id="124" de="Lösung Neun" en="Solution Nine" fr="Solution Neuf" ja="ソリューション・ナイン" cn="九号解决方案" ko="솔루션 나인" />
<loc type="5" id="125" de="Tuliyollal" en="Tuliyollal" fr="Tuliyollal" ja="トライヨラ" cn="图莱尤拉" ko="툴라이욜라" />
<loc type="5" id="126" de="Unter-Jeuno" en="Lower Jeuno" fr="Bas Jeuno" ja="ジュノ下層" cn="朱诺下层" ko="쥬노 하층" />
<loc type="5" id="127" de="Unter-Jeuno" en="Lower Jeuno" fr="Bas Jeuno" ja="ジュノ下層" cn="朱诺下层" ko="쥬노 하층" />
<loc type="5" id="128" de="Gold Saucer" en="The Gold Saucer" fr="Gold Saucer" ja="ゴールドソーサー" cn="金碟游乐场" ko="골드 소서" />
<loc type="5" id="129" de="Yak T'el" en="Yak T'el" fr="Yak T'el" ja="ヤクテル樹海" cn="亚克特尔树海" ko="야크텔 밀림" />
<loc type="6" id="0" de="Manderville-Masters" en="the Manderville Tournament of Champions" fr="le Championnat des Manderville" ja="マンダヴィル・チャンピオンシップ" cn="曼德维尔锦标赛" ko="맨더빌배 선수권 대회" />
<loc type="6" id="1" de="Großer Preis von Nymeia" en="the Spinner's Pull" fr="le Grand Prix de la Fileuse" ja="星神ニメーヤ賞典" cn="命运神大奖赛" ko="별의 신 니메이아배" />
<loc type="6" id="2" de="Orran-Durai-Ehrenturnier" en="the Durai Memorial" fr="le Jubilé Orran Durai" ja="オーラン記念" cn="奥兰纪念赛" ko="오란 기념 대회" />
<loc type="6" id="3" de="Rowena-Pokal" en="the Rowena Cup Classic" fr="la Coupe Rowena" ja="ロウェナ商会杯" cn="罗薇娜杯" ko="로웨나 상회배" />
</root>
================================================
FILE: assets/data/npcs.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<root>
<npc id="1" mx="4" my="8">
<deckA id0="51" id1="24" id2="37" id3="0" id4="0" />
<deckV id0="27" id1="20" id2="16" id3="12" id4="0" />
<rule id="3" />
<rule id="11" />
<reward id="27" />
<reward id="12" />
</npc>
<npc id="2" mx="12" my="11">
<deckA id0="28" id1="29" id2="30" id3="0" id4="0" />
<deckV id0="49" id1="21" id2="27" id3="18" id4="17" />
<rule id="3" />
<reward id="29" />
<reward id="18" />
</npc>
<npc id="3" mx="8" my="15">
<deckA id0="227" id1="236" id2="199" id3="0" id4="0" />
<deckV id0="226" id1="223" id2="34" id3="0" id4="0" />
<rule id="8" />
<rule id="1" />
<reward id="227" />
<reward id="236" />
<reward id="223" />
<reward id="226" />
</npc>
<npc id="4" mx="18" my="20">
<deckA id0="66" id1="52" id2="43" id3="0" id4="0" />
<deckV id0="48" id1="42" id2="39" id3="44" id4="0" />
<rule id="11" />
<reward id="48" />
<reward id="44" />
<reward id="23" />
</npc>
<npc id="5" mx="17" my="23">
<deckA id0="101" id1="96" id2="0" id3="0" id4="0" />
<deckV id0="89" id1="88" id2="86" id3="38" id4="93" />
<rule id="11" />
<reward id="101" />
<reward id="86" />
</npc>
<npc id="6" mx="8" my="11">
<deckA id0="102" id1="0" id2="0" id3="0" id4="0" />
<deckV id0="91" id1="65" id2="66" id3="63" id4="67" />
<rule id="12" />
<rule id="8" />
<reward id="102" />
<reward id="142" />
</npc>
<npc id="7" mx="10" my="10">
<deckA id0="48" id1="186" id2="170" id3="0" id4="0" />
<deckV id0="34" id1="14" id2="5" id3="0" id4="0" />
<reward id="186" />
<reward id="86" />
</npc>
<npc id="8" mx="24" my="14">
<deckA id0="45" id1="36" id2="14" id3="0" id4="0" />
<deckV id0="23" id1="13" id2="18" id3="5" id4="6" />
<rule id="3" />
<reward id="36" />
</npc>
<npc id="9" mx="4" my="4">
<deckA id0="167" id1="139" id2="0" id3="0" id4="0" />
<deckV id0="94" id1="38" id2="86" id3="95" id4="45" />
<reward id="167" />
<reward id="155" />
</npc>
<npc id="10" mx="23" my="17">
<deckA id0="33" id1="28" id2="2" id3="0" id4="0" />
<deckV id0="67" id1="46" id2="19" id3="20" id4="13" />
<rule id="3" />
<reward id="46" />
<reward id="25" />
</npc>
<npc id="11" mx="28" my="20">
<deckA id0="138" id1="185" id2="48" id3="0" id4="0" />
<deckV id0="108" id1="145" id2="19" id3="205" id4="0" />
<rule id="8" />
<rule id="9" />
<reward id="185" />
<reward id="205" />
</npc>
<npc id="12" mx="34" my="31">
<deckA id0="63" id1="56" id2="49" id3="0" id4="0" />
<deckV id0="65" id1="66" id2="55" id3="31" id4="30" />
<rule id="13" />
<rule id="4" />
<reward id="56" />
<reward id="49" />
</npc>
<npc id="13" mx="13" my="12">
<deckA id0="89" id1="56" id2="0" id3="0" id4="0" />
<deckV id0="88" id1="62" id2="50" id3="58" id4="19" />
<rule id="1" />
<reward id="88" />
</npc>
<npc id="14" mx="4" my="7">
<deckA id0="38" id1="26" id2="6" id3="0" id4="0" />
<deckV id0="27" id1="13" id2="11" id3="8" id4="0" />
<rule id="3" />
<rule id="8" />
<reward id="27" />
<reward id="13" />
</npc>
<npc id="15" mx="16" my="32">
<deckA id0="92" id1="141" id2="183" id3="0" id4="0" />
<deckV id0="169" id1="17" id2="5" id3="248" id4="0" />
<rule id="5" />
<rule id="8" />
<reward id="183" />
<reward id="248" />
</npc>
<npc id="16" mx="25" my="41">
<deckA id0="62" id1="45" id2="0" id3="0" id4="0" />
<deckV id0="67" id1="52" id2="46" id3="34" id4="3" />
<rule id="10" />
<reward id="62" />
<reward id="46" />
<reward id="45" />
</npc>
<npc id="17" mx="27" my="13">
<deckA id0="238" id1="192" id2="180" id3="176" id4="0" />
<deckV id0="175" id1="198" id2="201" id3="156" id4="171" />
<rule id="9" />
<rule id="6" />
<reward id="238" />
<reward id="201" />
</npc>
<npc id="18" mx="4" my="4">
<deckA id0="73" id1="120" id2="59" id3="0" id4="0" />
<deckV id0="65" id1="58" id2="95" id3="0" id4="0" />
<rule id="6" />
<rule id="12" />
<reward id="73" />
<reward id="160" />
</npc>
<npc id="19" mx="20" my="21">
<deckA id0="45" id1="34" id2="11" id3="0" id4="0" />
<deckV id0="60" id1="41" id2="22" id3="27" id4="2" />
<rule id="3" />
<reward id="22" />
<reward id="34" />
</npc>
<npc id="20" mx="8" my="14">
<deckA id0="243" id1="237" id2="242" id3="245" id4="0" />
<deckV id0="226" id1="236" id2="227" id3="223" id4="0" />
<rule id="8" />
<rule id="7" />
<reward id="243" />
<reward id="237" />
<reward id="242" />
<reward id="245" />
</npc>
<npc id="21" mx="14" my="11">
<deckA id0="231" id1="239" id2="211" id3="0" id4="0" />
<deckV id0="183" id1="187" id2="62" id3="184" id4="0" />
<rule id="8" />
<rule id="13" />
<reward id="239" />
<reward id="231" />
</npc>
<npc id="22" mx="6" my="6">
<deckA id0="121" id1="133" id2="134" id3="95" id4="93" />
<deckV id0="0" id1="0" id2="0" id3="0" id4="0" />
<rule id="3" />
<rule id="8" />
<reward id="121" />
<reward id="133" />
<reward id="134" />
</npc>
<npc id="23" mx="28" my="31">
<deckA id0="83" id1="97" id2="0" id3="0" id4="0" />
<deckV id0="47" id1="40" id2="91" id3="32" id4="92" />
<rule id="13" />
<rule id="12" />
<reward id="91" />
<reward id="119" />
<reward id="151" />
<reward id="148" />
</npc>
<npc id="24" mx="33" my="30">
<deckA id0="66" id1="167" id2="198" id3="0" id4="0" />
<deckV id0="180" id1="88" id2="48" id3="207" id4="0" />
<rule id="6" />
<reward id="198" />
<reward id="207" />
<reward id="192" />
</npc>
<npc id="25" mx="12" my="17">
<deckA id0="64" id1="61" id2="47" id3="0" id4="0" />
<deckV id0="42" id1="31" id2="32" id3="37" id4="27" />
<rule id="9" />
<reward id="64" />
<reward id="47" />
<reward id="31" />
<reward id="32" />
</npc>
<npc id="26" mx="14" my="11">
<deckA id0="247" id1="197" id2="240" id3="0" id4="0" />
<deckV id0="13" id1="85" id2="33" id3="58" id4="100" />
<rule id="1" />
<rule id="1" />
<reward id="247" />
<reward id="240" />
<reward id="197" />
</npc>
<npc id="27" mx="21" my="20">
<deckA id0="220" id1="60" id2="62" id3="0" id4="0" />
<deckV id0="212" id1="140" id2="167" id3="151" id4="152" />
<rule id="8" />
<rule id="13" />
<reward id="212" />
<reward id="220" />
</npc>
<npc id="28" mx="13" my="16">
<deckA id0="38" id1="33" id2="2" id3="0" id4="0" />
<deckV id0="59" id1="26" id2="14" id3="12" id4="15" />
<rule id="3" />
<reward id="59" />
<reward id="15" />
</npc>
<npc id="29" mx="5" my="7">
<deckA id0="23" id1="3" id2="4" id3="0" id4="0" />
<deckV id0="26" id1="11" id2="15" id3="20" id4="0" />
<rule id="2" />
<rule id="7" />
<reward id="15" />
<reward id="20" />
</npc>
<npc id="30" mx="22" my="9">
<deckA id0="193" id1="91" id2="25" id3="0" id4="0" />
<deckV id0="149" id1="23" id2="121" id3="94" id4="0" />
<rule id="13" />
<rule id="10" />
<reward id="193" />
</npc>
<npc id="31" mx="9" my="14">
<deckA id0="219" id1="139" id2="64" id3="0" id4="0" />
<deckV id0="58" id1="129" id2="113" id3="163" id4="0" />
<rule id="13" />
<rule id="6" />
<reward id="219" />
</npc>
<npc id="32" mx="4" my="8">
<deckA id0="61" id1="50" id2="45" id3="0" id4="0" />
<deckV id0="62" id1="41" id2="39" id3="49" id4="0" />
<rule id="8" />
<reward id="61" />
<reward id="45" />
</npc>
<npc id="33" mx="6" my="5">
<deckA id0="202" id1="153" id2="59" id3="0" id4="0" />
<deckV id0="56" id1="92" id2="84" id3="0" id4="0" />
<rule id="12" />
<reward id="202" />
</npc>
<npc id="34" mx="30" my="14">
<deckA id0="140" id1="135" id2="132" id3="0" id4="0" />
<deckV id0="58" id1="33" id2="47" id3="0" id4="0" />
<rule id="7" />
<rule id="8" />
<reward id="132" />
<reward id="135" />
<reward id="140" />
<reward id="150" />
</npc>
<npc id="35" mx="10" my="10">
<deckA id0="87" id1="187" id2="2" id3="0" id4="0" />
<deckV id0="28" id1="29" id2="30" id3="0" id4="0" />
<rule id="7" />
<reward id="187" />
</npc>
<npc id="36" mx="17" my="28">
<deckA id0="52" id1="41" id2="66" id3="0" id4="0" />
<deckV id0="40" id1="32" id2="13" id3="0" id4="0" />
<rule id="6" />
<rule id="12" />
<reward id="52" />
<reward id="41" />
</npc>
<npc id="37" mx="17" my="37">
<deckA id0="103" id1="98" id2="0" id3="0" id4="0" />
<deckV id0="104" id1="93" id2="58" id3="89" id4="96" />
<rule id="7" />
<rule id="8" />
<reward id="103" />
<reward id="104" />
</npc>
<npc id="38" mx="5" my="6">
<deckA id0="73" id1="70" id2="0" id3="0" id4="0" />
<deckV id0="74" id1="52" id2="42" id3="40" id4="41" />
<rule id="6" />
<rule id="12" />
<reward id="70" />
<reward id="72" />
<reward id="73" />
</npc>
<npc id="39" mx="7" my="14">
<deckA id0="98" id1="82" id2="0" id3="0" id4="0" />
<deckV id0="123" id1="103" id2="81" id3="86" id4="104" />
<rule id="5" />
<rule id="12" />
<reward id="123" />
<reward id="98" />
<reward id="147" />
</npc>
<npc id="40" mx="12" my="11">
<deckA id0="36" id1="7" id2="10" id3="0" id4="0" />
<deckV id0="24" id1="16" id2="8" id3="0" id4="0" />
<rule id="2" />
<reward id="16" />
<reward id="8" />
</npc>
<npc id="41" mx="32" my="23">
<deckA id0="14" id1="81" id2="0" id3="0" id4="0" />
<deckV id0="90" id1="3" id2="55" id3="43" id4="84" />
<rule id="5" />
<rule id="8" />
<reward id="90" />
</npc>
<npc id="42" mx="17" my="19">
<deckA id0="52" id1="53" id2="57" id3="0" id4="0" />
<deckV id0="44" id1="47" id2="42" id3="38" id4="35" />
<rule id="12" />
<reward id="42" />
<reward id="35" />
</npc>
<npc id="43" mx="15" my="38">
<deckA id0="63" id1="86" id2="65" id3="93" id4="96" />
<deckV id0="0" id1="0" id2="0" id3="0" id4="0" />
<rule id="11" />
<reward id="93" />
<reward id="143" />
</npc>
<npc id="44" mx="30" my="20">
<deckA id0="218" id1="136" id2="97" id3="0" id4="0" />
<deckV id0="211" id1="115" id2="123" id3="0" id4="0" />
<rule id="7" />
<reward id="211" />
<reward id="218" />
</npc>
<npc id="45" mx="16" my="29">
<deckA id0="153" id1="43" id2="0" id3="0" id4="0" />
<deckV id0="90" id1="99" id2="108" id3="124" id4="20" />
<rule id="7" />
<rule id="8" />
<reward id="153" />
<reward id="146" />
<reward id="43" />
<reward id="124" />
</npc>
<npc id="46" mx="15" my="24">
<deckA id0="37" id1="14" id2="1" id3="0" id4="0" />
<deckV id0="21" id1="2" id2="7" id3="12" id4="0" />
<rule id="2" />
<reward id="37" />
<reward id="14" />
<reward id="2" />
<reward id="128" />
</npc>
<npc id="47" mx="13" my="37">
<deckA id0="251" id1="94" id2="161" id3="130" id4="0" />
<deckV id0="92" id1="107" id2="106" id3="111" id4="233" />
<rule id="8" />
<rule id="1" />
<reward id="251" />
<reward id="94" />
<reward id="161" />
<reward id="130" />
</npc>
<npc id="48" mx="6" my="7">
<deckA id0="88" id1="100" id2="0" id3="0" id4="0" />
<deckV id0="92" id1="97" id2="86" id3="99" id4="49" />
<rule id="1" />
<rule id="1" />
<reward id="92" />
<reward id="111" />
</npc>
<npc id="49" mx="25" my="35">
<deckA id0="54" id1="33" id2="19" id3="0" id4="0" />
<deckV id0="37" id1="25" id2="15" id3="13" id4="20" />
<rule id="3" />
<reward id="33" />
<reward id="21" />
</npc>
<npc id="50" mx="28" my="35">
<deckA id0="66" id1="98" id2="0" id3="0" id4="0" />
<deckV id0="82" id1="83" id2="97" id3="100" id4="43" />
<rule id="1" />
<rule id="1" />
<reward id="82" />
<reward id="83" />
<reward id="115" />
<reward id="108" />
</npc>
<npc id="51" mx="12" my="10">
<deckA id0="28" id1="30" id2="14" id3="0" id4="0" />
<deckV id0="36" id1="29" id2="13" id3="10" id4="8" />
<rule id="3" />
<reward id="28" />
</npc>
<npc id="52" mx="11" my="8">
<deckA id0="149" id1="145" id2="0" id3="0" id4="0" />
<deckV id0="29" id1="65" id2="54" id3="126" id4="7" />
<rule id="13" />
<rule id="7" />
<reward id="65" />
<reward id="145" />
<reward id="126" />
</npc>
<npc id="53" mx="12" my="14">
<deckA id0="30" id1="29" id2="15" id3="0" id4="0" />
<deckV id0="35" id1="28" id2="11" id3="12" id4="5" />
<rule id="3" />
<reward id="30" />
<reward id="12" />
</npc>
<npc id="54" mx="12" my="34">
<deckA id0="53" id1="58" id2="196" id3="0" id4="0" />
<deckV id0="42" id1="89" id2="93" id3="0" id4="0" />
<rule id="7" />
<rule id="12" />
<reward id="196" />
<reward id="188" />
</npc>
<npc id="55" mx="3" my="4">
<deckA id0="54" id1="164" id2="110" id3="0" id4="0" />
<deckV id0="50" id1="145" id2="103" id3="29" id4="0" />
<rule id="7" />
<rule id="8" />
<reward id="164" />
</npc>
<npc id="56" mx="32" my="12">
<deckA id0="56" id1="98" id2="194" id3="0" id4="0" />
<deckV id0="125" id1="161" id2="45" id3="0" id4="0" />
<rule id="7" />
<rule id="8" />
<reward id="194" />
<reward id="188" />
</npc>
<npc id="57" mx="11" my="6">
<deckA id0="52" id1="42" id2="0" id3="0" id4="0" />
<deckV id0="81" id1="36" id2="43" id3="30" id4="35" />
<rule id="10" />
<rule id="8" />
<reward id="81" />
<reward id="131" />
</npc>
<npc id="58" mx="12" my="14">
<deckA id0="149" id1="144" id2="0" id3="0" id4="0" />
<deckV id0="29" id1="65" id2="54" id3="49" id4="12" />
<rule id="1" />
<rule id="8" />
<reward id="65" />
<reward id="144" />
<reward id="149" />
</npc>
<npc id="59" mx="22" my="21">
<deckA id0="57" id1="179" id2="195" id3="0" id4="0" />
<deckV id0="117" id1="110" id2="147" id3="0" id4="0" />
<rule id="6" />
<rule id="8" />
<reward id="195" />
<reward id="188" />
</npc>
<npc id="60" mx="6" my="23">
<deckA id0="55" id1="51" id2="50" id3="0" id4="0" />
<deckV id0="44" id1="38" id2="26" id3="33" id4="0" />
<rule id="11" />
<reward id="38" />
<reward id="26" />
<reward id="11" />
</npc>
<npc id="61" mx="17" my="27">
<deckA id0="56" id1="24" id2="35" id3="0" id4="0" />
<deckV id0="44" id1="30" id2="10" id3="18" id4="14" />
<rule id="3" />
<reward id="35" />
<reward id="24" />
</npc>
<npc id="62" mx="4" my="3">
<deckA id0="45" id1="158" id2="26" id3="0" id4="0" />
<deckV id0="28" id1="82" id2="8" id3="13" id4="0" />
<rule id="8" />
<reward id="158" />
</npc>
<npc id="63" mx="13" my="13">
<deckA id0="65" id1="54" id2="41" id3="0" id4="0" />
<deckV id0="58" id1="50" id2="49" id3="38" id4="0" />
<rule id="7" />
<rule id="8" />
<reward id="65" />
<reward id="54" />
<reward id="49" />
</npc>
<npc id="64" mx="4" my="5">
<deckA id0="112" id1="152" id2="179" id3="0" id4="0" />
<deckV id0="129" id1="115" id2="82" id3="103" id4="81" />
<rule id="12" />
<reward id="112" />
<reward id="152" />
<reward id="179" />
<reward id="129" />
</npc>
<npc id="65" mx="20" my="21">
<deckA id0="26" id1="9" id2="13" id3="0" id4="0" />
<deckV id0="25" id1="15" id2="5" id3="6" id4="0" />
<rule id="2" />
<reward id="9" />
<reward id="5" />
</npc>
<npc id="66" mx="22" my="5">
<deckA id0="34" id1="61" id2="0" id3="0" id4="0" />
<deckV id0="29" id1="60" id2="47" id3="39" id4="45" />
<rule id="1" />
<rule id="1" />
<reward id="60" />
<reward id="34" />
</npc>
<npc id="67" mx="4" my="8">
<deckA id0="59" id1="56" id2="47" id3="0" id4="0" />
<deckV id0="57" id1="58" id2="43" id3="50" id4="45" />
<rule id="9" />
<rule id="4" />
<reward id="45" />
<reward id="50" />
</npc>
<npc id="68" mx="7" my="7">
<deckA id0="107" id1="106" id2="0" id3="0" id4="0" />
<deckV id0="117" id1="18" id2="15" id3="14" id4="17" />
<rule id="5" />
<rule id="12" />
<reward id="106" />
<reward id="107" />
<reward id="117" />
</npc>
<npc id="69" mx="24" my="23">
<deckA id0="58" id1="51" id2="33" id3="0" id4="0" />
<deckV id0="45" id1="38" id2="47" id3="0" id4="0" />
<rule id="7" />
<rule id="8" />
<reward id="58" />
<reward id="38" />
<reward id="33" />
<reward id="162" />
</npc>
<npc id="70" mx="8" my="9">
<deckA id0="67" id1="28" id2="22" id3="0" id4="0" />
<deckV id0="59" id1="46" id2="40" id3="33" id4="19" />
<rule id="12" />
<reward id="67" />
<reward id="59" />
<reward id="40" />
<reward id="113" />
</npc>
<npc id="71" mx="22" my="19">
<deckA id0="136" id1="117" id2="0" id3="0" id4="0" />
<deckV id0="107" id1="106" id2="49" id3="59" id4="0" />
<rule id="13" />
<rule id="7" />
<reward id="136" />
<reward id="117" />
<reward id="163" />
</npc>
<npc id="72" mx="36" my="16">
<deckA id0="41" id1="34" id2="2" id3="0" id4="0" />
<deckV id0="49" id1="26" id2="22" id3="20" id4="0" />
<rule id="3" />
<reward id="41" />
<reward id="20" />
</npc>
<npc id="73" mx="4" my="7">
<deckA id0="13" id1="7" id2="2" id3="5" id4="4" />
<deckV id0="0" id1="0" id2="0" id3="0" id4="0" />
<rule id="2" />
<reward id="4" />
</npc>
<npc id="74" mx="29" my="16">
<deckA id0="89" id1="184" id2="38" id3="0" id4="0" />
<deckV id0="54" id1="21" id2="18" id3="155" id4="0" />
<rule id="12" />
<rule id="1" />
<reward id="184" />
</npc>
<npc id="75" mx="16" my="25">
<deckA id0="217" id1="96" id2="137" id3="0" id4="0" />
<deckV id0="109" id1="162" id2="174" id3="0" id4="0" />
<rule id="7" />
<rule id="8" />
<reward id="217" />
<reward id="189" />
</npc>
<npc id="76" mx="22" my="8">
<deckA id0="221" id1="222" id2="225" id3="0" id4="0" />
<deckV id0="212" id1="184" id2="214" id3="193" id4="0" />
<rule id="13" />
<rule id="11" />
<reward id="225" />
<reward id="222" />
<reward id="221" />
</npc>
<npc id="77" mx="24" my="19">
<deckA id0="97" id1="83" id2="0" id3="0" id4="0" />
<deckV id0="109" id1="105" id2="90" id3="59" id4="88" />
<rule id="1" />
<reward id="97" />
<reward id="85" />
<reward id="109" />
</npc>
<npc id="78" mx="24" my="20">
<deckA id0="105" id1="97" id2="0" id3="0" id4="0" />
<deckV id0="90" id1="88" id2="59" id3="55" id4="109" />
<rule id="9" />
<rule id="13" />
<reward id="105" />
<reward id="109" />
</npc>
<npc id="79" mx="10" my="11">
<deckA id0="66" id1="56" id2="53" id3="0" id4="0" />
<deckV id0="63" id1="58" id2="48" id3="43" id4="0" />
<rule id="9" />
<reward id="66" />
<reward id="53" />
<reward id="48" />
<reward id="43" />
</npc>
<npc id="80" mx="8" my="15">
<deckA id0="63" id1="49" id2="0" id3="0" id4="0" />
<deckV id0="89" id1="48" id2="42" id3="73" id4="28" />
<rule id="13" />
<rule id="12" />
<reward id="89" />
</npc>
<npc id="81" mx="10" my="9">
<deckA id0="22" id1="28" id2="13" id3="0" id4="0" />
<deckV id0="26" id1="4" id2="7" id3="8" id4="0" />
<rule id="3" />
<reward id="8" />
<reward id="141" />
</npc>
<npc id="82" mx="3" my="3">
<deckA id0="35" id1="11" id2="154" id3="0" id4="0" />
<deckV id0="30" id1="5" id2="9" id3="13" id4="0" />
<rule id="2" />
<rule id="7" />
<reward id="154" />
</npc>
<npc id="83" mx="7" my="12">
<deckA id0="61" id1="55" id2="0" id3="0" id4="0" />
<deckV id0="96" id1="22" id2="40" id3="46" id4="81" />
<rule id="12" />
<rule id="1" />
<reward id="96" />
<reward id="127" />
</npc>
<npc id="84" mx="14" my="13">
<deckA id0="64" id1="81" id2="0" id3="0" id4="0" />
<deckV id0="84" id1="34" id2="32" id3="77" id4="55" />
<rule id="9" />
<rule id="13" />
<reward id="84" />
</npc>
<npc id="85" mx="32" my="37">
<deckA id0="214" id1="193" id2="108" id3="0" id4="0" />
<deckV id0="37" id1="32" id2="122" id3="0" id4="0" />
<rule id="8" />
<reward id="214" />
</npc>
<npc id="86" mx="11" my="15">
<deckA id0="253" id1="25" id2="170" id3="0" id4="0" />
<deckV id0="8" id1="265" id2="155" id3="1" id4="0" />
<rule id="3" />
<reward id="253" />
</npc>
<npc id="87" mx="16" my="31">
<deckA id0="257" id1="111" id2="261" id3="103" id4="0" />
<deckV id0="155" id1="7" id2="253" id3="0" id4="0" />
<rule id="3" />
<rule id="13" />
<reward id="257" />
</npc>
<npc id="88" mx="19" my="26">
<deckA id0="258" id1="268" id2="0" id3="0" id4="0" />
<deckV id0="10" id1="262" id2="170" id3="105" id4="38" />
<rule id="7" />
<rule id="1" />
<reward id="268" />
<reward id="258" />
</npc>
<npc id="89" mx="12" my="17">
<deckA id0="254" id1="256" id2="189" id3="0" id4="0" />
<deckV id0="7" id1="38" id2="8" id3="170" id4="0" />
<rule id="8" />
<rule id="7" />
<reward id="256" />
<reward id="254" />
</npc>
<npc id="90" mx="19" my="17">
<deckA id0="255" id1="264" id2="38" id3="0" id4="0" />
<deckV id0="12" id1="7" id2="256" id3="21" id4="0" />
<rule id="3" />
<rule id="6" />
<reward id="255" />
</npc>
<npc id="91" mx="36" my="20">
<deckA id0="265" id1="0" id2="0" id3="0" id4="0" />
<deckV id0="38" id1="260" id2="170" id3="110" id4="25" />
<rule id="12" />
<reward id="265" />
</npc>
<npc id="92" mx="32" my="17">
<deckA id0="259" id1="253" id2="254" id3="0" id4="0" />
<deckV id0="255" id1="265" id2="8" id3="155" id4="258" />
<rule id="2" />
<reward id="259" />
</npc>
<npc id="93" mx="13" my="10">
<deckA id0="266" id1="270" id2="0" id3="0" id4="0" />
<deckV id0="260" id1="262" id2="263" id3="38" id4="267" />
<rule id="8" />
<rule id="13" />
<reward id="270" />
<reward id="266" />
</npc>
<npc id="94" mx="22" my="4">
<deckA id0="274" id1="276" id2="0" id3="0" id4="0" />
<deckV id0="257" id1="111" id2="261" id3="103" id4="38" />
<rule id="8" />
<reward id="276" />
<reward id="274" />
</npc>
<npc id="95" mx="20" my="27">
<deckA id0="284" id1="287" id2="275" id3="0" id4="0" />
<deckV id0="109" id1="262" id2="86" id3="0" id4="0" />
<rule id="7" />
<rule id="5" />
<reward id="287" />
<reward id="284" />
</npc>
<npc id="96" mx="10" my="12">
<deckA id0="209" id1="208" id2="20" id3="226" id4="0" />
<deckV id0="250" id1="229" id2="58" id3="0" id4="0" />
<rule id="8" />
<rule id="10" />
<reward id="250" />
<reward id="229" />
<reward id="209" />
<reward id="208" />
</npc>
<npc id="97" mx="14" my="8">
<deckA id0="296" id1="294" id2="264" id3="0" id4="0" />
<deckV id0="278" id1="253" id2="260" id3="265" id4="285" />
<rule id="8" />
<rule id="5" />
<reward id="296" />
<reward id="294" />
</npc>
<npc id="98" mx="5" my="6">
<deckA id0="302" id1="244" id2="180" id3="175" id4="0" />
<deckV id0="291" id1="176" id2="238" id3="192" id4="51" />
<rule id="13" />
<rule id="6" />
<reward id="302" />
</npc>
<npc id="99" mx="6" my="7">
<deckA id0="298" id1="299" id2="208" id3="180" id4="0" />
<deckV id0="250" id1="229" id2="209" id3="0" id4="0" />
<rule id="8" />
<rule id="9" />
<reward id="298" />
<reward id="299" />
</npc>
<npc id="100" mx="27" my="16">
<deckA id0="313" id1="314" id2="263" id3="288" id4="0" />
<deckV id0="301" id1="270" id2="254" id3="256" id4="0" />
<rule id="8" />
<rule id="6" />
<reward id="313" />
<reward id="314" />
</npc>
<npc id="101" mx="12" my="13">
<deckA id0="309" id1="310" id2="136" id3="39" id4="0" />
<deckV id0="305" id1="9" id2="22" id3="25" id4="0" />
<rule id="7" />
<rule id="10" />
<reward id="309" />
<reward id="310" />
</npc>
<npc id="102" mx="6" my="7">
<deckA id0="321" id1="325" id2="208" id3="322" id4="0" />
<deckV id0="250" id1="229" id2="209" id3="299" id4="0" />
<rule id="7" />
<rule id="13" />
<reward id="321" />
<reward id="322" />
</npc>
<npc id="103" mx="29" my="13">
<deckA id0="327" id1="234" id2="0" id3="0" id4="0" />
<deckV id0="233" id1="169" id2="111" id3="130" id4="0" />
<rule id="3" />
<reward id="327" />
</npc>
<npc id="104" mx="20" my="9">
<deckA id0="328" id1="1" id2="0" id3="0" id4="0" />
<deckV id0="188" id1="232" id2="104" id3="45" id4="102" />
<rule id="7" />
<reward id="328" />
</npc>
<npc id="105" mx="32" my="17">
<deckA id0="340" id1="293" id2="0" id3="0" id4="0" />
<deckV id0="238" id1="244" id2="180" id3="176" id4="175" />
<rule id="1" />
<reward id="340" />
</npc>
<npc id="106" mx="11" my="8">
<deckA id0="330" id1="336" id2="0" id3="0" id4="0" />
<deckV id0="224" id1="191" id2="185" id3="170" id4="328" />
<rule id="8" />
<reward id="330" />
</npc>
<npc id="107" mx="11" my="9">
<deckA id0="331" id1="332" id2="0" id3="0" id4="0" />
<deckV id0="130" id1="94" id2="46" id3="269" id4="268" />
<rule id="13" />
<rule id="8" />
<reward id="331" />
<reward id="332" />
</npc>
<npc id="108" mx="16" my="7">
<deckA id0="338" id1="92" id2="233" id3="0" id4="0" />
<deckV id0="341" id1="251" id2="59" id3="60" id4="0" />
<rule id="8" />
<rule id="4" />
<reward id="338" />
<reward id="341" />
</npc>
<npc id="109" mx="31" my="12">
<deckA id0="350" id1="351" id2="140" id3="0" id4="0" />
<deckV id0="352" id1="353" id2="132" id3="135" id4="0" />
<rule id="7" />
<rule id="13" />
<reward id="351" />
<reward id="350" />
</npc>
<npc id="110" mx="20" my="28">
<deckA id0="355" id1="348" id2="336" id3="0" id4="0" />
<deckV id0="349" id1="330" id2="188" id3="0" id4="0" />
<rule id="1" />
<rule id="8" />
<reward id="348" />
</npc>
<npc id="112" mx="13" my="8">
<deckA id0="358" id1="63" id2="118" id3="0" id4="0" />
<deckV id0="28" id1="22" id2="45" id3="178" id4="0" />
<rule id="3" />
<rule id="8" />
<reward id="358" />
</npc>
<npc id="113" mx="18" my="16">
<deckA id0="369" id1="331" id2="269" id3="0" id4="0" />
<deckV id0="344" id1="4" id2="125" id3="173" id4="0" />
<rule id="13" />
<reward id="369" />
</npc>
<npc id="114" mx="9" my="27">
<deckA id0="382" id1="385" id2="335" id3="338" id4="0" />
<deckV id0="388" id1="367" id2="0" id3="0" id4="0" />
<rule id="7" />
<rule id="10" />
<reward id="382" />
<reward id="385" />
</npc>
<npc id="115" mx="9" my="9">
<deckA id0="378" id1="239" id2="0" id3="0" id4="0" />
<deckV id0="221" id1="222" id2="235" id3="246" id4="0" />
<rule id="6" />
<rule id="8" />
<reward id="378" />
</npc>
<npc id="116" mx="8" my="11">
<deckA id0="394" id1="395" id2="0" id3="0" id4="0" />
<deckV id0="396" id1="208" id2="340" id3="21" id4="0" />
<rule id="13" />
<rule id="7" />
<reward id="394" />
<reward id="395" />
<reward id="396" />
</npc>
<npc id="117" mx="9" my="15">
<deckA id0="398" id1="399" id2="0" id3="0" id4="0" />
<deckV id0="112" id1="209" id2="55" id3="198" id4="0" />
<rule id="12" />
<rule id="8" />
<reward id="398" />
<reward id="399" />
</npc>
<npc id="118" mx="15" my="14">
<deckA id0="406" id1="10" id2="0" id3="0" id4="0" />
<deckV id0="86" id1="82" id2="107" id3="156" id4="183" />
<rule id="2" />
<reward id="406" />
</npc>
<npc id="119" mx="29" my="13">
<deckA id0="407" id1="8" id2="0" id3="0" id4="0" />
<deckV id0="158" id1="191" id2="306" id3="2" id4="11" />
<rule id="3" />
<reward id="407" />
</npc>
<npc id="120" mx="12" my="27">
<deckA id0="408" id1="298" id2="0" id3="0" id4="0" />
<deckV id0="38" id1="347" id2="259" id3="195" id4="0" />
<rule id="7" />
<reward id="408" />
</npc>
<npc id="121" mx="13" my="15">
<deckA id0="409" id1="162" id2="175" id3="0" id4="0" />
<deckV id0="205" id1="27" id2="192" id3="171" id4="0" />
<rule id="9" />
<reward id="409" />
</npc>
<npc id="122" mx="29" my="30">
<deckA id0="410" id1="263" id2="0" id3="0" id4="0" />
<deckV id0="289" id1="141" id2="310" id3="102" id4="0" />
<rule id="3" />
<rule id="8" />
<reward id="410" />
</npc>
<npc id="123" mx="20" my="9">
<deckA id0="411" id1="245" id2="207" id3="0" id4="0" />
<deckV id0="192" id1="128" id2="48" id3="320" id4="0" />
<rule id="13" />
<rule id="10" />
<reward id="411" />
</npc>
<npc id="124" mx="6" my="14">
<deckA id0="412" id1="149" id2="225" id3="0" id4="0" />
<deckV id0="319" id1="114" id2="278" id3="0" id4="0" />
<rule id="8" />
<rule id="2" />
<reward id="412" />
</npc>
<npc id="125" mx="16" my="3">
<deckA id0="413" id1="291" id2="96" id3="312" id4="0" />
<deckV id0="239" id1="120" id2="271" id3="250" id4="0" />
<rule id="12" />
<rule id="6" />
<reward id="413" />
</npc>
<npc id="126" mx="7" my="7">
<deckA id0="428" id1="429" id2="197" id3="66" id4="0" />
<deckV id0="193" id1="318" id2="236" id3="0" id4="0" />
<rule id="7" />
<rule id="13" />
<reward id="428" />
<reward id="429" />
</npc>
<npc id="127" mx="6" my="6">
<deckA id0="430" id1="431" id2="269" id3="65" id4="0" />
<deckV id0="93" id1="146" id2="190" id3="0" id4="0" />
<rule id="8" />
<rule id="6" />
<reward id="430" />
<reward id="431" />
</npc>
<npc id="128" mx="5" my="6">
<deckA id0="437" id1="49" id2="53" id3="62" id4="0" />
<deckV id0="46" id1="45" id2="38" id3="0" id4="0" />
<rule id="8" />
<rule id="12" />
<reward id="437" />
</npc>
<npc id="129" mx="33" my="37">
<deckA id0="442" id1="443" id2="98" id3="119" id4="0" />
<deckV id0="217" id1="318" id2="394" id3="0" id4="0" />
<rule id="9" />
<rule id="7" />
<reward id="442" />
<reward id="443" />
</npc>
</root>
================================================
FILE: assets/data/tournaments.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<root>
<tournament id="0">
<rule id="2" />
<rule id="8" />
</tournament>
<tournament id="1">
<rule id="3" />
<rule id="13" />
</tournament>
<tournament id="2">
<rule id="11" />
<rule id="7" />
</tournament>
<tournament id="3">
<rule id="1" />
<rule id="1" />
</tournament>
</root>
================================================
FILE: datasource/!Start.bat
================================================
@echo off
setlocal
if not exist SaintCoinach goto MISSING_SAINT
if not exist SetUserVars.bat goto MISSING_PATH
call SetUserVars.bat
if %GamePath%=="" goto MISSING_PATH
echo Game path: %GamePath%
echo.
echo Export data using commands:
echo ui 87000 88999
echo allexd
echo exit
echo.
pushd SaintCoinach
if exist SaintCoinach.History.zip ( del SaintCoinach.History.zip > nul )
SaintCoinach.Cmd.exe %GamePath%
popd
FOR /F "tokens=* USEBACKQ" %%F IN (`dir SaintCoinach\2* /A:D /B`) DO (
SET DataPath=%%F
)
echo.
rmdir export /s /q > nul
echo Copying exported data from: %DataPath%
xcopy SaintCoinach\%DataPath%\*.* export\ /e > nul
del ..\assets\icons\*.png
xcopy export\ui\icon\087000\*.png ..\assets\icons\ /s > nul
xcopy export\ui\icon\088000\*.png ..\assets\icons\ /s > nul
rmdir SaintCoinach\%DataPath% /s /q > nul
:GIT_MIRRORS
SET /P CANDOWNLOAD=Do you want to download from github mirrors (curl required) (Y/[N])?
IF /I "%CANDOWNLOAD%" NEQ "Y" GOTO EXPORTED
rem raw blobs with URL like:
rem https://raw.githubusercontent.com/thewakingsands/ffxiv-datamining-cn/master/ENpcResident.csv
call :CURL_WORKER cn thewakingsands/ffxiv-datamining-cn master
call :CURL_WORKER ko Ra-Workspace/ffxiv-datamining-ko master/csv
goto EXPORTED
:CURL_WORKER
echo Downloading from: %2...
for %%F in (ENpcResident Item PlaceName TripleTriadCard TripleTriadCardType TripleTriadRule TripleTriadCompetition TripleTriadCardResident TripleTriadResident) do (
curl https://raw.githubusercontent.com/%2/%3/%%F.csv --output export\exd-all\%%F.%1.csv --silent
)
exit /b
:EXPORTED
echo Done!
echo.
echo Run DEBUG build with -dataConvert cmdline to process data tables.
echo Output logs will show all needed information
goto FINISHED
:MISSING_PATH
echo Game path not set, edit SetUserVars.bat and update GamePath variable
echo.
echo Example: "C:\Games\SquareEnix\FINAL FANTASY XIV - A Realm Reborn"
echo set GamePath="C:\Games\SquareEnix\FINAL FANTASY XIV - A Realm Reborn" > SetUserVars.bat
goto FINISHED
:MISSING_SAINT
echo Can't find SaintCoinach binaries!
echo.
echo Grab latest release of SaintCoinach.Cmd from github:
echo https://github.com/xivapi/SaintCoinach/releases
echo.
echo Expected path: datasource/SaintCoinach/SaintCoinach.Cmd.exe
goto FINISHED
:FINISHED
echo.
pause
================================================
FILE: ml/patternMatch/nn.py
================================================
import tensorflow as tf
import numpy as np
import json
import textwrap
from tensorflow import keras
from tqdm.keras import TqdmCallback
class NNTraining():
def __init__(self, inputFile, outputFile, labelKey="output"):
path = 'data/'
self.inputFile = path + inputFile
self.outputFile = path + outputFile
self.labelKey = labelKey
pass
def printToLines(self, prefix, values, suffix):
longstr = prefix + ', '.join(('%ff' % v) for v in values) + suffix
return textwrap.wrap(longstr, 250)
def loadData(self):
with open(self.inputFile) as file:
training_sets = json.load(file)
inputs = []
outputs = []
for elem in training_sets["dataset"]:
inputs.append(elem["input"])
outputs.append(elem[self.labelKey])
return inputs, outputs
def writeCodeFile(self, model, codeSuffix):
lines = []
for i in range(len(model.layers)):
layer = model.layers[i]
print('Layer[%i]:' % i)
print(' input_shape:', layer.input_shape)
print(' output_shape:', layer.output_shape)
weights = layer.get_weights()
for w in weights:
print(' w.shape:', w.shape)
print(' use_bias:', layer.use_bias)
print(' activation:', layer.activation)
if (len(weights) == 2 and layer.use_bias):
listWeights = np.reshape(weights[0], -1)
listBias = np.reshape(weights[1], -1)
lines += self.printToLines('Layer%s%iW = new float[]{' % (codeSuffix, i), listWeights, '};')
lines += self.printToLines('Layer%s%iB = new float[]{' % (codeSuffix, i), listBias, '};')
with open(self.outputFile, "w") as file:
for line in lines:
file.write(line)
file.write("\n")
def run(self, numHidden1, numHidden2=0, numEpochs=20, batchSize=512, codeSuffix=''):
x_train, y_train = self.loadData()
x_train = np.array(x_train, np.float32)
numClasses = max(y_train) + 1
train_data = tf.data.Dataset.from_tensor_slices((x_train, y_train))
train_data = train_data.repeat().shuffle(5000).batch(batchSize).prefetch(1)
layers = []
if (numHidden1 > 0):
layers += [ tf.keras.layers.Dense(numHidden1, activation='relu') ]
if (numHidden2 > 0):
layers += [ tf.keras.layers.Dense(numHidden2, activation='relu') ]
layers += [ tf.keras.layers.Dense(numClasses) ];
model = tf.keras.Sequential(layers)
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
model.fit(train_data,
epochs=numEpochs,
steps_per_epoch=100,
verbose=0, callbacks=[TqdmCallback(verbose=2)])
self.writeCodeFile(model, codeSuffix)
================================================
FILE: ml/patternMatch/run-everything.bat
================================================
@echo off
set ToolPath=%localappdata%/Programs/Python/Python38
for %%i in (train-*.py) do %ToolPath%/python %%i
pause
================================================
FILE: ml/patternMatch/train-cactpot.py
================================================
from nn import NNTraining
training = NNTraining(inputFile='ml-cactpot.json', outputFile='ml-cactpot.txt')
training.run(numHidden1=80, numEpochs=500)
================================================
FILE: ml/patternMatch/train-triad.py
================================================
from nn import NNTraining
training = NNTraining(inputFile='ml-triad.json', outputFile='ml-triad.txt')
training.run(numHidden1=64, numEpochs=200)
================================================
FILE: ml/solver/agents/agent.py
================================================
class Agent:
def __init__(self, game):
pass
def findAction(self, game, state):
raise RuntimeError()
def findTrainingAction(self, game, state):
raise RuntimeError()
def onTrainingGameStart(self, game, playerId):
pass
def onTrainingGameEnd(self, game, playerId):
pass
def onTrainingStep(self, game, playerId, state, action, nextState, reward):
pass
def train(self):
pass
def save(self, name):
pass
def load(self, name):
pass
def getTrainingDetails(self):
return {}
def generateModelCode(self, name):
pass
================================================
FILE: ml/solver/agents/agentDQN.py
================================================
import os
import math
import numpy as np
from .agent import Agent
from utils.trainingMemory import TrainingMemoryCircular
from utils.estimatorTorch import EstimatorModel
# Deep Q Network
#
class AgentDQN(Agent):
def __init__(self, game):
self.memorySize = 1 * 1000 * 1000
self.batchSize = 256
self.numLayersHidden = [500, 500]
self.learningRate = 0.0001
self.discountFactor = 0.99
self.epsilonStart = 1
self.epsilonEnd = 0.1
self.epsilonDecay = 2000
self.numActions = game.getMaxActions()
numInputs = len(game.getState(0))
self.estimatorQ = EstimatorModel(numInputs, self.numLayersHidden, self.numActions, self.learningRate)
self.estimatorTarget = EstimatorModel(numInputs, self.numLayersHidden, self.numActions, self.learningRate)
self.replayMemory = TrainingMemoryCircular(self.memorySize)
self.epsilon = self.epsilonStart
self.numSteps = 0
self.historyLoss = []
self.historyReward = []
self.trainedOnce = False
def findAction(self, game, state):
probs = self.estimatorQ.predict(np.expand_dims(state, 0))[0]
probs = self.sanitizeActions(game, state, probs)
return np.argmax(probs)
def findTrainingAction(self, game, state):
useRandom = np.random.random() < self.epsilon
if useRandom or not self.trainedOnce:
allowedActions = game.getAllowedActions(state)
return np.random.choice(allowedActions)
return self.findAction(game, state)
def onTrainingStep(self, game, playerId, state, action, nextState, reward):
self.numSteps += 1
self.epsilon = self.epsilonEnd + ((self.epsilonStart - self.epsilonEnd) * math.exp(-1.0 * self.numSteps / self.epsilonDecay))
memorySample = (state, action, nextState, reward, game.isFinished())
self.historyReward.append(reward)
self.replayMemory.add(memorySample)
if len(self.replayMemory) >= self.batchSize:
self.trainOnBatch(game)
def train(self):
updateTargetCheckpoint = 'updateTarget.tmp'
self.estimatorQ.save(updateTargetCheckpoint)
self.estimatorTarget.load(updateTargetCheckpoint)
os.remove(updateTargetCheckpoint)
self.trainAvgLoss = np.average(self.historyLoss)
self.trainAvgReward = np.average(self.historyReward)
self.historyLoss = []
self.historyReward = []
def save(self, name):
self.estimatorQ.save(name)
def load(self, name):
self.estimatorQ.load(name)
self.estimatorTarget.load(name)
def getTrainingDetails(self):
return {
'epsilon': self.epsilon,
'memory': len(self.replayMemory) / self.replayMemory.capacity,
'loss': self.trainAvgLoss,
'reward': self.trainAvgReward,
}
def generateModelCode(self, name):
self.estimatorQ.generateModelCode(name)
def sanitizeActions(self, game, state, actionValues, badValue = -np.inf):
maskedValues = badValue * np.ones(self.numActions, dtype=float)
allowedActions = game.getAllowedActions(state)
maskedValues[allowedActions] = actionValues[allowedActions]
return maskedValues
def trainOnBatch(self, game):
states, actions, nextStates, rewards, dones = self.replayMemory.sample(self.batchSize)
states = np.array(states)
targets = self.estimatorTarget.predict(states)
for i in range(self.batchSize):
targets[i] = self.sanitizeActions(game, states[i], targets[i], badValue=-1)
bestActions = np.argmax(targets, axis=1)
nextTargets = self.estimatorTarget.predict(nextStates)
predictedRewards = rewards + (np.invert(dones).astype(np.float) * self.discountFactor * nextTargets[np.arange(self.batchSize), bestActions])
loss = self.estimatorQ.fit(states, actions, predictedRewards)
self.historyLoss.append(loss)
self.trainedOnce = True
================================================
FILE: ml/solver/agents/agentRandom.py
================================================
import random
from .agent import Agent
class AgentRandom(Agent):
def __init__(self, game):
self.randGen = random.Random()
def setSeed(self, seedValue):
self.randGen = random.Random(seedValue)
def findAction(self, game, state):
actions = game.getAllowedActions(state)
return self.randGen.choice(actions)
def findTrainingAction(self, game, state):
return self.findAction(game, state)
================================================
FILE: ml/solver/environment.py
================================================
class Environment(object):
def __init__(self, game, playerAgents):
self.game = game
self.players = playerAgents
def runTrainingGame(self):
self.game.init()
for idx in range(len(self.players)):
self.players[idx].onTrainingGameStart(self.game, idx)
while not self.game.isFinished():
playerId = self.game.getCurrentPlayer()
state = self.game.getState(playerId)
action = self.players[playerId].findTrainingAction(self.game, state)
self.game.step(action)
# TODO: reuse nextState in next step, it contains relative data relative to player though (board owner, card visibility)
nextState = self.game.getState(playerId)
reward = self.game.getReward(playerId)
self.players[playerId].onTrainingStep(self.game, playerId, state, action, nextState, reward)
for idx in range(len(self.players)):
self.players[idx].onTrainingGameEnd(self.game, idx)
def runEvalGame(self):
self.game.init()
while not self.game.isFinished():
playerId = self.game.getCurrentPlayer()
state = self.game.getState(playerId)
action = self.players[playerId].findAction(self.game, state)
self.game.step(action)
playerRewards = []
for idx in range(len(self.players)):
playerRewards.append(self.game.getReward(idx))
return playerRewards
================================================
FILE: ml/solver/gameSession.py
================================================
from gamelogic.triadCard import TriadCardDB
from gamelogic.triadDeck import TriadDeck
from gamelogic.triadGame import TriadGame, TriadGameState
from gamelogic.triadMods import TriadMod
import random
class GameSession():
def __init__(self, useModifiers = False):
self.randomSeed = 0
self.useModifiers = useModifiers
self.init()
def init(self):
self.game = TriadGame()
if self.useModifiers:
self.game.mods = TriadMod.generateMods()
self.game.redDeck = TriadDeck.generateDeckPlayer()
self.game.blueDeck = TriadDeck.generateDeckPlayer()
self.game.blueDeck.makeAllVisible()
self.game.state = TriadGameState.BlueTurn if (random.random() < 0.5) else TriadGameState.RedTurn
self.game.initModifiers()
self.game.onTurnStart()
def step(self, action):
cardIdx = int(action / 9)
boardIdx = action % 9
ownerId = TriadGame.OwnerIdBlue if (self.game.state == TriadGameState.BlueTurn) else TriadGame.OwnerIdRed
result = self.game.placeCardFromDeck(boardIdx, cardIdx, ownerId)
if not result:
raise RuntimeError('Step failed, random seed:', self.randomSeed)
def isFinished(self):
return (self.game.state != TriadGameState.BlueTurn) and (self.game.state != TriadGameState.RedTurn)
def getCurrentPlayer(self):
return 0 if self.game.state == TriadGameState.BlueTurn else 1
@staticmethod
def getMaxActions():
return 9 * 5
def getAllowedActions(self, state):
actions = []
for idxB in range(9):
# is board pos available? (avail flag = 1)
if state[idxB] == 1:
for idxC in range(5):
# is card available? (avail flag = 1)
if state[idxC + 9] == 1:
actions.append((idxC * 9) + idxB)
return actions
def getReward(self, playerId):
if self.game.state == TriadGameState.EndBlueWin:
return 1 if playerId == 0 else -1
if self.game.state == TriadGameState.EndRedWin:
return -1 if playerId == 0 else 1
if self.game.state == TriadGameState.EndDraw:
return 0.1
return 0
def getState(self, playerId):
state = []
# precalc values
ownerPlayer = TriadGame.OwnerIdBlue if playerId == 0 else TriadGame.OwnerIdRed
deckPlayer = self.game.blueDeck if playerId == 0 else self.game.redDeck
deckOpp = self.game.redDeck if playerId == 1 else self.game.blueDeck
cardInfoPlayer = deckPlayer.getCardsInfo(True)
cardInfoOpp = deckOpp.getCardsInfo()
# one-hot: valid board placement
if self.game.forcedBoardIdx >= 0:
state += [1 if (pos == self.game.forcedBoardIdx) else 0 for pos in range(len(self.game.owner))]
else:
state += [1 if (ownerId == 0) else 0 for ownerId in self.game.owner]
# one-hot: valid cards for move's owner
if self.game.forcedCardIdx >= 0:
state += [1 if (cardIdx == self.game.forcedCardIdx) else 0 for cardIdx in range(5)]
else:
state += [1 if (cardState != TriadDeck.cardNone) else 0 for cardState in deckPlayer.state]
# one-hot: active modifiers
allGameMods = [mod.name for mod in TriadMod.modDB]
activeMods = [mod.name for mod in self.game.mods]
state += [1 if (s in activeMods) else 0 for s in allGameMods]
# value of type modes
state += self.game.typeMod
# board cells: [ relative ownerId, type, sides 0..3]
for pos in range(len(self.game.owner)):
cellInfo = [0, 0, 0, 0, 0, 0]
if self.game.owner[pos] != 0:
cardOb = self.game.board[pos]
cellInfo = [1 if self.game.owner[pos] == ownerPlayer else -1, cardOb.cardType, cardOb.sides[0], cardOb.sides[1], cardOb.sides[2], cardOb.sides[3]]
state += cellInfo
# card data for move owner & opponent
for i in range(5):
if cardInfoPlayer[i][0] != 0:
sides = cardInfoPlayer[i][2].sides
state += [ cardInfoPlayer[i][0], sides[0], sides[1], sides[2], sides[3], cardInfoPlayer[i][3] ]
else:
state += [ 0, 0, 0, 0, 0, 0 ]
if cardInfoOpp[i][0] != 0:
sides = cardInfoOpp[i][2].sides if (cardInfoOpp[i][2] != None) else TriadCardDB.mapAvgSides[cardInfoOpp[i][3]]
state += [ cardInfoOpp[i][0], cardInfoOpp[i][1], sides[0], sides[1], sides[2], sides[3], cardInfoOpp[i][3] ]
else:
state += [ 0, 0, 0, 0, 0, 0, 0 ]
return state
================================================
FILE: ml/solver/gamelogic/triadCard.py
================================================
from xml.dom import minidom
class TriadCard:
def __init__(self, name, rarity, cardType, sideUp, sideLeft, sideDown, sideRight):
self.name = name
self.rarity = rarity
self.cardType = cardType
self.sides = [ sideUp, sideLeft, sideDown, sideRight ]
self.valid = True
self.id = 0
def __str__(self):
if self.valid == False:
return "invalid"
return 'type:%s, sides:[T:%i, L:%i, D:%i, R:%i], name:%s %s' % (
self.cardType,
self.sides[0], self.sides[1], self.sides[2], self.sides[3],
self.name, '*' * (self.rarity + 1))
class TriadCardDB:
typeList = ['None', 'Primal', 'Scion', 'Beastman', 'Garlean']
rarityList = ['Common', 'Uncommon', 'Rare', 'Epic', 'Legendary']
cards = []
# [rarity] = list of cards
mapRarity = []
mapAvgSides = []
@staticmethod
def load():
assetFolder = '../../assets/data/'
if (len(TriadCardDB.cards) > 0):
return
unknownCard = TriadCard('<Hidden>', 0, 0, 0, 0, 0, 0)
unknownCard.valid = False
TriadCardDB.cards = [ unknownCard ]
TriadCardDB.mapRarity = []
TriadCardDB.mapAvgSides = []
for i in range(len(TriadCardDB.rarityList)):
TriadCardDB.mapRarity.append([])
TriadCardDB.mapAvgSides.append([1,1,1,1])
cardNames = {}
locXml = minidom.parse(assetFolder + 'loc.xml')
locElems = locXml.getElementsByTagName('loc')
for elem in locElems:
locType = int(elem.attributes['type'].value)
if locType == 3:
cardNames[elem.attributes['id'].value] = elem.attributes['en'].value
cardXml = minidom.parse(assetFolder + 'cards.xml')
cardElems = cardXml.getElementsByTagName('card')
for elem in cardElems:
cardOb = TriadCard(
cardNames[elem.attributes['id'].value],
int(elem.attributes['rarity'].value),
int(elem.attributes['type'].value),
int(elem.attributes['up'].value),
int(elem.attributes['lt'].value),
int(elem.attributes['dn'].value),
int(elem.attributes['rt'].value))
cardOb.id = len(TriadCardDB.cards)
TriadCardDB.cards.append(cardOb)
TriadCardDB.mapRarity[cardOb.rarity].append(cardOb)
for i in range(len(TriadCardDB.rarityList)):
avgSidesAcc = [0, 0, 0, 0]
for card in TriadCardDB.mapRarity[i]:
avgSidesAcc[0] += card.sides[0]
avgSidesAcc[1] += card.sides[1]
avgSidesAcc[2] += card.sides[2]
avgSidesAcc[3] += card.sides[3]
for side in range(4):
TriadCardDB.mapAvgSides[i][side] = avgSidesAcc[side] / len(TriadCardDB.mapRarity[i])
print('Loaded cards:',len(TriadCardDB.cards))
@staticmethod
def find(name):
for card in TriadCardDB.cards:
if (card.name == name):
return card
return TriadCardDB.cards[0]
# load cards on startup
TriadCardDB.load()
================================================
FILE: ml/solver/gamelogic/triadDeck.py
================================================
from .triadCard import *
import random
class TriadDeck():
cardNone = 0
cardHidden = 1
cardVisible = 2
def __init__(self):
self.cards = [ None, None, None, None, None ]
self.state = [ TriadDeck.cardNone, TriadDeck.cardNone, TriadDeck.cardNone, TriadDeck.cardNone, TriadDeck.cardNone ]
self.usedRarityCount = [ 0 ] * len(TriadCardDB.rarityList)
self.expectedRarityCount = [0, 0, 3, 1, 1]
self.numAvail = 0
def initialize(self, cards, state):
self.cards = cards
self.numAvail = len(cards)
for i in range(len(self.state)):
self.state[i] = state
def hasCard(self, idx):
return self.state[idx] != TriadDeck.cardNone
def useCard(self, idx):
card = self.cards[idx]
self.cards[idx] = None
self.state[idx] = TriadDeck.cardNone
self.numAvail -= 1
self.usedRarityCount[card.rarity] += 1
return card
def makeAllVisible(self):
for i in range(len(self.state)):
self.state[i] = TriadDeck.cardVisible
def onRestart(self):
self.numAvail = len(self.cards)
self.usedRarityCount = [ 0 ] * len(TriadCardDB.rarityList)
def getCardsInfo(self, forceVisible = False):
result = []
remainingRarity = self.expectedRarityCount.copy()
hiddenList = []
for i in range(len(self.cards)):
if (self.state[i] == TriadDeck.cardNone):
result.append([0, 0, None, 0])
elif (self.state[i] == TriadDeck.cardVisible) or forceVisible:
cardOb = self.cards[i]
remainingRarity[cardOb.rarity] -= 1
result.append([1, 1, cardOb, cardOb.rarity])
else:
result.append([])
hiddenList.append(i)
if len(hiddenList) > 0:
for i in range(len(remainingRarity)):
remainingRarity[i] -= self.usedRarityCount[i]
if remainingRarity[i] < 0:
if i < (len(remainingRarity) - 1):
remainingRarity[i + 1] += remainingRarity[i]
remainingRarity[i] = 0
else:
remainingRarity[i] = min(remainingRarity[i], len(hiddenList))
if remainingRarity[i] > 0:
for iR in range(remainingRarity[i]):
cardIdx = hiddenList.pop()
result[cardIdx] = [1, 0, None, i]
return result
def __str__(self):
stateDesc = ['none','hidden','visible']
desc = []
for i in range(len(self.state)):
desc += [ '[%i]:%s (%i*%s)' % (
i,
self.cards[i].name if isinstance(self.cards[i], TriadCard) else "--",
(self.cards[i].rarity + 1) if isinstance(self.cards[i], TriadCard) else 0,
"" if self.state[i] == TriadDeck.cardVisible else ", " + stateDesc[self.state[i]]
)]
return ', '.join(desc)
@staticmethod
def generateDeckForRarityRange(state, minRarity, maxRarity):
cards = []
while len(cards) < 5:
rarity = random.randrange(minRarity, maxRarity + 1)
cardIdx = random.randrange(len(TriadCardDB.mapRarity[rarity]))
testCard = TriadCardDB.mapRarity[rarity][cardIdx]
if (testCard in cards) == False:
cards.append(testCard)
deck = TriadDeck()
deck.initialize(cards, state)
return deck
@staticmethod
def generateDeckRandom(state):
return TriadDeck.generateDeckForRarityRange(state, 0, 4)
@staticmethod
def generateDeckNpc(minRarity, maxRarity):
return TriadDeck.generateDeckForRarityRange(TriadDeck.cardHidden, minRarity, maxRarity)
@staticmethod
def generateDeckPlayer():
randR4 = random.randrange(len(TriadCardDB.mapRarity[4]))
randR3 = random.randrange(len(TriadCardDB.mapRarity[3]))
cards = [ TriadCardDB.mapRarity[4][randR4], TriadCardDB.mapRarity[3][randR3] ]
while len(cards) < 5:
rarity = random.randrange(3)
cardIdx = random.randrange(len(TriadCardDB.mapRarity[rarity]))
testCard = TriadCardDB.mapRarity[rarity][cardIdx]
if (testCard in cards) == False:
cards.append(testCard)
deck = TriadDeck()
deck.initialize(cards, TriadDeck.cardHidden)
return deck
================================================
FILE: ml/solver/gamelogic/triadGame.py
================================================
from .triadCard import TriadCardDB
from enum import Enum
class TriadGameState(Enum):
Unknown = 0
BlueTurn = 1
RedTurn = 2
EndBlueWin = 3
EndDraw = 4
EndRedWin = 5
class TriadGame:
OwnerIdBlue = 1
OwnerIdRed = 2
ModTurnStart = 0
ModCardPlaced = 1
ModAllPlaced = 2
ModCaptureNei = 3
ModCaptureWeight = 4
ModCaptureCondition = 5
ModOverrides = 6
cachedNeis = []
def __init__(self):
self.board = [ None ] * 9
self.owner = [ 0 ] * 9
self.typeMod = [ 0 ] * len(TriadCardDB.typeList)
self.blueDeck = None
self.redDeck = None
self.mods = []
self.modOverrides = [ False ] * TriadGame.ModOverrides
self.numRestarts = 0
self.mapPlaced = [ 0, 0, 0 ]
self.forcedCardIdx = -1
self.forcedBoardIdx = -1
self.state = TriadGameState.Unknown
self.cachedSideValues = [[ 0, 0, 0, 0]] * 9
self.debug = False
def getNumCardsPlaced(self):
return sum(self.mapPlaced)
def getNumCardsByOwner(self, ownerId):
return sum([1 if (testId == ownerId) else 0 for testId in self.owner])
def getCardSideValue(self, card, side):
return max(1, min(10, card.sides[side] + self.typeMod[card.cardType]))
def getCardOppositeSideValue(self, card, side):
return self.getCardSideValue(card, (side + 2) % 4)
def initModifiers(self):
self.modOverrides = [ False ] * TriadGame.ModOverrides
for mod in self.mods:
mod.onMatchStart(self)
for idx in mod.overrides:
self.modOverrides[idx] = True
def restartGame(self):
self.board = [ None ] * 9
self.owner = [ 0 ] * 9
self.typeMod = [ 0 ] * len(TriadCardDB.typeList)
self.numRestarts += 1
self.mapPlaced = [ 0, 0, 0 ]
self.cachedSideValues = [[ 0, 0, 0, 0]] * 9
if self.debug:
print('restartGame',self.numRestarts)
def placeCardFromDeck(self, pos, idx, ownerId):
deck = self.blueDeck if ownerId == TriadGame.OwnerIdBlue else self.redDeck
isValid = self.isMoveValid(deck, pos, idx)
if isValid:
card = deck.useCard(idx)
self.mapPlaced[ownerId] += 1
self.placeCard(pos, card, ownerId)
return True
return False
def isMoveValid(self, deck, pos, idx):
if (self.forcedBoardIdx >= 0 and self.forcedBoardIdx != pos):
return False
if (self.forcedCardIdx >= 0 and self.forcedCardIdx != idx):
return False
if (not deck.hasCard(idx) or self.owner[pos] != 0):
return False
return True
def placeCard(self, pos, card, ownerId):
if self.debug:
print('Place card:%s, pos:%i, ownerId:%i' % (card, pos, ownerId))
if ((self.owner[pos] == 0) and card != None and card.valid):
self.setBoardRaw(pos, card, ownerId)
allowCombo = False
if self.modOverrides[TriadGame.ModCardPlaced]:
for mod in self.mods:
mod.onCardPlaced(self, pos)
allowCombo = allowCombo or mod.allowCombo
comboCounter = 0
comboList = self.getCaptures(pos, comboCounter)
while (allowCombo and len(comboList) > 0):
comboCounter += 1
nextCombo = []
for pos in comboList:
nextComboPart = self.getCaptures(pos, comboCounter)
nextCombo = nextCombo + nextComboPart
comboList = nextCombo
totalPlaced = sum(self.mapPlaced)
if (totalPlaced == len(self.board)):
self.onAllCardsPlaced()
# count again, all placed may trigger sudden death rule
totalPlaced = sum(self.mapPlaced)
if (totalPlaced < len(self.board)):
self.onTurnStart()
else:
print('ERROR: failed to place card:%s, pos:%i, ownerId:%i' % (card, pos, ownerId))
self.showState('DEBUG')
def setBoardRaw(self, pos, card, ownerId):
self.board[pos] = card
self.owner[pos] = ownerId
self.state = TriadGameState.BlueTurn if (ownerId == TriadGame.OwnerIdRed) else TriadGameState.RedTurn
self.updateCachedValuesForCard(pos)
def updateCachedValuesForCard(self, pos):
card = self.board[pos]
if card != None:
self.cachedSideValues[pos] = [ self.getCardSideValue(card, side) for side in range(4) ]
else:
self.cachedSideValues[pos] = [0, 0, 0, 0]
def onTurnStart(self):
self.forcedBoardIdx = -1
self.forcedCardIdx = -1
if (self.state == TriadGameState.BlueTurn or self.state == TriadGameState.RedTurn) and self.modOverrides[TriadGame.ModTurnStart]:
for mod in self.mods:
mod.onTurnStart(self)
def onAllCardsPlaced(self):
numPlayerCards = self.blueDeck.numAvail + self.getNumCardsByOwner(TriadGame.OwnerIdBlue)
numPlayerOwnedToWin = 5
if self.debug:
print('onAllCardsPlaced, player:%i+%i vs %i' % (self.blueDeck.numAvail, self.getNumCardsByOwner(TriadGame.OwnerIdBlue), numPlayerOwnedToWin))
if (numPlayerCards > numPlayerOwnedToWin):
self.state = TriadGameState.EndBlueWin
elif (numPlayerCards == numPlayerOwnedToWin):
self.state = TriadGameState.EndDraw
else:
self.state = TriadGameState.EndRedWin
if self.modOverrides[TriadGame.ModAllPlaced]:
for mod in self.mods:
mod.onAllCardsPlaced(self)
@staticmethod
def getBoardPos(x, y):
return x + (y * 3)
def getCaptures(self, pos, comboCounter):
neiInfo = TriadGame.cachedNeis[pos]
if self.debug:
print('getCaptures(',pos,', combo:',comboCounter,'), neis:',neiInfo)
comboList = []
allowMods = comboCounter == 0
if allowMods and self.modOverrides[TriadGame.ModCaptureNei]:
for mod in self.mods:
comboListPart = mod.getCaptureNeis(self, pos, neiInfo)
if self.debug:
print('>> capture(',mod.name,') = ',comboListPart)
if (len(comboListPart) > 0):
comboList = comboList + comboListPart
for side, neiPos in neiInfo:
if self.debug:
print('>> side:%i, neiPos:%i' % (side, neiPos))
if ((self.owner[neiPos] != 0) and (self.owner[neiPos] != self.owner[pos])):
sideV = self.cachedSideValues[pos][side]
neiV = self.cachedSideValues[neiPos][(side + 2) % 4] # opposite side
if allowMods and self.modOverrides[TriadGame.ModCaptureWeight]:
for mod in self.mods:
sideV, neiV = mod.getCaptureWeights(self, sideV, neiV)
if self.debug:
print(' sideV:%i neiV:%i' % (sideV, neiV))
canCaptureNei = sideV > neiV
if allowMods and self.modOverrides[TriadGame.ModCaptureCondition]:
for mod in self.mods:
overrideCapture, newcanCaptureNei = mod.getCaptureCondition(self, neiV, sideV)
if overrideCapture:
canCaptureNei = newcanCaptureNei
if canCaptureNei:
if self.debug:
print(' captured!')
self.owner[neiPos] = self.
gitextract_9t11ryri/
├── .gitignore
├── FFTriadBuddy.sln
├── LICENSE
├── README.md
├── assets/
│ └── data/
│ ├── cards.xml
│ ├── hashes.xml
│ ├── loc.xml
│ ├── npcs.xml
│ └── tournaments.xml
├── datasource/
│ └── !Start.bat
├── ml/
│ ├── patternMatch/
│ │ ├── nn.py
│ │ ├── run-everything.bat
│ │ ├── train-cactpot.py
│ │ └── train-triad.py
│ └── solver/
│ ├── agents/
│ │ ├── agent.py
│ │ ├── agentDQN.py
│ │ └── agentRandom.py
│ ├── environment.py
│ ├── gameSession.py
│ ├── gamelogic/
│ │ ├── triadCard.py
│ │ ├── triadDeck.py
│ │ ├── triadGame.py
│ │ └── triadMods.py
│ ├── main.py
│ ├── perfTests.py
│ └── utils/
│ ├── codeGenerator.py
│ ├── estimatorTorch.py
│ └── trainingMemory.py
└── sources/
├── App.config
├── FFTriadBuddy.csproj
├── Properties/
│ ├── AssemblyInfo.cs
│ ├── Resources.resx
│ ├── Settings.Designer.cs
│ └── Settings.settings
├── data/
│ ├── ImageHashDB.cs
│ ├── LocalizationDB.cs
│ ├── PlayerSettingsDB.cs
│ ├── TriadCardDB.cs
│ ├── TriadNpcDB.cs
│ └── TriadTournamentDB.cs
├── gamelogic/
│ ├── FavDeckSolver.cs
│ ├── MiniCactpotGame.cs
│ ├── TriadCard.cs
│ ├── TriadDeck.cs
│ ├── TriadDeckOptimizer.cs
│ ├── TriadGameAgent.cs
│ ├── TriadGameModifier.cs
│ ├── TriadGameScreenMemory.cs
│ ├── TriadGameSimulation.cs
│ ├── TriadGameSolver.cs
│ └── tests/
│ ├── TriadGameScreenTests.cs
│ └── TriadGameTests.cs
├── googleapi/
│ ├── GoogleClientMissingIdentifiers.cs
│ ├── GoogleDriveService.cs
│ └── GoogleOAuth2.cs
├── loc/
│ ├── strings.cs
│ ├── strings.de.resx
│ ├── strings.es.resx
│ ├── strings.fr.resx
│ ├── strings.ja.resx
│ ├── strings.ko.resx
│ ├── strings.resx
│ └── strings.zh.resx
├── ui/
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── modelproxy/
│ │ ├── BulkObservableCollection.cs
│ │ ├── CardModelProxy.cs
│ │ ├── IconDB.cs
│ │ ├── ImageHashDataModelProxy.cs
│ │ ├── ModelProxyDB.cs
│ │ ├── NpcModelProxy.cs
│ │ ├── RuleModelProxy.cs
│ │ ├── SettingsModel.cs
│ │ ├── TournamentModelProxy.cs
│ │ └── TriadGameModel.cs
│ ├── view/
│ │ ├── AdjustCardDialog.xaml
│ │ ├── AdjustCardDialog.xaml.cs
│ │ ├── AdjustHashDialog.xaml
│ │ ├── AdjustHashDialog.xaml.cs
│ │ ├── DialogWindow.xaml
│ │ ├── DialogWindow.xaml.cs
│ │ ├── FavDeckEditDialog.xaml
│ │ ├── FavDeckEditDialog.xaml.cs
│ │ ├── FavDeckPreview.xaml
│ │ ├── FavDeckPreview.xaml.cs
│ │ ├── MainWindow.xaml
│ │ ├── MainWindow.xaml.cs
│ │ ├── OverlayWindowInteractive.xaml
│ │ ├── OverlayWindowInteractive.xaml.cs
│ │ ├── OverlayWindowTransparent.xaml
│ │ ├── OverlayWindowTransparent.xaml.cs
│ │ ├── PageCards.xaml
│ │ ├── PageCards.xaml.cs
│ │ ├── PageInfo.xaml
│ │ ├── PageInfo.xaml.cs
│ │ ├── PageNpcs.xaml
│ │ ├── PageNpcs.xaml.cs
│ │ ├── PageScreenshot.xaml
│ │ ├── PageScreenshot.xaml.cs
│ │ ├── PageSetup.xaml
│ │ ├── PageSetup.xaml.cs
│ │ ├── PageSimulate.xaml
│ │ ├── PageSimulate.xaml.cs
│ │ ├── controls/
│ │ │ ├── NumTextBox.xaml
│ │ │ ├── NumTextBox.xaml.cs
│ │ │ ├── OutlinedTextBlock.cs
│ │ │ ├── SearchableComboBox.xaml
│ │ │ └── SearchableComboBox.xaml.cs
│ │ ├── controls-triad/
│ │ │ ├── CardGridView.xaml
│ │ │ ├── CardGridView.xaml.cs
│ │ │ ├── CardView.xaml
│ │ │ ├── CardView.xaml.cs
│ │ │ ├── DeckView.xaml
│ │ │ ├── DeckView.xaml.cs
│ │ │ ├── PlayerDeckPreview.xaml
│ │ │ └── PlayerDeckPreview.xaml.cs
│ │ └── utils/
│ │ ├── CanvasExtensions.cs
│ │ ├── CardDragDropExtension.cs
│ │ ├── Converters.cs
│ │ ├── ListViewExtensions.cs
│ │ ├── OverlayWindowService.cs
│ │ └── ViewUtils.cs
│ └── viewmodel/
│ ├── AdjustCardViewModel.cs
│ ├── AdjustHashViewModel.cs
│ ├── CardCollectionViewModel.cs
│ ├── CardViewModel.cs
│ ├── ContextActionViewModel.cs
│ ├── DeckViewModel.cs
│ ├── FavDeckEditViewModel.cs
│ ├── ImageCardDataViewModel.cs
│ ├── LocalSavesViewModel.cs
│ ├── MainWindowViewModel.cs
│ ├── OverlayWindowViewModel.cs
│ ├── PageCardsViewModel.cs
│ ├── PageInfoViewModel.cs
│ ├── PageNpcsViewModel.cs
│ ├── PageScreenshotViewModel.cs
│ ├── PageSetupViewModel.cs
│ ├── PageSimulateViewModel.cs
│ ├── SetupFavDeckViewModel.cs
│ ├── SimulateRulesViewModel.cs
│ ├── SolvableDeckViewModel.cs
│ ├── ViewModelUtils.cs
│ └── WinChanceViewModel.cs
├── utils/
│ ├── DataCoverter.cs
│ ├── TestManager.cs
│ ├── XInputStub.cs
│ ├── datamine/
│ │ ├── CsvData.cs
│ │ └── GameData.cs
│ └── tlsh/
│ ├── BucketSize.cs
│ ├── ChecksumSize.cs
│ ├── TlshBuilder.cs
│ ├── TlshHash.cs
│ └── TlshUtilities.cs
├── utils-shared/
│ ├── AssetManager.cs
│ ├── GithubUpdater.cs
│ ├── JsonParser.cs
│ ├── LocResourceManager.cs
│ ├── Logger.cs
│ ├── MLDataExporter.cs
│ └── MLUtils.cs
└── vision/
├── ImageUtils.cs
├── MLClassifierCactpot.cs
├── MLClassifierTriadDigit.cs
├── ScannerBase.cs
├── ScannerCactpot.cs
├── ScannerTriad.cs
├── ScreenAnalyzer.cs
└── ScreenReader.cs
SYMBOL INDEX (1577 symbols across 123 files)
FILE: ml/patternMatch/nn.py
class NNTraining (line 9) | class NNTraining():
method __init__ (line 10) | def __init__(self, inputFile, outputFile, labelKey="output"):
method printToLines (line 17) | def printToLines(self, prefix, values, suffix):
method loadData (line 21) | def loadData(self):
method writeCodeFile (line 35) | def writeCodeFile(self, model, codeSuffix):
method run (line 61) | def run(self, numHidden1, numHidden2=0, numEpochs=20, batchSize=512, c...
FILE: ml/solver/agents/agent.py
class Agent (line 1) | class Agent:
method __init__ (line 2) | def __init__(self, game):
method findAction (line 5) | def findAction(self, game, state):
method findTrainingAction (line 8) | def findTrainingAction(self, game, state):
method onTrainingGameStart (line 11) | def onTrainingGameStart(self, game, playerId):
method onTrainingGameEnd (line 14) | def onTrainingGameEnd(self, game, playerId):
method onTrainingStep (line 17) | def onTrainingStep(self, game, playerId, state, action, nextState, rew...
method train (line 20) | def train(self):
method save (line 23) | def save(self, name):
method load (line 26) | def load(self, name):
method getTrainingDetails (line 29) | def getTrainingDetails(self):
method generateModelCode (line 32) | def generateModelCode(self, name):
FILE: ml/solver/agents/agentDQN.py
class AgentDQN (line 10) | class AgentDQN(Agent):
method __init__ (line 11) | def __init__(self, game):
method findAction (line 34) | def findAction(self, game, state):
method findTrainingAction (line 39) | def findTrainingAction(self, game, state):
method onTrainingStep (line 47) | def onTrainingStep(self, game, playerId, state, action, nextState, rew...
method train (line 57) | def train(self):
method save (line 67) | def save(self, name):
method load (line 70) | def load(self, name):
method getTrainingDetails (line 74) | def getTrainingDetails(self):
method generateModelCode (line 82) | def generateModelCode(self, name):
method sanitizeActions (line 85) | def sanitizeActions(self, game, state, actionValues, badValue = -np.inf):
method trainOnBatch (line 91) | def trainOnBatch(self, game):
FILE: ml/solver/agents/agentRandom.py
class AgentRandom (line 4) | class AgentRandom(Agent):
method __init__ (line 5) | def __init__(self, game):
method setSeed (line 8) | def setSeed(self, seedValue):
method findAction (line 11) | def findAction(self, game, state):
method findTrainingAction (line 15) | def findTrainingAction(self, game, state):
FILE: ml/solver/environment.py
class Environment (line 1) | class Environment(object):
method __init__ (line 2) | def __init__(self, game, playerAgents):
method runTrainingGame (line 6) | def runTrainingGame(self):
method runEvalGame (line 27) | def runEvalGame(self):
FILE: ml/solver/gameSession.py
class GameSession (line 7) | class GameSession():
method __init__ (line 8) | def __init__(self, useModifiers = False):
method init (line 13) | def init(self):
method step (line 27) | def step(self, action):
method isFinished (line 36) | def isFinished(self):
method getCurrentPlayer (line 39) | def getCurrentPlayer(self):
method getMaxActions (line 43) | def getMaxActions():
method getAllowedActions (line 46) | def getAllowedActions(self, state):
method getReward (line 57) | def getReward(self, playerId):
method getState (line 66) | def getState(self, playerId):
FILE: ml/solver/gamelogic/triadCard.py
class TriadCard (line 3) | class TriadCard:
method __init__ (line 4) | def __init__(self, name, rarity, cardType, sideUp, sideLeft, sideDown,...
method __str__ (line 12) | def __str__(self):
class TriadCardDB (line 20) | class TriadCardDB:
method load (line 29) | def load():
method find (line 82) | def find(name):
FILE: ml/solver/gamelogic/triadDeck.py
class TriadDeck (line 4) | class TriadDeck():
method __init__ (line 9) | def __init__(self):
method initialize (line 16) | def initialize(self, cards, state):
method hasCard (line 22) | def hasCard(self, idx):
method useCard (line 25) | def useCard(self, idx):
method makeAllVisible (line 33) | def makeAllVisible(self):
method onRestart (line 37) | def onRestart(self):
method getCardsInfo (line 41) | def getCardsInfo(self, forceVisible = False):
method __str__ (line 73) | def __str__(self):
method generateDeckForRarityRange (line 87) | def generateDeckForRarityRange(state, minRarity, maxRarity):
method generateDeckRandom (line 101) | def generateDeckRandom(state):
method generateDeckNpc (line 105) | def generateDeckNpc(minRarity, maxRarity):
method generateDeckPlayer (line 109) | def generateDeckPlayer():
FILE: ml/solver/gamelogic/triadGame.py
class TriadGameState (line 4) | class TriadGameState(Enum):
class TriadGame (line 12) | class TriadGame:
method __init__ (line 26) | def __init__(self):
method getNumCardsPlaced (line 42) | def getNumCardsPlaced(self):
method getNumCardsByOwner (line 45) | def getNumCardsByOwner(self, ownerId):
method getCardSideValue (line 48) | def getCardSideValue(self, card, side):
method getCardOppositeSideValue (line 51) | def getCardOppositeSideValue(self, card, side):
method initModifiers (line 54) | def initModifiers(self):
method restartGame (line 61) | def restartGame(self):
method placeCardFromDeck (line 71) | def placeCardFromDeck(self, pos, idx, ownerId):
method isMoveValid (line 82) | def isMoveValid(self, deck, pos, idx):
method placeCard (line 91) | def placeCard(self, pos, card, ownerId):
method setBoardRaw (line 126) | def setBoardRaw(self, pos, card, ownerId):
method updateCachedValuesForCard (line 132) | def updateCachedValuesForCard(self, pos):
method onTurnStart (line 139) | def onTurnStart(self):
method onAllCardsPlaced (line 146) | def onAllCardsPlaced(self):
method getBoardPos (line 165) | def getBoardPos(x, y):
method getCaptures (line 168) | def getCaptures(self, pos, comboCounter):
method showState (line 219) | def showState(self, debugName):
method staticInit (line 250) | def staticInit():
FILE: ml/solver/gamelogic/triadMods.py
class TriadMod (line 6) | class TriadMod:
method onMatchStart (line 12) | def onMatchStart(self, game):
method onTurnStart (line 14) | def onTurnStart(self, game):
method onCardPlaced (line 16) | def onCardPlaced(self, game, pos):
method onAllCardsPlaced (line 18) | def onAllCardsPlaced(self, game):
method getCaptureNeis (line 20) | def getCaptureNeis(self, game, pos, neis):
method getCaptureWeights (line 22) | def getCaptureWeights(self, game, cardNum, neiNum):
method getCaptureCondition (line 24) | def getCaptureCondition(self, game, cardNum, neiNum):
method generateMods (line 28) | def generateMods(maxMods = 4):
class TriadModReverse (line 47) | class TriadModReverse(TriadMod):
method __init__ (line 48) | def __init__(self):
method getCaptureCondition (line 52) | def getCaptureCondition(self, game, cardNum, neiNum):
class TriadModFallenAce (line 58) | class TriadModFallenAce(TriadMod):
method __init__ (line 59) | def __init__(self):
method getCaptureWeights (line 63) | def getCaptureWeights(self, game, cardNum, neiNum):
class TriadModSame (line 74) | class TriadModSame(TriadMod):
method __init__ (line 75) | def __init__(self):
method getCaptureNeis (line 80) | def getCaptureNeis(self, game, pos, neis):
class TriadModPlus (line 101) | class TriadModPlus(TriadMod):
method __init__ (line 102) | def __init__(self):
method getCaptureNeis (line 107) | def getCaptureNeis(self, game, pos, neis):
class TriadModAscention (line 139) | class TriadModAscention(TriadMod):
method __init__ (line 140) | def __init__(self):
method onCardPlaced (line 145) | def onCardPlaced(self, game, pos):
class TriadModDescention (line 153) | class TriadModDescention(TriadMod):
method __init__ (line 154) | def __init__(self):
method onCardPlaced (line 159) | def onCardPlaced(self, game, pos):
class TriadModSuddenDeath (line 167) | class TriadModSuddenDeath(TriadMod):
method __init__ (line 168) | def __init__(self):
method onAllCardsPlaced (line 172) | def onAllCardsPlaced(self, game):
class TriadModAllOpen (line 193) | class TriadModAllOpen(TriadMod):
method __init__ (line 194) | def __init__(self):
method onMatchStart (line 199) | def onMatchStart(self, game):
class TriadModThreeOpen (line 205) | class TriadModThreeOpen(TriadMod):
method __init__ (line 206) | def __init__(self):
method onMatchStart (line 211) | def onMatchStart(self, game):
class TriadModOrder (line 220) | class TriadModOrder(TriadMod):
method __init__ (line 221) | def __init__(self):
method onTurnStart (line 226) | def onTurnStart(self, game):
class TriadModChaos (line 236) | class TriadModChaos(TriadMod):
method __init__ (line 237) | def __init__(self):
method onTurnStart (line 242) | def onTurnStart(self, game):
class TriadModSwap (line 255) | class TriadModSwap(TriadMod):
method __init__ (line 256) | def __init__(self):
method onMatchStart (line 260) | def onMatchStart(self, game):
FILE: ml/solver/main.py
function trainModel (line 9) | def trainModel():
function showTrainingData (line 56) | def showTrainingData(history):
FILE: ml/solver/perfTests.py
function runTestPlayRandomGames (line 10) | def runTestPlayRandomGames(numGames, reproSeed):
function runTestAgentEval (line 55) | def runTestAgentEval(numGames, agentName):
FILE: ml/solver/utils/codeGenerator.py
class CodeGenerator (line 4) | class CodeGenerator():
method __init__ (line 5) | def __init__(self):
method addLayer (line 8) | def addLayer(self, weights, biases, activation):
method save (line 11) | def save(self, name):
method convertToCSArray (line 38) | def convertToCSArray(self, arr):
FILE: ml/solver/utils/estimatorTorch.py
class EstimatorNN (line 8) | class EstimatorNN(nn.Module):
method __init__ (line 9) | def __init__(self, numInputs, numHiddenArr, numOutputs):
method forward (line 21) | def forward(self, s):
method generateModelCode (line 24) | def generateModelCode(self, name):
class EstimatorModel (line 49) | class EstimatorModel:
method __init__ (line 50) | def __init__(self, numInputs, numHiddenArr, numOutput, learningRate):
method predict (line 56) | def predict(self, input):
method fit (line 61) | def fit(self, inputS, inputA, targetAR):
method save (line 78) | def save(self, name):
method load (line 81) | def load(self, name):
method generateModelCode (line 85) | def generateModelCode(self, name):
FILE: ml/solver/utils/trainingMemory.py
class TrainingMemory (line 4) | class TrainingMemory:
method __init__ (line 5) | def __init__(self, capacity):
method add (line 9) | def add(self, sampleTuple):
method clear (line 16) | def clear(self):
method __len__ (line 20) | def __len__(self):
method sample (line 23) | def sample(self, batchSize):
class TrainingMemoryCircular (line 28) | class TrainingMemoryCircular(TrainingMemory):
method add (line 29) | def add(self, sampleTuple):
class TrainingMemoryReservoir (line 36) | class TrainingMemoryReservoir(TrainingMemory):
method add (line 37) | def add(self, sampleTuple):
FILE: sources/Properties/Settings.Designer.cs
class Settings (line 14) | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
FILE: sources/data/ImageHashDB.cs
type EImageHashType (line 12) | public enum EImageHashType
class ImageHashData (line 20) | public class ImageHashData : IComparable
method CalculateHash (line 37) | public void CalculateHash(byte[] data)
method CalculateHash (line 49) | public void CalculateHash(float[] data)
method GetHexVal (line 56) | private static int GetHexVal(char hex)
method LoadFromString (line 63) | public void LoadFromString(string descTLSH, string descBuffer)
method IsMatching (line 80) | public bool IsMatching(ImageHashData other, int maxDistance, out int m...
method GetHashDistance (line 86) | public int GetHashDistance(ImageHashData other)
method UpdatePreviewImage (line 114) | public void UpdatePreviewImage()
method CompareTo (line 122) | public int CompareTo(object obj)
method IsValid (line 131) | public bool IsValid()
method ToString (line 136) | public override string ToString()
class ImageHashDB (line 142) | public class ImageHashDB
method ImageHashDB (line 150) | public ImageHashDB()
method Get (line 157) | public static ImageHashDB Get()
method Load (line 162) | public bool Load()
method LoadHashEntry (line 199) | public ImageHashData LoadHashEntry(XmlElement xmlElem)
method LoadImageHashes (line 239) | public List<ImageHashData> LoadImageHashes(JsonParser.ObjectValue jsonOb)
method StoreHashes (line 294) | public void StoreHashes(List<ImageHashData> entries, JsonWriter jsonWr...
method ParseRule (line 327) | private TriadGameModifier ParseRule(string ruleName)
method FindExactMatch (line 347) | public ImageHashData FindExactMatch(ImageHashData hashData)
method FindBestMatch (line 352) | public ImageHashData FindBestMatch(ImageHashData hashData, int maxDist...
FILE: sources/data/LocalizationDB.cs
type ELocStringType (line 10) | public enum ELocStringType
class LocString (line 21) | public class LocString
method LocString (line 27) | public LocString()
method LocString (line 33) | public LocString(ELocStringType Type, int Id)
method LocString (line 39) | public LocString(ELocStringType Type, int Id, string DefaultText)
method ToString (line 47) | public override string ToString()
method Get (line 52) | public string Get(string lang)
method Get (line 58) | public string Get(int langIdx)
method GetLocalized (line 78) | public string GetLocalized()
method GetCodeName (line 83) | public string GetCodeName()
class LocalizationDB (line 89) | public class LocalizationDB
method LocalizationDB (line 112) | public LocalizationDB()
method Get (line 143) | public static LocalizationDB Get()
method SetCurrentUserLanguage (line 148) | public static void SetCurrentUserLanguage(string cultureCode)
method FindOrAddLocString (line 198) | public LocString FindOrAddLocString(ELocStringType Type, int Id)
method Load (line 211) | public bool Load()
method Save (line 258) | public void Save()
method FixLocalizedNameCasing (line 314) | private void FixLocalizedNameCasing(LocString entry)
FILE: sources/data/PlayerSettingsDB.cs
class PlayerSettingsDB (line 9) | public class PlayerSettingsDB
method PlayerSettingsDB (line 42) | public PlayerSettingsDB()
method Get (line 70) | public static PlayerSettingsDB Get()
method Load (line 75) | public bool Load()
method LoadFromJson (line 108) | public bool LoadFromJson(string jsonStr)
method OnImport (line 226) | public void OnImport()
method TryGettingIntValue (line 231) | private void TryGettingIntValue(JsonParser.ObjectValue ob, string key,...
method TryGettingFloatValue (line 245) | private void TryGettingFloatValue(JsonParser.ObjectValue ob, string ke...
method MergeWithContent (line 264) | public bool MergeWithContent(string jsonString)
method Save (line 312) | public void Save()
method SaveToString (line 323) | public string SaveToString()
method SaveToJson (line 329) | public string SaveToJson(bool bLimitedMode = false)
method GetBackupFolderPath (line 456) | public string GetBackupFolderPath()
method SaveBackup (line 463) | public void SaveBackup()
method MarkDirty (line 491) | public void MarkDirty()
method UpdatePlayerDeckForNpc (line 496) | public void UpdatePlayerDeckForNpc(TriadNpc npc, TriadDeck deck)
method UpdateFavDeck (line 531) | public void UpdateFavDeck(int slot, TriadDeckNamed deck)
method AddKnownHash (line 569) | public void AddKnownHash(ImageHashData hashData)
method RemoveKnownHash (line 586) | public void RemoveKnownHash(ImageHashData hashData)
FILE: sources/data/TriadCardDB.cs
class TriadCardDB (line 9) | public class TriadCardDB
method TriadCardDB (line 17) | public TriadCardDB()
method Get (line 27) | public static TriadCardDB Get()
method Load (line 32) | public bool Load()
method Save (line 128) | public void Save()
method Find (line 167) | public TriadCard Find(string Name)
method Find (line 181) | public TriadCard Find(int numUp, int numLeft, int numDown, int numRight)
method ParseCardSideNum (line 198) | private int ParseCardSideNum(string desc)
FILE: sources/data/TriadNpcDB.cs
class TriadNpc (line 8) | public class TriadNpc
method TriadNpc (line 19) | public TriadNpc(int id, List<TriadGameModifier> rules, List<TriadCard>...
method TriadNpc (line 29) | public TriadNpc(int id, List<TriadGameModifier> rules, List<TriadCard>...
method ToString (line 39) | public override string ToString()
method GetLocationDesc (line 44) | public string GetLocationDesc()
class TriadNpcDB (line 50) | public class TriadNpcDB
method TriadNpcDB (line 56) | public TriadNpcDB()
method Get (line 62) | public static TriadNpcDB Get()
method Load (line 67) | public bool Load()
method Save (line 152) | public void Save()
method Find (line 214) | public TriadNpc Find(string Name)
method FindByReward (line 227) | public List<TriadNpc> FindByReward(TriadCard card)
method FindByDeckId (line 241) | public TriadNpc FindByDeckId(string deckId)
FILE: sources/data/TriadTournamentDB.cs
class TriadTournament (line 8) | public class TriadTournament
method TriadTournament (line 14) | public TriadTournament(int id, List<TriadGameModifier> rules)
method ToString (line 21) | public override string ToString()
class TriadTournamentDB (line 27) | public class TriadTournamentDB
method TriadTournamentDB (line 33) | public TriadTournamentDB()
method Get (line 39) | public static TriadTournamentDB Get()
method Load (line 44) | public bool Load()
method Save (line 95) | public void Save()
FILE: sources/gamelogic/FavDeckSolver.cs
class FavDeckSolver (line 6) | public class FavDeckSolver
method FavDeckSolver (line 20) | public FavDeckSolver()
method SetDeck (line 25) | public void SetDeck(TriadDeck deck)
method Update (line 34) | public void Update(TriadGameSimulation currentGame, TriadNpc npc)
class CalcContext (line 67) | private class CalcContext
method CalcWinChance (line 74) | private void CalcWinChance()
FILE: sources/gamelogic/MiniCactpotGame.cs
class CactpotGame (line 8) | public class CactpotGame
method Permutate (line 34) | private static IEnumerable<List<int>> Permutate(List<int> seq, int count)
method CalculateLinePayouts (line 56) | private static void CalculateLinePayouts(int[] board, List<int> remain...
method GetBestScore (line 115) | private static float GetBestScore(int[] board, List<int> remainingNumb...
method FindNextCircle (line 171) | public static int FindNextCircle(int[] board, bool bDebugMode = false)
method FindBestLine (line 217) | public static void FindBestLine(int[] board, out int fromIdx, out int ...
method BuildCachedData (line 251) | public static void BuildCachedData()
FILE: sources/gamelogic/TriadCard.cs
type ETriadCardRarity (line 5) | public enum ETriadCardRarity
type ETriadCardType (line 14) | public enum ETriadCardType
type ETriadCardOwner (line 23) | public enum ETriadCardOwner
type ETriadGameSide (line 30) | public enum ETriadGameSide
class TriadCard (line 38) | public class TriadCard : IEquatable<TriadCard>
method TriadCard (line 53) | public TriadCard()
method TriadCard (line 63) | public TriadCard(int id, ETriadCardRarity rarity, ETriadCardType type,...
method Equals (line 82) | public override bool Equals(object obj)
method Equals (line 87) | public bool Equals(TriadCard other)
method GetHashCode (line 92) | public override int GetHashCode()
method IsValid (line 97) | public bool IsValid()
method ToShortCodeString (line 106) | public string ToShortCodeString()
method ToShortLocalizedString (line 111) | public string ToShortLocalizedString()
method ToLocalizedString (line 116) | public string ToLocalizedString()
method ToString (line 125) | public override string ToString()
class TriadCardInstance (line 135) | public class TriadCardInstance
method TriadCardInstance (line 141) | public TriadCardInstance(TriadCard card, ETriadCardOwner owner)
method TriadCardInstance (line 148) | public TriadCardInstance(TriadCardInstance copyFrom)
method ToString (line 155) | public override string ToString()
method GetRawNumber (line 163) | public int GetRawNumber(ETriadGameSide side)
method GetNumber (line 168) | public int GetNumber(ETriadGameSide side)
method GetOppositeNumber (line 173) | public int GetOppositeNumber(ETriadGameSide side)
FILE: sources/gamelogic/TriadDeck.cs
type ETriadDeckState (line 7) | public enum ETriadDeckState
class TriadDeck (line 16) | public class TriadDeck
method TriadDeck (line 22) | public TriadDeck()
method TriadDeck (line 28) | public TriadDeck(List<TriadCard> knownCards, List<TriadCard> unknownCa...
method TriadDeck (line 38) | public TriadDeck(IEnumerable<TriadCard> knownCards)
method TriadDeck (line 47) | public TriadDeck(IEnumerable<int> knownCardIds, IEnumerable<int> unkno...
method TriadDeck (line 74) | public TriadDeck(IEnumerable<int> knownCardIds)
method GetDeckState (line 92) | public ETriadDeckState GetDeckState()
method GetCard (line 132) | public TriadCard GetCard(int Idx)
method GetCardIndex (line 146) | public int GetCardIndex(TriadCard card)
method SetCard (line 163) | public bool SetCard(int Idx, TriadCard card)
method GetPower (line 180) | public int GetPower()
method UpdateDeckId (line 199) | public void UpdateDeckId()
method Equals (line 226) | public override bool Equals(object obj)
method Equals (line 231) | public bool Equals(TriadDeck otherDeck)
method GetHashCode (line 263) | public override int GetHashCode()
method ToString (line 271) | public override string ToString()
class TriadDeckNamed (line 300) | public class TriadDeckNamed : TriadDeck
method TriadDeckNamed (line 304) | public TriadDeckNamed() { }
method TriadDeckNamed (line 305) | public TriadDeckNamed(TriadDeck copyFrom) : base(copyFrom.knownCards)
class TriadDeckInstance (line 310) | public abstract class TriadDeckInstance
method OnCardPlacedFast (line 312) | public abstract void OnCardPlacedFast(int Idx);
method GetFirstAvailableCardFast (line 313) | public abstract int GetFirstAvailableCardFast();
method GetCard (line 314) | public abstract TriadCard GetCard(int Idx);
method GetCardIndex (line 315) | public abstract int GetCardIndex(TriadCard card);
method CreateCopy (line 316) | public abstract TriadDeckInstance CreateCopy();
method IsPlaced (line 328) | public bool IsPlaced(int cardIdx)
method GetFirstAvailableCard (line 333) | public TriadCard GetFirstAvailableCard()
method GetAvailableCards (line 339) | public List<TriadCard> GetAvailableCards()
class TriadDeckInstanceManual (line 356) | public class TriadDeckInstanceManual : TriadDeckInstance
method TriadDeckInstanceManual (line 358) | public TriadDeckInstanceManual(TriadDeck deck)
method TriadDeckInstanceManual (line 366) | public TriadDeckInstanceManual(TriadDeckInstanceManual copyFrom)
method CreateCopy (line 374) | public override TriadDeckInstance CreateCopy()
method OnCardPlacedFast (line 380) | public override void OnCardPlacedFast(int cardIdx)
method GetFirstAvailableCardFast (line 398) | public override int GetFirstAvailableCardFast()
method GetCard (line 412) | public override TriadCard GetCard(int Idx)
method GetCardIndex (line 417) | public override int GetCardIndex(TriadCard card)
method ToString (line 428) | public override string ToString()
class TriadDeckInstanceScreen (line 455) | public class TriadDeckInstanceScreen : TriadDeckInstance
method TriadDeckInstanceScreen (line 462) | public TriadDeckInstanceScreen()
method TriadDeckInstanceScreen (line 473) | public TriadDeckInstanceScreen(TriadDeckInstanceScreen copyFrom)
method CreateCopy (line 490) | public override TriadDeckInstance CreateCopy()
method GetFirstAvailableCardFast (line 496) | public override int GetFirstAvailableCardFast()
method UpdateAvailableCards (line 510) | public void UpdateAvailableCards(TriadCard[] screenCards)
method SetSwappedCard (line 535) | public void SetSwappedCard(TriadCard swappedCard, int swappedCardIdx)
method OnCardPlacedFast (line 542) | public override void OnCardPlacedFast(int cardIdx)
method GetCard (line 563) | public override TriadCard GetCard(int Idx)
method GetCardIndex (line 572) | public override int GetCardIndex(TriadCard card)
method ToString (line 592) | public override string ToString()
method LogAvailableCards (line 644) | public void LogAvailableCards(string deckName)
FILE: sources/gamelogic/TriadDeckOptimizer.cs
class TriadDeckOptimizer (line 11) | public class TriadDeckOptimizer
type CardPool (line 36) | private struct CardPool
method TriadDeckOptimizer (line 53) | public TriadDeckOptimizer()
method Initialize (line 99) | public void Initialize(TriadNpc npc, TriadGameModifier[] regionMods, L...
method Process (line 124) | public Task Process(TriadNpc npc, TriadGameModifier[] regionMods, List...
method AbortProcess (line 134) | public void AbortProcess()
method IsAborted (line 139) | public bool IsAborted()
method GuessDeck (line 144) | public void GuessDeck(List<TriadCard> lockedCards)
method UpdatePossibleDeckCount (line 184) | private void UpdatePossibleDeckCount()
method GetRandomSeed (line 221) | private int GetRandomSeed(int Idx0, int Idx1, int Idx2, int Idx3, int ...
method GetDeckScore (line 233) | private int GetDeckScore(TriadGameSolver solver, TriadDeck testDeck, i...
type CardScoreData (line 253) | private struct CardScoreData : IComparable<CardScoreData>
method CompareTo (line 258) | public int CompareTo(CardScoreData other)
method ToString (line 263) | public override string ToString()
method ApplyAscentionFilter (line 269) | private void ApplyAscentionFilter(List<CardScoreData> commonScoredList...
method FindCardPool (line 368) | private bool FindCardPool(List<TriadCard> allCards, List<TriadGameModi...
class SlotIterator (line 593) | private class SlotIterator
type ItemInfo (line 599) | public struct ItemInfo
method ItemInfo (line 608) | public ItemInfo(int idx0, int idx1, int idx2, int idx3, int idx4, ...
method IsValid (line 618) | public bool IsValid()
method SlotIterator (line 627) | public SlotIterator(CardPool cardPool, List<TriadCard> lockedCards)
method FindLoopStart (line 640) | private int FindLoopStart(int SlotIdx, int IdxS0, int IdxS1, int Idx...
method GetDecks (line 652) | public IEnumerable<ItemInfo> GetDecks(long skipIdx)
method FindDecksScored (line 685) | private void FindDecksScored(TriadGameModifier[] regionMods, List<Tria...
method GetProgress (line 764) | public int GetProgress()
method GetNumTestedDesc (line 776) | public string GetNumTestedDesc()
method GetNumPossibleDecksDesc (line 781) | public string GetNumPossibleDecksDesc()
method GetSecondsRemaining (line 786) | public int GetSecondsRemaining(int ElapsedMs)
method SetPaused (line 806) | public void SetPaused(bool wantsPaused)
method GetCardScore (line 825) | public static float GetCardScore(TriadCard card)
FILE: sources/gamelogic/TriadGameAgent.cs
class TriadGameAgent (line 9) | public abstract class TriadGameAgent
type DebugFlags (line 11) | [Flags]
method Initialize (line 24) | public virtual void Initialize(TriadGameSolver solver, int sessionSeed...
method IsInitialized (line 25) | public virtual bool IsInitialized() { return true; }
method GetProgress (line 26) | public virtual float GetProgress() { return 0.0f; }
method OnSimulationStart (line 27) | public virtual void OnSimulationStart() { }
method FindNextMove (line 29) | public abstract bool FindNextMove(TriadGameSolver solver, TriadGameSim...
class TriadGameAgentRandom (line 35) | public class TriadGameAgentRandom : TriadGameAgent
method TriadGameAgentRandom (line 40) | public TriadGameAgentRandom() { }
method TriadGameAgentRandom (line 41) | public TriadGameAgentRandom(TriadGameSolver solver, int sessionSeed)
method Initialize (line 46) | public override void Initialize(TriadGameSolver solver, int sessionSeed)
method IsInitialized (line 52) | public override bool IsInitialized()
method FindNextMove (line 57) | public override bool FindNextMove(TriadGameSolver solver, TriadGameSim...
method PickBitmaskIndex (line 124) | protected int PickBitmaskIndex(int mask, int numSet)
method PickRandomBitFromMask (line 130) | public static int PickRandomBitFromMask(int mask, int randStep)
class TriadGameAgentGraphExplorer (line 160) | public abstract class TriadGameAgentGraphExplorer : TriadGameAgent
method GetProgress (line 166) | public override float GetProgress()
method Initialize (line 171) | public override void Initialize(TriadGameSolver solver, int sessionSeed)
method FindNextMove (line 176) | public override bool FindNextMove(TriadGameSolver solver, TriadGameSim...
method IsFinished (line 194) | protected bool IsFinished(TriadGameSimulationState gameState, out Solv...
method SearchActionSpace (line 218) | protected virtual SolverResult SearchActionSpace(TriadGameSolver solve...
class TriadGameAgentDerpyCarlo (line 355) | public class TriadGameAgentDerpyCarlo : TriadGameAgentGraphExplorer
method Initialize (line 360) | public override void Initialize(TriadGameSolver solver, int sessionSeed)
method IsInitialized (line 373) | public override bool IsInitialized()
method SearchActionSpace (line 378) | protected override SolverResult SearchActionSpace(TriadGameSolver solv...
method CanRunRandomExploration (line 406) | protected virtual bool CanRunRandomExploration(TriadGameSolver solver,...
method FindWinningProbability (line 411) | protected virtual SolverResult FindWinningProbability(TriadGameSolver ...
class TriadGameAgentCarloTheExplorer (line 442) | public class TriadGameAgentCarloTheExplorer : TriadGameAgentDerpyCarlo
method Initialize (line 452) | public override void Initialize(TriadGameSolver solver, int sessionSeed)
method CanRunRandomExploration (line 496) | protected override bool CanRunRandomExploration(TriadGameSolver solver...
class TriadGameAgentCarloScored (line 507) | public class TriadGameAgentCarloScored : TriadGameAgentCarloTheExplorer
method Initialize (line 516) | public override void Initialize(TriadGameSolver solver, int sessionSeed)
method FindWinningProbability (line 522) | protected override SolverResult FindWinningProbability(TriadGameSolver...
method CalculateStateScore (line 532) | public float CalculateStateScore(TriadGameSolver solver, TriadGameSimu...
method CalculateBoardScore (line 547) | private (float, float) CalculateBoardScore(TriadGameSolver solver, Tri...
method CalculateBlueDeckScore (line 604) | private float CalculateBlueDeckScore(TriadGameSolver solver, TriadGame...
method CanBeCapturedWith (line 629) | private bool CanBeCapturedWith(TriadGameSimulation simulation, int def...
FILE: sources/gamelogic/TriadGameModifier.cs
type ETriadGameSpecialMod (line 8) | [Flags]
class TriadGameModifier (line 21) | public class TriadGameModifier : IComparable
type EFeature (line 23) | [Flags]
method GetCodeName (line 44) | public virtual string GetCodeName() { return RuleName; }
method GetLocalizedName (line 45) | public virtual string GetLocalizedName() { return LocRuleName.GetLocal...
method GetLocalizationId (line 46) | public int GetLocalizationId() { return LocRuleName.Id; }
method AllowsCombo (line 47) | public virtual bool AllowsCombo() { return bAllowCombo; }
method IsDeckOrderImportant (line 48) | public virtual bool IsDeckOrderImportant() { return bIsDeckOrderImport...
method GetSpecialRules (line 49) | public virtual ETriadGameSpecialMod GetSpecialRules() { return Special...
method GetFeatures (line 50) | public virtual EFeature GetFeatures() { return Features; }
method HasLastRedReminder (line 51) | public virtual bool HasLastRedReminder() { return bHasLastRedReminder; }
method ToString (line 52) | public override string ToString() { return GetCodeName(); }
method OnCardPlaced (line 54) | public virtual void OnCardPlaced(TriadGameSimulationState gameData, in...
method OnCheckCaptureNeis (line 55) | public virtual void OnCheckCaptureNeis(TriadGameSimulationState gameDa...
method OnCheckCaptureCardWeights (line 56) | public virtual void OnCheckCaptureCardWeights(TriadGameSimulationState...
method OnCheckCaptureCardMath (line 57) | public virtual void OnCheckCaptureCardMath(TriadGameSimulationState ga...
method OnPostCaptures (line 58) | public virtual void OnPostCaptures(TriadGameSimulationState gameData, ...
method OnScreenUpdate (line 59) | public virtual void OnScreenUpdate(TriadGameSimulationState gameData) { }
method OnAllCardsPlaced (line 60) | public virtual void OnAllCardsPlaced(TriadGameSimulationState gameData...
method OnFilterNextCards (line 61) | public virtual void OnFilterNextCards(TriadGameSimulationState gameDat...
method OnMatchInit (line 62) | public virtual void OnMatchInit() { }
method OnScoreCard (line 63) | public virtual void OnScoreCard(TriadCard card, ref float score) { }
method CompareTo (line 65) | public int CompareTo(TriadGameModifier otherMod)
method CompareTo (line 76) | public int CompareTo(object obj)
method Clone (line 81) | public virtual TriadGameModifier Clone()
method Equals (line 86) | public override bool Equals(object obj)
method GetHashCode (line 92) | public override int GetHashCode()
class TriadGameModifierNone (line 98) | public class TriadGameModifierNone : TriadGameModifier
method TriadGameModifierNone (line 100) | public TriadGameModifierNone()
class TriadGameModifierRoulette (line 108) | public class TriadGameModifierRoulette : TriadGameModifier
method TriadGameModifierRoulette (line 112) | public TriadGameModifierRoulette()
method GetCodeName (line 119) | public override string GetCodeName() { return base.GetCodeName() + (Ru...
method GetLocalizedName (line 120) | public override string GetLocalizedName() { return base.GetLocalizedNa...
method AllowsCombo (line 121) | public override bool AllowsCombo() { return (RuleInst != null) ? RuleI...
method IsDeckOrderImportant (line 122) | public override bool IsDeckOrderImportant() { return (RuleInst != null...
method GetSpecialRules (line 123) | public override ETriadGameSpecialMod GetSpecialRules() { return base.G...
method GetFeatures (line 124) | public override EFeature GetFeatures() { return (RuleInst != null) ? R...
method HasLastRedReminder (line 125) | public override bool HasLastRedReminder() { return (RuleInst != null) ...
method OnCardPlaced (line 127) | public override void OnCardPlaced(TriadGameSimulationState gameData, i...
method OnCheckCaptureNeis (line 132) | public override void OnCheckCaptureNeis(TriadGameSimulationState gameD...
method OnCheckCaptureCardWeights (line 137) | public override void OnCheckCaptureCardWeights(TriadGameSimulationStat...
method OnCheckCaptureCardMath (line 142) | public override void OnCheckCaptureCardMath(TriadGameSimulationState g...
method OnPostCaptures (line 147) | public override void OnPostCaptures(TriadGameSimulationState gameData,...
method OnAllCardsPlaced (line 152) | public override void OnAllCardsPlaced(TriadGameSimulationState gameData)
method OnFilterNextCards (line 157) | public override void OnFilterNextCards(TriadGameSimulationState gameDa...
method OnMatchInit (line 162) | public override void OnMatchInit()
method SetRuleInstance (line 167) | public void SetRuleInstance(TriadGameModifier RuleInstance)
class TriadGameModifierAllOpen (line 173) | public class TriadGameModifierAllOpen : TriadGameModifier
method TriadGameModifierAllOpen (line 175) | public TriadGameModifierAllOpen()
method StaticMakeKnown (line 183) | public static void StaticMakeKnown(TriadGameSimulationState gameData, ...
class TriadGameModifierThreeOpen (line 229) | public class TriadGameModifierThreeOpen : TriadGameModifier
method TriadGameModifierThreeOpen (line 231) | public TriadGameModifierThreeOpen()
class TriadGameModifierSuddenDeath (line 240) | public class TriadGameModifierSuddenDeath : TriadGameModifier
method TriadGameModifierSuddenDeath (line 242) | public TriadGameModifierSuddenDeath()
method OnAllCardsPlaced (line 250) | public override void OnAllCardsPlaced(TriadGameSimulationState gameData)
class TriadGameModifierReverse (line 348) | public class TriadGameModifierReverse : TriadGameModifier
method TriadGameModifierReverse (line 350) | public TriadGameModifierReverse()
method OnCheckCaptureCardMath (line 357) | public override void OnCheckCaptureCardMath(TriadGameSimulationState g...
method OnScoreCard (line 362) | public override void OnScoreCard(TriadCard card, ref float score)
class TriadGameModifierFallenAce (line 370) | public class TriadGameModifierFallenAce : TriadGameModifier
method TriadGameModifierFallenAce (line 372) | public TriadGameModifierFallenAce()
method OnCheckCaptureCardWeights (line 379) | public override void OnCheckCaptureCardWeights(TriadGameSimulationStat...
class TriadGameModifierSame (line 404) | public class TriadGameModifierSame : TriadGameModifier
method TriadGameModifierSame (line 406) | public TriadGameModifierSame()
method OnCheckCaptureNeis (line 414) | public override void OnCheckCaptureNeis(TriadGameSimulationState gameD...
class TriadGameModifierPlus (line 461) | public class TriadGameModifierPlus : TriadGameModifier
method TriadGameModifierPlus (line 463) | public TriadGameModifierPlus()
method OnCheckCaptureNeis (line 471) | public override void OnCheckCaptureNeis(TriadGameSimulationState gameD...
class TriadGameModifierAscention (line 532) | public class TriadGameModifierAscention : TriadGameModifier
method TriadGameModifierAscention (line 534) | public TriadGameModifierAscention()
method OnCardPlaced (line 541) | public override void OnCardPlaced(TriadGameSimulationState gameData, i...
method OnPostCaptures (line 559) | public override void OnPostCaptures(TriadGameSimulationState gameData,...
method OnScreenUpdate (line 582) | public override void OnScreenUpdate(TriadGameSimulationState gameData)
method OnScoreCard (line 608) | public override void OnScoreCard(TriadCard card, ref float score)
class TriadGameModifierDescention (line 621) | public class TriadGameModifierDescention : TriadGameModifier
method TriadGameModifierDescention (line 623) | public TriadGameModifierDescention()
method OnCardPlaced (line 630) | public override void OnCardPlaced(TriadGameSimulationState gameData, i...
method OnPostCaptures (line 648) | public override void OnPostCaptures(TriadGameSimulationState gameData,...
method OnScreenUpdate (line 671) | public override void OnScreenUpdate(TriadGameSimulationState gameData)
method OnScoreCard (line 697) | public override void OnScoreCard(TriadCard card, ref float score)
class TriadGameModifierOrder (line 710) | public class TriadGameModifierOrder : TriadGameModifier
method TriadGameModifierOrder (line 712) | public TriadGameModifierOrder()
method OnFilterNextCards (line 719) | public override void OnFilterNextCards(TriadGameSimulationState gameDa...
class TriadGameModifierChaos (line 735) | public class TriadGameModifierChaos : TriadGameModifier
method TriadGameModifierChaos (line 737) | public TriadGameModifierChaos()
class TriadGameModifierSwap (line 747) | public class TriadGameModifierSwap : TriadGameModifier
method TriadGameModifierSwap (line 749) | public TriadGameModifierSwap()
method StaticSwapCards (line 757) | public static void StaticSwapCards(TriadGameSimulationState gameData, ...
class TriadGameModifierRandom (line 789) | public class TriadGameModifierRandom : TriadGameModifier
method TriadGameModifierRandom (line 791) | public TriadGameModifierRandom()
method StaticRandomized (line 799) | public static void StaticRandomized(TriadGameSimulationState gameData)
class TriadGameModifierDraft (line 809) | public class TriadGameModifierDraft : TriadGameModifier
method TriadGameModifierDraft (line 811) | public TriadGameModifierDraft()
class TriadGameModifierDB (line 820) | public class TriadGameModifierDB
method Get (line 825) | public static TriadGameModifierDB Get() { return instance; }
method TriadGameModifierDB (line 827) | public TriadGameModifierDB()
FILE: sources/gamelogic/TriadGameScreenMemory.cs
class TriadGameScreenMemory (line 8) | public class TriadGameScreenMemory
type EUpdateFlags (line 10) | [Flags]
method TriadGameScreenMemory (line 35) | public TriadGameScreenMemory()
method OnNewScan (line 48) | public EUpdateFlags OnNewScan(ScannerTriad.GameState screenGame, Triad...
method IsDeckMatching (line 208) | private bool IsDeckMatching(TriadDeckInstanceScreen deckInstance, Tria...
method UpdateAvailableRedCards (line 223) | private void UpdateAvailableRedCards(TriadDeckInstanceScreen redDeck,
method UpdatePlayerDeck (line 430) | public void UpdatePlayerDeck(TriadDeck playerDeck)
method FindSwappedCard (line 435) | private bool FindSwappedCard(TriadCard[] screenCards, TriadCard[] expe...
method FindSwappedCardVisible (line 471) | private bool FindSwappedCardVisible(TriadCard[] screenCards, TriadCard...
method FindCommonCards (line 543) | private TriadCard[] FindCommonCards(List<TriadCard[]> deckHistory)
method DetectSwapOnGameStart (line 590) | private EUpdateFlags DetectSwapOnGameStart()
method IsSuddenDeathRestart (line 660) | private bool IsSuddenDeathRestart(TriadDeckInstanceScreen deck)
FILE: sources/gamelogic/TriadGameSimulation.cs
type ETriadGameState (line 7) | public enum ETriadGameState
class TriadGameSimulationState (line 16) | public class TriadGameSimulationState
method TriadGameSimulationState (line 32) | public TriadGameSimulationState()
method TriadGameSimulationState (line 49) | public TriadGameSimulationState(TriadGameSimulationState copyFrom)
class TriadGameSimulation (line 73) | public class TriadGameSimulation
method StartGame (line 81) | public TriadGameSimulationState StartGame(TriadDeck deckBlue, TriadDec...
method Initialize (line 96) | public void Initialize(IEnumerable<TriadGameModifier> modsA, IEnumerab...
method UpdateSpecialRules (line 121) | public void UpdateSpecialRules()
method HasSpecialRule (line 132) | public bool HasSpecialRule(ETriadGameSpecialMod specialRule)
method PlaceCard (line 137) | public bool PlaceCard(TriadGameSimulationState gameState, int cardIdx,...
method PlaceCard (line 210) | public bool PlaceCard(TriadGameSimulationState gameState, TriadCard ca...
method GetBoardPos (line 218) | public static int GetBoardPos(int x, int y)
method GetBoardXY (line 223) | public static void GetBoardXY(int pos, out int x, out int y)
method GetNeighbors (line 229) | public static int[] GetNeighbors(TriadGameSimulationState gameState, i...
method CheckCaptures (line 244) | private void CheckCaptures(TriadGameSimulationState gameState, int boa...
method OnAllCardsPlaced (line 314) | private void OnAllCardsPlaced(TriadGameSimulationState gameState)
method StaticInitialize (line 345) | public static void StaticInitialize()
FILE: sources/gamelogic/TriadGameSolver.cs
type SolverResult (line 5) | public struct SolverResult
method SolverResult (line 18) | public SolverResult(float numWins, float numDraws, long numGames)
method IsBetterThan (line 44) | public bool IsBetterThan(SolverResult other)
method ToString (line 49) | public override string ToString()
class TriadGameSolver (line 55) | public class TriadGameSolver
method TriadGameSolver (line 61) | public TriadGameSolver()
method InitializeSimulation (line 66) | public void InitializeSimulation(IEnumerable<TriadGameModifier> modsA,...
method InitializeSimulation (line 67) | public void InitializeSimulation(IEnumerable<TriadGameModifier> mods) ...
method StartSimulation (line 69) | public TriadGameSimulationState StartSimulation(TriadDeck deckBlue, Tr...
method HasSimulationRule (line 75) | public bool HasSimulationRule(ETriadGameSpecialMod specialRule) => sim...
method GetAgentProgress (line 77) | public float GetAgentProgress() => agent.GetProgress();
method FindNextMove (line 79) | public bool FindNextMove(TriadGameSimulationState gameState, out int c...
method RunSimulation (line 81) | public void RunSimulation(TriadGameSimulationState gameState, TriadGam...
method FindAvailableActions (line 109) | public void FindAvailableActions(TriadGameSimulationState gameState, o...
method FindAvailableActions (line 136) | public void FindAvailableActions(TriadGameSimulationState gameState, o...
FILE: sources/gamelogic/tests/TriadGameScreenTests.cs
class TriadGameScreenTests (line 7) | public class TriadGameScreenTests
class VerifyMove (line 11) | private class VerifyMove
method Load (line 19) | public void Load(JsonParser.ObjectValue configOb)
method VerifyState (line 57) | public bool VerifyState(TriadGameSimulationState gameState, bool deb...
method CopyGameStateToScreen (line 90) | private static void CopyGameStateToScreen(TriadGameSimulationState tes...
method RunTest (line 109) | public static void RunTest(string configPath, bool debugMode)
FILE: sources/gamelogic/tests/TriadGameTests.cs
class TriadGameTests (line 9) | public class TriadGameTests
class VerifyMove (line 13) | private class VerifyMove
method Load (line 20) | public void Load(JsonParser.ObjectValue configOb)
method VerifyState (line 57) | public bool VerifyState(TriadGameSimulationState gameState, bool deb...
method RunTest (line 95) | public static void RunTest(string configPath, bool debugMode)
method RunSolverStressTest (line 201) | public static void RunSolverStressTest()
method BuildDeckPermutations (line 231) | private static int[][] BuildDeckPermutations()
method PickRandomPermutation (line 262) | private static int[] PickRandomPermutation(Random rand)
class SolverAccTestInfo (line 272) | class SolverAccTestInfo
method PlayTestGame (line 282) | private static void PlayTestGame(SolverAccTestInfo testInfo, TriadGame...
method RunSolverAccuracyTests (line 327) | public static void RunSolverAccuracyTests()
method PickRandomNpc (line 435) | private static TriadNpc PickRandomNpc(Random rand)
method PickRandomCard (line 448) | private static TriadCard PickRandomCard(Random rand, int rarity)
method PickRandomDeck (line 472) | private static TriadDeck PickRandomDeck(Random rand)
method GenerateAccuracyTrainingData (line 514) | public static void GenerateAccuracyTrainingData()
FILE: sources/googleapi/GoogleClientMissingIdentifiers.cs
class GoogleClientIdentifiers (line 7) | public class GoogleClientIdentifiers
FILE: sources/googleapi/GoogleDriveService.cs
class GoogleDriveService (line 15) | public class GoogleDriveService
type EState (line 20) | public enum EState
class Reply (line 36) | private class Reply
method GoogleDriveService (line 43) | public GoogleDriveService(GoogleOAuth2.ClientIdentifier clientIdentifi...
method GetAuthToken (line 52) | public GoogleOAuth2.Token GetAuthToken()
method GetState (line 57) | public EState GetState()
method GetLastApiResponse (line 62) | public string GetLastApiResponse()
method GetFileCount (line 67) | public int GetFileCount()
method InitFileList (line 72) | public async Task InitFileList()
method UploadTextFile (line 109) | public async Task<bool> UploadTextFile(string fileName, string fileCon...
method DownloadTextFile (line 144) | public async Task<string> DownloadTextFile(string fileName)
method UpdateCurrentState (line 166) | private void UpdateCurrentState(bool bHasValidApiResponse)
method HandleRequest (line 174) | private async Task<Reply> HandleRequest(string method, string requestU...
method SetRequestContent (line 238) | private void SetRequestContent(HttpWebRequest request, string[] parts)
FILE: sources/googleapi/GoogleOAuth2.cs
class GoogleOAuth2 (line 21) | public class GoogleOAuth2
class Token (line 23) | public class Token
method IsValidForAuth (line 29) | public bool IsValidForAuth()
method IsValidForRefresh (line 34) | public bool IsValidForRefresh()
method ToString (line 39) | public override string ToString()
class ClientIdentifier (line 45) | public class ClientIdentifier
method ToString (line 47) | public override string ToString()
method GetID (line 52) | public virtual string GetID() { return ""; }
method GetSecret (line 53) | public virtual string GetSecret() { return ""; }
method KillPendingAuthorization (line 62) | public static void KillPendingAuthorization()
method GetAuthorizationToken (line 71) | public static async Task<Token> GetAuthorizationToken(ClientIdentifier...
method RequestToken (line 97) | private static async Task<Token> RequestToken(ClientIdentifier clientI...
method RefreshToken (line 193) | private static async Task<Token> RefreshToken(ClientIdentifier clientI...
method CreateToken (line 223) | private static Token CreateToken(string jsonStr)
method FindListenPort (line 236) | private static int FindListenPort()
FILE: sources/loc/strings.cs
class strings (line 3) | public class strings
FILE: sources/ui/App.xaml.cs
class App (line 14) | public partial class App : Application
method Application_Startup (line 18) | private void Application_Startup(object sender, StartupEventArgs e)
method Application_Exit (line 99) | private void Application_Exit(object sender, ExitEventArgs e)
method LoadAssets (line 110) | private bool LoadAssets()
FILE: sources/ui/modelproxy/BulkObservableCollection.cs
class BulkObservableCollection (line 7) | public class BulkObservableCollection<T> : ObservableCollection<T>
method OnCollectionChanged (line 15) | protected override void OnCollectionChanged(NotifyCollectionChangedEve...
method SuspendNotifies (line 27) | public void SuspendNotifies()
method ResumeNotifies (line 34) | public void ResumeNotifies()
method AddRange (line 43) | public void AddRange(IEnumerable<T> newItems)
FILE: sources/ui/modelproxy/CardModelProxy.cs
class CardModelProxy (line 6) | public class CardModelProxy : BaseViewModel, IComparable, IImageHashMatch
method CompareTo (line 37) | public int CompareTo(object obj)
method CardModelProxy (line 43) | public CardModelProxy(TriadCard triadCard)
method GetMatchOwner (line 54) | public object GetMatchOwner()
FILE: sources/ui/modelproxy/IconDB.cs
class IconDB (line 8) | public class IconDB
method Get (line 17) | public static IconDB Get() { return instance; }
method Load (line 19) | public void Load()
method LoadImageFromAsset (line 27) | private BitmapImage LoadImageFromAsset(string path)
method LoadCardImages (line 51) | private void LoadCardImages()
method LoadCardTypes (line 84) | private void LoadCardTypes()
method LoadCardRarities (line 94) | private void LoadCardRarities()
method LoadFlags (line 104) | private void LoadFlags()
FILE: sources/ui/modelproxy/ImageHashDataModelProxy.cs
type IImageHashMatch (line 9) | public interface IImageHashMatch
method GetMatchOwner (line 12) | object GetMatchOwner();
class ImageHashDataModelProxy (line 15) | public class ImageHashDataModelProxy : LocalizedViewModel
class NumberVM (line 17) | public class NumberVM : IComparable, IImageHashMatch
method CompareTo (line 22) | public int CompareTo(object obj)
method GetMatchOwner (line 27) | public object GetMatchOwner()
method ImageHashDataModelProxy (line 58) | public ImageHashDataModelProxy(ImageHashData hashData)
method RefreshLocalization (line 64) | public override void RefreshLocalization()
method UpdateCachedText (line 72) | public void UpdateCachedText()
method GeneratePreview (line 99) | private void GeneratePreview()
method GenerateMatches (line 120) | private void GenerateMatches()
FILE: sources/ui/modelproxy/ModelProxyDB.cs
class ModelProxyDB (line 10) | public class ModelProxyDB
method Get (line 30) | public static ModelProxyDB Get() { return instance; }
method Load (line 32) | public void Load()
method LoadCards (line 46) | private void LoadCards()
method LoadOwnedCards (line 61) | private void LoadOwnedCards()
method LoadNpc (line 89) | private void LoadNpc()
method LoadRules (line 104) | private void LoadRules()
method LoadTournaments (line 125) | private void LoadTournaments()
method ModelProxyDB_OnUpdated (line 146) | private void ModelProxyDB_OnUpdated(bool bCards, bool bNpcs, bool bDecks)
method LocalizationDB_OnLanguageChanged (line 154) | private void LocalizationDB_OnLanguageChanged()
method UpdateOwnedCard (line 177) | public void UpdateOwnedCard(CardModelProxy cardProxy)
method UpdateCompletedNpcs (line 209) | private void UpdateCompletedNpcs()
method GetNpcProxy (line 220) | public NpcModelProxy GetNpcProxy(TriadNpc npcOb)
method GetCardProxy (line 225) | public CardModelProxy GetCardProxy(TriadCard cardOb)
FILE: sources/ui/modelproxy/NpcModelProxy.cs
class NpcModelProxy (line 6) | public class NpcModelProxy : LocalizedViewModel, IComparable
method CompareTo (line 42) | public int CompareTo(object obj)
method NpcModelProxy (line 48) | public NpcModelProxy(TriadNpc triadNpc)
method UpdateCachedText (line 55) | public void UpdateCachedText(bool sendNotifies = true)
method RefreshLocalization (line 92) | public override void RefreshLocalization()
FILE: sources/ui/modelproxy/RuleModelProxy.cs
class RuleModelProxy (line 6) | public class RuleModelProxy : LocalizedViewModel, IComparable, IImageHas...
method RuleModelProxy (line 12) | public RuleModelProxy(TriadGameModifier triadMod)
method CompareTo (line 17) | public int CompareTo(object obj)
method GetMatchOwner (line 23) | public object GetMatchOwner()
FILE: sources/ui/modelproxy/SettingsModel.cs
class SettingsModel (line 8) | public class SettingsModel
type CloudSaveState (line 10) | public enum CloudSaveState
method Initialize (line 30) | public static void Initialize()
method Close (line 59) | public static void Close()
method SetUseCloudSaves (line 75) | public static void SetUseCloudSaves(bool useCloud)
method CloudStorageInit (line 131) | public static async void CloudStorageInit()
method CloudStorageLoad (line 159) | private static async Task<bool> CloudStorageLoad()
method CloudStorageSave (line 184) | private static async Task CloudStorageSave()
method CloudStorageSendNotifies (line 204) | private static void CloudStorageSendNotifies(CloudSaveState state)
method CloudStorageRequestState (line 211) | public static void CloudStorageRequestState()
FILE: sources/ui/modelproxy/TournamentModelProxy.cs
class TournamentModelProxy (line 6) | public class TournamentModelProxy : LocalizedViewModel, IComparable
method TournamentModelProxy (line 19) | public TournamentModelProxy(TriadTournament triadTournament)
method CompareTo (line 25) | public int CompareTo(object obj)
method UpdateCachedText (line 31) | public void UpdateCachedText(bool sendNotifies = true)
method RefreshLocalization (line 52) | public override void RefreshLocalization()
FILE: sources/ui/modelproxy/TriadGameModel.cs
class TriadGameModel (line 8) | public class TriadGameModel
class Move (line 10) | public class Move
method TriadGameModel (line 37) | public TriadGameModel()
method SetNpc (line 48) | public void SetNpc(TriadNpc npc)
method SetGameRules (line 64) | public void SetGameRules(List<TriadGameModifier> mods)
method SetGameRules (line 72) | public void SetGameRules(TriadGameModifier mod1, TriadGameModifier mod...
method SetPlayerDeck (line 86) | public void SetPlayerDeck(TriadDeck deck, bool notifySetupChange = true)
method SetCachedWinChance (line 103) | public void SetCachedWinChance(TriadDeck deck, SolverResult winChance)
method ResolveSpecialRule (line 112) | public void ResolveSpecialRule(ETriadGameSpecialMod specialMod)
method FindDeckToUseFor (line 118) | private TriadDeck FindDeckToUseFor(TriadNpc npc)
method UpdateSession (line 148) | private void UpdateSession(bool notifySetupChange = true)
method GameReset (line 165) | public void GameReset()
method GameUndoRed (line 176) | public void GameUndoRed()
method GameStartBlue (line 187) | public void GameStartBlue()
method SetGameForcedBlueCard (line 196) | public void SetGameForcedBlueCard(TriadCard card)
method SetGameRedCard (line 216) | public void SetGameRedCard(TriadCard card, int boardIdx)
method GamePlayBlueCard (line 263) | private void GamePlayBlueCard()
method GameRouletteApplied (line 294) | public void GameRouletteApplied()
FILE: sources/ui/view/AdjustCardDialog.xaml.cs
class AdjustCardDialog (line 8) | public partial class AdjustCardDialog : UserControl
method AdjustCardDialog (line 10) | public AdjustCardDialog()
FILE: sources/ui/view/AdjustHashDialog.xaml.cs
class AdjustHashDialog (line 8) | public partial class AdjustHashDialog : UserControl
method AdjustHashDialog (line 10) | public AdjustHashDialog()
FILE: sources/ui/view/DialogWindow.xaml.cs
class DialogWindow (line 10) | public partial class DialogWindow : Window
method DialogWindow (line 12) | public DialogWindow()
method DialogWindow_Loaded (line 19) | private void DialogWindow_Loaded(object sender, RoutedEventArgs e)
class DialogWindowService (line 49) | public class DialogWindowService : IDialogWindowService
method ShowDialog (line 51) | public bool? ShowDialog(IDialogWindowViewModel viewModel)
method Initialize (line 65) | public static void Initialize()
FILE: sources/ui/view/FavDeckEditDialog.xaml.cs
class FavDeckEditDialog (line 8) | public partial class FavDeckEditDialog : UserControl
method FavDeckEditDialog (line 10) | public FavDeckEditDialog()
FILE: sources/ui/view/FavDeckPreview.xaml.cs
class FavDeckPreview (line 8) | public partial class FavDeckPreview : UserControl
method FavDeckPreview (line 10) | public FavDeckPreview()
FILE: sources/ui/view/MainWindow.xaml.cs
class MainWindow (line 11) | public partial class MainWindow : Window
method MainWindow (line 13) | public MainWindow()
method Window_PreviewKeyDown (line 18) | private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
method Window_SizeChanged (line 31) | private void Window_SizeChanged(object sender, SizeChangedEventArgs e)
class AppWindowService (line 39) | public class AppWindowService : IAppWindowService
method SetAlwaysOnTop (line 41) | public void SetAlwaysOnTop(bool value)
method SetFontSize (line 47) | public void SetFontSize(float value)
method SetSoftwareRendering (line 58) | public void SetSoftwareRendering(bool value)
method Initialize (line 63) | public static void Initialize()
FILE: sources/ui/view/OverlayWindowInteractive.xaml.cs
class OverlayWindowInteractive (line 13) | public partial class OverlayWindowInteractive : Window
method GetWindowLong (line 15) | [DllImport("user32.dll", SetLastError = true)]
method SetWindowLong (line 17) | [DllImport("user32.dll")]
method OverlayWindowInteractive (line 27) | public OverlayWindowInteractive()
method SetOverlayActive (line 37) | public void SetOverlayActive(bool wantsActive)
method Window_Loaded (line 43) | private void Window_Loaded(object sender, RoutedEventArgs e)
method Window_Closed (line 50) | private void Window_Closed(object sender, EventArgs e)
method Border_MouseMove (line 55) | private void Border_MouseMove(object sender, MouseEventArgs e)
method SetPanelCanvasPos (line 77) | public void SetPanelCanvasPos(double x, double y)
method Window_PreviewMouseLeftButtonUp (line 88) | private void Window_PreviewMouseLeftButtonUp(object sender, MouseButto...
method Border_MouseLeftButtonDown (line 96) | private void Border_MouseLeftButtonDown(object sender, MouseButtonEven...
method SetXInputEnble (line 102) | public void SetXInputEnble(bool enable)
method XInputEventMotion (line 114) | private void XInputEventMotion()
FILE: sources/ui/view/OverlayWindowTransparent.xaml.cs
class OverlayWindowTransparent (line 10) | public partial class OverlayWindowTransparent : Window
method OverlayWindowTransparent (line 14) | public OverlayWindowTransparent()
method SetOverlayActive (line 19) | public void SetOverlayActive(bool wantsActive)
method Window_Loaded (line 24) | private void Window_Loaded(object sender, RoutedEventArgs e)
method SetDetailsCanvasPos (line 31) | public void SetDetailsCanvasPos(double x = -1, double y = -1)
method panelDetails_SizeChanged (line 49) | private void panelDetails_SizeChanged(object sender, SizeChangedEventA...
method panelDetails_IsVisibleChanged (line 54) | private void panelDetails_IsVisibleChanged(object sender, DependencyPr...
method panelBoard_IsVisibleChanged (line 62) | private void panelBoard_IsVisibleChanged(object sender, DependencyProp...
FILE: sources/ui/view/PageCards.xaml.cs
class PageCards (line 10) | public partial class PageCards : UserControl
method PageCards (line 12) | public PageCards()
method TabItem_PreviewKeyDown (line 17) | private void TabItem_PreviewKeyDown(object sender, KeyEventArgs e)
method searchTextBox_TextChanged (line 39) | private void searchTextBox_TextChanged(object sender, TextChangedEvent...
method listCards_ContextMenuOpening (line 50) | private void listCards_ContextMenuOpening(object sender, ContextMenuEv...
FILE: sources/ui/view/PageInfo.xaml.cs
class PageInfo (line 10) | public partial class PageInfo : UserControl
method PageInfo (line 12) | public PageInfo()
method Hyperlink_RequestNavigate (line 17) | private void Hyperlink_RequestNavigate(object sender, RequestNavigateE...
FILE: sources/ui/view/PageNpcs.xaml.cs
class PageNpcs (line 10) | public partial class PageNpcs : UserControl
method PageNpcs (line 12) | public PageNpcs()
method UserControl_PreviewKeyDown (line 17) | private void UserControl_PreviewKeyDown(object sender, KeyEventArgs e)
method searchTextBox_TextChanged (line 39) | private void searchTextBox_TextChanged(object sender, TextChangedEvent...
method listNpcs_ContextMenuOpening (line 50) | private void listNpcs_ContextMenuOpening(object sender, ContextMenuEve...
FILE: sources/ui/view/PageScreenshot.xaml.cs
class PageScreenshot (line 9) | public partial class PageScreenshot : UserControl
method PageScreenshot (line 11) | public PageScreenshot()
method Border_PreviewMouseLeftButtonDown (line 16) | private void Border_PreviewMouseLeftButtonDown(object sender, MouseBut...
method ListView_ContextMenuOpening (line 25) | private void ListView_ContextMenuOpening(object sender, ContextMenuEve...
FILE: sources/ui/view/PageSetup.xaml.cs
class PageSetup (line 8) | public partial class PageSetup : UserControl
method PageSetup (line 10) | public PageSetup()
method SearchableComboBox_SelectionEffectivelyChanged (line 15) | private void SearchableComboBox_SelectionEffectivelyChanged(object sen...
FILE: sources/ui/view/PageSimulate.xaml.cs
class PageSimulate (line 10) | public partial class PageSimulate : UserControl
method PageSimulate (line 12) | public PageSimulate()
method rectPlayerDeckSlot_LayoutUpdated (line 17) | private void rectPlayerDeckSlot_LayoutUpdated(object sender, EventArgs e)
FILE: sources/ui/view/controls-triad/CardGridView.xaml.cs
class CardGridView (line 11) | public partial class CardGridView : UserControl
method CardGridView (line 13) | public CardGridView()
method CardView_MouseDown (line 18) | private void CardView_MouseDown(object sender, MouseButtonEventArgs e)
method UserControl_SizeChanged (line 30) | private void UserControl_SizeChanged(object sender, SizeChangedEventAr...
FILE: sources/ui/view/controls-triad/CardView.xaml.cs
class CardView (line 9) | public partial class CardView : UserControl
method CardView (line 19) | public CardView()
FILE: sources/ui/view/controls-triad/DeckView.xaml.cs
class DeckView (line 12) | public partial class DeckView : UserControl
method DeckView (line 30) | public DeckView()
method Card_MouseDown (line 43) | private void Card_MouseDown(object sender, MouseButtonEventArgs e)
method Card_MouseUp (line 55) | private void Card_MouseUp(object sender, MouseButtonEventArgs e)
method SearchableComboBox_SelectionEffectivelyChanged (line 77) | private void SearchableComboBox_SelectionEffectivelyChanged(object sen...
method ContextMenu_Opened (line 89) | private void ContextMenu_Opened(object sender, RoutedEventArgs e)
FILE: sources/ui/view/controls-triad/PlayerDeckPreview.xaml.cs
class PlayerDeckPreview (line 10) | public partial class PlayerDeckPreview : UserControl
method PlayerDeckPreview (line 12) | public PlayerDeckPreview()
method Card_MouseDown (line 17) | private void Card_MouseDown(object sender, MouseButtonEventArgs e)
FILE: sources/ui/view/controls/NumTextBox.xaml.cs
class NumTextBox (line 11) | public partial class NumTextBox : UserControl
method NumTextBox (line 42) | public NumTextBox()
method TextNum_MouseDoubleClick (line 57) | private void TextNum_MouseDoubleClick(object sender, MouseButtonEventA...
method TextNum_GotKeyboardFocus (line 62) | private void TextNum_GotKeyboardFocus(object sender, KeyboardFocusChan...
method TextNum_PreviewMouseLeftButtonDown (line 67) | private void TextNum_PreviewMouseLeftButtonDown(object sender, MouseBu...
method TextNum_TextChanged (line 77) | private void TextNum_TextChanged(object sender, TextChangedEventArgs e)
method TextNum_PreviewTextInput (line 98) | private void TextNum_PreviewTextInput(object sender, TextCompositionEv...
method OnMinValueChanged (line 106) | public void OnMinValueChanged(int minValue)
method OnMaxValueChanged (line 114) | public void OnMaxValueChanged(int maxValue)
method OnValueChanged (line 123) | public void OnValueChanged(int newValue)
method UpdateMask (line 128) | private void UpdateMask()
method UpdateText (line 141) | private void UpdateText()
method UserControl_MouseWheel (line 149) | private void UserControl_MouseWheel(object sender, MouseWheelEventArgs e)
method RepeatButtonUp_Click (line 161) | private void RepeatButtonUp_Click(object sender, RoutedEventArgs e)
method RepeatButtonDown_Click (line 169) | private void RepeatButtonDown_Click(object sender, RoutedEventArgs e)
FILE: sources/ui/view/controls/OutlinedTextBlock.cs
class OutlinedTextBlock (line 15) | [ContentProperty("Text")]
method UpdatePen (line 18) | private void UpdatePen()
method StrokePropertyChangedCallback (line 43) | private static void StrokePropertyChangedCallback(DependencyObject dep...
method OutlinedTextBlock (line 187) | public OutlinedTextBlock()
method OnRender (line 193) | protected override void OnRender(DrawingContext drawingContext)
method MeasureOverride (line 201) | protected override Size MeasureOverride(Size availableSize)
method ArrangeOverride (line 219) | protected override Size ArrangeOverride(Size finalSize)
method OnFormattedTextInvalidated (line 233) | private static void OnFormattedTextInvalidated(DependencyObject depend...
method OnFormattedTextUpdated (line 244) | private static void OnFormattedTextUpdated(DependencyObject dependency...
method EnsureFormattedText (line 254) | private void EnsureFormattedText()
method UpdateFormattedText (line 273) | private void UpdateFormattedText()
method EnsureGeometry (line 292) | private void EnsureGeometry()
FILE: sources/ui/view/controls/SearchableComboBox.xaml.cs
class SearchableComboBox (line 16) | public partial class SearchableComboBox : ComboBox
method SearchableComboBox (line 40) | public SearchableComboBox()
method OnItemsSourceChanged (line 71) | protected override void OnItemsSourceChanged(IEnumerable oldValue, IEn...
method View_CollectionChanged (line 95) | private void View_CollectionChanged(object sender, System.Collections....
method OnPreviewKeyDown (line 100) | protected override void OnPreviewKeyDown(KeyEventArgs e)
method OnPreviewLostKeyboardFocus (line 121) | protected override void OnPreviewLostKeyboardFocus(KeyboardFocusChange...
method GetItemDescription (line 129) | private string GetItemDescription(object item)
method CheckSelectedItem (line 148) | private void CheckSelectedItem()
method TriggerSelectedItemChanged (line 154) | private void TriggerSelectedItemChanged()
method ClearFilter (line 163) | public void ClearFilter()
method FilteredComboBox_DropDownOpened (line 170) | private void FilteredComboBox_DropDownOpened(object sender, EventArgs e)
method FilteredComboBox_UserTextChange (line 176) | private void FilteredComboBox_UserTextChange(object sender, EventArgs e)
method RefreshFilter (line 187) | private void RefreshFilter()
method FreezTextBoxState (line 214) | private void FreezTextBoxState(Action action)
method FilterItem (line 228) | private bool FilterItem(object value)
class TextBoxBaseUserChangeTracker (line 237) | private class TextBoxBaseUserChangeTracker
method TextBoxBaseUserChangeTracker (line 246) | public TextBoxBaseUserChangeTracker(TextBoxBase textBoxBase)
class UserChange (line 302) | private class UserChange<T>
method UserChange (line 308) | public UserChange(Action<T> action)
method Set (line 313) | public void Set(T val)
FILE: sources/ui/view/utils/CanvasExtensions.cs
class CanvasExtensions (line 10) | public class CanvasExtensions
method GetAutoHide (line 15) | public static bool GetAutoHide(FrameworkElement owner)
method SetAutoHide (line 20) | public static void SetAutoHide(FrameworkElement owner, bool value)
method OnAutoHideChanged (line 25) | public static void OnAutoHideChanged(DependencyObject sender, Dependen...
method GetScreenBounds (line 41) | public static OverlayWindowViewModel.ScreenCoordVM GetScreenBounds(Fra...
method SetScreenBounds (line 46) | public static void SetScreenBounds(FrameworkElement owner, OverlayWind...
method OnScreenBoundsChanged (line 51) | public static void OnScreenBoundsChanged(DependencyObject sender, Depe...
method UpdateScreenBoundsOnLoaded (line 67) | private static void UpdateScreenBoundsOnLoaded(object sender, RoutedEv...
method UpdateScreenBounds (line 77) | private static void UpdateScreenBounds(FrameworkElement owner, Overlay...
FILE: sources/ui/view/utils/CardDragDropExtension.cs
type ICardDragDropSource (line 8) | public interface ICardDragDropSource
method OnCardDrop (line 10) | void OnCardDrop(CardViewModel sourceCard, object destContainer);
type ICardDragDropTarget (line 13) | public interface ICardDragDropTarget
method IsCardDropAllowed (line 15) | bool IsCardDropAllowed(CardViewModel sourceCard, object sourceContainer);
method OnCardDragEnter (line 16) | void OnCardDragEnter(CardViewModel sourceCard, CardViewModel destCard);
method OnCardDragLeave (line 17) | void OnCardDragLeave(CardViewModel sourceCard, CardViewModel destCard);
method OnCardDrop (line 18) | void OnCardDrop(CardViewModel sourceCard, CardViewModel destCard, obje...
class CardDragDropExtension (line 21) | public class CardDragDropExtension
class CardDragData (line 23) | private class CardDragData
method GetIsDragSource (line 46) | public static bool GetIsDragSource(DependencyObject obj)
method SetIsDragSource (line 51) | public static void SetIsDragSource(DependencyObject obj, bool value)
method GetIsDragDestination (line 56) | public static bool GetIsDragDestination(DependencyObject obj)
method SetIsDragDestination (line 61) | public static void SetIsDragDestination(DependencyObject obj, bool value)
method GetCardContext (line 66) | public static CardViewModel GetCardContext(DependencyObject obj)
method SetCardContext (line 71) | public static void SetCardContext(DependencyObject obj, CardViewModel ...
method GetCardContainer (line 76) | public static object GetCardContainer(DependencyObject obj)
method SetCardContainer (line 81) | public static void SetCardContainer(DependencyObject obj, object value)
method IsDragSourceChanged (line 86) | private static void IsDragSourceChanged(DependencyObject obj, Dependen...
method CardDragReset (line 106) | public static void CardDragReset()
method CardDrag_LeftButtonDown (line 111) | private static void CardDrag_LeftButtonDown(object sender, MouseButton...
method CardDrag_LeftButtonUp (line 117) | private static void CardDrag_LeftButtonUp(object sender, MouseButtonEv...
method CardDrag_MouseMove (line 122) | private static void CardDrag_MouseMove(object sender, MouseEventArgs e)
method IsDragDestinationChanged (line 154) | private static void IsDragDestinationChanged(DependencyObject obj, Dep...
method CardDrag_Drop (line 178) | private static void CardDrag_Drop(object sender, DragEventArgs e)
method CardDrag_DragLeave (line 200) | private static void CardDrag_DragLeave(object sender, DragEventArgs e)
method CardDrag_DragEnter (line 220) | private static void CardDrag_DragEnter(object sender, DragEventArgs e)
method CardDrag_DragOver (line 245) | private static void CardDrag_DragOver(object sender, DragEventArgs e)
FILE: sources/ui/view/utils/Converters.cs
class BoolToInvisibilityConverter (line 12) | public class BoolToInvisibilityConverter : IValueConverter
method Convert (line 14) | public object Convert(object value, Type targetType, object parameter,...
method ConvertBack (line 19) | public object ConvertBack(object value, Type targetType, object parame...
class InversedBoolConverter (line 25) | public class InversedBoolConverter : IValueConverter
method Convert (line 27) | public object Convert(object value, Type targetType, object parameter,...
method ConvertBack (line 32) | public object ConvertBack(object value, Type targetType, object parame...
class SystemIconConverter (line 38) | public class SystemIconConverter : IValueConverter
method Convert (line 40) | public object Convert(object value, Type targetType, object parameter,...
method ConvertBack (line 47) | public object ConvertBack(object value, Type targetType, object parame...
FILE: sources/ui/view/utils/ListViewExtensions.cs
class ListViewExtensions (line 11) | public class ListViewExtensions
class SortInfo (line 13) | public class SortInfo
method GetSortInfo (line 24) | public static SortInfo GetSortInfo(ListView owner)
method SetSortInfo (line 29) | public static void SetSortInfo(ListView owner, SortInfo value)
method GetColumnSortProperty (line 37) | public static string GetColumnSortProperty(GridViewColumn owner)
method SetColumnSortProperty (line 42) | public static void SetColumnSortProperty(GridViewColumn owner, string ...
method GetInitSorting (line 49) | public static string GetInitSorting(GridViewColumn owner)
method SetInitSorting (line 54) | public static void SetInitSorting(GridViewColumn owner, string value)
method GetEnableSortOnClick (line 62) | public static bool GetEnableSortOnClick(ListView owner)
method SetEnableSortOnClick (line 67) | public static void SetEnableSortOnClick(ListView owner, bool value)
method EnableSortOnClickChanged (line 72) | public static void EnableSortOnClickChanged(object sender, DependencyP...
method HandlerViewLoaded (line 99) | public static void HandlerViewLoaded(object sender, RoutedEventArgs e)
method InitializeViewSorting (line 106) | public static void InitializeViewSorting(ListView listView)
method HandlerColumnClicked (line 140) | public static void HandlerColumnClicked(object sender, RoutedEventArgs e)
method ApplyViewSorting (line 152) | public static void ApplyViewSorting(ListView listView, GridViewColumn ...
method FindObjectParent (line 185) | public static DependencyObject FindObjectParent(DependencyObject sourc...
method FindObjectParent (line 215) | public static T FindObjectParent<T>(DependencyObject source) where T :...
method GetSyncScrollItem (line 223) | public static object GetSyncScrollItem(ListView owner)
method SetSyncScrollItem (line 228) | public static void SetSyncScrollItem(ListView owner, object value)
method SyncScrollItemChanged (line 233) | public static void SyncScrollItemChanged(object sender, DependencyProp...
FILE: sources/ui/view/utils/OverlayWindowService.cs
class OverlayWindowService (line 5) | public class OverlayWindowService : IOverlayWindowService
method SetOverlayActive (line 10) | public void SetOverlayActive(IOverlayWindowViewModel viewModel, bool w...
method IsCursorInside (line 31) | public bool IsCursorInside(System.Drawing.Rectangle screenBounds)
method MoveOverlayToScreen (line 47) | private void MoveOverlayToScreen(System.Drawing.Rectangle screenBounds)
method OnProcessingGameWindow (line 66) | public void OnProcessingGameWindow(System.Drawing.Rectangle gameWindow...
method GetScreenBounds (line 81) | public System.Drawing.Rectangle GetScreenBounds(System.Drawing.Rectang...
method Initialize (line 96) | public static void Initialize()
FILE: sources/ui/view/utils/ViewUtils.cs
class ViewUtils (line 8) | public class ViewUtils
method FindVisualChildRecursive (line 10) | public static DependencyObject FindVisualChildRecursive(DependencyObje...
method FindVisualParent (line 31) | public static DependencyObject FindVisualParent(DependencyObject testO...
class NoAutoWidthDecorator (line 47) | public class NoAutoWidthDecorator : Decorator
method MeasureOverride (line 49) | protected override Size MeasureOverride(Size constraint)
method ArrangeOverride (line 55) | protected override Size ArrangeOverride(Size arrangeSize)
FILE: sources/ui/viewmodel/AdjustCardViewModel.cs
class AdjustCardViewModel (line 9) | public class AdjustCardViewModel : LocalizedViewModel, IDialogWindowView...
method AdjustCardViewModel (line 61) | public AdjustCardViewModel()
method AdjustCardViewModel (line 66) | public AdjustCardViewModel(ImageCardDataViewModel cardData)
method GetDialogWindowTitle (line 85) | public string GetDialogWindowTitle()
method GetLocalizedCardState (line 90) | private string GetLocalizedCardState(ScannerTriad.ECardState value)
method GenerateSideInfo (line 108) | private string GenerateSideInfo(BitmapImage image, ScannerTriad.CardSt...
method GenerateCardImage (line 127) | private void GenerateCardImage()
method WriteBitmapToImage (line 134) | private void WriteBitmapToImage(System.Drawing.Bitmap bitmap, BitmapIm...
method UpdateMatchingCards (line 149) | private void UpdateMatchingCards()
FILE: sources/ui/viewmodel/AdjustHashViewModel.cs
class AdjustHashViewModel (line 6) | public class AdjustHashViewModel : LocalizedViewModel, IDialogWindowView...
method AdjustHashViewModel (line 28) | public AdjustHashViewModel()
method GetDialogWindowTitle (line 33) | public string GetDialogWindowTitle()
method UpdateSelectedMatch (line 38) | private void UpdateSelectedMatch()
FILE: sources/ui/viewmodel/CardCollectionViewModel.cs
class CardCollectionViewModel (line 5) | public class CardCollectionViewModel : LocalizedViewModel
method CardCollectionViewModel (line 15) | public CardCollectionViewModel()
FILE: sources/ui/viewmodel/CardViewModel.cs
type ECardOwner (line 5) | public enum ECardOwner
type ECardDragMode (line 12) | public enum ECardDragMode
class CardViewModel (line 19) | public class CardViewModel : BaseViewModel
method Assign (line 121) | public void Assign(TriadCardInstance cardData)
FILE: sources/ui/viewmodel/ContextActionViewModel.cs
class ContextActionViewModel (line 5) | public class ContextActionViewModel : BaseViewModel
method ToString (line 13) | public override string ToString()
FILE: sources/ui/viewmodel/DeckViewModel.cs
class DeckViewModel (line 10) | public class DeckViewModel : CardCollectionViewModel, ICardDragDropTarget
class CardPickerParams (line 12) | public class CardPickerParams
method DeckViewModel (line 53) | public DeckViewModel()
method PageInfo_OnSettingsChanged (line 69) | private void PageInfo_OnSettingsChanged(object sender, SettingsEventAr...
method IsCardDropAllowed (line 78) | public bool IsCardDropAllowed(CardViewModel sourceCard, object sourceC...
method OnCardDragEnter (line 83) | public void OnCardDragEnter(CardViewModel sourceCard, CardViewModel de...
method OnCardDragLeave (line 92) | public void OnCardDragLeave(CardViewModel sourceCard, CardViewModel de...
method OnCardDrop (line 98) | public void OnCardDrop(CardViewModel sourceCard, CardViewModel destCar...
method SetCustomSelect (line 113) | public void SetCustomSelect(RelayCommand<CardViewModel> selectCommand)
method CommandSelectFunc (line 118) | private void CommandSelectFunc(CardViewModel cardOb)
method CommandToggleLockFunc (line 143) | private void CommandToggleLockFunc(CardViewModel cardOb)
method CommandPickCardFunc (line 151) | private void CommandPickCardFunc(CardPickerParams param)
method CardPickerItems_Filter (line 163) | private bool CardPickerItems_Filter(object item)
method Cards_CollectionChanged (line 168) | private void Cards_CollectionChanged(object sender, NotifyCollectionCh...
method UpdateCardVisuals (line 185) | private void UpdateCardVisuals(CardViewModel cardVM)
method UpdateAllCardIcons (line 193) | private void UpdateAllCardIcons()
method ForceCardsUpdate (line 204) | public void ForceCardsUpdate()
FILE: sources/ui/viewmodel/FavDeckEditViewModel.cs
class FavDeckEditViewModel (line 6) | public class FavDeckEditViewModel : LocalizedViewModel, IDialogWindowVie...
method FavDeckEditViewModel (line 18) | public FavDeckEditViewModel()
method GetDialogWindowTitle (line 23) | public string GetDialogWindowTitle()
FILE: sources/ui/viewmodel/ImageCardDataViewModel.cs
class ImageCardDataViewModel (line 3) | public class ImageCardDataViewModel : LocalizedViewModel
method ImageCardDataViewModel (line 18) | public ImageCardDataViewModel(ScannerTriad.CardState cardState)
method RefreshLocalization (line 28) | public override void RefreshLocalization()
method UpdateCachedText (line 36) | public void UpdateCachedText()
FILE: sources/ui/viewmodel/LocalSavesViewModel.cs
class LocalSavesViewModel (line 9) | public class LocalSavesViewModel : LocalizedViewModel
method LocalSavesViewModel (line 22) | public LocalSavesViewModel()
method CommandExportFunc (line 31) | private void CommandExportFunc(object dummyParam)
method CommandImportFunc (line 65) | private void CommandImportFunc(object dummyParam)
method CommandViewBackupFunc (line 97) | private void CommandViewBackupFunc(object dummyParam)
FILE: sources/ui/viewmodel/MainWindowViewModel.cs
class MainWindowViewModel (line 11) | public class MainWindowViewModel : LocalizedViewModel
type PageType (line 13) | public enum PageType
method MainWindowViewModel (line 55) | public MainWindowViewModel()
method RefreshLocalization (line 83) | public override void RefreshLocalization()
method SwitchToNextLanguage (line 97) | private void SwitchToNextLanguage(object dummyParam)
method SwitchToPage (line 111) | public void SwitchToPage(PageType page)
method RunUpdateCheck (line 116) | private void RunUpdateCheck()
FILE: sources/ui/viewmodel/OverlayWindowViewModel.cs
class OverlayWindowViewModel (line 14) | public class OverlayWindowViewModel : LocalizedViewModel, IOverlayWindow...
class ScreenCoordVM (line 21) | public class ScreenCoordVM
type Mode (line 23) | public enum Mode
class ScreenCardVM (line 37) | public class ScreenCardVM : ScreenCoordVM
type SolverResult (line 39) | public enum SolverResult
class ScreenCactpotVM (line 49) | public class ScreenCactpotVM : ScreenCoordVM
type LineType (line 51) | public enum LineType
class BoardInfoVM (line 62) | public class BoardInfoVM : BaseViewModel
method OverlayWindowViewModel (line 178) | public OverlayWindowViewModel()
method OverlayWindowViewModel (line 183) | public OverlayWindowViewModel(MainWindowViewModel mainVM)
method RefreshLocalization (line 210) | public override void RefreshLocalization()
method GameModel_OnNpcChanged (line 220) | private void GameModel_OnNpcChanged(TriadNpc npcOb)
method CommandCapureFunc (line 226) | private void CommandCapureFunc(object dummyParam)
method OnOverlayActive (line 234) | public void OnOverlayActive()
method UpdateScreenState (line 251) | public void UpdateScreenState(bool debugMode = false)
method UpdateCachedText (line 464) | private void UpdateCachedText()
method UpdateRedDeckDetails (line 479) | private void UpdateRedDeckDetails()
method TimerAutoScan_Tick (line 524) | private void TimerAutoScan_Tick(object sender, EventArgs e)
method TimerAutoScanUpkeep_Tick (line 624) | private void TimerAutoScanUpkeep_Tick(object sender, EventArgs e)
method DisableAutoScanTimers (line 630) | private void DisableAutoScanTimers()
method SyncDeckVM (line 639) | private void SyncDeckVM(CardCollectionViewModel deckVM, IList<TriadCar...
method AssignGameBoundsToMarker (line 668) | private void AssignGameBoundsToMarker(ScreenCoordVM markerVM, Rectangl...
method AssignGamePosToMarker (line 683) | private void AssignGamePosToMarker(ScreenCoordVM markerVM, int gamePos...
method IsCursorInScanArea (line 696) | private bool IsCursorInScanArea()
method IsUsingAutoScan (line 702) | private bool IsUsingAutoScan()
method UpdateAutoScanState (line 708) | private void UpdateAutoScanState()
method FindOrAddIcon (line 726) | private BitmapSource FindOrAddIcon(Icon icon)
method UpdateAnalyzerDesc (line 737) | private void UpdateAnalyzerDesc()
FILE: sources/ui/viewmodel/PageCardsViewModel.cs
class PageCardsViewModel (line 9) | public class PageCardsViewModel : LocalizedViewModel
method PageCardsViewModel (line 37) | public PageCardsViewModel()
method PageCardsViewModel (line 42) | public PageCardsViewModel(MainWindowViewModel mainVM)
method RefreshLocalization (line 55) | public override void RefreshLocalization()
method CreateGridViews (line 61) | private void CreateGridViews()
method OnSettingsUpdated (line 91) | private void OnSettingsUpdated(bool bCards, bool bNpcs, bool bDecks)
method CommandToggleOwnedCardFunc (line 102) | private void CommandToggleOwnedCardFunc(CardModelProxy cardProxy)
method CommandSearchCardFunc (line 107) | private void CommandSearchCardFunc(string text)
method CommandBuildContextActionsFunc (line 112) | private void CommandBuildContextActionsFunc(CardModelProxy cardProxy)
method FindCardOnline (line 151) | private void FindCardOnline(CardModelProxy cardProxy)
method SelectCardNpc (line 156) | private void SelectCardNpc(NpcModelProxy npcProxy)
FILE: sources/ui/viewmodel/PageInfoViewModel.cs
class SettingsEventArgs (line 7) | public class SettingsEventArgs : EventArgs
type Setting (line 9) | public enum Setting
class PageInfoViewModel (line 19) | public class PageInfoViewModel : LocalizedViewModel, IDataErrorInfo
method PageInfoViewModel (line 180) | public PageInfoViewModel()
method RefreshLocalization (line 197) | public override void RefreshLocalization()
method GetValidFontSizeRange (line 203) | private (float, float) GetValidFontSizeRange()
method GetValidMarkerDurationRange (line 208) | private (float, float) GetValidMarkerDurationRange()
method IsPropertyValueValid (line 213) | private bool IsPropertyValueValid(float value, Func<(float, float)> fu...
class SettingsWeakEventManager (line 220) | public class SettingsWeakEventManager : WeakEventManager
method SettingsWeakEventManager (line 222) | private SettingsWeakEventManager() { }
method AddHandler (line 224) | public static void AddHandler(PageInfoViewModel sourceVM, EventHandler...
method RemoveHandler (line 232) | public static void RemoveHandler(PageInfoViewModel sourceVM, EventHand...
method NewListenerList (line 259) | protected override ListenerList NewListenerList()
method StartListening (line 264) | protected override void StartListening(object source)
method StopListening (line 270) | protected override void StopListening(object source)
method OnSettingsChanged (line 276) | void OnSettingsChanged(object sender, SettingsEventArgs e)
FILE: sources/ui/viewmodel/PageNpcsViewModel.cs
class PageNpcsViewModel (line 10) | public class PageNpcsViewModel : LocalizedViewModel
method PageNpcsViewModel (line 37) | public PageNpcsViewModel()
method PageNpcsViewModel (line 42) | public PageNpcsViewModel(MainWindowViewModel mainVM)
method RefreshLocalization (line 56) | public override void RefreshLocalization()
method SelectNpc (line 62) | public void SelectNpc(NpcModelProxy npcProxy)
method UpdateRemainingNpcs (line 67) | private void UpdateRemainingNpcs()
method CommandSearchNpcFunc (line 72) | private void CommandSearchNpcFunc(string text)
method CommandBuildContextActionsFunc (line 77) | private void CommandBuildContextActionsFunc(NpcModelProxy npcProxy)
method SelectNpcToPlay (line 123) | private void SelectNpcToPlay(NpcModelProxy npcProxy)
FILE: sources/ui/viewmodel/PageScreenshotViewModel.cs
class PageScreenshotViewModel (line 7) | public class PageScreenshotViewModel : LocalizedViewModel
type Mode (line 9) | public enum Mode
type AnalyzerState (line 16) | public enum AnalyzerState
method PageScreenshotViewModel (line 84) | public PageScreenshotViewModel()
method PageScreenshotViewModel (line 89) | public PageScreenshotViewModel(MainWindowViewModel mainVM)
method RefreshLocalization (line 100) | public override void RefreshLocalization()
method RequestDebugScreenshot (line 120) | public void RequestDebugScreenshot(bool useCachedOnly)
method CommandToggleOverlayFunc (line 145) | private void CommandToggleOverlayFunc(object dummyParam)
method CommandRemoveLocalHashesFunc (line 159) | private void CommandRemoveLocalHashesFunc(object dummyParam)
method CommandLearnHashFunc (line 172) | private void CommandLearnHashFunc(object dummyParam)
method CommandLearnDiscardAllFunc (line 189) | private void CommandLearnDiscardAllFunc(object dummyParam)
method UpdateAnalyzerDesc (line 197) | public void UpdateAnalyzerDesc()
method UpdateState (line 257) | public void UpdateState()
method UpdateStateHashes (line 279) | private void UpdateStateHashes()
method CommandBuildContextActionsFunc (line 309) | private void CommandBuildContextActionsFunc(object param)
method CommandAdjustImageHash (line 351) | private void CommandAdjustImageHash(ImageHashDataModelProxy hashVM)
method CanDeleteImageHash (line 369) | private bool CanDeleteImageHash(ImageHashDataModelProxy hashVM)
method CommandDeleteImageHash (line 374) | private void CommandDeleteImageHash(ImageHashDataModelProxy hashVM)
method CanAdjustImageCard (line 385) | private bool CanAdjustImageCard(ImageCardDataViewModel cardVM)
method CommandAdjustImageCard (line 390) | private void CommandAdjustImageCard(ImageCardDataViewModel cardVM)
FILE: sources/ui/viewmodel/PageSetupViewModel.cs
class PageSetupViewModel (line 11) | public class PageSetupViewModel : LocalizedViewModel
method PageSetupViewModel (line 127) | public PageSetupViewModel()
method PageSetupViewModel (line 132) | public PageSetupViewModel(MainWindowViewModel mainVM)
method RefreshLocalization (line 178) | public override void RefreshLocalization()
method GameModel_OnNpcChanged (line 187) | private void GameModel_OnNpcChanged(TriadNpc npcOb)
method GameModel_OnDeckChanged (line 192) | private void GameModel_OnDeckChanged(TriadDeck deckOb)
method UpdateDeckState (line 213) | private void UpdateDeckState()
method PageSetupViewModel_OnCardOwnerChanged (line 226) | private void PageSetupViewModel_OnCardOwnerChanged(CardModelProxy card...
method ActiveDeck_OnCardsChanged (line 236) | private void ActiveDeck_OnCardsChanged(DeckViewModel deckVM)
method CommandToggleCloudSavesFunc (line 247) | private void CommandToggleCloudSavesFunc(bool wantsCloudSaves)
method UpdateCloudStorageState (line 255) | private void UpdateCloudStorageState()
method SettingsModel_OnCloudStorageStateUpdate (line 273) | private void SettingsModel_OnCloudStorageStateUpdate(SettingsModel.Clo...
method SettingsModel_OnCloudStorageApiUpdate (line 284) | private void SettingsModel_OnCloudStorageApiUpdate(GoogleDriveService....
method CommandDeckOptimizerStartFunc (line 298) | private async void CommandDeckOptimizerStartFunc(object dummyParam)
method DeckOptimizerUpdateTimer_Tick (line 338) | private void DeckOptimizerUpdateTimer_Tick(object sender, EventArgs e)
method DeckOptimizer_OnFoundDeck (line 363) | private void DeckOptimizer_OnFoundDeck(TriadDeck deck, float dummyChance)
method DeckOptimizerBufferTimer_Tick (line 378) | private void DeckOptimizerBufferTimer_Tick(object sender, EventArgs e)
method DeckOptimizer_OnSolved (line 391) | private void DeckOptimizer_OnSolved(int id, TriadDeck deck, SolverResu...
method UpdateDeckOptimizerHistory (line 407) | private void UpdateDeckOptimizerHistory()
method UpdateModelRules (line 429) | private void UpdateModelRules()
FILE: sources/ui/viewmodel/PageSimulateViewModel.cs
class PageSimulateViewModel (line 6) | public class PageSimulateViewModel : LocalizedViewModel, ICardDragDropTa...
class BoardCardVM (line 8) | public class BoardCardVM
method BoardCardVM (line 14) | public BoardCardVM(int idx)
method PageSimulateViewModel (line 87) | public PageSimulateViewModel()
method PageSimulateViewModel (line 92) | public PageSimulateViewModel(MainWindowViewModel mainVM)
method RefreshLocalization (line 134) | public override void RefreshLocalization()
method GameModel_OnGameStateChanged (line 142) | public void GameModel_OnGameStateChanged(TriadGameSimulationState stat...
method GameModel_OnCachedWinChanceChanged (line 221) | private void GameModel_OnCachedWinChanceChanged(TriadGameModel model)
method GameModel_OnSetupChanged (line 229) | private void GameModel_OnSetupChanged(TriadGameModel model)
method GameModel_OnDeckChanged (line 236) | private void GameModel_OnDeckChanged(TriadDeck deckOb)
method GameModel_OnNpcChanged (line 241) | private void GameModel_OnNpcChanged(TriadNpc npcOb)
method PageInfo_OnSettingsChanged (line 247) | private void PageInfo_OnSettingsChanged(object sender, SettingsEventAr...
method SyncDeckVM (line 267) | private void SyncDeckVM(DeckViewModel deckVM, List<TriadCard> cards)
method VerifyInteractiveRules (line 286) | private bool VerifyInteractiveRules(TriadGameSimulationState state)
method UpdateRules (line 319) | private void UpdateRules()
method UpdateCachedText (line 335) | private void UpdateCachedText()
method IsCardDropAllowed (line 370) | public bool IsCardDropAllowed(CardViewModel sourceCard, object sourceC...
method OnCardDragEnter (line 375) | public void OnCardDragEnter(CardViewModel sourceCard, CardViewModel de...
method OnCardDragLeave (line 381) | public void OnCardDragLeave(CardViewModel sourceCard, CardViewModel de...
method OnCardDrop (line 386) | public void OnCardDrop(CardViewModel sourceCard, CardViewModel destCar...
FILE: sources/ui/viewmodel/SetupFavDeckViewModel.cs
class SetupFavDeckViewModel (line 7) | public class SetupFavDeckViewModel : LocalizedViewModel
method SetupFavDeckViewModel (line 21) | public SetupFavDeckViewModel()
method Initialize (line 30) | public void Initialize()
method RefreshLocalization (line 55) | public override void RefreshLocalization()
method CommandFavUseFunc (line 66) | private void CommandFavUseFunc(SolvableDeckViewModel favDeck)
method AssignFavDeckFrom (line 82) | private void AssignFavDeckFrom(SolvableDeckViewModel favDeck, DeckView...
method CommandFavEditFunc (line 106) | private void CommandFavEditFunc(SolvableDeckViewModel favDeck)
method CommandFavRemoveFunc (line 123) | private void CommandFavRemoveFunc(SolvableDeckViewModel favDeck)
method CommandFavCreateFunc (line 138) | private void CommandFavCreateFunc(object dummyParam)
FILE: sources/ui/viewmodel/SimulateRulesViewModel.cs
class SimulateRulesViewModel (line 6) | public class SimulateRulesViewModel : BaseViewModel
type Rule (line 8) | public enum Rule
method SimulateRulesViewModel (line 55) | public SimulateRulesViewModel()
method RequestRuleDebug (line 68) | public void RequestRuleDebug()
method ApplyRuleDebug (line 78) | private void ApplyRuleDebug()
method RequestRuleRoulette (line 84) | public void RequestRuleRoulette()
method ApplyRuleRoulette (line 110) | private void ApplyRuleRoulette()
method RequestRuleRandom (line 134) | public void RequestRuleRandom()
method ApplyRuleRandom (line 144) | private void ApplyRuleRandom()
method RequestRuleSwap (line 159) | public void RequestRuleSwap()
method CanApplyRuleSwap (line 176) | private bool CanApplyRuleSwap()
method ApplyRuleSwap (line 181) | private void ApplyRuleSwap()
method OnSwapDeckChanged (line 194) | private void OnSwapDeckChanged(TriadDeck deckBlueOb)
method RequestRuleXOpen (line 200) | public void RequestRuleXOpen(int count)
method CanApplyRuleXOpen (line 236) | private bool CanApplyRuleXOpen()
method ApplyRuleXOpen (line 241) | private void ApplyRuleXOpen()
method MarkRuleResolved (line 246) | private void MarkRuleResolved()
method SyncDeckVM (line 252) | private void SyncDeckVM(DeckViewModel deckVM, List<TriadCard> cardsA, ...
FILE: sources/ui/viewmodel/SolvableDeckViewModel.cs
class SolvableDeckViewModel (line 6) | public class SolvableDeckViewModel : LocalizedViewModel
method SolvableDeckViewModel (line 25) | public SolvableDeckViewModel()
method Solver_OnSolved (line 32) | private void Solver_OnSolved(int id, TriadDeck deck, SolverResult chance)
method InitializeFor (line 44) | public void InitializeFor(TriadGameModel gameModel)
method RefreshSolver (line 53) | public void RefreshSolver(TriadGameModel gameModel, TriadDeck deck)
method RefreshLocalization (line 72) | public override void RefreshLocalization()
method EnableTrackingProgress (line 79) | public void EnableTrackingProgress()
method ProgressUpdate_Tick (line 85) | private void ProgressUpdate_Tick(object sender, EventArgs e)
FILE: sources/ui/viewmodel/ViewModelUtils.cs
class BaseViewModel (line 10) | public abstract class BaseViewModel : INotifyPropertyChanged
method OnPropertyChanged (line 14) | protected void OnPropertyChanged([CallerMemberName] string name = null)
method PropertySetAndNotify (line 19) | protected void PropertySetAndNotify<T>(T value, ref T property, [Calle...
class LocalizedViewModel (line 26) | public abstract class LocalizedViewModel : BaseViewModel
method RefreshLocalization (line 28) | public virtual void RefreshLocalization()
class RelayCommand (line 41) | public class RelayCommand<T> : ICommand
method RelayCommand (line 46) | public RelayCommand(Action<T> execute)
method RelayCommand (line 52) | public RelayCommand(Action<T> execute, Predicate<T> canExecute)
method RaiseCanExecuteChanged (line 64) | public void RaiseCanExecuteChanged()
method CanExecute (line 69) | public bool CanExecute(object parameter)
method Execute (line 74) | public void Execute(object parameter)
type IDialogWindowViewModel (line 80) | public interface IDialogWindowViewModel
method GetDialogWindowTitle (line 82) | string GetDialogWindowTitle();
type IOverlayWindowViewModel (line 87) | public interface IOverlayWindowViewModel
type IDialogWindowService (line 91) | public interface IDialogWindowService
method ShowDialog (line 93) | bool? ShowDialog(IDialogWindowViewModel viewModel);
type IOverlayWindowService (line 96) | public interface IOverlayWindowService
method SetOverlayActive (line 98) | void SetOverlayActive(IOverlayWindowViewModel viewModel, bool wantsAct...
method IsCursorInside (line 99) | bool IsCursorInside(Rectangle screenBounds);
method OnProcessingGameWindow (line 100) | void OnProcessingGameWindow(Rectangle gameWindowBounds, out bool inval...
method GetScreenBounds (line 101) | Rectangle GetScreenBounds(Rectangle gameWindowBounds);
type IAppWindowService (line 104) | public interface IAppWindowService
method SetFontSize (line 106) | void SetFontSize(float value);
method SetAlwaysOnTop (line 107) | void SetAlwaysOnTop(bool value);
method SetSoftwareRendering (line 108) | void SetSoftwareRendering(bool value);
class ViewModelServices (line 111) | public class ViewModelServices
FILE: sources/ui/viewmodel/WinChanceViewModel.cs
class WinChanceViewModel (line 3) | public class WinChanceViewModel : LocalizedViewModel
method SetInvalid (line 18) | public void SetInvalid()
method SetValue (line 24) | public void SetValue(SolverResult value)
method NotifyProperties (line 31) | private void NotifyProperties()
method CopyFrom (line 39) | public void CopyFrom(WinChanceViewModel other)
FILE: sources/utils-shared/AssetManager.cs
class AssetManager (line 8) | public class AssetManager
method Get (line 15) | public static AssetManager Get()
method Init (line 20) | public bool Init(byte[] zipContent)
method Close (line 37) | public void Close()
method CreateFilePath (line 43) | public string CreateFilePath(string relativeFilePath)
method GetAsset (line 59) | public Stream GetAsset(string path)
method ListAssets (line 75) | public List<string> ListAssets()
FILE: sources/utils-shared/GithubUpdater.cs
class GithubUpdater (line 12) | public class GithubUpdater
method FindAndApplyUpdates (line 17) | public static bool FindAndApplyUpdates()
method FindAndDownloadUpdates (line 29) | public static bool FindAndDownloadUpdates(out string statusMsg)
method FindOnlineVersion (line 57) | private static int FindOnlineVersion(out string downloadLink)
method DownloadUpdate (line 80) | private static void DownloadUpdate(int version, string downloadLink)
method ApplyUpdate (line 94) | private static void ApplyUpdate(string updateFilePath)
method FindPendingUpdateFile (line 146) | private static string FindPendingUpdateFile()
FILE: sources/utils-shared/JsonParser.cs
class JsonParser (line 11) | public class JsonParser
class Value (line 13) | public abstract class Value
method ToString (line 15) | public override string ToString() { return ""; }
method ToExportString (line 16) | public virtual string ToExportString() { return ToString(); }
class NullValue (line 20) | public class NullValue : Value
method NullValue (line 22) | public NullValue() { }
method ToString (line 23) | public override string ToString() { return "null"; }
class BoolValue (line 26) | public class BoolValue : Value
method BoolValue (line 30) | public BoolValue(bool bFlag) { this.bFlag = bFlag; }
method ToString (line 31) | public override string ToString() { return bFlag ? "true" : "false"; }
class IntValue (line 36) | public class IntValue : Value
method IntValue (line 40) | public IntValue(int Num) { Number = Num; }
method ToString (line 41) | public override string ToString() { return Number.ToString(); }
class FloatValue (line 46) | public class FloatValue : Value
method FloatValue (line 50) | public FloatValue(float Num) { Number = Num; }
method ToString (line 51) | public override string ToString() { return Number.ToString(); }
class StringValue (line 56) | public class StringValue : Value
method StringValue (line 60) | public StringValue(string Str) { this.Str = Str; }
method ToString (line 61) | public override string ToString() { return Str; }
method ToExportString (line 62) | public override string ToExportString() { return "\"" + Str + "\""; }
class ContainerValue (line 67) | public abstract class ContainerValue : Value
method Add (line 69) | public abstract void Add(string key, Value value);
class ObjectValue (line 72) | public class ObjectValue : ContainerValue
method Add (line 76) | public override void Add(string key, Value value)
method ToString (line 81) | public override string ToString()
class ArrayValue (line 103) | public class ArrayValue : ContainerValue
method Add (line 107) | public override void Add(string key, Value value)
method ToString (line 112) | public override string ToString()
method ParseJson (line 133) | public static ObjectValue ParseJson(string jsonStr)
class JsonWriter (line 286) | public class JsonWriter
method ToString (line 292) | public override string ToString()
method WriteRawValue (line 297) | public void WriteRawValue(string value, string key = null)
method WriteString (line 305) | public void WriteString(string value, string key = null)
method WriteBool (line 310) | public void WriteBool(bool value, string key = null)
method WriteInt (line 315) | public void WriteInt(int value, string key = null)
method WriteFloat (line 320) | public void WriteFloat(float value, string key = null)
method WriteNull (line 338) | public void WriteNull(string key = null)
method WriteObjectStart (line 343) | public void WriteObjectStart(string key = null)
method WriteObjectEnd (line 352) | public void WriteObjectEnd()
method WriteArrayStart (line 358) | public void WriteArrayStart(string key = null)
method WriteArrayEnd (line 367) | public void WriteArrayEnd()
method WriteKey (line 373) | private void WriteKey(string key = null)
FILE: sources/utils-shared/LocResourceManager.cs
class LocResourceManager (line 10) | public class LocResourceManager
method LocResourceManager (line 24) | public LocResourceManager()
method Get (line 54) | public static LocResourceManager Get()
method FindString (line 59) | public string FindString(string key, bool defaultToNull = false)
method SetCurrentUserLanguage (line 73) | public void SetCurrentUserLanguage(CultureInfo cultureInfo, Type strin...
method LoadResourceHierarchy (line 103) | public void LoadResourceHierarchy(List<string> paths)
method LoadResource (line 112) | public void LoadResource(string path)
method CopyToStringContainer (line 153) | public void CopyToStringContainer(Type stringContainerType)
FILE: sources/utils-shared/Logger.cs
class Logger (line 7) | public class Logger
method Initialize (line 14) | public static void Initialize(string[] Args)
method Close (line 39) | public static void Close()
method IsActive (line 44) | public static bool IsActive()
method IsSuperVerbose (line 49) | public static bool IsSuperVerbose()
method WriteLine (line 54) | public static void WriteLine(string str)
method WriteLine (line 75) | public static void WriteLine(string fmt, params object[] args)
FILE: sources/utils-shared/MLDataExporter.cs
class MLDataExporter (line 7) | public class MLDataExporter
method StartDataExport (line 12) | public void StartDataExport(string logDesc)
method FinishDataExport (line 20) | public void FinishDataExport(string fileName)
method ExportValues (line 39) | public void ExportValues(float[] values, int classId)
method ExportValuesWithContext (line 48) | public void ExportValuesWithContext(float[] values, int classId, int c...
FILE: sources/utils-shared/MLUtils.cs
class MLUtils (line 5) | public class MLUtils
method CalcNetworkLayer (line 7) | public static void CalcNetworkLayer(float[] input, float[] output, flo...
method ApplySigmoid (line 20) | public static void ApplySigmoid(float[] arr)
method ApplyRelu (line 28) | public static void ApplyRelu(float[] arr)
method ApplySoftmax (line 39) | public static void ApplySoftmax(float[] arr)
method PickHighestProbability (line 64) | public static int PickHighestProbability(float[] arr, out float Pct)
FILE: sources/utils/DataCoverter.cs
class DataConverter (line 11) | class DataConverter
method Run (line 13) | public void Run()
method BuildRuleNameMap (line 45) | private Dictionary<string, TriadGameModifier> BuildRuleNameMap()
method ExportRuleNames (line 60) | private bool ExportRuleNames(List<GameDataRule> gameDataRules, Diction...
method BuildCardTypes (line 96) | private Dictionary<string, ETriadCardType> BuildCardTypes()
method ExportCardTypes (line 109) | private bool ExportCardTypes(List<GameDataCardType> gameDataCardTypes,...
method UpdateCards (line 145) | private bool UpdateCards(GameDataLists gameDataLists, Dictionary<strin...
method UpdateNpcs (line 213) | private bool UpdateNpcs(GameDataLists gameDataLists, Dictionary<string...
method UpdateTournaments (line 313) | private bool UpdateTournaments(GameDataLists gameDataLists, Dictionary...
method ValidateCardIds (line 384) | private bool ValidateCardIds(GameDataLists gameDataLists)
method ValidateNpcIds (line 408) | private bool ValidateNpcIds(GameDataLists gameDataLists)
FILE: sources/utils/TestManager.cs
class TestManager (line 8) | public class TestManager
method RunTests (line 13) | public static void RunTests()
method RunTests (line 25) | public static void RunTests(string path, ScreenAnalyzer.EMode mode)
method RunTriadSolverTests (line 96) | public static void RunTriadSolverTests(string path)
FILE: sources/utils/XInputStub.cs
class XInputStub (line 9) | class XInputStub
method XInputStub (line 62) | static XInputStub()
method RetrieveController (line 75) | public static XInputStub RetrieveController(int index)
method XInputStub (line 80) | private XInputStub(int playerIndex)
method UpdateBatteryState (line 86) | public void UpdateBatteryState()
method OnStateChanged (line 105) | protected void OnStateChanged()
method GetCapabilities (line 111) | public XInputCapabilities GetCapabilities()
method StartPolling (line 250) | public static void StartPolling()
method StopPolling (line 265) | public static void StopPolling()
method PollerLoop (line 271) | static void PollerLoop()
method UpdateState (line 295) | public bool UpdateState()
method Vibrate (line 353) | public void Vibrate(double leftMotor, double rightMotor)
method Vibrate (line 358) | public void Vibrate(double leftMotor, double rightMotor, TimeSpan length)
method Vibrate (line 368) | public void Vibrate(XInputVibration strength)
method Vibrate (line 381) | public void Vibrate(XInputVibration strength, TimeSpan length)
method ToString (line 400) | public override string ToString()
type XInputGamepad (line 406) | [StructLayout(LayoutKind.Explicit)]
method IsButtonPressed (line 437) | public bool IsButtonPressed(int buttonFlags)
method IsButtonPresent (line 442) | public bool IsButtonPresent(int buttonFlags)
method Copy (line 447) | public void Copy(XInputGamepad source)
method Equals (line 458) | public override bool Equals(object obj)
method GetHashCode (line 472) | public override int GetHashCode()
type XInputVibration (line 478) | [StructLayout(LayoutKind.Sequential)]
type XInputState (line 488) | [StructLayout(LayoutKind.Explicit)]
method Copy (line 497) | public void Copy(XInputState source)
method Equals (line 503) | public override bool Equals(object obj)
method GetHashCode (line 513) | public override int GetHashCode()
type XInputCapabilities (line 519) | [StructLayout(LayoutKind.Explicit)]
type XInputBatteryInformation (line 541) | [StructLayout(LayoutKind.Explicit)]
class XInputNative (line 553) | public class XInputNative
method XInputGetState (line 555) | [DllImport("xinput1_4.dll")]
method XInputSetState (line 562) | [DllImport("xinput1_4.dll")]
method XInputGetCapabilities (line 569) | [DllImport("xinput1_4.dll")]
method XInputGetBatteryInformation (line 578) | [DllImport("xinput1_4.dll")]
class XboxControllerStateChangedEventArgs (line 587) | public class XboxControllerStateChangedEventArgs : EventArgs
type ButtonFlags (line 593) | [Flags]
type ControllerSubtypes (line 612) | [Flags]
type BatteryTypes (line 627) | public enum BatteryTypes : byte
type BatteryLevel (line 642) | public enum BatteryLevel : byte
type BatteryDeviceType (line 650) | public enum BatteryDeviceType : byte
class XInputConstants (line 656) | public class XInputConstants
type CapabilityFlags (line 668) | public enum CapabilityFlags
class XInputPoint (line 694) | public class XInputPoint
FILE: sources/utils/datamine/CsvData.cs
class CsvLocalizedData (line 9) | public class CsvLocalizedData
method GetNumRows (line 16) | public int GetNumRows() { return (data != null) ? data.rows.Count : 0; }
method GetNumColumns (line 17) | public int GetNumColumns() { return (data != null && data.rows.Count >...
method GetNumLanguages (line 18) | public int GetNumLanguages() { return mapLanguages.Count; }
method GetLocalizedText (line 20) | public LocString GetLocalizedText(int rowIdx, int columnIdx, int keyCo...
method LoadFrom (line 47) | public static CsvLocalizedData LoadFrom(string path, int numRowsToSkip...
class CsvData (line 74) | public class CsvData
method LoadFrom (line 78) | public static CsvData LoadFrom(string path, int numRowsToSkip = 2)
method CountStringSep (line 128) | private static int CountStringSep(string csvRow)
method SplitRow (line 142) | private static string[] SplitRow(string csvRow)
FILE: sources/utils/datamine/GameData.cs
class GameData (line 10) | public class GameData
method IsRawDataValid (line 13) | public virtual bool IsRawDataValid(CsvLocalizedData rawData) { return ...
method Parse (line 14) | public virtual void Parse(CsvLocalizedData rawData, int rowIdx) { }
method IsValid (line 15) | public virtual bool IsValid() { return Id > 0; }
method Link (line 16) | public virtual bool Link(GameDataLists lists) { return false; }
class GameDataRule (line 20) | public class GameDataRule : GameData
method ToString (line 24) | public override string ToString() { return Id + ": " + Name; }
method IsRawDataValid (line 25) | public override bool IsRawDataValid(CsvLocalizedData rawData) { return...
method Parse (line 27) | public override void Parse(CsvLocalizedData rawData, int rowIdx)
method Link (line 38) | public override bool Link(GameDataLists lists)
class GameDataCardType (line 45) | public class GameDataCardType : GameData
method ToString (line 49) | public override string ToString() { return Id + ": " + Type; }
method IsRawDataValid (line 50) | public override bool IsRawDataValid(CsvLocalizedData rawData) { return...
method Parse (line 52) | public override void Parse(CsvLocalizedData rawData, int rowIdx)
method Link (line 63) | public override bool Link(GameDataLists lists)
class GameDataCardName (line 70) | public class GameDataCardName : GameData
method ToString (line 74) | public override string ToString() { return Id + ": " + Name; }
method IsRawDataValid (line 75) | public override bool IsRawDataValid(CsvLocalizedData rawData) { return...
method Parse (line 77) | public override void Parse(CsvLocalizedData rawData, int rowIdx)
method Link (line 88) | public override bool Link(GameDataLists lists)
class GameDataCard (line 95) | public class GameDataCard : GameData
method ToString (line 111) | public override string ToString() { return string.Format("{0}: [{1}-{2...
method IsRawDataValid (line 112) | public override bool IsRawDataValid(CsvLocalizedData rawData) { return...
method Parse (line 114) | public override void Parse(CsvLocalizedData rawData, int rowIdx)
method HasMatchingLocSide (line 160) | public bool HasMatchingLocSide(int[] sideNums)
method Link (line 165) | public override bool Link(GameDataLists lists)
class GameDataNpcTriadId (line 181) | public class GameDataNpcTriadId : GameData
method ToString (line 191) | public override string ToString() { return Id + ": " + TriadId; }
method IsRawDataValid (line 192) | public override bool IsRawDataValid(CsvLocalizedData rawData) { return...
method IsValid (line 193) | public override bool IsValid() { return TriadId != 0; }
method Parse (line 195) | public override void Parse(CsvLocalizedData rawData, int rowIdx)
method Link (line 212) | public override bool Link(GameDataLists lists)
class GameDataNpcName (line 244) | public class GameDataNpcName : GameData
method ToString (line 248) | public override string ToString() { return Id + ": " + Name; }
method IsRawDataValid (line 249) | public override bool IsRawDataValid(CsvLocalizedData rawData) { return...
method IsValid (line 250) | public override bool IsValid() { return Name != null; }
method Parse (line 252) | public override void Parse(CsvLocalizedData rawData, int rowIdx)
method Link (line 263) | public override bool Link(GameDataLists lists)
class GameDataNpcLocation (line 270) | public class GameDataNpcLocation : GameData
method ToString (line 282) | public override string ToString() { return Id + ": " + MapCode; }
method IsRawDataValid (line 283) | public override bool IsRawDataValid(CsvLocalizedData rawData) { return...
method IsValid (line 284) | public override bool IsValid() { return !string.IsNullOrEmpty(MapCode); }
method Parse (line 286) | public override void Parse(CsvLocalizedData rawData, int rowIdx)
method Link (line 299) | public override bool Link(GameDataLists lists)
class GameDataNpc (line 315) | public class GameDataNpc : GameData
method ToString (line 330) | public override string ToString() { return string.Format("{0}: {1}", I...
method IsRawDataValid (line 331) | public override bool IsRawDataValid(CsvLocalizedData rawData) { return...
method IsValid (line 332) | public override bool IsValid() { return (CardsFixed.Count > 0) || (Car...
method Parse (line 334) | public override void Parse(CsvLocalizedData rawData, int rowIdx)
method HasMatchingCards (line 403) | public bool HasMatchingCards(string[] cards)
method Link (line 430) | public override bool Link(GameDataLists lists)
class GameDataMap (line 508) | public class GameDataMap : GameData
method GetCoords (line 518) | public void GetCoords(float ScaledX, float ScaledY, out int MapX, out ...
method CovertCoordTo2d (line 524) | private int CovertCoordTo2d(float Coord, float Offset)
method ToString (line 531) | public override string ToString() { return MapCode + ": " + Name; }
method IsRawDataValid (line 532) | public override bool IsRawDataValid(CsvLocalizedData rawData) { return...
method IsValid (line 533) | public override bool IsValid() { return !string.IsNullOrEmpty(Name); }
method Parse (line 535) | public override void Parse(CsvLocalizedData rawData, int rowIdx)
method Link (line 549) | public override bool Link(GameDataLists lists)
class GameDataPlaceName (line 562) | public class GameDataPlaceName : GameData
method ToString (line 566) | public override string ToString() { return Name.ToString(); }
method IsRawDataValid (line 567) | public override bool IsRawDataValid(CsvLocalizedData rawData) { return...
method IsValid (line 568) | public override bool IsValid() { return Name != null; }
method Parse (line 570) | public override void Parse(CsvLocalizedData rawData, int rowIdx)
method Link (line 580) | public override bool Link(GameDataLists lists)
class GameDataTournamentName (line 587) | public class GameDataTournamentName : GameData
method ToString (line 591) | public override string ToString() { return Id + ": " + Name; }
method IsRawDataValid (line 592) | public override bool IsRawDataValid(CsvLocalizedData rawData) { return...
method IsValid (line 593) | public override bool IsValid() { return Name != null; }
method Parse (line 595) | public override void Parse(CsvLocalizedData rawData, int rowIdx)
method Link (line 606) | public override bool Link(GameDataLists lists)
class GameDataTournament (line 613) | public class GameDataTournament : GameData
method ToString (line 619) | public override string ToString() { return Id + ": " + RuleIds.Count; }
method IsRawDataValid (line 620) | public override bool IsRawDataValid(CsvLocalizedData rawData) { return...
method Parse (line 622) | public override void Parse(CsvLocalizedData rawData, int rowIdx)
method Link (line 640) | public override bool Link(GameDataLists lists)
class GameDataLists (line 659) | public class GameDataLists
method Load (line 674) | public void Load(string folderPath)
method Link (line 693) | public bool Link()
method LoadGameData (line 716) | private List<T> LoadGameData<T>(string folderPath, string pathNoExt) w...
method LinkGameData (line 750) | private bool LinkGameData<T>(List<T> list) where T : GameData
FILE: sources/utils/tlsh/BucketSize.cs
type BucketSize (line 64) | public enum BucketSize
FILE: sources/utils/tlsh/ChecksumSize.cs
type ChecksumSize (line 64) | public enum ChecksumSize
FILE: sources/utils/tlsh/TlshBuilder.cs
class TlshBuilder (line 67) | public class TlshBuilder
method TlshBuilder (line 92) | public TlshBuilder() : this(BucketSize.Buckets128, ChecksumSize.Checks...
method TlshBuilder (line 94) | public TlshBuilder(BucketSize bucketSize, ChecksumSize checksumSize)
method LoadFromString (line 111) | public void LoadFromString(string input)
method LoadFromStringAsync (line 125) | public async Task LoadFromStringAsync(string input)
method Update (line 139) | public void Update(byte[] data)
method Update (line 144) | public void Update(byte[] data, int offset, int byteArrDataLength)
method FindQuartiles (line 209) | private uint[] FindQuartiles()
method GetHash (line 224) | public TlshHash GetHash(bool force)
method Reset (line 279) | public void Reset()
method IsValid (line 296) | public bool IsValid(bool force)
FILE: sources/utils/tlsh/TlshHash.cs
class TlshHash (line 67) | public class TlshHash
method FromTlshStr (line 78) | public static TlshHash FromTlshStr(string tlshStr)
method TlshHash (line 121) | public TlshHash(int[] checksum, int lvalue, int q1ratio, int q2ratio, ...
method TotalDiff (line 130) | public int TotalDiff(TlshHash otherHash, bool lengthDiff)
method ToString (line 176) | public override string ToString()
method GetEncoded (line 181) | public string GetEncoded()
method HashStringLength (line 202) | private static int HashStringLength(BucketSize bucketSize, ChecksumSiz...
method HashStringLength (line 207) | private int HashStringLength()
FILE: sources/utils/tlsh/TlshUtilities.cs
class TlshUtilities (line 68) | public static class TlshUtilities
method PearsonHash (line 107) | public static int PearsonHash(int salt, int i, int j, int k)
method LengthCapture (line 120) | public static int LengthCapture(int len)
method ModDiff (line 139) | public static int ModDiff(int x, int y, int r)
method HashDistance (line 162) | public static int HashDistance(int[] x, int[] y)
method GenerateStreamFromString (line 178) | public static Stream GenerateStreamFromString(string s)
method ToHex (line 190) | public static void ToHex(int src, StringBuilder dest)
method ToHexSwapped (line 196) | public static void ToHexSwapped(int src, StringBuilder dest)
method FromHex (line 202) | public static int FromHex(String src, int offset)
method FromHexSwapped (line 209) | public static int FromHexSwapped(String src, int offset)
method HexCharToInt (line 216) | private static int HexCharToInt(char hexChar)
class DiffTable (line 239) | private static class DiffTable
method GenerateTable (line 243) | private static int[,] GenerateTable()
FILE: sources/vision/ImageUtils.cs
type FastPixelHSV (line 9) | public struct FastPixelHSV
method FastPixelHSV (line 21) | public FastPixelHSV(byte colorR, byte colorG, byte colorB)
method FastPixelHSV (line 33) | public FastPixelHSV(bool patternMatch)
method GetHue (line 45) | public int GetHue()
method GetSaturation (line 50) | public int GetSaturation()
method GetValue (line 55) | public int GetValue()
method GetMonochrome (line 60) | public int GetMonochrome()
method SetHSV (line 65) | public void SetHSV(int hue, int saturation, int value)
method ExpandHSV (line 79) | public void ExpandHSV()
method ToString (line 132) | public override string ToString()
class FastPixelMatch (line 138) | public abstract class FastPixelMatch
method IsMatching (line 140) | public abstract bool IsMatching(FastPixelHSV pixel);
class FastPixelMatchHSV (line 143) | public class FastPixelMatchHSV : FastPixelMatch
method FastPixelMatchHSV (line 152) | public FastPixelMatchHSV(short hueMin, short hueMax, byte saturationMi...
method IsMatching (line 162) | public override bool IsMatching(FastPixelHSV pixel)
method ToString (line 171) | public override string ToString()
class FastPixelMatchMono (line 179) | public class FastPixelMatchMono : FastPixelMatch
method FastPixelMatchMono (line 184) | public FastPixelMatchMono(byte monoMin, byte monoMax)
method IsMatching (line 190) | public override bool IsMatching(FastPixelHSV pixel)
method ToString (line 195) | public override string ToString()
class FastPixelMatchHueMono (line 201) | public class FastPixelMatchHueMono : FastPixelMatch
method FastPixelMatchHueMono (line 208) | public FastPixelMatchHueMono(short hueMin, short hueMax, byte monoMin,...
method IsMatching (line 216) | public override bool IsMatching(FastPixelHSV pixel)
method ToString (line 227) | public override string ToString()
class FastBitmapHSV (line 233) | public class FastBitmapHSV
method GetPixel (line 239) | public FastPixelHSV GetPixel(int X, int Y)
method GetPixelRaw (line 250) | public FastPixelHSV GetPixelRaw(int X, int Y)
method SetPixel (line 255) | public void SetPixel(int X, int Y, FastPixelHSV pixel)
method SetPixel (line 260) | public void SetPixel(int Idx, FastPixelHSV pixel)
method ToString (line 265) | public override string ToString()
class ImageUtils (line 271) | public class ImageUtils
type HashPreview (line 273) | public struct HashPreview
method ConvertToFastBitmap (line 279) | public static FastBitmapHSV ConvertToFastBitmap(Bitmap image)
method ConvertToBitmap (line 309) | public static Bitmap ConvertToBitmap(FastBitmapHSV bitmap)
method DrawDebugShapes (line 338) | public static void DrawDebugShapes(Bitmap bitmap, List<Rectangle> bounds)
method DrawDebugHashes (line 349) | public static void DrawDebugHashes(Bitmap bitmap, List<HashPreview> ha...
method DrawDebugHash (line 383) | public static void DrawDebugHash(Bitmap bitmap, HashPreview hashPrevie...
method GetColorFromHSV (line 410) | public static Color GetColorFromHSV(FastPixelHSV pixel)
method HsvToRgb (line 417) | public static void HsvToRgb(double h, double S, double V, out int r, o...
method TraceLineSegments (line 508) | public static List<int> TraceLineSegments(FastBitmapHSV bitmap, int po...
method TraceLine (line 558) | public static bool TraceLine(FastBitmapHSV bitmap, int posX, int posY,...
method TraceSpansV (line 583) | public static List<Point> TraceSpansV(FastBitmapHSV bitmap, Rectangle ...
method TraceSpansH (line 632) | public static List<Point> TraceSpansH(FastBitmapHSV bitmap, Rectangle ...
method TraceBoundsH (line 681) | public static Point TraceBoundsH(FastBitmapHSV bitmap, Rectangle box, ...
method CountFillPct (line 784) | public static float CountFillPct(FastBitmapHSV bitmap, Rectangle box, ...
method GetAverageColor (line 800) | public static FastPixelHSV GetAverageColor(FastBitmapHSV bitmap, Recta...
method FindColorRange (line 823) | public static void FindColorRange(FastBitmapHSV bitmap, Rectangle box,...
method CreateFloodFillBitmap (line 838) | public static bool CreateFloodFillBitmap(FastBitmapHSV srcBitmap, Poin...
method GetPixelFeaturesMono (line 912) | public static float GetPixelFeaturesMono(FastPixelHSV testPx)
method GetPixelFeaturesHue (line 917) | public static float GetPixelFeaturesHue(FastPixelHSV testPx)
method GetPixelFeaturesHueMono (line 922) | public static float GetPixelFeaturesHueMono(FastPixelHSV testPx)
method GetPixelFeaturesM2V2 (line 937) | public static float GetPixelFeaturesM2V2(FastPixelHSV testPx)
method ExtractImageFeaturesScaled (line 945) | public static float[] ExtractImageFeaturesScaled(FastBitmapHSV bitmap,...
method NormalizeImageFeatures (line 995) | public static void NormalizeImageFeatures(float[] values)
method CreatePreviewImage (line 1015) | public static Bitmap CreatePreviewImage(Bitmap sourceImage, Rectangle ...
FILE: sources/vision/MLClassifierCactpot.cs
class MLClassifierCactpot (line 5) | public class MLClassifierCactpot
method Calculate (line 12) | public int Calculate(float[] input, out float BestPct)
method InitializeModel (line 25) | public void InitializeModel()
FILE: sources/vision/MLClassifierTriadDigit.cs
class MLClassifierTriadDigit (line 5) | public class MLClassifierTriadDigit
method Calculate (line 12) | public int Calculate(float[] input, out float BestPct)
method InitializeModel (line 25) | public void InitializeModel()
FILE: sources/vision/ScannerBase.cs
class ScannerBase (line 9) | public class ScannerBase
class GameStateBase (line 11) | public class GameStateBase
method Initialize (line 22) | public void Initialize(ScreenAnalyzer parent)
method InvalidateCache (line 30) | public virtual void InvalidateCache()
method HasValidCache (line 35) | public virtual bool HasValidCache(FastBitmapHSV bitmap, int scannerFlags)
method DoWork (line 40) | public virtual bool DoWork(FastBitmapHSV bitmap, int scannerFlags, Sto...
method AppendDebugShapes (line 49) | public virtual void AppendDebugShapes(List<Rectangle> shapes, List<Ima...
method ValidateScan (line 55) | public virtual void ValidateScan(string configPath, ScreenAnalyzer.EMo...
FILE: sources/vision/ScannerCactpot.cs
class ScannerCactpot (line 10) | public class ScannerCactpot : ScannerBase
class GameState (line 12) | public class GameState : GameStateBase
method GameState (line 17) | public GameState()
method ScannerCactpot (line 38) | public ScannerCactpot()
method InvalidateCache (line 44) | public override void InvalidateCache()
method HasValidCache (line 52) | public override bool HasValidCache(FastBitmapHSV bitmap, int scannerFl...
method GetBoardBox (line 57) | public Rectangle GetBoardBox() { return cachedBoard; }
method GetCircleBox (line 58) | public Rectangle GetCircleBox(int idx) { return cachedCircles[idx]; }
method AppendDebugShapes (line 60) | public override void AppendDebugShapes(List<Rectangle> shapes, List<Im...
method DoWork (line 66) | public override bool DoWork(FastBitmapHSV bitmap, int scannerFlags, St...
method FindCactpotCoords (line 106) | private Rectangle FindCactpotCoords(FastBitmapHSV bitmap)
method HasCactpotCircleMatch (line 160) | private bool HasCactpotCircleMatch(FastBitmapHSV bitmap, int posX, int...
method HasCactpotMatch (line 258) | private bool HasCactpotMatch(FastBitmapHSV bitmap, int posX, int posY,...
method HasCactpotCircleEdgeV (line 294) | private bool HasCactpotCircleEdgeV(FastBitmapHSV bitmap, int posX, int...
method HasCactpotCellMatch (line 351) | private bool HasCactpotCellMatch(FastBitmapHSV bitmap, int posX, int p...
method FindCactpotCircleCoords (line 381) | private Rectangle[] FindCactpotCircleCoords(Rectangle cactpotBox)
method GetCirclePatternBounds (line 397) | private Rectangle GetCirclePatternBounds(Rectangle circleBox)
method ExtractCirclePattern (line 402) | private float[] ExtractCirclePattern(FastBitmapHSV bitmap, Rectangle c...
method ParseCactpotCircle (line 407) | private int ParseCactpotCircle(FastBitmapHSV bitmap, Rectangle circleB...
method ValidateScan (line 441) | public override void ValidateScan(string configPath, ScreenAnalyzer.EM...
method LoadValidationConfig (line 499) | private GameState LoadValidationConfig(string configPath)
FILE: sources/vision/ScannerTriad.cs
class ScannerTriad (line 10) | public class ScannerTriad : ScannerBase
type ETurnState (line 12) | public enum ETurnState
class GameState (line 19) | public class GameState : GameStateBase
method GameState (line 29) | public GameState()
type ECardLocation (line 41) | public enum ECardLocation
type ECardState (line 48) | public enum ECardState
class CardState (line 58) | public class CardState : IComparable<CardState>
type SideInfo (line 60) | public struct SideInfo
method CompareTo (line 83) | public int CompareTo(CardState other)
method ToString (line 90) | public override string ToString()
type ESide (line 96) | [Flags]
type EScanMode (line 106) | [Flags]
type EScanError (line 113) | public enum EScanError
method ScannerTriad (line 149) | public ScannerTriad()
method InvalidateCache (line 155) | public override void InvalidateCache()
method HasValidCache (line 165) | public override bool HasValidCache(FastBitmapHSV bitmap, int scannerFl...
method GetBoardBox (line 175) | public Rectangle GetBoardBox() { return cachedGridBox; }
method GetRuleBox (line 176) | public Rectangle GetRuleBox() { return cachedRuleBox; }
method GetTimerScanBox (line 177) | public Rectangle GetTimerScanBox() { return cachedTimerScanBox; }
method GetBlueCardBox (line 178) | public Rectangle GetBlueCardBox(int idx) { return cachedBlueCards[idx]; }
method GetBoardCardBox (line 179) | public Rectangle GetBoardCardBox(int idx) { return cachedBoardCards[id...
method GetDigitHashSize (line 180) | public static Size GetDigitHashSize() { return digitHashSize; }
method AppendDebugShapes (line 182) | public override void AppendDebugShapes(List<Rectangle> shapes, List<Im...
method DoWork (line 193) | public override bool DoWork(FastBitmapHSV bitmap, int scannerFlags, St...
method FindGridCoords (line 388) | private Rectangle FindGridCoords(FastBitmapHSV bitmap)
method HasGridVertexMatch (line 444) | private bool HasGridVertexMatch(FastBitmapHSV bitmap, int posX, int po...
method HasGridMatch (line 539) | private bool HasGridMatch(FastBitmapHSV bitmap, int posX, int posY, in...
method FindRuleBoxCoords (line 579) | private Rectangle FindRuleBoxCoords(FastBitmapHSV bitmap, Rectangle gr...
method FindTimerBox (line 663) | private Rectangle FindTimerBox(FastBitmapHSV bitmap, Rectangle gridRec...
method FindTimerBox (line 687) | private Rectangle FindTimerBox(FastBitmapHSV bitmap, Rectangle timerSc...
method FindBlueCardCoords (line 705) | private Rectangle[] FindBlueCardCoords(FastBitmapHSV bitmap, Rectangle...
method FindRedCardCoords (line 805) | private Rectangle[] FindRedCardCoords(Rectangle gridRect, Rectangle[] ...
method FindBoardCardCoords (line 821) | private Rectangle[] FindBoardCardCoords(Rectangle gridRect, Rectangle[...
method ParseRules (line 845) | private void ParseRules(FastBitmapHSV bitmap, Rectangle rulesRect, Lis...
method FindExactCardBottom (line 889) | private bool FindExactCardBottom(FastBitmapHSV bitmap, Rectangle cardR...
method FindExactCardTop (line 952) | private bool FindExactCardTop(FastBitmapHSV bitmap, Rectangle cardRect...
method FindExactCardMidX (line 1015) | private int FindExactCardMidX(FastBitmapHSV bitmap, Rectangle cardRect...
method ExtractCardNumberPattern (line 1103) | private float[] ExtractCardNumberPattern(FastBitmapHSV bitmap, Rectang...
method ParseCard (line 1108) | private CardState ParseCard(FastBitmapHSV bitmap, Rectangle cardRect, ...
method ParseCardOwner (line 1254) | private ETriadCardOwner ParseCardOwner(FastBitmapHSV bitmap, Rectangle...
method ParseTimer (line 1282) | private bool ParseTimer(FastBitmapHSV bitmap, Rectangle timerRect)
class VerifyCard (line 1294) | public class VerifyCard
method VerifyCard (line 1301) | public VerifyCard()
method ToString (line 1308) | public override string ToString()
method Load (line 1315) | public void Load(JsonParser.ObjectValue cardOb)
class VerifyConfig (line 1346) | public class VerifyConfig
method VerifyConfig (line 1354) | public VerifyConfig()
method ToString (line 1362) | public override string ToString()
method Load (line 1367) | public virtual void Load(JsonParser.ObjectValue configOb)
method ValidateScan (line 1412) | public override void ValidateScan(string configPath, ScreenAnalyzer.EM...
FILE: sources/vision/ScreenAnalyzer.cs
class ScreenAnalyzer (line 11) | public class ScreenAnalyzer
type EState (line 13) | public enum EState
type EStateIcon (line 22) | public enum EStateIcon
type EMode (line 31) | [Flags]
method ScreenAnalyzer (line 69) | public ScreenAnalyzer()
method DoWork (line 88) | public void DoWork(EMode mode = EMode.Default, int scannerFlags = 0)
method GetCurrentState (line 231) | public EState GetCurrentState() { return currentState; }
method OnScannerError (line 233) | public void OnScannerError()
method AddImageHash (line 241) | public void AddImageHash(ImageHashData hashData)
method PopUnknownHash (line 272) | public void PopUnknownHash()
method ClearAll (line 285) | public void ClearAll()
method ClearKnownHashes (line 295) | public void ClearKnownHashes()
method ConvertGameToScreen (line 300) | public Rectangle ConvertGameToScreen(Rectangle gameBounds)
method InitializeScreenData (line 305) | public void InitializeScreenData()
method GetDefaultScreenshotPath (line 311) | public string GetDefaultScreenshotPath()
method LoadInputImage (line 326) | private bool LoadInputImage(EMode mode, Stopwatch perfTimer, Rectangle...
FILE: sources/vision/ScreenReader.cs
class ScreenReader (line 12) | public class ScreenReader
type EState (line 14) | public enum EState
method TakeScreenshot (line 30) | public bool TakeScreenshot(Rectangle optClipBounds)
method LoadScreenshot (line 43) | public bool LoadScreenshot(string path, Rectangle optClipBounds)
method InitializeScreenData (line 69) | public void InitializeScreenData()
method ConvertGameToScreen (line 84) | public Rectangle ConvertGameToScreen(Rectangle gameBounds)
method GetCachedGameWindow (line 97) | public Rectangle GetCachedGameWindow()
method FindGameWindow (line 102) | private HandleRef FindGameWindow()
method GetGameWindowBoundsRaw (line 177) | private Rectangle GetGameWindowBoundsRaw(HandleRef windowHandle)
method GetGameWindowBounds (line 197) | private Rectangle GetGameWindowBounds(HandleRef windowHandle)
method CaptureWindow (line 236) | private bool CaptureWindow(HandleRef windowHandle)
method CaptureWindowPartial (line 267) | private bool CaptureWindowPartial(HandleRef windowHandle, Rectangle in...
method GetWindowRect (line 297) | [DllImport("user32.dll")]
method EnumDisplaySettings (line 301) | [DllImport("user32.dll")]
type RECT (line 304) | [StructLayout(LayoutKind.Sequential)]
method ToString (line 312) | public override string ToString()
type DEVMODE (line 318) | [StructLayout(LayoutKind.Sequential)]
method PrintWindow (line 357) | [DllImport("user32.dll", SetLastError = true)]
Condensed preview — 169 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,905K chars).
[
{
"path": ".gitignore",
"chars": 6041,
"preview": "*.json\n*.lnk\nsources/assets.zip\nsources/googleapi/GoogleClientIdentifiers.cs\ntest/*\ndatasource/*\nreleases/*\nml/*/data/*\n"
},
{
"path": "FFTriadBuddy.sln",
"chars": 1103,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 15\nVisualStudioVersion = 15.0.27703.2026\nM"
},
{
"path": "LICENSE",
"chars": 1064,
"preview": "MIT License\n\nCopyright (c) 2019 MgAl2O4\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof"
},
{
"path": "README.md",
"chars": 1858,
"preview": "# FFTriadBuddy\r\nHelper program for Triple Triad minigame in [Final Fantasy XIV](https://www.finalfantasyxiv.com/), NPC m"
},
{
"path": "assets/data/cards.xml",
"chars": 39440,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <card id=\"1\" rarity=\"0\" type=\"0\" up=\"4\" lt=\"2\" dn=\"3\" rt=\"4\" sort=\"1\" g"
},
{
"path": "assets/data/hashes.xml",
"chars": 2628,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <hash type=\"Rule\" value=\"734146C648739673E4F01B3AE4FD069931BDE015D08686F"
},
{
"path": "assets/data/loc.xml",
"chars": 81714,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <loc type=\"1\" id=\"0\" en=\"\" />\n <loc type=\"1\" id=\"1\" de=\"Zufällig\" en=\""
},
{
"path": "assets/data/npcs.xml",
"chars": 30620,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <npc id=\"1\" mx=\"4\" my=\"8\">\n <deckA id0=\"51\" id1=\"24\" id2=\"37\" id3=\"0"
},
{
"path": "assets/data/tournaments.xml",
"chars": 368,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <tournament id=\"0\">\n <rule id=\"2\" />\n <rule id=\"8\" />\n </tournam"
},
{
"path": "datasource/!Start.bat",
"chars": 2282,
"preview": "@echo off\nsetlocal\n\nif not exist SaintCoinach goto MISSING_SAINT\nif not exist SetUserVars.bat goto MISSING_PATH\ncall Set"
},
{
"path": "ml/patternMatch/nn.py",
"chars": 3040,
"preview": "import tensorflow as tf\nimport numpy as np\nimport json\nimport textwrap\n\nfrom tensorflow import keras\nfrom tqdm.keras imp"
},
{
"path": "ml/patternMatch/run-everything.bat",
"chars": 120,
"preview": "@echo off\n\nset ToolPath=%localappdata%/Programs/Python/Python38\n\nfor %%i in (train-*.py) do %ToolPath%/python %%i\n\npause"
},
{
"path": "ml/patternMatch/train-cactpot.py",
"chars": 150,
"preview": "from nn import NNTraining\n\ntraining = NNTraining(inputFile='ml-cactpot.json', outputFile='ml-cactpot.txt')\ntraining.run("
},
{
"path": "ml/patternMatch/train-triad.py",
"chars": 146,
"preview": "from nn import NNTraining\n\ntraining = NNTraining(inputFile='ml-triad.json', outputFile='ml-triad.txt')\ntraining.run(numH"
},
{
"path": "ml/solver/agents/agent.py",
"chars": 645,
"preview": "class Agent:\n def __init__(self, game):\n pass\n\n def findAction(self, game, state):\n raise RuntimeErr"
},
{
"path": "ml/solver/agents/agentDQN.py",
"chars": 4032,
"preview": "import os\nimport math\nimport numpy as np\nfrom .agent import Agent\nfrom utils.trainingMemory import TrainingMemoryCircula"
},
{
"path": "ml/solver/agents/agentRandom.py",
"chars": 442,
"preview": "import random\nfrom .agent import Agent\n\nclass AgentRandom(Agent):\n def __init__(self, game):\n self.randGen = r"
},
{
"path": "ml/solver/environment.py",
"chars": 1483,
"preview": "class Environment(object):\n def __init__(self, game, playerAgents):\n self.game = game\n self.players = p"
},
{
"path": "ml/solver/gameSession.py",
"chars": 4711,
"preview": "from gamelogic.triadCard import TriadCardDB\nfrom gamelogic.triadDeck import TriadDeck\nfrom gamelogic.triadGame import Tr"
},
{
"path": "ml/solver/gamelogic/triadCard.py",
"chars": 3162,
"preview": "from xml.dom import minidom\n\nclass TriadCard:\n def __init__(self, name, rarity, cardType, sideUp, sideLeft, sideDown,"
},
{
"path": "ml/solver/gamelogic/triadDeck.py",
"chars": 4487,
"preview": "from .triadCard import *\nimport random\n\nclass TriadDeck():\n cardNone = 0\n cardHidden = 1\n cardVisible = 2\n\n "
},
{
"path": "ml/solver/gamelogic/triadGame.py",
"chars": 9785,
"preview": "from .triadCard import TriadCardDB\nfrom enum import Enum\n\nclass TriadGameState(Enum):\n Unknown = 0\n BlueTurn = 1\n "
},
{
"path": "ml/solver/gamelogic/triadMods.py",
"chars": 8956,
"preview": "import random\nfrom .triadDeck import TriadDeck\nfrom .triadGame import TriadGame, TriadGameState\nimport numpy as np\n\nclas"
},
{
"path": "ml/solver/main.py",
"chars": 2318,
"preview": "from gameSession import GameSession\nfrom environment import Environment\nfrom agents.agentRandom import AgentRandom\nfrom "
},
{
"path": "ml/solver/perfTests.py",
"chars": 2363,
"preview": "import numpy as np\nimport random\nfrom tqdm import tqdm\n\nfrom gameSession import GameSession\nfrom environment import Envi"
},
{
"path": "ml/solver/utils/codeGenerator.py",
"chars": 1482,
"preview": "import os\nimport textwrap\n\nclass CodeGenerator():\n def __init__(self):\n self.layers = []\n\n def addLayer(sel"
},
{
"path": "ml/solver/utils/estimatorTorch.py",
"chars": 2942,
"preview": "import numpy as np\nimport torch\nimport torch.nn as nn\nfrom .codeGenerator import CodeGenerator\n\ntorchDevice = torch.devi"
},
{
"path": "ml/solver/utils/trainingMemory.py",
"chars": 1194,
"preview": "from collections import deque\nimport random\n\nclass TrainingMemory:\n def __init__(self, capacity):\n self.capaci"
},
{
"path": "sources/App.config",
"chars": 178,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n <startup> \n <supportedRuntime version=\"v4.0\" sku=\".NET"
},
{
"path": "sources/FFTriadBuddy.csproj",
"chars": 18513,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
},
{
"path": "sources/Properties/AssemblyInfo.cs",
"chars": 1357,
"preview": "using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled "
},
{
"path": "sources/Properties/Resources.resx",
"chars": 6050,
"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": "sources/Properties/Settings.Designer.cs",
"chars": 1068,
"preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n// This code w"
},
{
"path": "sources/Properties/Settings.settings",
"chars": 240,
"preview": "<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\""
},
{
"path": "sources/data/ImageHashDB.cs",
"chars": 12906,
"preview": "using MgAl2O4.Utils;\nusing Palit.TLSHSharp;\nusing System;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing"
},
{
"path": "sources/data/LocalizationDB.cs",
"chars": 12645,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Net;\nusin"
},
{
"path": "sources/data/PlayerSettingsDB.cs",
"chars": 22006,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Reflection;\n\nnamespa"
},
{
"path": "sources/data/TriadCardDB.cs",
"chars": 8284,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Xml;\n\nnamespace FFTr"
},
{
"path": "sources/data/TriadNpcDB.cs",
"chars": 9987,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace FFTriadBuddy\n{\n pu"
},
{
"path": "sources/data/TriadTournamentDB.cs",
"chars": 4587,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\nusing System.Xml;\n\nnamespace FFTriadBuddy\n{\n pub"
},
{
"path": "sources/gamelogic/FavDeckSolver.cs",
"chars": 3123,
"preview": "using System;\nusing System.Threading.Tasks;\n\nnamespace FFTriadBuddy\n{\n public class FavDeckSolver\n {\n priv"
},
{
"path": "sources/gamelogic/MiniCactpotGame.cs",
"chars": 9882,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\n\nnamespace FFTriadBuddy\n{"
},
{
"path": "sources/gamelogic/TriadCard.cs",
"chars": 4708,
"preview": "using System;\n\nnamespace FFTriadBuddy\n{\n public enum ETriadCardRarity\n {\n Common,\n Uncommon,\n "
},
{
"path": "sources/gamelogic/TriadDeck.cs",
"chars": 19971,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\n\nnamespace FFTriadBuddy\n{\n public enum ETriadDe"
},
{
"path": "sources/gamelogic/TriadDeckOptimizer.cs",
"chars": 34160,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Globalizati"
},
{
"path": "sources/gamelogic/TriadGameAgent.cs",
"chars": 26818,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Diagnostics;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnam"
},
{
"path": "sources/gamelogic/TriadGameModifier.cs",
"chars": 35228,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\nusing System.Reflection;\n\nnamespace FFTriadBuddy\n{"
},
{
"path": "sources/gamelogic/TriadGameScreenMemory.cs",
"chars": 30175,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\n\nnamespace FFTriadBuddy\n{\n pu"
},
{
"path": "sources/gamelogic/TriadGameSimulation.cs",
"chars": 13781,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\n\nnamespace FFTriadBuddy\n{\n public enum ETriadGa"
},
{
"path": "sources/gamelogic/TriadGameSolver.cs",
"chars": 5783,
"preview": "using System.Collections.Generic;\n\nnamespace FFTriadBuddy\n{\n public struct SolverResult\n {\n public float n"
},
{
"path": "sources/gamelogic/tests/TriadGameScreenTests.cs",
"chars": 11451,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\n\nnamespace FFTriadBuddy\n{\n public class TriadGam"
},
{
"path": "sources/gamelogic/tests/TriadGameTests.cs",
"chars": 22634,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\n\nnamespace FFTriadBuddy\n"
},
{
"path": "sources/googleapi/GoogleClientMissingIdentifiers.cs",
"chars": 243,
"preview": "using System;\n\n#warning \"API keys not available, cloud storage access will be disabled\"\n\nnamespace MgAl2O4.GoogleAPI\n{ "
},
{
"path": "sources/googleapi/GoogleDriveService.cs",
"chars": 10321,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Net;\nusing System.Te"
},
{
"path": "sources/googleapi/GoogleOAuth2.cs",
"chars": 9670,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing"
},
{
"path": "sources/loc/strings.cs",
"chars": 19287,
"preview": "namespace FFTriadBuddy.loc\n{\n public class strings\n {\n // keep default values in for editor\n\n publi"
},
{
"path": "sources/loc/strings.de.resx",
"chars": 32924,
"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": "sources/loc/strings.es.resx",
"chars": 33141,
"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": "sources/loc/strings.fr.resx",
"chars": 33121,
"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": "sources/loc/strings.ja.resx",
"chars": 30418,
"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": "sources/loc/strings.ko.resx",
"chars": 30291,
"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": "sources/loc/strings.resx",
"chars": 31931,
"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": "sources/loc/strings.zh.resx",
"chars": 29640,
"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": "sources/ui/App.xaml",
"chars": 5414,
"preview": "<Application x:Class=\"FFTriadBuddy.UI.App\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentatio"
},
{
"path": "sources/ui/App.xaml.cs",
"chars": 4691,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Globalization;\nusing System.Reflection;\nusing System.Resources;\nusing S"
},
{
"path": "sources/ui/modelproxy/BulkObservableCollection.cs",
"chars": 1520,
"preview": "using System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Collections.Specialized;\n\nnamespac"
},
{
"path": "sources/ui/modelproxy/CardModelProxy.cs",
"chars": 1997,
"preview": "using System;\n\nnamespace FFTriadBuddy.UI\n{\n // viewmodel wrapper for model class: card\n public class CardModelPro"
},
{
"path": "sources/ui/modelproxy/IconDB.cs",
"chars": 4737,
"preview": "using MgAl2O4.Utils;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Windows.Media.Imaging;\n\nnamespace "
},
{
"path": "sources/ui/modelproxy/ImageHashDataModelProxy.cs",
"chars": 6565,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Drawing.Imaging;\nusing System.IO;\nusing System.Windows.Med"
},
{
"path": "sources/ui/modelproxy/ModelProxyDB.cs",
"chars": 7376,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Windows.Data;\n\nnamespace FFTr"
},
{
"path": "sources/ui/modelproxy/NpcModelProxy.cs",
"chars": 2964,
"preview": "using System;\n\nnamespace FFTriadBuddy.UI\n{\n // viewmodel wrapper for model class: npc\n public class NpcModelProxy"
},
{
"path": "sources/ui/modelproxy/RuleModelProxy.cs",
"chars": 716,
"preview": "using System;\n\nnamespace FFTriadBuddy.UI\n{\n // viewmodel wrapper for model class: modifier / rule\n public class R"
},
{
"path": "sources/ui/modelproxy/SettingsModel.cs",
"chars": 6738,
"preview": "using MgAl2O4.GoogleAPI;\nusing MgAl2O4.Utils;\nusing System;\nusing System.Threading.Tasks;\n\nnamespace FFTriadBuddy.UI\n{\n"
},
{
"path": "sources/ui/modelproxy/TournamentModelProxy.cs",
"chars": 1656,
"preview": "using System;\n\nnamespace FFTriadBuddy.UI\n{\n // viewmodel wrapper for model class: tournament\n public class Tourna"
},
{
"path": "sources/ui/modelproxy/TriadGameModel.cs",
"chars": 10464,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\n\nnamespace FFTriadBuddy.UI\n{\n // model / state "
},
{
"path": "sources/ui/view/AdjustCardDialog.xaml",
"chars": 6321,
"preview": "<UserControl x:Class=\"FFTriadBuddy.UI.AdjustCardDialog\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xam"
},
{
"path": "sources/ui/view/AdjustCardDialog.xaml.cs",
"chars": 309,
"preview": "using System.Windows.Controls;\n\nnamespace FFTriadBuddy.UI\n{\n /// <summary>\n /// Interaction logic for AdjustCardD"
},
{
"path": "sources/ui/view/AdjustHashDialog.xaml",
"chars": 2707,
"preview": "<UserControl x:Class=\"FFTriadBuddy.UI.AdjustHashDialog\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xam"
},
{
"path": "sources/ui/view/AdjustHashDialog.xaml.cs",
"chars": 309,
"preview": "using System.Windows.Controls;\n\nnamespace FFTriadBuddy.UI\n{\n /// <summary>\n /// Interaction logic for AdjustHashD"
},
{
"path": "sources/ui/view/DialogWindow.xaml",
"chars": 1055,
"preview": "<Window x:Class=\"FFTriadBuddy.UI.DialogWindow\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/present"
},
{
"path": "sources/ui/view/DialogWindow.xaml.cs",
"chars": 2428,
"preview": "using System;\nusing System.Windows;\nusing System.Windows.Controls;\n\nnamespace FFTriadBuddy.UI\n{\n /// <summary>\n /"
},
{
"path": "sources/ui/view/FavDeckEditDialog.xaml",
"chars": 2046,
"preview": "<UserControl x:Class=\"FFTriadBuddy.UI.FavDeckEditDialog\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xa"
},
{
"path": "sources/ui/view/FavDeckEditDialog.xaml.cs",
"chars": 310,
"preview": "using System.Windows.Controls;\n\nnamespace FFTriadBuddy.UI\n{\n /// <summary>\n /// Interaction logic for EditFavDeck"
},
{
"path": "sources/ui/view/FavDeckPreview.xaml",
"chars": 1550,
"preview": "<UserControl x:Class=\"FFTriadBuddy.UI.FavDeckPreview\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/"
},
{
"path": "sources/ui/view/FavDeckPreview.xaml.cs",
"chars": 303,
"preview": "using System.Windows.Controls;\n\nnamespace FFTriadBuddy.UI\n{\n /// <summary>\n /// Interaction logic for FavDeckPrev"
},
{
"path": "sources/ui/view/MainWindow.xaml",
"chars": 2362,
"preview": "<Window x:Class=\"FFTriadBuddy.UI.MainWindow\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n"
},
{
"path": "sources/ui/view/MainWindow.xaml.cs",
"chars": 1880,
"preview": "using System.Windows;\nusing System.Windows.Input;\nusing System.Windows.Interop;\nusing System.Windows.Media;\n\nnamespace "
},
{
"path": "sources/ui/view/OverlayWindowInteractive.xaml",
"chars": 4699,
"preview": "<Window x:Class=\"FFTriadBuddy.UI.OverlayWindowInteractive\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/"
},
{
"path": "sources/ui/view/OverlayWindowInteractive.xaml.cs",
"chars": 4054,
"preview": "using System;\nusing System.Runtime.InteropServices;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.W"
},
{
"path": "sources/ui/view/OverlayWindowTransparent.xaml",
"chars": 12815,
"preview": "<Window x:Class=\"FFTriadBuddy.UI.OverlayWindowTransparent\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/"
},
{
"path": "sources/ui/view/OverlayWindowTransparent.xaml.cs",
"chars": 2352,
"preview": "using System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Interop;\n\nnamespace FFTriadBuddy.UI\n{\n ///"
},
{
"path": "sources/ui/view/PageCards.xaml",
"chars": 6770,
"preview": "<UserControl x:Class=\"FFTriadBuddy.UI.PageCards\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/prese"
},
{
"path": "sources/ui/view/PageCards.xaml.cs",
"chars": 2194,
"preview": "using System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Input;\n\nnamespace FFTriad"
},
{
"path": "sources/ui/view/PageInfo.xaml",
"chars": 7994,
"preview": "<UserControl x:Class=\"FFTriadBuddy.UI.PageInfo\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presen"
},
{
"path": "sources/ui/view/PageInfo.xaml.cs",
"chars": 580,
"preview": "using System.Diagnostics;\nusing System.Windows.Controls;\nusing System.Windows.Navigation;\n\nnamespace FFTriadBuddy.UI\n{\n"
},
{
"path": "sources/ui/view/PageNpcs.xaml",
"chars": 4828,
"preview": "<UserControl x:Class=\"FFTriadBuddy.UI.PageNpcs\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presen"
},
{
"path": "sources/ui/view/PageNpcs.xaml.cs",
"chars": 2186,
"preview": "using System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\nusing System.Windows.Input;\n\nnamespace FFTriad"
},
{
"path": "sources/ui/view/PageScreenshot.xaml",
"chars": 13483,
"preview": "<UserControl x:Class=\"FFTriadBuddy.UI.PageScreenshot\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/"
},
{
"path": "sources/ui/view/PageScreenshot.xaml.cs",
"chars": 1075,
"preview": "using System.Windows.Controls;\nusing System.Windows.Input;\n\nnamespace FFTriadBuddy.UI\n{\n /// <summary>\n /// Inter"
},
{
"path": "sources/ui/view/PageSetup.xaml",
"chars": 17762,
"preview": "<UserControl\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http:"
},
{
"path": "sources/ui/view/PageSetup.xaml.cs",
"chars": 659,
"preview": "using System.Windows.Controls;\n\nnamespace FFTriadBuddy.UI\n{\n /// <summary>\n /// Interaction logic for PageSetup.x"
},
{
"path": "sources/ui/view/PageSimulate.xaml",
"chars": 17810,
"preview": "<UserControl x:Class=\"FFTriadBuddy.UI.PageSimulate\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/pr"
},
{
"path": "sources/ui/view/PageSimulate.xaml.cs",
"chars": 1007,
"preview": "using System;\nusing System.Windows;\nusing System.Windows.Controls;\n\nnamespace FFTriadBuddy.UI\n{\n /// <summary>\n /"
},
{
"path": "sources/ui/view/controls/NumTextBox.xaml",
"chars": 1562,
"preview": "<UserControl x:Class=\"FFTriadBuddy.UI.NumTextBox\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/pres"
},
{
"path": "sources/ui/view/controls/NumTextBox.xaml.cs",
"chars": 5197,
"preview": "using System.Linq;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\n\nnamespace FFTriadB"
},
{
"path": "sources/ui/view/controls/OutlinedTextBlock.cs",
"chars": 10956,
"preview": "using System;\nusing System.ComponentModel;\nusing System.Globalization;\nusing System.Windows;\nusing System.Windows.Docum"
},
{
"path": "sources/ui/view/controls/SearchableComboBox.xaml",
"chars": 586,
"preview": "<ComboBox x:Class=\"FFTriadBuddy.UI.SearchableComboBox\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml"
},
{
"path": "sources/ui/view/controls/SearchableComboBox.xaml.cs",
"chars": 11141,
"preview": "using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Win"
},
{
"path": "sources/ui/view/controls-triad/CardGridView.xaml",
"chars": 2382,
"preview": "<UserControl x:Class=\"FFTriadBuddy.UI.CardGridView\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/pr"
},
{
"path": "sources/ui/view/controls-triad/CardGridView.xaml.cs",
"chars": 1137,
"preview": "using System;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\n\nnamespace FFTriadBuddy."
},
{
"path": "sources/ui/view/controls-triad/CardView.xaml",
"chars": 24479,
"preview": "<UserControl x:Class=\"FFTriadBuddy.UI.CardView\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presen"
},
{
"path": "sources/ui/view/controls-triad/CardView.xaml.cs",
"chars": 681,
"preview": "using System.Windows;\nusing System.Windows.Controls;\n\nnamespace FFTriadBuddy.UI\n{\n /// <summary>\n /// Interaction"
},
{
"path": "sources/ui/view/controls-triad/DeckView.xaml",
"chars": 6729,
"preview": "<UserControl x:Class=\"FFTriadBuddy.UI.DeckView\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presen"
},
{
"path": "sources/ui/view/controls-triad/DeckView.xaml.cs",
"chars": 4513,
"preview": "using MgAl2O4.Utils;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Controls.Primitives;\nusi"
},
{
"path": "sources/ui/view/controls-triad/PlayerDeckPreview.xaml",
"chars": 5805,
"preview": "<UserControl\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n xmlns:x=\"http:"
},
{
"path": "sources/ui/view/controls-triad/PlayerDeckPreview.xaml.cs",
"chars": 774,
"preview": "using System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\n\nnamespace FFTriadBuddy.UI\n{\n /// <"
},
{
"path": "sources/ui/view/utils/CanvasExtensions.cs",
"chars": 6638,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Windows;\nusing System.Windows"
},
{
"path": "sources/ui/view/utils/CardDragDropExtension.cs",
"chars": 9811,
"preview": "using System;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Input;\n\nnamespace FFTriadBuddy."
},
{
"path": "sources/ui/view/utils/Converters.cs",
"chars": 1744,
"preview": "using System;\nusing System.Drawing;\nusing System.Globalization;\nusing System.Reflection;\nusing System.Windows;\nusing Sy"
},
{
"path": "sources/ui/view/utils/ListViewExtensions.cs",
"chars": 8894,
"preview": "using System;\nusing System.ComponentModel;\nusing System.Reflection;\nusing System.Windows;\nusing System.Windows.Controls"
},
{
"path": "sources/ui/view/utils/OverlayWindowService.cs",
"chars": 3836,
"preview": "using System.Windows;\n\nnamespace FFTriadBuddy.UI\n{\n public class OverlayWindowService : IOverlayWindowService\n {\n"
},
{
"path": "sources/ui/view/utils/ViewUtils.cs",
"chars": 1855,
"preview": "using System;\nusing System.Windows;\nusing System.Windows.Controls;\nusing System.Windows.Media;\n\nnamespace FFTriadBuddy."
},
{
"path": "sources/ui/viewmodel/AdjustCardViewModel.cs",
"chars": 8137,
"preview": "using System;\nusing System.Drawing.Imaging;\nusing System.IO;\nusing System.Windows.Input;\nusing System.Windows.Media.Ima"
},
{
"path": "sources/ui/viewmodel/AdjustHashViewModel.cs",
"chars": 1881,
"preview": "using System;\nusing System.Windows.Input;\n\nnamespace FFTriadBuddy.UI\n{\n public class AdjustHashViewModel : Localized"
},
{
"path": "sources/ui/viewmodel/CardCollectionViewModel.cs",
"chars": 827,
"preview": "using System.Windows.Input;\n\nnamespace FFTriadBuddy.UI\n{\n public class CardCollectionViewModel : LocalizedViewModel\n"
},
{
"path": "sources/ui/viewmodel/CardViewModel.cs",
"chars": 5039,
"preview": "using System.Windows.Media.Imaging;\n\nnamespace FFTriadBuddy.UI\n{\n public enum ECardOwner\n {\n None,\n "
},
{
"path": "sources/ui/viewmodel/ContextActionViewModel.cs",
"chars": 472,
"preview": "using System.Windows.Input;\n\nnamespace FFTriadBuddy.UI\n{\n public class ContextActionViewModel : BaseViewModel\n {\n"
},
{
"path": "sources/ui/viewmodel/DeckViewModel.cs",
"chars": 7873,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Collections.Specialized;\nusing System.ComponentModel;\nusin"
},
{
"path": "sources/ui/viewmodel/FavDeckEditViewModel.cs",
"chars": 959,
"preview": "using System;\nusing System.Windows.Input;\n\nnamespace FFTriadBuddy.UI\n{\n public class FavDeckEditViewModel : Localize"
},
{
"path": "sources/ui/viewmodel/ImageCardDataViewModel.cs",
"chars": 2169,
"preview": "namespace FFTriadBuddy.UI\n{\n public class ImageCardDataViewModel : LocalizedViewModel\n {\n public readonly "
},
{
"path": "sources/ui/viewmodel/LocalSavesViewModel.cs",
"chars": 3353,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Diagnostics;\nusing System.IO;\nusing System.Windows.Input;\n\nnamespace FF"
},
{
"path": "sources/ui/viewmodel/MainWindowViewModel.cs",
"chars": 5218,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Linq;\nusing System.Reflection;\nusing System.Threading.Tasks;\nusing Syst"
},
{
"path": "sources/ui/viewmodel/OverlayWindowViewModel.cs",
"chars": 37026,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Drawing;\nus"
},
{
"path": "sources/ui/viewmodel/PageCardsViewModel.cs",
"chars": 6934,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Windows.Data;\nusing System.Windo"
},
{
"path": "sources/ui/viewmodel/PageInfoViewModel.cs",
"chars": 10070,
"preview": "using System;\nusing System.ComponentModel;\nusing System.Windows;\n\nnamespace FFTriadBuddy.UI\n{\n public class Settings"
},
{
"path": "sources/ui/viewmodel/PageNpcsViewModel.cs",
"chars": 5298,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Linq;\nusing System.Windows.Da"
},
{
"path": "sources/ui/viewmodel/PageScreenshotViewModel.cs",
"chars": 20303,
"preview": "using MgAl2O4.Utils;\nusing System.Drawing;\nusing System.Windows.Input;\n\nnamespace FFTriadBuddy.UI\n{\n public class Pa"
},
{
"path": "sources/ui/viewmodel/PageSetupViewModel.cs",
"chars": 21081,
"preview": "using MgAl2O4.GoogleAPI;\nusing MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\nusing System.Windows.Data"
},
{
"path": "sources/ui/viewmodel/PageSimulateViewModel.cs",
"chars": 17760,
"preview": "using System.Collections.Generic;\nusing System.Windows.Input;\n\nnamespace FFTriadBuddy.UI\n{\n public class PageSimulat"
},
{
"path": "sources/ui/viewmodel/SetupFavDeckViewModel.cs",
"chars": 6284,
"preview": "using System.Collections.Generic;\nusing System.Windows;\nusing System.Windows.Input;\n\nnamespace FFTriadBuddy.UI\n{\n pu"
},
{
"path": "sources/ui/viewmodel/SimulateRulesViewModel.cs",
"chars": 10743,
"preview": "using System.Collections.Generic;\nusing System.Windows.Input;\n\nnamespace FFTriadBuddy.UI\n{\n public class SimulateRul"
},
{
"path": "sources/ui/viewmodel/SolvableDeckViewModel.cs",
"chars": 2759,
"preview": "using System;\nusing System.Windows.Threading;\n\nnamespace FFTriadBuddy.UI\n{\n public class SolvableDeckViewModel : Loc"
},
{
"path": "sources/ui/viewmodel/ViewModelUtils.cs",
"chars": 3319,
"preview": "using System;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Reflection;\nusing System.Runtime.Compiler"
},
{
"path": "sources/ui/viewmodel/WinChanceViewModel.cs",
"chars": 1547,
"preview": "namespace FFTriadBuddy.UI\n{\n public class WinChanceViewModel : LocalizedViewModel\n {\n public bool isInvali"
},
{
"path": "sources/utils/DataCoverter.cs",
"chars": 16752,
"preview": "#if DEBUG\n\nusing FFTriadBuddy.Datamine;\nusing MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\nusing Syst"
},
{
"path": "sources/utils/TestManager.cs",
"chars": 4568,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\n\nnamespace FFTriadBuddy\n{\n pub"
},
{
"path": "sources/utils/XInputStub.cs",
"chars": 20699,
"preview": "using System;\nusing System.Runtime.InteropServices;\nusing System.Threading;\n\nnamespace FFTriadBuddy\n{\n // https://ww"
},
{
"path": "sources/utils/datamine/CsvData.cs",
"chars": 6551,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\n\n#if DEBUG\n\nnamespace FFTriadBuddy.Datamine\n{\n publi"
},
{
"path": "sources/utils/datamine/GameData.cs",
"chars": 26623,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\n\n#if DEBUG\n\nnamespace "
},
{
"path": "sources/utils/tlsh/BucketSize.cs",
"chars": 2762,
"preview": "/*\n * Ported from: https://github.com/trendmicro/tlsh\n * Source: https://github.com/morganabel/TlshSharp/tree/master/TLS"
},
{
"path": "sources/utils/tlsh/ChecksumSize.cs",
"chars": 2766,
"preview": "/*\n * Ported from: https://github.com/trendmicro/tlsh\n * Source: https://github.com/morganabel/TlshSharp/tree/master/TLS"
},
{
"path": "sources/utils/tlsh/TlshBuilder.cs",
"chars": 11683,
"preview": "/*\n * Ported from: https://github.com/trendmicro/tlsh\n * Source: https://github.com/morganabel/TlshSharp/tree/master/TLS"
},
{
"path": "sources/utils/tlsh/TlshHash.cs",
"chars": 7648,
"preview": "/*\n * Ported from: https://github.com/trendmicro/tlsh\n * Source: https://github.com/morganabel/TlshSharp/tree/master/TLS"
},
{
"path": "sources/utils/tlsh/TlshUtilities.cs",
"chars": 10106,
"preview": "/*\n * Ported from: https://github.com/trendmicro/tlsh\n * Source: https://github.com/morganabel/TlshSharp/tree/master/TLS"
},
{
"path": "sources/utils-shared/AssetManager.cs",
"chars": 2463,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.IO.Compression;\n\nnamespace MgAl2O4.Utils\n"
},
{
"path": "sources/utils-shared/GithubUpdater.cs",
"chars": 6466,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.IO;\nusing System.IO.Compression;"
},
{
"path": "sources/utils-shared/JsonParser.cs",
"chars": 13605,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Text;\n\nnamespace MgAl2O4.Utils"
},
{
"path": "sources/utils-shared/LocResourceManager.cs",
"chars": 5734,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Reflection;\nu"
},
{
"path": "sources/utils-shared/Logger.cs",
"chars": 2070,
"preview": "using System;\nusing System.IO;\nusing System.Reflection;\n\nnamespace MgAl2O4.Utils\n{\n public class Logger\n {\n "
},
{
"path": "sources/utils-shared/MLDataExporter.cs",
"chars": 1731,
"preview": "using System;\nusing System.IO;\nusing System.Text;\n\nnamespace MgAl2O4.Utils\n{\n public class MLDataExporter\n {\n "
},
{
"path": "sources/utils-shared/MLUtils.cs",
"chars": 2140,
"preview": "using System;\n\nnamespace MgAl2O4.Utils\n{\n public class MLUtils\n {\n public static void CalcNetworkLayer(flo"
},
{
"path": "sources/vision/ImageUtils.cs",
"chars": 39234,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing System.Drawing.Imaging"
},
{
"path": "sources/vision/MLClassifierCactpot.cs",
"chars": 129123,
"preview": "using MgAl2O4.Utils;\n\nnamespace FFTriadBuddy\n{\n public class MLClassifierCactpot\n {\n private float[] Layer"
},
{
"path": "sources/vision/MLClassifierTriadDigit.cs",
"chars": 83411,
"preview": "using MgAl2O4.Utils;\n\nnamespace FFTriadBuddy\n{\n public class MLClassifierTriadDigit\n {\n private float[] La"
},
{
"path": "sources/vision/ScannerBase.cs",
"chars": 1650,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Drawing;\n\nn"
},
{
"path": "sources/vision/ScannerCactpot.cs",
"chars": 24116,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Drawing;\nus"
},
{
"path": "sources/vision/ScannerTriad.cs",
"chars": 73787,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Drawing;\nus"
},
{
"path": "sources/vision/ScreenAnalyzer.cs",
"chars": 13318,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Drawing;\nus"
},
{
"path": "sources/vision/ScreenReader.cs",
"chars": 13828,
"preview": "using MgAl2O4.Utils;\nusing System;\nusing System.Diagnostics;\nusing System.Drawing;\nusing System.Drawing.Imaging;\nusing "
}
]
About this extraction
This page contains the full source code of the MgAl2O4/FFTriadBuddy GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 169 files (1.7 MB), approximately 524.9k tokens, and a symbol index with 1577 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.