-
Notifications
You must be signed in to change notification settings - Fork 0
Home
PKCore (Project Kyaro Core) is the next-generation core engine and modding framework for Suikoden I & II HD Remaster. It provides zero-compromise runtime texture injection, high-performance DDS decoding (BC1/BC3/BC7), CriWare sound swapping (ACB/AWB file redirection), dynamic dialogue and NPC portrait frameworks (for both Suikoden I & II), save slot party member mini portraits, battle formation spacing adjustments, character weapon range overrides, Suikoden II war battle rebalancing, UI scaling enhancements, and extensive graphical customization.
| 🚀 Getting Started | ⚙️ Configuration Guide | 🎨 Texture Modding |
|---|---|---|
| • Requirements • Installation • Directory Layout |
• Settings Reference • Visual & UI Toggles • Live Hot-Reloading |
• Formats (PNG, DDS BC7) • Priority Hierarchy • Manifest Caching |
| 🎭 NPC & Dialogue Portraits | 🔊 Sound Swapping | ⚔️ War Battles |
|---|---|---|
| • Speaker ID Mapping • Expression Variants • S1 & S2 Integration |
• ACB / AWB Audio Banks • Music & SFX Redirection • Better Launcher BGM |
• JSON Ability Overrides • Unit Stats & Attributes • Commander Traits |
| 🏹 Battle Ranges & Formations | 🖼️ Save Slot Party Portraits | 📦 00-Mods Guide |
|---|---|---|
| • Weapon Range Overrides • 6-Hero Formation Spacing • Hot-Reloadable Config |
• In-Memory Portrait Cache • S1 & S2 Save/Load UI • Custom Texture Priority |
• Mod Packaging • Isolated Folders • Conflict Resolution |
┌───────────────────────────────┐
│ PKCore Architecture │
└───────────────┬───────────────┘
│
┌─────────────────────────┬──────────────┴─────────────┬─────────────────────────┐
▼ ▼ ▼ ▼
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ High-Perf DDS │ │ 00-Mods Layer │ │ NPC Portraits │ │ War Battle & │
│ & Texture Engine│ │ Overrides & Audio│ │ & Save Portraits │ │ Battle Formation │
│ (BC1 / BC3 / BC7)│ │ (Top-Priority) │ │ (S1 & S2 Support)│ │ (S2 Range Mods) │
└──────────────────┘ └──────────────────┘ └──────────────────┘ └──────────────────┘
- ⚡ Zero-Lag Manifest Caching: Scans thousands of texture replacements and caches indices in XML — boot times drop from seconds to milliseconds.
- 🚀 Native GPU DDS Acceleration: Direct in-place memory replacement using BC1, BC3, and high-fidelity BC7 textures (with DX10 header support).
- 🖼️ Save Slot Party Member Portraits: Automatically renders high-resolution mini party portraits in save/load slots for both Suikoden I and II with instant 0ms cached lookups.
-
🏹 Character Battle Range Overrides (S2): Configurable weapon range modification (e.g. Kasumi, Luc, Mazus, Viki, Gantetsu, Badeaux, Sierra from Short
Sto MediumM), removing formation warnings and allowing back-row attacks. -
📐 Battle Position Formation Adjustments (S2): Configurable party formation spacing presets (
wide,widest) preventing back-row party members from blocking front-row characters. - 🎭 Dynamic NPC & Dialogue Portrait Framework: Inject high-res dialogue portraits for any NPC or character with multi-language, emotion variant, and cutscene fallback support across both games.
-
🛡️ Data-Driven War Battles: Deep rebalancing of Suikoden II Tactical War Battles via intuitive
S2WarAbilities.json. -
🔊 CriWare Sound Swapping: Drop-in
.acb/.awbsound and music redirection without modifying game archives. - 🎮 UI & Immersion Customization: Customizable Save Point Crystal colors, UI scaling, Enhanced Gallery backgrounds, classic PSX save windows, and controller button prompt overrides.
- Game: Suikoden I & II HD Remaster (Steam or Epic Games, Unity 2022.3.28f1)
- Mod Loader: BepInEx 6.0.0-pre.2 (IL2CPP 64-bit)
- Recommended Companion: Suikoden Fix by d3xMachina
- Install BepInEx 6.0.0-pre.2 IL2CPP into your game root folder.
- Download the latest Project Kyaro / PKCore release.
- Place
PKCore.dllinBepInEx/plugins/PKCore/and any mod assets inPKCore/Textures/,PKCore/Sound/, orPKCore/00-Mods/. - Launch the game once to auto-generate the configuration file at
BepInEx/config/faospark.pkcore.cfg.
<Game Directory>/
├── BepInEx/
│ ├── config/
│ │ └── faospark.pkcore.cfg <-- Primary BepInEx configuration
│ └── plugins/
│ └── PKCore/
│ └── PKCore.dll <-- Core engine plugin
└── PKCore/
├── Cache/
│ └── texture_manifest.xml <-- Auto-generated texture index
├── Config/ <-- Data-driven JSON configuration
│ ├── S2WarAbilities.json <-- War battle custom stats & abilities (S2)
│ ├── PortraitMappings.json <-- Character name to portrait image map
│ ├── PortraitVariants.json <-- Expression & emotion variant definitions
│ ├── DialogOverrides.json <-- Specific dialogue line portrait overrides
│ ├── S1SpeakerOverrides.json <-- Suikoden 1 speaker ID overrides
│ └── S2SpeakerOverrides.json <-- Suikoden 2 speaker ID overrides
├── Debug/ <-- Runtime database & asset dumps
│ ├── JsonDumps/ <-- AssetBundle TextAsset & JSON dumps
│ ├── TextDB_GSD1.json <-- Suikoden 1 dialogue database dump
│ └── TextDB_GSD2.json <-- Suikoden 2 dialogue database dump
├── JsonOverrides/ <-- Custom JSON TextAsset replacements
├── Textures/ <-- Base texture overrides
│ ├── GSD1/ <-- Suikoden 1 specific
│ │ └── NPCPortraits/ <-- S1 dialogue portraits (PNG / DDS)
│ ├── GSD2/ <-- Suikoden 2 specific
│ │ └── NPCPortraits/ <-- S2 dialogue portraits (PNG / DDS)
│ └── NPCPortraits/ <-- Shared dialogue portraits
├── Sound/ <-- Base CriWare sound banks
└── 00-Mods/ <-- High-priority mod packages
├── PKS1/ <-- Project Kyaro S1 sprites
├── PKS2/ <-- Project Kyaro S2 sprites
└── Better-Launcher-BGM-Mod/ <-- Launcher BGM mod
PKCore uses several JSON files located in PKCore/Config/ for deep data-driven customization. Mod packages in PKCore/00-Mods/<ModName>/ can also supply their own versions to seamlessly merge overrides:
| JSON File | Default Location | Description |
|---|---|---|
S2WarAbilities.json |
PKCore/Config/ |
Custom unit stats (ATK, DEF, MOV, HP), subunit leader bonuses, and tactical abilities for Suikoden II war battles. |
PortraitMappings.json |
PKCore/Config/ |
Links speaker and character names directly to high-resolution portrait texture filenames. |
PortraitVariants.json |
PKCore/Config/ |
Configures emotional expression mapping rules (e.g., smile, angry, sad, shock, hurt, close). |
DialogOverrides.json |
PKCore/Config/ |
Granular per-line dialogue overrides mapping specific dialogue IDs to custom portraits. |
S1SpeakerOverrides.json |
PKCore/Config/ |
Maps Suikoden 1 internal speaker IDs to character names and portrait keys. |
S2SpeakerOverrides.json |
PKCore/Config/ |
Maps Suikoden 2 internal speaker IDs to character names and portrait keys. |
TextDB_GSD1.json / TextDB_GSD2.json |
PKCore/Debug/ |
Cumulative dialogue and speaker dumps created at runtime when exploring scenes. Useful for finding dialogue IDs and text references. |
PKCore implements a multi-tier override system ensuring modularity and conflict resolution:
| Priority | Layer | Path | Description |
|---|---|---|---|
| 1 (Lowest) | Vanilla Asset | StreamingAssets/ |
Original base game files |
| 2 | Base Overrides |
PKCore/Textures/ & PKCore/Sound/
|
Default Project Kyaro replacements |
| 3 | Game Isolation |
PKCore/Textures/GSD1/ or GSD2/
|
Overrides restricted to Suikoden 1 or 2 |
| 4 (Highest) | 00-Mods Packages | PKCore/00-Mods/<ModName>/ |
Always wins. Multiple mods sorted alphabetically (zz_ prefix wins) |
All options are configurable in BepInEx/config/faospark.pkcore.cfg:
-
EnableProjectKyaroSprites(true/false): Toggle Project Kyaro HD upscaled sprites. -
DisableSpritePostProcessing(true/false): Strips bloom/vignette from sprites to eliminate bright border seams. -
SpriteFilteringEnabled(true/false): Bilinear + Anisotropic filtering for smooth rendering. -
SMAAQuality(Off,Low,Medium,High): Anti-aliasing quality level.
-
ControllerPromptType(PlayStation,PlayStation5,Xbox,Switch,Generic): Force controller prompt button glyphs. -
ScaleDownDialogBox(true/false): Compact dialogue box (80% size) for improved scene visibility. -
ScaledDownMenu(true/false): Scaled-down main pause/status menu. -
ClassicSaveWindow(true/false): Restores the classic PSX-style save slot interface in Suikoden II. -
ShowSaveSlotPartyPortraits(true/false): Displays mini party member portraits next to character level (Txt_Lv) in save/load slots. -
DisablePortraitDialogMask(true/false): Removes the dark vignette gradient overlay from dialogue portraits. -
EnhancedGallery(true/false): Replaces Movies, Events, and Sounds gallery backgrounds with custom textures inspired by the PSP release. -
PSPLauncher(true/false): Enable the PSP-inspired launcher interface.
-
EnableBattlePositionAdjustments(true/false): Adjusts 6-character party formation spacing so back-row characters don't obstruct front-row members. -
S2BattlePositionPreset(default,wide,widest): Formation spacing preset (wideis recommended). -
EnableCharacterRangeOverrides(true/false): Enable custom weapon/attack range modification with live hot-reloading. -
S2CharacterRangeOverrides(string): Comma-separated list of range overrides (e.g.Kasumi:M, Luc:M, Mazus:M, Viki:M, Gantetsu:M, Badeaux:M, Sierra:M). -
EnableWarAbilityMod(true/false): Tactical war battle ability customization viaS2WarAbilities.json.
-
SavePointColor(default,blue,green,red,purple,yellow,cyan,random, etc.): Customizes the crystal save orb. -
DisableSavePointGlow(true/false): Removes the washed-out white glare from save points. -
DisableWorldMapClouds/DisableWorldMapSunrays(true/false): Cleans up the world map visuals. -
ColoredIntroAndFlashbacks(true/false): Restores vibrant colors to flashback sequences. -
BetterLauncherBGM(true/false): Replaces launcher ambient music with Suikoden 2's adventure start theme.
With ShowSaveSlotPartyPortraits = true, PKCore brings party member portraits directly into the Save and Load screens for both Suikoden I and Suikoden II:
-
Suikoden I: Dynamic resolution across in-memory save lists and decrypted save data, utilizing
Ws_face_c.CharacterIDConvertToFaceIDStaticto index portraits accurately (e.g.fp_gsd1_000for Tir, Joshua, etc.). -
Suikoden II: Instant party member array lookup (
party_cha_no) mapped directly to high-res character portraits. -
In-Memory Caching: 0ms lookups after initial read during save menu scrolling, prioritizing custom DDS/PNG textures from
PKCore/Textures/over vanilla sprites.
Explore in-depth documentation pages for every system:
| Guide | Description |
|---|---|
| 📖 00-Mods Guide | How to build, package, and structure plug-and-play mods. |
| 🖼️ Custom Textures Guide | Dumping textures, DDS BC7 compression, naming syntax, and hash bypasses. |
| 🎭 NPC Portrait Walkthrough | Adding portraits to faceless NPCs, variant expressions, DDS BC7 support, and speaker IDs. |
| 🏹 Character Battle Ranges & Formations | Modifying character weapon ranges (S/M/L) and adjusting battle formation spacing presets. |
| ⚔️ War Battle Modding Guide | Customizing Suikoden II tactical units, leader bonuses, and special skills. |
| 🔊 Sound Swapping Guide | CriWare ACB/AWB audio swapping and custom BGM/SFX redirection. |
| ⚡ Caching & Performance | Deep dive into the XML manifest cache, scene unloader, and smart memory. |
| 📝 Placeholder Text System | Dynamic replacement of protagonist and castle names in dialogue. |
| ⚙️ Configuration Reference | Full variable list and default value reference table. |
Q: My custom texture is not showing up in-game.
- Verify that your file is named to match the Unity texture name or hash pattern.
- Enable
LogReplaceableTextures = trueinfaospark.pkcore.cfgto verify exact runtime names in the console/log. - If you added new files with manifest caching enabled, delete
PKCore/Cache/texture_manifest.xmlto force a re-index.
Q: How do I run borderless fullscreen?
Use Unity's native -popupwindow launch parameter:
-
Steam: Right-click Game → Properties → General → Launch Options → add
-popupwindow -
Epic Games: Add
-popupwindowto your desktop shortcut target.
Q: Migrating from old PKExtended / Special K?
- Remove
PKextended.dllandfaospark.pkextended.cfgfromBepInEx/. - Remove Special K (
dxgi.dll/d3d11.dll) andSK_Res/folder — Special K is no longer required as PKCore handles all injection natively.
- Author: faospark
- Texture Pack: Project Kyaro HD Remaster Mod
- Special Thanks: d3xMachina for Suikoden Fix and speaker identification research.