# TODO ## Alpha Launch Minimum Checklist - [ ] Open Source Licenses - [x] Doodad Scripts: an "end level" function for a level goalpost. **Blocker Bugs:** - [ ] Sometimes the red Azulians don't interact with other doodads properly, but sometimes they do. (i.e. they phase thru doors, don't interact with buttons or keys). **UI Cleanup:** - Doodads Palette: - [x] Hide some doodads like the player character. - [x] Pagination or scrolling UI for long lists of doodads. **Nice to haves:** ## Release Launch Checklist **Features:** - [ ] Single-player "campaign mode" of built-in levels. - campaign.json file format configuring the level order - [ ] Level Editor Improvements - [x] Undo/Redo Function - [x] Lines and Boxes - [ ] Eraser Tool - [ ] Brush size and/or shape - [ ] Doodad CLI Tool Features - [x] `doodad show` to display information about a level or doodad. - [ ] `doodad init` or some such to generate a default JS script. - [x] Options to toggle various states (hidden, hasInventory?) **Shareware Version:** - [x] Can't draw or edit doodads. - [ ] Can only create Bounded maps, not infinite ones. - [ ] Can play custom maps but only ones using built-in doodads. - [ ] Can not place custom doodads in maps. **Built-in Doodads:** - [x] Buttons - [x] Press Button - [x] Sticky Button - [x] Switches (4 varieties) - [x] Doors - [x] Locked Doors and Keys - [x] Electric Doors - [x] Trapdoors (all 4 directions) ## Doodad Ideas In addition to those listed above: - [ ] Crumbly floor: Tomb Raider inspired cracked stone floor that crumbles under the player a moment after being touched. - [ ] Firepit: decorative, painful - [ ] Gravity Boots: flip player's gravity upside down. - [ ] Warp Doors that lead to other linked maps. - For campaign levels only. If used in a normal player level, acts as a level goal and ends the level. - Doodads "Warp Door A" through "Warp Door D" - The campaign.json would link levels together. - [ ] Conveyor Belt ## New Ideas - [ ] New Doodad struct fields: - [ ] `Hidden bool`: skip showing this doodad in the palette UI. - [ ] `HasInventory bool`: for player characters and maybe thieves. This way keys only get picked up by player characters and not "any doodad that touches them" - [ ] `` ## Path to Multiplayer * Add a Player abstraction between events and player characters. * Keyboard keys would update PlayerOne's state with actions (move left, right, jump, etc) * Possible to have multiple local players (i.e. bound to different keyboard keys, bound to joypads, etc.) * A NetworkPlayer provides a Player's inputs from over a network. * Client/server negotiation, protocol * Client can request chunks from server for local rendering. * Players send inputs over network sockets. ## Far Off Ideas ### Level Styles (Top-down vs Side Scrolling) It might be cool to support multiple "styles" of level, apart from the current 2D platforming-with-gravity style. For example a top-down perspective level would let the player freely walk in both axes and would probably have a full set of unique Doodads drawn in that perspective. Migration path: a GameStyle enum would be added to Levels and Doodads as an integer type, default 0 is the current 2D platformer style, 1 for top-down, etc. -- so existing levels and doodads would default to 0 on upgrade and new levels/doodads would use the new value.