If you haven’t checked my YouTube channel for some time, I’ve been working on using a ESP32 based Arduino-compatible board for a game project that has been suffering a lot of roadblocks.
You can probably tell that I’m a fan of the Kantai Collection series. However, what I wanted to do is to “demake” or “translate” the game at the moment into a pokemon-esque game so if someone asks “did I do anything interesting”, I can go “Sure, let me show you this” and pull out the little device and show it off. I originally started my adventure on an Arduino Uno R3 clone, however it seems the bootloader on that device has been corrupted or something when I used a Yun WiFi shield plugged into it.
So I jumped onto the ESP8266, but I fried it when I connected a battery with a lead that had the wrong polarity to the jumper connector. About a couple dozen Australian Koala Bucks later, I got another ESP8266, a Joywing (Adafruit’s take on a gameboy-style controller) and a ESP32 board.
What about using the GameBoy Advance or Nintendo DS? Surely they’d have what controls I need, right?
Now you may be thinking why can’t I just make a GameBoy Advance or Nintendo DS homebrew? When I originally got roadblocked with my ESP32 (due to SPI interrupt problems between two add-on boards) I switched my project over to the Nintendo DS. Surely, with 4MB of System RAM and a Flash Cart I should be right, I thought. I installed devKitARM as instructed, built libnds with the ARM compiler they use and was able to run the examples which showed off what the libraries could do.
However, any in-depth tutorials on how to use libnds were hard to find or had vanished in the mists of time. This is the biggest problem, at least for me, when I try to pick up a older console and start trying to make something for it. I came across a helper library called NFLib which was somewhat less painful to read than looking at the raw calls from libnds examples, but there was no guides apart from just “copy and paste this here and start writing your code below”. Plus, NFLib’s author was spanish, so the source code comments needed translation which was fairly okay to run through Microsoft Translator.
Lack of Documentation
However, the lack of documentation apart from me reading the examples and seeing how they operated in C/C++ code was what made me freak out. I wasn’t expecting to be pushed into the deep end super quick, but this was like someone just pushed me into a swimming pool completely unprepared. What I was expecting is more so a tutorial that explains what each major part of the code does, for example, if the code moves sprite data into VRAM, then I’d expect the tutorial to say “We’ve loaded our sprite into system RAM, but the 2D engine can’t access it. To allow the system to access it, we need to copy it into VRAM” or something similar. In my mind, I can visualize it as you would on a video tutorial and have the data be copied out of one RAM bank into another.
I don’t expect to have my hands held all the way, but I was completely new, and googling around for libnds tutorials were coming up with bogus results. Or it would try to auto-correct it to another word and give me wrong, unrelated results. I couldn’t find any documentation on how to use maxmod, which would allow me to play MOD and tracker files to have music with my game, as well as PCM sounds for damage and attack SFX.
So, giving up on the Nintendo DS even though I did manage to get a partially working collision tile-based movement system working after much hackery (using Photoshop to make indexed color images is a pain in the fucking ass or maybe I’m just an idiot), I switched to the Nintendo 3DS. While libctru looks to be the successor to libnds, I made a bad mistake – there was hardly any documentation apart from reading examples which was the same fate as libnds. I quickly dropped it like a hot potato.
Pre-publish note: Vita not included. *looks at his Vita*
What about the SNES or Sega Genesis/MegaDrive?
Mega Drive/Genesis? I’m not sure about that platform. If I can use C/C++ to compile and there’s libraries out there that make it easier for me and/or good tutorials and documentation, I’ll check it out. I’ve never owned a Genesis/MegaDrive physically, but I have an idea of it’s capabilities due to some of the GameHut videos on YouTube. The SNES has Easy 6502 ASM tutorials but honestly, I don’t want to learn ASM. I don’t understand it, nor do I have the patience to learn it… Okay, being completely honest with myself, I would use it if I absolutely wanted to or I saw a tutorial that screams “Let’s give this a good shot!”. If there was some tutorials on how to program for the SNES and some “boot camp” how-tos (ie. load a sprite into RAM, animate it, etc) then I’d give it a shot.
I do have a original Super Famicom (japanese SNES) and a SD2SNES that I wanted to use for this project but the lack of any C/C++ library for the 6502 kinda makes me disappointed.
So that’s two definite No’s. What about the others?
SDL, while it’s not console based is manageable but I feel like using that is overkill for what I want to achieve. I could pop my project on a Raspberry Pi or another ARM based computer (which I have surplus amount of), and it would work, provided I learn SDL. So let’s put that one in the “bail me out” basket.
That leaves the ESP32… and that’s an Arduino compatible platform, so I’m basically using an Arduino-like environment. We’ll leave that for part 2.
Ehhh, fuck copyright. To be brutally honest, this is a experiment and it’s not like I’m going to be slapping it onto a bootleg cart if I made it for the GBA. I am not a lawyer though, and I might have my head up my ass, but I do need to ensure I don’t get my ass kicked. While I would be in legal trouble if I did sell something like this, I have no intentions in selling my project since it would be pretty niche. Besides, there’s a lot of Kantai Collection related stuff out there in Japanese markets and the doujin artists do artwork of copyrighted characters on a regular basis, so I doubt Kadokawa will come knocking on my door.
They are better off spending money porting the arcade game to PC or PS4.
TO BE CONTINUED IN PART 2: HOPEFULLY WITH SOME IMAGES!