The Garbage Sprites in Strider (NES) - Behind the Code

Поделиться
HTML-код
  • Опубликовано: 27 ноя 2024

Комментарии • 575

  • @DisplacedGamers
    @DisplacedGamers  Год назад +121

    Loved diving into Strider (NES)! This game was requested by several people since the start of Behind the Code. The game has so many odd issues. The sprites stuck out the most for me.
    A few notes -
    1: The Nightmare on 6502 Street is just a fun joke that I was feeling. What I have found in code isn't THAT bad ... I think... (We haven't talked about ooh... Micronics that much yet... have we?)
    2: By the way - Strider does have an infinite loop after CPU next frame work is complete. The loop compares RAM locations $4B and $4C to each other and loops so long as they are equal. The NMI routine increments $4B. So when the game returns from NMI, $4B does not equal $4C. That drops it out of the loop. $4C is then saved after the exit condition is met.
    3: The NMI handling example in this video was just one basic method. NES developers may end up commenting on their own approach to their games in the comments below.
    Feel free to leave other specific requests for Strider since I am "in the code" now. That said - I already have a laundry list of stuff with lots of question marks and exclamation points on it.
    Take care!

    • @nekononiaow
      @nekononiaow Год назад +3

      Hack suggestion to mitigate this issue: add some code at the end of the NMI routine to force the interrupted code to resume **after** the sprite creation code.
      This will not save the graphics of the current frame but may reduce the odds that the code will overshoot the next frame again.

    • @AB0BA_69
      @AB0BA_69 Год назад

      Dumb question: in your example at 11:36 why is Frame A merged with Frame B? My naive guess would be that Frame A gets wiped and the incomplete Frame B gets displayed. Instead they are combined into a sort of chimera?! 🥴

    • @steve43ful
      @steve43ful Год назад +1

      Athena was a game that I found oddly compelling but also detested as a child. I don’t know if it has any interesting code to look at but I definitely felt like it was going to fly apart at any moment.

    • @alanelkins2408
      @alanelkins2408 Год назад +4

      Ooh, yes! Do a Micronics title at some point, please! My nomination would be for Super Pitfall, but honestly, any of them would be a treat to hear about.

    • @NinjaNezumi
      @NinjaNezumi Год назад +1

      "Strider plows right through it!" So Strider is the programming equivalent of LLEEEEEEROOOYYYY JEEEENKKKKIIINNSSS!

  • @civildisorder
    @civildisorder Год назад +261

    Hot damn, it's been some 30 years and I finally get why this game flickered so weirdly compared to everything else at the time.

  • @Bshue123
    @Bshue123 Год назад +14

    "Happiness is only temporary, the nightmares are about to begin" was not said verbatim by my programming professor, but it was implied.

  • @sauzeefy
    @sauzeefy Год назад +423

    PLEASE do more videos explaining instances where games are just fundamentally broken like this. I love it.

    • @aurathedraak7909
      @aurathedraak7909 Год назад +18

      I actually agree and do videos about left over code and junk.

    • @wraithcadmus
      @wraithcadmus Год назад +19

      Agreed. A game that just works is kinda dull, but a game that's broken through either laziness or just flying too close to the sun is always fascinating.

    • @VinsCool
      @VinsCool Год назад +3

      Adding my vote for this! I love that stuff!

    • @dycedargselderbrother5353
      @dycedargselderbrother5353 Год назад +3

      Final Fantasy II (Famicom) is a good candidate. Many of the bugs are due to the development team running out of both time and space. Many/most games have regions of 0x00 or 0xFF due to not fully using ROM space but FFIIj basically uses every byte. They couldn't even program a proper title screen.

    • @dogman7776
      @dogman7776 Год назад

      Agree

  • @jmaroni378
    @jmaroni378 Год назад +152

    I would love to see why the collision detection in this game was so wonky. Jumping was such a pain.

    • @darksideblues135
      @darksideblues135 Год назад +10

      Best way to triangle jump is to use an auto pad or just frantically press the jump button.

  • @nickwallette6201
    @nickwallette6201 Год назад +102

    It dawned on me what was going on about halfway through the background explanation leading up to the problem. I just started laughing. Hahaha! And the cherry on top is when you said it returned back to the frame drawing code w/o bothering to give up when the frame had already been drawn. That is truly magnificent. I feel like my life is better knowing this. Thank you so much.
    Zelda: Turns its homework in late.
    TMNT: Only turns in half its homework.
    MM: Completes the extra credit on time, and turns its homework in late.
    Strider: Turns in homework incomplete, then does the rest of it before starting on the next assignment. LOL
    This makes my day. What a glorious mess.

    • @TeraunceFoaloke
      @TeraunceFoaloke Год назад +6

      That is a perfect explanation hehe.

    • @nekononiaow
      @nekononiaow Год назад +9

      Yeah, it is quite silly. Especially given that it has a cascading effect: the frame code is already too slow but they handicap it by doing work for the previous frame. This ensures that even if a single frame ends up being too slow, the game will mess up several frames in sequence because of it.
      An interesting hack would be to modify the NMI code to ensure the game does not resume building the sprite data but jumps directly continues after the sprite creation code. This would not save the graphics of the current frame but it should at least reduce the odds that the next frame is garbled.

    • @vuurniacsquarewave5091
      @vuurniacsquarewave5091 Год назад +10

      It's actually kind of miraculous that the game doesn't create a condition in which it can crash itself during these laggy moments.

  • @Gnidel
    @Gnidel Год назад +18

    "The nightmare is about to begin."
    - then ad started playing

  • @MrCheeze
    @MrCheeze Год назад +44

    The fact that they alternate which actors receive priority seems like an attempt to mitigate the issue, to make it so that each of them is rendered correctly SOME of the time. So it's funny that it ends up making the corruption more chaotic as a side effect.

    • @DisplacedGamers
      @DisplacedGamers  Год назад +34

      Priority shifting is a rather standard operation for NES games due to the 8 sprite limit per scanline. I'll get into that a bit more in a future video on flicker.
      Of course when you combine that with Strider's issues... yikes.

    • @ArneChristianRosenfeldt
      @ArneChristianRosenfeldt Год назад

      @@DisplacedGamersI can’t believe that priority shuffling cannot indeed be done on the copy to OAM. VBI are 50 lines. CPU runs at 1.8 MHz so on 18 kHz CRT we have 100 cycles per line. CPU does almost do one memory access per cycle. Most of it is wasted on repeated instructions and IO address. Some shuffling jumps don’t change much. Modern Demo coders would probably fit a lot more into this using addressing modes, zero page, illegal instructions, and self modifying code.

    • @rich1051414
      @rich1051414 Месяц назад +1

      NES sprites will always flicker or be very slow if you have a lot of sprites at once. Priority shifting prevents any sprite from being partially invisible all the time. Flicker is better than invisibility, but don't tell jekyll and hyde that...

  • @Choralone422
    @Choralone422 Год назад +80

    This is great and explains so well why Strider looked janky as heck. I'd love to see a deep dive into the collision detection. Especially with regards to wall jumping which always felt completely broken.

    • @DisplacedGamers
      @DisplacedGamers  Год назад +39

      Collision detection and wall jumping are on the list.

    • @ejmc6378
      @ejmc6378 Год назад +8

      @@DisplacedGamers I'll bring the popcorn

    • @darksideblues135
      @darksideblues135 Год назад +2

      The way I sorted out the wall jumping, press the A button as fast as you can.

    • @mattmorrisson9607
      @mattmorrisson9607 Год назад +3

      Oh god, wall jumping...I always assumed I just sucked at the game. Could it be...I didn't suck?

    • @MasterZebulin
      @MasterZebulin Год назад

      @@mattmorrisson9607 Very, VERY likely!

  • @thecunninlynguist
    @thecunninlynguist Год назад +85

    fascinating, esoecially you usually expect this type of thing from no name/random devs...not capcom. If Capcom farmed it out to another dev, sure but this is in house. The way larry blends in and out into moe is nuts, lol.

    • @ostiariusalpha
      @ostiariusalpha Год назад +28

      Even in-house development can lean on the B-team, or even C-team coders. There are only so many A-team coders to go around, and NES Strider clearly wasn't enough of a priority to get Capcom's best. Coders were "Zac" and "Mamicyan♡Otona" on Strider. Mamicyan is Masamitsu Kobayashi, an experienced Famicom programmer, who I suspect was involved later to try cleaning up Zac's buggy code as best as he could.

    • @LeinaDZiur
      @LeinaDZiur Год назад +2

      back then everyone was random devs

    • @djmips
      @djmips Год назад +17

      @@ostiariusalpha Exactly. I actually suspect that "Zac" may have been granted a basic framework from Mr. Kobayashi and he really didn't know what he was doing with no help from anyone as what happened all too often back in those days.

    • @kosmosyche
      @kosmosyche Год назад +9

      The other probable reason - they had very tight deadline for release and no time to spare for fixing even the obvious bugs. Knowing how prolific Capcom was during those times, I wouldn't be surprised if it was the case. Money needed to be made. Projects were being made like hot cakes. It was not worth it to postpone the release.

    • @CodeIndigo
      @CodeIndigo Год назад +17

      NES Strider was basically generating an entirely new game from an arcade game that bore little to no resemblance; some of the assumptions of that arcade game's architecture may have leaked into the design of this game. Furthermore, it's very possible that this was meant to use a memory mapper chip that wasn't available by the time the "drop dead" deadline was looming, and so they had to get it working SOMEHOW. And, even more bizarrely, this didn't just have to pass Capcom's internal QA, but Nintendo of Japan's and Nintendo of America's, too. (Presumably also Nintendo of Europe's, but considering the horrible mess this was at 60Hz, I think it would just flat-out refuse to run at 50Hz.) There are a lot of things that could have gone wrong behind the scenes, and a lot of people who should have pumped the brakes on it to make sure that it "just worked" as opposed to "just barely worked".
      As a coda: The NOA "Seal of Quality" was mostly a transparent form of censorship and software flood control until the early 90s (think 1992 or so) where as long as the game was mostly stable, it would pass QA and get "the Seal". There are a LOT of games prior to 1991 or 92 that are FAR WORSE than NES Strider in terms of stability, playability, and suchlike: Kung-Fu Heroes comes immediately to mind. It's also worth noting that the NES's infamous cartridge slot could have contributed to the instability, and so NOA's QA might have given some glitchiness a pass just as a result of "couldn't reproduce". Around the early 90's is when you saw NOA get serious about QA as a function of software quality as opposed to "we don't want another Crash of 1983 situation", and Sega arguably beat them to the punch (the Sonic 3D Blast "secret level select" incident, for example, was the result of Sega taking crashes and glitches more seriously for longer than previously).

  • @CrappyBlue
    @CrappyBlue Год назад +77

    i love the tone you achieve in these videos. there's just enough formality and precision in your writing that when you slip in the odd bit of humor it ends up really punchy for how simple it is. i'll be thinking about "happiness is only temporary. the nightmares are about to begin." for the rest of the day

  • @TakuikaNinja
    @TakuikaNinja Год назад +40

    This was agonising to watch as someone learning homebrew development... Keep it up.

  • @nervaaugustus7089
    @nervaaugustus7089 Год назад +24

    Holy sprite flicker, Batman! God I never knew Strider NES's sprite graphics code was such a dumpsterfire. Really enlightening how you went through it though, explaining why all the bizarre sprite weirdness happens.

  • @zargon45
    @zargon45 Год назад +41

    I had no idea anyone managed to mess up the frame draws so badly on the NES. Like, the first note of programming for the thing is basically "TIMING IS EVERYTHING" and we have Capcom, one of the heavy hitters (although maybe not yet in 1989), making this fundamental level of error.

    • @DisplacedGamers
      @DisplacedGamers  Год назад +30

      I think Capcom had some growing pains on the Famicom when moving from contracting Micronics to developing their stuff in-house.

    • @powerkirbybomber6503
      @powerkirbybomber6503 Год назад +14

      What's odd about this is that Mega Man 1 & 2 were released prior to Strider and yet they're far more stable than it.

    • @gordontaylor2815
      @gordontaylor2815 Год назад +19

      @@powerkirbybomber6503 I think the Mega Man games had Capcom's A-list talent working on them. Based on another comment, Strider seems to have been done by someone without nearly as much experience with the NES and then had to be fixed by a more senior programmer to get a "sellable" game in a tight deadline (all about that $$$!)

    • @asteroidrules
      @asteroidrules Год назад +6

      ​@@powerkirbybomber6503I believe it was different teams working on that. In some previous videos on this channel they looked at Mega Man's code and noted that even within the same game you could see some of the developers had different priorities.

    • @zargon45
      @zargon45 Год назад +5

      I wonder if the fact this game was only ever released in North America also indicates the quality of work behind it and that it wasn't the A team working on it. Possibly not even Capcom directly.

  • @JosephMcMurray1984
    @JosephMcMurray1984 Год назад +4

    MegaMan prioritized audio during slow down because they knew they shouldn't mess with those banger tunes.

  • @whompronnie
    @whompronnie Год назад +17

    When you overclocked it, I fully expected the code to start building the next sprites too early, wrongly predicting their next location onscreen, creating a whole new problem.

    • @T3sl4
      @T3sl4 Год назад +3

      Yeah; I got the impression that the game logic (the `main()` loop as it were) was free running, and, it'll just always do this no matter what; the buffer is sampled non-atomically. Well, that didn't happen, so it must not free-run, but does have a (apparently often useless!) wait-until-NMI flag.

  • @wraithcadmus
    @wraithcadmus Год назад +10

    I liken double-buffering to a whiteboard on a stick. The display processor is reading from one side and carefully feeding it at the right speed into the video signal, while the processor is scribbling the next frame on the other side, then you hit vblank and the NMI yells "vibe check" and kicks the right-hand edge of the board, spinning it 180 degrees.

    • @nekononiaow
      @nekononiaow Год назад +2

      That's an excellent analogy.
      Also someone switches the light off a few ms before the flip and turns it back on after it. 😉

  • @pandnh4
    @pandnh4 Год назад +10

    I swear you perfectly occupy this niche of RUclips. I have extremely rudimentary knowledge of programming and I can not only follow but enjoy the presentation.

  • @bpelectric
    @bpelectric Год назад +22

    You dove so much deeper than I did, I just spent a couple of weeks tracing the collision detection subroutine. Hope you'll look at that JP alpha in a future video - crazy how that ROM is also broken, but in different ways, and it's the version that /didn't/ ship. Some parts of the code seem more sane, but some parts clearly are less 'finished' than the US ROM. It's just completely bonkers.
    Anyway, fascinating stuff. Great video.

  • @LaMirah
    @LaMirah Год назад +40

    Loved the "Nightmare on 6502 Street" joke. These technical videos (both yours and RGME's) are always a treat and I await eagerly the next Strider video. Keep up the good work!

  • @YTDeepshock
    @YTDeepshock Год назад +19

    Commando is another one in this mold. Looking forward to more analysis on games zortching as frequently as this one.

    • @gordontaylor2815
      @gordontaylor2815 Год назад +3

      Both Strider and Commando were early Capcom releases, and so suffered from the fact that the programmers didn't know how to get the most of the NES hardware yet.

  • @malix82
    @malix82 Год назад +7

    It's genuinely fascinating to learn how these games worked way back in the day. Kinda seems like magic, but also rushed magic, and that's where the oddities crop up.

  • @Dwedit
    @Dwedit Год назад +15

    While discussing slowdown in NES games, there's also Kirby's Adventure which used two OAM buffers in RAM, which could allow for triple buffering the sprites. When you do that, you can have slowdown that's not restricted to 30FPS.

    • @ArneChristianRosenfeldt
      @ArneChristianRosenfeldt Год назад +1

      I like the solution on the C64: there are only 8 sprites in total and you have your software multiplexer. Then your time line just continues through the frames.

  • @juliewinchester1488
    @juliewinchester1488 Год назад +2

    "But happiness is only temporary. The nightmare is about to begin." is about the rawest thing I've heard on this channel, it came so far out of left field I legit had to pause for a second to think about what I'd just heard.
    I think what made it better is your _casual monotone_ way of explaining things.
    Stryder: LET'S FUCKING GOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO-

  • @AhmadAlMutawa_abunoor
    @AhmadAlMutawa_abunoor Год назад +7

    This is a very informative video and provides the required amount of details for programmers, debuggers, reverse engineers and hobbyists alike. Keep it up.

  • @michaelcalvin42
    @michaelcalvin42 Год назад +19

    That joke about missing the bus killed me xD
    If the devs had just programmed the NMI routine to skip updating sprites if the frame wasn't ready, and the main game loop to spin while waiting for the NMI to update sprites after finishing a sprite rebuild, at least the sprite glitches would have been fixed (at the cost of bad slowdown, maybe, but that's the price you pay sometimes.)
    I'd definitely love to see more videos on other broken aspects of this game. I can't wait to see what other treasures it holds.

    • @gamalielshapira
      @gamalielshapira Год назад +3

      I’m guessing one of the goals was to try to provide a quick-action analogue to the arcade title, so slowdown was to be avoided at all costs. Never mind that the famicom port was more of a Metroidvania than an action platformer.

  • @etansivad
    @etansivad Год назад +5

    Loved this video. This is the only channel where I give every video my 100% attention. I rented strider several times as a kid and wondered why it was so janky. My assembly skills are minimal (systems automation engineer by trade.) So it's a big treat to have you explain the assembly side of things.
    Thank you for posting this.

  • @warmCabin
    @warmCabin Год назад +3

    The Mega Man 2 dev was clearly very particular about music slowdown. He did the thing you showed where you run the sound engine even on lag frames, but there's a certain bank switch routine that's too delicate to be interrupted by that. Instead of giving up, he sets a separate flag to tell the delicate routine to run its own emergency replacement sound engine when it regains control.

  • @BibleClinger
    @BibleClinger Год назад +2

    This is one of your best videos. I'm looking forward to more on Strider. The Larry and Moe playback at 3% was incredibly revealing and entertaining.

  • @DavidJones-kz6ik
    @DavidJones-kz6ik Год назад +12

    It's funny how much the flickering bothers me as an adult revisiting the NES, but never bothered me much as a kid. I noticed it then, but didn't let it get in the way of trying to enjoy the game. Even the lag on some games didn't bother me much at all. Innocent days of youth.

    • @CarlosXPhone
      @CarlosXPhone Год назад

      I mean, you're not WRONG, per se... but Strider here...? I dropped it. Because the glitches were unbearable, in addition to the slog, and dragging gameplay. It was off putting.

    • @ArneChristianRosenfeldt
      @ArneChristianRosenfeldt Год назад +2

      What bothers me is that NES could only read 16 bytes in horizontal blanking interval from dedicated RAM in 1984 where the original Mac run at 8 MHz. A flag for 16x8 sprites would have also saved CPU time.

  • @Midee
    @Midee Год назад +2

    Never would've thought that overclocking could actually *fix* graphical glitches, but then again NES Strider was just one of those games with it's very own brand of jank. Please delve into more of this oddball title, I love it.

  • @l9m241
    @l9m241 Год назад +2

    After watching RGMechEx about the NES scanlines seeing how adding more "time" by adding more scanlines is so intriguing.
    This is an example of how timing on the hardware side is extremely important and taking too long (especially with unoptimized code) can cause issues.

  • @MrTropicalFusion
    @MrTropicalFusion Год назад +3

    This game brings up good memories from my old NES days. I enjoy your technical videos and am happy to see another post! Thank you!

  • @Fogoat
    @Fogoat Год назад +3

    Strider NES has a lot of interesting bugs in it's collision detection as well. I think another video looking into that would be a pretty interesting topic to go over.

    • @DisplacedGamers
      @DisplacedGamers  Год назад +3

      Doing work on collision detection right now. Movement and collision detection seem to be "overdone" so far, imo. I'll keep working.

  • @LegendBegins
    @LegendBegins Год назад +2

    Love how aggressive this video got toward Strider. Excellent work as always!

    • @DisplacedGamers
      @DisplacedGamers  Год назад +2

      Thanks. I thought it would be easier to poke at it since the game is still fun to play. I'll always come to the defense of any given programmer no matter what era their work hails from.

  • @slipperynickels
    @slipperynickels Год назад +5

    strider was one of my favorite games as a kid and even then i could tell it was held together with tape and bubblegum.

  • @StevenQBeatz
    @StevenQBeatz Год назад +15

    This was interesting! I hope you can also explain why the jumping is so glitchy too lol.

    • @pete-p4t
      @pete-p4t Год назад +6

      i bet collision logic did not finish before the nmi kicked in and positions/state is taken to the next frame with old data of the last frame.

    • @djmips
      @djmips Год назад +8

      @@pete-p4t collision logic is not tied to the NMI - it doesn't read from OAM like the PPU does. The collision logic problems are more likely to be just ordinary bad coding and not frame timing related but we will have to wait and see until Displaced does the analysis.

    • @CarlosXPhone
      @CarlosXPhone Год назад

      ​@@djmipsmoreover, the collision between the characters and the graphics (platforms, objects, item, etc) don't have the right clipping for the pixel. Mega Man 5 and Metal Storm has great examples of good clipping (attaching character to platforms for example).

  • @toronaldaris
    @toronaldaris Год назад +6

    "A delayed game is eventually good, but a rushed game is forever bad." - S. Miyamoto.
    I have to believe that while this behavior was partly intentional. I also have to think that it was due to a rushed dev time.

    • @ShaneRimmerWorld
      @ShaneRimmerWorld Год назад

      You aren't wrong, but Strider for the NES was one of my favorite games for the system; warts and all. I even managed to beat it once somebody told me the trick with the plasma arrow to beat Matic (which I was sure wouldn't work and then my jaw dropped when Matic just stopped)

  • @ThickCutOhio
    @ThickCutOhio Год назад +17

    I was born in 1983. When I was a kid I was one of the first generation to have a computer in my classroom from kindergarten to the 12th grade. The only thing was, we were only taught the computer as a “play thing”! We never looked at it as a tool or something serious. But I’m those days most people looked at them the same way. I’m so intrigued by this coding and logic.

    • @grafxgear
      @grafxgear Год назад

      Interesting. I was born a few years earlier and we were using our computers for word processing and coding in BASIC. Learning how to use programs, save our work and creating different types of code. Sure, we still played Carmen Sandiego but we did a lot more than just use computers as play things.

    • @ThickCutOhio
      @ThickCutOhio Год назад

      @@grafxgear well you were just lucky that someone had the knowledge to teach that. And, I’m talking about the early years. Latter on in the grade levels we learned these things. When I say “play things I was speaking in the figurative sense. Plus learning word processing is different from learning how to program the word processor.

    • @grafxgear
      @grafxgear Год назад

      @@ThickCutOhio Yes. We were being taught BASIC around 4th or 5th grade. If I recall we had some sort of robot kit around 7th and 8th grade, so that came a little later. But as I mentioned we also had access to the computers to do out class work as well. Games were more of an after class or rainy day activity.

    • @ThickCutOhio
      @ThickCutOhio Год назад

      @@grafxgear and also my day add, we never looked at Nintendo as if it was a computer we just didn’t have that kind of paradigm to us a Nintendo was just a Nintendo.

  • @TopShelfTheology
    @TopShelfTheology Год назад +4

    I'm actually in the middle of a re-run of Strider 2014 on the xbox360, so this is quite timely. I have to say, the 2014 version really looks amazing, and I always liked that star with a leg missing logo, and I had forgotten that that wasn't new for that edition. Even the NES - buggy as hheeeellllllll, still had panache and style.

  • @braveitor
    @braveitor Год назад

    What I love about computing and games is that there's ALWAYS a logical explanation for everything, even the small glitches, and as the technology continues to evolve, with new tools and knowledge, there are bugs and things that can be fixed that were considered impossible back in the day. Great job and explanations!

  • @jasonblalock4429
    @jasonblalock4429 Год назад +3

    If you ever do another video on Strider, I'd love to see you talk about that weird loading(?) freeze that would occasionally happen before certain special events, like data discs dropping in. I don't know if I ever played another NES game that visibly paused to load(?) something in. Even as a kid, I recognized how utterly janky that was.

    • @DisplacedGamers
      @DisplacedGamers  Год назад

      What is the fastest route to reach a point where that happens in a game? I would need to try to replicate it and make a save state right before it happens.

    • @jasonblalock4429
      @jasonblalock4429 Год назад +1

      ​@@DisplacedGamers There's one instance just a bit further on in level 1, when you find the general who says Kain is above, and you level up. There's a noticeable ~1sec pause as you enter his room, then he just pops in.
      I remember it happening a few more times across the game, but that's easy to get to.
      For that matter, a couple screens before you get to him, a corridor does this weird purple flashing thing, and I've never known why. It feels deliberate enough that it must have a purpose, but it isn't obvious.

    • @TravisTev
      @TravisTev Год назад

      @@jasonblalock4429 I believe the flashing is likely part of a transition during which the game changes palettes and tilesets for the boss room. I've seen speedruns where gamers clip through walls, and bypassing the transition results in scrambled graphics from the level instead of the proper boss room graphics.

    • @jasonblalock4429
      @jasonblalock4429 Год назад

      @@TravisTev Yeah, that makes sense. Also, now I need to look up speedruns for this. As broken as it is, they must be wild. 🙂

  • @FluffyTheGryphon
    @FluffyTheGryphon Год назад +1

    I'm loving this foray into "The game is just broken, but they shipped it anyway" deep dive stuff you've done so far.

  • @TravisTev
    @TravisTev Год назад +1

    Strider was such an intriguing and nostalgic game to my brother and I, especially because of its eccentricity. I honestly like the design and concept; it's just funny how it ended up looking like an unfinished and unpolished demo. I'd definitely love to learn more about its code. There are so many things about it that make me scratch my head, from the strange and janky jump animations to the music glitching out when pausing the game to the incredibly long delays for no apparent reason after a dialogue with an NPC before the game engine finally starts running again… almost an endless list.

  • @vdubs4189
    @vdubs4189 Год назад

    Haven't even watched the video all the way through. As soon as the "sprites may not finish drawing" text appeared I immediately understood just how badly this is coded. Knee-jerk reaction was something along the lines of "Oh. Oh no. No no no. God, why?"
    Good stuff.

  • @kri249
    @kri249 Год назад

    I'm sure I mentioned this in previous comments but sometimes the best way to understand how a game functions right is to see how it functions wrong. And since we can't tweak these parameters and observe their effects (unless you're coding a game from scratch) these old buggy games serve as great examples to learn from.
    And this video did a great job at explaining the technicalities of it in a simplified manner.
    I just wish my friends were more interested in the behind the scenes of retro games like I am, or I'd be sharing these videos more often.

    • @DisplacedGamers
      @DisplacedGamers  Год назад +1

      Thank you. I appreciate your comment, and may I just say - I wish your friends were more interested in this stuff as well! Ha. However, I understand it is a niche topic versus the majority of gamer-related YT entertainment.

  • @KrunchyTheClown78
    @KrunchyTheClown78 Год назад +3

    Great video!
    I've become very interested in the differences, advantages, and disadvantages in that generation of consoles, the NES, 7800, and SMS. Could you do a video on that sometime? that would be such a fascinating video!

  • @MoisesCharles
    @MoisesCharles Год назад

    This video was suggested to me by RUclips. 40 seconds in, I subscribed. Looking forward to seeing your other content after this vid!

  • @CarlosXPhone
    @CarlosXPhone Год назад

    I was recommended your video here. I always chalked these flickerings as glitches as a kid, not understanding that the delivery was delayed. 😮

  • @spider-ball
    @spider-ball Год назад +3

    7:48 This would make for an interesting lesson in an Assembly Language course as this example would teach both polling and interrupts as ways CPUs can handle I/O in the same program. (I see you there Caps Lock: I know polling is waiting on a port to have data to read, but even outside of a memory-mapped system like the 6502 you can call this kind of loop that waits for memory to change as polling.)

    • @ArneChristianRosenfeldt
      @ArneChristianRosenfeldt Год назад +1

      You could append code to the NMI routine to check the state of the controller button. No idea on what else you want to wait? Games have their one and only game loop. At least on 8 bit and 16 bit systems.

  • @Dark.Shingo
    @Dark.Shingo Год назад +4

    This is so fascinating and for sure that I want more!

  • @GameSack
    @GameSack Год назад +1

    Good video. I hope you do this with Commando. That's even worse. I wonder if it has *anything* in common with Strider.

  • @BenHeckHacks
    @BenHeckHacks Год назад +2

    Always found this game to be super wank. Didn't even feel like Capcom quality. Guess I'll now find out why!

  • @solembum78
    @solembum78 Год назад +1

    Always a pleasure to see new video from you! Informative, fun, relaxing, meditative in a way 😌

  • @salvatronprime9882
    @salvatronprime9882 Год назад +3

    Double Dragon also had some wonky sprites, I always wondered what was going on, I suspect it's the same thing as Strider.

  • @teranokitty
    @teranokitty Год назад +4

    Love these deep dives, especially for a sorry-mess-of-a-game like Strider for NES!

  • @ArtoPekkanen
    @ArtoPekkanen Год назад

    Man, this is so good technical explanation of the issue. You explain this stuff so understandably :)

  • @spartonberry
    @spartonberry Год назад +9

    Remember that the Japanese version of Strider didn't get released. So, Capcom was surely spending an extended time to work on the English version and decided the result was good enough to release. It was only many years later we got a prototype of the Japanese version dumped (and even then, it's a suspicion I have it was possibly dumped from a bootleg "reproduction" cart, as I've heard the Japanese collecting scene can be even more selfish about hording unreleased games than their western counterparts. There was drama around that same time of getting the Monster Party prototype out, and that was a game even higher on the preservation scene's wishlist as they had already known for a decade that the released English US had signs in its data of removed content.)

    • @djmips
      @djmips Год назад +2

      Does the 'prototype' glitch as well?

    • @HowManyRobot
      @HowManyRobot Год назад +1

      @@djmips Just tested it out and it feels like they cleaned it up a bit. It runs pretty similarly to the overclocked US one without being overclocked, so the sprites are less glitchy and the collision detection (at least for the sword) works better. They changed the text drawing routines in the pre-mission briefings and got rid of the lightning in the background of Stage 1 as well. Overclocked, the Japanese version runs really well, at least until you stumble into one of the glitches that wasn't caused by the timing issues.

  • @sirflimflam
    @sirflimflam Год назад +1

    Really cool. I often wondered about this when I was younger. We all experienced weird glitches on the NES, but Strider was in a class of its own. It's interesting to know why it's as ridiculous as it is.

  • @Ristarite
    @Ristarite Год назад +1

    always wondered why this game just... looked like that. great video!

  • @TheSektorz
    @TheSektorz Год назад +9

    Can you check borderline visually broken NES games like Pitfall too? I'd love to learn about the subpar programming of a game that plays and looks this messy

    • @DisplacedGamers
      @DisplacedGamers  Год назад +2

      I believe a developer actually took Super Pitfall and basically rebuilt it with upgraded graphics and more a few years ago.

    • @paraflex5621
      @paraflex5621 Год назад +2

      +1 on super pitfall. Oh yeah the 30th anniversary mod looks amazing, much needed overhaul. Super pitfall is prob one of the earliest games to have simultaneous vertical and horizontal scrolling, and has some pretty interesting graphical bugs, possibly as a result. Sprites randomly appearing in the wrong places, disappearing etc. It also has some horrible loading times. It might be interesting to examine these issues

  • @tharaxis1474
    @tharaxis1474 Год назад +6

    I wonder if there wasn't some devkit or dev environment discrepancy that gave them more available CPU time before the frame interrupt that didn't manifest the issue until running on actual hardware, and by that point it was too much work to just redo everything.

    • @ssl3546
      @ssl3546 Год назад +3

      No the developers just didn't know what they were doing. There was no 'super powered NES' dev kit in fact on the NES there was no widely available development hardware at all. Games were programmed in DOS and burned onto EEPROM for testing.

    • @djmips
      @djmips Год назад +2

      That certainly does happen on modern games for consoles which are often developed on robust PCs and the devs don't check on the console often enough and get behind on their optimizations and GPU problems but as @ssl3546 says back in the day they had to test directly on the hardware.

  • @SoulBlazer08
    @SoulBlazer08 Год назад +4

    I noticed some flicker and what not playing this as a kid, but I didn't know HOW BAD it was! As you said, it seems OK for the most part running in real time. I still really like this game.
    So the TL:DR answer is sloppy programming. Someone at Capcom didn't fully know (or respect) the limitations of the NES.

  • @jinx20001
    @jinx20001 Год назад

    ive just stumbled across this channel and let me tell you... its going to be a pleasure to fall asleep to, i never knew i needed it, but i do. have a sub. totally no offence by the way, genuine enjoyable watch/listen.

  • @GreatCollapsingHrung
    @GreatCollapsingHrung Год назад

    New videos from Displaced Gamers and Retro Game Mechanics Explained on the same day? There is a Santa Clause!

  • @garshanarny
    @garshanarny Год назад +5

    Please do more Strider! It's always struck me as pretty much a playable prototype. Learning about this is a big deal for me. How bout that wall jumping? Oof!

    • @DisplacedGamers
      @DisplacedGamers  Год назад +4

      Wall jumping is on the list.

    • @garshanarny
      @garshanarny Год назад +1

      @@DisplacedGamers so glad! :D

    • @Laurell_Silentshade
      @Laurell_Silentshade Год назад +2

      Was this the first game to do wall jumping or is that wrong?
      Either way, by the time Super Metroid rolled around (perhaps pun intended?), there was at least a good visual queue of when to press the jump button. Definitely looking forward to a video on that.

    • @garshanarny
      @garshanarny Год назад +2

      @Laurell_Silentshade idk who did it first, but Strider definitely did it worst. It's effectively impossible. I only fumbled through the game thanks to the turbo function on my NES Advantage joystick, which at least made the wall jump technically occur, but only sometimes, unpredictably, intermittently. NES Batman demonstrated how to do it right.

  • @marx4538
    @marx4538 Год назад +1

    I remember Donkey Kong Land having a lot of stuff like that where garbage graphics appear, and it was very noticeable

  • @Lilithe
    @Lilithe Год назад

    What a beautiful nightmare. I've missed your videos. This is brilliant!

  • @ya64
    @ya64 Год назад

    I always find it fascinating to learn how these old games work, specially how developers manage to work around the limitations of the hardware at the time.

  • @thedude5295
    @thedude5295 Год назад +8

    Any chance you could look into Milon's Secret Castle code and figure out what you'd need to do to start out with full life after you die to avoid the grind? I think you'd find it interesting because of the trail of values that lead to it. I was only able to get so far and I got lost, after several times of trying to piece it together.

    • @NesrocksGamingVideos
      @NesrocksGamingVideos Год назад +3

      That's an easy rom hacking task. Let me try. Will be back soon.

    • @NesrocksGamingVideos
      @NesrocksGamingVideos Год назад +10

      I'm back. Took me longer to understand what you wanted since the game doesn't seem to have a concept of lives. Had to look up a faq to see that I had to beat the first boss and then enable the continue cheat. I've confirmed that the code that sets your starting life is the same regardless of continuing or starting a new game. So, to always start with full health use these game genie codes that I've created: SZSANXOZ + ULSEEZAZ

    • @DisplacedGamers
      @DisplacedGamers  Год назад +4

      "Easy rom hacking task. brb."
      Love it, NesrocksGamingVideos!

    • @briankarcher8338
      @briankarcher8338 Год назад +5

      @@NesrocksGamingVideos Wow, quick response! You're every Qa person's dream pair :)
      Qa: I found this nasty bug!
      You (two seconds later): Fixed, what else you got?

    • @thedude5295
      @thedude5295 Год назад +1

      @@NesrocksGamingVideos Awesome brother. I'm going to give it a try and get back to you about it!

  • @alphago9397
    @alphago9397 Год назад

    Amazing detail, would love to see an entire series on this game if there's more to cover as well as for other games. This is especially interesting to me because I've always been a big fan of the Sega and arcade versions of Strider.

  • @DouglasZwick
    @DouglasZwick Год назад

    This is so excellent. I've always been kinda curious about Strider, but it wasn't until just recently when Jeremy Parish did a Metroidvania Works video featuring it that I found out how busted the damn thing is. I'm really glad that I got to see you take it apart like this!

  • @matthewrease2376
    @matthewrease2376 Год назад +1

    "happiness is only temporary, the nightmares are about to begin"
    Bro went hard with that quote 💀

  • @Sonicgott
    @Sonicgott Год назад

    This was an absolute treat to watch. It’s amazing how many programming shortcuts that were taken when these games were developed.

    • @VashStarwind
      @VashStarwind Год назад

      Well it was like 10x harder to program those games than today, with less resources so its kind of understandable

  • @marcinmenelik6850
    @marcinmenelik6850 Год назад +3

    In the topic of broken games, I'd love to see explanation of how the heck collision detection work in sky shark. The game is lovely and broken at the same time...

  • @fuzzix
    @fuzzix Год назад +2

    I like this. As if the game logic and PPU have divergent cadences but it still results in something acceptable - like NES game euclidean rhythm.
    Gets a bit weird sometimes, but go with it.

  • @bingusbongus9807
    @bingusbongus9807 11 месяцев назад

    one of your best videos yet, you are very right that this is an entertaining idea, i love it!

  • @LeftyPem
    @LeftyPem Год назад +6

    I’d watch a whole series on Strider. This game has some of the weirdest coding from an A list studio I’ve ever seen.

  • @asteroidrules
    @asteroidrules Год назад

    Very interesting stuff. Coming from more modern programming my initial thought for the sprite coordinate confusion was it looked like reading the attributes of the wrong instance, since "Larry" and "Moe" are different instances of the same objects. In a way I guess it kind of was, the two entities were getting mashed together.

  • @TheNets
    @TheNets Год назад

    I loved this video. Great way to learn about computers.
    It's nuts to think about big titles having these kinds of fundamental issues. It makes me think that is something very common no matter what project or company we work on.
    Have you ever thought about how airplanes fly? I'm not questioning the physics behind it, I'm questioning the code.

  • @aaronmrod1
    @aaronmrod1 Год назад

    I used to love this game...thank you for destroying my childhood! 😅 In all seriousness, this video was an eye-opener and really interesting, thank you for taking the time to research and create it! 😊

  • @syntaxerror9994
    @syntaxerror9994 Год назад +1

    I would love to see a similar video about Super Pitfalls jank. That game gets some very weird glitch graphics. It's not as popular of a game...hated even. But I bet it be a great example of what not to do.

  • @ApollousasBear
    @ApollousasBear Год назад

    I noticed only 10% of what was going on in that sequence at 1:20 when played at normal speed, and for some reason it reminded me of that scene from Johnny English with the micro-expressions when you lie.

  • @BagOfMagicFood
    @BagOfMagicFood Год назад +1

    I'd like to see how many games have fewer graphics glitches in PAL conversions due to getting to run more instructions per frame when only needing to output 50 frames per second. One thing I observed in Linus Spacehead's Cosmic Crusade/Cosmic Spacehead is that the top few scanlines are often displaced or discolored on NTSC, depending on what you're doing, but the top looks perfect all the time on PAL, because it's no longer running out of time to get the scroll position back in place after outputting the status bar.

  • @ChaossX77
    @ChaossX77 Год назад

    These were some great guesses. I think you even got a couple things right. Kidding!

  • @novaleader7305
    @novaleader7305 Год назад +2

    I live for videos like this, I love being able to understand WHY shit is jank

  • @gblargg
    @gblargg Год назад +2

    This game was so hilariously glitchy playing as a kid. Emulators really have come a long way in visualizing timing and other things. The graphics illustrating time usage in a frame were great.

  • @ShinoSarna
    @ShinoSarna Год назад +2

    I wonder if this was result of a decision from a higher up that 'we can't have slowdown'.

  • @CyclesMcHurtz
    @CyclesMcHurtz Год назад

    Really well done description of the crazy timing game devs are supposed to plan for. The reason for this kind of error in code is typically due to forced release on a schedule back when the time between finishing and publishing was months, and long before the ability to patch. The fix is to mix around the code so the sprite building is scheduled in a different place, and substitute some other code in that area. You can optimize in many ways, and reschedule .. but only if the development team is given adequate time and a flexible release date. Crunch is toxic.

    • @djmips
      @djmips Год назад +1

      I contend this was made by a junior dev - so not just a schedule issue.

    • @DisplacedGamers
      @DisplacedGamers  Год назад +3

      The coding part of the development team may have only been handled by a single programmer. I wouldn't be surprised if that programmer didn't have enough experience with the Famicom yet. It was originally meant for Q4 1988 in Japan and only ended up getting a U.S. release in Summer of 1989. It is possible they shelved it and had someone else finish it for the international release in order to get some money back.
      Prior to that period, Capcom contracted development work for their Famicom titles out to Micronics. The 1987 to 1989 period was quite a period of growth for Capcom's understanding of the hardware. Ironic in that it was so late in the system's lifespan and that Capcom ended up making some great titles on the system.

  • @low_e_music
    @low_e_music Год назад +1

    Great explanation on this games issues. Despite how "broken" the game is, though, it's still one of my favorites on the system. I kinda just got used to the problems I guess.
    Would love to see a rom hack or re-release with the problems fixed someday.

  • @alexander_mejia
    @alexander_mejia Год назад

    Incredible work as always. Keep it up.

  • @rezephuafrogs4021
    @rezephuafrogs4021 Год назад

    Omg, I absolutely lost it at the ten minute mark. Well done sir.🤣

  • @chadhartsees
    @chadhartsees Год назад

    LOL. Nightmare on 6502 Street. Loved this game as a kid, and it's quirky physics. It just played and looked different. I'm wondering how much of that was unintentional, now, after this video and the next one you did.

  • @creepingdeath9795
    @creepingdeath9795 Год назад

    This was such a strange game to my 13 year old brain as a kid.
    I remember thinking what's this game about and also remember thinking that the game was giving us clues to solve in order to complete the objectives.
    Why does the wall turn red when I back away from it or other strange behavior in the graphics.
    Simon's quest was also another one and despite the strange behavior the game displays at times, they are forever remembered for giving me some of my greatest video game playing experiences.

  • @adriansdigitalbasement
    @adriansdigitalbasement Год назад

    Excellent explanation! And I suppose this type of overclock helps eliminate slow down on other games?

    • @DisplacedGamers
      @DisplacedGamers  Год назад +1

      Thanks, Adrian. I loaded up Zelda and Mega Man 3 in the same places as in my examples, and they seemed to handle the work with ease. Mega Man 3 needed a bit more oomph, though. I kicked it to 500.
      (Of course Zelda was also ported from the Famicom Disk System and has to execute extra code per frame for all of the bank switching on the cart that was unnecessary on the disk system. It probably runs a bit better at native speeds using the original code)

    • @arciks11
      @arciks11 Год назад

      Yes I remember using that function when playing MM1 to reduce slowdown.

  • @tsht
    @tsht Год назад

    Really interesting, yes please do more ^^ I wonder if it exists games that use the remaning time before NMI to make some long or looping calculations

  • @nickfarace9339
    @nickfarace9339 Год назад +1

    After seeing so much about how these early consoles synced up with the fast process of scanlines, I always wondered what would happen if this got screwed up. Never figured it would be borderline intentionally but hey, at least there is an answer

  • @joesshows6793
    @joesshows6793 Год назад +4

    Moe and Larry??? I love it!

  • @Multienderguy37
    @Multienderguy37 Год назад +1

    10:10 I laughed out loud at this. Great editing and comedic timing.

  • @Vuusteri
    @Vuusteri Год назад

    Very explanatory! If you go through NES bootleg games, I'm sure you find plenty of broken code. But maybe those can be fixed by overclocking as well. With your skills, you could maybe even fix the music of Crazybus on Mega Drive :D

    • @mrmimeisfunny
      @mrmimeisfunny Год назад

      Crazy Bus was never supposed to be released on a cartridge it was just a test program for a Basic Compiler. The "Crazy bus music" was just the testing if the RNG works.
      So I doubt it can be fixed. Maybe if you update the basic code to just increase in pitch instead of calling the RNG so you have a normal diatonic scale instead of complete randomness.