i thought it would be interesting to document my day to day progression, since this is a pretty lengthy jam long term planning is important
my first immediate task is creating a level editor: i didn’t find any level editor that did everything right for a 2D gridvania setting (i used a lot of different editor, but if you know any fringe ones please feel free to recommand)
what i need in this editor:
macro scale editing: room creation, room displacement, room duplication, etc.
screen scale editing: tile layers, id layers, object layers
debug info: highlight improperly connected rooms
export/import: custom format most likely, maybe json if i feel pumped
i’m starting this tomorrow, i want to have a usable editor pretty fast so i don’t want to spend more than like two days on it before it being usable
see you next day for the another (cringe) progress update, uwu~
i mostly worked on the code infrastructure and boring shit today, making the engine in C with SDL2 i kinda had to
so far, the three main windows are created, the config is read from a ini file and the tileset is loaded for all rendering targets. may not sound like much, but the error handling/logging is pretty thorough and the structure is clean
i’m confident i can get something on the screen in day 2, would be cool to display the tiles in the “tiles” window and a dumb grid in the “editor” window. i plan to have another window for the world map, call it the “world” window and a final window for the layers (the “layers” window yeah you guessed it lol). i believe this is a better approach than having to switch between different modes in a single interface, it’s no easier to code but it’s an interesting challenge
i’ll then start working on the macroscale interface, hopefully in day 2 but might have to go with day 3
(admin check your own website often challenge 0/100)
Wow - rolling a level editor for a jam sounds like so much to do - though I suppose within a month there is definitely time to get something basic. But the idea of doing it in SDL without some sort of UI framework is where i’d chicken out lol. I’ve made a couple gamedev related tools but found it super quick to work in things like Electron (booooo) - and kind of would love to find something that feels like a frontend framework but uses a more strict compiled lang. I’m also curious about the build system used here - never heard of it before! I recently started a c++ project I’ll be doing for a couple weeks, and got a makefile setup fine, but including anything other than single-header libraries make me want to pull out my hair lol.
In my time online - probably the most competent level editor for a metroidvania specifically is https://ldtk.io/ - at the very least it has good tools for linking together multiple rooms/maps into one interconnected “world” - and kind of lets you as the developer choose how you want to string them together. I only tried it out briefly for one project, and it took a bit to get a hang of - a lot of the UI elements did not do what I thought they would, especially when it came to laying out extra data on top of tiles, or the “entity” system it has going on. I also would have to say that the screenshots look like it’s more slick than it actually is to use…
Selfishly for [REDACTED] reasons, after this is over, i’d Love to hear about some of the specifics that lend themself towards metroid vania maps, particularly connecting multiple rooms together, defining relationships between one area and the next etc!
yeah it’s a lot of work actually, i like working with good tools for level design though and i believe it’s worth it for a medium to large scale project to create custom tools
i don’t know how to use electron to create tools tbh, since i’m not a webdev i don’t think it would be worth it for me to learn (and i usually don’t like the tools made with this tech). from experience, LOVE is good for making tools quickly and i might have used it for this project if i didn’t commit so hard to multiple windows and custom everything
it’s tup, a very fast and powerful build system that nobody knows about lol
feels almost like magic to use once you get used to its syntax, it creates the dependency tree all by itself by analyzing which files are read by a command and other shit, very cool
c/c++ deps are always a pain in the ass, tup will work in the same way than makefile for this but it might look cleaner. maybe look into meson for a more “bloated” build system that will do some of the boring stuff for you? it’s like cmake if cmake wasn’t evil
yeah i agree, sadly ldtk is full of features i don’t care about and the export format is super bloated, i would rather use Tiled’s world feature than dealing with parsing this shit. the best godot ldtk importer crashes on my mates computer so that’s not an option either
for connecting rooms i have a few ideas i will iterate upon, it’ll depend in part on the type of world design i go for
not exactly 24 hours since the last log, but my sleep schedule is fucked so i’ll roll with it
most major change “engine” side, i implemented redraw and events hooks per window so i can use efficient callbacks when possible. redraw in particular is cool, i’m making sure i only redraw the windows when necessary to reduce waste
i also got to (finally) draw something on screen, first with the tile picker and after that the cell editor (i call a cell a singular screen on the world map)
i also implemented bad (but fast to code) editing features, i can now pick tiles on the tile picker and draw on the cell editor
may not sound like much, but this was some work to keep it clean ahah
here’s a screenshot (w/ placeholder assets from a old project)
today was a good day (for the editor at the very least)
it’s getting close to mvp! wasn’t sure i would go that fast ngl, i’m quite happy with the progress
i implemented a cool input manager system that isn’t jank with the multi window setup. that’s already quite a achievement seeing all the other soft that mess this up lol
i wrote some code to detect completely black tiles in the tileset and mark them with a purple dot, completely unnecessary but was cool to do and will avoid some headache in the future (invisible tiles are shit), the concerned code starts here if you’re curious
tile picking was implemented (ctrl+left click in cell editor)
cell saving and loading is here! i picked csv for now, simply starting with width and height and dumping all the tiles id for simplicity sake
and the big shit that was the point of this editor to begin with: the world window is here! it’s very basic ofc, but it works and that’s already dope. the view is centered, and clicking around allows changing rooms. i want to add WASD keybindings to move around later on, that’s probably the first thing i’ll do once mvp is complete, but fuck it’s so cool to see it all work together
oh yeah i changed the background color to gris 18%, it’s a bad photography joke lol
i woke up at 4pm today, so i’m stopping work now, taking pills and going to bed early (not happy 'bout that)
but hey, whatever, who cares,
the mvp is done! woohoo
i spent most of the day on a sick ass, completely unnecessary feature, that simply makes me happy when i look at it: world map preview for levels! it’s well optimized (as the rest of the editor so far) and only regenerates the preview texture on save using color averages from the tileset. cool shit, would do again, 10/10
most importantly, i implemented world saving and loading (csv too), it works perfectly and that’s dope. related to that, right clicking on two cells will swap them on the world view. it’s not optimal, but it’s a thing. there’s no way to delete a cell for now, and i’m not sure i’ll need it during the jam sooo it might never come
yeah that’s pmuch it, thanks for reading if you did you’re a very cool person
i reworked the brush system, it’s now a grid instead of a single tile
was quite a hefty rework, however i knew i wanted to do this from the start so the code to change was well indicated enough
this change allows for far more complicated level patterns to be created for low effort
the tilepicker now allows selecting a rectangle by holding left click, i don’t think i’ll use this but it’s cool to have
more way cooler, the same behavior works with the ctrl+leftclick tile picking in the main editor window. this is good enough to do all the copy and paste i need!
and for the useless and fast to code feature, pressing f (lowcap) flips the brush on the x-axis and pressing F (highcap??) flips the brush the y-axis. cool for patterns
i would have liked to start level design today but it’s 4am and this is a month-long jam, i’ll see tomorrow
editor side:
i added cool rectangle drawing and erasure features and wasd bindings to select an adjacent room quickly (helps me when i’m in flow state). i designed a draft world in abt 13 minute to try it out, it’s fun to use i’m quite happy with this editor
game side:
i started creating files related to the game! wow! i decided to go with love2d on this one, the codebase will be relatively basic so i don’t need huge scalability potential, and i don’t plan to use a custom renderer so writing a custom C engine would be a tad overkill. i would like to be able to hack in very dirty additions later in development, and it’s very easy to do in lua codebases (too easy most of the time)
edit: i got bored after a few minutes of lua so i got back to C using my TZR framework
didn’t touch the editor today! shouldn’t have to for days to come. everything should be now game focused
i spent some time fiddling around with resolutions and settled on a 24x24 tile grid and 360x360 screen (which makes for a 16x16 tile grid). square ratio is goated and underrated, and 24x24 sprites is something i’m curious to work with.
i’m considering stretching the pixels later on during development (most games have them at 1:1 on screen, missed opportunity imo), so my square tiles will be rendered as rectangles
on the whole design side, i’ll be making everything in this game, assets, music and sfx included. i want it all, from the gameplay to the assets, to work in a adversarial way toward each other. i know reading this might not make much sense to you, this is something hard to describe until it’s here and done, but i’m confident i can do it
sneak peek of the testing world’s minimap in editor
i’m starting to have gameplay ideas for the player controller, i might spend the next few days trying them out.
i want the movement to feel very intentional, not much juice required
sorry if this devlog is getting a bit messy at points, i considered skipping it a couple of times and decided it’s better to log in a raw/stupid way than not log anything at all long term. i’ll be curious to read this back in a few years
nonono this daily format is awesome, can’t believe its been over a week already. really enjoying checking in on this every night - this amount of progress is a lot! If i had something i could update this frequently i’d definitely be trying it too
yeaaah, i love maximalist and supercharged game textures. games that feel like clipart collections and imperfect memories are so cool to me. i also love things such as texture collections from the early 3d days (ie the Alias/3 textures), so these are definitely an inspiration to me (even though i made all the textures myself so far)
if we can throw random refs, i love the freeware 7 on steam, it’s a really cool game if you like somewhat-janky gameplay
whatever, i’ll stick to it, even if it’s a bit fucked i don’t want to skip numbers lol
i’m mostly working on movement, i’m starting to get a feel of where i want to go: odd movement platforming with a polarity mechanic, wall kick (not wall jump!) and maybe a shitty double jump. if you are one of the three folks who played to my hit game 001, you might see where this is going eheh. still, heavy wip, this might take a couple more days!
the player now spawns at the spawn marker instead of the last saved room, which is cool but doesn’t mean a lot to you since i’m always screenshoting the same one lol. anyway, here’s a screenshot of the same room as before, with a cool wall texture
the project took a cool direction design-wise, so it might not even be eligible to the metroidvania month anymore. but i don’t care, this kind of shit happens all the time ahah
i rebuilt the player physics from the ground up* (*slight hyperbole) double jump and funny physics is all i need to be happy
death is here! player can die! and respawn omg fun fact, i wanted there to be no checkpoints at all but since this game is gonna be obscure anyway and it’ll have maybe two players peak during its lifetime, i’m just gonna [REDACTED] if the player plays without checkpoints as a “reward”. that’s the biggest design concession i’ll make
checkpoints have been added to the game (they look like shit ofc), along with working respawn code
the biggest breakthrough is the design epiphany i went through: i want this game to be a quite normal precision exploration platformer* that becomes quite alienating/confusing when you start looking for more.
*by saying that i realize the only slightly popular one in existence is VVVVVV, so wtf is normal in this situation anyway?
i worked on graphics today
and i have some reasons
the dark thoughts were back
i channeled them into the game
now i feel slightly better
and
the game looks sick as fuck now
i wish i could record a video
but my igpu can’t take it
so you’ll have to trust me
oh
and i listened to way too much hot mulligan
oh well