Week 7: More bug fixes and shiny new levels!

A pixel-art animation of a torch flame.
My new baked torch-flame animation.
Much more efficient than dynamically creating flame particles on-the-fly.

tl;dr: I fixed a lot of little bugs and created new levels!

What happened last week?

Note: Just to clarify things a bit, each "level" in Inner-Tube Climber consists of a series of "tiers". If you fall, you will restart on the latest tier that you have reached. So "level" creation, is really mostly just "tier" creation.

I fixed a lot of little bugs!

  • Fixed a performance issue with a very slow frame when reaching a new tier.
  • Replaced individually defined inner-wall tiles with a more-efficient single large non-collidable colored rectangle.
  • Replaced dynamically rendered torch particles with much more-efficient "baked" particles.
  • Fixed a confusingly reported bug where my CameraController would reference the already `queue_freed` (deallocated) camera, but the reference wasn’t null yet.
  • Godot would throw an error saying the camera is null, despite having just passed a null check in an `if` statement.
  • Apparently, Godot has multiple, inconsistent types of null. Yay...
  • Adjusted player collision width, so that they can squeeze through one-tile-wide gaps.
  • Deferred my Audio calls until the next frame, since the calling frame is usually pretty busy.
  • Slightly increased the mobile-control-v1 reverse-direction distance threshold.
  • Added a guard preventing movement past tier-start bounds when still jumping from previous tier.
  • Before, it was pretty easy to be bouncing side-to-side out of control from the end of the previous tier, and then fly right off the edge of the new tier.
  • Fixed a bunch of issues with snow transitions when reaching a new tier.
  • Updated the debug panel to show on all screens, not just the game-play screen.
  • Fixed a long-standing bug where max-height indicators would sometimes not align correctly.
  • This was due to an annoying bug in Godot's Tween system, where the property or method would not always be set with the final end state; so when I was sliding the indicator upward, it would sometimes stop short.
  • Replace all native GDScript `print` invocations to now print to my custom DebugPanel instead.
  • `print` statements are surprisingly expensive.
  • Also, `print` statements aren't as usable on mobile devices, or in non-local releases.
  • Refactor the music sequence to now be encoded as part of level configurations.
  • This gives me more control of which music is played during which tier.
  • Fix when the rate-app screen is shown.
  • It was being shown too early, after the player clears their first level.
  • I want the player to instead clear a few levels before pestering them with this.
  • Fix a bug that would flash a newly unlocked level-select item as unlocked briefly before starting the animation to show it being unlocked.
  • Enlarged the LevelSelect button on the game-over screen to make it more prominent.
  • Adjust mobile-control jump-tap region to be only a third of the screen width.
  • The drag-sideways region needed more space.
  • Added better screen-size configuration for debugging.
  • Adjusted in-air player movement to be more responsive to wind.
  • Disabled screen inputs while screen navigations are in progress.
  • I was seeing occasional bugs when clicking on a button from a screen that wasn't quite ready to handle clicks yet.
  • Added a jump-with-right-hand option, for left-handers.
  • Fixed max-height indicators for horizontally-scrolling tiers.
  • They weren't following the horizontal camera pan before.
  • Fix fog screen opacity and wind speed.
  • Fix one-way collisions in ice-wall tiles.
  • Fix the sound effects toggling setting.
  • Refactored OpennessType to be assigned within the top-level tier-configurations file rather than on individual Tier scene.
  • Added a new open-sided tier base.
  • Replaced the pause-screen Home button with a Quit button, which instead sends you to the game-over screen and saves your score.
  • Added support for clicking on an About button in a labeled-control-list row in order to open a screen showing more information.
  • This is useful for explaining how changing the difficulty mode will affect gameplay.
  • Added support for removing extra lives in HARD mode.
  • Fix an issue with overlapping music fade transitions.
  • Added support for playing each individual tier in its own separate level, to make playtesting easier.
AND, most importantly, I created a lot of new tiers and started created the overall level progression!

An animated GIF showing gameplay on one of my new tiers.
A new tier, making use of strong upward wind for increased jump distance!

An animated GIF showing gameplay on one of my new tiers.
A new tier, making use of a dark fog effect and strong sideways wind!

What's next?

  • Create even more tiers!
  • Polish my level progression.
    • I need to make some of the early tiers easier.
    • And I need to design things so that the player can easily learn new mechanics bit by bit.
  • A few more bug fixes.

🎉 Cheers!

This is a simple icon representing my sabbatical.


  1. > "Apparently, Godot has multiple, inconsistent types of null. Yay..."

    Undefined vs Null haunts you in a new language :)

  2. Nice, it's looking good! The wind mechanic reminds me of Celeste. :)

    1. Oh yeah, I forgot all about the wind in Celeste! I should probably go replay that game...


Post a Comment