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 Upgrade Effect Catalog

Purpose

Map every Upgrade.UpgradeList enum entry to current behavior in UpgradeFunction.SelectUpgrade.

Global Upgrade Selection Flow

  1. RewardRoller chooses eligible Upgrade assets from basic, special, boss, or ultimate reward tables.
  2. UpgradeSelection calls UpgradeFunction.SelectUpgrade(player, upgrade).
  3. SelectUpgrade increments upgrade.upgradeTaken if the asset has a maxUpgrade and has not exceeded it.
  4. The upgrade.upgradeList switch mutates player stats, modifier fields, ability lists, run state, or evolution state.
  5. Some upgrade behavior is immediate; some only grants an Ability asset whose behavior is triggered elsewhere.

UpgradeList Behavior Map

UpgradeList Current Behavior Player / Modifier Fields Changed Adds Ability / Spawns / Evolves Dependencies / Notes
DMG Adds flat damage. Boosted by AdeptLearner. PlayerModifier.AddDMG No Basic stat upgrade.
ASP Adds attack speed. Boosted by AdeptLearner. PlayerModifier.AddASP No Basic stat upgrade.
CDMG Adds critical damage. Boosted by AdeptLearner. PlayerModifier.AddCDMG No Basic stat upgrade.
CCH Adds critical chance. Boosted by AdeptLearner. PlayerModifier.AddCCH No Basic stat upgrade.
RS Adds reload speed. Boosted by AdeptLearner; reduced when certain character ability types are present. PlayerModifier.AddRS No Value is divided for ProtoBarrier or GroundBreaker by 16, RocketBarrage by 8, SkyYingSword by 4.
MS Adds movement speed. Boosted by AdeptLearner. PlayerModifier.AddMS No Basic stat upgrade.
AMMO Adds max ammo. Boosted by AdeptLearner. PlayerModifier.AddAMMO No Basic stat upgrade.
HP Adds max health. Boosted by AdeptLearner; halved by MageApp. PlayerModifier.AddHP No Also affects current survivability through modifier recalculation.
STM Adds max stamina. Boosted by AdeptLearner; halved by MageApp. PlayerModifier.AddSTM No Basic stat upgrade.
SAMP Adds skill amp. Boosted by AdeptLearner; doubled by MageApp. PlayerModifier.AddSAMP No Basic stat upgrade.
DMGMODIF Adds damage modifier. modifier.ModifDMG No Modifier field, not flat stat.
ASPMODIF Adds attack speed modifier. modifier.ModifASP No Modifier field.
CDMGMODIF Adds critical damage modifier. modifier.ModifCDMG No Modifier field.
CCHMODIF Adds critical chance modifier. modifier.ModifCCH No Modifier field.
RSMODIF Adds reload speed modifier. modifier.ModifRS No Modifier field.
MSMODIF Adds movement speed modifier. modifier.ModifMS No Modifier field.
AMMOMODIF Adds ammo modifier. modifier.ModifAMMO No Modifier field.
HPMODIF Adds health modifier. modifier.ModifHP No Modifier field.
STMMODIF Adds stamina modifier. modifier.ModifSTM No Modifier field.
SAMPMODIF Adds skill amp modifier. modifier.ModifSAMP No Modifier field.
EQUIPABILITY Adds upgrade.ability to the player's ability list. Ability list only, plus possible companion count side effects Adds ability AbilityFunction.AddAbility; special handling for Multishoot with SkyYingSword or AbyssOrb to spawn extra sword/orb structures.
MAGNET Increases collect radius. player.collectItem.magnetRadius No Directly mutates collection component.
REROLL Adds reward rerolls. GameManager.rerollAmount Mutates run state Singleton dependency.
STAMINAREGEN Adds stamina regeneration amount. modifier.bonusRegenStaminaAmount No Basic/special stat.
REVIVE Reactivates inactive players and restores half health/stamina. player active state, health/stamina, reload/invulnerability/regen/dash/cooldown state Revives players Also updates camera target list and drone master. No effect if no inactive player? Unknown / needs manual confirmation.
POTIONBAG Increases potion capacity and current potion amount. modifier.bonusMaxPotion, potion count No Direct potion state mutation.
WEAPONLEVELUP Adds weapon levels up to level 10 and invokes character weapon evolution hooks. modifier.finalWeaponLevel via AddWeaponLevel Can invoke evolution method Uses WeaponEvoData.instance.evoCharacterList, selects by character id and weapon level index.
MECHANICENCHANMENT Converts bonus critical chance into damage and clears bonus critical chance. modifier.bonusDamage, modifier.bonusCritChance No Enum spelling is MECHANICENCHANMENT.
TRUESTAMINA Sets bonus/shop stamina to bonus/shop health. bonusMaxStamina, shopMaxStamina No Direct stat equivalence.
SENDURANCE Converts total bonus skill amp into health/stamina and clears skill amp bonuses. bonusMaxHealth, bonusMaxStamina, bonusSkillAmp, shopSkillAmp No Named Skillful Endurance in assets.
PSKIN Reduces damage taken, converts stamina into HP, lowers stamina/current stamina. damageTaken, HP/stamina fields No Also has evolution path through UpgradeEvoFunction.
DRONE Spawns companion drone and assigns player master. companion list/state Spawns abilityUser.spawnDrone Uses PoolManager; no cap found here.
ARCHMAGE Adds skill amp and damage based on current skill amp. AddSAMP, AddDMG No Uses final/total skill amp values.
JETPROP Starts jet propulsion activator and resets bonus. abilityHolder.jetPropulsionBonus Starts ability cycle Depends on AbilityHolder.JetPropulsionActivator.
GKCROWN Adds several style modifiers by 20 percent of current values. damage, attack speed, reload speed, movement speed modifiers No Boss upgrade.
GKSTAFF Adds critical damage, critical chance, and skill amp. crit damage/chance/skill amp No Boss upgrade.
GKARMOR Case exists but no behavior found except comment. None confirmed No Unknown / needs manual confirmation.
ARMORED Calculates bonus from inverse attack speed and adds capped damage plus HP. damage, health No Bonus is capped at 150.
VAMPIRICCHANCE Adds vampiric chance up to a cap. bonusVampiricChance through AddVampiricChance No Returns early if bonus chance is already at least 5.
PS Adds projectile speed. PlayerModifier.AddProjectileSpeed No Projectile stat modifier.
VAMPIRICPOWER Adds vampiric healing power. PlayerModifier.AddVampiricPower No Vampiric hit behavior lives in PlayerAttack.
DRONEMK2 No switch case found in UpgradeFunction.SelectUpgrade. None confirmed Unknown Enum exists, in-development upgrade asset exists. Unknown / needs manual confirmation.
KARMAYANA Applies randomized stat modifiers in a broad range. multiple stat modifiers No Uses random values; exact distribution should be tested.
DMGTAKEN Adds damage taken modifier. PlayerModifier.AddDMGTaken No Reduces or increases damage depending on sign/value.
EVOUPGRADE Starts evolution logic for upgrade.evolve. evolution coroutine/state Starts evolution Calls UpgradeEvoFunction.Instance.StartEvo(upgrade, player); logs if evolve is null.

Evolution Upgrade Behavior

Source Ability / Upgrade Completion Condition Result
SuperMagnet path GameDataCount.SuperMagnetCoinCount >= 300 Applies evolved upgrade and removes old ability.
CImpact path GameDataCount.CImpactCritCount >= 100 Applies evolved upgrade and removes old ability.
FailedVitamin path 120 seconds elapsed Applies evolved upgrade and removes old ability.
FailedSupplement path 120 seconds elapsed Applies evolved upgrade and removes old ability.
ThornArmor path GameDataCount.ReflectedDamageCount >= 500 Applies evolved upgrade and removes old ability.
PSkin path 120 seconds elapsed Applies evolved upgrade and removes old ability.

Problems / Risks

  • UpgradeFunction.SelectUpgrade is a single switch that mutates stats, run state, ability lists, companions, save-like progression state, and evolution state.
  • Upgrade assets store upgradeTaken, so reward choices can mutate ScriptableObject assets.
  • Several upgrades add abilities, but the granted ability's behavior is elsewhere.
  • DRONEMK2 is present in the enum but no behavior case was found in the inspected switch.
  • GKARMOR has a case but no confirmed behavior.

Open Questions

  • Are DRONEMK2 and GKARMOR intentionally unfinished?
  • Which upgrade paths are reachable in production tables?
  • Should upgradeTaken persist across runs, or is it meant to be per-run only?
  • Unknown / needs manual confirmation.