Something like that happened a decade ago on TIGSource known as Action 52 Owns. It was never finished though the games that were finished range from average to amazing. Of course, the worst of them all are not nearly as bad as any of the Action 52 games, though several of them stands out for their quality. Meong, Sombreros, Non Human, Bubblegum Rosie (Renamed as Bubblegirl Rozy), Beeps and Blips, STREEMERZ, and Illuminator are definitely worth playing, with Non Human and Bubblegirl Rozy being made by the devs of Charles Barkley: Shut up and Jam Gaiden and the Momodora games respectively.
The productivity is completely insane. It's definitely a miracle, even if it is a stinking, fetid miracle without purpose. I am kind of amazed they didn't have a single "platformer" engine. Fitting 52 games into 1 NES cart with no shared library code to work from would be a hard task even with a sane deadline and more reasonable available resources. I think if I had been on the project, my first step would have been trying to make a decent engine that I could just plug sprite swaps with different maps into.
Yeah. Even if they probably knew most of the cpu instruction set beforehand. It's mostly a 6502 with some parts taken out and some extra. But the whole sound and graphics part would be new for them. The programmers did a good job indeed. Which makes it even sadder, because if they had more time some of the games could have been ok instead of terrible.
In 2010 a fan project called "Action 52 OWNS" was started with the goal to "remake all the games from Action 52 for the NES, and make them better, appealing, or at the very least playable." It didn't require the game to actually run on the NES though. 23 of the 52 games are "finished" but the project seems to have died years ago. The most well known one, STREEMERZ, was done by the host of the project, Mr. Podunkian, who's probably most well known for his Merry Gear Solid games.
I'd be happy with more exploration of this set of games, too, though maybe not a full 52 episodes :) Is there more code reuse, e.g. outside of input routines? What about audio, graphics, game logic?
I would prefer if he went over games worth learning from where the programmers had time to do more clever stuff, but I'm sure any game he covers will be interesting.
The start of this video rings very true. Our team leader recently told my team "We don't have time to send you for professional development" on a framework I've never used (JSP, of all things, ugh). The sense of deadlines being more important than a job well done is all too real.
There is a book called "Death March" by Ed Yourdon about software projects with ambitious deadlines. One of the cases he mentions is projects with deadlines so unrealistic that no one believes that they can be met. He says that this typically creates apathy among the people working on it.
...Wasn't every single classic game's jump tied to the far button, and attack to the left button tho? Or am I misremembering the nes controller layout? Edit: Oh no, it actually does go plus, start/select, B/A. Yeah fuck those B jump people, that's gross.
@Mr Wizard Idk, on the scale... i think b jump people are better than up dpad jump people. If there was a NES dev dantes inferno the b jump people are in the frozen ice where their heads stick out, and the up dpad people are the ones frozen completely under the ice next to the devil.
Programming 52 games in three months leaves you with less than two days per game. And that's not counting having to switch focus to Cheetahmen halfway through. Ain't nobody having the time to optimize that.
I mean yes they were fast,but we need to consider that a lot of those games were copy paste with different graphics. In the end there are sure a lot less then 52 true different games on that cartridge.
@@Last_Resort991 Still though, they were novice programmers with 1 week's worth of training. Put me in that situation and you'll be lucky if I manage to get an NES to print "Hello world" lol
@@guy-sl3kr This is actually surprisingly difficult on the NES. You have to know a good chunk of the inner architecture to get to that point, and a good ways into the actual game development. The bootup routine. Drawing the character tiles and storing them in the right spot. Palettes. Getting them onto the background. Good knowledge of 6502 assembly. A simple game loop. All has to be in place.
@@DisplacedGamers One week potentially could be enough. It was, after all, enough to get THIS far into it. I imagine I could get what I needed to know in a week, for NES. (Atari 2600, on the other hand, is black magic, and it's frankly amazing that so many games exist for it at all.) To be fair I'm already an experienced game developer, so it's more a question of mapping my experience onto a new platform's architecture and design. And these developers weren't total novices; they did, after all, have at least one game in their portfolio. These kinds of errors are what you get when a dev either doesn't know what they're doing at all, or they just don't have enough time to do more than the first attempt that kind of works. If it wasn't for the timeline, I would have guessed the former. As it stands... Some combination, leaning more towards the latter. (In particular, while I could probably build an NES game after a week of training, I'm not sure I could build and debug a platformer engine in that time frame because my experience building platformers is limited. My last attempt is still buggy as heck and I haven't gotten back to it.)
@@liukang3545 that doesn't mean you can't learn stuff from it besides, while a lot of games haven't aged well i still revisit some classics like Castlevania 1 & 3
In my 15+ years of professional programming experience I've never heard of any selection of code referred to as an "abyss" of code before now. Action 52 must really be that special.
Action 52 seems like a class of programming students turned in the first ever game assignment and the teacher just decided to publish them all on one cart. Turns out I wasn't far off.
Reverse-engineerng Action 52 was really interesting. There are a lot of things that almost no one knows about and how the games were developed. The sound driver was borrowed from other developers as well.
@@MrNorbert1994 Sculptured software, couldn't recall the name. For some reason Daydreamin' Davy was all I was thinking about when I typed the previous statement and couldn't recall it was Sculptured Software for some reason.
@@downscale There is a video on YT made by someone who tried to get as far as possible, a lot of games were impossible to beat. Also a polish guy made a video about those games with a lot of swearing, trying to explain what those games are even about and mocking them in cruelest way possible.
When the "scope creep" re: CHEETAHMEN came up, someone on the dev team could have suggested/convinced the game producer to forgo ACTION 52 and just focus all their energy on getting CHEETAHMEN right; save the other prospective IPs/ACTION 52 crossover for a SNES game sequel if the CHEETAHMEN took off. Now, I'm not a developer by any means; the above is what just makes sense from a workload standpoint. Do ONE thing *well*, then add more things. Nintendo didn't attempt more than cameos in their franchise outings until 1999 w/SUPER SMASH BROS.; by then, all of their IPs were proven sellers, and you had high-XP devs like M. Sakurai and S. Iwata (president of HAL Labs, but a dev at heart) working on your N64 game. Keep in mind: ACTION 52 was meant in part to be the franchise that would be a NINTENDO/SEGA killer--created by some dude w/an overly-jingoistic "USA! Bring gaming back to AMERICA w/AMERICAN-MADE games!" attitude. NINTENDO couldn't get away w/rushing shit into production (VIRTUAL BOY...), and this publisher w/no XP in game development though he'd create the ALL-AMERICAN anti-Mario franchise stable w/only three devs. Hindsight-20/20: Said publisher should've just focused on THE CHEETAHMEN as IP, made that game properly polished, pitched the cartoon, and after that IP's a modest success, create new IPs as single games. But this publisher's mindset was a probable relic of (what created) the NORTH AMERICAN VIDEO GAME CRASH of 1983, where every company and corporation--including DOG FOOD COMPANIES--thought they could code a game for the ATARI 2600...foisting levels of unplayable shovelware into stores to the point where even WAL-MART wouldn't carry games on their shelves.
Just for the record, your videos have inspired me to dig into NES assembly and as a result of this, I have now created my first romhack. I fixed a terrible design flaw in the NES port of King's Quest V so that saved games can persist across a hard reset. All I had to do was NOP out a couple bytes in the ROM. If someone were to solder a battery onto their cartridge (and probably a diode too? Not sure what would be needed...) then the new save feature can be implemented with just two Game Genie codes. Of course, if someone were to ever forget or typo the Game Genie codes, their save would still get erased. So really, it's one that should be enjoyed in an emulator or on a flash cart.
9:00 as someone who's coded on games for the NES and SMS consoles, yeah we usually stored in game text as text ascii codes, so no real fault on Action 52 for doing the same.
Similarly, I bet somewhere they implemented the "fall damage" thing with a timer, so if you fall for X amount of frames you just die. This explains the "dying in mid-air" phenomenon.
That's exactly what happends! It ticks up from 0. Forcing it to stay as 0 lets you jump in mid air too. I did it in billy bob and got him to climb through the roof into the unprogrammed area of limbo lol
The fact that ANYTHING worked in this nightmare of a game compilation is a miracle. One week of programming classes is not enough for proper learning of any hardware.
To be fair, it was one week of programming on the NES specifically. I took my first computer science class in 8th grade (1982-1983) and really enjoyed it so I continued to program as a hobby for years. When this project started, I already knew how to write simple assembly language programs for the Amiga. it was a different processor than the 6502 but most of the basic concepts where the same. Fortunately, the hardware on the NES was not very complex so there wasn't much to learn. :)
Storing text in direct ASCII encoding in the ROM is actually very common in NES games. That by itself doesn't mean much. Gotta take a look at the text reading code to see if it's the same accross these games.
I almost cut that part after doing research into other games. I added that "this might be common..." slide and then started seeing it in a lot of other places.
@@DisplacedGamers It's very good video as usual! Fixing the controls in these games is something that can be done in a couple of hours, just need to find some free space in the ROM to jump the program counter to that area, add the new code and then jump back. The real question is, is that worth the trouble...
@@DisplacedGamers If you aren't going to compress the text, then it can be quite practical to store it in regular ASCII. In most cases you probably lose nothing while keeping the text easy to maintain and alter.
This video got me interested in screwing with it in an emulator, I found a tonne of variables in ram are actually shared between quite a few games such as enable autoscrolling, scroll speed, autoscroll direction, die in mid air counters that tick up, level numbers, lives and hitpoints. Hitpoints being interesting as some of the games instant kill you on impact, but modding this value lets you survive multiple hits like the other games. Bubblegum rossie is especially interesting, level 2 is a car level but level 1 is unbeatable due to a platform thats too high. Either way if you beat level using Y coordinate mods in the ram viewer you can make it, but if you fail level two and lose all your lives, you will notice it will not actually reset the state properly and level one will be a car level and glitch autoscroll vertically. You die on glitched tiles unless you make a cheat in the emulator for infinite hitpoints. I tried resetting the driving/platform state in the ram viewer and after a while I managed to get the bubblegum sprite to turn into the car while retaining the rest of the platformer physics and scrolling. Neato lol Another interesting game was billy bob, I forced the "midair counter" to 00 so I don't die in mid air during the game, but doing that also made every platformer in action 52 let you jump multiple times in the air. So I kept hopping in air in billy bob and he grabbed the damn roof and climbs into this glitch tile world. What an experiment lmao
Good old copy-and-paste programming. It's nice to know that this practice has a rich history, as well as the common bugs it creates. Like a bug getting fixed in one copy but not propagated to the others.
Never forget the y2k problem was known since the late 40s, and when it happened they just patched it until 2020 and stuff broke anyways lmao Humans are neither that creative nor that forward thinking.
@@press_pause2236 surely if you know of this channel you've watched Retro Game Mechanics Explained by dotsarecool. His work is an example of really digging and understanding deeply.
Have you beaten all 3 levels of Lollipop? The game loops, but the music gets all screwy and it never fixes itself. I can only assume the sound driver somehow gets into garbage as song data. That would be an interesting short dive I bet.
Most A52 games loop. There were a bunch of guys doing full 2-hour reviews of this dumpster fire a few years ago (well, maybe more than a few, more like 10-12) and they were making sure they 'completed' each game if it was possible. And in most cases the game would just send you back to level 1, with whatever score you managed to get. And in remaining cases they would just kick you back to selection menu instantly, without any warning. These games had very random 'endings', such as Sharks requiring you to kill 94 sharks and the falling condom (uhh... meteor) game requiring about 300 meteors shot down.
To fix the movement code you need to treat left and right as mutually exclusive, but jump is treated separately. So you look at the left and right inputs, process one or the other, then look at the jump input, process it, look at the weapon input, process it. So rather than a big select/case type statement, it's discrete if...then...else statements for left+right, jump, fire.
@@groszak1 yeah, but it's still an actual usable button combination. just because you can't do it without taking the controller apart, it doesn't mean you can't do it - ive seen a few Nintendo titles that straight up crash when you press← and →at the same time
@@dapperbrick7516 Yeah, there are examples even in first-party games: Zelda II freaks out if you hold < and > at the same time and Super Mario Bros. 2 USA will make you climb super fast if you hold /\ and \/ at the same time. So it is a thing that happens if you don't account for it.
I think he already had an idea on how to do it, but after looking through the banks myself, I don't blame him for not trying to move it to a different area. What appears to constitute a lot of the non-code in that ROM may likely be data. Besides, there's no need to redo the code entirely. Both halves of the button checks can be merged together by removing the addresses that handle buttons individually. This opens at least 20 bytes, which is more than enough to let jumping work from that part of the subroutine. Afterwards, since the game already prioritizes right over left, you just alter the byte it checks to do jumps to make it something impossible to do on a controller like $FF. I tried to reorder the addresses to remove the third loop, but it freaks the game out.
The music code that Action 52 uses is the exact same music code that's found in the Sculptured Software games. Monopoly and Day Dreamin' Davey are using the exact same code as Action 52 to play music. In Monopoly's title screen, you can ever hear the lead instrument stop playing, and the accompaniment repeats. Many Action 52 games have music that does this as well.
i think it’d be quite hard for new programmers to use shared routines because of the bank switching. You can’t just jump to a routine in a different bank as the bank has to be swapped in first, and swapped out when the routine ends. Much quicker and easier to copy/paste the code and isolate all the games from each other.
Maybe some of the games could've be split between a shared "engine" and the map/graphics? Or the games could've been "unpacked" from a ROM into a RAM chip on the cart?
It feels like the input subroutine for platforming was designed to be flexible so that you could use it with multiple games and restrict what actions are available as well as point to the appropriate subroutines for handling those actions. The copy/paste take may have been an instance of feeling pressure of development in addition to potentially needing to separate the banks. They may have ultimately consolidated common routines to help streamline the code if they had had the time. Perhaps using 8K of cart RAM would have allowed them to load common routines from one common bank and then switch to the game-appropriate bank for game execution. Goodness. Who knows how different things could have been. Oh... just saw that marsilies said the same thing about using a RAM chip on the cart.
@@marsilies It could all have been done with more shared code in bank switching, but that's well beyond the scope of what the Action 52 team had the opportunity to do. All endeavors, whether creative or not, usually are limited by the following maxim: "Good, fast, cheap: Choose two." Action 52 was fast, and it was cheap. It wasn't good (quality-wise) and the code was also not good. Granted, there's many dimensions to something being "good". For example, a game could be great looking and great to play but the actual code could be atrocious, but that's not the case here. Llike Displaced Gamers said, this is not the developers' fault. If Action 52 was meant to be Good and Cheap (cheap to develop), then it would've taken a lot longer to make. If it was meant to be Good and Fast (fast to develop), it would have needed a bigger development budget.
I’m guessing all the games were worked on in parallel by different devs passing useful routines to each other, and only combined into a bank switched cart at the end of the process, I’d guess it’s only the menu that does any kind of calls to the mapper to switch banks, but I haven’t looked at the code
Back when I was still in high school, taking a game development class, I had been tempted to remake Action 52 in GameMaker Studio, as a way of learning the program more and as a sort of challenge. I never did, it was too daunting of a task and programming confuses me. The idea of someone attempting to recreate all 52 games and trying to make them all unique and playable within the limitations of the actual NES code and cartridge is just terrifying to me. If anyone ever did and managed to do it at least somewhat decently, they would be a god. I couldn't even fathom the effort that would take.
Thanks for the breakdown. Excellent content as always. 4 guys, 3 months. Really puts it into perspective. Consider Howard Scott Warshaw, who was saddled with the ET project. He had even less time, and made some of the best games on the 2600 before that. Give these guys only half the 52 games to make, it would still be a mess. Edit: Maybe if they solely focused on Cheetahmen, it would have had a chance to be at least mediocre.
There was a big collaboration project that somebody tried to start around 10 years ago for 52 different developers to make each of the action 52 games good (just in flash, not on a NES). The Streemerz remake is the only one I know that got finished and released, and it was really good.
7:48 I used that same technique when I was making a fan translation of Rockman Battle and Fighters! It just kinda came naturally to me when I saw the text characters were uncompressed in the rom. I overwrote them with hex codes to find out what strings of characters were what, and eventually replaced the hex codes with ansi characters. Made it easier to change and repoint text.
9:49 The need for a game to have text is going to be known fairly early on, and this sort of routine is about as simple as means of achieving it as can be imagined. Infact, I think the NES tile mapper is just a modified character generator. In a sense this is exactly what it was originally for.
I'm honestly amazed they managed this much with only one week of training. That's barely enough to even get all the graphics data done, much less code up an input handler that works. It's surprising that most of these games boot and have non-garbage assets.
It sounds like the boss heard the stories of how quickly Atari 2600 ports got done and assumed his team could do NES games in a short time like that. Nobody told him those crap ports are what caused the videogame crash.
That Star Wars game was the wrong one, it was developed by Beam Software, an Australian company. However, the game based on Empire Strikes back was developed by Sculptured Software, from Salt Lake City. I'm pretty sure they also used their sound engine in some way. Either way, I don't know how Nintendo let this fly as Sculptured Software was an official Nintendo licensee (who, coincidentally enough, made that Monopoly game that ahowed up in the size comparison)
My NTSC Elite prototype that runs on a real NES has ASCII text. The intro scrolls says “Somebody presents…” because it was never picked up by a publisher but you can change it to whatever you want and it will be reflected in the game.
…of course, these are translated to wireframe graphics and not your usual tiles. Well, I guess the wireframe graphics are somehow made of tiles too. Perhaps Elite is a good one to look at next? I was getting ready to sell it after getting hit with an EF4 tornado but I had always hoped to look at it deeper with someone who knows what they are doing. My prototype is very unfinished compared to the final PAL release. The UI is extremely awkward and there is no music, though the music toggle is there. I do wonder if it can be finished by combining the unreleased NTSC code with the PAL version. Mine is different from the “NTSC” version they made available online. That one does not run on a real NTSC NES and says “Emulator version” in the opening scroll.
Do you want to know something crazy? The cheetahmen creator and composer saw this video and it's on his "favorites" playlist. His channel name is Zentanith.
Ooze's jump mechanics can be described as a ladder and bowling ball roller (it starts straight up to angle the bowling ball and rolls downward like a silde; it's mainly for younger children who have trouble tossing even a 5lb bowling ball so the ball at least tries to stay straight for a strike).
I've used a similar approach whenever needing to display text on anything I've programmed. I've always thought translating ASCII to bitmaps was a fairly standard approach. I also implement some of the other codes as control codes for linefeeds, carriage returns, clear screen, change color, goto char location, etc.
The main thing I've been wondering about is Level 3 of Lollypop - about the glitchy music there, I've always wondered if it happens because the game tries to read Music data from the Graphics data by mistake.
I've been a developer for the last 18 years or so and was just thinking this the other day, I completely see what you're saying in the beginning about non developers expectations. It is incredible how the expectations have gotten so high, not just graphics and gameplay perfection but the storyline and fun factor and everything else, plus being bug free! I have been working on a game i started back in 2009 and has been started from the ground up 3 or 4 times as technology has changed... i have spent the last 6 months (all day everyday) just putting the engine and event system together, then another 2 months refining it and building the first couple of level areas and a few enemies.. then the menu systems.. inventory, items... Man.. everything takes so much time. But i full well know that even if i spent another 5 years developing this game and released it on steam or something, it would just fall by the way side as yet another indie game that isn't perfect by any stretch of the imagination. Anyway.. not sure why im saying this really, something you said just hit me hard lol!
I really, really enjoyed this one! Ever since watching the AVGN video that covered the game I've wondered about some of the background to the game and what was going on under the hood. I'd definitely be interested in a more in-depth video on the subject, but maybe not an entire *52* episodes.
As someone who knows nothing about programming let along NES programming. this was very informative and i like the deep dive of explaining why the game is quirky.
15:13 This is actually standard procedure for filtering out what would otherwise default to turbo fire, it's just that they were using it to do what would normally be handled by the game's gravity mechanics and/or checking to see if the player is on the ground. It's also odd for it to filter ALL button presses instead of a specific one.
8:53 The star wars game you showed was made by beam software, the same guys who made back to the future games for the nes. I don't think these guys were the ones who did the job, I believe it was actually sculptured software, which was the company that developed Star wars: Empire Strikes Back. I read somewhere that they had sourced their development kits from them and probably were trained by them as well.
I remember hearing (on the bootleg NES wiki or one of it's web 1.0 ancestors) that the number of games was solely down to an existing bootleg famicom multicart and that even some menu assets and code still remain from it. (Yup, Supervision 52-in-1 apparently) I still really want someone to deep dive into the insanity that was going to be Active Enterprises' Action Game Master. Like, what it would take to actually combine all the 8/16 bit systems together (WITH A SCREEN) into a semi-portable monstrosity...in the early 90's!
I feel like the Cheetahmen had potential. Like, had Active Enterprises just abandoned Action 52 and instead focused all their time and efforts on the Cheetahmen, then we could've gotten a great Ninja Turtles type franchise among the ranks of games like Battletoads. For this reason, I kinda wanna make my own Cheetahmen fan game that's actually well designed and maybe even sell it (I can make some decent sidescrollers in Clickteam Fusion), but I don't know for certain if the cheetahmen are public domain now and I cant find anything online about it. All I know is that I don't wanna slave away making a game just to put it out for free.
I have never written assembly, but... That looks like a classic case of doing "if-else if-else" groups, there are three consecutive conditions, where you should just do "if" on all of them separately. Simultaneous left and right might need some extra logic to stop simultaneous function calls, but otherwise it seems doable.
On Mario Bros 2600, if you continue to hold the jump button long after a jump, It keeps you locked to the floor and cant move left or right. So that may be a 1 button at a time game as well but doesnt get in the way, I just noticed by chance one day
There was a lot of plagiarism with Action 52 as well. They stole the graphics of the intro from Microsoft clip art, the rap music was used wo permission, the menu was taken from a 52 in 1 pirate game, the game music was taken from an Atari ST program, and there is someone online claiming that Perri came to his school and took his idea of Cheetahmen
One thing to keep in mind that back at this time, sampling was pretty common. Lot's of music used samples from other artists. I may be misremembering but we didn't feel a concern with such a short sample of It Takes Two in the intro. The Cheetah roar was actually a sample from the movie Cat People that was then modified a bit.
It's super cool to see this because after watching some of your other videos I ended up trying to dig into Action 52 myself and found the same details regarding Ooze's awful input. Trying to fix up Action 52 does seem like it'd be a super fun project but unfortunately I only barely figured out the input code and while I did try to figure out a way to fix the input (at least in Ooze) it was too much for the limited knowledge I have.
I actually really like attacking midair temporarily removing gravity. It makes the character feel more powerful to me. "My attacks are so strong not even gravity can stop me."
6502 assembly/assembler is so awesome. Such a different experience to program in. Gives you an experience with totally different challenges than when you program in Python or C++ . The limitations of it is part of the charm and challenge. Sometimes a rusty old bicycle can be as fun as a new high tech one.
Your comment in the beginning about the parts of games besides gameplay really struck a chord with me to where I immediately subbed after hearing it. I love learning about this stuff and enjoy playing even terrible games for the sake of appreciating them for what they are. There's a type of craftsmanship in these games of that era. I'm looking forward to watching the rest of the channel!
It's pretty obvious that Nintendo didn't usually bother worrying about their art being squashed. Logos often only resemble the one on the box when played in "Pixel Perfect" mode. You can also see how Kirby was meant to be round in the original Game Boy games, only to get squashed on NES and Super NES. The one time I saw them put in effort was for Zebes in Super Metroid. It was probably due the massive size of the image. The bigger the image, the more obvious there's something wrong with the aspect ratio.
After calling this game a "miracle" -- you had me expecting you were about to fix 90% of this game's problems (its controls) with one game genie code. Way to "subvert expectations," my friend -- Definitely worthy of the Star Wars reference. ;)
Impressed the man with a Tetris game on the Amiga. So a much smaller game on an entirely different machine. He might have had better luck with experienced C64 or Atari 8 bit developers.
13:38 "If I had to describe the look and feel of it I would describe the shape as a ladder attached to a roller coaster. " I think we call that a slide (Great vid!)
there is an EXTREMELY bizarre glitch in level 3 of game 33 "lollipops" where the music i think is getting overwritten by what's happening in the game? like what they do in pokemon and ocarina of time speedruns? arbitrary code execution or something? because it is never the same song and it is a complete and utter mess. my favorite example is from Bikdiponabus's lets play of this game on part 5 at 52:16 then compare that to other videos of level 3, as well as videos of just the theme itself, which was probably recorded with no input from the player. or another episode focused on cheetah men. as a code illiterate person, i would love to see explanations for the stranger things like how one of the bosses may disappear, soft locking the game. how there is a life bar for some levels but not others, as well as the jump controls being different. why you can die off the top of the screen(also on some stages but not others).
I hate how so many companies give their workers extremely short deadlines. This is obviously a very extreme example, but it's still bad in many other projects, especially in high-scope AAA projects.
More like why developers sign contracts they know they can't fulfill with companies well known for crunch. And if they're not signing contracts or reading between the lines, then it's basically their fault.
I vaguely remember from the AVGN videos that there is a boss in the Cheetahman game that just won't spawn, preventing you from finishing the game; as well as a (seemingly) randomly appearing glitch that starts you off _after_ that boss fight when booting the game sometimes. It would be interesting to get some insight into that - among all the other curiosities this game's data might hide.
that one is cheetahmen 2. If I remember right, the game doesn't check to see if you've killed the boss and to pass you to the next level, so you're just stuck there, and the only way to access the next 2 levels is to glitch the game by constantly powering the console on and off.
What's funny is that I remember that there were some multicart games like those (Put number here)-in-1, where you had the same game with some hacked graphics or slight hacked gameplay, like make player walk faster, just so they could put those high number in the case. Even as kid I'd notice it. But it's like a genius move for the programmers to do in that situation.
That explains a lot. I have a copy of the Action 52 ROM, and I was surprised to learn it is slightly bigger than the Sega Genesis port of Action 52. Yep. The Sega Genesis ROM, 16 bit console, better graphics... weighs in at 1.99 MB, so it's very slightly smaller than the NES rom. At the time, the biggest NES ROM I had seen was Big Bird's Hide and Speak, which comes in at 512k, which makes sense because that game has a lot of (surprisingly clear) voice samples. So I've been scratching my head over just... how... How could you bloat an NES game to 2 megabytes? Well this video provides some answers. I guess if your team of developers only have a week of training that's one explanation. To be honest I'm surprised they even had that. You probably figured this out but I found that using autofire for the jump button gives you a more normal jump in Ooze. You may also know that the game Bits and Pieces, game #42, has a jump similar to Cheetahmen's. Like they learned as they went along. I 've also heard that one of the many, many space shooter games (#18 Atmos quake) has... either a bug or an intentional feature where if you kill all the enemies the boss won't appear. Apparently the Boss' health is calculated from the health of all the enemies, so if you kill them all the boss simply doesn't appear. I think that's a nice mechanic. You destroyed the army and the boss had enough sense to not even bother taking you on. Probably a programming error, but a fortunate one.
I always assumed they had one fixed bank containing all the common routines (the engine) and each game swapped in a different bank for the other half. But I guess that would have made too much sense.
My guess is they were probably building up to that. As they create the games, they get a sense of the repeated tasks they need to perform and can turn that into a framework for all games to reuse. But they never got the chance to refactor the code and make this happen. Would have probably fixed a LOT of issues or at the very least would have lead to better consistency among the games. They needed an additional 3 months at the very least to have even a fighting chance of success.
This is like 52 different roms concatanated together. And a menu just running the different games. It was not written like one game. But 52 separate games with separate binaries. Lots of people have 50 million copies of unreal engine on their consoles becasue they 50 million different games all using the same engine.
As funny as it might sound to a non-programmer, I think it would honestly be easier to remake Action 52 from the ground up than try to fix what is there.
"We have a 100 day project, so we hired you 100 people to do the job in one day. At the end of the day, pack your things up, your fired." - Typical Corp Logic
I have to say this was a perfect choice for a BTC episode. I often swear by the principle that sometimes the best way to teach how to do something right you have to learn how to do it wrong. And I bet anyone getting into coding for the first time will be realising how much goes into something as seemingly simple as a jump. Thanks for this video. I can't get enough of these but I don't mind the wait. To expect you to dish them out faster would be to expect Action 52 quality.
You know, I've been thinking about this video since watching, and something struck me... While Action 52's development was a disaster, and it _shows,_ it's kind of baffling to think that it actually has a non-zero amount of good music? Like, the Cheetahmen theme has a startling amount of depth and is actually good(?!), but there's a few other themes scattered about that...really aren't all that awful, either? Ignoring stuff known to be plagiarized, of course. And I really can't wrap my head around _how._
Ever heard any of the remixes? There's a surprising amount of them from Japan, the original composer even commented on this one. ---> ruclips.net/video/Rw0laAURCiY/видео.html
Like most, I have heard of the game and considered it a ridiculous oddity and not much more. But hearing the backstory of it makes it insanely impressive!
I think it would be super interesting to see the original developers go back and finish the game properly. That way we could all see what could have been. The idea was actually quite brilliant, and if not for it being so absurdly rushed it could have been something truly unique and special.
Honestly, the whole code duplication thing is VERY similar to how the Sega CD handles games, where each "executable" has its own version of the code; Sonic CD is notable for this, with programming for the same objects being ever so slightly different (with Tidal Tempest in particular seemingly never fully updated to the other stages).
Of all the videos on this channel, this and the Monopoly one just blow my mind. Don´t take me wrong, I ABSOLUTELY love all the videos, but these two are fascinating at the amount of work required to make sense of what they are made of! Kudos to you, sir.
Given that my expectation would be that there is a selector program on top of a bunch of individual games that handle themselves it makes sense that there's copies of code to me. Is it optimal? No. Does it make writing each game easier? Yes.
I like to imagine that in ooze he had initially put jump lower down on the list of possible inputs to process. He encountered a bug where you couldn't jump without first letting go of left/right and decided that this is better.
I assume this was structured into 52+1 separate 32K banks. One segment would handle the bank-switching menu and the other banks would be separate, self-contained games, so there's no incentive to share code. Common code likely implies the same programmer, who would copy and modify to start the next game. Code common to all might imply a library of basic NES developer routines. The number 52 was chosen by the producer; the fact that the ROMs could likely handle another 11 games wasn't important. Once a game was completed, it was probably never looked at again. I even doubt they checked to make sure they weren't writing similar games. On the plus side, they didn't add another 52 games by changing the color palette, etc.
Action52 Jam:
52 Developers.
3 Months.
Each one given a game from the list to remake as they see fit within the timeframe.
Let's see what happens.
Can I join pls I can make game
Something like that happened a decade ago on TIGSource known as Action 52 Owns. It was never finished though the games that were finished range from average to amazing. Of course, the worst of them all are not nearly as bad as any of the Action 52 games, though several of them stands out for their quality. Meong, Sombreros, Non Human, Bubblegum Rosie (Renamed as Bubblegirl Rozy), Beeps and Blips, STREEMERZ, and Illuminator are definitely worth playing, with Non Human and Bubblegirl Rozy being made by the devs of Charles Barkley: Shut up and Jam Gaiden and the Momodora games respectively.
I think someone did this a couple years ago. I have the gamejam version of timewarp tickers somewhere on my PC
This is a brilliant idea
@@AboveEmAllProduction lol
Funny to think that the AVGN "safety pin joke" wasn't a joke at all. They were actually programming the hell out of their creativity.
Lmao okay but the dead cat?
@@kaom4713 You mean those in the skating game in the Genesis version?
That was done by a different development team.
@@danielblack6529 that explains everything
To the programmers credit, I bet most people won't be able to come close to creating this crap if you teach them NES development in one week.
If you give people a week's training, and then set them the task of creating 52 games in a three month span, if you're LUCKY, this is what you'll get.
Right? 1 week of training than pump out 52 games in 3 months? Kudos to them honestly.
The productivity is completely insane. It's definitely a miracle, even if it is a stinking, fetid miracle without purpose.
I am kind of amazed they didn't have a single "platformer" engine. Fitting 52 games into 1 NES cart with no shared library code to work from would be a hard task even with a sane deadline and more reasonable available resources. I think if I had been on the project, my first step would have been trying to make a decent engine that I could just plug sprite swaps with different maps into.
Yeah I don't think I could learn new hardware that quickly. It's a miracle they managed to make anything at all.
Yeah. Even if they probably knew most of the cpu instruction set beforehand. It's mostly a 6502 with some parts taken out and some extra. But the whole sound and graphics part would be new for them. The programmers did a good job indeed. Which makes it even sadder, because if they had more time some of the games could have been ok instead of terrible.
In 2010 a fan project called "Action 52 OWNS" was started with the goal to "remake all the games from Action 52 for the NES, and make them better, appealing, or at the very least playable." It didn't require the game to actually run on the NES though. 23 of the 52 games are "finished" but the project seems to have died years ago. The most well known one, STREEMERZ, was done by the host of the project, Mr. Podunkian, who's probably most well known for his Merry Gear Solid games.
Streemerz is Awesome! Mr. Podunkian works on Stardew Valley now =)
Could you imagine a bigger loser?
The OWNS version of Streemerz was remade for the NES, and it's still not nearly as bad as the original 90s version.
@@Controllerhead character development
Sombrero was awesome too, I highly recommend that one and Mash Man!
I'd happily watch 52 episodes of you breaking down all 52 games code.
I'd be happy with more exploration of this set of games, too, though maybe not a full 52 episodes :) Is there more code reuse, e.g. outside of input routines? What about audio, graphics, game logic?
@@lunasophia9002 To be fair it probably wouldn't be 52 episodes anyway, what with all the redundant code.
Ditto!
I would prefer if he went over games worth learning from where the programmers had time to do more clever stuff, but I'm sure any game he covers will be interesting.
So.... that would be 4 or 5 episodes?
The start of this video rings very true. Our team leader recently told my team "We don't have time to send you for professional development" on a framework I've never used (JSP, of all things, ugh). The sense of deadlines being more important than a job well done is all too real.
These kinds of people learned capitalism from their hammer and sickle wearing professors... then they're baffled when they go bankrupt.
Friend: "Hey - what do you use to develop software?"
Me: "Toothpicks and duct tape"
@@DisplacedGamers Hopes and Dreams
Did you ever find out why multiple games, including Alfredo, never seem to load? I've never seen footage of it before
@@DisplacedGamers We use a lot of Oracle products here so yeah toothpicks and duct tape is apt
There is a book called "Death March" by Ed Yourdon about software projects with ambitious deadlines. One of the cases he mentions is projects with deadlines so unrealistic that no one believes that they can be met. He says that this typically creates apathy among the people working on it.
The real red flag is that they assigned jump to the B button like savages.
Right? -- "B" is clearly for "BEATING things up" and "A" is definitely for "Air" (of the "Air Jordan" jump ability variety).
Same with _Doraemon 1_ for Game Boy.
@@awesomedata8973
Huh.
Grew up with it and yet never thought of it like that.
...Wasn't every single classic game's jump tied to the far button, and attack to the left button tho? Or am I misremembering the nes controller layout?
Edit: Oh no, it actually does go plus, start/select, B/A. Yeah fuck those B jump people, that's gross.
@Mr Wizard
Idk, on the scale... i think b jump people are better than up dpad jump people. If there was a NES dev dantes inferno the b jump people are in the frozen ice where their heads stick out, and the up dpad people are the ones frozen completely under the ice next to the devil.
Always wanted a breakdown of this after seeing AVGN
The Nerd certainly had a breakdown after seeing this flaming garbage of a game.
And you only had to wait like 8 years haha
Agreed.
AVGN: here's WHAT you don't do in a game.
Displaced Gamers: here's HOW you don't do it.
That's not always, then, is it?
Programming 52 games in three months leaves you with less than two days per game. And that's not counting having to switch focus to Cheetahmen halfway through. Ain't nobody having the time to optimize that.
I mean yes they were fast,but we need to consider that a lot of those games were copy paste with different graphics. In the end there are sure a lot less then 52 true different games on that cartridge.
@@Last_Resort991 Still though, they were novice programmers with 1 week's worth of training. Put me in that situation and you'll be lucky if I manage to get an NES to print "Hello world" lol
@@guy-sl3kr This is actually surprisingly difficult on the NES. You have to know a good chunk of the inner architecture to get to that point, and a good ways into the actual game development.
The bootup routine. Drawing the character tiles and storing them in the right spot. Palettes. Getting them onto the background. Good knowledge of 6502 assembly. A simple game loop. All has to be in place.
@@briankarcher8338 On second thought, I might need more than 3 months lol
With 3-4 programmers, that’s a week per programmer to make a game.
It sounds interesting to modify/fix the code, but I am also horrified at the idea of someone learning to code NES by looking at Action 52 code xD
Apparently... one only needs one week of training!
@@DisplacedGamers One week potentially could be enough. It was, after all, enough to get THIS far into it. I imagine I could get what I needed to know in a week, for NES. (Atari 2600, on the other hand, is black magic, and it's frankly amazing that so many games exist for it at all.) To be fair I'm already an experienced game developer, so it's more a question of mapping my experience onto a new platform's architecture and design. And these developers weren't total novices; they did, after all, have at least one game in their portfolio.
These kinds of errors are what you get when a dev either doesn't know what they're doing at all, or they just don't have enough time to do more than the first attempt that kind of works. If it wasn't for the timeline, I would have guessed the former. As it stands... Some combination, leaning more towards the latter. (In particular, while I could probably build an NES game after a week of training, I'm not sure I could build and debug a platformer engine in that time frame because my experience building platformers is limited. My last attempt is still buggy as heck and I haven't gotten back to it.)
these examples are important too; you learn how NOT to do something
@@dmas7749 l0l the nes is obselete anyway
@@liukang3545 that doesn't mean you can't learn stuff from it
besides, while a lot of games haven't aged well i still revisit some classics like Castlevania 1 & 3
In my 15+ years of professional programming experience I've never heard of any selection of code referred to as an "abyss" of code before now. Action 52 must really be that special.
Action 52 seems like a class of programming students turned in the first ever game assignment and the teacher just decided to publish them all on one cart.
Turns out I wasn't far off.
Reverse-engineerng Action 52 was really interesting. There are a lot of things that almost no one knows about and how the games were developed. The sound driver was borrowed from other developers as well.
Nah... it was from Sculptured Software and guess what? They copied the sound driver code 52 times for every single game.
@@MrNorbert1994 Sculptured software, couldn't recall the name. For some reason Daydreamin' Davy was all I was thinking about when I typed the previous statement and couldn't recall it was Sculptured Software for some reason.
@@MrNorbert1994 jesus christ
I for one would welcome additional episodes looking at this oddity of a game.
Yes!
Hell yeah.
I wonder if there are any "Ending Screens" to these unplayable games.
@@downscale There is a video on YT made by someone who tried to get as far as possible, a lot of games were impossible to beat. Also a polish guy made a video about those games with a lot of swearing, trying to explain what those games are even about and mocking them in cruelest way possible.
Given how much advertising this got at the time, I wonder if the ad budget was bigger than the dev budget. I mean, it even got animated TV spots.
Apparently the animated TV spots never aired, but I could be wrong here.
But... but..... it was supposed to be the next Teenage Mutant Ninja Turtles!!! -- It had anthropomorphic animal men! -- How could it have failed??
@@Nikku4211 Even just creating them wouldn't have been exactly cheap.
@@Nikku4211 animation is still really pricey, especially if it’s new intellectual property
When the "scope creep" re: CHEETAHMEN came up, someone on the dev team could have suggested/convinced the game producer to forgo ACTION 52 and just focus all their energy on getting CHEETAHMEN right; save the other prospective IPs/ACTION 52 crossover for a SNES game sequel if the CHEETAHMEN took off.
Now, I'm not a developer by any means; the above is what just makes sense from a workload standpoint. Do ONE thing *well*, then add more things.
Nintendo didn't attempt more than cameos in their franchise outings until 1999 w/SUPER SMASH BROS.; by then, all of their IPs were proven sellers, and you had high-XP devs like M. Sakurai and S. Iwata (president of HAL Labs, but a dev at heart) working on your N64 game.
Keep in mind: ACTION 52 was meant in part to be the franchise that would be a NINTENDO/SEGA killer--created by some dude w/an overly-jingoistic "USA! Bring gaming back to AMERICA w/AMERICAN-MADE games!" attitude. NINTENDO couldn't get away w/rushing shit into production (VIRTUAL BOY...), and this publisher w/no XP in game development though he'd create the ALL-AMERICAN anti-Mario franchise stable w/only three devs.
Hindsight-20/20: Said publisher should've just focused on THE CHEETAHMEN as IP, made that game properly polished, pitched the cartoon, and after that IP's a modest success, create new IPs as single games. But this publisher's mindset was a probable relic of (what created) the NORTH AMERICAN VIDEO GAME CRASH of 1983, where every company and corporation--including DOG FOOD COMPANIES--thought they could code a game for the ATARI 2600...foisting levels of unplayable shovelware into stores to the point where even WAL-MART wouldn't carry games on their shelves.
Just for the record, your videos have inspired me to dig into NES assembly and as a result of this, I have now created my first romhack. I fixed a terrible design flaw in the NES port of King's Quest V so that saved games can persist across a hard reset. All I had to do was NOP out a couple bytes in the ROM. If someone were to solder a battery onto their cartridge (and probably a diode too? Not sure what would be needed...) then the new save feature can be implemented with just two Game Genie codes.
Of course, if someone were to ever forget or typo the Game Genie codes, their save would still get erased. So really, it's one that should be enjoyed in an emulator or on a flash cart.
That's cool, but I played KQ 5 on the NES all the time as a kid and never had that bug. What exactly is it and did I just luck out? :)
@@SoulBlazer08 Reset button is a hard reset, button combo/menu option for a reset is a soft reset, usually.
9:00 as someone who's coded on games for the NES and SMS consoles, yeah we usually stored in game text as text ascii codes, so no real fault on Action 52 for doing the same.
Similarly, I bet somewhere they implemented the "fall damage" thing with a timer, so if you fall for X amount of frames you just die. This explains the "dying in mid-air" phenomenon.
That's exactly what happends! It ticks up from 0. Forcing it to stay as 0 lets you jump in mid air too. I did it in billy bob and got him to climb through the roof into the unprogrammed area of limbo lol
The fact that ANYTHING worked in this nightmare of a game compilation is a miracle. One week of programming classes is not enough for proper learning of any hardware.
To be fair, it was one week of programming on the NES specifically. I took my first computer science class in 8th grade (1982-1983) and really enjoyed it so I continued to program as a hobby for years. When this project started, I already knew how to write simple assembly language programs for the Amiga. it was a different processor than the 6502 but most of the basic concepts where the same.
Fortunately, the hardware on the NES was not very complex so there wasn't much to learn. :)
Storing text in direct ASCII encoding in the ROM is actually very common in NES games. That by itself doesn't mean much. Gotta take a look at the text reading code to see if it's the same accross these games.
I almost cut that part after doing research into other games. I added that "this might be common..." slide and then started seeing it in a lot of other places.
@@DisplacedGamers It's very good video as usual! Fixing the controls in these games is something that can be done in a couple of hours, just need to find some free space in the ROM to jump the program counter to that area, add the new code and then jump back. The real question is, is that worth the trouble...
Not just NES, my first Hex edit was the intro for Sonic 3D on the MD/Gens going purely by the readable text.
I suppose your mileage may vary. I'd seen so few (S)NES games use plain ASCII, I was pretty surprised to see it in Donkey Kong Country!
@@DisplacedGamers If you aren't going to compress the text, then it can be quite practical to store it in regular ASCII. In most cases you probably lose nothing while keeping the text easy to maintain and alter.
This video got me interested in screwing with it in an emulator, I found a tonne of variables in ram are actually shared between quite a few games such as enable autoscrolling, scroll speed, autoscroll direction, die in mid air counters that tick up, level numbers, lives and hitpoints.
Hitpoints being interesting as some of the games instant kill you on impact, but modding this value lets you survive multiple hits like the other games.
Bubblegum rossie is especially interesting, level 2 is a car level but level 1 is unbeatable due to a platform thats too high. Either way if you beat level using Y coordinate mods in the ram viewer you can make it, but if you fail level two and lose all your lives, you will notice it will not actually reset the state properly and level one will be a car level and glitch autoscroll vertically. You die on glitched tiles unless you make a cheat in the emulator for infinite hitpoints.
I tried resetting the driving/platform state in the ram viewer and after a while I managed to get the bubblegum sprite to turn into the car while retaining the rest of the platformer physics and scrolling. Neato lol
Another interesting game was billy bob, I forced the "midair counter" to 00 so I don't die in mid air during the game, but doing that also made every platformer in action 52 let you jump multiple times in the air.
So I kept hopping in air in billy bob and he grabbed the damn roof and climbs into this glitch tile world.
What an experiment lmao
Good old copy-and-paste programming. It's nice to know that this practice has a rich history, as well as the common bugs it creates. Like a bug getting fixed in one copy but not propagated to the others.
Never forget the y2k problem was known since the late 40s, and when it happened they just patched it until 2020 and stuff broke anyways lmao
Humans are neither that creative nor that forward thinking.
I said it once
I said it twice
I’ll say it once again
This Chanel is horrendously underrated
I agree with you!
underrated for a barely scratching the surface look at some 6502 assembly?
@@vinesthemonkey barely scratching - I see
@@press_pause2236 surely if you know of this channel you've watched Retro Game Mechanics Explained by dotsarecool. His work is an example of really digging and understanding deeply.
Have you beaten all 3 levels of Lollipop? The game loops, but the music gets all screwy and it never fixes itself. I can only assume the sound driver somehow gets into garbage as song data. That would be an interesting short dive I bet.
Most A52 games loop. There were a bunch of guys doing full 2-hour reviews of this dumpster fire a few years ago (well, maybe more than a few, more like 10-12) and they were making sure they 'completed' each game if it was possible. And in most cases the game would just send you back to level 1, with whatever score you managed to get. And in remaining cases they would just kick you back to selection menu instantly, without any warning.
These games had very random 'endings', such as Sharks requiring you to kill 94 sharks and the falling condom (uhh... meteor) game requiring about 300 meteors shot down.
To fix the movement code you need to treat left and right as mutually exclusive, but jump is treated separately. So you look at the left and right inputs, process one or the other, then look at the jump input, process it, look at the weapon input, process it. So rather than a big select/case type statement, it's discrete if...then...else statements for left+right, jump, fire.
It doesn't matter whether left and right are mutually exclusive in software, because the NES controller physically prevents left+right presses anyway.
@@groszak1 yeah, but it's still an actual usable button combination. just because you can't do it without taking the controller apart, it doesn't mean you can't do it - ive seen a few Nintendo titles that straight up crash when you press← and →at the same time
@@dapperbrick7516 Yeah, there are examples even in first-party games: Zelda II freaks out if you hold < and > at the same time and Super Mario Bros. 2 USA will make you climb super fast if you hold /\ and \/ at the same time. So it is a thing that happens if you don't account for it.
looks like they did just that for cheetahmen,
I think he already had an idea on how to do it, but after looking through the banks myself, I don't blame him for not trying to move it to a different area. What appears to constitute a lot of the non-code in that ROM may likely be data. Besides, there's no need to redo the code entirely. Both halves of the button checks can be merged together by removing the addresses that handle buttons individually. This opens at least 20 bytes, which is more than enough to let jumping work from that part of the subroutine. Afterwards, since the game already prioritizes right over left, you just alter the byte it checks to do jumps to make it something impossible to do on a controller like $FF. I tried to reorder the addresses to remove the third loop, but it freaks the game out.
The music code that Action 52 uses is the exact same music code that's found in the Sculptured Software games. Monopoly and Day Dreamin' Davey are using the exact same code as Action 52 to play music. In Monopoly's title screen, you can ever hear the lead instrument stop playing, and the accompaniment repeats. Many Action 52 games have music that does this as well.
i think it’d be quite hard for new programmers to use shared routines because of the bank switching. You can’t just jump to a routine in a different bank as the bank has to be swapped in first, and swapped out when the routine ends. Much quicker and easier to copy/paste the code and isolate all the games from each other.
Maybe some of the games could've be split between a shared "engine" and the map/graphics? Or the games could've been "unpacked" from a ROM into a RAM chip on the cart?
It feels like the input subroutine for platforming was designed to be flexible so that you could use it with multiple games and restrict what actions are available as well as point to the appropriate subroutines for handling those actions. The copy/paste take may have been an instance of feeling pressure of development in addition to potentially needing to separate the banks.
They may have ultimately consolidated common routines to help streamline the code if they had had the time. Perhaps using 8K of cart RAM would have allowed them to load common routines from one common bank and then switch to the game-appropriate bank for game execution.
Goodness. Who knows how different things could have been.
Oh... just saw that marsilies said the same thing about using a RAM chip on the cart.
@@marsilies It could all have been done with more shared code in bank switching, but that's well beyond the scope of what the Action 52 team had the opportunity to do.
All endeavors, whether creative or not, usually are limited by the following maxim:
"Good, fast, cheap: Choose two."
Action 52 was fast, and it was cheap. It wasn't good (quality-wise) and the code was also not good. Granted, there's many dimensions to something being "good". For example, a game could be great looking and great to play but the actual code could be atrocious, but that's not the case here.
Llike Displaced Gamers said, this is not the developers' fault. If Action 52 was meant to be Good and Cheap (cheap to develop), then it would've taken a lot longer to make. If it was meant to be Good and Fast (fast to develop), it would have needed a bigger development budget.
If there's enough ROM space, why complicate things?
I’m guessing all the games were worked on in parallel by different devs passing useful routines to each other, and only combined into a bank switched cart at the end of the process, I’d guess it’s only the menu that does any kind of calls to the mapper to switch banks, but I haven’t looked at the code
Back when I was still in high school, taking a game development class, I had been tempted to remake Action 52 in GameMaker Studio, as a way of learning the program more and as a sort of challenge. I never did, it was too daunting of a task and programming confuses me.
The idea of someone attempting to recreate all 52 games and trying to make them all unique and playable within the limitations of the actual NES code and cartridge is just terrifying to me. If anyone ever did and managed to do it at least somewhat decently, they would be a god. I couldn't even fathom the effort that would take.
Thanks for the breakdown. Excellent content as always.
4 guys, 3 months. Really puts it into perspective. Consider Howard Scott Warshaw, who was saddled with the ET project. He had even less time, and made some of the best games on the 2600 before that. Give these guys only half the 52 games to make, it would still be a mess.
Edit: Maybe if they solely focused on Cheetahmen, it would have had a chance to be at least mediocre.
There was a big collaboration project that somebody tried to start around 10 years ago for 52 different developers to make each of the action 52 games good (just in flash, not on a NES). The Streemerz remake is the only one I know that got finished and released, and it was really good.
7:48 I used that same technique when I was making a fan translation of Rockman Battle and Fighters! It just kinda came naturally to me when I saw the text characters were uncompressed in the rom. I overwrote them with hex codes to find out what strings of characters were what, and eventually replaced the hex codes with ansi characters. Made it easier to change and repoint text.
9:49 The need for a game to have text is going to be known fairly early on, and this sort of routine is about as simple as means of achieving it as can be imagined.
Infact, I think the NES tile mapper is just a modified character generator. In a sense this is exactly what it was originally for.
I'm honestly amazed they managed this much with only one week of training. That's barely enough to even get all the graphics data done, much less code up an input handler that works. It's surprising that most of these games boot and have non-garbage assets.
But they don't and they do.
I never realised how the artwork looks stretched, with a comparison it looks super wide on the NES, but totally perfect in 13H mode.
It sounds like the boss heard the stories of how quickly Atari 2600 ports got done and assumed his team could do NES games in a short time like that. Nobody told him those crap ports are what caused the videogame crash.
That Star Wars game was the wrong one, it was developed by Beam Software, an Australian company. However, the game based on Empire Strikes back was developed by Sculptured Software, from Salt Lake City.
I'm pretty sure they also used their sound engine in some way. Either way, I don't know how Nintendo let this fly as Sculptured Software was an official Nintendo licensee (who, coincidentally enough, made that Monopoly game that ahowed up in the size comparison)
Having learned the story behind this project, I'm actually impressed as it's basically a miracle they even managed to get as far as they did
My NTSC Elite prototype that runs on a real NES has ASCII text. The intro scrolls says “Somebody presents…” because it was never picked up by a publisher but you can change it to whatever you want and it will be reflected in the game.
…of course, these are translated to wireframe graphics and not your usual tiles.
Well, I guess the wireframe graphics are somehow made of tiles too. Perhaps Elite is a good one to look at next? I was getting ready to sell it after getting hit with an EF4 tornado but I had always hoped to look at it deeper with someone who knows what they are doing.
My prototype is very unfinished compared to the final PAL release. The UI is extremely awkward and there is no music, though the music toggle is there. I do wonder if it can be finished by combining the unreleased NTSC code with the PAL version.
Mine is different from the “NTSC” version they made available online. That one does not run on a real NTSC NES and says “Emulator version” in the opening scroll.
Do you want to know something crazy? The cheetahmen creator and composer saw this video and it's on his "favorites" playlist. His channel name is Zentanith.
The programmer does too and he regularly comes back to read news comments ;)
Ooze's jump mechanics can be described as a ladder and bowling ball roller (it starts straight up to angle the bowling ball and rolls downward like a silde; it's mainly for younger children who have trouble tossing even a 5lb bowling ball so the ball at least tries to stay straight for a strike).
I've used a similar approach whenever needing to display text on anything I've programmed. I've always thought translating ASCII to bitmaps was a fairly standard approach. I also implement some of the other codes as control codes for linefeeds, carriage returns, clear screen, change color, goto char location, etc.
"Deadlines and scope creep." Oh, that hit hard. I still get chills....
The main thing I've been wondering about is Level 3 of Lollypop - about the glitchy music there, I've always wondered if it happens because the game tries to read Music data from the Graphics data by mistake.
it's reading from ram i think
3 months! Holy shit, thats insane
I've been a developer for the last 18 years or so and was just thinking this the other day, I completely see what you're saying in the beginning about non developers expectations. It is incredible how the expectations have gotten so high, not just graphics and gameplay perfection but the storyline and fun factor and everything else, plus being bug free! I have been working on a game i started back in 2009 and has been started from the ground up 3 or 4 times as technology has changed... i have spent the last 6 months (all day everyday) just putting the engine and event system together, then another 2 months refining it and building the first couple of level areas and a few enemies.. then the menu systems.. inventory, items... Man.. everything takes so much time. But i full well know that even if i spent another 5 years developing this game and released it on steam or something, it would just fall by the way side as yet another indie game that isn't perfect by any stretch of the imagination. Anyway.. not sure why im saying this really, something you said just hit me hard lol!
I really, really enjoyed this one! Ever since watching the AVGN video that covered the game I've wondered about some of the background to the game and what was going on under the hood. I'd definitely be interested in a more in-depth video on the subject, but maybe not an entire *52* episodes.
As someone who knows nothing about programming let along NES programming. this was very informative and i like the deep dive of explaining why the game is quirky.
15:13
This is actually standard procedure for filtering out what would otherwise default to turbo fire, it's just that they were using it to do what would normally be handled by the game's gravity mechanics and/or checking to see if the player is on the ground. It's also odd for it to filter ALL button presses instead of a specific one.
8:53 The star wars game you showed was made by beam software, the same guys who made back to the future games for the nes. I don't think these guys were the ones who did the job, I believe it was actually sculptured software, which was the company that developed Star wars: Empire Strikes Back. I read somewhere that they had sourced their development kits from them and probably were trained by them as well.
I remember hearing (on the bootleg NES wiki or one of it's web 1.0 ancestors) that the number of games was solely down to an existing bootleg famicom multicart and that even some menu assets and code still remain from it.
(Yup, Supervision 52-in-1 apparently)
I still really want someone to deep dive into the insanity that was going to be Active Enterprises' Action Game Master. Like, what it would take to actually combine all the 8/16 bit systems together (WITH A SCREEN) into a semi-portable monstrosity...in the early 90's!
Thank you for saying "4 to 3" instead of "4 by 3" for the aspect ratio. It drives me insane when people say 4 by 3 or 16 by 9.
I feel like the Cheetahmen had potential. Like, had Active Enterprises just abandoned Action 52 and instead focused all their time and efforts on the Cheetahmen, then we could've gotten a great Ninja Turtles type franchise among the ranks of games like Battletoads. For this reason, I kinda wanna make my own Cheetahmen fan game that's actually well designed and maybe even sell it (I can make some decent sidescrollers in Clickteam Fusion), but I don't know for certain if the cheetahmen are public domain now and I cant find anything online about it. All I know is that I don't wanna slave away making a game just to put it out for free.
I think Cheetahmen remains trademarked still. They attempted to trademark Cygore and Doctor Morbis but failed.
I have never written assembly, but...
That looks like a classic case of doing "if-else if-else" groups, there are three consecutive conditions, where you should just do "if" on all of them separately.
Simultaneous left and right might need some extra logic to stop simultaneous function calls, but otherwise it seems doable.
I'd love extra episodes on this! Cheetah Man in particular since they wanted that to be the poster child.
On Mario Bros 2600, if you continue to hold the jump button long after a jump, It keeps you locked to the floor and cant move left or right. So that may be a 1 button at a time game as well but doesnt get in the way, I just noticed by chance one day
There was a lot of plagiarism with Action 52 as well. They stole the graphics of the intro from Microsoft clip art, the rap music was used wo permission, the menu was taken from a 52 in 1 pirate game, the game music was taken from an Atari ST program, and there is someone online claiming that Perri came to his school and took his idea of Cheetahmen
One thing to keep in mind that back at this time, sampling was pretty common. Lot's of music used samples from other artists. I may be misremembering but we didn't feel a concern with such a short sample of It Takes Two in the intro. The Cheetah roar was actually a sample from the movie Cat People that was then modified a bit.
It's super cool to see this because after watching some of your other videos I ended up trying to dig into Action 52 myself and found the same details regarding Ooze's awful input. Trying to fix up Action 52 does seem like it'd be a super fun project but unfortunately I only barely figured out the input code and while I did try to figure out a way to fix the input (at least in Ooze) it was too much for the limited knowledge I have.
Even then, by the time you're able to fix the input issues, you'd think that you're might as well make a new NES game from scratch.
Please more about this ...interesting game. Always been interested in the background of all the issues in it
I actually really like attacking midair temporarily removing gravity. It makes the character feel more powerful to me. "My attacks are so strong not even gravity can stop me."
6502 assembly/assembler is so awesome. Such a different experience to program in. Gives you an experience with totally different challenges than when you program in Python or C++ . The limitations of it is part of the charm and challenge. Sometimes a rusty old bicycle can be as fun as a new high tech one.
Your comment in the beginning about the parts of games besides gameplay really struck a chord with me to where I immediately subbed after hearing it. I love learning about this stuff and enjoy playing even terrible games for the sake of appreciating them for what they are. There's a type of craftsmanship in these games of that era. I'm looking forward to watching the rest of the channel!
Thanks, Steven!
It's pretty obvious that Nintendo didn't usually bother worrying about their art being squashed. Logos often only resemble the one on the box when played in "Pixel Perfect" mode. You can also see how Kirby was meant to be round in the original Game Boy games, only to get squashed on NES and Super NES. The one time I saw them put in effort was for Zebes in Super Metroid. It was probably due the massive size of the image. The bigger the image, the more obvious there's something wrong with the aspect ratio.
Thanks for giving some context on the absurd conditions under which Action 52 was developed.
After calling this game a "miracle" -- you had me expecting you were about to fix 90% of this game's problems (its controls) with one game genie code.
Way to "subvert expectations," my friend -- Definitely worthy of the Star Wars reference. ;)
Impressed the man with a Tetris game on the Amiga. So a much smaller game on an entirely different machine. He might have had better luck with experienced C64 or Atari 8 bit developers.
This game makes a Neo Geo owner feel much better about paying $200 for a game.
I mean the Neo Geo system was literally just the arcade machine so 200$ back then wasn't that bad, considering the target.
I'd love to see someone try to program a "fixed" Action 52 cartridge. It's like a challenge of, "CAN this be done??"
13:38 "If I had to describe the look and feel of it I would describe the shape as a ladder attached to a roller coaster. "
I think we call that a slide
(Great vid!)
I own action 52 on a cart. Still works. When I used to play this game as a child I never understood why some of the games felt empty
there is an EXTREMELY bizarre glitch in level 3 of game 33 "lollipops" where the music i think is getting overwritten by what's happening in the game? like what they do in pokemon and ocarina of time speedruns? arbitrary code execution or something? because it is never the same song and it is a complete and utter mess.
my favorite example is from Bikdiponabus's lets play of this game on part 5 at 52:16
then compare that to other videos of level 3, as well as videos of just the theme itself, which was probably recorded with no input from the player.
or another episode focused on cheetah men. as a code illiterate person, i would love to see explanations for the stranger things like how one of the bosses may disappear, soft locking the game. how there is a life bar for some levels but not others, as well as the jump controls being different. why you can die off the top of the screen(also on some stages but not others).
Regarding Cheetahmen, every single level in the game is virtually its own separate game in a way.
I hate how so many companies give their workers extremely short deadlines.
This is obviously a very extreme example, but it's still bad in many other projects, especially in high-scope AAA projects.
More like why developers sign contracts they know they can't fulfill with companies well known for crunch.
And if they're not signing contracts or reading between the lines, then it's basically their fault.
@@lasarousiblaming workers for management problems isn't very cash money of you
I vaguely remember from the AVGN videos that there is a boss in the Cheetahman game that just won't spawn, preventing you from finishing the game; as well as a (seemingly) randomly appearing glitch that starts you off _after_ that boss fight when booting the game sometimes.
It would be interesting to get some insight into that - among all the other curiosities this game's data might hide.
that one is cheetahmen 2. If I remember right, the game doesn't check to see if you've killed the boss and to pass you to the next level, so you're just stuck there, and the only way to access the next 2 levels is to glitch the game by constantly powering the console on and off.
Great video as usual! Hope there'll be more episodes about Action 52 in the future!
D-Paint? Well shit. I used to fuck around in that program all the time when I was a kid. The context makes so much more sense now.
What's funny is that I remember that there were some multicart games like those (Put number here)-in-1, where you had the same game with some hacked graphics or slight hacked gameplay, like make player walk faster, just so they could put those high number in the case. Even as kid I'd notice it. But it's like a genius move for the programmers to do in that situation.
That explains a lot. I have a copy of the Action 52 ROM, and I was surprised to learn it is slightly bigger than the Sega Genesis port of Action 52. Yep. The Sega Genesis ROM, 16 bit console, better graphics... weighs in at 1.99 MB, so it's very slightly smaller than the NES rom.
At the time, the biggest NES ROM I had seen was Big Bird's Hide and Speak, which comes in at 512k, which makes sense because that game has a lot of (surprisingly clear) voice samples.
So I've been scratching my head over just... how... How could you bloat an NES game to 2 megabytes? Well this video provides some answers. I guess if your team of developers only have a week of training that's one explanation. To be honest I'm surprised they even had that.
You probably figured this out but I found that using autofire for the jump button gives you a more normal jump in Ooze.
You may also know that the game Bits and Pieces, game #42, has a jump similar to Cheetahmen's. Like they learned as they went along.
I 've also heard that one of the many, many space shooter games (#18 Atmos quake) has... either a bug or an intentional feature where if you kill all the enemies the boss won't appear. Apparently the Boss' health is calculated from the health of all the enemies, so if you kill them all the boss simply doesn't appear. I think that's a nice mechanic. You destroyed the army and the boss had enough sense to not even bother taking you on.
Probably a programming error, but a fortunate one.
The space shooter game is in fact Megalonia.
I always assumed they had one fixed bank containing all the common routines (the engine) and each game swapped in a different bank for the other half. But I guess that would have made too much sense.
My guess is they were probably building up to that. As they create the games, they get a sense of the repeated tasks they need to perform and can turn that into a framework for all games to reuse. But they never got the chance to refactor the code and make this happen. Would have probably fixed a LOT of issues or at the very least would have lead to better consistency among the games. They needed an additional 3 months at the very least to have even a fighting chance of success.
Apparently, there is a bunch of unused graphics in the rom, suggesting this compilation originally was intended to have 60 games.
cheetah mens theme is FIRE good job whoever made it!
This is like 52 different roms concatanated together. And a menu just running the different games. It was not written like one game. But 52 separate games with separate binaries. Lots of people have 50 million copies of unreal engine on their consoles becasue they 50 million different games all using the same engine.
Wow. I just found your channel. Incredible content. Phenomenal pacing, solid wit, greatly informative, and well-assembled. Please never stop.
As funny as it might sound to a non-programmer, I think it would honestly be easier to remake Action 52 from the ground up than try to fix what is there.
I'm holding out for a 4K remaster of action 52 with Ray traced graphics.
"We have a 100 day project, so we hired you 100 people to do the job in one day. At the end of the day, pack your things up, your fired." - Typical Corp Logic
Don't think of it as a font, think of it as a
I have to say this was a perfect choice for a BTC episode. I often swear by the principle that sometimes the best way to teach how to do something right you have to learn how to do it wrong. And I bet anyone getting into coding for the first time will be realising how much goes into something as seemingly simple as a jump.
Thanks for this video. I can't get enough of these but I don't mind the wait. To expect you to dish them out faster would be to expect Action 52 quality.
You know, I've been thinking about this video since watching, and something struck me... While Action 52's development was a disaster, and it _shows,_ it's kind of baffling to think that it actually has a non-zero amount of good music? Like, the Cheetahmen theme has a startling amount of depth and is actually good(?!), but there's a few other themes scattered about that...really aren't all that awful, either? Ignoring stuff known to be plagiarized, of course. And I really can't wrap my head around _how._
Ever heard any of the remixes? There's a surprising amount of them from Japan, the original composer even commented on this one. ---> ruclips.net/video/Rw0laAURCiY/видео.html
Like most, I have heard of the game and considered it a ridiculous oddity and not much more. But hearing the backstory of it makes it insanely impressive!
I think it would be super interesting to see the original developers go back and finish the game properly. That way we could all see what could have been. The idea was actually quite brilliant, and if not for it being so absurdly rushed it could have been something truly unique and special.
Honestly, the whole code duplication thing is VERY similar to how the Sega CD handles games, where each "executable" has its own version of the code; Sonic CD is notable for this, with programming for the same objects being ever so slightly different (with Tidal Tempest in particular seemingly never fully updated to the other stages).
Of all the videos on this channel, this and the Monopoly one just blow my mind. Don´t take me wrong, I ABSOLUTELY love all the videos, but these two are fascinating at the amount of work required to make sense of what they are made of! Kudos to you, sir.
What? Action 52 on Displaced Gamers? And it's Friday? WHERE'S MY POPCORN WHEN I NEED IT
Given that my expectation would be that there is a selector program on top of a bunch of individual games that handle themselves it makes sense that there's copies of code to me.
Is it optimal? No. Does it make writing each game easier? Yes.
Action 52 is the 1991 equivalent of a friend saying "Hey you know how to program, I have this awesome idea for an app"
Really good video! I love deep analysis of these things
I like to imagine that in ooze he had initially put jump lower down on the list of possible inputs to process. He encountered a bug where you couldn't jump without first letting go of left/right and decided that this is better.
I assume this was structured into 52+1 separate 32K banks. One segment would handle the bank-switching menu and the other banks would be separate, self-contained games, so there's no incentive to share code. Common code likely implies the same programmer, who would copy and modify to start the next game. Code common to all might imply a library of basic NES developer routines.
The number 52 was chosen by the producer; the fact that the ROMs could likely handle another 11 games wasn't important.
Once a game was completed, it was probably never looked at again.
I even doubt they checked to make sure they weren't writing similar games.
On the plus side, they didn't add another 52 games by changing the color palette, etc.
Well. Stumbled upon this channel, and, even with very limited coding knowledge, I'm hooked. Great work!
My favorite games on Action 52 are Alien Beaver Tomato Fight and Alfred N The Fettuc.