Sonic Runners Revival dev here: We actually found a whole lot more interesting stuff in both the code and in the game assets. Early/unused animations, placeholder game over and continue screens, and code for a menu which doesn't even appear in the game's assets at all (reactivating it would require us to remake its UI from scratch) and also didn't appear in any version that was released publicly. Not to mention unused stages and events such as the Sonic '06 roulette event, the Silent Forest stage, and the unfinished and incomplete Zomom Raid Battle event (my guess is that it was set to run in 2016 before the game was deemed a failure). There's more that we found too, but this comment would get way too long if I mentioned everything.
As someone who makes content in Unity the two biggest things that happen to me are "why isn't this working?" And "why did that work?" It's really just how unity is. In one project baking lighting works and another project it doesn't. It's just how it is.
As a kid you're told that in the digital world the same input through the same machine will always result in the same output, and the simple beauty of that compared to the irrational mess of human interactions is what draws you to IT and technology as a whole. Then you figure out that the code that makes those beautiful machines work is still written by the same irrational humans, so anything and everything only works by sheer luck, the same machine can give a wildly different range of outputs for the same input depending on a wide number of factors including the phase of the moon, and we can't ever have nice things.
This is fantastic, and thank you for what you've done! I'm currently undergoing the challenge of playing as many Sonic games as there are avaliable and without your work, Sonic Runners would've been impossible for me to reexperience and it was a great time. You and The Revival Team are amazing game preservationists.
Game preservation is by far going to be the hardest kind of history preservation that we will have to deal with. Thank you for playing your part in the pursuit!
All these game decompilations are great. I 100%ed the Jak and Daxter PC port that came out recently and it's now, without a doubt, the best version of the game, no competition. The Super Mario 64 and Ocarina of Time ports seem equally good from what I've seen. I really hope thie continues to be a trend, of fans rescuing games from dead platforms and giving them the proper treatment that modern hardware can provide.
I was keeping up with the development of that one and now that it's playable I've been absolutely loving it. I even imported my saves from my ps2 memory card, it just worked. Also got it on my Steam Deck. 100% better than ps2 emulation.
Ship of Harkinian, the OOT PC port is easily the best way to play OOT that will ever exist. As a lifelong fan of OOT, it gives you levels of control and customization I could have never imagined, and it feels SOOO good. It has less input delay than actual hardware and runs at whatever FPS you like. Imo, it is the only way to play the game ever again. The older versions might as well not exist.
From all the people I knew would help tinker with Sonic Runners Revival, I definitively wasn't expecting you, but I'm glad you did, because you've always done an amazing job preserving games you liked, and having you on board really was a great sign. The community always cherishes their decompilers, and hopefully you can see all the praise you deserve because honestly, this seemed like a really tough job, so yeah, thanks a lot Matt.
One of the first thoughts I had before I clicked this was "didn't I just watch this same guy recompile some peculiar North Korean driving sim flash game a week or so ago?"
😂 I guess if he posts something about a game, it’s going to have some sort of decompiling in it. LEGO Island, Super Mario 64, Korean game, Sonic Runners………
I'd love this treatment for Dr. Mario World. I actually really liked it and had put a lot of time into it and was sad when they shut it down. Mobile games tend to get lambasted by the gaming community but they're still video games just as much anything on a console or PC.
@@ApostleOfCats personally I disagree. People look at all of the free to play ones and assume all of them are like that. It ignores the fact that that model exists on every platform but is more common on mobile given the lower cost of development and objectively larger audience. There are billions of phones that can run pretty much any mobile games compared to the much lower number of consoles and gaming capable PCs. There are still many different mobile games across several different genres that have stories, music, gameplay, and graphics thst match their console and PC counterparts. It's just that the majority of them focus on simpler concepts like puzzles and idle games because the majority of phone owners don't usually play video games. That doesn't mean that those aren't video games though.
A guess on the lightmap settings: Because Unity tries to automate the lightbaking process the lightmap settings may also contain a representation of where in the directory the appropriate light maps should live. The idea being a user can press "bake" and everything gets assigned to the right object even though your lightmaps may live in some random project folder that artists never look at. And it likely wouldn't be some simple directory name, it would likely be a unique string referring to each individual image uniquely. Clearing the settings may have simply cleared this and allowed you to overwrite it, something that if you were to hit "bake" during normal development would also happen. Can't prove it of course, and a lot of those assumptions are based on later Unity builds (2016+). But overall I suspect it's a by-product of the engine trying to make lightmap baking "hands off" in terms of assigning lightmaps to objects.
It's really cool that the video is also made to shout out a Sonic fan project. I love the "it just works" you mentioned about Unity too, classic with big proprietary software lmao
Nice video! That thumbnail and title combo really undersell it though, I hopped on thinking you had only ripped models from a game, but you RE'd and ported a game to pc, that's super impressive!
Your ability to communicate how game dev, and coding in general works, is incredible. Normally in these sorts of presentations I’m asleep five minutes in 👏 👏 👏
This guy keeps saying he has no idea what he's doing then just casually goes learning how to decompile things in a few days then gets the job done like a pro. You're awesome man.
@@nikkiofthevalley What experience does he actually have? Was he previously a software engineer or something? Seems like he is all self taught, which is seriously impressive!
@@condensedmatter118 Yeah, it's still impressive, but it isn't true that he learned all of this in a few days, that just isn't possible. I would agree that he seems self taught, what I meant by "experience in related parts of the same field" was that he already knew related things in the same general field.
I was kinda hoping that he de compiled sonic 06. However I played this game so much years ago and was very sad when the servers went down. Glad to see that there was a revival for it!
It's not exactly a decompilation but you should check out Project 06. It's a full remake of Sonic '06 in Unity and fixes up a lot of the bugs in the original while running at a silky smooth 60 frames. It's not done yet, but they have both Sonic's and Shadow's routes complete and are working on Silver.
What were you hoping to get out of a decompiled sonic 2006? Ripping the models or HUD assets or what? Because it's entirely possible for you to do it yourself, the game's in LUA.
one of your best videos IMO; software preservation is a hugely important branch of history that unfortunately doesn’t often get pursued by the proprietors of the software itself. in a few decades time, we will no doubt be all the happier for having kept record of this kind of thing, just as we are with artworks that we’ve restored and preserved
If you want to have a go at a slightly bigger project, Sonic Colors Ultimate was built using Godot, and all of its packaging formats are thoroughly documented (open source engine and all that). You can decompile most of the assets and everything written in GDScript and C#
Honestly, decomps for game preservation are the coolest thing to me. I've been following the Metaforce project (Metroid Prime decomp) for a while and they've blown me away with what fans are able to achieve.
I've been trying to translate the game Hylics 2 for years now but i never found the correct tools to do it. Now thanks to this video i almost immediatelly managed to extract and find the text strings i need to translate. Now i still need to learn to but everything back together with the translation but still thanks so much. Oh, this preservation projects are so awesome and important for history and fans, thank you again.
Fun fact sort of decompiling was how Sonic 3D Blast was ported to the Saturn. They made a tool that took the hand written assembly for the Genesis and spat out equivalent C code and ran it on all the game logic, then wrote new code for the graphics, sound and controller.
I've been using Unity professionally (and independently) for a little over a decade -- stale lightmaps are a thing that even happens to Unity games that *aren't* filtered through months of reverse engineering. A number of things can result in flat lighting, the absence of shadows, and the non-shader-related visual artifacts your team was seeing. Standard troubleshooting procedure that I used back in the day was to actually back up and then delete the lighting data (make sure you're using text asset serialization!) and then recreate the lightmaps with shadows disabled but environment/indirect light data enabled. If the result looked closer to your intent, you can be relatively certain that your old lighting data was stale, mangled by version control, or something else, and you could either rebake lighting data, or start diagnosing how it happened in the first place. Glad to see it worked out for you in the end!
I still find it funny that the easiest way to fix the lighting problem that was happening was to basically yeet it into the trash. Like I can just imagine the conversation about the lighting problem being something like. "Well I fixed the lighting issue." "That's great! How did you do it?" "I just cleared the script that told the lighting what to do." ... "What."
Seeing reverse engineering like this is so satisfying. I'm part of a small community trying to reverse engineer an old MMO and boy... it's such a process, I'll never truly understand. Great work all around.
This is AMAZING! I clearly remember watching PatMac's documentary and, even though I'd never played this game in my life, being a little sad that it was no longer accessible and that any attempts to revive it were just a soulless remake, even in this day and age where fan revivals are so common. Glad to see it got the right treatment after all this time.
Absolutely magnificent. This is super hero kind of stuff, using highly sophisticated knowledge superpowers and love to save the day for many people. Please continue to save our world, we need you. Many thanks!
Having tried my hand turning compiled mobile Unity games back into projects before, I have nothing but respect for anyone who makes it work. Great job!
i noticed the fact that a lot of this footage runs on a pc and i am wondering if the srr team can make full on pc builds of sonic runners unless something is preventing that
I think the opening of this video might be missing a critical fault of the sonic cycle. Sonic fans, myself included though i'll never admit to it, are interested in the next sonic game because we have this sliver of hope left that maybe, just maybe, this one will be different. It never is, and we know in our heads it never will be, but then you get games like frontiers that show even a small degree of basic competence and you start to think "Oh man, the last 24 years of my 24 year old life are finally about to pay off"
damn those are some insane skills. digging deep into the engine, not only that, but bringing back deprecated stuff from the grave and bringing it back up to speed.. much respect
Hmm, I remember trying to decompile apps and games, ranging from android apps to Wii games, I was fascinated with how companies make their own coding system or use an existing one. Now, you can't do basically anything because of digital form games and piracy protection, it's amazing how coding and modeling have developed ey?
The piracy scene is rather efficient at removing DRM protection. However sometimes (especially for Denuvo i think) they just bypass it, which of cause keeps the memory encrypted.
i love seeing how this was done, well made. One thing i would say is maybe you could have used AssetRipper instead of uTinyRipper, i believe they both do similar things but Asset Ripper has support for 3.0.0 to 2022.x, so maybe that could have helped in the decompilation process. Especially since uTinyRipper is no longer developed
I had no idea there were ways to still play this game, and then you come along and help kickstart an entire revival! I remember being genuinely sad when I first learned Sonic Runners was taken down years ago, I loved this game when I was younger. I'll definitely be checking out the revival later, sincerest thanks for your amazing contributions and video!
awesome vid! I always learn so much from your uploads. Always caught off guard when you swear though, not because it bothers me but because I never expect it from your soothing voice and narration 😆
Oh man, decompiling games.. I tried to decompile Epic Mickey 1 and 2 and it was.. something else. I was able to rip the games from their discs but I can't code for the life of me. So I was able to have my dad (who's a software engineer) decompile it for the most part. The only problem was that all the files were in the .NIF file format. Me and my dad tried to do as much research as we could on them, but we just couldn't figure it out. Unlucky for me, my dad doesn't know C++, and he wasn't willing to learn it (and generally I have a grasp for reading code, and I can understand it, but I can't write it). So I've been at the point for like four months now possibly being the only person attempting this with the Epic Mickey games and I have no idea what do, lol. The .NIF file format wasn't too uncommon for bigger games around that time -- like for games like Skyrim and the Fallout series -- however Epic Mickey was never specifically documented. Also the reason I went through all this effort? To rip the maps for a single animation I wanted to work on. I still wish to work on it, but because of the game taking place on the Wii, I would probably overwork my Wii trying to run the game and animate at the same time. And it was very unlikely I could emulate the game while animating (though technically speaking I could) because that would probably destroy my pc. I wanted to rip the maps so I could set up complicated camera shots and know placements and whatnot (when it comes to those 3D enviournments, I generally have a good visualisation, but for what I was trying to set up it was too much). Anyways, that's sort of where I'm at. I'd love to archive these for game preservation as well, though I don't know where to go from here. Does anyone have any advice?
By far the best intro to game reverse engineering I've seen. Next time someone asks me "How can I bring this old game back to life", I'll point them to this video for an idea of what that entails. Thanks for making this, Matt!
I am sure the difficulty would be so high, but I would love to see Dr. Mario World get this treatment. It's such a good game, but the servers are offline so it can't be played.
Trying to figure out why something doesn't work as you wanted, and then you get bored and then try random things and then one of those random things actually caused the thing to work like the way you wanted it to. Truly a programmer moment.
Extracting games is a nice way to learn how their are made because you can see unused assets with referance to thems (even deleted ones) and even the project's code and project's name in it!
From the bottom of my heart, thank you and the rest of the revival team. I remember playing this when I was younger, and when it shut down, I was devastated. Since I was young, and had no access to consoles at the time, runners was one of the few ways I could play a Sonic game. Eventually, though, I forgot about the game. Then, maybe about 2 years ago, there was an online resurgence of runners. I'll assume this is what made SRR. When I found out about this, I installed it in a heartbeat. As I was playing it, nostalgia hit me like a truck. It was such a great feeling to replay my childhood. Without the hard work of you and the rest of the team, something I hold dear to my heart would be lost forever. So, again, thank you.
This is _peak_ Sonic community right here. Glad you joined in, that's the beauty of open source isn't it? And ayy, I was was thinking of the PatMac video too. Hats off to you for being such a cultured man
I remember being freinds with one of the people on the team and him showing me some of the progress. Its on his Gamejolt account. We dont talk no more but i am VERY proud of him and the team.
I'm not disappointed that you covered a mobile game. I was fully anticipating this to be about the Godot remake of Colors. I actually had to decompile a mobile game once so I could get at it's soundtrack (This was before a legit release) and I learned about the system PATH and it changed my life forever.
I'm Impressed, as a software developer. I can tell you that doing something like this is incredibly difficult, even for a seasoned veteran dev. I wonder if you were a senior/lead game developer before.
As a programmer this is by far my favorite content to watch. Things you achieve here is nothing short of mind-blowing. I love the hardware related videos as well. Thanks a lot for sharing these projects with us.
0:25 i've unironically had that thought many times and I think it's just like star wars or star trek- these franchises have such a hard grip on our hearts that as long as it's not insultingly bad most fans will stick around for the good bits and there is good bits in every sonic game- just usually out weighed by the bad- BUT frontiers looks to be the shift towards a more quality focused sonic franchise and I like to think the movie showed Sega big wigs that people still love the blue rat and there is reason to delay projects if it means a better end goal.
Oh gosh. I actually forgot this project existed, when the decompilation wasn't even complete the team called up people to try and engineer a nice way to input audio, cause proprietary formats. Me and some other Guy helped them, we didnt fully get custom audio right but we got something.
Im actually much more interested in decompiling mobile games, especially reviving some of the servers that they have (which inevitably shut down without any notice sometimes!!) Especially with some mobile games like angry birds fight, as it is a game I have huge nostalgia for
Hey, I’m actually a developer for an Angry Birds Fight revival project called Reboot. It was difficult to say the least. And yeah, this has inspired me to maybe take a stab at decompiling the game.
If I were to guess, perhaps the lightmap output by the unpacking tool was borked and removing the lightmap settings made Unity fall back to computing the lighting live, which made it look as intended?
I loved playing Sonic Runners. It was a really fun game and I remember desperately trying to unlock shadow up until the games end and I did. Can’t wait to do it all again.
Well done my brother. Funny story, I was approached by some people in the sonic runners community shortly after I published my yandere sim video. I was completely burnt out on unity decomp at the time so I didn't contribute, but I'm very happy to see that the effort didn't go to waste and the community pulled through for this. Absolutely fantastic work.
@@PorygonAxolotl okay, how would the controls work then unless you plan on having the controls just be a mouse input in which case it's kind of boring, some modification would need to be made. Also an arm port for raspberry Pi or M1 Mac would make it future-proofed.
The cool thing CIL is that the token information is preserved, so you don't even really need to decompile to C#, it's pretty easy to work with the assembly.
Note that things like "call $+5; pop eax" isn't really obfuscation, it's a common technique for writing position independent code. Because call puts the next address on the stack and they you immediate pop it, that's a way to get "here" into a register, which can later be used to fetch data relative to "here". In x86-64, this is no longer really a thing because RIP relative addressing was introduced offering a more efficient way to do the same thing.
Out of curiosity, ever mess around with unity AssetRipper? We used to use utinyripper in our modding community, but ran into a lot of issues and ended up switching to assetripper instead For whatever it’s worth though, the game we mod (GTFO) is compiled in IL2CPP which I’m pretty sure is where our issues came from
AssetRipper is awesome. The dev spends A LOT of time working on it. But yeah, IL2CPP is a big problem. Its right in the name ... IL to C++. So the code is actually compiled here. But the decompilation is getting better. Another problem with IL2CPP is "stripping". Standard Unity methods that are not used in the game are sometimes stripped out of the game by IL2CPP. Meaning ... if the game doesn't use WheelCollider, you won't be able to "just" use that component in mods. Because ... its gone :D
@@DigitalzombieDev actually didnt know that about the stripping, that's interesting. IL2CPP was a huge hurdle for us to work around as well, but we were fortunate enough that the devs made several accidental mono releases somehow, so we always had a (relatively) up to date decompilation to check. Luckily BepInEx and Unhollower have seen major improvements since we started and a lot of the previous limitations we ran into have been circumvented
@@mccad00 Mono releases are a real lifesaver here. Been working on one game with a mono release that was 2 years behind the current version of the game. Insane. Unhollower does some unstripping on IL2CPP and can restore some of it. It's not perfect though. But yeah, its way better now than it was not that long ago. MelonLoader is another alternative to BepInEx, but the Unhollower version is quite a bit behind until ML version 0.6 gets released (hopefully this year). On one "game" I'm working on about 50% of the physics is stripped out. Try creating a car racing mod without friction materials. Oo To be fair, the dev can choose multiple different stripping levels before compilation. So you may get lucky on some games and only a few things are missing.
@BriansMe fair point, but it would still kind of be nice. Plus you'd have the Drop Dash in all the Classic Games(even though it's very poorly implemented)
haha could you maybe do this for Dragalia Lost and Love Live All Stars please Okay it'll never happen but I can't do it myself so I'm just praying someone will save them
12:55 oh my god I cannot believe I am not the only person in the world that says .JSON like the "JAAASON" from Heavy Rain. Without fucking fail since I learned of the format many years ago, I have, it's like a tic. As such, seeing you make that specific connection as well cracked me the fuck up.
I saw the thumbnail I immediately guessed Sonic Runners. I've been playing the Revival project for a while now. Glad it's picking back up in popularity again.
Absolutely fantastic video Matt, one of your bests for sure! This is exactly the type of content I enjoy the most on UA-cam nowadays. I've got a question though. Not sure if I understand correctly, but wouldn't it have been more useful to backport uTinyRipper itself to also support those old Unity formats instead of rolling your own specific parser/fixer scripts? It seems to me that would've both benefited the decompilation community more than the current approach and would've been useful for you also later down the line if you intend to decompile another old Unity game.
So many games getting decompiled, you should totally check out the retro engine decompilations of sonic 1, 2, cd and mania which also have been ported to multiple systems
16:00 About this... PCs and phone GPUs work different compared to each other, to circumvent this and have proper 3D acceleration on mobile phones OpenGL ES is used on all phone GPUs which is wildly different than the desktop OpenGL PCs use normally. From what I've seen on those options there is an OpenGLES3 option available which might of gotten those shaders to work
I think it's a little weird the title says "I decompiled a sonic game" when you mention in the video how there was an entire team of people who made this possible
I can’t even imagine what you would think you Unity’s current graphics package in comparison to back then. I’ve navigated the hells of the SRP api and it would bring me joy to see someone else share the experience
I hope Super Mario Run gets this kind of treatment some day (and it is also made in Unity, like Sonic Runners, though I don't doubt that Nintendo definitely used obfuscation techniques like IL2CPP). The game is honestly pretty underrated and is quite fun, and different from a lot of mobile runner games in that it's basically an actual proper NSMB game that just handles your d-pad inputs for you but otherwise plays basically like the console equivalents but on a smaller scale. Honestly it feels more akin a normal Mario 2D platformer than it does to other mobile auto runner games, which makes sense because it was made by the NSMB team with heavy involvement from Miyamoto himself too. But because Nintendo forces you to have an internet connection to connect to a server or something just to play it, that means it will become unplayable once that server is shut down unless a custom server and ultimately something like this happens.
Sonic Runners Revival dev here: We actually found a whole lot more interesting stuff in both the code and in the game assets. Early/unused animations, placeholder game over and continue screens, and code for a menu which doesn't even appear in the game's assets at all (reactivating it would require us to remake its UI from scratch) and also didn't appear in any version that was released publicly.
Not to mention unused stages and events such as the Sonic '06 roulette event, the Silent Forest stage, and the unfinished and incomplete Zomom Raid Battle event (my guess is that it was set to run in 2016 before the game was deemed a failure).
There's more that we found too, but this comment would get way too long if I mentioned everything.
O interesting
interesting. Too bad the comment did just get buried among all the other comments
Not enough comment. Moar.
@@SullySadface yeah
@@SullySadface^^^
As someone who makes content in Unity the two biggest things that happen to me are "why isn't this working?" And "why did that work?" It's really just how unity is. In one project baking lighting works and another project it doesn't. It's just how it is.
Not just unity as a godot dev this is also the case lots of times
I think thats just programing in general
As not a game dev, but a programmer, this is universal
As a kid you're told that in the digital world the same input through the same machine will always result in the same output, and the simple beauty of that compared to the irrational mess of human interactions is what draws you to IT and technology as a whole. Then you figure out that the code that makes those beautiful machines work is still written by the same irrational humans, so anything and everything only works by sheer luck, the same machine can give a wildly different range of outputs for the same input depending on a wide number of factors including the phase of the moon, and we can't ever have nice things.
@@fallingwater even if you do write a perfect code the sun could always change one important bit with radiation and break your code entirely
Skill issue moment
This is fantastic, and thank you for what you've done! I'm currently undergoing the challenge of playing as many Sonic games as there are avaliable and without your work, Sonic Runners would've been impossible for me to reexperience and it was a great time. You and The Revival Team are amazing game preservationists.
you know what they say
all toaster's toast toast
Glad you will finally be able to have a chance to play runners. It was a fantastic little game
Bro you can’t escape charriii5 the man is literally omnipresent what the hell
Game preservation is by far going to be the hardest kind of history preservation that we will have to deal with. Thank you for playing your part in the pursuit!
PLEASE GO OUTSIDE HOLY FUCK
@@slimeprivilege stop shaming art preservation
@@Sydney_Angelyt video games aren’t art
@@slimeprivilege Most people who say this are hypocrites
@@weggygaygay9940 What would you argue is? I'm just curious.
All these game decompilations are great. I 100%ed the Jak and Daxter PC port that came out recently and it's now, without a doubt, the best version of the game, no competition. The Super Mario 64 and Ocarina of Time ports seem equally good from what I've seen. I really hope thie continues to be a trend, of fans rescuing games from dead platforms and giving them the proper treatment that modern hardware can provide.
I was keeping up with the development of that one and now that it's playable I've been absolutely loving it. I even imported my saves from my ps2 memory card, it just worked. Also got it on my Steam Deck. 100% better than ps2 emulation.
We're decomping PS2 games now? How long will I need to wait for the Burnout 3 decomp?
Ship of Harkinian, the OOT PC port is easily the best way to play OOT that will ever exist. As a lifelong fan of OOT, it gives you levels of control and customization I could have never imagined, and it feels SOOO good. It has less input delay than actual hardware and runs at whatever FPS you like. Imo, it is the only way to play the game ever again. The older versions might as well not exist.
@@bfgfanatic1747 I'm working on Urban Reign, if you're interested in that game, tho I literally just began last month. :)
WHAAT? J&D is very special to me, incredible that someone ported it before I got skilled enough to
From all the people I knew would help tinker with Sonic Runners Revival, I definitively wasn't expecting you, but I'm glad you did, because you've always done an amazing job preserving games you liked, and having you on board really was a great sign.
The community always cherishes their decompilers, and hopefully you can see all the praise you deserve because honestly, this seemed like a really tough job, so yeah, thanks a lot Matt.
One of the first thoughts I had before I clicked this was "didn't I just watch this same guy recompile some peculiar North Korean driving sim flash game a week or so ago?"
😂 I guess if he posts something about a game, it’s going to have some sort of decompiling in it. LEGO Island, Super Mario 64, Korean game, Sonic Runners………
@@Delus1on_L MINESWEEPER
@@gluttonousmaximus9048 Oh yea… forgot about that one…
I'd love this treatment for Dr. Mario World. I actually really liked it and had put a lot of time into it and was sad when they shut it down. Mobile games tend to get lambasted by the gaming community but they're still video games just as much anything on a console or PC.
I feel like mobile games can’t even be compared to normal games, they just fill a different role.
@@ApostleOfCats personally I disagree. People look at all of the free to play ones and assume all of them are like that. It ignores the fact that that model exists on every platform but is more common on mobile given the lower cost of development and objectively larger audience. There are billions of phones that can run pretty much any mobile games compared to the much lower number of consoles and gaming capable PCs. There are still many different mobile games across several different genres that have stories, music, gameplay, and graphics thst match their console and PC counterparts. It's just that the majority of them focus on simpler concepts like puzzles and idle games because the majority of phone owners don't usually play video games. That doesn't mean that those aren't video games though.
any mention of dr mario world reminds me of the greentext about that coworker who was obsessed with it lmao
@@ApostleOfCats console peasant belike:
@@chadmasta5 never said they weren’t video games
A guess on the lightmap settings: Because Unity tries to automate the lightbaking process the lightmap settings may also contain a representation of where in the directory the appropriate light maps should live. The idea being a user can press "bake" and everything gets assigned to the right object even though your lightmaps may live in some random project folder that artists never look at. And it likely wouldn't be some simple directory name, it would likely be a unique string referring to each individual image uniquely. Clearing the settings may have simply cleared this and allowed you to overwrite it, something that if you were to hit "bake" during normal development would also happen.
Can't prove it of course, and a lot of those assumptions are based on later Unity builds (2016+). But overall I suspect it's a by-product of the engine trying to make lightmap baking "hands off" in terms of assigning lightmaps to objects.
It's really cool that the video is also made to shout out a Sonic fan project. I love the "it just works" you mentioned about Unity too, classic with big proprietary software lmao
Nice video! That thumbnail and title combo really undersell it though, I hopped on thinking you had only ripped models from a game, but you RE'd and ported a game to pc, that's super impressive!
Your ability to communicate how game dev, and coding in general works, is incredible. Normally in these sorts of presentations I’m asleep five minutes in 👏 👏 👏
So true
Because he really knows what he’s talking about
Love when this sort of videos are released, I really liked that fixing the corrupted game save saga
This guy keeps saying he has no idea what he's doing then just casually goes learning how to decompile things in a few days then gets the job done like a pro.
You're awesome man.
He already had experience in related parts of the same field, he isn't starting from scratch here.
@@nikkiofthevalley What experience does he actually have? Was he previously a software engineer or something? Seems like he is all self taught, which is seriously impressive!
@@condensedmatter118 Yeah, it's still impressive, but it isn't true that he learned all of this in a few days, that just isn't possible.
I would agree that he seems self taught, what I meant by "experience in related parts of the same field" was that he already knew related things in the same general field.
He’s so smart. Gotta have an IQ of 130 at least
He’s so smart. Gotta have an IQ of 130 at least
I was kinda hoping that he de compiled sonic 06. However I played this game so much years ago and was very sad when the servers went down. Glad to see that there was a revival for it!
It's not exactly a decompilation but you should check out Project 06. It's a full remake of Sonic '06 in Unity and fixes up a lot of the bugs in the original while running at a silky smooth 60 frames. It's not done yet, but they have both Sonic's and Shadow's routes complete and are working on Silver.
You should check out project 06 by chaosx
Project 06 is garbage and is made by a scummy dev, don't check it out and don't support it.
What were you hoping to get out of a decompiled sonic 2006? Ripping the models or HUD assets or what? Because it's entirely possible for you to do it yourself, the game's in LUA.
@@bfgfanatic1747 I was aware of the project, but last I heard it wasn't that far a long so fair enough
one of your best videos IMO; software preservation is a hugely important branch of history that unfortunately doesn’t often get pursued by the proprietors of the software itself.
in a few decades time, we will no doubt be all the happier for having kept record of this kind of thing, just as we are with artworks that we’ve restored and preserved
If you want to have a go at a slightly bigger project, Sonic Colors Ultimate was built using Godot, and all of its packaging formats are thoroughly documented (open source engine and all that). You can decompile most of the assets and everything written in GDScript and C#
Honestly, decomps for game preservation are the coolest thing to me. I've been following the Metaforce project (Metroid Prime decomp) for a while and they've blown me away with what fans are able to achieve.
I've been trying to translate the game Hylics 2 for years now but i never found the correct tools to do it. Now thanks to this video i almost immediatelly managed to extract and find the text strings i need to translate. Now i still need to learn to but everything back together with the translation but still thanks so much. Oh, this preservation projects are so awesome and important for history and fans, thank you again.
Fun fact sort of decompiling was how Sonic 3D Blast was ported to the Saturn. They made a tool that took the hand written assembly for the Genesis and spat out equivalent C code and ran it on all the game logic, then wrote new code for the graphics, sound and controller.
I've been using Unity professionally (and independently) for a little over a decade -- stale lightmaps are a thing that even happens to Unity games that *aren't* filtered through months of reverse engineering. A number of things can result in flat lighting, the absence of shadows, and the non-shader-related visual artifacts your team was seeing. Standard troubleshooting procedure that I used back in the day was to actually back up and then delete the lighting data (make sure you're using text asset serialization!) and then recreate the lightmaps with shadows disabled but environment/indirect light data enabled. If the result looked closer to your intent, you can be relatively certain that your old lighting data was stale, mangled by version control, or something else, and you could either rebake lighting data, or start diagnosing how it happened in the first place.
Glad to see it worked out for you in the end!
Normal developers: Aw shit I need to upgrade everything...
Evil developers: I have an urge to downgrade. Igor, bring the parser.
funnily enough, gamemaker's compiler is called igor
I still find it funny that the easiest way to fix the lighting problem that was happening was to basically yeet it into the trash.
Like I can just imagine the conversation about the lighting problem being something like.
"Well I fixed the lighting issue."
"That's great! How did you do it?"
"I just cleared the script that told the lighting what to do."
... "What."
Seeing reverse engineering like this is so satisfying. I'm part of a small community trying to reverse engineer an old MMO and boy... it's such a process, I'll never truly understand. Great work all around.
This is AMAZING! I clearly remember watching PatMac's documentary and, even though I'd never played this game in my life, being a little sad that it was no longer accessible and that any attempts to revive it were just a soulless remake, even in this day and age where fan revivals are so common.
Glad to see it got the right treatment after all this time.
0:18 Did I just see Sonic Unleashed between thoose games?
Absolutely magnificent. This is super hero kind of stuff, using highly sophisticated knowledge superpowers and love to save the day for many people. Please continue to save our world, we need you. Many thanks!
Having tried my hand turning compiled mobile Unity games back into projects before, I have nothing but respect for anyone who makes it work. Great job!
Bro did not slip in Rush Adventure, Unleashed and Heroes in with Sonic Boom💀💀
0:19
I'm already done
I doubt he put to much thought into each individual game in that graphic
i noticed the fact that a lot of this footage runs on a pc and i am wondering if the srr team can make full on pc builds of sonic runners unless something is preventing that
I think the opening of this video might be missing a critical fault of the sonic cycle. Sonic fans, myself included though i'll never admit to it, are interested in the next sonic game because we have this sliver of hope left that maybe, just maybe, this one will be different. It never is, and we know in our heads it never will be, but then you get games like frontiers that show even a small degree of basic competence and you start to think "Oh man, the last 24 years of my 24 year old life are finally about to pay off"
At 12:55 is literally all I can hear, when I see a .json file. So glad you put that clip in the video lol
That was an insane deep dive into decompiling a game. It's crazy!
damn those are some insane skills. digging deep into the engine, not only that, but bringing back deprecated stuff from the grave and bringing it back up to speed.. much respect
Hmm, I remember trying to decompile apps and games, ranging from android apps to Wii games, I was fascinated with how companies make their own coding system or use an existing one. Now, you can't do basically anything because of digital form games and piracy protection, it's amazing how coding and modeling have developed ey?
You can actually still decompile or reverse most games, it has to be executed _somehow._
The piracy scene is rather efficient at removing DRM protection.
However sometimes (especially for Denuvo i think) they just bypass it, which of cause keeps the memory encrypted.
i love seeing how this was done, well made. One thing i would say is maybe you could have used AssetRipper instead of uTinyRipper, i believe they both do similar things but Asset Ripper has support for 3.0.0 to 2022.x, so maybe that could have helped in the decompilation process. Especially since uTinyRipper is no longer developed
I had no idea there were ways to still play this game, and then you come along and help kickstart an entire revival! I remember being genuinely sad when I first learned Sonic Runners was taken down years ago, I loved this game when I was younger. I'll definitely be checking out the revival later, sincerest thanks for your amazing contributions and video!
awesome vid! I always learn so much from your uploads. Always caught off guard when you swear though, not because it bothers me but because I never expect it from your soothing voice and narration 😆
Oh man, decompiling games.. I tried to decompile Epic Mickey 1 and 2 and it was.. something else. I was able to rip the games from their discs but I can't code for the life of me. So I was able to have my dad (who's a software engineer) decompile it for the most part. The only problem was that all the files were in the .NIF file format. Me and my dad tried to do as much research as we could on them, but we just couldn't figure it out. Unlucky for me, my dad doesn't know C++, and he wasn't willing to learn it (and generally I have a grasp for reading code, and I can understand it, but I can't write it). So I've been at the point for like four months now possibly being the only person attempting this with the Epic Mickey games and I have no idea what do, lol.
The .NIF file format wasn't too uncommon for bigger games around that time -- like for games like Skyrim and the Fallout series -- however Epic Mickey was never specifically documented. Also the reason I went through all this effort? To rip the maps for a single animation I wanted to work on. I still wish to work on it, but because of the game taking place on the Wii, I would probably overwork my Wii trying to run the game and animate at the same time. And it was very unlikely I could emulate the game while animating (though technically speaking I could) because that would probably destroy my pc. I wanted to rip the maps so I could set up complicated camera shots and know placements and whatnot (when it comes to those 3D enviournments, I generally have a good visualisation, but for what I was trying to set up it was too much).
Anyways, that's sort of where I'm at. I'd love to archive these for game preservation as well, though I don't know where to go from here. Does anyone have any advice?
I'd recommend that you try to see how different the epic mickey .nif files are from other documented ones, then see what happens from there
By far the best intro to game reverse engineering I've seen. Next time someone asks me "How can I bring this old game back to life", I'll point them to this video for an idea of what that entails. Thanks for making this, Matt!
Do a decompillation of sonic dream team
dream team is compiled with il2cpp instead of mono which runners used so its basically impossible
there are so many mobile games that are now just completely lost to time, its nice to see one that wont suffer the same fate
1:27 Was that ad that popped up in Sonic Runners for "The You Testsment" by fricking MDickie?! W... W-W-WHAAAT?!
I am sure the difficulty would be so high, but I would love to see Dr. Mario World get this treatment. It's such a good game, but the servers are offline so it can't be played.
5:00 Using cake as an analogy here is pretty clever, ngl..
19:14 this is the most programmer moment one can have.
Trying to figure out why something doesn't work as you wanted, and then you get bored and then try random things and then one of those random things actually caused the thing to work like the way you wanted it to. Truly a programmer moment.
Extracting games is a nice way to learn how their are made because you can see unused assets with referance to thems (even deleted ones) and even the project's code and project's name in it!
Great video. It's worth noting that even unitys il2cpp code can be somewhat decompiled by community tools.
From the bottom of my heart, thank you and the rest of the revival team.
I remember playing this when I was younger, and when it shut down, I was devastated. Since I was young, and had no access to consoles at the time, runners was one of the few ways I could play a Sonic game. Eventually, though, I forgot about the game.
Then, maybe about 2 years ago, there was an online resurgence of runners. I'll assume this is what made SRR. When I found out about this, I installed it in a heartbeat. As I was playing it, nostalgia hit me like a truck. It was such a great feeling to replay my childhood.
Without the hard work of you and the rest of the team, something I hold dear to my heart would be lost forever. So, again, thank you.
if I crush up and snort enough copies of sonic unleashed I might be able to excrete a decomp through the pores in my sweat
Most normal Sonic comment
@@ImpeccableExplanation to be fair to me the bar is at Ken Penders.
This is _peak_ Sonic community right here. Glad you joined in, that's the beauty of open source isn't it?
And ayy, I was was thinking of the PatMac video too. Hats off to you for being such a cultured man
If *MattKC* uploads, you _know_ it's going to be a good day!
why ukraine?
@@cumeater288 am too lazy to change it
@@cumeater288 why not a sahbi
bot
@dorkerroblox The emboldening of his name implies it
I remember being freinds with one of the people on the team and him showing me some of the progress. Its on his Gamejolt account. We dont talk no more but i am VERY proud of him and the team.
wait, now that the entirety of it is decompiled, can't there be a Native PC Binary for it as well now?
"Unmanaged Process" was clearly named after part of the tutorial they were following to build that code artifact. 😅
I'm not disappointed that you covered a mobile game. I was fully anticipating this to be about the Godot remake of Colors.
I actually had to decompile a mobile game once so I could get at it's soundtrack (This was before a legit release) and I learned about the system PATH and it changed my life forever.
Decomps of the Sonic Adventure games would be the chef's kiss for me.
Really impressive preservation effort. This is one of those videos that would naturally make for a great presentation at a conference some day.
I'm Impressed, as a software developer. I can tell you that doing something like this is incredibly difficult, even for a seasoned veteran dev. I wonder if you were a senior/lead game developer before.
I was blown away by the effort you and the team put into this, hats off! Please keep it up!
As a programmer this is by far my favorite content to watch. Things you achieve here is nothing short of mind-blowing. I love the hardware related videos as well. Thanks a lot for sharing these projects with us.
I miss your regular uploads. Welcome back Matt
0:25 i've unironically had that thought many times and I think it's just like star wars or star trek- these franchises have such a hard grip on our hearts that as long as it's not insultingly bad most fans will stick around for the good bits and there is good bits in every sonic game- just usually out weighed by the bad- BUT frontiers looks to be the shift towards a more quality focused sonic franchise and I like to think the movie showed Sega big wigs that people still love the blue rat and there is reason to delay projects if it means a better end goal.
DID I SEE SONIC UNLEASHED AS A TURD?
thats it i'm sending the truck.
Oh gosh. I actually forgot this project existed, when the decompilation wasn't even complete the team called up people to try and engineer a nice way to input audio, cause proprietary formats. Me and some other Guy helped them, we didnt fully get custom audio right but we got something.
Im actually much more interested in decompiling mobile games, especially reviving some of the servers that they have (which inevitably shut down without any notice sometimes!!) Especially with some mobile games like angry birds fight, as it is a game I have huge nostalgia for
Hey, I’m actually a developer for an Angry Birds Fight revival project called Reboot. It was difficult to say the least. And yeah, this has inspired me to maybe take a stab at decompiling the game.
Also yes, we did get the game working. Took a while, lol.
Ah, love this video. This decompilation content is an absolute treat. I've lost count of how many times I've watched your Lego Island videos.
This was a freaking awesome watch!
If I were to guess, perhaps the lightmap output by the unpacking tool was borked and removing the lightmap settings made Unity fall back to computing the lighting live, which made it look as intended?
Amazing video! I’ve always been interested in this stuff!
I loved playing Sonic Runners. It was a really fun game and I remember desperately trying to unlock shadow up until the games end and I did. Can’t wait to do it all again.
2:33 skip ad button
Well done my brother. Funny story, I was approached by some people in the sonic runners community shortly after I published my yandere sim video. I was completely burnt out on unity decomp at the time so I didn't contribute, but I'm very happy to see that the effort didn't go to waste and the community pulled through for this. Absolutely fantastic work.
It’ll be at least a few more re-watches before I get bored of watching him decompile this game. I’ll update y’all when that happens
Yay! I was chosen to be scammed! Hooray! I think this means I am finally a big enough UA-camr that I was chosen to be replied to by this scammer bot!
So glad you're trying to get sonic runners working.ive missed this game so much
bro how tf are sonic chaos, triple trouble, pocket adventure and rush bad games 🤨
"MattKC has uploaded a new video" might be my favorite combination of words
Question, since it's now fully decompiled in unity code, can't it be compiled back to pc? Namely windows and linux?
Yes
@@PorygonAxolotl okay, how would the controls work then unless you plan on having the controls just be a mouse input in which case it's kind of boring, some modification would need to be made. Also an arm port for raspberry Pi or M1 Mac would make it future-proofed.
The cool thing CIL is that the token information is preserved, so you don't even really need to decompile to C#, it's pretty easy to work with the assembly.
While Nintendo would go and kill your ahh for doing this, I bet that Sega would just be like: "Wow, you guys are crazy. Good job."
Note that things like "call $+5; pop eax" isn't really obfuscation, it's a common technique for writing position independent code. Because call puts the next address on the stack and they you immediate pop it, that's a way to get "here" into a register, which can later be used to fetch data relative to "here".
In x86-64, this is no longer really a thing because RIP relative addressing was introduced offering a more efficient way to do the same thing.
Out of curiosity, ever mess around with unity AssetRipper? We used to use utinyripper in our modding community, but ran into a lot of issues and ended up switching to assetripper instead
For whatever it’s worth though, the game we mod (GTFO) is compiled in IL2CPP which I’m pretty sure is where our issues came from
AssetRipper is awesome. The dev spends A LOT of time working on it. But yeah, IL2CPP is a big problem. Its right in the name ... IL to C++. So the code is actually compiled here. But the decompilation is getting better.
Another problem with IL2CPP is "stripping". Standard Unity methods that are not used in the game are sometimes stripped out of the game by IL2CPP. Meaning ... if the game doesn't use WheelCollider, you won't be able to "just" use that component in mods. Because ... its gone :D
@@DigitalzombieDev actually didnt know that about the stripping, that's interesting. IL2CPP was a huge hurdle for us to work around as well, but we were fortunate enough that the devs made several accidental mono releases somehow, so we always had a (relatively) up to date decompilation to check. Luckily BepInEx and Unhollower have seen major improvements since we started and a lot of the previous limitations we ran into have been circumvented
@@mccad00 Mono releases are a real lifesaver here. Been working on one game with a mono release that was 2 years behind the current version of the game. Insane.
Unhollower does some unstripping on IL2CPP and can restore some of it. It's not perfect though. But yeah, its way better now than it was not that long ago. MelonLoader is another alternative to BepInEx, but the Unhollower version is quite a bit behind until ML version 0.6 gets released (hopefully this year).
On one "game" I'm working on about 50% of the physics is stripped out. Try creating a car racing mod without friction materials. Oo
To be fair, the dev can choose multiple different stripping levels before compilation. So you may get lucky on some games and only a few things are missing.
1:27 Mdickie would never make a ad like that!
Can you also Decompile Sonic Origins Plus?
@BriansMe fair point, but it would still kind of be nice. Plus you'd have the Drop Dash in all the Classic Games(even though it's very poorly implemented)
@BriansMe fair point
Every Sonic UA-camr needs to see the first 1 Min of this video. I NEED to see there takes on it. I NEED IT.
haha could you maybe do this for Dragalia Lost and Love Live All Stars please
Okay it'll never happen but I can't do it myself so I'm just praying someone will save them
well Love Live Stars runs on unity unlike Love Live School Idol Festival runs on proprietary game engine for dingus reasons. but hey we never know
Matt demonstrating how tough decompilations are opened my eyes
And now I am more grateful some peeps managed to decompile rsdk5
12:55 oh my god I cannot believe I am not the only person in the world that says .JSON like the "JAAASON" from Heavy Rain. Without fucking fail since I learned of the format many years ago, I have, it's like a tic. As such, seeing you make that specific connection as well cracked me the fuck up.
oh hello there
General kenobi
@@attilavs2 Sir this is a video about decompiling a sonic game
@@aid3n594 yes but the lolz
Hello mom.
I saw the thumbnail I immediately guessed Sonic Runners. I've been playing the Revival project for a while now. Glad it's picking back up in popularity again.
all of that, and they still won't make a pc port
Absolutely fantastic video Matt, one of your bests for sure! This is exactly the type of content I enjoy the most on UA-cam nowadays.
I've got a question though.
Not sure if I understand correctly, but wouldn't it have been more useful to backport uTinyRipper itself to also support those old Unity formats instead of rolling your own specific parser/fixer scripts?
It seems to me that would've both benefited the decompilation community more than the current approach and would've been useful for you also later down the line if you intend to decompile another old Unity game.
does the "C" in your name stand for Chad by any chance?
So many games getting decompiled, you should totally check out the retro engine decompilations of sonic 1, 2, cd and mania which also have been ported to multiple systems
WAKE UP BABE NEW MATTKC DROPPED
16:00
About this...
PCs and phone GPUs work different compared to each other, to circumvent this and have proper 3D acceleration on mobile phones OpenGL ES is used on all phone GPUs which is wildly different than the desktop OpenGL PCs use normally.
From what I've seen on those options there is an OpenGLES3 option available which might of gotten those shaders to work
I think it's a little weird the title says "I decompiled a sonic game" when you mention in the video how there was an entire team of people who made this possible
I can’t even imagine what you would think you Unity’s current graphics package in comparison to back then. I’ve navigated the hells of the SRP api and it would bring me joy to see someone else share the experience
I got a joke. Why did the java developer need a tutor?
Because he couldn't get better that a c++
Did someone say:
public class Thing : MonoBehaviour
{
int c;
void Start()
{
int a = 1;
c++;
}
}
I hope Super Mario Run gets this kind of treatment some day (and it is also made in Unity, like Sonic Runners, though I don't doubt that Nintendo definitely used obfuscation techniques like IL2CPP). The game is honestly pretty underrated and is quite fun, and different from a lot of mobile runner games in that it's basically an actual proper NSMB game that just handles your d-pad inputs for you but otherwise plays basically like the console equivalents but on a smaller scale. Honestly it feels more akin a normal Mario 2D platformer than it does to other mobile auto runner games, which makes sense because it was made by the NSMB team with heavy involvement from Miyamoto himself too. But because Nintendo forces you to have an internet connection to connect to a server or something just to play it, that means it will become unplayable once that server is shut down unless a custom server and ultimately something like this happens.