# Buddle Roadmap
## Overview
#### Until Dec 31 (ordered by priority)
- Load zones
- Switch between zones
- NPCs
- GUI (optional)
- Duels (stretch)
- Proper contribution guidelines
## Contributing
- Our demography is wizwalker's and Kronos server's technical audience
- We need to do resources
- Kronos had a book with contribution guidelines
- Basically just copy it over, including copyright and legal disclaimers
- We need to do issues on GitHub with proper labels
- We need a channel for first-time contributors to seek help on Discord
- As soon as groundwork is done, people can work on personally desired features
- Advertise the project?
## Implementation
### Crates
- buddle-render -> Generic rendering engine for NIF/UI stuff
- buddle-object-property -> Reflection and serialization machinery
- buddle-net -> Frame abstraction and binary (en|de)coding of it
- buddle-dml -> Traits and xml codegen for DML protocols
#### ObjectProperty
- Implemented in `buddle-object-property`
- Foundation for most serialized game logic and networking
- Almost done, just needs ~~bitenum macro,~~ serializers (binary/xml)~~, and
some C++ types like serialized pointers~~
#### Rendering
- Implemented in `buddle-render`
- We want this to be cross-platform with `winit`, `wgpu`, `egui`
- Draws inspiration from https://docs.rs/bevy/latest/bevy/render/index.html
and maybe https://github.com/BVE-Reborn/rend3
- `wgpu_glyph` for text rendering
- `wgpu-profiler` as a first-class citizen for debugging/optimizing later
#### Networking
- Implemented in `buddle-net` and `buddle-dml`
- Codec for encoding and decoding control/dml frames
- Can be ported over from Kronos, just encryption support needs to be added
- Deadline: Better soon because we'll need them early on
#### File formats
- Crates for all the file formats using `binrw`
- `memmap2` and `flate2` with SIMD backend for KIWAD archives