Archived on 2026-10-24. The Godot rewrite is cancelled. Migration decisions and work checklists below are withdrawn. Original claims, code examples, file paths, and completion statements have not all been revalidated. Use the current documentation and issue register for maintenance decisions.
Unity Data Asset Mapping¶
Purpose¶
Map the current Unity data assets by type so reviewers can see which assets are static definitions, which assets are mutated at runtime, and which gameplay systems read or write them.
This document describes current Unity behavior only.
Asset Type Summary¶
| Asset Type | Script | Main Asset Locations | Runtime-Mutated Fields | Main Readers | Main Writers |
|---|---|---|---|---|---|
Ability |
Assets/Script/Game/Data/Ability.cs |
Assets/Scriptable Object/Ability, Assets/Scriptable Object/Ability/Character |
isOnCooldown, currentCooldownTime; some assets also serialize changed cooldown values after play |
AbilityHolder, AbilityFunction, Player, PlayerWeapon, PlayerAttack, UpgradeFunction, RewardRoller |
AbilityFunction, AbilityHolder, Unity editor/play mode serialization |
Upgrade |
Assets/Script/Game/Data/Upgrade.cs |
Assets/Resources/Upgrade, Assets/Resources/SpecialUpgrade, Assets/Scriptable Object/SpecialUpgrade, Assets/Scriptable Object/BossUpgrade, Assets/Resources/SpecialUpgrade/UpgradeEvolve, Assets/Resources/SpecialUpgrade/CharWeaponEvo |
modifiedWeight, upgradeTaken, isUnlocked |
RewardRoller, UpgradeSelection, UpgradeFunction, UpgradeEvoFunction, AchievementManager, GameDataLoader |
RewardRoller, UpgradeFunction, UpgradeEvoFunction, save/progression systems |
Character |
Assets/Script/Game/Data/Character.cs |
Assets/Resources/Character |
unlocked / forceUnlocked / availability can be save/progression driven |
GameSession, GameInitialization, Player, character select UI, achievements |
Save/progression systems, unlock logic |
LevelData / StageMap |
Assets/Script/Game/Data/LevelData.cs |
Assets/Resources/Stage, Assets/Scriptable Object/Stage |
StageMap.isUnlocked can be progression state |
GameSession, GameManager, SpawnerEventManager, stage select UI |
Save/progression systems, editor |
SpawnerData / SpawnEvent |
Assets/Script/Game/Data/SpawnerData.cs |
Assets/Scriptable Object/Spawner |
SpawnEvent.isSpawning, SpawnEvent.isActive |
SpawnerEventManager |
SpawnerEventManager; some assets already serialize runtime flags as 1 |
Achievement |
Assets/Script/Game/Data/Achievement.cs |
Assets/Scriptable Object/Achievement |
isUnlocked |
AchievementManager, collection UI, save/progression |
Achievement/save systems |
ShopUpgrade |
Assets/Script/App/Data/ShopUpgrade.cs |
Assets/Scriptable Object/Shop |
currentUpgradeLevel |
ShopManager, shop UI, PlayerModifier setup |
Shop/save systems |
Ability Assets¶
| Data | Current Mapping |
|---|---|
| Locations | General abilities live in Assets/Scriptable Object/Ability/*.asset; character-starting abilities live in Assets/Scriptable Object/Ability/Character/*.asset. |
| Key fields | type, cooldownTime, staminaCost, isOnCooldown, currentCooldownTime. |
| Registration | AbilityFunction.AddAbility appends the asset reference to a player's ability list and resets cooldown state on the same asset instance. AbilityHolder.PlayerSettingsAbilityFirstTime adds the selected character ability after character initialization. UpgradeFunction.SelectUpgrade adds upgrade-granted abilities. |
| Runtime mutation | AbilityFunction.CooldownTimer and CurrentCooldownTimer mutate isOnCooldown and currentCooldownTime. AbilityHolder can also override cooldowns for character abilities such as ProtoBarrier, GroundBreaker, HeavenYangSword, and TidalVeil. |
| Evidence of saved runtime state | Some serialized assets currently contain non-default runtime values, for example Frenzy.asset and Rocket Barrage.asset with isOnCooldown: 1, and some character ability assets with nonzero currentCooldownTime. |
| Risk | Static asset data and per-run/per-player cooldown state are mixed. In multi-player runs, both players may reference the same asset unless cloned elsewhere. Unknown / needs manual confirmation. |
Upgrade Assets¶
| Data | Current Mapping |
|---|---|
| Locations | Basic upgrades in Assets/Resources/Upgrade; production special upgrades in Assets/Resources/SpecialUpgrade; additional special/test/in-development upgrades in Assets/Scriptable Object/SpecialUpgrade; boss upgrades in Assets/Scriptable Object/BossUpgrade; evolution upgrades in Assets/Resources/SpecialUpgrade/UpgradeEvolve; character weapon evolutions in Assets/Resources/SpecialUpgrade/CharWeaponEvo. |
| Key fields | idname, localized upgradeName, rarity, upgradeList, value, ability, appearsInStages, icon, preview, weight, modifiedWeight, isBasicUpgrade, appearInSpecialChest, maxUpgrade, upgradeTaken, requiredUpgrade, evolve, requiredAchievement, isUnlocked, popularity. |
| Runtime mutation | upgradeTaken increments when selected. modifiedWeight is used during reward rolling. isUnlocked is progression/save state. |
| Behavior owner | UpgradeFunction.SelectUpgrade owns almost all immediate behavior. UpgradeEvoFunction owns evolution condition coroutines and replaces evolved abilities. RewardRoller owns eligibility and weighted selection. |
| Risk | The asset points to an Ability asset, but behavior is not inside the ability or upgrade asset. The actual behavior is spread through UpgradeFunction, AbilityHolder, Player, PlayerWeapon, and PlayerAttack. |
Character Assets¶
Production character assets are under Assets/Resources/Character.
| Character Asset | ID | Display Name / Class | Starting Weapon Ref | Default Ability Ref | Base Stats |
|---|---|---|---|---|---|
Archer.asset |
ARCHER |
Shara / Moonlit Archer | prefab guid 893e614f2924fb84a835bb4d7dce794c |
ability guid 5faa1e12db28e1d4fb98f9b03ab66865 |
HP 80, STM 80, regen 1, dash cost 20, CDMG 50, CCH 5, MS 3.1, dash speed 8, dash duration 0.5, SAMP 30, damage taken 100, range 11 |
Celestial.asset |
CELESTIAL |
Wu Ran / Celestial Cultivator | prefab guid 62ee7cf3bc350f54c90d031b305a17e9 |
ability guid 3e87df174bf0d4d488e48f7bd57664df |
HP 110, STM 120, regen 1, dash cost 20, CDMG 50, CCH 5, MS 2.9, dash speed 7, dash duration 0.65, SAMP 50, damage taken 80, range 10 |
Knight.asset |
KNIGHT |
Zane / Ironclad Knight | prefab guid c2696b0d075171442875c2751fdd7b50 |
ability guid a50a3a22ad4f58a4b831df2814cfaf42 |
HP 150, STM 100, regen 2, dash cost 20, CDMG 50, CCH 1, MS 2.6, dash speed 4, dash duration 0.6, SAMP 10, damage taken 75, range 3 |
Miner.asset |
MINER |
Theo / Combat Miner | prefab guid bb511ef61485dfe49abc203b22a37bed |
ability guid 47ee50598ccf58545ac57d41b0d84eab |
HP 125, STM 150, regen 2, dash cost 20, CDMG 100, CCH 10, MS 2.9, dash speed 6, dash duration 0.5, SAMP 10, damage taken 85, range 2.5 |
Priestess.asset |
PRIESTESS |
Tiamra / Tidefallen Priestess | prefab guid f9aa235001c621d4cb99acf0be9e02e5 |
ability guid 8b6157a334a1f5441823078abd20ebe7 |
HP 100, STM 100, regen 0.7, dash cost 20, CDMG 25, CCH 1, MS 2.9, dash speed 5, dash duration 0.5, SAMP 25, damage taken 90, range 3 |
Soldier.asset |
SOLDIER |
Alex / Mercenary Soldier | prefab guid 52b0d040dc8b2bf478cadb6aea14369c |
ability guid 9db9a838493ecca429eacc1008a8aa56 |
HP 100, STM 100, regen 1, dash cost 20, CDMG 50, CCH 1, MS 2.8, dash speed 5, dash duration 0.5, SAMP 10, damage taken 100, range 12 |
StarWanderer.asset |
STARWANDERER |
Zenova / Star Wanderer | prefab guid d6c88e0d5297a4b4fb4af4642ecb5017 |
ability guid aba2410dc1ceaa8428aba9a4a048c8ca |
HP 125, STM 80, regen 1, dash cost 15, CDMG 50, CCH 5, MS 2.8, dash speed 5, dash duration 0.5, SAMP 20, damage taken 100, range 12 |
Runtime readers include GameSession, GameInitialization, Player, PlayerModifier, PlayerWeapon, AbilityHolder, and character select UI. forceUnlocked is set on Celestial and Priestess assets. Exact unlock persistence authority is Unknown / needs manual confirmation.
LevelData And StageMap Assets¶
| Stage Asset | Stage Name | Available | Stage Index | Boss Ref | Stage Maps |
|---|---|---|---|---|---|
Assets/Resources/Stage/Stage_1.asset |
Meadow | 1 | 2 | boss prefab guid e9bb8d8dda983e24da8f057fea2afa5a |
1_EASY 300s unlocked, 1_MEDIUM 720s unlocked, 1_HARD 720s unlocked, 1_INSANE 900s unlocked, 1_CHAOS 900s locked |
Assets/Resources/Stage/Stage_2.asset |
Crystal Mine | 1 | 3 | boss prefab guid e757716d454d5e1468e42e5ce2026ea6 |
2_EASY 300s unlocked, 2_MEDIUM 720s unlocked, 2_HARD 720s unlocked, 2_INSANE 900s locked, 2_CHAOS 900s locked |
Assets/Resources/Stage/Stage_3.asset |
Snowdrift Vale | 1 | 3 | boss prefab guid dd7d841e7766011459c4321eae3b048f |
3_EASY 300s locked, 3_MEDIUM 720s locked, 3_HARD 720s locked, 3_INSANE 900s locked, 3_CHAOS 900s locked |
Assets/Resources/Stage/Stage_4.asset |
Crimson Desolate | 0 | 4 | none | 4_EASY 300s locked, 4_MEDIUM 720s locked, 4_HARD 900s locked; all mapped to placeholder spawner guid 49a13658b8a1cb047ba70acd631a2bb3 |
Assets/Resources/Stage/Stage_5.asset |
Drake Mountain | 0 | 5 | Unknown / needs manual confirmation | 5_EASY 300s locked, 5_MEDIUM 720s locked, 5_HARD 900s locked; all mapped to placeholder spawner guid 49a13658b8a1cb047ba70acd631a2bb3 |
Assets/Scriptable Object/Stage/Experimental.asset |
Experimental | 0 | 99 | Unknown / needs manual confirmation | EX_EASY through EX_CHAOS, each 999999999 seconds and unlocked, mapped to experimental creep/special spawners |
SpawnerData Assets¶
| Data | Current Mapping |
|---|---|
| Locations | Production migration source is regular Assets/Scriptable Object/Spawner/Stage 1, Stage 2, and Stage 3. Do not use Stage 1 new or Stage 3 ZhangYG unless manually promoted later. Experimental files include EX-Creep-1.asset and EX-SP-1.asset. |
| Key fields | Each SpawnEvent stores timeSpawn, maxTimeToSpawn, enemy, spawnRate, directional spawn toggles, isSpawning, and isActive. |
| Runtime owner | SpawnerEventManager checks current timer and battle state, starts spawn coroutines, sets event active/spawning flags, and resets flags during boss/stage transitions. |
| Runtime data mixed into asset | isSpawning and isActive are part of the serialized asset. Some inspected assets already contain isSpawning: 1 or isActive: 1, so asset files can carry play-mode/runtime state. |
Achievement Assets¶
| Data | Current Mapping |
|---|---|
| Location | Assets/Scriptable Object/Achievement. |
| Key fields | id, localized title, localized description, isUnlocked, isSecret, icon, upgradeReward, charReward, goldReward. |
| Runtime flow | GameEvents.AchievementTrigger and GameEvents.AddDataCount feed achievement/progression systems. Rewards can unlock upgrades, characters, or gold. Exact unlock write path is Unknown / needs manual confirmation. |
ShopUpgrade Assets¶
| Data | Current Mapping |
|---|---|
| Location | Assets/Scriptable Object/Shop. |
| Key fields | upgradeName, upgradeDescription, suffix, type, upgradeData, icon, currentUpgradeLevel. |
| Runtime flow | Shop UI reads display/cost/value data. Save/progression applies currentUpgradeLevel. PlayerModifier reads permanent bonuses when building player stats. |
| Production assets found | Ammo, AttackDamage, AttackSpeed, CritChance, CritDamage, Exp, Gold, Health, Luck, Magnet, MovementSpeed, PotionBag, PotionStart, Reroll, SkillAmp, Stamina. |
| Current migration decision | Do not migrate the old shop system as-is. Preserve ids, levels, costs, and values only for balancing reference and later save conversion. Old shop save values should refund into soul points only. |
Open Questions¶
Assets/Scriptable Object/SpecialUpgrade/InDevelopmentandNeed Revampassets should not be treated as production unless manually promoted later.- Should play-mode changes to ability/spawner ScriptableObjects be considered accidental editor pollution?
- Are both players sharing the same
AbilityScriptableObject references during local co-op? - Most saved content is expected to use manually typed ids. Known exception: special-upgrade unlocks use
upgradeName; audit whether any other saves use localized name or asset name.