@@Ryowhosakazaki In addition to what that other fellow said, it is reasonable to interpret the phrase "wise old man" as non-literal, as a common turn of phrase.
@@konayasai Some things, yes. But you don't notice code mistakes by playtesting, especially frame-perfect interactions that you don't even know were frame-perfect.
@@fernandobanda5734 even a blind monkey with cerebral palsy would know that setting the collision detection to a single pixel in the middle of the player’s feet is an idiotic decision. It’s not something that requires analysis to find out or know, it just need a basic programmer to do their job half decently.
I worked on the old MMORPG 'Fallen Earth' and it had the same problem up till release when we finally talked the 'designers' into removing the wind up for the jump. Some peoples children :|
I had a short but extremely fun stint playing Fallen Earth earlier this year and let me tell you, that explains SO MUCH! BTW, it's a fantastically janky hidden gem of an MMORPG though and worth giving a shot. Its also totally free now, not even cash shop.
The Miyamoto Principle: when the player presses the jump button, the character should jump. Sounds self evident until you compare Mario 64 with Tomb Raider, released around the same time. Or this game.
@@kg4boj Not by much, you'd have to do a "is it more than or equal to, but less than the right edge's X coordinate" and the inverse of that for the other side.
They could have fixed the prediction code by multiplying the increment by a variable that tracks which direction the player is holding. So, if the player is holding left, the predictions are multiplied by -1. If the player is holding right, it multiplies them by 1. If the player is not holding any direction, it multiplies them by 0. This means that if the player chooses not to hold any direction, then the predicted position would be the same as the actual resulting position.
This really makes me wonder if the same coding decisions exist in other platformers that exhibit "falling through platforms" behavior; such as The Wizard of Oz on SNES, or if this is more uniquely specific to The Terminator.
It's hard to say with certainty in every case without examining the code but about 90% of the time it's simply caused by poor platform map coordinates or landing box size and/or the player's platform detector coordinates being too narrow or in this case a single pixel which is a real novice game coder mistake. A cool workaround I learned lately is that what some games do is by delaying the ground detector after colliding with a floor coordinate by 4 or 5 frames like in the case of Donkey Kong Country where even though your tumbling jump from platform still counts and does that neat "air" jump that speed runners take advantage of. 😃
There's a PlayStation game call Phix the adventure (or something like that) that seems to show similar symptoms, including being able to seemingly partially clip into walls and confuse the graphics engine. One particular situation comes to mind where it is possible to fall into the space between a platform and a wall to your death, despite there not being any visible gap between them.
Building a platformer is a minefield of tiny decisions so if it’s someone’s first game and they’re just building these mechanics from first principles … yeah
I love your recent videos these last few months so so much. It feels so satisfying now with an adult with a decent understanding of code to be able to look at these breakdowns and understand *why* the issues that plagued the games featured on AGVN that I grew up watching, happen.
The original 2D Prince of Persia had completely different mechanics for vertical jumps and running jumps--maybe that's what the designers were going for? Definitely a case of the player character mechanics and the level designs being mismatched. Prince of Persia never made you jump between tiny ledges, or fight and platform at the same time. The 1992 Famicom game Moon Crystal has obviously Prince of Persia-inspired animation, including distinct vertical and running jump types, but jumping and landing are always instantaneous in that game.
The look of pure horror that I had while watching this was probably the same as what you had while discovering this. So, SO many bad decisions. I wonder if you've ever considered contacting some of the programmers for these and asking them if they knew why some of these decisions ended up in the final products. The likely answer though is probably "we had a few weeks to build this and the studio didn't budget enough for QA".
I assume that would be the case. As far as Radical Entertainment, they were a start-up at the time. The people that worked there basically had to get games out to recoup money invested. It could be they also felt rushed due to the fact the Super Nintendo was already out at the time. Lots of pressure.
Lazy math. Can’t be too difficult to Intersect a line with a box. Macros to use 8.8 fixed point throughout. Why even start a company if you don’t have any goals?
@@ArneChristianRosenfeldtI guarantee the guy who programmed this buggy stuff isn't the guy who founded the company, likely the low guy on the totem pole fresh out of college
I think part of the lesson here is to try to appreciate the hard work that goes into the games that got this stuff right! They probably worked and improved and fixed and improved and rewrote and tested, etc. Good stuff doesn't just happen on its own.
It's also important to consider _why_ things went wrong the way they did with games like this. It's impossible to know the story behind every one of these crappy games, but given what we know about the development of games like E.T. for the Atari 2600, I'm willing to bet these developers were set up for failure. Were they also bad or incompetent programmers? I'm inclined to think so. But that's not enough to create a train wreck as bad as The Terminator.
We get a peek about the skill level of the programmer here. This input/state lookup table is kind of advanced and even a bit clever. That may give us a fairly important peek into what went wrong: the programmer was not untalented, things like using a tile value for lives is weird but it avoids CPU cycles calculating the tile value. Even stuff like the look ahead, while bugged, represents a novel approach. What this suggests to me is that Terminator's flaws may come more directly from the developer under estimating (or intentionally inflating) the difficulty, as was common back then. It's perhaps less easy to appreciate now, but games like T2 on Gameboy can be completed in three minutes: it was not uncommon to make a game harder or more confusing purely to stretch out it's runtime. Couple this with some unintuitive behaviors like single pixel tile collision (which the developers would be aware of) and you have a game that's unexpectedly challenging for the wrong reasons in addition to challenging for more deterministic ones.
It's always interesting to see how many of these famously bad games are made all the worse by their coding choices, and by extension just how easily they can sometimes be improved with something as simple as a few GameGenie codes.
Between the last video and this one, I wrote my own first NES game for Ludum Dare, and... 1) much of what I've learned is through your Behind the Code series, so thank you!! and 2) these are so much more satisfying to read/follow now that I "know" 6502 assembly :D
Such a thought provoking video. It's almost like pin pointing where the game messed up and using game genie codes to course correct it from a disastrous game is some kind meta analogy of the movies plot. I also love how you recognised assembly code in the Terminators vision. I think James Cameron just threw anything remotely sciency and technical sounding to make the films feel legit, like the T800 processor chip being a superconductor at room temp. I picked up on that years later after learning to use NMR fir my science degrees.
Fantastic video as usual, love the really in depth analysis. I happen to speedrun this game and currently have the fastest known time. So I am intimately aware of all the platforming failures that this game has to offer. Even playing on emulator for practice was so inconsistent, there were so many jumps that seeming fail for no reason and it was a massive challenge to play through with (mostly) no mistakes. A few things: The "fake" landings where you appear to make it past the edge of a platform but then fall anyway is SO INFURIATING. Theres actually a moment in the run where that happens to me and I was able to react by jumping again before I fell. I taught myself to always spam the jump button on any sketchy landings in case I needed the second chance. Thanks so much for explaining why that shit happens. Ok, the single pixel landing detection???? That has to be a joke. But I'm not really surprised. Even your characters stance when standing up straight is so weird. His legs are just bent apart and its hard to tell where your "center" even is. Those tiny platforms at 6:30, at the end of level 1, were such a pain in the ass. Even a veteran gamer is going to have a hard time with it. Not only is it hard to tell where your center is, but the platforms are insanely small for no real reason. Theres not a single other part of the game like that. The landing lag... why even include it? Its so crazy how even though jumping is something you have to do so much in this game, it feels like a punishment. Makes you feel slow and weak.Would love for you to dive into why its possible to cancel landing lag with punches and kicks (only available to the player after level 1 and not including the driving levels). I know the video was about platforming mainly, but I wish you'd go into detail about maybe the later bosses and levels. They are so bizarre and dont follow any convention. Just a really rushed and broken mess of a game. Just one random tidbit: I learned from a TAS run that the enemy AI is designed to spawn a single enemy in front of you wherever you are facing. The screen has to have no other enemies, and you have to be facing that direction for about 1.5 seconds. This timer resets EVERY TIME you turn around. So you can cheese the game easily by constantly turning back for at least a single frame while running and it will cause enemies to never spawn at all. Hilarious.
@@XxRipperRooXx When I was really little, my family had an NES and a handful of games, most were very good like mario, zelda, megaman, kirby, etc. But we had some really shit ones like terminator. I had to revisit the game as an adult to finally finish it, and i got inspired to speedrun as a personal challenge. Every game, no matter how hard, has a strategy you can master. Basically I wanted to play the game like a pro in total spite of the glitchy challenges.
I love how sadistic it is to make the jumping box a single pixel despite the fact you already have the entire sprite's hitbox for damage programmed that you could easily have used for the platform detection.
They had to get a "working" movement system built, they built it. Single pixel clearly worked on whatever test levels they tested it on enough to say they hit their deadline to their manager. Next job, combat, attacks and collisions, they built it. A single pixel width hitbox would guarantee all attacks could be dodged simply by jumping no matter how early or late, so that had to be done correctly the first time. Someone designed the level designs, game went to qa, complaints were noted yet a solution to issues which could be chalked up to "player skill" were never developed or implemented, game made it out the door on deadline and the company made money. That's it.
I'm trying to patch something i want into a SNES game atm. I have someone else's partial bsnes+ debugger symbol notes and comments but it's still so hard. Yet again I am amazed at your clear disassembly and explanation of these games. Just wow dude.
As others have said, these recent videos have been so nostalgic while also cathartic. It's wonderful seeing games from my early days that caused so much grief get pulled apart, called out, and patched. What you're doing is great! I'd love to see you slowly progress through game platforms, getting more modern with each one, fixing some of the worst offenders of each platform as you go. Superman for N64 would be a wonderful thing to see you, somehow, try to make it less awful to interact with. I'd love to see super ghouls and ghost & contra III for the snes get looked at.
Older gamer here. To me these kinds of physics is what I always felt the games were designed to be like, though not as sharp as others, you learn to adapt. I don’t hate it, but it chips away at your patience. In the end, it’s very satisfying to beat these types of games. Though coming back to them way later with many “improvements” thanks to hacks and mods, it makes the game feel new and fresh and it gives you a sense of “this is how they intended it to be” which is nice too.
I love these videos where you fix old games because every game deserves a chance to shine. The bonus is how you explain how the game is programmed, giving an insight how the faults are created.
The insights you bring into how these old games worked is astounding. I learn a lot watching these. Your ability to debug these games written by somebody else is next level. Great job! Multi-frame bugs are hard to find.
I absolutely love these deep dives into broken or poorly-conceived mechanics. It's a satisfying vindication after all these years. And you present them so well, even I (with no programming knowledge) can follow them.
I feel like you could also have answered this video's titular question accurately by saying, "Because you jump with the B button and attack with the A button". It truly baffles me that anybody would make an NES platformer as late as 1992 where you don't press A to jump. Great video as always! I eat this stuff up. Deep dives into character controller code are my jam. I hope you'll do more and more of them!
You know, I wonder if there's any third-party NES controllers that allow swapping A and B with a switch or button macro or something. Feels like it'd be a good selling point for all those companies making retro gaming controllers.
@@nsf001-3 One of the reasons I made my earlier reply is that a while back, some company made a joystick for retro computers such as the Commodore 64, and it has a switch to make one of the buttons act as tilting the joystick up, because of how there's so many games for the classic microcomputers that did Up is Jump simply out of necessity (they only really supported a single button on the controller 99% of the time).
@@nsf001-3 Finally looked up that controller, it's one of Monster Joysticks', uh, joysticks. The ones they make for retro computers have a switch that when flipped makes the joystick not do anything when tilted up, and makes one of the buttons act as tilting the joystick up; completely solving the problem of "Up is Jump".
I've always been fascinated by games with double jump glitches. Wizards and Warriors on NES had a simple one where you could take a hit midair and use it to get a second jump, and looking back now it's probably something really similar like the game thinks the character is on the ground during the hit animation or something.
@@JohnSmith-fq3rg Honestly though, I'm actually fond of little glitches that don't actually break the game. It gives them personality I think. My all-time favorite glitches are things like the Minus World, where you can find entire areas of games that aren't even supposed to exist.
I love this channel. I love what you’re doing with these old games. It’s amazing to see the behind the scenes. It also makes me feel so much better about being frustrated playing these as a kid. The video you did on TMNT for the NES blew my mind. I knew that damn water level was messed up and it wasn’t my fault!
@@DisplacedGamersthanks for the reply. It’s nice to know you’re still reading comments. Whenever I see another video of yours drop I cannot click on the link fast enough. If you’re not a teacher, professor, trainer, or in a leadership role where ever you are then the world is seriously missing out. You have a gift. A real gift. I literally just sent one of your videos to my wife (a 2 year old video about NES audio coding) because she wanted to know how I know so much technical stuff about video games. Her response “this is what you watch for fun?” Yeah, this is what I watch for fun!
1:08 I guess the more things change, the more they stay the same. In the 80s/90s, cool looking computer code in the movies was unassembled 6502 Assembly. In the 20s, it's uncompiled C++.
The way the game determines how many lives the player has completely blew my mind. Instead of calculating the amount of lives and then looking up which graphic tile to render based on the result, it directly calculates which tile to render. And the real kicker is, I think I actually understand why they chose this method - saving processor cycles. This method basically skips the middle step, thus saving some processor time. That's an optimization trick that I definitely would have never thought of.
16:15 that reminds me of Double Dragon 3 on the NES. I saw lots of people complain about moves "just not working" even though "they did them right." I've thought about that a lot and wondered how it even happens. I've written enough janky game code that I know its possible, but sometimes it baffles me to think anyone actually released a game THAT bad. And yet, here we are...
Great video! As someone whose job includes teaching basic game programming to high school kids, it's nice to have stuff to show them - at least the ones that want a little more in-depth knowledge. I absolutely have students who'll gobble this up =)
17:13 wouldn't it be better to swap "Land yet?" with "Select"? Otherwise you'll still have the same dropped input if you try to change weapons during that one frame. Swapping "Land yet?" with "Select" would fix both jump and select.
Really enjoyed this video! I was always a big fan of the Terminator movies and rented this game back in the day. It was sooo frustrating and difficult. I clearly remember the issue of missing platform jumps too. I spent hours playing it getting nowhere. At least I know why now 😆
This game does not need a couple game genie codes, it needs an ipa to rewrite pretty sizable portions of the game's input and collision handling. I'd watch that video with popcorn, but I wonder if other people would have the attention span for what would wind up more a video on NES game architecture by example/counterexample. I wonder if this is the game to use if that kind of video is your goal though.
I feel like this game might be a good project for someone in the same way one might buy a house, gut it to the studs, and rebuild. One thing of note, however, is that this is a multi-genre game. The overhead driving stages in particular are... something else - no pun intended.
I remember that this was torn apart on an early episode of Angry Video game Nerd. He ran in to the max 6 lives after leaving the game on overnight rack up score.
I think this highlights one of the problems with ASM code... it's so verbose, and the syntax doesn't immediately give you context of what that code does, that it invites mistakes. For one, it's just easier to miss stuff. But two, it takes a lot more work to find something that needs to be changed, figure out how to fix it, and avoid breaking a dozen other things in the process. So, probably, there was a long laundry list of "we should fix this" items that someone looked at, felt their heart sink, and decided to just let it ride... :-)
I love specifically the single-pixel player collision. Ofcourse, with modern hindsight, we can easily say "yeah, don't do that, or if you do, at least make the hitboxes of the platforms bigger". But these kinds of lessons might not have been well known at that time, and have to be learn via mistakes. Today, we have games such as this to thank for not repeating this in modern games.
And yet if I had rented this game as a kid, I would have forced myself to play through it until I had to return it on Monday. Then 30 years later I would develop nostalgic feelings for it and convince myself that this game wasn’t bad
Sounds like me and Deadly Towers, except I had that game for a couple weeks - and actually beat it. Does it suck? Yeah. Do I have a weird nostalgia for it? Yep.
"terminator doesn't store the number of lives, but rather stores a tile" If that wasn't indicative of this studios programming practices, I don't know what is.
10 months late but I believe that saved like 8 bits of space by not having a serparate variable... which really isn't that impressive considering that 1 pixel platforming hitbox, but yay optimization!
Can I suggest you take a look into the code for the Double Dragon games or River City Ransom? I'd like your insight into DD's wonky jumps (and kaizo hell). Also RCR has some interesting 2.5D maths for collision checks.
Another fascinating video about some really dodgy collision detection and input handling. Amazing to realise that the Radical Entertainment that made this would later go on to make the amazing Simpsons Hit and Run. Food for thought, really.
once I took a class on x86 assembly & decided NEVER AGAIN. These videos are so insightful & approachable they make me want to relook ASM. Thanks, jerk! ❤❤
It's always interesting to see how some of these old games were. Makes you wonder how many people working on some of these had never made a game before?
@@james66666 yeah, I’m not trying to say these guys were idiots, but if you’d never made a game before, there’s just things that wouldn’t know the first time around.
@@james66666I imagine the resources did to some degree exist by 1992 though. The SNES was already out, Home console gaming was 7 years into it's massive rise
"Every game is a sandbox game when you can reprogram it" -- hah, true. That's how I "played" Doki Doki Literature Club. I went in almost blind - I just knew weird things happen, and when the 4th wall breaking started, it kind of irked me. I'm not sure why, but at the time I simply didn't care to play along with the game. So I said "oh, you wanna break the 4th wall? OK", unpacked the game files and just edited it to skip straight to the good ending. That was actually trivial since the game code was just plain python scripts in a zip file.
I'm sure if you interviewed the programmer who coded this game asked him what happened he'd probably come clean and say, "Yeah man my bad. This was one of my first titles while working for the company." lol 😃
When I learned about how some fighting games were programmed to read your button inputs and able to react instantly I was like "Hah hah, I knew the game was cheating."
The second I saw the pixel thing I knew you were pretty much going to feature everything the AVGN talked about and I know you're doing it with him in mind which I really appreciate. Watching you explain the issues in a way he couldn't because you dig into the game's code is really fascinating. I'd love to see you tackle Wizard of Oz for the SNES next if possible because it has similar issues of falling through platforms. Also I'd love to see a second video tackling on the whole random "6 max lives" issue and why the crouching mode even exists
Neat. Can't say I see too many people giving this kind of technical explanation. While I can't read the code instructions, the explanation filled in the gaps, I think.
It's wild to see that old games tended to use single pixel or few-pixel probes for collision detection rather than a box or line overlap test. I know the latter is more expensive, especially on early 80's 8-bit chips, but surely couldn't have been *that* expensive if done carefully.
I know Retro Game Mechanics Explained took a look at the Card Shuffler code in Super Mario Bros 3's Memory Match game, but could you take a look at it and provide fixes to make it properly operational? Love your deep dives!
Great video! I discovered your channel not too long ago and have been binge watching your videos, lol. Finding out all of the quirks of the NES games that I played as a kid is really brings back memories. Do you have any plans to cover the PC-Engine/Turbografx-16 console? Either way, thanks for the videos and keep up the good work!
Don't know if I've asked on the channel but I would love to see behind the code for Gauntlet and Gauntlet 2 NES how they handle moving around tons of enemies. They both handles it differently while the first appears to treat it as interactive tiles while the second appears more sprite-like.
Funny, Mary Shelley's Frankenstein for SNES has jumping just like this game, I think for the same reasons, and the jumping ALSO feels like garbage in that game!
The power of a game genie code is amazing. My favorite is still DD2C-AF6F for Super Mario World. My brother actually found it. It actually makes Mario and Luigi's jumping power infinite, and if you are holding jump when you touch down on a surface you can hover out.
Reminds me so much of screwing around with platforming logic while writing my first game. Says something about the experience level of the programmer(s).
I love this kind of analysis. Some of these bugs feel like the programmer never really played another platformer games and didn't know how the characters should feel.
I really hope one day you cover that NES Frankenstein game. I’m specifically curious about how the vines work or why the game genie codes are the way they are.
Question about lives - how does it tell whether or not you are out of lives and to give you a game over? It seems weird to me they would not update the cap but remember to update what value counts as 0
It's likely just a comparison against the text parser's result for the 0 tile--- which was probably updated when the tileset was changed because it would have rendered the visuals to be total garbage. That raises the question of why they didn't bother setting the cap to be a comparison against the 9 tile... but then again who are we to question the wisdom of the giants of industry who brought us that instant classic, Rocky and Bullwinkle for the NES. 🙄
So I did have a section in this script that went into a bit more detail about that, however I cut it for time/pacing. They likely changed the location of the graphics and naturally updated the tile-specific checks in the game for default reserve lives (immediately apparent when starting up the game in the event they missed the code update). If they forgot the "Game Over" logic, that would have also been apparent when they were still alive after dying and had symbols showing up in the Lives box during play testing. The cap on reserve lives is an easy item to overlook and would be super low priority (if even thought about) during play testing. As far as reviewing the code itself... did they hardcode the value or use a constant? You'd think they would have had minLives/maxLives constants and naturally updated the tile ID values at the same time if they made a change... but maybe not!
Jesus Christ, I thought I created very questionable 6502 ASM routines, but this achieved so much worse. I could not make a input handler this bad even if I tried to, and I know I made a pretty cursed input handler routine before, at least it had the merit of getting most of the job done, with overlapping states being taken into consideration as well.
Interestingly, I wonder if they went by the tile ID instead so that would be Game Genie / memory hackers of the time would search for the number of lives, lose, 1 and search for that number next. Or maybe it was just pure laziness, they didn't need to calculate the Tile ID index and add the numbers.
Thank you so much for these videos, they're quickly becoming one of the things I look forward to most! This is kind of a random question, but I noticed that 16-bit values often seem to be stored backward in these NES games, low-byte/high-byte, like processing a jump is $ED05 but it is stored as $05 $ED. Is there a reason that these values are stored in this way? I would personally swap them, just for my own percieved ease of use, but I bet theres a good reason and it would bite me in the ass.
Man, I never thought that I will return to watch your videos after that TMNT underwater level explanation, because it was too much. Like, when I was watching it I was nearly sleeping. It was just too much of a information for my casual brain to handle. The same here. I was just trying to poke myself in to a forehead to not fall asleep. This is what happens when a casual gamer, who loves to play video games, tries to watch educational videos, even if they are about video games.
Have you thought about maybe making an IPS patch out of these sorts of fixes? Just curious. Always love these deep dives and it shows me that even a professional studio can make errors and oversights.
All of my effort is put into producing the video. Sometimes other people have taken the changes I have made and created IPS patches for them. They have likely improved upon them as well. All of my changes are usually geared toward using a minimal number of Game Genie codes (with a few exceptions depending on the video/change).
a jump startup isn't necessarily a bad thing. i don't know how appropriate it is for a platformer, but i know some fighting games do that. but it has to be short; i know Super Smash Bros historically has been pretty consistently around 3-6 frames of "Jumpsquat." this game looks like it takes way too long, so it ends up feeling unresponsive and clunky.
Considering you said the same developer made Rocky & Bullwinkle, another game known for iffy platforming, I’m curious if it has the same problem with a one-pixel landing. And while it’s not an NES game, I’m also curious about the Game Boy game Castlevania: The Adventure, because it seems to have the opposite problem: your collision box is almost too big, where sometimes it looks like you’re standing/walking in midair but you’re still on the edge of a platform.
I'd like to see you go over changing the player collision pixel to widen it and see what that would do for the platforming. It would also be interesting to see what would happen if you combined that with removing the standing jump animation.
A pixel. A single pixel for collision detection. Dear god. Makes me wonder if there were similar problems with the Simpsons NES games. The jumping was so disgustingly finicky. And yet it somehow managed to perfectly capture the feeling of wearing cement shoes. 🤪
It doesn't seem like that these were inexperienced programmers -- just that they were under a time and money crunch and decided 'eh, good enough' and released it. I wonder if Rocky and Bullwinkle suffers from the same issues?
the lives oddity is exactly why you should never use raw tile IDs. always use a normal integer; you can always add a set value to it for displaying. then you can limit it to 9 easier, it's protected from tile ID changes, and when you do shift tile IDs and forget to update the life counter code, you'll at least spot it.
James Bond Jr game contains specific feature - you slip off the platform's edge, so staying on just one pixel results in instant fall. And it's obvious it goes opposite to how all games tought us, that you can literally stand in mid-air safely.
An old wise man that played this once said "WHAT WERE THEY THINKING?!"
He's not that old, but he's getting older and a father, that good ol' AVGN.
Bimmy knows
@@RyowhosakazakiI think you can consider people in their 40s old.
I'm 42 😢
@@Ryowhosakazaki In addition to what that other fellow said, it is reasonable to interpret the phrase "wise old man" as non-literal, as a common turn of phrase.
@@samholdsworth420nah mate, 50s then ya old lol
It's amazing just how many bad NES games can be "fixed" or at least made playable with just a few lines of code changed.
Hindsight is everything
@@fernandobanda5734That's an odd way to spell "play testing".
@@konayasai Some things, yes. But you don't notice code mistakes by playtesting, especially frame-perfect interactions that you don't even know were frame-perfect.
@@fernandobanda5734 I don't know if you've played this game, but most of these things he's fixing are pretty apparent during normal gameplay.
@@fernandobanda5734 even a blind monkey with cerebral palsy would know that setting the collision detection to a single pixel in the middle of the player’s feet is an idiotic decision. It’s not something that requires analysis to find out or know, it just need a basic programmer to do their job half decently.
I worked on the old MMORPG 'Fallen Earth' and it had the same problem up till release when we finally talked the 'designers' into removing the wind up for the jump. Some peoples children :|
I had a short but extremely fun stint playing Fallen Earth earlier this year and let me tell you, that explains SO MUCH! BTW, it's a fantastically janky hidden gem of an MMORPG though and worth giving a shot. Its also totally free now, not even cash shop.
@@nazgulsenpaiglad to hear people enjoy it, I actually designed and wrote the whole 'progressive town' system was my first big thing in a game :)
It would be really nice if you could make a video explaining some of the code and choices of the game
The Miyamoto Principle: when the player presses the jump button, the character should jump.
Sounds self evident until you compare Mario 64 with Tomb Raider, released around the same time. Or this game.
I loved that game!
Excellent video as always. I almost lost it at the whole "collision is a single pixel" revelation.
"If you land on your feet, it doesn't count. You have to land on the empty space in between your feet!"
Why use many pixel when one pixel do trick?
@@sandakurevaone pixel no do trick
Would it take too much assembly code to make it a boolean between 2 pixels?
@@kg4boj Not by much, you'd have to do a "is it more than or equal to, but less than the right edge's X coordinate" and the inverse of that for the other side.
It tried to predict the future but forgot there's no fate except what we make for ourselves... ironic.
They could have fixed the prediction code by multiplying the increment by a variable that tracks which direction the player is holding.
So, if the player is holding left, the predictions are multiplied by -1. If the player is holding right, it multiplies them by 1. If the player is not holding any direction, it multiplies them by 0.
This means that if the player chooses not to hold any direction, then the predicted position would be the same as the actual resulting position.
This really makes me wonder if the same coding decisions exist in other platformers that exhibit "falling through platforms" behavior; such as The Wizard of Oz on SNES, or if this is more uniquely specific to The Terminator.
It's hard to say with certainty in every case without examining the code but about 90% of the time it's simply caused by poor platform map coordinates or landing box size and/or the player's platform detector coordinates being too narrow or in this case a single pixel which is a real novice game coder mistake. A cool workaround I learned lately is that what some games do is by delaying the ground detector after colliding with a floor coordinate by 4 or 5 frames like in the case of Donkey Kong Country where even though your tumbling jump from platform still counts and does that neat "air" jump that speed runners take advantage of. 😃
There's a PlayStation game call Phix the adventure (or something like that) that seems to show similar symptoms, including being able to seemingly partially clip into walls and confuse the graphics engine.
One particular situation comes to mind where it is possible to fall into the space between a platform and a wall to your death, despite there not being any visible gap between them.
Building a platformer is a minefield of tiny decisions so if it’s someone’s first game and they’re just building these mechanics from first principles … yeah
I love your recent videos these last few months so so much. It feels so satisfying now with an adult with a decent understanding of code to be able to look at these breakdowns and understand *why* the issues that plagued the games featured on AGVN that I grew up watching, happen.
Why is Platforming so Difficult in The Terminator for NES? - Behind the Code
In honor of the AVGN, I want to see a Jeckyll & Hyde video. Why is it so hard to play, and can it be fixed?
The original 2D Prince of Persia had completely different mechanics for vertical jumps and running jumps--maybe that's what the designers were going for? Definitely a case of the player character mechanics and the level designs being mismatched. Prince of Persia never made you jump between tiny ledges, or fight and platform at the same time. The 1992 Famicom game Moon Crystal has obviously Prince of Persia-inspired animation, including distinct vertical and running jump types, but jumping and landing are always instantaneous in that game.
Not to mention that Prince of Persia allows you to catch ledges, thus giving a good margin of error
The look of pure horror that I had while watching this was probably the same as what you had while discovering this. So, SO many bad decisions. I wonder if you've ever considered contacting some of the programmers for these and asking them if they knew why some of these decisions ended up in the final products. The likely answer though is probably "we had a few weeks to build this and the studio didn't budget enough for QA".
I assume that would be the case. As far as Radical Entertainment, they were a start-up at the time. The people that worked there basically had to get games out to recoup money invested. It could be they also felt rushed due to the fact the Super Nintendo was already out at the time. Lots of pressure.
Lazy math. Can’t be too difficult to Intersect a line with a box. Macros to use 8.8 fixed point throughout. Why even start a company if you don’t have any goals?
@@ArneChristianRosenfeldtI guarantee the guy who programmed this buggy stuff isn't the guy who founded the company, likely the low guy on the totem pole fresh out of college
@@frikobraun so a less dramatic version of doom on 3do
@@frikobraunthis is my thinking. This reminds me too much of me writing my first platforming logic. It smacks of inexperience, not time constraint.
I think part of the lesson here is to try to appreciate the hard work that goes into the games that got this stuff right! They probably worked and improved and fixed and improved and rewrote and tested, etc. Good stuff doesn't just happen on its own.
Something I really appreciate is how right Nintendo got platforming physics in Super Mario Bros. Almost 40 years later and it doesn't feel old at all.
It's also important to consider _why_ things went wrong the way they did with games like this. It's impossible to know the story behind every one of these crappy games, but given what we know about the development of games like E.T. for the Atari 2600, I'm willing to bet these developers were set up for failure.
Were they also bad or incompetent programmers? I'm inclined to think so. But that's not enough to create a train wreck as bad as The Terminator.
We get a peek about the skill level of the programmer here. This input/state lookup table is kind of advanced and even a bit clever. That may give us a fairly important peek into what went wrong: the programmer was not untalented, things like using a tile value for lives is weird but it avoids CPU cycles calculating the tile value. Even stuff like the look ahead, while bugged, represents a novel approach.
What this suggests to me is that Terminator's flaws may come more directly from the developer under estimating (or intentionally inflating) the difficulty, as was common back then. It's perhaps less easy to appreciate now, but games like T2 on Gameboy can be completed in three minutes: it was not uncommon to make a game harder or more confusing purely to stretch out it's runtime. Couple this with some unintuitive behaviors like single pixel tile collision (which the developers would be aware of) and you have a game that's unexpectedly challenging for the wrong reasons in addition to challenging for more deterministic ones.
It's always interesting to see how many of these famously bad games are made all the worse by their coding choices, and by extension just how easily they can sometimes be improved with something as simple as a few GameGenie codes.
Always in awe that you disassembled these and figured out & commented the code. So much work goes in to these videos.
Between the last video and this one, I wrote my own first NES game for Ludum Dare, and... 1) much of what I've learned is through your Behind the Code series, so thank you!! and 2) these are so much more satisfying to read/follow now that I "know" 6502 assembly :D
Hope to try it out soon, good luck 👍
Such a thought provoking video. It's almost like pin pointing where the game messed up and using game genie codes to course correct it from a disastrous game is some kind meta analogy of the movies plot.
I also love how you recognised assembly code in the Terminators vision. I think James Cameron just threw anything remotely sciency and technical sounding to make the films feel legit, like the T800 processor chip being a superconductor at room temp. I picked up on that years later after learning to use NMR fir my science degrees.
Fantastic video as usual, love the really in depth analysis. I happen to speedrun this game and currently have the fastest known time. So I am intimately aware of all the platforming failures that this game has to offer. Even playing on emulator for practice was so inconsistent, there were so many jumps that seeming fail for no reason and it was a massive challenge to play through with (mostly) no mistakes.
A few things:
The "fake" landings where you appear to make it past the edge of a platform but then fall anyway is SO INFURIATING. Theres actually a moment in the run where that happens to me and I was able to react by jumping again before I fell. I taught myself to always spam the jump button on any sketchy landings in case I needed the second chance. Thanks so much for explaining why that shit happens.
Ok, the single pixel landing detection???? That has to be a joke. But I'm not really surprised. Even your characters stance when standing up straight is so weird. His legs are just bent apart and its hard to tell where your "center" even is. Those tiny platforms at 6:30, at the end of level 1, were such a pain in the ass. Even a veteran gamer is going to have a hard time with it. Not only is it hard to tell where your center is, but the platforms are insanely small for no real reason. Theres not a single other part of the game like that.
The landing lag... why even include it? Its so crazy how even though jumping is something you have to do so much in this game, it feels like a punishment. Makes you feel slow and weak.Would love for you to dive into why its possible to cancel landing lag with punches and kicks (only available to the player after level 1 and not including the driving levels).
I know the video was about platforming mainly, but I wish you'd go into detail about maybe the later bosses and levels. They are so bizarre and dont follow any convention. Just a really rushed and broken mess of a game. Just one random tidbit: I learned from a TAS run that the enemy AI is designed to spawn a single enemy in front of you wherever you are facing. The screen has to have no other enemies, and you have to be facing that direction for about 1.5 seconds. This timer resets EVERY TIME you turn around. So you can cheese the game easily by constantly turning back for at least a single frame while running and it will cause enemies to never spawn at all. Hilarious.
What made you want to speederun this game?
@@XxRipperRooXx When I was really little, my family had an NES and a handful of games, most were very good like mario, zelda, megaman, kirby, etc. But we had some really shit ones like terminator. I had to revisit the game as an adult to finally finish it, and i got inspired to speedrun as a personal challenge. Every game, no matter how hard, has a strategy you can master. Basically I wanted to play the game like a pro in total spite of the glitchy challenges.
I love how sadistic it is to make the jumping box a single pixel despite the fact you already have the entire sprite's hitbox for damage programmed that you could easily have used for the platform detection.
They had to get a "working" movement system built, they built it. Single pixel clearly worked on whatever test levels they tested it on enough to say they hit their deadline to their manager. Next job, combat, attacks and collisions, they built it. A single pixel width hitbox would guarantee all attacks could be dodged simply by jumping no matter how early or late, so that had to be done correctly the first time. Someone designed the level designs, game went to qa, complaints were noted yet a solution to issues which could be chalked up to "player skill" were never developed or implemented, game made it out the door on deadline and the company made money. That's it.
I'm trying to patch something i want into a SNES game atm. I have someone else's partial bsnes+ debugger symbol notes and comments but it's still so hard. Yet again I am amazed at your clear disassembly and explanation of these games. Just wow dude.
As others have said, these recent videos have been so nostalgic while also cathartic. It's wonderful seeing games from my early days that caused so much grief get pulled apart, called out, and patched. What you're doing is great! I'd love to see you slowly progress through game platforms, getting more modern with each one, fixing some of the worst offenders of each platform as you go. Superman for N64 would be a wonderful thing to see you, somehow, try to make it less awful to interact with. I'd love to see super ghouls and ghost & contra III for the snes get looked at.
Older gamer here. To me these kinds of physics is what I always felt the games were designed to be like, though not as sharp as others, you learn to adapt. I don’t hate it, but it chips away at your patience. In the end, it’s very satisfying to beat these types of games. Though coming back to them way later with many “improvements” thanks to hacks and mods, it makes the game feel new and fresh and it gives you a sense of “this is how they intended it to be” which is nice too.
I love these videos where you fix old games because every game deserves a chance to shine. The bonus is how you explain how the game is programmed, giving an insight how the faults are created.
The insights you bring into how these old games worked is astounding. I learn a lot watching these. Your ability to debug these games written by somebody else is next level. Great job!
Multi-frame bugs are hard to find.
I love that you not only diagnose what's wrong, but provide a fix.
I absolutely love these deep dives into broken or poorly-conceived mechanics. It's a satisfying vindication after all these years. And you present them so well, even I (with no programming knowledge) can follow them.
Thank you so much for this comment. I try to script videos so they appeal to both programmers and gamers.
I feel like you could also have answered this video's titular question accurately by saying, "Because you jump with the B button and attack with the A button". It truly baffles me that anybody would make an NES platformer as late as 1992 where you don't press A to jump.
Great video as always! I eat this stuff up. Deep dives into character controller code are my jam. I hope you'll do more and more of them!
You know, I wonder if there's any third-party NES controllers that allow swapping A and B with a switch or button macro or something. Feels like it'd be a good selling point for all those companies making retro gaming controllers.
Yeah nearly a decade after SMB1 you'd think everyone already understood the de facto convention. But "up is jump" is even more cursed
@@nsf001-3 One of the reasons I made my earlier reply is that a while back, some company made a joystick for retro computers such as the Commodore 64, and it has a switch to make one of the buttons act as tilting the joystick up, because of how there's so many games for the classic microcomputers that did Up is Jump simply out of necessity (they only really supported a single button on the controller 99% of the time).
@@nsf001-3 Finally looked up that controller, it's one of Monster Joysticks', uh, joysticks. The ones they make for retro computers have a switch that when flipped makes the joystick not do anything when tilted up, and makes one of the buttons act as tilting the joystick up; completely solving the problem of "Up is Jump".
I've always been fascinated by games with double jump glitches. Wizards and Warriors on NES had a simple one where you could take a hit midair and use it to get a second jump, and looking back now it's probably something really similar like the game thinks the character is on the ground during the hit animation or something.
It's a bad state machine design. But when all you have is a 6502 to handle all the logic, you have to just accept stuff like that sometimes.
@@JohnSmith-fq3rg Honestly though, I'm actually fond of little glitches that don't actually break the game. It gives them personality I think. My all-time favorite glitches are things like the Minus World, where you can find entire areas of games that aren't even supposed to exist.
I love this channel. I love what you’re doing with these old games. It’s amazing to see the behind the scenes. It also makes me feel so much better about being frustrated playing these as a kid. The video you did on TMNT for the NES blew my mind. I knew that damn water level was messed up and it wasn’t my fault!
TMNT water level was not your fault at all!
@@DisplacedGamersthanks for the reply. It’s nice to know you’re still reading comments. Whenever I see another video of yours drop I cannot click on the link fast enough.
If you’re not a teacher, professor, trainer, or in a leadership role where ever you are then the world is seriously missing out. You have a gift. A real gift.
I literally just sent one of your videos to my wife (a 2 year old video about NES audio coding) because she wanted to know how I know so much technical stuff about video games. Her response “this is what you watch for fun?”
Yeah, this is what I watch for fun!
1:08 I guess the more things change, the more they stay the same.
In the 80s/90s, cool looking computer code in the movies was unassembled 6502 Assembly.
In the 20s, it's uncompiled C++.
Love your videos, man. Every and single one of them are a master class of how the games behave and how program them!
Keep up, DG brother! ⭐⭐⭐⭐⭐
The way the game determines how many lives the player has completely blew my mind. Instead of calculating the amount of lives and then looking up which graphic tile to render based on the result, it directly calculates which tile to render.
And the real kicker is, I think I actually understand why they chose this method - saving processor cycles. This method basically skips the middle step, thus saving some processor time. That's an optimization trick that I definitely would have never thought of.
16:15 that reminds me of Double Dragon 3 on the NES. I saw lots of people complain about moves "just not working" even though "they did them right." I've thought about that a lot and wondered how it even happens. I've written enough janky game code that I know its possible, but sometimes it baffles me to think anyone actually released a game THAT bad. And yet, here we are...
Great video! As someone whose job includes teaching basic game programming to high school kids, it's nice to have stuff to show them - at least the ones that want a little more in-depth knowledge. I absolutely have students who'll gobble this up =)
Every NES game covered by the AVGN needs a video like this
17:13 wouldn't it be better to swap "Land yet?" with "Select"? Otherwise you'll still have the same dropped input if you try to change weapons during that one frame. Swapping "Land yet?" with "Select" would fix both jump and select.
I also thought about that. Maybe there's some reason why he decided not to do it?
Really enjoyed this video! I was always a big fan of the Terminator movies and rented this game back in the day. It was sooo frustrating and difficult. I clearly remember the issue of missing platform jumps too. I spent hours playing it getting nowhere. At least I know why now 😆
'B' button to jump...in an NES game!!?
*gamer rage intensifies*
Fantastic video as always!
This channel is so cool! Thanks for the video, I'm definitely subbing!
This game does not need a couple game genie codes, it needs an ipa to rewrite pretty sizable portions of the game's input and collision handling. I'd watch that video with popcorn, but I wonder if other people would have the attention span for what would wind up more a video on NES game architecture by example/counterexample. I wonder if this is the game to use if that kind of video is your goal though.
I feel like this game might be a good project for someone in the same way one might buy a house, gut it to the studs, and rebuild.
One thing of note, however, is that this is a multi-genre game. The overhead driving stages in particular are... something else - no pun intended.
It needs more than an IPA, it needs a Rolling Rock
....or we could all just use the Terminator hack for Journey to Silius and call it a day. 😅
I remember that this was torn apart on an early episode of Angry Video game Nerd. He ran in to the max 6 lives after leaving the game on overnight rack up score.
"Okay, I gotta be honest. I didn't expect more than 9. But why a random number like 6?!" lives rent-free in my head
And now we know. They fucked up. :P
I think this highlights one of the problems with ASM code... it's so verbose, and the syntax doesn't immediately give you context of what that code does, that it invites mistakes. For one, it's just easier to miss stuff. But two, it takes a lot more work to find something that needs to be changed, figure out how to fix it, and avoid breaking a dozen other things in the process. So, probably, there was a long laundry list of "we should fix this" items that someone looked at, felt their heart sink, and decided to just let it ride... :-)
“Do or do not, there is no jump.” - The Yodanator, probably
I love specifically the single-pixel player collision. Ofcourse, with modern hindsight, we can easily say "yeah, don't do that, or if you do, at least make the hitboxes of the platforms bigger". But these kinds of lessons might not have been well known at that time, and have to be learn via mistakes. Today, we have games such as this to thank for not repeating this in modern games.
And yet if I had rented this game as a kid, I would have forced myself to play through it until I had to return it on Monday. Then 30 years later I would develop nostalgic feelings for it and convince myself that this game wasn’t bad
*Flashbacks of Drakkhen*
Sounds like me and Deadly Towers, except I had that game for a couple weeks - and actually beat it.
Does it suck? Yeah. Do I have a weird nostalgia for it? Yep.
"terminator doesn't store the number of lives, but rather stores a tile"
If that wasn't indicative of this studios programming practices, I don't know what is.
10 months late but I believe that saved like 8 bits of space by not having a serparate variable... which really isn't that impressive considering that 1 pixel platforming hitbox, but yay optimization!
Can I suggest you take a look into the code for the Double Dragon games or River City Ransom? I'd like your insight into DD's wonky jumps (and kaizo hell).
Also RCR has some interesting 2.5D maths for collision checks.
Another fascinating video about some really dodgy collision detection and input handling. Amazing to realise that the Radical Entertainment that made this would later go on to make the amazing Simpsons Hit and Run. Food for thought, really.
They had just started up and were likely trying their best to get some titles released and start making money.
Oh definitely. The first games are always the hardest, and they got em released which is an achievement in and of itself.
once I took a class on x86 assembly & decided NEVER AGAIN. These videos are so insightful & approachable they make me want to relook ASM. Thanks, jerk!
❤❤
x86 is a nightmare
It's always interesting to see how some of these old games were. Makes you wonder how many people working on some of these had never made a game before?
@@james66666 yeah, I’m not trying to say these guys were idiots, but if you’d never made a game before, there’s just things that wouldn’t know the first time around.
@@james66666I imagine the resources did to some degree exist by 1992 though.
The SNES was already out, Home console gaming was 7 years into it's massive rise
"Every game is a sandbox game when you can reprogram it" -- hah, true. That's how I "played" Doki Doki Literature Club. I went in almost blind - I just knew weird things happen, and when the 4th wall breaking started, it kind of irked me. I'm not sure why, but at the time I simply didn't care to play along with the game. So I said "oh, you wanna break the 4th wall? OK", unpacked the game files and just edited it to skip straight to the good ending. That was actually trivial since the game code was just plain python scripts in a zip file.
For anyone wondering, this game was programmed by Chris Robertson. He also worked on a bunch of NHL titles.
This just showed up in my feed and its fascinating. Going to have binge this series, awesome video.
That prejump/landing animation looks so wobbly it makes my knees hurt
I'm sure if you interviewed the programmer who coded this game asked him what happened he'd probably come clean and say, "Yeah man my bad. This was one of my first titles while working for the company." lol 😃
I rally enjoy this series, hope you never run out of ideas.
I have to say, the crummy jumping sprite does not help with the feel of the jumping.
I feel like if an artist drew these sprites, they would be embarrassed. However if a computer programmer drew them, they would feel pretty darn good.
I love this series. I need to send it to my mom who got mad at me whenever I would rage at games when I was a kid. I was totally right. Haha 😂
Oh my God, I need to do the same thing. I used to get so freaking lit over this stuff and this is pure vindication. I'm doing it!
"Oh my god it was total bullshit this whole time!"
When I learned about how some fighting games were programmed to read your button inputs and able to react instantly I was like "Hah hah, I knew the game was cheating."
your writing is greatly improving every episode and i like the slightly more casual tone it's taking! keep up the great work!
Thanks. It is one of the toughest things to refine, and each new game/subject presents a new challenge.
So interesting! And quite hilarious to see what is going on behind the scenes of the frustration.
The second I saw the pixel thing I knew you were pretty much going to feature everything the AVGN talked about and I know you're doing it with him in mind which I really appreciate. Watching you explain the issues in a way he couldn't because you dig into the game's code is really fascinating. I'd love to see you tackle Wizard of Oz for the SNES next if possible because it has similar issues of falling through platforms. Also I'd love to see a second video tackling on the whole random "6 max lives" issue and why the crouching mode even exists
I can imagine the Nerd watching this video and saying to himself "Mother fuck..." because he was right 😂
It would be totally fine for that pixel collision if they increased width of colision boxes of platforms
@@ponocni1 Or if they added coyote timing, or changed graphics so they looked thinner. But coulda woulda shoulda.
Neat. Can't say I see too many people giving this kind of technical explanation. While I can't read the code instructions, the explanation filled in the gaps, I think.
Videos about how memorable games work are great, but I'm really liking videos like this; exploring jank in broken games!
The number of Terminator references in this video lmao
Great as always
It's wild to see that old games tended to use single pixel or few-pixel probes for collision detection rather than a box or line overlap test. I know the latter is more expensive, especially on early 80's 8-bit chips, but surely couldn't have been *that* expensive if done carefully.
Now you can jump all over those giant q-tips and half disappeared blocks.
I think this was my first video of yours and I'm sold. Tell me more about janky game programming, wise one
Fire 🔥 as always!!!! So glad to have a weekend episode!
I know Retro Game Mechanics Explained took a look at the Card Shuffler code in Super Mario Bros 3's Memory Match game, but could you take a look at it and provide fixes to make it properly operational? Love your deep dives!
Hmm. I'll have to check out their video.
There is a patch out already!
Great video! I discovered your channel not too long ago and have been binge watching your videos, lol. Finding out all of the quirks of the NES games that I played as a kid is really brings back memories. Do you have any plans to cover the PC-Engine/Turbografx-16 console? Either way, thanks for the videos and keep up the good work!
Excellent video! I'm glad to se content like this!
Don't know if I've asked on the channel but I would love to see behind the code for Gauntlet and Gauntlet 2 NES how they handle moving around tons of enemies. They both handles it differently while the first appears to treat it as interactive tiles while the second appears more sprite-like.
Funny, Mary Shelley's Frankenstein for SNES has jumping just like this game, I think for the same reasons, and the jumping ALSO feels like garbage in that game!
I have 2 Game Genies and have confirmed you can diasy chain them lol If I had this game I would totally try it!
The power of a game genie code is amazing. My favorite is still DD2C-AF6F for Super Mario World. My brother actually found it. It actually makes Mario and Luigi's jumping power infinite, and if you are holding jump when you touch down on a surface you can hover out.
Reminds me so much of screwing around with platforming logic while writing my first game. Says something about the experience level of the programmer(s).
I love this kind of analysis. Some of these bugs feel like the programmer never really played another platformer games and didn't know how the characters should feel.
Love these videos! Thanks so much - keep up the good work!
I really hope one day you cover that NES Frankenstein game. I’m specifically curious about how the vines work or why the game genie codes are the way they are.
Question about lives - how does it tell whether or not you are out of lives and to give you a game over?
It seems weird to me they would not update the cap but remember to update what value counts as 0
It's likely just a comparison against the text parser's result for the 0 tile--- which was probably updated when the tileset was changed because it would have rendered the visuals to be total garbage. That raises the question of why they didn't bother setting the cap to be a comparison against the 9 tile... but then again who are we to question the wisdom of the giants of industry who brought us that instant classic, Rocky and Bullwinkle for the NES. 🙄
So I did have a section in this script that went into a bit more detail about that, however I cut it for time/pacing.
They likely changed the location of the graphics and naturally updated the tile-specific checks in the game for default reserve lives (immediately apparent when starting up the game in the event they missed the code update). If they forgot the "Game Over" logic, that would have also been apparent when they were still alive after dying and had symbols showing up in the Lives box during play testing.
The cap on reserve lives is an easy item to overlook and would be super low priority (if even thought about) during play testing. As far as reviewing the code itself... did they hardcode the value or use a constant? You'd think they would have had minLives/maxLives constants and naturally updated the tile ID values at the same time if they made a change... but maybe not!
@@DisplacedGamers Awesome, ty! This definitely sounds like a high quality, well developed video game lol.
@@Jademalo what happened to this dev studio after the game?
6:14 "I know you don't want additional problems, but oh, we certainly have them."
Sounds like life. Ha.
Jesus Christ, I thought I created very questionable 6502 ASM routines, but this achieved so much worse.
I could not make a input handler this bad even if I tried to, and I know I made a pretty cursed input handler routine before, at least it had the merit of getting most of the job done, with overlapping states being taken into consideration as well.
Interestingly, I wonder if they went by the tile ID instead so that would be Game Genie / memory hackers of the time would search for the number of lives, lose, 1 and search for that number next. Or maybe it was just pure laziness, they didn't need to calculate the Tile ID index and add the numbers.
I remember being so mad as a kid when nes games “cheated”. It’s kind of funny that the games were actually cheating by being crappy.
Thank you so much for these videos, they're quickly becoming one of the things I look forward to most!
This is kind of a random question, but I noticed that 16-bit values often seem to be stored backward in these NES games, low-byte/high-byte, like processing a jump is $ED05 but it is stored as $05 $ED. Is there a reason that these values are stored in this way?
I would personally swap them, just for my own percieved ease of use, but I bet theres a good reason and it would bite me in the ass.
Endianness. It's a good read on Wikipedia.
Man, I never thought that I will return to watch your videos after that TMNT underwater level explanation, because it was too much. Like, when I was watching it I was nearly sleeping. It was just too much of a information for my casual brain to handle. The same here. I was just trying to poke myself in to a forehead to not fall asleep. This is what happens when a casual gamer, who loves to play video games, tries to watch educational videos, even if they are about video games.
Have you thought about maybe making an IPS patch out of these sorts of fixes? Just curious. Always love these deep dives and it shows me that even a professional studio can make errors and oversights.
All of my effort is put into producing the video. Sometimes other people have taken the changes I have made and created IPS patches for them. They have likely improved upon them as well. All of my changes are usually geared toward using a minimal number of Game Genie codes (with a few exceptions depending on the video/change).
@@DisplacedGamers Totally fair, I'd say. As to a part 2, well I wouldn't mind seeing this game get its Judgement Day.
All the best, man.
a jump startup isn't necessarily a bad thing. i don't know how appropriate it is for a platformer, but i know some fighting games do that. but it has to be short; i know Super Smash Bros historically has been pretty consistently around 3-6 frames of "Jumpsquat."
this game looks like it takes way too long, so it ends up feeling unresponsive and clunky.
I learned some assembly, and wondered what NES code looked like. Now I know.
Considering you said the same developer made Rocky & Bullwinkle, another game known for iffy platforming, I’m curious if it has the same problem with a one-pixel landing. And while it’s not an NES game, I’m also curious about the Game Boy game Castlevania: The Adventure, because it seems to have the opposite problem: your collision box is almost too big, where sometimes it looks like you’re standing/walking in midair but you’re still on the edge of a platform.
I'd like to see you go over changing the player collision pixel to widen it and see what that would do for the platforming. It would also be interesting to see what would happen if you combined that with removing the standing jump animation.
The math would have to be reworked in such a way that player dimensions would be specified as part of the calculations.
The dev would redeem themselves 10 years later with The Simpsons: Hit and Run
A pixel. A single pixel for collision detection. Dear god.
Makes me wonder if there were similar problems with the Simpsons NES games. The jumping was so disgustingly finicky. And yet it somehow managed to perfectly capture the feeling of wearing cement shoes. 🤪
It doesn't seem like that these were inexperienced programmers -- just that they were under a time and money crunch and decided 'eh, good enough' and released it.
I wonder if Rocky and Bullwinkle suffers from the same issues?
the lives oddity is exactly why you should never use raw tile IDs. always use a normal integer; you can always add a set value to it for displaying. then you can limit it to 9 easier, it's protected from tile ID changes, and when you do shift tile IDs and forget to update the life counter code, you'll at least spot it.
This was a great video. thank you for making it.
I'm just here to express approval for the acknowledgment of Bucky O'Hare
You always impressed me.
James Bond Jr game contains specific feature - you slip off the platform's edge, so staying on just one pixel results in instant fall. And it's obvious it goes opposite to how all games tought us, that you can literally stand in mid-air safely.
I love these debugging/fixing old games videos