Happy birthday, Dreamcast! Yes, it's the time of the year where everyone and everytwo comes crawling out of their holes to do something for the good old DC.
My "thing" for this year's Dreamcast day is thematically related to the burning plane wreck that is Dolmexica, so I thought I'd share it here. It's
a mini 2D fighter called Dream Fight 16 A.D., a touching tale in which the Dreamcast's three most popular(?) heroes come together to beat the snot out of each other.
Now I wouldn't necrobump the Dolmexica sticky just for that, the core thing of interest is that Dream Fight runs on
Mugen. Yes, that Mugen. The moddable 2D fighter that works miles better than Dolmexica and has a gigantic fanbase that is incredibly lively to this day. Before you start downloading your favorite characters and get your CD-Rs ready, I have to break the bad news here: It's not in a good enough state yet to "just add a character and it works". It's an experimental port, it runs without sound, occasionally the text glitches goodbye and the framerate is anything but the stable 60fps we all crave for.
This may sound a bit farfetched without the pudding and the proof, so I invite you to download it yourself:
https://captaindreamcast.itch.io/dream-fight-16-ad
I'll spend the rest of this wall-of-text going into the more technical details, I dunno if it's that interesting but that didn't stop me the previous 13 pages, did it?
What's still missing from the full Mugen experience?
Memory issues
Dream Fight runs using the same development library I use for the rest of my
dumb monthly games. Once a game wants to allocate texture memory and there's not enough left, it (optionally compresses and) moves the least recently used texture to main RAM. It's kinda what Dolmexica did, just smarter. Sadly, that still means we are limited in memory. I'm still not using the Dreamcast's on-chip palette slots yet, but even with them, the situation's pretty grim. This is kind of an open problem since it's just a sad cold fact that a Dreamcast has less memory than a modern PC *gasps from the audience*.
Sound
It kinda goes hand-in-hand with the memory issues. I guess the BGM could be streamed again somehow, but fitting all the sound effects in the memory is hard and probably undesirable. So Dream Fight is a mute fight for now, but it's something I still have to look into properly.
Palettes
Yes, it was mentioned already, but everything related to palettes was taken out since I am still not 100% sure in which way I want to use the Dreamcast's on-chip palette slots. Mugen fighters have one main palette, so I guess an improvement could be to use two of the DC's four 256-color palette slots for the characters' main palette. Still makes a lot of Mugen's palette effects blatantly impossible, though. One good example here would be background palette effects.
Framerate
The framerate varies depending on how much memory is moved between main ram and video ram, that much is given. My main gripe and source of saltiness here is that it even varies in similar circumstances. It's still something I have to look into more properly. My pet theory is that it has to do with memory fragmentation (and thus the cost of moving memory around), but then again the script statement parser is written in such an INCREDIBLY inefficient way that it might actually be fully on the implementation.
Mugen itself
I wanted to make a small Mugen port to make a small 2D fighter game and that's what I did and (sadly) not a single line of code more. Pretty much everything is a little 'off' and a good chunk of state controllers is not even implemented. This is also the main reason why I'm not releasing a standalone version yet. It would just result in a sea of assertion failures and despair. There's also graphical glitches and whatnot, but these happen whenever my texture-memory-is-full heuristic messes up due to fragmentation and feels like overwriting my font texture. Also, I removed most of the juice from the game, such as explods and after-effects (basically all the cool stuff unrelated to gameplay). The AI pushes random commands, which is kinda similar to how the original Mugen AI acted. This AI is also pretty dumb and aggressive though, so it keeps moving forward and never ever blocks.
Why did I have to sit through 10 minutes of an MS Paint comic to get to the first fight?
Exquisite question, I haven't touched anything outside of the actual fight yet. The title screen, story boards and select screen were hastily put together and are not part of a proper Mugen port.
But why the MS Paint comic, Captain?
Y... you can keep holding start to skip it, y'know.
What happens now?
I've added the Mugen script, animation and sprite stuff to my gamedev library, so I'll keep refining them while making dumb non-fighter games. I'll work on proper Mugen in the background, though I can't really say when it's done or how good it's gonna be (if Dolmexica taught us anything, it's "Only trust what exists", eh?). My paragraphs above are highlights of what problems there are right now and obviously there's gonna be wayyy more ahead. It really feels like every other line here has a // TODO at the end.
It might actually be true:
https://github.com/CaptainDreamcast/DreamFight16
What about Dolmexica?
Nickelback clearly demonstrated that Dolmexica's own stuff is not worth preserving:
https://www.youtube.com/watch?v=gbNYWRWRuwg
In all seriousness though, it makes more sense to have something like Mugen on the 'Cast that has a thriving fan base rather than force people to learn some obscure restricted fighter script language.
So yeah, have the link again, because why not:
https://captaindreamcast.itch.io/dream-fight-16-ad
It also runs on Windows and in browsers, so if you don't want to waste a CD-R, it's the exact same game (my dev library compiles to DC, Windows and HTML5). Of course if you're like me, you want to have the real deal to play Frisbee with.
Anyway, that's it from me for this Dreamcast day! I hope you manage enjoy Dream Fight 16 A.D. at least a little bit! (Also thanks for reading or skimming this wall-of-text, went a little overboard here.)