Metroidvania Month 22 -- UNNAMED PROJECT

hey everyone! i’m participating to the metroidvania month 22

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~

day 1

first 24 hours of work have gone by

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

here’s the codebase so far if you are curious

(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 - 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!

Good Luck!

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


day 2

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)

the code tree after the last commit of the day:

day 3

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’m stopping here for the day, i have some sleep to catch up:

day 4

wrapping up early today!

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

this screenshot shows a simple layout i put together without much thought (look at the minimap on the right, it’s so cute)

state of the project to this very day:

day 5

no code! rest day! did nothing! played tetris!
fuck that felt good… back to the grind tomorrow though

i still thought about game design, world progression and storytelling. my directorial line will be

  1. very high difficulty
  2. player places checkpoints themselve, inspired by Geometry Dash’s training mode (2.2 soon #trust) and the great LOVE
  3. precision platformer gameplay
  4. exploration based mechanic unlocking that gives access to harder sections
  5. emphasis on room aesthetics over asset aesthetics
  6. abstract world building
  7. no “enemies”

so yeah that was my day. i see the future in tetris now. see you tomorrow

day 6

another editor day!

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

edit: forgot the link

day 7

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

here’s the freshest of the recent commits:

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

day 8

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

day 9

this log is late (and short), but i just woke up and will publish day 10 before going to sleep

i spent a bit too much time playing fucking rimworld (it’s a good game, sure, but omg what a time sink)

the world loading code in game now flattens the map from a linked-cell format to a simple 2D array

this change was made to allow for the collision code to be quite fast, and it works between cells

i just begun working on the player code, it does nothing right now but look at this cute wip sprite
i don’t have any smart caption to write here, don’t mind the tileset ig?

thank you, that’s cool to know!

day 10

i didn’t publish before going to sleep lmao

basic gameplay mechanics are here! moving between rooms is fun (to me) and works flawlessly. legs of the player were cut

i might go for the vvvvvv checkpoint system instead of a manual one like planned

most of the other changes are visual, so i’ll leave you with a screenshot. just notice how the 1:1 canvas is stretched to a 8:7 viewport

the art style is going in a very, how to say, opinionated, direction

i feel like im understanding well what look you’re going for - reminds me so much of

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

day 11

wow i don’t think my days are even days anymore

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

you can’t deny it’s a cool wall texture, or can you?

day 12
fuck it days are abstract now!

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?

PAWN devlog has 169 views, 1nice