Interview: Remaking Cartoon Cartoon Summer Resort

Reliving the days of Shockwave and Flash

Interview: Remaking Cartoon Cartoon Summer Resort
Source: Cartoon Cartoon Summer Resort, Episode 2.

Web browser games are many people's first entry point into video games. Their ease of access, diverse options, and often straightforward controls have made them great for children and adults alike to dip their toes into digital play. While sites like Coolmath Games were and are highly frequented, big brand companies like Cartoon Network and Nickelodeon also have child-friendly sites that hold sizable libraries of games based on their shows throughout the years.

If you spent any time perusing Cartoon Network’s online games in the early 2000s, there’s a good chance Cartoon Cartoon Summer Resort ended up on your screen. More than two decades after its launch, and despite the end of Shockwave and Flash support, you might be surprised to find that playing the classic game is now easier than ever.

Cartoon Cartoon Summer Resort is a 2D fetch-quest game where players solve the problems of popular characters from Cartoon Network, including humans and animals from Powerpuff Girls, Cow and Chicken, and Dexter’s Laboratory, on a summer resort. Despite its summer 2000 release, the game’s ridiculous dialogue, hypnotizing (and annoying) music, strange scenarios, and wall-bump-triggered bonk noises endeared it to many. One of those hearts belongs to Matt, a software engineer who remade the game after fixing a bug he found in the original.

While it was already possible to play Cartoon Cartoon Summer Resort through the Flashpoint Project, the remake is notable for its quality of life improvements and ability to be played on web browsers again. I reached out to Matt to discuss why he remade the game for web browsers, the challenges involved, and what he thinks is the responsibility of a video game remake.

This interview was lightly edited for clarity and concision.

Source: Cartoon Cartoon Summer Resort, Episode 2.

SUPERJUMP

What got you into coding in the first place? 

MATT

So I actually hated coding when I first started doing it. It was awful. I had to decide on something when I went to college. It was a community college and I chose computer programming without knowing anything about it. Just because, you know, everyone said you’re good with computers so I just picked the computer degree. 

My very first introduction to programming was this night class at this community college with this professor who was, like, 80 years old. And it was a two-hour long class, and I would show up and try not to fall asleep and it was — you know you’re learning Java so it’s public static void, main string args, and as a new programmer, you don’t know what any of that means. And it’s just the most uninteresting stuff in the world. 

Maybe like a year later, or two years later, I was on a gaming forum at the time and there was a chat application on the vBulletin forum that was like a separate application. And I wanted to make my version of that. What I was trying to do was create my own Discord in some sense, the same functionality, a chat app where you could login, you can have your username, you can send emojis or images, and you know, style your message. Like, make your message show up red, blue, yellow, or whatever. 

So I started working on this application and, when I had a reason to program, the programming was secondary. The main reason was to create something that I wanted to see in the world, that I wanted to understand and have control over, and to bring to light. I was up until like five in the morning, coding in PHP, and I remember hearing the birds chirping outside. And this thing was coming to life, and I remember if this, then that, and understanding how the logic was mapping to what the application was doing.

That was when it really kind of ticked for me. It’s like wow, if you learn how to program, you can make something that’s actually really cool. You can bring your ideas to life. And that application was a disaster.

But it was a good learning experience. I learned a lot from it.

Then it got hacked.

SUPERJUMP

Oh god.

MATT

Yeah, it was a disaster, but you learn. And it was a really, really good learning experience. But yeah, that’s how I started programming. It wasn’t anything born out of some innate talent. I enjoy building stuff. I’ve been coding for, like 10 years, 12 years, or something like that.

I finish one project. I would finish the chat application, and then it’s like well I like chess, so let’s make a chess engine. I would think of something that I like, and it would also give me an opportunity to improve my programming skills, building off of the last thing I learned. So that’s kind of what I’ve been doing for the last decade-plus, just working on things, trying to make my next project and push myself a bit more. Recently, in the last two years, I started working as a software engineer professionally. So, it paid off.

Source: Cartoon Cartoon Summer Resort, Episode 2.

SUPERJUMP

Since you seem to have a desire to go back and use your coding skills on things that you like, this brings us back to Cartoon Cartoon Summer Resort. According to your blog, this remake journey started with you actually finding a bug in the game when you wanted to play it on Internet Explorer, right? 

MATT

Yeah, exactly.

SUPERJUMP

Can you elaborate on what that bug was specifically, and then why you felt a need to fix it after finding it?

MATT

Yeah. So it was kind of a funny thing. You know, you’ll remember something from your childhood randomly or whatever now and then. And I just remembered this game. I looked it up and after thinking for a while, I remembered the name and I found videos of it on YouTube. At the time — this was like 2018 or something like that — Flash was still just barely hanging on by a thread. It was on life support. It wasn’t completely shoehorned out of browsers yet, but it was out of Chrome. It was out of Firefox, but Internet Explorer still supported Shockwave and Flash. 

So, I was able to actually find some website that was hosting this game because Cartoon Network stopped hosting it a long time ago at that point. I was able to find a website that was hosting this game and I ran it on Internet Explorer and it was working! This really shocked me. It was exciting to play something that you played like 20 years ago, 18 years ago, as a kid, especially something you weren’t expecting to be able to play.

So I was running around in this virtual world or whatever and there got to a point where I was just exploring it, just walking around. There it was, in the very top right corner of the map. It’s like an ocean, right, with little island areas. I basically walked over one part of this map, cause it pans around, right? You start in one area and then as you move to the next, it pans the camera over. 

Well, I went to the top right-most area. I walked around and hit a message trigger and a message would show up on my screen saying, ‘You can’t buy any more boats’ or ‘There are no more boats left’—something like that. It was weird cause you would walk further, and you’d just keep hitting this trigger until you walked past it. I was like, there’s no reason it should be there. It made no logical sense. So I was curious about this, and it was enough curiosity to make me wonder how the game worked.

Source: Cartoon Cartoon Summer Resort, Episode 4.

MATT

The game was completely in Shockwave. So I knew nothing about Shockwave or that technology because I was a kid, and I learned how to program way after that technology was relevant. So I went, ‘Okay, how does this actually work? Is this game something I can just open up?’ I investigated that, and it turns out it was a proprietary format and completely difficult to understand. If you open it up in any kind of editor, it will not give you anything meaningful. It’s just a blob of data.

I almost gave up on it and then I thought, ‘Okay. Maybe I can search this game executable for nested zip files or something like that.’ I just tried extracting anything I could from the game and probing the executable to see if I could pull anything from it. If there was any tool, I could recognize to just extract some type of data.

To my surprise, it actually pulled back some tech files and stuff.

They were like compressed binary files that were formed to work with Shockwave. But, when I opened them up in a hex editor, you could see certain characters, and there were certain chunks of that file that were in text. When I extracted that text, it looked like a JSON—like Javascript object, hierarchical map data. You can make assumptions about how the game works based on the map data that it uses. I could find the actual area that I was wondering about and I was able to find that actual message. I basically just broke the map data in a way that the game engine wouldn’t have been able to recognize that message. Then, when I re-patched that into the game and walked over there, it didn’t show the message anymore.

SUPERJUMP

Nice. Did the full game feel like a natural extension? Because I understand that there was actually a pretty significant time jump between fixing that bug with the hotfix versus actually trying your hand at the whole game. Did it just feel like a natural extension after having spent time with it, or was there a bigger reason that you felt like you had to work on it again?

MATT

Yeah, it was kind of both. In 2018, there wasn’t any tooling available around. Even though I had found the map data buried in these files within the executable, I didn’t have any of the source code. All the byte code and all that was still compiled and there was no way to understand it. I only had the map data. I couldn’t actually make any modifications to the game back then, understand how the engine works, or how big it was or any of that.

I follow a bunch of people on GitHub so I see what they star. I think I saw someone star some sort of repository about Shockwave decompilation. And there was this one project, it’s called ProjectorRays, which basically is tooling to unpack those Shockwave files. A group of people researched how Shockwave files are structured. What was interesting is that when they decompile it through that program, the Shockwave files have enough metadata to save information about variable names and things like that in the scripts. So when you decompile a game, it gives you the code almost as if the developers have written it.

When you decompile a lot of games, the compiler will delete the variable names because it’s irrelevant. But, in this little virtual machine for Shockwave, it saved that data—the compilation process. You can see basically everything as if you’re looking at the original source code. Like the variable name would be called boat, location x, or whatever, instead of just some unnamed variable. 

I started reading into this tool and went, ‘Okay, I have a very obvious game to try this on, this game that I could not fully crack back then.’ Then I ran it on that and to my surprise, it decompiled the entire game. I could look at the source code, which is written in a programming language called Lingo, which is the scripting language for Shockwave. I could see all the source code and verify that, even though I fixed the bug in a hacky way, how I did it and the assumptions I made still made sense; they lined up with how the game engine worked. It was really cool to see all that.

Source: Cartoon Cartoon Summer Resort, Episode 3.

Someone else had made a really trivial map viewer for the game in Python or something. It was a really, really crude map viewer. I was looking at the source code and I was looking at this map viewer and I was like, ‘I want to make a better map viewer or just see if I can render this game out fully.’ Then I started doing it in Javascript and rendering it out. Well, if I’m already rendering the entire world, how hard is it to just put the characters there and make them walk around the way they did in the original? 

When I got that idea, I was like, ‘Okay, well why not just remake the game?’ So I remade it, and it took longer than I expected, but it was a fun project that took a couple of months or so. Even being a small and unassuming game, there is a lot of stuff that you have to do.

SUPERJUMP

This brings up another question. When you started remaking this game, would you have considered the hardest part going through that entire trial of decompiling it once you found out about the Shockwave function from the Github repository, or was there a different part of it you would’ve considered the hardest challenge that added more time than you expected?

MATT

The hardest part was definitely not decompiling it. The decompiling is literally passing it to a program, and it decompiles everything in less than a second. What really takes all the time is porting it, looking at the old source code, and figuring out how to write this in a modern environment, which today is HTML5 and Javascript. So you’re thinking, ‘How can I render this game? How can I adapt this code to Javascript in a way that makes sense and maintains the functionality and the feeling of the original game?’

There are certain issues about rendering the game out, too. For example, I rendered the entire map at once, whereas the original game was rendering the map in that tiny view. I rendered the entire game world and just limited the player’s view to a certain map. The original, naïve way of rendering the game world was very taxing on performance, so I had to render the entire game world without ruining performance. Which I was able to do.

SUPERJUMP

I was wondering: why was it important for you that this game was accessible via web browser since it was technically already playable through the Flashpoint project? 

MATT

For me, there was a lot that I saw I could improve with the game. For one, if you ever download Flashpoint, the user experience is not good — it’s good for what it is, but the user experience of playing the actual game is bad. That’s irrespective of Flashpoint; that’s not their problem. That’s the Shockwave, right? Because the game launches into a 400-pixel window which on today’s monitors is tiny. The user experience there is really, really bad. So why can’t we scale it to make it the size of the monitor? And I was just thinking about these things. 

Matt's GitHub for Cartoon Resort & Scooby-Doo! games. Source: Github.

What matters most is who will download it. If you want to just play this game—like ‘Oh, I remember that game’—you Google search it. Who wants to spend an hour looking online going, ‘How do I play this game?’ Then going through forums—’Oh, I have to download Flashpoint.’ Especially if you’re not a computer-savvy person, right?

A lot of these kids that played this probably grew up and they’re not like me. They don’t know how to do programming stuff; they don’t want to have to install a one to two-gigabyte program that they’re never going to use again just to play some game, go through that entire installation process, and then play it in this tiny window. 

The main thing to me was I believed I could remake this. I believed I could add features to it to make it even better. Plus, to make it in a way that you don’t have to go through any hoops. Anyone who searches for the game is just going to find this. They’re gonna click and then boom, playing it. In today’s day and age, everything is trying to get your attention, maintain your attention, and extract value from you. Like, you know, keep you locked in, serve you ads, and use you as some kind of tool. I think the software’s different because it’s just purely there to help you have fun. It asks nothing of you. 

Here’s your game, play it, have fun, don’t worry about anything. There’s not enough software in the world that does that. That’s what I like to do with these projects. Let’s just make someone’s life better and ask nothing of them.

SUPERJUMP

A question that I wanted to end with, what do you think is the purpose and responsibility of a remake? Do you think there even is a purpose behind remakes in general?

MATT

That’s an interesting question. I never really thought about it. Something that’s really interesting is like...certain things happen that never would’ve happened to the original developers because I’m developing it for a different platform, or for different hardware, right? 

SUPERJUMP

Right.

MATT

For example, when I started expanding the view beyond the 420-by-whatever box, there were certain things that were problems suddenly. It makes me think of when they ported Grand Theft Auto San Andreas. One issue they ran into was that when they were modeling the original cutscenes, they were doing it within the resolution of the PlayStation 2. What’s interesting is when you port these games to modern platforms, things outside of the PS2, the cutscenes are all of a sudden in 4K or 1080p or whatever. So, it’s a bigger viewport.

Let’s say in the original game there’s some cutscene and they move a guy out of the cutscene. Then he’s just like T-posing. But, in the original tiny window on the PS2, you don’t see that cause he’s just outside of that frame. But then in the port, you know, in this 10K image, you just see the guy walk off and start T-posing. It kind of brings up this interesting question of what would the developers have done? Obviously, they wouldn’t have left the guy standing there T-posing, right? 

I definitely think there’s a purpose behind remakes. This story that I’m telling about San Andreas and all that is kind of the responsibility. The responsibility, I think, is to take the original intent and design of the original game and to stick to that as much as possible while making it as if that same development team was making it today. If you were making San Andreas today, you wouldn’t T-pose someone off on the side of a cutscene. You would move them fully out of the way.

If you’re porting that game and you realize those types of errors, you would do your best to modify the cutscene to adhere to the new screen resolution. That’s just one example, but a thousand of these things pop up when you port something. I imagine even more in San Andreas but, even in this little dumb 2D cartoon game, it had plenty of things like that which I could get into.

Source: Cartoon Cartoon Summer Resort, Episode 4.

I think remakes have a purpose. They have a purpose because it’s a kind of video game preservation and archaeology. It’s preserving something. If they were to remake it today, I think the responsibility is to keep it authentic to what the original developers would have done.


You can check out Matt's remake of Cartoon Cartoon Summer Resort here. You can also find Matt's Github here.