Posting facts about the workings of Sonic Mania, Penny's Big Breakaway, and other Retro/Star Engine games. Not affiliated with SEGA, Evening Star, or Headcannon
Please know that anything regarding Sonic Origins shown on this account isn't meant to attack the game, I personally love the collection despite its flaws and lack of polish
At San Diego Comic-Con 2017, the Sonic Mania devs showcased a few bugs they found during development at the game's panel. This was one of the bugs shown.
Sonic Mania is known to have the "Outta Here" easter egg from Sonic CD, inaccessible in regular play. However, it actually is possible to see the animation ingame.
You only have to wait about 333 hours.
Sonic 3 & Knuckles initially sets the scene for Knuckles' intro cutscene to "I wish I knew why too" before setting it to Mushroom Hill Zone. This may be referring to how the cutscene takes place there instead of Angel Island Zone like in the 2014 proof of concept.
Some beta versions of Sonic 1 (2013) featured the ability to have both Tails & Knuckles as Sonic's sidekicks at once. This was cut due to it being so intensive on phone hardware from the time that Christian Whitehead's iPhone burst into flames after two minutes of testing.
Penny's Big Breakaway has sound test codes! With some effort (and a lot of Cheat Engine usage), I was able to figure out all of the codes for everyone to try out. Here's a brief look at one of them in action!
(Full code list in replies!)
Unlike the other zones in the game, Green Hill Zone in Sonic 1 has altered, "thinner" collision in the remaster (image 1) compared to the Genesis version (image 2). This difference is what causes the blue Newtron at the beginning of Act 3 to fall through the ground (image 3).
Here's the initialization of the sprites for Amy's animations. You may assume that the erratic animation is caused by some frames being missing, but as you can see, all eight running frames and all eight jumping frames are correctly set here. So what's causing this bug?
Here's the part of the code that handles the player's animation. The "player.frame &= 7" line loops the player's animation after 8 frames. However, this code only works properly if every animation has exactly 8 frames, and there can't be any SpriteFrames between them.
Update: Apparently the output from the decompiler used in the screenshot above seems to have been messed up somehow, here's what the same code looks like in Ghidra:
Sonic 3 & Knuckles contains leftover code for Mighty and Ray from Sonic Mania Plus. While most of their moveset code has been stubbed, the code to load them in-game, as well as Mighty's special behavior for monitors and spikes, are (mostly) functional. Here is footage of Mighty.
Low and behold, if we take a look again at the initialized SpriteFrames, there are 9 SpriteFrames between Knuckles' and Amy's animations! Because of this, the aforementioned bitwise AND operation starts freaking out, causing the bugged Amy animations.
In the original Blit (Steam/XBOX 360/PS3) release of Sonic CD 2011, Tails' name in the Player Select menu is cut off when the language was set to Japanese. This is due to the sprite in the JP spritesheet being offset compared to the others, which isn't taken into account in-game.
Sonic Mania's removed "Dunkey Mode" easter egg still has code for loading and playing the voice clip in the Hand Launcher. Only the code for handling the code's inputs and activating the cheat, along with the sound effect file, were removed.
Tons upon tons of iOS software from late 2011-2015 has just leaked, and we're on an active search to find any archived betas of the mobile versions of Sonic 1, 2, and CD!
This post contains a link to all of the IPA files from the leak. If you manage to find anything, DM me!
Sometime around when the game became part of Sega Forever, the mobile version of Sonic CD was updated to add the SwapMusicTrack engine function from RSDKv4. However, scripts aren't able to access this function, and it doesn't seem to be used anywhere. Why it was added is unknown.
Penny's Big Breakaway contains an image of various editor icons embedded within the Steam version's executable file, leftover from the Retro and/or Star Engine SDK. Some of these icons can be seen in various glimpses of the editor seen online, such as this one from an interview:
Since I've seen a couple people mention it, yes, I know this animation is used in the PC version's main menu. By "ingame", I'm referring to actual gameplay, not counting the menus.
In Sonic Origins Plus, Amy's hitbox while in the Hammer Dash animation actually varies depending on the frame in the animation. Below is the code handling the hitbox sizes from Sonic 2, as well as visualizations of the different hitboxes.
April Fools! Apologies to those who legitimately thought Taxman's phone blew up.
There are no known betas/prototypes of S1 2013, or at least, ones that have been released or leaked. The screenshots in this tweet are simply mockups of what such a feature could look like.
This is the code handling progressing forwards through the Special Stage in Sonic 2. Notice something?
The code is wrapped in a check for if true is equal to itself! This is likely a leftover from development, but it's funny it never got removed.
In Sonic Mania, the Chemical Plant Staircases have full functionality for playing a looping sound effect when the blocks are shaking after being hit from below, as well as another playing as they begin moving. However, neither of these sound effects exist in the game's files.
Sonic 1 contains references to a global variable named "options.originalControls" within the settings menu. This is most likely a leftover from Sonic CD, as this variable doesn't exist within Sonic 1's GameConfig file.
This is the code for initializing the Star Post stars in Sonic Mania. Notice the line for setting the Bonus Stage ID; although there's nothing wrong with it in of itself, this is the same calculation seen in Sonic 3, meaning this code was possibly based off of the S3 2014 POC.
The main developer behind the RSDK Decompilations, which I've been using to research and document most facts on this account, is working on Penny's Big Breakaway! Be sure to show your love and support to everyone involved with the game; you can wishlist it right now!
Surprise! I'm working for
@EveningStarStdo
on Penny's Big Breakaway! The entire team have been an absolute joy to work with, and we've put our heart and soul into this game! so please check it out and tell ya friends 'bout it!!!
Sonic Mania's Level Select has a bug where entering it with Sonic & Tails will set the character to Knuckles. Here's the code responsible for this bug.
The Origins version of Sonic 2 adds a static variable that determines whether or not Chemical Plane Zone's water is drawn with its purple tint. However, the variable is always set to 0 before it's drawn, so the check always passes and the water is never drawn without the tint.
Ever wondered why one of Mighty's skin colors turn black when he turns super?
When Mighty's palette updates, it overwrites one more color than it should, writing a nonexistent color value. The highlighted number, which signifies the last color slot to overwrite, should be 101.
Sonic 3 & Knuckles' GameConfig.bin file contains the global palettes for Sonic 1 & 2, as well as a modified version of Sonic Mania's. The former two palettes, along with S3&K's palette, are stored in palette bank 8, with the S3&K palette being written into bank 0 in-game.
Sonic Mania Plus has an obscure bug where using Debug Mode and selecting Monkey Dude will reset the player's lives and score to 0 and disable the Drop Dash for Sonic. This bug's obscurity can be easily attributed to how Debug Mode is normally inaccessible in Encore Angel Island.
Introduced in revision 02, RSDKv5 has a hardcoded "DevOutput" object, allowing the game to easily display dev strings on screen. A video demonstrating it can be seen below.
Sonic Origins uses a parameter file to translate the file paths for the music/sound effects in the original RSDK games into the names of stream files played through Hedgehog Engine 2/Criware.
Although most of the file is nothing of note, there are a few interesting tidbits.
Hey everyone! Since I'll be talking about Star Engine games like Penny's Big Breakaway (and by extension, non-Sonic games) on this account, I've decided to rebrand it to reflect as such. I hope you're excited for what's to come here! Expect more PBB stuff soon...
The Origins version of Sonic CD has a unique script for the Dragonfly badniks in the mission "Tough Bluff".
The script is empty; Dragonflies do not appear in this mission.
Origins Sonic CD has a missing break in the SEGA splash screen's case switch, causing the fade out state to fall through and play the Sonic intro part of the title screen instead of allowing the SEGA logo to fade out.
Sonic 2 has an unused - yet fully playable - one-act boss rush level called Egg Gauntlet Zone, also known as Marathon Base Zone.
Every badnik in it has a check for the current zone so that it can load the proper sprites. Shown here is Buzzer.
In Sonic 1 and 2, the Insta-Shield's extended player hitbox is coded to last for the duration of the animation, which is 6 frames. This is inaccurate to the Genesis version of Sonic 3, where it lasts 14 frames.
Thread of a bunch of leftover test levels in Penny's Big Breakaway! Some of these are more interesting than others, but they're all cool to see.
Maps are called by their name in the GameConfig, but I'll also give the internal filename if it's notably different. (🧵)
This is the code for the off-screen barrier that the player hits when running right after spinning the Sign Post in Sonic 2. Note this constant, 212, in the portion that determines how far the barrier should be from the Sign Post itself. (🧵)
What's odd about this fix is that of the 48 object values available to the Player Object (not counting general things like direction and speed), object.value15 isn't used anywhere. Sonic Team could've simply changed the Drop Dash charge to use that variable instead, but oh well.
Just a reminder because I'm getting a lot of replies about this:
I don't hate Origins, and my tweets are not intended to be used as a place to complain about the game. I'm just talking about things I find interesting.
Here's a snippet of the Rockem Sockem's code. As Simon stated, this bug was related to the player's state not being reset, and we can see the line they added to fix that.
Carnival Night, Icecap, and Launch Base's tracks all have "old" versions listed. In a hypothetical scenario where SEGA was allowed to use the original Sonic 3 soundtrack, there could've possibly been a toggle between using those tracks or the prototype ones.
In addition to a Super.ogg file, a "Hyper.ogg" file is also present for Sonic 3 & Knuckles, implying that there originally could've been unique music for Hyper Sonic as well as Super Sonic. However, the game's code only points to Super.ogg and never mentions Hyper.ogg.
The drawing event for the Labyrinth Zone Corks in Sonic 1 has... this.
It's checking if the stage's state is set to... 46... which isn't a valid state... and it's also using the arrayPos0 array position without initializing it...
This check never passes.
In Origins Sonic 2, the Bumper object in the Mission Mode version of Metropolis Zone used in the mission "Bounce House" internally has the object name "OBJECT NAME".
So, how does Origins v1.04 fix this bug?
Instead of an object value, the Drop Dash charge now uses a temporary value. Every time it's used, it calls a function that sets the temporary value to a global variable, or vice versa.
(Again, unrelated code has been removed.)
This bug was caused due to an overlapping value. The Drop Dash's charge value used "object.value43", which is the same value as one that the AI uses as a timer to respawn.
(Note that some unrelated code has been removed here.)
These are global variables in the latest mobile version of Sonic CD.
These are part of the hacky, roundabout edits that the Sega Forever devs are making to the game for their ad API to work.
I didn't want to show you this, but I just had to expose Sega Forever's lies.
When initializing the HUD in Sonic 1, the game sets the object's property value based on the one for the object found in the scene, however this will always be 0. This is a leftover from Sonic CD, where the scene HUD object's property value would denote the time period.
@xdMarioMastr
This is Origins' executable file viewed in a reverse engineering program with some custom symbols defined. This isn't the official source code nor is it a decompilation project.
Sonic 1's Monitor script contains a SpriteFrame initialization for an extra monitor sprite that doesn't exist, with Labyrinth Zone goggle sprites being present in the area instead.
Today marks the one year anniversary of this account! Thank you for supporting my outlet for spewing trivia about some of my favorite games!
Also, somehow I just now noticed that this account has surpassed 1,000 followers. Again, thank you!
In Sonic Mania, the Dash Wheel object in Stardust Speedway Zone Act 1 has an unused, older version of its object class within the static object files. The only notable difference is an additional variable in the final class (possibly a sound effect pointer?) which is never used.
Thread
#2
of unused levels in Penny's Big Breakaway! Turns out there were some stages that weren't in the GameConfig, so I added them to make them playable. I refer to a couple of levels showcased in the last thread, so check that one out first in case you haven't. (🧵)
The original title screen cheat codes from Sonic CD are all implemented and function properly in the remaster, however the game never calls the function responsible for handling the inputs, rendering them unused. This is likely a leftover from before the secrets were unlockables.
My follower count has surpassed 424, the default screen width for the Retro Engine. Thank you all for your support!
(I intended to make this tweet when I reached the exact number, but it happened overnight when I was asleep, so I hope you can forgive me for being slightly late.)
The Stage Select menus (the ones for complete save files) for Sonic 1 and 2 still exist in Origins, albeit unused. Although Sonic 1's menu works fine, Sonic 2's seems to be broken, instead showing an uninitialized 2P VS Game Results screen.
Tracks unique to Sonic 3 Alone are listed in this file as well. Although the Title Screen music is used in-game (as well as the 1-up jingle in Anniversary Mode), the other tracks use their Sonic & Knuckles counterparts instead. These are remnants of a scrapped soundtrack toggle.
Despite them not being played in-game, listings for Sonic and Amy's voice clips exist in this file. The code to play the sound effects is also still in the game's scripts.
Sonic Nexus uses a different player (character) config system from RSDKv3 and RSDKv4, specifying animation and script files for each player as well as the player name. However, due to a bug, the player will always be set to 0 regardless of what's chosen in the Dev Menu.
In Sonic Mania, in addition to the halved duration, the hitbox size is set using odd calculations rather than direct numbers, resulting in a smaller player hitbox extension. Both of these issues were fixed in Sonic 3 & Knuckles.
If we enable the RSDKv4 decompilation's object hitbox visualizer, we can see that the top of the hitbox for the ledges get taller or shorter depending on where the player is standing on it, rather than having a hitbox that properly matches the ledge itself. What's going on here?
Sonic Origins Plus is here!
It's gonna take a little bit before I'll be able to showcase things from the update, but from what I've seen so far, there's some pretty interesting stuff. Stay tuned!
Because of this bug, as the screen width increases, the right edge of the screen will get closer and closer to the barrier. Set the width high enough, and...
You can see this for yourself by selecting Blue Spheres in the Level Select with Amy as the selected character, then pressing A to select Mighty. Pressing A again will select Ray.
Because the animation files don't actually exist, the game won't quite handle them as intended...
The Sonic 1 mission "Ring Challenge 50" in Sonic Origins uses a different water script from regular Labyrinth Zone. This script replaces all instances of "currentPlayer" (used for objects that interact with both players) with "0", resulting in redundant checks such as this one.
This bug wasn't much of an issue back in 2013 since most phones' screens at the time had a 16:9 aspect ratio, but as ultrawide phones became more prevalent, it was clear this needed to be fixed.
...Instead, the Sega Forever devs set a max screen width of 500 and called it a day.
Now, where this becomes an issue is that the code to check whether or not you're playing Classic Mode is located in the function for starting a jump, and it doesn't check for which player is jumping. This means every time the AI jumps, the respawn timer would reset to 0 or -1.
Tails and Knuckles both have this same bug, however it isn't as noticeable as it is on Mighty. Tails overwrites one of Knuckles' sock colors, and Knuckles overwrites a color slot that isn't used in-game.
Interestingly enough, however, every badnik in Sonic 1 has a similar check for "Zone07" (which doesn't exist) and loading a spritesheet from an MBZ folder. Not even the devs know what this spritesheet would've been used for, and it's been removed in later versions of the game.
Given the lack of content on this account lately, I've decided to open my DMs to anyone. If you have questions on how something works, what something does, or anything else, feel free to ask me there. Please understand that I don't have the time to respond to everyone.
Sonic Mania uses a much simpler approach: it uses a large hitbox based on a given size determined per-entity, and if the player is touching that hitbox while grounded, the collapse is activated.