4.4 KiB
4.4 KiB
Dusk Roadmap
Tracking upcoming milestones for the engine.
Upcoming milestones
- Add a very basic physics engine, moving away from the current tile-based movement.
- Give entities full freedom of movement (no longer locked to tile grid positions).
- Update entity interaction, triggers, chunk management, and other systems that currently assume tile-based positioning so they work with the new 3D positioning/movement code.
- Investigate and fix poor UI rendering performance. Rendering the console alone tanks framerate despite the existing mesh optimizations, so there is likely more headroom to find in the vertex/text rendering path.
- Create UI elements for displaying status indicators, e.g. network connection state and save-in-progress.
- Fully test saving end-to-end on all supported platforms.
- Remove the tile system from chunks in favor of meshes, with dynamic hitboxes per chunk loaded in from the chunk file data.
- Create UI elements for network status: a connecting modal, an error state, and a connected flag. Retire the test HTTP request once these are in place.
- Build the socket server and client implementation, including handlers for the different packet types.
- Add a dedicated multiplayer entity type,
clientplayer, alongside the existingnpcandplayertypes. Limit to 8 (defined constant) for now. - Send and receive
clientplayerposition over the network. - Create a UI menu for creating a server and joining a server. For now, join IPs are hard-coded (testing against a fixed IP of 10.0.0.94).
- Create "handshake" packets. For now, just send the username, enforced to be under 10 characters long.
- Server tracks all players' positions and broadcasts them to all connected clients.
- Server sends disconnect packets for users who leave.
- Server assigns each client a UUID; all clients know every other client's UUID (used to reference them across position updates, disconnect packets, etc).
- Server notifies all clients (by UUID) when a user joins, leaves,
or is disconnected, so clients can spawn or remove the
corresponding
clientplayerentity in the world.
Infrastructure / debt backlog
Found during a full-codebase inventory pass (2026-07-30, see STATUS.md
for the full survey). These aren't new feature milestones so much as
loose ends worth closing, roughly in order of how cheap/safe they are to
fix:
- Re-enable
test/item(currently commented out intest/CMakeLists.txt) -- confirm it still passes and turn it back on. - Restore
itemgive.c/hinsrc/duskrpg/item/CMakeLists.txt-- the textbox UI dependency it was waiting on (ui/textbox/) is already back. - Decide the fate of the
vitatarget:scripts/build-vita.shanddocker/vita/reference-DDUSK_TARGET_SYSTEM=vita, but nocmake/targets/vita.cmakeexists, so the build is currently broken. Either implement it or remove the dangling scripts/Dockerfile. - Add per-PR CI build coverage for at least one non-Linux target (PSP, Knulli, GameCube, Wii currently only build on tag push, so regressions there are invisible until a release).
- Tackle milestone 4 above (poor UI rendering performance) with a
concrete lead: extend
uiconsole.c's cached-mesh pattern (rebuild only on dirty) to the general widget framework (uiframe.c/uilabel.c/buttons/menus), which currently rebuilds and re-uploads geometry viaspriteBatchBuffer/meshFlushevery frame. - Revisit the GameCube/Wii networking static-IP workaround in
networkdolphin.c-- it's standing in for an unresolved suspected memory-corruption bug inif_config()'s DHCP path. - Decide whether the PSP dialog-based network connect UI needs to come back -- it was removed entirely (not fixed) when the original dialog-tearing bug proved hard to resolve.
- Backfill unit tests for the biggest untested surfaces:
ui/(whole widget framework),save/,script/(JerryScript bindings),event/.
Principles
- Never trust the network implicitly. Neither side (server or client)
should assume the other's packets are well-formed or benign --
validate all incoming packet data defensively, since either side
may send garbage or malicious data. Use
errorret_t/errorThrow()for these runtime checks, not assert macros -- asserts are debug-only and won't guard release builds against malformed or malicious packet data.