the cutting room mirror

Sonny (Unity)

Sonny is a reboot of the Flash game duology of the same name.

Sub-Pages#

Debug#

Cheater#

On the 'Map' scene, there is a deactivated GameObject with the 'Cheater' component. It has the following methods:

  • Skip Zone
  • Level Up (Levels up all units of your team)
  • Gain Gold (Adds 999 gold)
  • Add Ally (Unlocks and adds the next unit to your party if there's an ally available)
  • Set Tree (Sets your second and third Strain)
  • Easter1 / Easter2 / Easter3 (Starts an "easter" fight)
  • Rate Me
    • Send Feedback: Executes Application.OpenURL("mailto:Sonny@ArmorGames.com?subject=Sonny:Feedback");
    • The RATE APP button is linked to the 'RateMe' function which actually calls the 'NoThank' function. The code does contain the apple ID of the game as a string (851711277), but doesn't do anything with it on the Steam build.
  • There are also buttons for quick access to the boss fight using the DebugProfile, setting it to the zone and fight of it.
    • Grosk
    • Raptor
    • Celestia
    • Count
    • Baron

DebugProfile#

Has methods and toggles for:

  • autoActiveAbility: Runs ActiveAbilityTest(), which adds Strike, Regenerate, Cripple, Break, Wound, Guard, Drill Strike, and Chaos Wind to Sonny's ability pool.
  • Enables the allies that should be unlocked by the selected zone
  • Sets party XP for the zone
  • equipItem: Auto equips appropriate items for the zone for all allies
  • Sets Gold to a value based on the level
  • Sets the strains of Sonny to two selected strains.
  • disableTutorial
  • disableStory

Unused Enemies#

"EASTER" Fights#

GlobalManager has a field named "easterUDID" which, when set to either EASTER1, EASTER2, or EASTER3, will start a special combat. It plays the boss music, FinalEncounter. Each fight has a level offset of 29 with 1 wave of an enemy. Each enemy has 100% power, 80% speed, 120% defense, and 510% health. They all have the same attack, "SGE_ATTACK", which is the basic attack for nearly all enemies.

Flame Walker#

SonnyUnity-Flame_Walker.png

Uses the Flame Walker sprite.

Zpci Captain#

SonnyUnity-Zpci_Captain.png

Uses the Zpci Captain sprite.

Salamander2#

SonnyUnity-Salamander.png

Uses the Salamander sprite, which is shared with the used enemy, War Lizard.

Unused Items#

Unused Item Ability Mechanics#

There are some items that have an effect modifying the Basic Strike, such as Lifesteal: "Basic strikes also recover 35% damage as HP." There are 17 total item ability mechanics, 6 of them are used, and 1 of them is used only by Excalibur, a debug weapon. Of the unused mechanics, only AoE; Dispel; and AoEImba have descriptions set for them.

Titan Blood's TITANBLOOD doesn't seem to exist as an actual buff, so either it was removed or changed to something else in development. The closest used buff containing "Titan" is "Titan Madness". SilentSelf is also effectively useless, as it increases the cooldown of Basic Strike, but other than by evolution, Basic Strike stays at 0 cooldown.

ID

Name

Effect

Description

6

AoE

15% chance to hit all targets

Basic strikes have 15% chance to hit all targets.

7

Dispel

30% chance to dispel the target

Basic strikes have 30% chance to dispel the target.

8

Titan Blood

15% chance to apply the TITANBLOOD buff to self

9

Phoenix Soul

20% chance to apply the REGEN buff to self

10

Bleed

100% chance to apply the BLEED debuff

11

BackStab

If the caster has not been damaged in the previous turn, this ability deals 50% more damage.

12

Duel

50% chance to give the caster and target 100% focus

13

ExtraTurn

20% chance to give the caster 100% focus

14

Necro

If the target has less than 35% health, then multi-strike (+1 strike)

15

SilentSelf

Increases the cooldown of the previous ability by 1

16

AoEImba

100% chance to hit all targets

Strike attack become AOE

Randomized Gear#

There's code for shops to generate random purchasable items, but the code never executes.

In the class ShopPanel, it loads the shop for the zone in SetItemList(). It gets the max amount of shop items for the current zone, copies the shop items from a pool for the zone, and generates random items to fill the remaining slots. However, the shop pool for all used zones have the same amount of items as the max amount, so there's never any empty slots left over. With a code modification to free up slots, either by removing items in the pool or increasing the max amount of items, we can see the game generate the items.

The prefix is chosen randomly depending on if the item's level is greater than a number, with the highest level pool taking precedence.

0

3

10

20

30

40

50

60

70

80

90

Custom
Union
Basic
Standard
Auxiliary
Legacy

Taurus
Lunar
Valkyrie
Surge
Spectre
Beatrix
Exalt
Cyclone
Orbit
Saga
Particle

Radiant
Storm
Polytron
Scorpio
Caspar
Predator
Monarch
Melchior
Brutus
Hyper

Raiden
Trident
Javelin
Grid
Azura
Balthazar
Terra
Dracari
Guardian
Mercury

Aspect
Vector
Royal
Eurion
Kyodan
Zhenyu
Neptune
Crystal
Wahrheit
Reflex

Raphael
Kreuzer
Zensaki
Icarus
Belzeo
Garrison
Steinberg
Colonial
Aurora
Reaper

Phantom
Kyoshin
Gemini
Dominion
Goliath
Rubix
Alliance
Corvid
Jinzhou
Revox
Nocturne

Imperial
Konig
Invictus
Koda
Spartan
Bastion
Vanguard
Oni

Sierra
Odin
Ghost
Akuma
Shard
Divinus
Anubis
Genesis

Hydra
Ceasar
Prime
Venus
Quantum
Pharoh
Kaiser
Tenshi

Supreme
Omega
Apex
Magi
Zenith
Kami

The suffix is chosen randomly based on the item's rarity. The array for Common rarities is a single string.Empty.

Common

Uncommon

Rare

Secret

Mk-II
V2

Mk-III
V3

Mk-X
VX

The random item's name results in the prefix, a space, and a suffix. So a level 90 Rare item would choose a prefix from 'prefix80', and one of the two Rare suffixes (ex: Kaiser Mk-III).

Excalibur#

There is a weapon that can only be accessed via debug or save editing. It's the only item with Secret rarity, which uses the 'iFrameGold' graphic. Because of this, the graphic also goes unseen normally. The item icon also has the atypical name format of "Item3", whereas all other items have the name format like "1 Broken Pipe" or "1 Broken Pipe2".

Excalibur

iFrameGold

Composite

this.Create("Excalibur", "EX");
this.item.powerX = 7500f;
this.item.speedX = 100f;
this.item.vitalityX = 0f;
this.item.defenseX = 0f;
this.item.hitFlat = 100f;
this.item.critFlat = 100f;
this.item.icon = "Item3";
this.item.itemType = ItemType.Weapon;
this.item.rarity = ItemRarity.Secret;
this.item.mechanicId = 16;