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#

Uses the Flame Walker sprite.
Zpci Captain#
Uses the Zpci Captain sprite.
Salamander2#

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 |
Taurus |
Radiant |
Raiden |
Aspect |
Raphael |
Phantom |
Imperial |
Sierra |
Hydra |
Supreme |
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 |
Mk-III |
Mk-X |
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"); |