df9fdf26c8
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
105 lines
5.4 KiB
Markdown
105 lines
5.4 KiB
Markdown
# Dusk Roadmap
|
|
|
|
Tracking upcoming milestones for the engine. See `PSP_OPTIMIZATION_PLAN.md`
|
|
for a memory/CPU optimization survey specifically targeting the PSP build
|
|
(milestone 4 below is its Priority 3).
|
|
|
|
## Upcoming milestones
|
|
|
|
1. Add a very basic physics engine, moving away from the current
|
|
tile-based movement.
|
|
2. Give entities full freedom of movement (no longer locked to tile
|
|
grid positions).
|
|
3. 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.
|
|
4. Investigate and fix poor UI rendering performance. First pass done
|
|
(2026-07-31): slider/tab/frame/textbox now cache their sprite
|
|
geometry instead of rebuilding it every frame, and the console's
|
|
vertex buffer is fixed-size instead of alloc/free churn (see
|
|
`STATUS.md`'s "UI rendering performance" note for detail). Still
|
|
open: per-widget material/color changes still force a sprite-batch
|
|
flush each time (color is per-material, not per-vertex), so a row of
|
|
alternating highlighted widgets still costs one draw call per
|
|
widget.
|
|
5. Create UI elements for displaying status indicators, e.g. network
|
|
connection state and save-in-progress.
|
|
6. Fully test saving end-to-end on all supported platforms.
|
|
7. Remove the tile system from chunks in favor of meshes, with
|
|
dynamic hitboxes per chunk loaded in from the chunk file data.
|
|
8. 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.
|
|
9. Build the socket server and client implementation, including
|
|
handlers for the different packet types.
|
|
10. Add a dedicated multiplayer entity type, `clientplayer`, alongside
|
|
the existing `npc` and `player` types. Limit to 8 (defined
|
|
constant) for now.
|
|
11. Send and receive `clientplayer` position over the network.
|
|
12. 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).
|
|
13. Create "handshake" packets. For now, just send the username,
|
|
enforced to be under 10 characters long.
|
|
14. Server tracks all players' positions and broadcasts them to all
|
|
connected clients.
|
|
15. Server sends disconnect packets for users who leave.
|
|
16. Server assigns each client a UUID; all clients know every other
|
|
client's UUID (used to reference them across position updates,
|
|
disconnect packets, etc).
|
|
17. Server notifies all clients (by UUID) when a user joins, leaves,
|
|
or is disconnected, so clients can spawn or remove the
|
|
corresponding `clientplayer` entity 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:
|
|
|
|
1. Re-enable `test/item` (currently commented out in
|
|
`test/CMakeLists.txt`) -- confirm it still passes and turn it back on.
|
|
2. Restore `itemgive.c/h` in `src/duskrpg/item/CMakeLists.txt` -- the
|
|
textbox UI dependency it was waiting on (`ui/textbox/`) is already
|
|
back.
|
|
3. Decide the fate of the `vita` target: `scripts/build-vita.sh` and
|
|
`docker/vita/` reference `-DDUSK_TARGET_SYSTEM=vita`, but no
|
|
`cmake/targets/vita.cmake` exists, so the build is currently broken.
|
|
Either implement it or remove the dangling scripts/Dockerfile.
|
|
4. Per-PR CI build coverage for non-Linux targets: first pass added
|
|
2026-07-31 as `run-tests-gamecube-dolphin`/`run-tests-wii-dolphin`
|
|
(build the ISO, boot it in Dolphin under Xvfb) and
|
|
`run-tests-psp-ppsspp` (build the EBOOT, boot it in PPSSPPHeadless)
|
|
in `.github/workflows/test.yml`, plus matching
|
|
`scripts/test-*-dolphin.sh`/`scripts/test-psp-ppsspp.sh` (+ `-docker`
|
|
variants). Marked `continue-on-error: true` since none of these have
|
|
actually been exercised on a real runner yet -- verify they pass
|
|
before relying on them, and drop the flag once they do. Knulli still
|
|
has no per-PR coverage at all.
|
|
5. Milestone 4 above (poor UI rendering performance) has a first pass
|
|
in (2026-07-31, see `STATUS.md`) -- remaining concrete lead: sprite
|
|
batch flushes are keyed on shader+material (including tint color),
|
|
so per-widget color changes (e.g. focus highlight) still force a
|
|
flush per widget; moving tint to per-vertex color would let a whole
|
|
row of widgets batch into one draw call regardless of highlight
|
|
state.
|
|
6. Revisit the GameCube/Wii networking static-IP workaround in
|
|
`networkdolphin.c` -- it's standing in for an unresolved suspected
|
|
memory-corruption bug in `if_config()`'s DHCP path.
|
|
7. 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.
|
|
8. 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.
|