Devlogs

Short updates for what I've done on a given day

2026-01-13 - Untitled New Project

  • Disabled the rigidbody pushing logic I added a few days ago (its still in but set to zero force so it doesn’t trigger)
  • Added the testing bee!
    screenshot of a very cube shaped bee with a little hard hat


2025-12-07 - Project Fragmentation

  • The omni_range/spot_range fields for light_omni and light_spot are now measured in Quake Units not Godot Units to make them easier to work with. I’ve updated all map files to reflect this.
  • PlayerController now has _determine_flat_wish_direction() which houses the logic for figuring out the desired horizontal direction given the players inputs which previously existed in _drive_motion()
  • Worked on PlayerPoleState some more.
    • Now has POLESWING debug log for better logging in-game
    • Refactored some of the math to be in helper functions which’re nicer to use
    • Added friction and gravity as constant forces that apply to the player while swinging
    • Player can now swing forwards and back by holding the movement keys.
    • When the player dismounts from the bar, they gain a boost to their speed controlled by SWING_JUMP_FORCE_MULTIPLIER and an additional direct vertial boost controlled by SWING_JUMP_BOOST_IMPLUSE, although these values still need tuning.
  • PlayerController now has force_update_checkpoint_placement() which unconditionally moves the player’s respawn point. try_update_checkpoint_placement() now calls this
  • Added trigger_force_checkpoint brush entity. While the player is inside the trigger and on the ground, if their respawn marker is further than distance_threshold away they automatically move their respawn marker to their current position, even if they’re not in a checkpoint zone.
  • Added more poles to test_poles.map. Also made it so instant respawn and the POLESWING debug log are already enabled as soon as the player loads the map.

2025-12-02 - Project Fragmentation

  • func_swingbar now marks it’s Area3D as layer 8 (SwingVolume). Also has new helper methods is_point_within() and get_anchor_point(), neither of which have final implementations but the current versions are good enough for a prototype
  • PlayerController now has a detector Area3D for layer 8 called “SwingDetector” which emits a signal on enter/leave
  • PlayerAbstractState now has its 3 methods correctly marked as @abstract instead.
  • Created new player state PlayerPoleState and the PLAYER_STATES enum now has a GRABBING_POLE value. The pole grabbing state very basic swinging implemented, determining the rotation speed and direction when the player touches and continuously rotates the player around the bar’s axis. When the player jumps off the bar their velocity is updated to be tangential to the swing volume. Its not great but its a functional start!

2025-12-01 - Project Fragmentation

  • Started work on implementing swing on poles. Added func_swingbar point. Currently just defines a end point relative to the start point and then generates an aligned cylinder Area3D and some debug drawing. No functionality yet.
    alt text
  • Starting building out test_poles.map to help experiment with poles. Has a toggleable ramp with a push trigger for quickly gaining speed but other than that its pretty basic.
    alt text

2025-11-30 - Project Fragmentation

  • AbstractTriggerVolume now supports the parent property. (This affects trigger_push, trigger_repeatable, trigger_respawn and trigger_teleport primarily)
  • env_sound now supports the parent property.
  • Reorganized files so entity scripts and entity definition files are stored consistently.

2025-11-29 - Project Fragmentation

  • func_button now has an interact_sound property which it will play when interacted with.
  • GameManager now has `get_player_preferred_interactable
  • Added a simple animated indicator when there’s something you can interact with (screenspace aligned with the center of which InteractableVolume will be used). Visuals are extremely temporary for now.
    screnshot showing the new indicator

2025-11-28 - Project Fragmentation

  • Added InteractableVolume class. Provides an Area3D on collision layer 3 (Interactables) which can copy the collision shapes of another brush. Has a view_angle_threshold property which controls how aligned the player’s camera view ray is to looking directly at the volume to be considered ’looking at it’ (defaults to 0.75). Also emits a signal when interact() is called
  • PlayerController now has an InteractableDetector Area3D attached to it which is a capsule that extends 0.5m in all directions. Each frame it iterates over every overlapping InteractableVolume and calls determine_interactable_priority() to determine which should get the interact() call
  • Added “interact” input action, defaults to E, and added it to the options keybind menu.
  • Added func_button brush entity. Creates a InteractableVolume subnode when built and triggers its target when interacted with. Currently very barebones (no built-in sound support, doesn’t support enable/disable, etc) but its something.

2025-11-25 - Project Fragmentation

  • Enabled physics interpolation for the whole project (excluded the player’s smoothed root setup from interpolation due to that being managed manually)
  • Created FuncTwoPointMover as an internal superclass of func_door (and later func_button and whatever else i need) to hold all the use-case agonstic logic (like movement and physics). func_door is now largely a wrapper around FuncTwoPointMover but eventually it’ll hold door specific logic for things like locking and being in a specific state during timetrials.

2025-11-17 - Project Fragmentation

  • Migrated some extra TBHelper methods from a previous project.
  • Added assign_parent_if_set to TBHelper, reparents the entity on build complete to the first entity with a matching targetname in the “parent” field if set, otherwise does nothing. For use with the new base_parent base class, currently only env_sprite supports this but it should work on most things.
  • Started work on func_door, using a similar setup to a previous project. Currently supports direction, speed, lip, opening and closing, and the “Start Open” flag. Doesn’t play sounds yet or support locking. Standing under a door will happily crush you into the floor so i need to do something about that.

what if a bug had a website

emily/chloe
it/its/she/her
occasional maker of things and poster of thoughts