Hey everyone! My name is Rob and I’m going to use this space to keep a devlog of my work on Chronoweaver’s Loop.
Chronoweaver’s Loop is a small time-loop puzzle game where you play as Mune, a young apprentice mage who must solve the puzzles of her mentor’s crumbling tower. If you want to play the demo of the game, you can play it here.. This was created back in 2020 and is pretty rough. I made it in Construct 2, which shortly after releasing the demo, was no longer supported. So I dropped the demo until recently when I re-discovered GDevelop and well, here I am!
Alright Rob, what work have you done?
I spent the past two weeks familiarizing myself with the engine through the official tutorials and example games. I then began the process of porting over the demo to GDevelop. So far I have:
- Established my “Workshop” scene and main code event sheet (external of course!)
- Set up top-down movement
- Established my pixel font bitmap
- Set up my world timer
- FPS counter
- Got my “Game Over” loop working (see gif)
Timer runs out, fade transitions to Game Over, player hits a key and the game restarts
Up next I need to work on the “block falling” system which was pretty convoluted in C2. I think with GDev I’m going to actually learn how to use array to store the locations of the blocks. It will be a decent size chunk of work.
//DEBRIS AND TELEKINESIS//
For the past couple of weeks I have been focused on porting over two of the more complicated systems from the demo: the block falling system and the telekinesis casting state machine.
I learned how to build custom functions since falling blocks happen every ~10 seconds, fall at different locations, and have other attributes. So they will be called often and I didn’t want to repeat big blocks of action every time. Here is what my custom function looks like:
This function lets me:
- Pick the object
- Pick the start X location (off-screen since it falls into view)
- Landing Y value (since this is a top-down game)
- Whether it will be a “hole” or “debris”
- Call the shadow object at the same Y value
Here is what the setup of that function looks like:
I don’t want the blocks to fall to random locations because they are essentially a puzzle and, with this being a time loop game, I want the player to be able to memorize the locations and types of blocks that fall.
As part of the puzzle, the player can cast telekinesis that creates a reticle that they can then move around with the same controls. If they place the reticle on a debris block, they can then move that block to fill holes/clear the way. The design of this game includes simple controls (movement and one action button), so I would need to be able to toggle between these casting states by pushing one button. The state machine looks like this:
I had previously set this up in construct using an If, Else statement that just called functions. Unfortunately, this wasn’t as easy in GDevelop due to a lack of Else statement. BUT I got some excellent help from the community in the forums and was able to set up a working state machine to contextually toggle between these states by pressing one key.
Here is the state machine in play, with the current state displayed in the upper left.
Up next: Fill in holes by moving blocks and the orb puzzle system.
Oh, wow! This looks super cool, and the artwork is awesome. If you could add mobile controls, that would also be epic. Keep up the good work!