New homebrewn SNES game released - N-Warp Daisakusen

Discussion of hardware and software development for Super NES and Super Famicom.

Moderator: Moderators

Forum rules
  • For making cartridges of your Super NES games, see Reproduction.
d4s
Posts: 91
Joined: Mon Jul 14, 2008 4:02 pm

New homebrewn SNES game released - N-Warp Daisakusen

Post by d4s » Mon Sep 22, 2008 4:00 am

I've released a tiny multiplayer beat em up for SNES earlier this week.
Took around 4 weeks to program.
You can check it out here: http://gra.dforce3000.de/ , (slightly outdated) videos can be found here http://www.youtube.com/watch?v=Yx2wFwIrces and here: http://www.youtube.com/watch?v=jp9jVMa6XR0

User avatar
Bregalad
Posts: 7872
Joined: Fri Nov 12, 2004 2:49 pm
Location: Chexbres, VD, Switzerland

Post by Bregalad » Mon Sep 22, 2008 5:06 am

My god, this is for the SNES ?!? It looks like at least a playstation/NDS game.
Life is complex: it has both real and imaginary components.

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

Post by tepples » Mon Sep 22, 2008 7:05 am

If the SNES can do this, it can do Smash Bros.

Roth
Posts: 399
Joined: Wed Aug 03, 2005 3:15 pm
Contact:

Post by Roth » Mon Sep 22, 2008 7:54 am

My god man, that is awesome! That whole intro was really really cool. By the way, I read the stuff you said in the video description on YouTube; I don't think the voices are cheesy. They seem to fit in absolutely perfect : )

Great job, that really is awesome!

Celius
Posts: 2157
Joined: Sun Jun 05, 2005 2:04 pm
Location: Minneapolis, Minnesota, United States
Contact:

Post by Celius » Mon Sep 22, 2008 12:15 pm

tepples wrote:If the SNES can do this, it can do Smash Bros.
I've always wanted an SNES Smash Bros.! But it'd have to be where every character has the same model as they did in their game.

But anyways, yes, this is very impressive for the SNES!

d4s
Posts: 91
Joined: Mon Jul 14, 2008 4:02 pm

Post by d4s » Mon Sep 22, 2008 2:24 pm

Thanks for your kind comments, always appreciated. =)

I'm not exactly pushing the system to its limits with this game, but I tried to depart a bit from the usual SNES look.
In general, my engine is geared towards maximum data throughput to vram and audio ram.
I don't care one bit about ROM-size, because it's virtually unlimited nowadays.

I guess most people dislike hearing recordings of their own voice, I'm no different in that regard. ;)

As for Smash Bros on SNES:
I think the >Entertainment guys are working on a similar project.

I'd also love to work on a group project, but it would have to be something original with original characters.

byuu
Posts: 1545
Joined: Mon Mar 27, 2006 5:23 pm
Contact:

Post by byuu » Tue Sep 23, 2008 10:59 am

In general, my engine is geared towards maximum data throughput to vram and audio ram.
I don't care one bit about ROM-size, because it's virtually unlimited nowadays.
If you run into any issues with that, please don't hesitate to get in touch.
I'd be happy to work with you to add some special features like expanded S-DD1 / SPC7110 mapping capabilities to support >48mbit games.

In particular, I'd really like to see an animated video running on the SNES. We definitely have the bandwidth to pull it off. The trick would be to use Mode3 + a tilemap to center the image, so all the tiledata is linear. Create a palette that is RGB332 (direct color mode sucks, low bits always clear, so whites look light gray.) Then use force blank and NBA swapping to toggle where the image data goes between the top half and bottom of half of RAM. That lets you span the transfer over two frames instead of one, which obviously halves the refresh rate. NTSC video runs at 30fps usually anyway.

There's even left-over RAM for subtitles, and the active display region can be used to spool voiced audio to the S-SMP.

I imagine it'll look roughly as good as the pre-MPEG Saturn movies. But on a much older, much slower system; where it's said to be "impossible."

Example:
@ 192x144
192*144=27648 bytes/frame
262-144=118 scanlines/vblank+forceblank period
118*(1364-40)=156232 cycles/frame
156232/8=19529 bytes/frame throughput
60->30fps conversion -> 19529*2 = 39058 bytes/frame

@ 208x156
208*156=32448
262-156=106
106*1324=140344
140344/8=17543
17543*2=35086

So let's say in the former case, we need 27648*30=829kbytes/second of ROM storage. If we throw in S-DD1 or SPC7110 real-time decompression, we can drop that by ~30% or so to ~600kb or less/second. Yeah, I know it's really painful. But with a custom bank swapping mapper, I don't see a reason we can't make a 64MB proof-of-concept video.

I've wanted to do this for a while, but I don't have the audio expertise. I was hoping someone would find the SNES CD player add-on for that one "Let's Learn English"-like game. Then I could emulate redbook through it. But I've never so much as seen a picture of one, not entirely sure it even exists, though it's technically pretty trivial. Connect to expansion bus, and stream the audio through the S-DSP mixer pins ...

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

Post by tepples » Tue Sep 23, 2008 2:01 pm

800 kB per second? That's near DVD-Video's maximum bitrate.

I'd wager that 112x96 at 12 fps, scaled up by 2 using mode 7, might be more reasonable. Wolfenstein got away with such a low res, and so did FaceBall (except FaceBall wasn't scaled up). Now we're down to 128 KB per second.

Is the CPU too slow for even basic motion compensation (straight copy of 8x8px blocks, no sum/diff, only whole pixel displacements)? The Sega Genesis's MC68000 CPU had the advantage here; it could run a slimmed-down version of Cinepak. But if you're serious about video, it might be a better choice to decode the video using some sort of ASIC on the cart.

d4s
Posts: 91
Joined: Mon Jul 14, 2008 4:02 pm

Post by d4s » Tue Sep 23, 2008 4:32 pm

I'm sure it's doable.
The small videoplayer that's used in a part of the intro of nwarp daisakusen was merely an afterthought slapped together in a couple of minutes without any optimization.
It's capable of 60fps playback (no buffering of frames) and each frame is around 7kb in size(tiles+tilemap).
That's around 400kb per second already.
I just play the video back at 30fps because i feel that's fluid enough (and manually cleaning and optimizing each frames picture to fit into the 7kb limit was painful enough. )
Sound is streamed via HDMA at 8000hz and uses around 10 scanlines of cpu time every other frame, absolutely neglectable.

If someone would code a proper and optimized video player, 30fps with 256 color frames would surely be possible as long as you leave enough forced blank at the bottom and top for vram transfers, as byuu said.

To be honest, just coding a player as a proof of concept is not something I'd like to do, but including it in a nice game would be nice. I hope I can try that some day.

Thanks for the offer regarding bankswitching emulation. I think I'd probably try to whip up my own tiny mapper in hardware first, but that would make debugging hard. At the moment, I wouldn't even know how to fill more than 64Mbits. I tried to went all out with N-warp Daisakusen, but didn't even exceed 16 megs.

I have never heard of that CD-player add-on. Do you have any details? Sounds interesting.

Also, I'd be happy to run tests on my satellaview to help improve emulation. I've posted it before, but it seems to have gone unnoticed so far.

byuu
Posts: 1545
Joined: Mon Mar 27, 2006 5:23 pm
Contact:

Post by byuu » Tue Sep 23, 2008 5:07 pm

But if you're serious about video, it might be a better choice to decode the video using some sort of ASIC on the cart.
A real cart would pretty much have to exist first. It'd be so lame to add something to an emulator that doesn't exist in real life. I'm not sure why it stops bothering me with only a few protos, but yeah.
It's capable of 60fps playback (no buffering of frames) and each frame is around 7kb in size(tiles+tilemap).
That's around 400kb per second already.
Yeah, problem is it's not "true" video, you have to do it all with sprites and such. Much more difficult, and less flexible. But it's really the only sane way to do it on the SNES ...
I have never heard of that CD-player add-on. Do you have any details? Sounds interesting.
Unfortunately not. Nach is the one who told me about it, but he doesn't have any real info, either. For all I know, it doesn't even exist :/

It would be fairly easy to make, though. Just need to interface with the expansion bus somehow.
Also, I'd be happy to run tests on my satellaview to help improve emulation. I've posted it before, but it seems to have gone unnoticed so far.
Ah, I appreciate the offer, but remote testing is just way too difficult. I usually run hundreds of tests in rapid succession to figure things out.

FitzRoy recently bought a BS-X unit that he offered to let me borrow, and another person offered me one via PM, but I haven't heard back from him just yet. Probably would help if I responded to PMs and e-mails faster, myself.

But yeah, hopefully I should be covered. I definitely wouldn't mind some RE help, though :D
Have your notes cached for when I start on it. Didn't mean to ignore them, sorry.

Jagasian
Posts: 417
Joined: Wed Feb 09, 2005 9:31 am

Post by Jagasian » Tue Sep 23, 2008 5:47 pm

This is very impressive. Given enough ROM space, I bet d4s could port Final Fantasy 7 to the SNES :)

User avatar
dXtr
Posts: 375
Joined: Tue Sep 21, 2004 12:11 am
Location: Karlshamn (Sweden)

Post by dXtr » Wed Sep 24, 2008 3:51 am

d4s wrote:I have never heard of that CD-player add-on. Do you have any details? Sounds interesting.
Probably referring to the infamous official SNES CD-ROM. Which I'm sure you've heard about at least one time on AG?

tomaitheous
Posts: 592
Joined: Thu Aug 28, 2008 1:17 am
Contact:

Post by tomaitheous » Wed Sep 24, 2008 7:19 am

The Sega Genesis's MC68000 CPU had the advantage here; it could run a slimmed-down version of Cinepak.
I'm pretty sure the 12.5mhz second 68000 in the SegaCD was taking care of the cinepak decoding. The SegaCD doesn't require the second CPU to poll the MCU of the CD unit, so it's free to do other tasks. Not to mention the SegaCD's ASIC chip could convert bitmap images to tiles extremely fast.


Can't you increase the DMA total bandwidth in vblank by turning off the display early? If so, clipping to 192 vertical res would almost double the transfer rate.


I still want to interface my Super CDROM2 CD addon unit for PCE, to the SNES at some point. I don't know much about the BUS for the external port on the bottom but if it's really only 256bytes, then that's more than enough to map the CD registers. Converting the PCE's system card routines should be doable. Is there an interrupt line available on the external BUS (B-BUS?)?

caitsith2
Posts: 74
Joined: Mon May 26, 2008 11:41 pm

Post by caitsith2 » Wed Sep 24, 2008 1:32 pm

The bottom port on the snes, maps into the same address bus B region, 0x2100-0x21FF, however, you can not use 0x2100-0x213F, as that is used by the PPU, and you can not use 0x2140-0x217F, as this is used by the APU. (IIRC)

I might be incorrect on which range the PPU is using, but you do have to respect these ranges, and not attempt to use them yourself for any other purpose. If 128 bytes is not enough, then you will have to make an interface chip, and come up with some register addressing scheme through that chip.

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

Post by tepples » Wed Sep 24, 2008 1:51 pm

Even 16 bytes of address space would be enough for, say, an ATA interface to a CF card or a CD-ROM drive.

Post Reply