14 ms·
The NES Homebrew Scene
- OrganicMSG 9y agoOf course it isn't just driven by nostalgia. It also requires a constant supply of coffee, for one thing.
- ashleyn 9y agoThe appeal of retro console/computer dev is essentially an exercise in constrained programming. Systems of these era had extremely constrained specifications, and making the most of them is an art in itself.
- ythn 9y agoSometimes I wish we had more constraints because I fear we've all forgotten how to write fast and lean code in favor of semi-fast but very bloated code. I remember back when I first used Windows 95, opening programs was very snappy and I was impressed. I imagined Windows of the future being even snappier, but somehow the opposite has happened. Now every application takes a long time to boot up, check for updates, etc just because they use orders of magnitude more resources. I long for apps with instantaneous startup times, no loading screens, and small footprints
- CM30 9y agoI've often thought it would be useful to encourage developers to make at least one project for an old computer or games console before they make anything more modern, just so they learn about the importance of constraints and what not. Maybe after that they might stop trying to throw resources at problems to make them go away and start thinking how their code actually works. I also believe game designers/developers should work on at least one retro game or mod for similar reasons. Teaches them how to actually design levels without thinking about the artistic side, and (thanks to some brutal moderation requirements on the sites hosting this stuff) forces them to get better at game design rather than just walk through Steam/the app store's non processes.
- tonyarkles 9y agoThis came up in the RachelByTheBay thread the other day[1] about how she got started... My computer progression started with a Vic-20 (3kB of RAM), followed by an XT (640kB), followed by a Pentium 133 (16MB of RAM). While the Vic and the XT really taught me a lot about how to write lean & mean code, the Pentium really acts like my baseline for what a resource-constrained GUI system can actually accomplish. I could surf the web and talk in multiple IRC rooms quite comfortably (woo mIRC!), probably with ICQ running as well. The fact that Slack is currently idling with an RSS of 1.3GB is bloody offensive in that lens. 81x the memory footprint of the entire machine I used to do all my web browsing on. I really like your idea of encouraging people to try getting code running on older machines. I really understand that someone who didn't cut their teeth on a 3kB RAM machine won't have the same appreciation for constrained memory computing, and I think your suggestion is a great way to introduce them to it. Thanks for the thought! [1]http://rachelbythebay.com/w/2018/04/04/learn/ http://rachelbythebay.com/w/2018/04/04/learn/
- JTxt 9y agoRight, I remember advanced 3d software fitting on a floppy. But now a simple Android app can be over 50mb. No you don't need a video on your login screen.
- lmm 9y agoWe haven't forgotten, we choose to put our time and energy into features rather than performance because that's what end users care more about (at least, it's what they vote with their feet for).
- ythn 9y ago"tragedy of the commons" I as a freelance developer sometimes make releases whose sole purpose is to refactor/slim down/increase performance with no new features. Yeah, some of my users are disappointed I didn't prioritize X feature they wanted, but it helps mitigate tragedy of the commons a little. Individually the users are well-meaning with their feature wants/needs, but collectively all the different feature requests can turn your app into a bloated monstrosity if you aren't careful.
- chongli 9y agoSome things have been lost, though, and I'm not even referring to the usual claim about constraints facilitating creativity. Games of the 8- and 16-bit console generations, as well as all arcade games up until that point, were written with CRT monitors in mind and often used 'racing the beam' techniques. This resulted in games with extremely low latency, something you never find in a game of any sort today. The difference can be felt when comparing a game like Super Mario Bros running on an emulator with a typical LCD screen to running on original hardware with a CRT monitor. The emulated version is so sluggish it feels like you're playing underwater!
- lmm 9y ago> Games of the 8- and 16-bit console generations, as well as all arcade games up until that point, were written with CRT monitors in mind and often used 'racing the beam' techniques. This resulted in games with extremely low latency, something you never find in a game of any sort today. The techniques haven't been lost - if anything there are probably more people who know how to do those things today than there were in the past. Typical LCD monitors are undeniably worse in many ways than the CRTs they replaced, but again, most customers turned out to prefer the convenience of the LCD on the whole. Nowadays with the rise of 144Hz monitors those rare users who care a lot about gaming latency do have an option.
- deleted 9y ago[deleted]
- ashleyn 9y agoIt's a dying art because now even the cheapest SoCs are capable of running full Linux with a big stack like Node. The Pi Zero is $5 and capable of all these things. Perhaps the last refuge is battery-powered microcontrollers.
- pjmlp 9y agoNot necessarily, when you need to have something that will last 5 years on battery power and not cost more than $1 per piece, a Pi Zero won't do. But even then, if they have up to 512 KB, is like having the same tooling as on the Amiga, Atari, PC (MS-DOS) on a needle size CPU. For younger generations, you can check on YouTube what we managed to do with 512 KB on those systems, even when using higher level languages.
- tluyben2 9y agoDepending on the market you can save millions in production picking a cheaper, less powerful mcu. Sure it takes some extra work to squeeze in more features in less flash and every cycle counts, but on runs of millions of devices, this is easily paid back by the extra profits.
- s73v3r_ 9y agoDefine "bloated code".
- francisofascii 9y agoOn a related note, video games today seem to take forever to load. Plus you have to go through several menus to customize your experience before playing. For the NES Mario, you simply power on, start.
- jsheard 9y agoIt's really amazing how people keep finding ways to make old hardware do new tricks. Overdrive 2 is my favorite example - it's a Sega Megadrive demo that was released 30 years after the Megadrive launched, but still managed to pull off multiple effects that had never been seen on the system before. It abuses the hardware in such unique ways that no emulator can run it properly. http://www.pouet.net/prod.php?which=69648 http://www.pouet.net/prod.php?which=69648 / https://www.youtube.com/watch?v=gWVmPtr9O0g https://www.youtube.com/watch?v=gWVmPtr9O0g
- hood_syntax 9y agoThat is amazing. My family had one when I was a kid and I loved it, but what they did there is insane. Way more than I would have thought possible, and I hold that console in high regard.
- deleted 9y ago[deleted]
- nkozyra 9y agoThe best games age well. People still play pac man. People still play Mario. That said, the aesthetic is absolutely nostalgic.
- foobarrio 9y agoThe aesthetic serves a purpose though. Hi-fi 3D game assets take orders of magnitude more work to create than low-fi 2D ones. I agree that nostalgia and familiarity are what allows gamers to accept NES-style graphics as a valid form of low-fi 2D art. The creator of Stardew Valley mentioned he wouldn't have been able to finish the game had he had to create 3D assets that looked as good to people as the current 2D art. Having people accept NES-style pixel art is a boon to indie devs. Games like Super Meat Boy have higher res 2D graphics but is still a similar aesthetic. Low-fi poly is also a retro art style. However I've noticed that low-fi poly games are still rendered in high resolution and using more advanced lighting techniques so still requires more work than low-fi 2D.
- wgerard 9y agoSomewhat related: I'm always thoroughly impressed with how complicated and knowledgeable the people who work on these topics are. I don't even use the product, but I love reading the Dolphin blog [0] because they write about fairly complicated topics in a way that's pretty approachable, and it always makes me appreciate how much I don't know about these topics. While I feel like it would be difficult-but-not-impossible to be a contributor to say, the linux kernel (this is probably me grossly oversimplifying the process), I think I could spend the next year diving into graphics programming and basic hardware topics and still not contribute in any meaningful way to a project like Dolphin. Articles like this and the Dolphin blog definitely make me realize how much I don't know. 0: https://dolphin-emu.org/blog/ https://dolphin-emu.org/blog/
- xfer 9y agoThe difference is domain knowledge, it takes time. You might feel that way about kernel because the high level concept of resource management is pervasive in programming. So you might feel you can easily dive into it, but it will take you equally long to say port the kernel to a new architecture/write drivers for a new platform.
- deleted 9y ago[deleted]
- agentultra 9y agoI literally just wrote my first ROM that displays a green box on a black background working on my retropie machine last night. The NES homebrew scene is pretty cool and the tools and languages have come a long way. One interesting avenue that might be work exploring is to use code generation and CSPs to generate and shrink code. It's a lot of fun. It's why I like the PICO8. Constraints are interesting. I just wish I still had my old BASIC code for games I made on my Amiga back in the day...
- ansible 9y ago> Constraints are interesting. Constraints are also helpful when working towards a sense of mastery. Look at a modern operating system (or console) for that matter. So much capability, so much complexity. You'll never learn it all, never be able to master it. Heck, just truly understanding the machine code of a modern processor, and knowing everything it does and can do is quite a daunting task. These older 8-bit systems (NES, C64, etc.) in contrast are much easier to completely understand. If you are willing to live within the limitations, you can create something really awesome, and be able to leverage the full extent of the system's capabilities. That provides enormous satisfaction to some.
- agentultra 9y agoJust understanding the intel instruction set is basicallly impossible for a mere mortal. How thick is that reference manual now?
- CM30 9y agoIt's also a matter of seeing what you can achieve on aging hardware. Can you do better than a team of professionals could in the 80s? Could you make something that pushes the console to its limits? Those types of questions are very inviting for both homebrew and ROM hack developers alike. Or perhaps before them, for those in the demoscene.
- rbanffy 9y agoI was a bit turned off by the way assembly is described as "tricky" and "tedious"... All programming languages can be tricky and tedious. Assembly (specially on the 6502) is conceptually very simple and, while it may not be trivial to translate higher-level concepts to its simplicity, as long as what you want can be readily expressed in it, it's trivially easy. You will, of course, need to know what bits to set at what addresses to make the NES auxiliary chips work and do what you expect them to do and that may represent some work but that complexity is from the platform, not the language. You can have a library (or a set of macros) that deals with it written in any language you can compile for the platform.
- JustSomeNobody 9y agoPart of the tedium is only having a few registers so programming in assembly begins to resemble solving the towers of Hanoi puzzle. But, it's certainly something every programmer should give a try at some point, if for no other reason than just a mental exercise.
- wolfgke 9y ago> Part of the tedium is only having a few registers so programming in assembly begins to resemble solving the towers of Hanoi puzzle. Solving the towers of Hanoi puzzle can be done completely mechanically (exercise: derive the really simple algorithm). Programming in such a constrained environment is something where you have to think for yourself, since I am not aware of any mechanical solution.
- jontro 9y agoA mechanical solution would be using other languages like C
- wolfgke 9y agoUsing C you cannot get the advantages that 6502 assembly provides. On the other hand, to stay with towers of Hanoi, one can show that the simple mechanical algorithm that one can derive for it, will solve the problem with a minimum possible number of moves.
- dietrichepp 9y agoI recently started work on an NES project, and wrote the first part of it up: https://www.moria.us/blog/2018/03/nes-development https://www.moria.us/blog/2018/03/nes-development It's a lot of work. I've managed to get data from Tiled into my ROM image, and I'm working on figuring out an architecture for scrolling and displaying a status bar. Implementing scrolling and a status bar sounds simple but is actually a total pain. You only have two screens of tiles to work with, which can be arranged horizontally or vertically, and anything more complicated than scrolling in a single direction (including status bars) requires adjusting the scrolling registers between scanlines, and making sure that your status bar is in a different part of the tilemap (called "name tables") than your world. A common way to accomplish this is to lay out your graphics memory so a certain address line turns on and off once every scanline, and then putting a chip (called a "mapper") on the game cartridge which wires that address line to a counter, which drives a CPU interrupt line. Simpler games like Super Mario Bros. don't need this extra chip, but you only get a single status bar + scrolling in one direction only. Games with scrolling in both directions often display graphical glitches on the edge of the screen, like Super Mario Bros. 3 (look at the right edge of the screen). This is unnecessary on newer consoles, and less painful even on the Sega Master System.
- jacquesm 9y agoBut programming with restrictions like that will make you a better programmer. Nothing brings out creativity better than a limiting environment.
- airforce1 9y ago> Nothing brings out creativity better than a limiting environment. This is so true as a life principle! I once read a book about the development of laser guided bombs [1], and in it it talked about how Texas Instruments made the first viable prototype [2] on a shoe-string budget even though they were competing against a large government contractor with a huge budget. Because of the budgetary constraints, TI couldn't afford multi-million dollar wind tunnels for testing, so they built scale models of the bomb and dropped them into swimming pools, performing mathematics transforms on the results using the drag coefficients of water vs air. They came up with a bunch of other innovations as well, such as the shuttlecock seeker head and made a superior product that vastly outperformed the high-budget contractor. [1] https://www.amazon.com/Weapons-Choice-Development-Precision-Munitions/dp/0817315322 https://www.amazon.com/Weapons-Choice-Development-Precision-... [2] https://en.wikipedia.org/wiki/Paveway https://en.wikipedia.org/wiki/Paveway
- jdlyga 9y agoMy favorite genre of games are still platformers. 20xx (A Megaman X roguelike) is my favorite game I've played this year.
- deleted 9y ago[deleted]
- nickysielicki 9y agohttps://twitter.com/clearvus https://twitter.com/clearvus streams at 9pm EST on Mondays and Thursdays on Twitch, he has been working through making an NES game from scratch. He is off this week, but people who are interested in seeing this type of work should definitely check out his series, he deserves way more viewers! I've learned a lot from it. https://www.twitch.tv/clearvus https://www.twitch.tv/clearvus recordings are posted on youtube: https://www.youtube.com/watch?v=XwGj1ciSAtw https://www.youtube.com/watch?v=XwGj1ciSAtw
- octorian 9y agoMy own personal story with the NES didn't last that long, because I was a kid without money, terrible at platformers, and my parents wouldn't buy me a lot of games. You can only play Super Mario Bros so many times before you're tired of not making it past the 2nd level. So I eventually switched to computers (Apple II vintage), and never looked back to consoles. This past year, however, I decided to take up a little retro project based on the NES. Its best described as a "video game music player alarm clock", using some authentic hardware. It uses the CPU from an actual NES to faithfully synthesize music from actual NES games, while building the surrounding system out of modern components. First prototype in action: https://www.youtube.com/watch?v=izMFPKmD5ZU https://www.youtube.com/watch?v=izMFPKmD5ZU Blog posts detailing the project: http://hecgeek.blogspot.com/2018/02/nestronic-1.html http://hecgeek.blogspot.com/2018/02/nestronic-1.html http://hecgeek.blogspot.com/2018/03/nestronic-2.html http://hecgeek.blogspot.com/2018/03/nestronic-2.html
- phjesusthatguy3 9y agoI got to the "and these are the reasons why" section before I really had to give up. The reasons why you remember the NES over every other video game system of the era was that Nintendo were monopolizing bastards at that time, and if you (as a developer) made games for the NES to be released in the USA, you were essentially forfeiting the right to release those games for other systems in the USA. Honestly, I'm glad Nintendo got knocked down a peg on their last few systems. I'm just not happy about what they taught their competitors.
- trentnix 9y agoLove the NES and love retro gaming, but the article completely contradicts itself. It's not just driven by nostalgia, but... It says something about the legacy of the NES that most homebrewers continue to make games for the system for reasons other than nostalgia. It’s mostly because they love the NES. “I’ve always wanted to create NES games, ever since I was a kid. I remember sitting around drawing maps on paper, daydreaming of what my designs would be like to play,” explained Nathan Tolbert, a relatively new figure to the NES homebrew scene who’s already built a couple of titles for the annual NESDEV competition. So...nostalgia. One creator, Antione Fantys, wants to bring back some of the elements from retro games that don’t seem to exist in the modern generation. Because the NES is the most iconic of these systems, he enjoys programming with it, citing the limitations of the system as a means to creating the most accurate representation of a retro game as possible. More nostalgia. The article pretty much proves these homebrews are the product of nostalgia. Not that there is anything wrong with that.
- mieseratte 9y agoI used to do a lot of dev against the NES. 6502 for the NES was my first language, wrote my own assembler, built games, cartridges, etc. etc. Hell, I even have a PCB, minus the PRG and CHR ROMs, from an old Ice Hockey cartridge on my desk in front of me as I write this. Never had an NES growing up, never played one until I got into NES dev. I was turned onto it by a classmate. We're both too young to have had the NES growing up, so we simply couldn't be a nostalgia play. There's a lot of folks who get into because it's surprisingly approachable, and scratches the itch of "make a game." TFA just had a bad quote...
- trentnix 9y agoNostalgia doesn't have to be purely about one's childhood interests, although it frequently is. In your case, your interest still seems a product of nostalgia. I don't really understand why people view interests based on nostalgia as a weakness. Being nostalgic doesn't have to mean that life isn't good or that things were better once upon a time. Like what you like, do what you do, and enjoy what you enjoy without apology!
- VyseofArcadia 9y agoThe article namedrops Shovel Knight. I highly recommend the game. It's one of the best games I've ever played, even putting nostalgia aside.
- pubby 9y agoNowdays, it's impossible to do modern programming without relying on millions of lines of other people's code. It's frameworks and libraries all the way down. On the NES however, every line of code is yours. There's no such thing as libraries, operating systems, or frameworks. They don't exist. It's refreshing. One of the big problems of modern programming is how easy it is to add complexity. As Charles Moore once said: >"Simplify the problem you've got or rather don't complexify it. I've done it myself, it's fun to do. You have a boring problem and hiding behind it is a much more interesting problem. So you code the more interesting problem and the one you've got is a subset of it and it falls out trivial. But of course you wrote ten times as much code as you needed to solve the problem that you actually had." It's easy to add complexity on modern systems, but it's hard on the NES. The programming too clunky; it's too much work to anything but simple things. For that reason, it's far more common to simplify the problem and reduce features rather than add them. It's a wonderful thing.
- vages 9y agoI also adore old programs for their simplicity. However, I've come to terms with "unnecessary" complexity as a necessary cost of growth and abstraction. Each part of a bacteria, relative to its mass, may be more cost effective than that of a mammal. I'd much rather be the latter.
- TeMPOraL 9y agoIt's true insofar you also count in the evolutionary, worse-is-better nature of software development. I.e. there's lots more of complexity than it's necessary for the level of abstraction and capabilities you want, but that complexity was accrued as people developed and iterated on every layer, mostly leaving it be as it got good enough, and moving on to something else.
- digi_owl 9y agoFunny because at least over in the Linux world i feel the complexity has come as people had started hunting for "perfection". Where before you had a GUI part talk to a CLI part via pipes, now you have them talking to each other via a XML based bus mediated by multiple daemons (one for the bus, one to uphold a fine grained security layer again using XML and JSON).
- felipebueno 9y agoI haven't read the article yet but, judging by the title, I thinks this is relevant: https://www.kickstarter.com/projects/1316851183/nesmaker-make-nes-games-no-coding-required https://www.kickstarter.com/projects/1316851183/nesmaker-mak...
- FeteCommuniste 9y agoThe existence of phenomena like this and the demoscene made me realize that there are levels of programming skill that I will never be able to reach. Kind of disheartening, but still neat to watch other people do it.
- zellyn 9y agoI felt like that for a long time, and eventually it prompted me to build an Apple II emulator, and implement the compiler from the Coursera Compilers course. Simple versions of these things are not as insurmountable as you think: just put your foot on the first step :-)
- chrismaltby 9y agoSlightly related, but for GameBoy Homebrew, I've been working on a Javascript implementation of GBDK, a C library for GameBoy dev, and am using Emscripten to build a React debug tool allowing you to check out the state of the different graphics buffers and registers and print to the browser console. Bit early days but it's really helping speed up a game I'm working on. https://www.gbdkjs.com/ https://www.gbdkjs.com/ Got an example project at https://www.gbdkjs.com/examples/shooter/web/ https://www.gbdkjs.com/examples/shooter/web/
- kraig911 9y agoAh nostalgia. Everyone here should look up the original meaning of nostalgia though to really understand this. It's so apt yet so crippling.
- jimmaswell 9y agoA while ago I wanted to try some NES ROM hacking but I couldn't find any tools for it that were really convenient - I ended up typing 6502 into some online assembler to copy the output into HxD and other processes like that. So, I wrote something more to my liking that was more like an IDE. I couldn't think of a good name, but I was modding Kid Icarus at the time, and it's in .NET, so I just called it IcarusNet. It was primarily for ROM hacking, but as far as I know, it should be suitable for writing something from scratch in conjunction with tile editing programs and maybe other things you'd need. Not nearly as advanced as NESMaker (very impressive from the looks of it) seems to be, but maybe a middle ground for someone who wants to write a game more to the metal but also wants something more graphical with the same "one click assemble/run" mindset. Comes with instructions for a sample project to make an edit to a freely available ROM in less than 5 minutes. https://github.com/ldyeax/IcarusNet https://github.com/ldyeax/IcarusNet Since then I've heard that license might have some problems for software, so I'll change it if the need arises.
- phs 9y agoAs someone who simply wanted a NES assembler, I've found cc65 [0] to be great, for example wrapped as a docker image in [1]. [0]: https://github.com/cc65/cc65 https://github.com/cc65/cc65 [1]: https://hub.docker.com/r/philhsmith/cc65/ https://hub.docker.com/r/philhsmith/cc65/
- typetypetype 9y agoVery nice! One thing I always loved about Nintendo games is that you can usually just pop them in and start playing. No dragged out tutorials, setups, etc.
- TruthSHIFT 9y agoI've had a lot of fun trying homebrew games on my modded NES Classic. If you're a fan of the original Metroid, you should definitely try Rogue Dawn. It plays like a true sequel to NES metroid and it adds features from later Metroid games.
- germinalphrase 9y agoCan anyone recommend any particular enjoyable home brew games? I can see a few already listed in comments, but it would be nice to gather up a short list.
- eltoozero 9y agoBlade Buster, fast paced modern time attack shmup; very pretty, don’t forget to hit select to increase speed. My top score in 2min is 500,000+.
- germinalphrase 9y agoThat's great! (and difficult).... 100,000 is initial best. Having recently discovered OpenEmu, I'm trying to track down good homebrew/freeware games.
- lanius 9y agoAre there any uniquely impressive homebrew NES games worth playing?
- euske 9y agoMaan, I envy the homebrew scenes in the US so much. In Japan there are a few people who're doing homebrew, but because of the constant intimidation by Nintendo and marginalization by the society ("they're technically criminals.") they're not as open or organized as the US. I think we're killing our own talents.
- ricksnyke 9y agoFascinating that these scenes are still thriving, just recently saw "8-Bit Guy"'s postmortem video on writing and shipping a game for C64.