Skip to content

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/InDevelopment and Need Revamp assets 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 Ability ScriptableObject 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.