diff --git a/docs/tool/GUI.ModsManager/FAQ.md b/docs/tool/GUI.ModsManager/FAQ.md new file mode 100644 index 000000000..9a3ee7644 --- /dev/null +++ b/docs/tool/GUI.ModsManager/FAQ.md @@ -0,0 +1,58 @@ +# OpenKH Mod Manager FAQs + +### Return to the [Main Page](index.md) + +### Special Thanks to: +* Shananas for the continued upkeep of the OpenKH Mod Manager when something new arises +* MainMemory for her updating of Panacea to work with the PC releases +* Xeeynamo for the initial rough version of the program +* Alios for discovering a major issue with the Mod Manager so that I may include an answer to the problem in this FAQs document +* Everyone else in the OpenKH community for helping make the modding environment for these games as welcoming and exciting as it has been + +## [Table of Contents]() +* ### [Is extracting my games mandatory for the mod manager to work?](#q-is-extracting-my-games-mandatory-for-the-mod-manager-to-work) +* ### [Lua mods aren't working!](#q-lua-mods-arent-working) +* ### [Does OpenKH support Steam Deck/Linux?](#q-does-openkh-support-steam-decklinux) +* ### [I moved my OpenKH install and now I can't use the mod manager!](#q-i-moved-my-openkh-install-and-now-i-cant-use-the-mod-manager) +* ### [I can't open the mod manager on my removeable storage device!]() +* ### [I want to start making mods but don't know how](#q-i-want-to-start-making-mods-but-dont-know-how) + +--- + +### Q: Is extracting my games mandatory for the mod manager to work? + +> **A:** For the best user experience, yes. We understand it takes up a lot of storage, but it allows you to retain your unmodified game files through a dynamic file replacement system instead of relying on a slow and tedious patching method. Some tips to reduce the storage used by game extraction are: +> * Only extract the game(s) you are actively playing/modding. +> * Skip the game extraction portion of the initial setup wizard. Alternatively, you may enable `Dev View` by going to `Info > Dev View` inside the mod manager. This will allow you to patch your game(s) instead. + > * **WARNING:** This **will** make helping debug problems with your game more difficult, and mod making far more arduous. + > * To revert your game to a completely vanilla slate, you may attempt to use the `Full Restore` options under `Patching > Full Restore`, but we cannot guarantee it will work if you have not properly kept a backup of your `.pkg` and `.hed` files. If this is the case, you may need to delete the respective game's `.pkg` and `.hed` files and verify the integrity of your game through Steam or EGS. +> +> The one exception is that Lua mods will work fine with the mod manager, so long as you have installed both Panacea and Lua Backend. Mods that alter or add files to the game will, in fact, require the extracted data, unless patching. +--- +### Q: Lua mods aren't working! + +> **A:** Did you download and place either `Lua Backend` or `Lua Frontend` where your games are installed? If not, OpenKH can do this for you through the mod manager initialization wizard. If you need to configure `Lua Backend`, go to `Settings > Run wizard` until you reach the point where you can install `Lua Backend`. Select your games and click the button to configure it. +>> **Note:** Panacea must also be installed for this method to work. If you have not enabled it, you should, as there is no negative effect to the game by Panacea simply being present, regardless of how you apply your mods. +> +> ![alt text](image-12.png) +--- +### Q: Does OpenKH support Steam Deck/Linux? + +> **A:** Absolutely! Most mod creative tooling will work just fine under standard WINE installs. +> +> However for our fellow Steam Deck users trying to simply apply mods, OpenKH's mod manager should work fine under **WINE, Proton, and Proton-GE** under the KH 1.5+2.5 prefix. +> * Note: Due to the nature of WINE/Proton, in order for mods to properly apply to your game, you **must** use OpenKH under the same prefix as the game, otherwise you will not be able to locate (and thus apply mods to) your game files. +--- +### Q: I moved my OpenKH install and now I can't use the mod manager! + +> **A:** Delete the `mods-manager.yml` config file and re-run the install wizard for the mod manager. If you have your game data extracted already, you can safely either skip that part, or if you do not, the manager will detect whichever files are present and skip them as needed, filling in the blanks. +--- +### Q: I can't open the mod manager on my removeable storage device! + +> **A:** If OpenKH is stored on a removable storage device such as flash drives, SD cards, or an external/portable HDD/SDD, some tools (namely the `Mod Manager` utility) will not be able to correctly verify ownership of the files necessary for mod deployment to work, and may lead to a generic error. Please try deleting your `mods-manager.yml` config file and relocate OpenKH to an internal drive location, such as: `C:/Game Modding/openkh` +--- +### Q: I want to start making mods but don't know how + +> **A:** You are more than welcome to request help getting started in any of the appropriate channels in our [Discord server](https://discord.openkh.dev). We strive for a friendly and welcoming atmosphere and will always accept you with open arms. + +### Return to the [Main Page](index.md) diff --git a/docs/tool/GUI.ModsManager/creatingMods.md b/docs/tool/GUI.ModsManager/creatingMods.md new file mode 100644 index 000000000..cfa1e093f --- /dev/null +++ b/docs/tool/GUI.ModsManager/creatingMods.md @@ -0,0 +1,654 @@ +# [OpenKh Tool Documentation](../index.md) - KH2 Mods Manager + +This document will focus on teaching you how to create mods using the OpenKH Mod Manager. + +# [Table of Contents]() +* [Creating a Mod for Use With OpenKH](#creating-a-mod-for-use-with-openkh) +* [Asset Types](#asset-types) +* [Asset Methods](#asset-methods) + * [copy](#copy-any-game---performs-a-direct-copy-to-overwrite-a-file-works-on-any-file-type) + * [binarc (KH2)](#binarc-kh2---specifies-a-modification-to-a-subfile-within-a-binarc-using-one-of-the-available-methods-see-binarc-methods-for-details-on-implementing-a-specific-method) + * [copy](#copy-kh2---performs-a-copy-on-a-supfile-within-a-bar-must-be-one-of-the-following-types) + * [imgd](#imgd-kh2---replaces-a-single-imgd-found-within-a-binarc) + * [imgz / fac](#imgz--fac-kh2---replaces-multiple-imgds-found-within-a-binarc) + * [kh2msg](#kh2msg-kh2---replaces-text-found-within-a-kh2-messages-file-uses-a-yaml-file-as-an-source) + * [areadatascript](#areadatascript-kh2---modifies-a-series-programs-found-within-a-kh2-spawnscript-subfile-located-within-ard-files-using-the-text-format-created-by-openkhcommandspawnscript-you-can-only-provide-a-subset-of-the-programs-found-within-the-spawnscript-the-others-will-be-taken-from-the-original-file) + * [areadataspawn](#areadataspawn-kh2---modifies-a-kh2-spawnpoint-subfile-located-within-ard-files-using-an-yaml-file-created-using-openkhcommandspawnscript) + * [listpatch](#listpatch-kh2---can-modify-the-following-different-types-of-list-binaries-found-within-kh2) + * [trsr](#trsr-source-example) + * [cmd](#cmd-source-example) + * [item](#item-source-example) + * [sklt](#sklt-source-example) + * [enmp](#enmp-source-example) + * [fmlv](#fmlv-source-example) + * [lvup](#lvup-source-example) + * [bons](#bons-source-example) + * [atkp](#atkp-source-example) + * [przt](#przt-source-example) + * [magc](#magc-source-example) + * [objentry](#objentry-source-example) + * [Example of a Fully Complete `mod.yml` File](#an-example-of-a-fully-complete-modyml-can-be-seen-below-and-the-full-source-of-the-mod-can-be-seen-here) +* [Generating a Simple `mod.yml` for New Mod Authors](#generating-a-simple-modyml-for-new-mod-authors) +* [Publishing a Mod on GitHub](#publishing-a-mod-on-github) + +## Creating a Mod for Use With OpenKH + +A well produced mod should contain the following + +* `mod.yml` - The format of which is explained below +* `icon.png` - A 128x128 image which will be seen in the mods list +* `preview.png` - A image of maximum size 512 px wide by 288 px tall, which will be shown in the mod description on the right +* Other files - whatever files are needed for the mod, as defined by the `mod.yml` + +The mod.yml file is a YAML format specification for your mod. It will contain the following fields: + +* `title` - The title of your mod, as displayed in the mods manager +* `description` - A description of what your mod does +* `originalAuthor` - The name of the original author who created this mod. If you just ported this mod to the modsmanager for someone else, include the original author's name. If you do not, this is considered plagiarism, and people tend to not like that. +* `logo` - The path to the icon.png +* `assets` - A list of assets that will be modified when the mod runs. + * See [`asset types`](#asset-types), for details on creating an asset. Some asset types will work on any game, while others are game specific. + +While you are developing a mod you can create a folder inside the `mods` directory of the mod manager release. I.e.: + +`openkh/mods//` + +## Asset Types + +The truth of the matter is there are seemingly innumerable "asset types" in these games. Each game has several that are exclusive to itself, with little to none shared between any two or more. Some (but not all!) examples of the types of assets you may work with as a mod author are as follows: + +* Models + * .mdls + * .mdlx + * .cvbl + * .wpn + * .pmo + * .mdl +* Binary archives + * .bar + * .arc + * .ard + * .bin +* Sound archives + * .wd + * .seb + * .scd + * .snd +* Texture formats + * .img + * .imd / .imgd + * .imz / .imgz + * .dds / .png (PC only) + * .tm2 +* Movesets & animation + * .mset + * .anb + * .arc +* Menu & UI layouts + * .seqd + * .lad + * .l2d + * .2ld + * .2dd +* Maps & scripting + * .map + * .bar + * .arc + * .ard +* Many, many, many more... + +However, there is a point to knowing the many asset types the games have on offer. With enough know-how, custom events can be made, called, and integrated into their respective games. Not all of the formats above are from any one single game either; some are shared, some are specific to only one game. Some formats are not even the same between two games, despite having the same file extension. ~~I'm looking at you, `.arc`, `.ard`, and `.pmo`.~~ + +There are many tools at your disposal to edit a vast array of these formats, thanks to the large contributions over the years to the OpenKH project. We're far from finished yet, though, and would love more help looking into formats and making even more tools! + +Additionally, the type of format you are working with will work better with certain [asset methods](#asset-methods) as shown below. Many of the games' files are just archive formats with many other files inside. For example, KH2's `title.2ld` UI layout file for the title screen is an archive that contains a `.imz`, which is another archive with multiple images inside. It also contains `layout data` (primarily called `sequence data` in KH2) in the form of `.seqd` files, which help manage the intro logos and title screen assets contained within the aforementioned `.imz` image archive. + +In that example, if you were to simply replace one image of the title screen, you would only need to look as far as one of the several images within, which would best utilize the [`imgz`](#imgz--fac-kh2---replaces-multiple-imgds-found-within-a-binarc) asset method shown below. + + +# Asset Methods + +## `copy` (any game) - Performs a direct copy to overwrite a file. Works on any file type. + +Asset Example: + +``` +- method: copy + name: msn/jp/BB03_MS103.bar + source: + - name: files/modified_msn.bar +``` + +## `binarc` (KH2) - Specifies a modification to a subfile within a binarc, using one of the available methods. See `binarc methods` for details on implementing a specific method. + +Asset Example + +``` +- method: binarc + name: ard/wi03.ard + source: + - method: spawnpoint + name: b_40 + source: + - name: files/b_40.yml + type: AreaDataSpawn +``` + +### Binarc Methods + +## `copy` (KH2) - Performs a copy on a supfile within a Bar. Must be one of the [following](https://github.com/Xeeynamo/OpenKh/blob/master/OpenKh.Tools.BarEditor/Helpers.cs#L14) types + +Asset Example + +``` +- method: binarc + name: msn/jp/HB01_MS601.bar + source: + - method: copy + name: ms_b + source: + - name: he_c.bdx + type: Bdx +``` + +## `imgd` (KH2) - Replaces a single imgd found within a binarc + +Asset Example + +``` + - name: menu/us/title.2ld + multi: + - name: menu/jp/title.2ld + required: true + method: binarc + source: + - name: titl + type: imgd + method: imgd + source: + - name: title/title1.png + highdef: title/title1_hd.png +``` + +## `imgz` // `fac` (KH2) - Replaces multiple imgd's found within a binarc. + +Asset Example + +``` + - name: menu/us/title.2ld + multi: + - name: menu/jp/title.2ld + - name: menu/uk/title.2ld + - name: menu/it/title.2ld + - name: menu/sp/title.2ld + - name: menu/gr/title.2ld + - name: menu/fr/title.2ld + - name: menu/fm/title.2ld + required: true + method: binarc + source: + - name: titl + type: imgz + method: imgz + source: + - name: title/title1.png + highdef: title/title1_hd.png + index: 1 +``` + +## `kh2msg` (KH2) - Replaces text found within a kh2 messages file. Uses a yaml file as an source. + +Asset Example + +``` + - name: msg/jp/sys.bar + method: binarc + source: + - name: sys + type: list + method: kh2msg + source: + - name: sys.yml + language: jp +``` + +Yaml Source Example + +``` +- id: 0x432e + en: OpenKH is awesome! + it: OpenKH è incredibile! + sp: ¡OpenKH es increíble! + gr: OpenKH ist großartig! + fr: OpenKH est incroyable! + jp: OPENKHすばらしい! +``` + +## `areadatascript` (KH2) - Modifies a series programs found within a KH2 Spawnscript subfile (located within ard files), using the text format created by OpenKh.Command.SpawnScript. You can only provide a subset of the programs found within the spawnscript, the others will be taken from the original file. + +Asset Example +``` +- method: binarc + name: ard/hb34.ard + source: + - method: areadatascript + name: evt + source: + - name: files/hb34/program-87 + - name: files/hb34/program-7c + - name: files/hb34/program-7d + - name: files/hb34/program-86 + type: AreaDataScript +``` + +Text Source Example +``` +Program 0x7C +Party DEFAULT +Bgm Default Default +AreaSettings 0 -1 + SetJump Type 2 World HB Area 0 Entrance 0 LocalSet 151 FadeType 1 + SetPartyMenu 0 +``` + +## `areadataspawn` (KH2) - Modifies a KH2 Spawnpoint subfile (located within ard files), using an yaml file created using OpenKh.Command.SpawnScript. + +Asset Example + +``` +- method: binarc + name: ard/wi03.ard + source: + - method: spawnpoint + name: b_40 + source: + - name: files/b_40.yml + type: AreaDataSpawn +``` + +## `listpatch` (KH2) - Can modify the following different types of list binaries found within KH2: + * `trsr` + * `cmd` + * `item` + * `sklt` + * `enmp` + * `fmlv` + * `lvup` + * `bons` + * `atkp` + * `przt` + * `magc` + * `objentry` + +Asset Example +``` +- name: 00battle.bin + method: binarc + source: + - name: fmlv + method: listpatch + type: List + source: + - name: FmlvList.yml + type: fmlv +``` + +### `trsr` Source Example +``` +2: + ItemId: 347 +``` +### `cmd` Source Example +``` +- Id: 1 + Execute: 3 + Argument: 3 + SubMenu: 1 + CmdIcon: 3 + MessageId: 33249 + Flags: Cursor, InBattleOnly + Range: -1 + Dir: 0 + DirRange: -1 + Cost: 0 + CmdCamera: 0 + Priority: 100 + CmdReceiver: 0 + Time: 0 + Require: 0 + Mark: 1 + CmdAction: 0 + ReactionCount: 0 + DistRange: 0 + Score: 0 + DisableForm: 63552 + Group: 2 + Reserve: 0 +``` +### `item` Source Example +``` +Stats: +- Ability: 412 + AbilityPoints: 0 + Attack: 0 + DarkResistance: 100 + Defense: 0 + FireResistance: 100 + GeneralResistance: 100 + IceResistance: 100 + Id: 116 + LightningResistance: 100 + Magic: 7 + Unknown: 0 + Unknown08: 100 + Unknown0d: 100 +Items: +- Id: 1 + Type: Consumable + Flag0: 0 + Flag1: 40 + Rank: C + StatEntry: 1 + Name: 33528 + Description: 33529 + ShopBuy: 40 + ShopSell: 10 + Command: 23 + Slot: 0 + Picture: 1 + Icon1: 9 + Icon2: 0 +``` +### `sklt` Source Example +``` +- CharacterId: 1 + Bone1: 178 + Bone2: 86 +``` + +### `enmp` Source Example +``` +- Id: 0 + Level: 1 + Health: + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + - 1 + MaxDamage: 1 + MinDamage: 1 + PhysicalWeakness: 1 + FireWeakness: 1 + IceWeakness: 1 + ThunderWeakness: 1 + DarkWeakness: 1 + LightWeakness: 1 + GeneralWeakness: 1 + Experience: 1 + Prize: 1 + BonusLevel: 1 +``` + +### `fmlv` Source Example +``` +Final: +- Ability: 578 + Experience: 12 + FormId: 5 + FormLevel: 1 + GrowthAbilityLevel: 1 +``` + +### `lvup` Source Example +``` +Sora: + 2: + Ap: 0 + Character: Sora + Defense: 0 + Exp: 100 + Level: 2 + Magic: 0 + Padding: 0 + ShieldAbility: 577 + StaffAbility: 577 + Strength: 0 + SwordAbility: 577 +``` + +### `bons` Source Example +``` +2: + Sora: + AccessorySlotUpgrade: 0 + ArmorSlotUpgrade: 0 + BonusItem1: 99 + BonusItem2: 0 + CharacterId: 1 + Description: '' + DriveGaugeUpgrade: 0 + HpIncrease: 0 + ItemSlotUpgrade: 0 + MpIncrease: 0 + RewardId: 2 + Unknown0c: 0 +``` + +### `atkp` Source Example +``` +- Id: 0 #Hitbox 0 + SubId: 3 + Type: 1 + CriticalAdjust: 0 + Power: 25 + Team: 0 + Element: 0 + EnemyReaction: 0 + EffectOnHit: 2 + KnockbackStrength1: 32767 + KnockbackStrength2: 0 + Unknown: 0000 + Flags: BGHit, LimitPAX, Land, CapturePAX, ThankYou, KillBoss #Every possible AttackFlag shown + RefactSelf: 0 + RefactOther: 0 + ReflectedMotion: 0 + ReflectHitBack: 0 + ReflectAction: 0 + ReflectHitSound: 0 + ReflectRC: 0 + ReflectRange: 0 + ReflectAngle: 0 + DamageEffect: 0 + Switch: 1 + Interval: 1 + FloorCheck: 1 + DriveDrain: 1 + RevengeDamage: 1 + AttackTrReaction: 1 + ComboGroup: 1 + RandomEffect: 1 + Kind: ComboFinisher + HpDrain: 15 +``` + +### `przt` Source Example +``` +- Id: 1 + SmallHpOrbs: 0 + BigHpOrbs: 1 + BigMoneyOrbs: 1 + MediumMoneyOrbs: 1 + SmallMoneyOrbs: 1 + SmallMpOrbs: 1 + BigMpOrbs: 1 + SmallDriveOrbs: 0 + BigDriveOrbs: 1 + Item1: 1 + Item1Percentage: 1 + Item2: 0 + Item2Percentage: 0 + Item3: 0 + Item3Percentage: 0 +``` + +### `magc` Source Example +``` +- Id: 0 + Level: 3 + World: 1 + FileName: magic/FIRE_3.mag + Item: 21 + Command: 120 + GroundMotion: 56 + GroundBlend: 2 + FinishMotion: 57 + FinishBlend: 2 + AirMotion: 58 + AirBlend: 2 + Voice: 7 + VoiceFinisher: 11 + VoiceSelf: -1 +``` + +### `objentry` Source Example +``` +4: + ObjectId: 4 + ObjectType: ZAKO + SubType: 0 + DrawPriority: 0 + WeaponJoint: 0 + ModelName: M_EX520 + AnimationName: M_EX520.mset + Flag: 8 + TargetType: 1 + Padding: 0 + NeoStatus: 1006 + NeoMoveset: 0 + Weight: 100 + SpawnLimiter: 8 + Page: 1 + ShadowSize: 1 + CommandMenuOption: Default + SpawnObject1: 0 + SpawnObject2: 0 + SpawnObject3: 0 + SpawnObject4: 0 +``` + +### An example of a fully complete mod.yml can be seen below, and the full source of the mod can be seen [here](https://github.com/OpenKH/mod-template) + +``` +title: OpenKH mod template +originalAuthor: OpenKH open-source assets +description: An example of mod to use as a template +assets: + - name: menu/us/title.2ld + multi: + - name: menu/jp/title.2ld + - name: menu/uk/title.2ld + - name: menu/it/title.2ld + - name: menu/sp/title.2ld + - name: menu/gr/title.2ld + - name: menu/fr/title.2ld + - name: menu/fm/title.2ld + required: true + method: binarc + source: + - name: titl + type: imgz + method: imgz + source: + - name: title/title1.png + highdef: title/title1_hd.png + index: 1 + - name: msg/jp/sys.bar + method: binarc + source: + - name: sys + type: list + method: kh2msg + source: + - name: sys.yml + language: jp + - name: msg/us/sys.bar + method: binarc + source: + - name: sys + type: list + method: kh2msg + source: + - name: sys.yml + language: en + - name: msg/it/sys.bar + method: binarc + source: + - name: sys + type: list + method: kh2msg + source: + - name: sys.yml + language: it +``` + +## Generating a Simple `mod.yml` for New Mod Authors + +This method is recommended exclusively for mod authors, as the YAML Generator built into the Mod Manager is considered fully functional, yet lacks all of the aforementioned [asset methods](#asset-methods), with the exception of a couple. Those being: +* [`copy`](#copy-any-game---performs-a-direct-copy-to-overwrite-a-file-works-on-any-file-type) (game agnostic) +* [`binarc`](#binarc-kh2---specifies-a-modification-to-a-subfile-within-a-binarc-using-one-of-the-available-methods-see-binarc-methods-for-details-on-implementing-a-specific-method) (KH2 only so far) + +To start, here are the steps: + +1. Create an isolated folder where you will be working on your mod. Ideally, to make it easy for testing in-game, this would be in `openkh/mods/Your Name/Your Mod Name`. +2. To keep things simple, recreate the game's folder structure. I.e., if you were to edit KH2's title screen, Sora's HUD sprites, and replacing the font in KH2 with something goofy like Comic Sans, you would have a file tree that looks like this: +``` +├───menu +│ └───us +│ └───title.2ld +│ +└───remastered + └───msg + │ └───us + │ └───fontimage.bar + └───obj + └───P_EX100.a.us + └─── ~8.dds +``` + +3. Open the `Creator` menu on the top of Mod Manager, and select `YamlGenerator`. +4. Make the path to your `mod.yml` where your root mod folder is (i.e., where the example file structure would be located at). +5. Click `Generate or update mod.yml`. +6. Make the `GameDataPath` the same folder as where your new `mod.yml` has been generated. +7. Click `Begin`. +8. Click `Search` in the upper right. +9. Select all your files (**not** `mod.yml`). +10. Click `Copy each`. +11. Make sure the `[ ]Exists` box is checked. If it's not, you did something wrong. Retrace your steps. +12. Click `Proceed` at the bottom. +13. Answer yes, you would like to commit the change to the `mod.yml` file. +14. Close the creator and edit your `mod.yml` file with a text editor to change the following fields as necessary: + * `title` + * `originalAuthor` + * `description` +15. Save your changes and upload the entirety of this folder, including the `mod.yml` file to a new GitHub repository. +16. (Optional) Archive everything into a `.zip` archive and upload to Nexusmods under the appropriate game section. +17. +18. Profit! + +## Publishing a Mod on GitHub + +Mods should be published to a public GitHUb repository, so that users can install the mod just by providing the repository name. + +It is recommended to apply the following tags to the repository, in order to make it easily found by searching GitHub for mods manager mods: + +* `openkh-mods` + +* `` + * `kh1` + * `kh2` + * `bbs` + * `ddd` + * `recom` \ No newline at end of file diff --git a/docs/tool/GUI.ModsManager/image-1.png b/docs/tool/GUI.ModsManager/image-1.png new file mode 100644 index 000000000..59fd8e8c8 Binary files /dev/null and b/docs/tool/GUI.ModsManager/image-1.png differ diff --git a/docs/tool/GUI.ModsManager/image-10.png b/docs/tool/GUI.ModsManager/image-10.png new file mode 100644 index 000000000..19a58a3c5 Binary files /dev/null and b/docs/tool/GUI.ModsManager/image-10.png differ diff --git a/docs/tool/GUI.ModsManager/image-11.png b/docs/tool/GUI.ModsManager/image-11.png new file mode 100644 index 000000000..c5de8aae8 Binary files /dev/null and b/docs/tool/GUI.ModsManager/image-11.png differ diff --git a/docs/tool/GUI.ModsManager/image-12.png b/docs/tool/GUI.ModsManager/image-12.png new file mode 100644 index 000000000..ecb9c7654 Binary files /dev/null and b/docs/tool/GUI.ModsManager/image-12.png differ diff --git a/docs/tool/GUI.ModsManager/image-2.png b/docs/tool/GUI.ModsManager/image-2.png new file mode 100644 index 000000000..05aecd345 Binary files /dev/null and b/docs/tool/GUI.ModsManager/image-2.png differ diff --git a/docs/tool/GUI.ModsManager/image-3.png b/docs/tool/GUI.ModsManager/image-3.png new file mode 100644 index 000000000..e5b2bb6aa Binary files /dev/null and b/docs/tool/GUI.ModsManager/image-3.png differ diff --git a/docs/tool/GUI.ModsManager/image-4.png b/docs/tool/GUI.ModsManager/image-4.png new file mode 100644 index 000000000..e71c45ab4 Binary files /dev/null and b/docs/tool/GUI.ModsManager/image-4.png differ diff --git a/docs/tool/GUI.ModsManager/image-5.png b/docs/tool/GUI.ModsManager/image-5.png new file mode 100644 index 000000000..ba46b2824 Binary files /dev/null and b/docs/tool/GUI.ModsManager/image-5.png differ diff --git a/docs/tool/GUI.ModsManager/image-6.png b/docs/tool/GUI.ModsManager/image-6.png new file mode 100644 index 000000000..94cbeecdb Binary files /dev/null and b/docs/tool/GUI.ModsManager/image-6.png differ diff --git a/docs/tool/GUI.ModsManager/image-7.png b/docs/tool/GUI.ModsManager/image-7.png new file mode 100644 index 000000000..092e483b0 Binary files /dev/null and b/docs/tool/GUI.ModsManager/image-7.png differ diff --git a/docs/tool/GUI.ModsManager/image-8.png b/docs/tool/GUI.ModsManager/image-8.png new file mode 100644 index 000000000..72c7a0534 Binary files /dev/null and b/docs/tool/GUI.ModsManager/image-8.png differ diff --git a/docs/tool/GUI.ModsManager/image-9.png b/docs/tool/GUI.ModsManager/image-9.png new file mode 100644 index 000000000..bc21013ce Binary files /dev/null and b/docs/tool/GUI.ModsManager/image-9.png differ diff --git a/docs/tool/GUI.ModsManager/image.png b/docs/tool/GUI.ModsManager/image.png new file mode 100644 index 000000000..8058516c7 Binary files /dev/null and b/docs/tool/GUI.ModsManager/image.png differ diff --git a/docs/tool/GUI.ModsManager/index.md b/docs/tool/GUI.ModsManager/index.md index 7b8d10242..5ebe03c41 100644 --- a/docs/tool/GUI.ModsManager/index.md +++ b/docs/tool/GUI.ModsManager/index.md @@ -1,523 +1,188 @@ -# [OpenKh Tool Documentation](../index.md) - KH2 Mods Manager +# [OpenKh Tool Documentation](../index.md) - KH2 Mod Manager -This document will focus on teaching you how to create mods using the OpenKH Mods Manager - -## Creating a mod - -A well produced mod should contain the following - -* mod.yml - The format of which is explained below -* icon.png - A 128x128 image which will be seen in the mods list -* preview.png - A image of maximum size 512 px wide by 288 px tall, which will be shown in the mod description on the right -* Other files - whatever files are needed for the mod, as defined by the mod.yml - -The mod.yml file is a YAML format specification for your mod. It will contain the following fields - -* `title` - The title of your mod, as displayed in the mods manager -* `description` - A description of what your mod does -* `originalAuthor` - The name of the original author who created this mod. If you just ported this mod to the modsmanager for someone else, include the original authors name. -* `logo` - The path to the icon.png -* `assets` - A list of assets that will be modified when the mod runs. See `asset types`, for details on creating an asset. Some asset types will work on any game, while others are game specific. - -While you are developing a mod you can create a folder inside the "mods" directory of the mods manager release, IE - -`/mods//` - -## Asset Methods - -* `copy` (any game) - Performs a direct copy to overwrite a file. Works on any file type. - -Asset Example: - -``` -- method: copy - name: msn/jp/BB03_MS103.bar - source: - - name: files/modified_msn.bar -``` - -* `binarc` (KH2) - Specifies a modification to a subfile within a binarc, using one of the available methods. See `binarc methods` for details on implementing a specific method. - -Asset Example - -``` -- method: binarc - name: ard/wi03.ard - source: - - method: spawnpoint - name: b_40 - source: - - name: files/b_40.yml - type: AreaDataSpawn -``` - -## Binarc Methods - -* `copy` (KH2) - Performs a copy on a supfile within a Bar. Must be one of the [following](https://github.com/Xeeynamo/OpenKh/blob/master/OpenKh.Tools.BarEditor/Helpers.cs#L14) types - -Asset Example - -``` -- method: binarc - name: msn/jp/HB01_MS601.bar - source: - - method: copy - name: ms_b - source: - - name: he_c.bdx - type: Bdx -``` - -* `imgd` (KH2) - Replaces a single imgd found within a binarc - -Asset Example - -``` - - name: menu/us/title.2ld - multi: - - name: menu/jp/title.2ld - required: true - method: binarc - source: - - name: titl - type: imgd - method: imgd - source: - - name: title/title1.png - highdef: title/title1_hd.png -``` - -* // `imgz` // `fac` (KH2) - Replaces multiple imgd's found within a binarc. - -Asset Example - -``` - - name: menu/us/title.2ld - multi: - - name: menu/jp/title.2ld - - name: menu/uk/title.2ld - - name: menu/it/title.2ld - - name: menu/sp/title.2ld - - name: menu/gr/title.2ld - - name: menu/fr/title.2ld - - name: menu/fm/title.2ld - required: true - method: binarc - source: - - name: titl - type: imgz - method: imgz - source: - - name: title/title1.png - highdef: title/title1_hd.png - index: 1 -``` - -* `kh2msg` (KH2) - Replaces text found within a kh2 messages file. Uses a yaml file as an source. - -Asset Example - -``` - - name: msg/jp/sys.bar - method: binarc - source: - - name: sys - type: list - method: kh2msg - source: - - name: sys.yml - language: jp -``` - -Yaml Source Example - -``` -- id: 0x432e - en: OpenKH is awesome! - it: OpenKH è incredibile! - sp: ¡OpenKH es increíble! - gr: OpenKH ist großartig! - fr: OpenKH est incroyable! - jp: OPENKHすばらしい! -``` - -* `areadatascript` (KH2) - Modifies a series programs found within a KH2 Spawnscript subfile (located within ard files), using the text format created by OpenKh.Command.SpawnScript. You can only provide a subset of the programs found within the spawnscript, the others will be taken from the original file. - -Asset Example -``` -- method: binarc - name: ard/hb34.ard - source: - - method: areadatascript - name: evt - source: - - name: files/hb34/program-87 - - name: files/hb34/program-7c - - name: files/hb34/program-7d - - name: files/hb34/program-86 - type: AreaDataScript -``` - -Text Source Example -``` -Program 0x7C -Party DEFAULT -Bgm Default Default -AreaSettings 0 -1 - SetJump Type 2 World HB Area 0 Entrance 0 LocalSet 151 FadeType 1 - SetPartyMenu 0 -``` - -* `areadataspawn` (KH2) - Modifies a KH2 Spawnpoint subfile (located within ard files), using an yaml file created using OpenKh.Command.SpawnScript. - -Asset Example - -``` -- method: binarc - name: ard/wi03.ard - source: - - method: spawnpoint - name: b_40 - source: - - name: files/b_40.yml - type: AreaDataSpawn -``` - -* `listpatch` (KH2) - Can modify the following different types of list binaries found within KH2. - * `trsr` - * `cmd` - * `item` - * `sklt` - * `enmp` - * `fmlv` - * `lvup` - * `bons` - * `atkp` - * `przt` - * `magc` - * `objentry` - -Asset Example -``` -- name: 00battle.bin - method: binarc - source: - - name: fmlv - method: listpatch - type: List - source: - - name: FmlvList.yml - type: fmlv -``` - -`trsr` Source Example -``` -2: - ItemId: 347 -``` -`cmd` Source Example -``` -- Id: 1 - Execute: 3 - Argument: 3 - SubMenu: 1 - CmdIcon: 3 - MessageId: 33249 - Flags: Cursor, InBattleOnly - Range: -1 - Dir: 0 - DirRange: -1 - Cost: 0 - CmdCamera: 0 - Priority: 100 - CmdReceiver: 0 - Time: 0 - Require: 0 - Mark: 1 - CmdAction: 0 - ReactionCount: 0 - DistRange: 0 - Score: 0 - DisableForm: 63552 - Group: 2 - Reserve: 0 -``` -`item` Source Example -``` -Stats: -- Ability: 412 - AbilityPoints: 0 - Attack: 0 - DarkResistance: 100 - Defense: 0 - FireResistance: 100 - GeneralResistance: 100 - IceResistance: 100 - Id: 116 - LightningResistance: 100 - Magic: 7 - Unknown: 0 - Unknown08: 100 - Unknown0d: 100 -Items: -- Id: 1 - Type: Consumable - Flag0: 0 - Flag1: 40 - Rank: C - StatEntry: 1 - Name: 33528 - Description: 33529 - ShopBuy: 40 - ShopSell: 10 - Command: 23 - Slot: 0 - Picture: 1 - Icon1: 9 - Icon2: 0 -``` -`sklt` Source Example -``` -- CharacterId: 1 - Bone1: 178 - Bone2: 86 -``` - -`enmp` Source Example -``` -- Id: 0 - Level: 1 - Health: - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - - 1 - MaxDamage: 1 - MinDamage: 1 - PhysicalWeakness: 1 - FireWeakness: 1 - IceWeakness: 1 - ThunderWeakness: 1 - DarkWeakness: 1 - LightWeakness: 1 - GeneralWeakness: 1 - Experience: 1 - Prize: 1 - BonusLevel: 1 -``` - -`fmlv` Source Example -``` -Final: -- Ability: 578 - Experience: 12 - FormId: 5 - FormLevel: 1 - GrowthAbilityLevel: 1 -``` - -`lvup` Source Example -``` -Sora: - 2: - Ap: 0 - Character: Sora - Defense: 0 - Exp: 100 - Level: 2 - Magic: 0 - Padding: 0 - ShieldAbility: 577 - StaffAbility: 577 - Strength: 0 - SwordAbility: 577 -``` - -`bons` Source Example -``` -2: - Sora: - AccessorySlotUpgrade: 0 - ArmorSlotUpgrade: 0 - BonusItem1: 99 - BonusItem2: 0 - CharacterId: 1 - Description: '' - DriveGaugeUpgrade: 0 - HpIncrease: 0 - ItemSlotUpgrade: 0 - MpIncrease: 0 - RewardId: 2 - Unknown0c: 0 -``` - -`atkp` Source Example -``` -- Id: 0 #Hitbox 0 - SubId: 3 - Type: 1 - CriticalAdjust: 0 - Power: 25 - Team: 0 - Element: 0 - EnemyReaction: 0 - EffectOnHit: 2 - KnockbackStrength1: 32767 - KnockbackStrength2: 0 - Unknown: 0000 - Flags: BGHit, LimitPAX, Land, CapturePAX, ThankYou, KillBoss #Every possible AttackFlag shown - RefactSelf: 0 - RefactOther: 0 - ReflectedMotion: 0 - ReflectHitBack: 0 - ReflectAction: 0 - ReflectHitSound: 0 - ReflectRC: 0 - ReflectRange: 0 - ReflectAngle: 0 - DamageEffect: 0 - Switch: 1 - Interval: 1 - FloorCheck: 1 - DriveDrain: 1 - RevengeDamage: 1 - AttackTrReaction: 1 - ComboGroup: 1 - RandomEffect: 1 - Kind: ComboFinisher - HpDrain: 15 -``` - -`przt` Source Example -``` -- Id: 1 - SmallHpOrbs: 0 - BigHpOrbs: 1 - BigMoneyOrbs: 1 - MediumMoneyOrbs: 1 - SmallMoneyOrbs: 1 - SmallMpOrbs: 1 - BigMpOrbs: 1 - SmallDriveOrbs: 0 - BigDriveOrbs: 1 - Item1: 1 - Item1Percentage: 1 - Item2: 0 - Item2Percentage: 0 - Item3: 0 - Item3Percentage: 0 -``` - -`magc` Source Example -``` -- Id: 0 - Level: 3 - World: 1 - FileName: magic/FIRE_3.mag - Item: 21 - Command: 120 - GroundMotion: 56 - GroundBlend: 2 - FinishMotion: 57 - FinishBlend: 2 - AirMotion: 58 - AirBlend: 2 - Voice: 7 - VoiceFinisher: 11 - VoiceSelf: -1 -``` - -`objentry` Source Example -``` -4: - ObjectId: 4 - ObjectType: ZAKO - SubType: 0 - DrawPriority: 0 - WeaponJoint: 0 - ModelName: M_EX520 - AnimationName: M_EX520.mset - Flag: 8 - TargetType: 1 - Padding: 0 - NeoStatus: 1006 - NeoMoveset: 0 - Weight: 100 - SpawnLimiter: 8 - Page: 1 - ShadowSize: 1 - CommandMenuOption: Default - SpawnObject1: 0 - SpawnObject2: 0 - SpawnObject3: 0 - SpawnObject4: 0 -``` - -An example of a fully complete mod.yml can be seen below, and the full source of the mod can be seen [here](https://github.com/OpenKH/mod-template) - -``` -title: OpenKH mod template -originalAuthor: OpenKH open-source assets -description: An example of mod to use as a template -assets: - - name: menu/us/title.2ld - multi: - - name: menu/jp/title.2ld - - name: menu/uk/title.2ld - - name: menu/it/title.2ld - - name: menu/sp/title.2ld - - name: menu/gr/title.2ld - - name: menu/fr/title.2ld - - name: menu/fm/title.2ld - required: true - method: binarc - source: - - name: titl - type: imgz - method: imgz - source: - - name: title/title1.png - highdef: title/title1_hd.png - index: 1 - - name: msg/jp/sys.bar - method: binarc - source: - - name: sys - type: list - method: kh2msg - source: - - name: sys.yml - language: jp - - name: msg/us/sys.bar - method: binarc - source: - - name: sys - type: list - method: kh2msg - source: - - name: sys.yml - language: en - - name: msg/it/sys.bar - method: binarc - source: - - name: sys - type: list - method: kh2msg - source: - - name: sys.yml - language: it -``` - -## Publishing a mod - -Mods should be published to a public github repository, so that users an install the mod just by providing the repository name. - - -It is recommended to apply the following tags to the repository, in order to make it easily found by searching GitHub for mods manager mods. - -`openkh-mods` - -`` (ie `kh2` or `bbs`) +This document will focus on teaching you how to utilize the OpenKH Mod Manager as necessary for both the PC ports of all [legacy class](#legacy-class-kh-games) KH games, as well as the PS2 versions of Kingdom Hearts (& Final Mix) and Kingdom Hearts II (& Final Mix). + +> If you are having trouble with the mod manager and need help, try looking at our [Frequently Asked Questions](./FAQ.md). + +> If you are looking for a guide on creating mods, refer to the sister guide to this one [here](./creatingMods.md). +>> It includes both a simple and advanced set of mod generation instructions. **Use the table of contents!** + +# [Table of Contents]() +* [1. Intro to Mod Manager](#intro-to-mod-manager) + * [Installation & Panacea](#installation--panacea) +* [2. Installing Mods](#installing-mods) +* [3. Running the Game With Mods](#running-the-game-with-mods) +* [4. Additional Functions](#additional-functions) +* [5. Game Classifications](#game-classifications) + * [Legacy Class](#legacy-class-kh-games) + * [Modern Class](#modern-class-kh-games) + * [Miscellaneous Class](#miscellaneous-class-kh-games) + +# Intro to Mod Manager + +To start, this guide assumes you have already downloaded the [latest OpenKH release from GitHub](https://github.com/OpenKH/OpenKh/releases) and extracted the zip file somewhere you can remember the location of. This guide will also largely focus on the HD PC release of KH games, as they are purportedly more accessible for both players wishing to use mods and players who wish to learn to mod themselves. (This very mod manager ensures exactly that to be correct.) + +OpenKH is by and large self-contained, so all of your configurations, installed mods, WIP mods (if you are a mod author), etc. will be easily contained within the extracted `openkh` folder. + +## Installation & Panacea + +To start, open `OpenKh.Tools.ModsManager.exe`. Some users may have file extensions disabled (the default in Windows), so it may be missing the `.exe` at the end. This is okay. + +Upon opening for the first time, you will be greeted like so: + +> ![alt text](image.png) + +You might be thinking, "Wait, OpenKH Game Engine? I just want to mod my own copy of the original games!" Well, you're in luck! That option has a dropdown menu! Upon selecting `PC Release`, your window will change to look like this: + +> ![alt text](image-1.png) + +Make sure to select whether you are installing from Epic Games Store or Steam. **Both are supported equally by OpenKH!** + +You will also need to provide the install location of either KH1.5+2.5 or KH2.8 (or both!). The autodetect function may or may not work for you. If not, no worries. You need to then navigate to the install location of your game collection(s) in question. For Steam, for example, the default path would be: + +> C:/Program Files (x86)/Steam/steamapps/common/KINGDOM HEARTS -HD 1.5+2.5 ReMIX- + +After clicking next, you will be presented with this screen: + +![alt text](image-2.png) + +As the block of text tells you, Panacea is the mod loader which allows you to modify your game without directly overwriting the original game files. This is what allows the mod manager to work, and also allows you to enable and disable mods at the click of a button. + +**Note: Panacea must be installed for both collections if you wish to modify both 1.5+2.5 & 2.8.** + +To ensure both are mod-ready, use the dropdown menu at the top to select one collection at a time, and then click `Install Panacea for Windows`. + +**Steam Deck & Linux desktop users must use the** `Install Panacea for Linux` **button instead.** + +Continuing, the next screen presented will allow you to install and pre-configure [Lua Backend](https://github.com/Sirius902/LuaBackend) for use with the games as well. This is a hook that allows the games you select to use Lua mods, akin to PCSX2's `pnach` function from ages past. Many mods utilize Lua to the fullest extent. Some incredible examples would be [Critical Mix](https://www.nexusmods.com/kingdomheartsfinalmix/mods/93) for KH1 and [BBS - Better Battle System](https://www.nexusmods.com/kingdomheartsbirthbysleepfinalmix/mods/31), both mods created by the very talented Xendra. + +The next screen will present you with game extraction procedures: + +![alt text](image-3.png) + +**Note: The extraction process WILL take a long time, depending on which games you decide to set up mods for.** + +If you wish to only use Lua script mods, you may skip this step. However, if you are using mods which change assets in the games, you absolutely **must** extract your titles using this page. The reason for this is OpenKH relies on the extracted game data to effectively "hijack" the games' natural location where it attempts to read files from within compressed `.pkg` files. This will also allow you to modify your games without worrying about losing the original assets, so you can uninstall mods you no longer wish to use without having to verify the integrity of your game files via Steam or Epic. + +## Installing Mods + +Congratulations! You have successfully set up and installed the OpenKH Mod Manager! + +You will be greeted with a blank window that looks like this: + +![alt text](image-4.png) + +There are some key functionalities hidden within the mod manager, but this section will focus on teaching you the basics to get mods running first and foremost. + +To start, on the right hand side of the middle separator, there are five buttons. (They may change over time so the screenshot may not be reflective of current releases. This does not affect the guide.) They are as follows, in order: + +* Move currently selected mod to the top of the list (highest priority) +* Move currently selected mod up one slot, increasing priority +* Move currently selected mod down one slot, decreasing priority +* Add a new mod +* Remove currently selected mod + +There are two primary methods of installing mods, as you will see when clicking the `Add a new mod` [+] button: + +![alt text](image-5.png) + +Mod authors may publish their mods directly to GitHub, a repository website, or distribute `.zip` archive files containing the same mod contents that would otherwise be identical to the GitHub method. + +The aforementioned [Critical Mix](https://www.nexusmods.com/kingdomheartsfinalmix/mods/93) mod is an example of a mod that distributes its contents through an archive. An example of a mod that is distributed through GitHub would be Keytotruth's [Ultimate Mix](https://github.com/Truthkey/BBSUM_Mod) mod for Birth by Sleep. + +To install a mod through GitHub, you simply copy the end portion of the mod you wish to install's GitHub URL into the provided line. For example: `Truthkey/BBSUM_Mod` + +To install a mod through an archive, instead simply click the `Select and install Mod Archive or Lua Script` button, and provide the archive in question. + +Once you have some mods installed, your page will look more like this: + +![alt text](image-6.png) + +You're now free to check or uncheck which mods you wish to play with at any given time! Some mods may overwrite the same entire file. Because of this, OpenKH includes a priority system. Mods higher on the list have higher priority and will take precedence over mods lower in the list. + +## Running the Game With Mods + +All you need to do now is click `Mod Loader` at the top and select `Build Only` or `Build and Run`. + +![alt text](image-7.png) + +Here is a quick breakdown of the four options: +* `Build and Run` will compile your mod list into a `mod` folder within the `openkh` directory, and then run your selected game with the mods applied. +* `Build Only` will compile your mod list, however it will not run the game immediately after. +* `Run Only` will launch your game, but not load any selected mods (aside from Lua scripts; those will be applied anyway). +* `Fast Restore` will attempt to un-modify any original `.pkg` files provided by the vanilla game, if you used the Mod Manager's (hidden) patcher function instead of the `Build` function. + +## Additional Functions + +The `Settings` menu at the top of the window has some additional options that may be useful in certain scenarios. + +![alt text](image-9.png) + +* `Run wizard` will re-initialize the mod manager from the beginning. + * Changes only apply as you progress through, so canceling out will not overwrite your current settings. + * This will also NOT clear out your mods lists. +* `Auto Update Mods` is self-explanatory. + * Only works for GitHub repository mods! +* `Check for update` will update the whole of OpenKH, not just the Mod Manager. +* `Check Mods for Updates` will force your mod list to search for updates where applicable. + * Useful only if you would be too inconvenienced to restart the whole program just so the `Auto Update` function can run. +* `Dark Mode` for the clinically sane. +* `Panacea Settings` + * `Enable Console` in case you need to debug mods not loading properly. + * `Enable Debug Log` for the same. + * `Enable Cache` + * `Enable Quick Menu` + +![alt text](image-8.png) + +* Version info +* Link to the latest OpenKH release on GitHub +* Link to the OpenKH code repository +* Link to the OpenKH documentation website +* Link to the OpenKH issue/feature tracker built into GitHub +* Link to the OpenKH Discord server +* `Dev View` which will allow you to patch your PC port like a filthy animal. + * This option, contradictory to the information above, will allow you to modify your games without extraction. + * The upside to this is you do not have potentially 120GB of disk space being used. + * The downside is you may encounter trouble later trying to run your game completely vanilla again without reinstalling the games from scratch. + * Patching is far messier than dynamic replacement, so we opt for the latter over patches. Additionally, most people also have the hard drive space to spare, and would likely only play one game at a time instead of all five legacy class games at once. + +![alt text](image-10.png) + +Presets allow you to have a massive mod list with certain priorities, load orders, etc. set so you can tailor your playthrough with a couple of simple clicks. You can even share your presets with friends and the community through the `presets` folder within `openkh`! + +![alt text](image-11.png) + +#### That about sums up what you need to know to use the OpenKH Mod Manager! If you have any questions beyond this point, feel free to reach out to the open arms community in [Discord](discord.openkh.dev). We don't bite! + +## Game Classifications + +### Legacy Class KH Games + +The following games are considered "legacy class" within the confines of OpenKH so as to make it easy to determine what sort of utilities, verbiage, and documentation to refer to when modifying them as opposed to "[modern class](#modern-class-kh-games)" titles. + +* Kingdom Hearts (& Final Mix) +* Kingdom Hearts II (& Final Mix) +* Kingdom Hearts: Re:Chain of Memories +* Kingdom Hearts: Birth by Sleep (& Final Mix) +* Kingdom Hearts: Dream Drop Distance (HD & 3D) + +### Modern Class KH Games + +These games are considered "modern class" as opposed to "[legacy class](#legacy-class-kh-games)" as they use more modern game engines with either free to download, free to use, or FOSS aspects to them. Due to the nature of these engines, their pipeline for making modifications (and thus, documentation) is far more streamlined for general use, and will always be considered secondary (though welcome) additions to the OpenKH project. + +* Kingdom Hearts 0.2 Birth by Sleep: A Fragmentary Passage +* Kingdom Hearts III (& Re:Mind) +* Kingdom Hearts: Melody of Memory +* Kingdom Hearts IV + +### MIscellaneous Class KH Games + +These are games which, at the time of writing, are not considered to be within the scope of OpenKH. However, any and all documentation on these titles are more than welcome, as the preservation of knowledge in this series is the first and foremost goal of OpenKH. + +* Kingdom Hearts 358/2 Days +* Kingdom Hearts: Re:Coded +* Kingdom Hearts Unchained χ / Union χ[Cross] / Dark Road +* Kingdom Hearts χ[chi] +* Kingdom Hearts: Chain of Memories **(GBA)** +* Everything else