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()PlayerPoleState some more.
POLESWING debug log for better logging in-gameSWING_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 thistrigger_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.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.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 prototypePlayerController now has a detector Area3D for layer 8 called “SwingDetector” which emits a signal on enter/leavePlayerAbstractState now has its 3 methods correctly marked as @abstract instead.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! 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.
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.
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.func_button now has an interact_sound property which it will play when interacted with.GameManager now has `get_player_preferred_interactable
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 calledPlayerController 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() callfunc_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. 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.TBHelper methods from a previous project.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.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.
emily/chloe
it/its/she/her
occasional maker of things and poster of thoughts