Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased¶
Fixed¶
- Incorrect docstring for the
imageparameter in theBaseUIElement.__init__method.
0.4.3 - 2026-07-09¶
Fixed¶
- Added missing return typehint to
Game.set_target_scale. - Incorrect formatting for docstrings in the
UIContainerandBaseUIElementclasses. - Resolved a mutable default argument bug in
EnvObject.__init__that occured with thecollidersparameter. (See theEnvObjectentry in 0.4.x documentation.)
0.4.2 - 2026-07-08¶
Fixed¶
- Positioning bug in the lighting system.
0.4.1 - 2026-07-08¶
Fixed¶
- Build settings to exclude tests, examples, and docs from being added to the wheel.
Game.updateto use accumalated deltatime. This ensures that physics are deterministic and prevents bugs in the engine where increased deltatime could break the physics engine.
0.4.0 - 2026-07-07¶
Added¶
UIContainer.remove_all_ui_elementsmethod that removes all elements from that UIContainer.BaseUIElement.remove_from_all_containersmethod that removes an element from all containers.__version__string attribute in top-level package namespace.- The following to the top-level package namespace for easier imports:
BaseSceneGameplaySceneFontCameraPACKAGE_ROOTASSETS_DIR
- Comprehensive docstrings to the following:
MobileObjectmethods- Controller classes
CameraclassKeyboardInputManagerMoreKeysPressedEnvObjectFontGameObjectGameBaseSceneGameplaySceneUIContainerBaseUIElementButtonVisualUtils
Game.active_scenemanaged property that automatically returns the active scene from theGame.scenesdictionary.GameObject.light_radiusattribute for new lighting system (see below).- Lighting system in
GameplayScenethat usesGameObject.light_radiusto determine light sources.
Changed¶
- Breaking:
UIContainer.elementsandBaseUIElement.containersto managed attributes so that it can no longer be set directly. UIContainer.add_ui_elementto validate elements before adding them to the container.BaseUIElement.add_containerto validate containers before adding the element to them.
Removed¶
- Breaking:
groupsparameter from the__init__methods ofGameObject,MobileObject, andEnvObject.
Fixed¶
- Docstrings of
topdownengine.math.scale_rectandtopdownengine.math.lerpto use "pygame" instead of "pg". - Return typehint of
topdownengine.math.lerpto bepygame.Vector2|floatinstead of justfloat.
0.3.0 - 2026-07-03¶
Added¶
- New
example-cliff.pngasset to assets folder. Game.bg_colorattribute to control the fill color used in rendering cycles.BaseSceneandGameplaySceneclasses which are used to define scenes, which control theGameclass's execution loop. For instance, theGameplayScenewill render and update allGameObjectswhile a different scene could act as the main menu.UIContainer,BaseUIElement,Button, andTextclasses to allow for an object-oriented way to build UIs that are integrated into the engine.
Changed¶
- Breaking: Rename
GameObject.hitboxestoGameObject.world_colliders.
Fixed¶
BaseControllerclass docstring andStaticController.updatedocstring to refer toMobileObjectinstead ofMobileObj(which was the old name).- Camera offset in debug rendering logic.
0.2.1 - 2026-06-24¶
Added¶
- Dev dependencies (which is currently just
pytest ~= 9.1).
Fixed¶
- Dependencies by using compatible release notation in
pyproject.toml.
0.2.0 - 2026-06-24¶
Added¶
- Docstring to
GameObjectandGameObject.set_scale. Game.extra_featureslist to be defined upon instantiation that can enable extra features.- Window resizing logic (you can enable it by appending
"resize"toGame.extra_featureswhen initializing). Cameraclass,Game.cameraattribute that instantiates aCameraby default, and camera tracking ofGameObjects.
Fixed¶
- Docstring for
Gameclass.
0.1.0 - 2026-06-22¶
Added¶
Game.debugboolean attribute which draws thehitboxesof allGameObjectinstances inGame.game_object_group.
Changed¶
- Breaking: Renamed
MobileObjtoMobileObject. - Breaking: Renamed the
topdownengine.mobile_objsubpackage totopdownengine.mobile_object. - Breaking: Renamed
topdownengine.mobile_object.BaseMobileObjControllertotopdownengine.mobile_obj.BaseController. - Breaking: Renamed
mobile_objparameter in all controller classes tomobile_object.
Removed¶
EnvObject.updatebecause it was just callingGameObject.updateand not doing anything else.
Fixed¶
GameObject.generate_collidersto divide the default collider'sheightby 2. This makes the collider represent the feet instead of the entire sprite, making the engine more realistic and accurate.
0.0.3 - 2026-06-21¶
Added¶
- Google-style docstrings to
MobileObj,scale_rect,lerp,KeyboardInputController, andMoreKeysPressed.
Changed¶
- Internal logic of
GameObject.generate_collidersto remove unusedframevariable. KeyboardInputManagerso thatKeyboardInputManager.keysandKeyboardInputManager.just_pressed_keysare no longer defined in__init__.
Fixed¶
MobileObjto make the angles required for up and down animations narrower (45 degrees each) and left and right wider (135 degrees each).GameObject.draw_indexto useGameObject.elevationinstead ofGameObject.z.
0.0.2 - 2026-06-20¶
Fixed¶
- Elevation detection by no longer using
GameObject.unelevated_hitboxes.
Removed¶
- Breaking:
GameObject.unelevated_hitboxes.
0.0.1 - 2026-06-19¶
Added¶
GameObjectclass to house core systems like drawing image & rect generation, draw index generation, collisions, scaling & rescaling, and shadows.MobileObjclass (subclass ofGameObject) andMobileObjControllersthat allows developers to plug in different movement behaviors.EnvObjectclass (subclass ofGameObject) that allows adding environmental decorations, collisions, and objects.VisualUtilsclass in order to provide for the easy manipulation of Surfaces.- Two custom math functions,
lerp(that works for Vectors and numbers) andscale_rect, to allow for more concise code. KeyboardInputManagerclass to easily get keyboard input andNoKeysPressedandMoreKeysPressedclasses to allow for manipulating the input stream.assets/folder with predefined assets. It currently houses shadows and an example player sprite.