How do you publish an NES ROM?

Discuss technical or other issues relating to programming the Nintendo Entertainment System, Famicom, or compatible systems.

Moderator: Moderators

User avatar
gravelstudios
Posts: 80
Joined: Mon Mar 13, 2017 5:21 pm
Contact:

How do you publish an NES ROM?

Post by gravelstudios » Sat Oct 17, 2020 9:45 am

I apologize if this question has been answered previously, but I searched and couldn't really find the details I was after.

How do you go about publishing a new NES game on a service such as Steam? Based on my initial research, it seems that they expect the game to be a standalone executable. Does Steam (or any other similar gaming service for that matter) have some sort of "built-in" emulation that can handle an NES ROM? or would I have to somehow license an emulator to package the ROM with so it's playable "out of the box" so to speak?

My first NES game, I just put on the internet for free, but after 2 years of work, I feel that my current project is something really special and deserves more. I'd appreciate any info or advice. Thanks.

User avatar
rainwarrior
Posts: 7878
Joined: Sun Jan 22, 2012 12:03 pm
Location: Canada
Contact:

Re: How do you publish an NES ROM?

Post by rainwarrior » Sat Oct 17, 2020 10:00 am

gravelstudios wrote:
Sat Oct 17, 2020 9:45 am
Does Steam (or any other similar gaming service for that matter) have some sort of "built-in" emulation that can handle an NES ROM?
Steam does not.

GoG routinely packages things with DOSBox, but I haven't seen them publish any NES ROMs. They're also not an open platform like Steam, so you can't just pay them a fee to get your game on there.

Nintendo Switch (or virtual console on previous platforms) might have a ready-made NES emulator built into it, in theory, but I don't think anyone has published any new NES ROMs to use it, and I don't believe Nintendo is very interested in letting people do so either.
gravelstudios wrote:
Sat Oct 17, 2020 9:45 am
...or would I have to somehow license an emulator to package the ROM with so it's playable "out of the box" so to speak?
Yes.

Quite a lot of releases of old console/DOS games on Steam do this. Many "classic" releases on PS4, Switch, XBone, etc. do this.

I've seen people even embed a javascript NES emulator on their itch.io page to play an NES game directly on their website.

.

Personally I did neither with my own game and wrote a native version of the game that was identical to the NES one. There's some advantages to this (e.g. low power consumption) though I dunno if most people would think it worth it. I had made that version of the game already as part of the project because it was how I prototyped everything before committing to making it in NES form.

calima
Posts: 1209
Joined: Tue Oct 06, 2015 10:16 am

Re: How do you publish an NES ROM?

Post by calima » Sat Oct 17, 2020 10:51 am

For Steam specifically, you can use GPL emulators for free as long as you comply with the license. Ie share the emulator's source including all modifications, and if the particular emulator is GPLv3, no tivoization (not enabling the extreme DRM levels steam allows).

tepples
Posts: 22088
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)
Contact:

Re: How do you publish an NES ROM?

Post by tepples » Sat Oct 17, 2020 1:35 pm

It's been done:
  • Haunted: Halloween '86 is on Steam and Nintendo Switch using 3dSen licensed from Geod Studio.
  • Disney Classic Games: Aladdin and The Lion King is on Nintendo Switch using SameBoy.

User avatar
tokumaru
Posts: 11891
Joined: Sat Feb 12, 2005 9:43 pm
Location: Rio de Janeiro - Brazil

Re: How do you publish an NES ROM?

Post by tokumaru » Sat Oct 17, 2020 3:58 pm

APU aside, a barebones NES emulator would be pretty easy to write, and since you're aware of all the timing constraints of your own game you wouldn't even have to make the emulator particularly accurate in that regard. No need to bother with obscure quirks either, a simple 6502 core and a scanline-based PPU renderer would do the trick. If it weren't for the APU, I'd say this is the way to go...

User avatar
gravelstudios
Posts: 80
Joined: Mon Mar 13, 2017 5:21 pm
Contact:

Re: How do you publish an NES ROM?

Post by gravelstudios » Sat Oct 17, 2020 4:04 pm

tokumaru wrote:
Sat Oct 17, 2020 3:58 pm
APU aside, a barebones NES emulator would be pretty easy to write, and since you're aware of all the timing constraints of your own game you wouldn't even have to make the emulator particularly accurate in that regard. No need to bother with obscure quirks either, a simple 6502 core and a scanline-based PPU renderer would do the trick. If it weren't for the APU, I'd say this is the way to go...
I'm considering doing just this using MonoGame. Building a custom emulator just to play my game. I don't do any tricks that involve timing like screen splits. part of me feels that it is overkill, and part of me likes the challenge. I wouldn't bother with the APU anyway, I'd just import all the audio tracks and sound effects.

User avatar
DRW
Posts: 1984
Joined: Sat Sep 07, 2013 2:59 pm

Re: How do you publish an NES ROM?

Post by DRW » Sun Oct 18, 2020 7:23 am

Isn't there some emulator that someone in the NESDev community created for this specific purpose? I'd think it could be useful for anybody who wants to pubish his game anywhere. I mean, it can't really be the best solution to tell somebody to write his own emulator.

GGVm by GradualGames does something similar.
https://github.com/gradualgames/ggvm
However, it looks like there needs to be some customization.

So, yeah, how come there's isn't some go-to emulator for this specific purpose?
My game "City Trouble": www.denny-r-walter.de/city.htm

calima
Posts: 1209
Joined: Tue Oct 06, 2015 10:16 am

Re: How do you publish an NES ROM?

Post by calima » Sun Oct 18, 2020 9:57 am

It's a lot of work, so naturally if somebody did it they'd want return on investment. I'm only aware of ggvm.

User avatar
tokumaru
Posts: 11891
Joined: Sat Feb 12, 2005 9:43 pm
Location: Rio de Janeiro - Brazil

Re: How do you publish an NES ROM?

Post by tokumaru » Sun Oct 18, 2020 10:13 am

A complete, accurate NES emulator takes a lot of work to make, but a basic one that only implements the subset of the system that your game actually uses, is significantly easier to make than the game itself. Now that I think of it, even the APU shouldn't be so much work if your game's sound engine controls most things in software... If all you have to do is generate square/triangle/noise waves and change their frequency, duty and volume on command, that doesn't sound so complicated.

User avatar
rainwarrior
Posts: 7878
Joined: Sun Jan 22, 2012 12:03 pm
Location: Canada
Contact:

Re: How do you publish an NES ROM?

Post by rainwarrior » Sun Oct 18, 2020 12:01 pm

DRW wrote:
Sun Oct 18, 2020 7:23 am
So, yeah, how come there's isn't some go-to emulator for this specific purpose?
If you believe in the need, why don't you make one?

Or perhaps another oblique way to answer your own question: why don't you find any of the existing solutions acceptable?


There are plenty of valid answers to both of these questions, though as already stated some people have found various existing solutions acceptable. I'm not sure which I'd use, personally. I much prefer the native port, if I can manage it.

tokumaru wrote:
Sun Oct 18, 2020 10:13 am
...that doesn't sound so complicated.
Well, also add on supporting multiple platforms, making sure the UI is easy to use and configurable, and can support all sorts of different gamepads people like to use, etc...

IMO there's a gigantic leap of effort required between writing something that runs for yourself with no guarantees or promises to anyone else, and writing something suitable for sale that needs to run on a thousand different machines, and behave well for many different peoples' needs. (So much testing labour too!)

User avatar
DRW
Posts: 1984
Joined: Sat Sep 07, 2013 2:59 pm

Re: How do you publish an NES ROM?

Post by DRW » Sun Oct 18, 2020 1:00 pm

tokumaru wrote:
Sun Oct 18, 2020 10:13 am
A complete, accurate NES emulator takes a lot of work to make
Well, the NES homebrew community has been around for many years and has created all kinds of stuff. So, yeah, it's strange that there isn't some standard go-to free-to-use emulator for exactly these purposes.

rainwarrior wrote:
Sun Oct 18, 2020 12:01 pm
If you believe in the need, why don't you make one?
Because I have neither the need, nor the interest, nor the know-how of creating an NES emulator. As far as NES development goes, I'm a game developer. I have interest in creating NES games. This alone takes a lot of time. I don't have the capacities of learning how to create a software recreation of a game console.
But I know that some people on this forum do exactly this, so I'm asking why there are tons of free games, but not even a single good enough emulator created to be free to use for everything.

It wasn't an accusation, but actual curiosity.

tokumaru wrote:
Sun Oct 18, 2020 10:13 am
Or perhaps another oblique way to answer your own question: why don't you find any of the existing solutions acceptable?
Because they require manual adjustments:

Programming your own native PC port of the game: Yeah, sure. If that was an option for somebody, that person would have done this. He wouldn't need anybody to tell him that programming games on the PC is a thing that exists.

GGVm requires music as MP3 files and other adjustments.

But having an emulator that's at the level of fceux and that one can use for anything, that would be a solution that covers the vast majority of NES homebrews since it should be good enough for most games.
My game "City Trouble": www.denny-r-walter.de/city.htm

User avatar
rainwarrior
Posts: 7878
Joined: Sun Jan 22, 2012 12:03 pm
Location: Canada
Contact:

Re: How do you publish an NES ROM?

Post by rainwarrior » Sun Oct 18, 2020 1:19 pm

DRW wrote:
Sun Oct 18, 2020 1:00 pm
But I know that some people on this forum do exactly this, so I'm asking why there are tons of free games, but not even a single good enough emulator created to be free to use for everything.
Well, people make free emulators because they want to play games, or help people play games.

...but you're asking for an emulator made to help people sell games. Are you surprised that the person that wants to help you achieve this goal for free doesn't really exist?

So maybe in between, there is a person who makes NES games and also wants to sell them, and solved this problem for themself, and decided to share it. In that category you have GGVM... except they only made it good enough to do what they wanted to do with it, and have no interest in doing extra/ongoing unpaid labour to make it useful for other people's commercial projects. So... it's nice to have, but it's kind of in a hand-me-down state.

Alternatively, if you have an NES homebrew you want to sell on Steam and are looking to pay someone to help you, there are real options there. I know a few who would do this.
DRW wrote:
Sun Oct 18, 2020 1:00 pm
But having an emulator that's at the level of fceux and that one can use for anything, that would be a solution that covers the vast majority of NES homebrews since it should be good enough for most games.
You can use FCEUX. You can use RetroArch + any of its (many) NES cores. There are many suitable free emulators, but none of them are currently ready-made to sell a packaged product, as far as I know.

DOSBox is pretty much ready for that kind of purpose these days, but I think that was more of an accident than design. ScummVM also ended up in this boat, where the features that were useful for free users ended up being pretty suitable for commercial packaging too.

User avatar
gravelstudios
Posts: 80
Joined: Mon Mar 13, 2017 5:21 pm
Contact:

Re: How do you publish an NES ROM?

Post by gravelstudios » Mon Oct 19, 2020 3:58 am

I've already started on my custom emulator using C#/MonoGame and it's coming along OK. I spent the weekend working on it between chores and mountain biking. I'm a little conflicted about it. On one hand, I'm an experienced C# programmer (it's part of my actual day-job) and I'd been intending to learn MonoGame for some time and this is a great reason to do it. also, I really prefer the idea of just doing it all myself if possible. On the other hand, I didn't really set out to write an emulator and it's a pretty big detour from the actual game design. As Tokumaru pointed out, writing an emulator to play the game is (in my opinion) faster than rewriting the entire game in C# or something, especially since I can take shortcuts (for example, I never use indirect X addressing, or the overflow flag after ADC or SBC, so I can ignore implementing those things). I was pretty sure that I'd have to pay somebody to use their emulator and I was OK with that, but I prefer this route more for the time being. Of course, I may change my mind 8-) .

User avatar
tokumaru
Posts: 11891
Joined: Sat Feb 12, 2005 9:43 pm
Location: Rio de Janeiro - Brazil

Re: How do you publish an NES ROM?

Post by tokumaru » Mon Oct 19, 2020 6:12 am

rainwarrior wrote:
Sun Oct 18, 2020 12:01 pm
Well, also add on supporting multiple platforms, making sure the UI is easy to use and configurable, and can support all sorts of different gamepads people like to use, etc...
True, but this is also the case if you're reprogramming the entire game, so at least compared to that, writing your own emulator sounds more practical.
IMO there's a gigantic leap of effort required between writing something that runs for yourself with no guarantees or promises to anyone else, and writing something suitable for sale that needs to run on a thousand different machines, and behave well for many different peoples' needs. (So much testing labour too!)
I agree. And even if you use someone else's emulator/framework/whatever, you still have to test things thoroughly, since the final product is your responsibility.

bngrybt
Posts: 27
Joined: Tue May 09, 2017 5:03 am

Re: How do you publish an NES ROM?

Post by bngrybt » Tue Oct 20, 2020 12:11 pm

If you want it to turn out decent, you'll need to put a bit of work into it. There's no real bundling tool out there to put a game in an emulator. The options are basically write an emulator from scratch yourself, port the game to the target system, cobble something together from existing open-source code (making sure to respect licenses of course), or hire someone else to do it.

For Mall Brawl and the upcoming Alfonzo console release I'm using agnes. It's a pretty simple emulator that was easy to compile into a library that I could use with Unity. Had to make a few modifications to get it to work the way I wanted to but I believe it turned out ok. Since it doesn't handle the APU, I just exported the audio from Famitracker and handled it similarly to GGVM.

Post Reply