Making The Alumnus Of Darkness on my game engine: was it worth it?

LD page: https://ldjam.com/events/ludum-dare/55/the-alumnus-of-darkness
Three days have passed since my team (my wife Tatiana and me, basically) loaded our game to Ludum Dare 55. This is the first time I've used my own game editor for Ludum Dare (the second time for my game engine though)! I decided to write a blog post with some work-in-progress screenshots, sketches from pixel-art app, and some of my thoughts about all that. Let's go!
First Day of Ludum Dare 55
I woke up at 8:30 AM and anxiously opened the Ludum Dare website. People chose "summoning" as a topic. Tatiana was a bit disappointed because she wanted to make "not the main character" one. We went for a short walk with our dog and started our brainstorming.
"It would be good to summon the undead and let them fight for you", my wife said.
"Don't you think it's a little bit dull to just stand still with your hero while your subordinates are fighting?"
"Nah, I think it would be great if you had no weapon at all".
I had my own doubts about it, but decided to give it a try.
Prerequisites
Two days before the event, I made a hello-world repository based on my game engine. Since I have no documentation for it, and this is not the place to start making it, I will mention that it is a data-driven engine based on JSON files heavily. In 2022, I started writing a game editor that would allow me to edit those JSONs using not the text editor but a so-called WYSIWYG.
It looked like this:

And in development:

You can try it yourself, if you clone this repository and switch to the 1st of April state.
Quick note: you need to run npm install and npm start to see a game. Or npm run start:editor to see the editor.
Beginning
So I had my own game engine, my own editor, and my wife Tatiana (a rookie who also can code but can't do it on my own engine because, quote, "You didn't write documentation and it would take some time to grasp all things, and we don't have that time, so I'll just go and make some textures". Man, who needs documentation?! Joking, I will definitely write it a little bit later.)
We sat down together and started our joined journey to the spooky necromancer's world.
I started drawing a poster for the game.

We decided to pick up a color scheme from Lospec which has a mint color in it. And I also wanted something World-of-Warcraft-Duskwood-coded, so I asked my wife to search for some references. We have choosen this scheme:
https://lospec.com/palette-list/ty-celestial-sapien-26
We decided to pick 24x24 square as our basic size for character, so this guy was our Mr. Template (it is a main character from my last ludum game):

Tatiana has little experience with pixel art, so she was a bit nervous about everything. She combined a moodboard and made a sketch in Pixquare app on IPad with a pencil.

We started our work.
Developing
Continuous DeliveryMy game engine uses Javascript where everything was written from scratch except rendering. I use Three.js but hope to replace it with custom WebGPU renderer soon.
Usually, I use GitHub Pages for hosting my games; every repo gets its own page. For example, this game can be played at:
https://michailremmele.github.io/ludum-dare-55/
So every time I push something to the repo, the new build is sent to this domain. Easy and very convenient. Every person who observes my repo can play in early access :)
MechanicsFirstly, I started with moving and resurrecting mechanics. I borrowed some systems such as the movement and combat system from my previous game and fine-tuned them a little bit. Then I wrote a simple AI where the enemy sees you when you are in his attack radius and starts following you. You can press "E" to get an ally from a corpse. They will start fighting with each other.
I spent the whole day playing with my funny little schematic cubes, so the black cube is a corpse, the player is a violet one, and the enemy is red. The resurrected character is the mint one. Yes, playing the Captain Obvious here, but thought I needed to mention it.

Next few hours were about adding platforms, UI for health and mana (discarded it later) and a new type of enemy: a range enemy. An archer, to be precise. Due to the feedback, the biggest pain in the ass in this game. Can you believe that initially, friendly fire was enabled and if you have a ghost archer behind it can shoot you in the back instead of enemy. I fixed it afterwards, of course.

The next problem: my resurrected ally could not get to the archer on the platform. Look at how he trembles! Woah, I thought, should I really write an AI for pathfinding? It had been 7 PM already, and I was worn out. I decided that for the first day, I was done with coding.
Time had come for putting some sprites and textures to the game because the cubes stopped being exciting about three hours ago.
Art
Speaking of textures. My wife dedicated herself fully to the pixel art on the first day. Since she is a newbie, it took her a lot of time to shape objects to the form she wanted.
That's how her working panel looked:

"Look what I've made!", she told me, "I tried to make as many textures as I could so people would never notice that the grass repeats the pattern. Everything made in tiles!"
"So... How many tiles do you have for grass?" I asked with a small suspicion in my voice.
"Six!"
"W-wait, but..."
"And NINE different tiles for houses!"
The problem was, my editor has no such tools as a tile palette, so every template object should be picked from a looong dropdown list and placed on a scene. It could take hours to build a simple level if you have to pick from dozens of different tiles of the same thing.
"Okay, okay, do not freak out, I will combine everything for you myself," she said, with her brows raised in surprise at my uneasy face.
So that was a feature that I decided to add to my Notion space in the To-Do list.
That's what Tatiana initially had as a sketch:

And that's what she made after ~8 hours of drawing tiles and lines:

After she prepared textures for export, I added them to the level.

Everything was a little bit out of contrast, which was not what we expected. We decided that we'll do better tomorrow, in the second day of Ludum.
Second Day of Ludum Dare 55
After busy and nervous previous day, I dreamed of strange and complicated things. I woke up, and shared this with my wife.
"I had a dream about a 100-years-old corpse of my distant relative, which was already mummified", she said.
Ludum was going hard on us.
So we got back to our errands. The plan was to polish everything that we had. We discussed that it is highly unlikely that we will have enough time to design the main villain, aka Boss, with different phases and mechanics. Instead, we decided to add a crowd of enemies closer to the end.
We sat down and started working.
Art
I drew characters for the game. At first, it was a very simple sprite.

I added some action, such as summoning animation, damage animation, running, etc.

I drew enemies and animations for them:

Next, we decided to add more colors to the palette. Tatiana reworked some assets, so we had many minor changes:

Finally, we added skins for platforms and lightning sources for bonfires and lamps.

Development
So, it was time for some shitty code...
I made fighters forget the enemies if they stand up higher than 12 pixels. That's 1/4 of their height.

Then I added a simple if/else condition to the combat system to ignore friendly fire if a projectile collides with a player. Enemies still can kill each other. Occasionaly of course.
And the last meaningful change was THE summoning.
I gave my hero the Q button to summon his allies to the platform. At first, I thought: what a nasty hack. But it turned out to be a feature!
We decided to post the game on site, because we were tired from the development and drawing and wanted to start getting some feedback. So we got some, that allowed me to add some tasks to the backlog.
Feedback && Bugs
We made the final build and sent it to people.
Collision bug
Some of them complained about the characters going down to the void through platforms. I studied the bug, it seems that my physic system needs polishing – right now, if there is a lag, it creates a big delta time, that breaks a collision detection algorithm. In other words, collider could not detect an encounter.
I have a big plan to refactor the major systems in the engine later this year, so I've decided to create a special patched version of the engine with a small hack specifically for this game.
The physic system was one of the first systems in my engine, which I started to write in 2018. So yeah, time to revisit it, I guess.
Hitboxes
A different problem: I forgot to fix hitboxes. It is immensely hard to avoid any damage right now. Some say it's a challenge, and some will hate me. So... will patch it later.
Overpowered enemies
The archers are kind of ass. I mean, they have a 2 seconds delay before shooting, but they have fresh memories of your coordinates. Too fresh. So fresh, they will shoot you in your current precise postion. Well, it sure needs balancing.
Aftermath
In conclusion, Ludum Dare was very useful to me. Now I know, what I need to rework (physical system), add (analytic systems, sound system, tile system... a lot, actually) and fix.
It's hard to attract attention to your game, you need to market yourself etc. But still, you get the possibility to actually show your baby to someone :) so in the end it is worth to participate in the Ludum. We bonded together with Tatiana, got some experience, and will definetly participate in the next game jam.
Contacts
So if you are interested to play our game, this is the latest build:
https://michailremmele.github.io/ludum-dare-55/
I have a blog, but I write only in Russian. Plan to write in english, though:
https://t.me/mishapishetdvizhok
Here is my workshop about my engine (in Russian, will plan to add subtitles):
https://www.youtube.com/@MikhailRemmele
Game Source
https://github.com/michailRemmele/ludum-dare-55
Engine
https://github.com/michailRemmele/remiz
Engine Editor
https://github.com/michailRemmele/remiz-editor