Roll banner

Roll

26 devlogs
52h 36m 55s

A geometric speedrunnning platformer game!
This game is a more polished recreation of a game I made for a game jam, this time in 1 month :D

Demo Repository

Loading README...

Baton

Shipped this project!

Very proud of this speedrunning game! I learnt a LOT of new math stuff (projections, splines, frame-independent interpolation) while trying to make it, and had a lot of fun. This will probably spiral into my first full game after this; This is just a demo, after all. I have so many more ideas and polishes to make, like adaptive music, SFX, multiple worlds’ worth of levels…

Baton

Put the finishing touches on for this release; made banners, the README, got screenshots, builds, everything else. I made the banners in the game itself, since I wanted to use the polygon tool and font.

Attachment
Attachment
Attachment
Attachment
Attachment
0
Baton
  • Added the second level for the introductions, and changed the level scenes from being numbers to being the names of the levels.
  • Started setting up things for the build, since I might call it here for levels for the Flavortown release.
  • Made the level selection screen parallax only happen when necessary
Attachment
0
Baton

Remade 1-1, since it was way too hard - I was half-dead when I made it originally ._.
The old 1-1 is going to be a later level instead, and I’m going to split the mechanic introductions into multiple levels, half so I don’t need more level ideas, half because it’ll be more manageable for the player.
Also made some minor optimizations, since it was lagging HARD after pulling to my home laptop - the DashCooldownBar especially was lagging since it was updating color every frame, even when the value was unchanged.

Attachment
0
Baton

Made the death border visible, and added a few indicators for when the dash cooldown resets.

Attachment
Attachment
Attachment
0
Baton

Made the death border visible, and added a few indicators for when the dash cooldown resets.

Attachment
Attachment
Attachment
0
Baton

Remade 1-3, fixed all the score/rank thresholds, and made the pause menu actually exist and let you quit the level.

Attachment
0
Baton

Remade 1-2 to work with the new speed and mechanics - I just started from scratch because the previous version could be beat in two seconds with the dash mechanic.

Attachment
0
Baton

Remade 1-1, and fixed some UI things.

Attachment
0
Baton

Reworked TimeSlows to support rectangles as a shape. It took SO LONG, because the formula is way different, and it took me a HOT minute to not only change the existing code to support it, but figure out what the math was. Here’s a new rectangle one next to an existing circle, with the same settings.

Annoyingly, since the rectangle’s formula is more expensive, it lags when it re-renders the editor overlay, which means I did a bit of work to make it not redraw every frame like it was, now it’s just when the settings change or the window does.

Attachment
0
Baton

Spent way longer than I’d have liked reworking how runs are stored, since now we need to worry about scores - changed from an array of times to an array of objects that store the time and score, plus some extra info based on the time and score and level for easy access. Also minor style tweaks, and a little + by the rankings when you beat their score thresholds.

Attachment
0
Baton

I love forgetting to devlog. Favorite activity.
Made some more levels, then one of my friends gave me ideas that completely changed my plan for the game, so I spent 8 hours prototyping to see if it’d work;

  • Air Tricking Combos; Use WASD midair to do combos for points.
  • Dashing; Press E / Right Click to dash in the direction from the player to the mouse.
    Also did a bunch more work on the UI, namely the main screen.
Attachment
Attachment
0
Baton

Oh. I forgot to devlog for 3h… I pretty much just did all the set up and started working on World 2;

  • Gear tool script to make the background
  • AnimatedSplines for the interpolation mechanic
  • The aforementioned background
  • 2-1 and 2-2
Attachment
Attachment
Attachment
Attachment
0
Baton

Got a sixth level done for this first world, and I’m deciding to call it here - we’re moving onto the second world. I am fully out of level ideas with just the pieces introduced so far - once spline lerping is introduced I’ll hopefully be sitting better for ideas.

Attachment
0
Baton

Finished setting up the times and other tweaks to 1-2 / 1-3, and made 1-4. It’s just a momentum-building practice level. Also added Velocity Amplifiers (They add a set amount to the player’s velocity), which the next 3-4 levels will be based around.

Attachment
Attachment
0
Baton

Added a speedometer in the bottom right so you can see how fast you’re going, made several level tweaks based on feedback I got, and started working on 1-3

Attachment
Attachment
0
Baton

Finished up the first two levels, after a LOT of playtesting, and added some spikes that kill the player on contact for the second level.

Attachment
0
Baton

Got the run timer working, + the level/world unlocking stuff and the reset key - holding down R for a full second resets the current level.

Attachment
0
Baton

Added a merge sort function since the default sort function was… working differently depending on the OS? Also got most of the first level done. I definitely have more work to do on it, but we’re getting somewhere.

Attachment
0
Baton

Added some fonts, a UI element, and a time-slowing effect.

The time slowing affects delta and was initially making the jump really suck - I thought it was something to do with lerp being time-dependent, and fixed that following (https://www.youtube.com/watch?v=LSNQuFEDOyQ), but it was literally just me multiplying the jump height by delta…

Since this devlog’s shorter, might as well mention how I did splines; coincidentally I learned about how splines work from a video by the same creator as above; (https://www.youtube.com/watch?v=jvPPXbo87ds&t=809s) - spent a few weeks making an implementation of the continuous ones mentioned in it by building a tool script over top of Line2D, where points are sectioned into 4s, then turned into quadratic(?) splines. Then sample points from those splines are used to create the actual line.

For the meshes, I turned each point into two on either side of it half the width away - the direction is “perpendicular to the direction between the two neighboring points” (see the picture of a sketch example I made while I was coming up w/ this). Then those points are put in different arrays, which are combined at the end to make a continuous mesh.
It gets pretty close to smooth, but definitely runs into issues - it’s like a poor man’s version of Line2D’s solving. Notably, the points can overlap and completely mess up the mesh if the spline overlaps itself - I haven’t found a solution for that yet.

Attachment
Attachment
0
Baton

Spent way too long on way too little;

  • Got the camera all set up (I might make a few tweaks, I think it could use some more bounce) - it uses a second-order system as per “Giving Life To Procedural Animation Using Math” on YT.
  • Made a background for the first world. It definitely still needs a lot of work - I can’t do art D:
  • Made the Splines and Chains (I never explained those did I? Maybe in a later devlog lol) create their own collision via StaticBodies and CollisionPolygons instead of relying on me to make them, so I can just Ctrl-A + Spline + Enter to create a Spline node.
1

Comments

nmsoukmandjiev007

this looks peak!

Baton

Added the ability to put textures on the splines.
Made the velocity on hitting a wall more accurate; when you fall onto a wall, it projects your velocity onto the wall, and takes the higher of [the default grind speed, the projection’s magnitude] and uses that for the grind speed. Basically, if you’re already going fast and you grind onto a parallel surface, you keep most of your speed.
Red line is velocity, blue is the wall direction, green is the projected velocity.

Attachment
0
Baton

Added Goals and DeathBorders for win and lose conditions; There’s of course a tool script to show the death borders.

Got the entire level resetting cycle working; it’ll need to be added per thing that needs resetting, but that’s expected - also added a countdown when you start/restart a level so there’s time to realize.

0
Baton

Made a extension of the RegularPolygons (AnimatedPolygon) that supports some basic animations;

  • Spinning; the inner and outer ring can spin independently
  • Oscillating; Modulos of the vertices can bounce in and out.

I also am finally home so we’re doing videos again - here’s how everything is so far, there’s a AnimatedPolygon in the background.

0
Baton

Imported some scripts from my previous attempt, and ported them to work with how things are set up now. Mainly the Player’s controls, the Spline and Chain script, and the RegularPolygon script, since they’re the most technical ones and I didn’t want to rewrite them for no reason.

Used some RegularPolygons to make a simple graphic for the player, and built a quick test environment for the player; the controller works as expected after some tweaks, since the resolution is different.

Attachment
Attachment
0
Baton

Way more work on the UI; Got the actual implementation of what I want it to do done. All that isn’t working is actually loading the levels (since they don’t exist), and cycling between world screens (since there’s only one.)

Attachment
0
Baton

Started setting up things for the levels and the world/level selection screen. Mostly just function rn - got the file hierarchy set up the way I want it.

Every world screen is in the same folder, and it loads all of the screens in that folder, then the screens load a level entry for each LevelData resource in their corresponding folder.

Attachment
0