raymo


right now (as of 2020-03-20), i'm trying to learn SDL 1.2, so i've decided to make a small platformer. once i'm done, i'll go to bigger projects, leading into the game i really want.

all code's on github, for now, but it's going to be moved somewhere better eventually.

prelude

touhou's one of my favorite game franchises, and it has really lenient rules on copyrighting, so making a doujin based on it is a pretty good choice for me.

engine

i'm still horrible at programming, bear with me here

the engine works a bit like a tree, and every branch should be at least slightly compatible with another. for the game itself, i decided to give myself a bit of a challenge for once and limit ram to 4MB for everything besides assets (sound,gfx,etc.)

i don't have much experience with sound design, so i'll get that done after everything else's finished.

main interface

GRAM interface

GRAM is the meat, rice, & corn of this engine, storing all 4MB of RAM that's being used for the game.

rundown

BIOS is first initialized, and all of it's GRAM is set to 0. GRAM is initialized, with all it's objects reset to zero. from there, you can do any type of object manipulation you want.

images are stored as an array of keine objects, with each having their own format, width & height. Reimu's character sprites are stored as a grid of animations, with each frame being 24x24px, but i'll probably change that to something bigger like 32x32px later.

reimu sprites

spawning a bunch of objects and using a Reimu sprite for them is pretty easy now.

reimu objs

graphics log

i love the Sega Saturn's VDP1 GPU since it's pretty much an extension of Sega's old 2d systems with their new, fast 3d arcade hardware, allowing you to use sprites with a shitton more flexibility than any other console. sprites can be wireframes, textured, or untextured, with blending modes that allow transparency or dithering.

the VDP1 allows for a 'mesh' mode when drawing sprites, giving them a checkerboard pattern, but i wanted to give my dithering a bit more range, so i decided to combine it with pico-8's fill patterns for more customization.

dither0

my custom rendering library Mokou has no transparency, but each sprite can have their own 16-bit mesh pattern, allowing every sprite to have one out of $10000 (65536) different dithering patterns.

reimu dither

maybe it could be used for some PC-98-esque dithering later on? for now, i'll probably just leave it for transparency effects.

reimu alt

i've noticed that 8-color sprites are a nice middleground, in terms of palette limitations, since they make palette swapping really easy, without being as plain as 4-color ones. unless i end up really needing those extra 8 hues, i'll try sticking to this.

reimu txt

i made a quick font in an hour, so i guess i could use that when debugging for now.

collision & physics

i have zero clue on how to make slope collision, so i think i'll have to ask someone good with platformers how it's usually implemented...

i'm debating on whether or not i should just drop the concept entirely & go for everything being 16x16px tiles, but that sounds boring... my last platformer idea died trying to implement slopes too, so maybe i'll leave em for now & go back another time if it means this game's going to actually get finished.