From: Lukas Krickl Date: Fri, 19 Sep 2025 06:40:50 +0000 (+0200) Subject: updated todo X-Git-Url: https://git.krickl.dev/?a=commitdiff_plain;h=f03d4b4b02c9d121471f46088c61864f9507a42f;p=gbrg%2F.git updated todo --- diff --git a/TODO.md b/TODO.md index 9f7651c..b988cd2 100644 --- a/TODO.md +++ b/TODO.md @@ -4,132 +4,13 @@ ## scope -[ ] RPG adventure -[ ] Move from room to room -[ ] Each side may have up to 10 units on a map -[ ] Setting: spy infiltrating a lab to steal/destroy plans - -## Combat - -[x] Unit is selected based on the unit initiative queue -[x] Units have a move counter -[x] Move counter should be 1 for most units -[x] Display moves in UI for selected units -[x] Each action consumes moves -[x] Units are moved one tile at a time -[x] When a unit is out of turns the next unit is selected -[ ] Units can attack ranged or melee -[ ] Melee works if unit is next to target -[ ] When a unit moves away from an adjacent melee unit it can attack -[x] Units use state machines to update -[x] Each unit's start state is a polling state -[x] The polling state can either be player input or CPU input -[x] Mark the current active unit with a cursor -[x] When starting an encounter the player can place all hero units and troops based on initiative -[x] Rework all max stats to be calculated (e.g. hp max is calculated based on endurance) -[ ] If a unit touches the player scan left right up and down and enter combat with all adjacent units -[ ] Load a combat scene with up to 4 units - -## Map - -[x] A map is a 32x24 playfield consiting of 8x8 tiles -[x] A map may reduce the playfield by making out of bounds tiles walls -[x] The camera always centers on the current unit -[x] All units are always visible -[x] Tiles can be impassible, walls or walkable -[x] Every map has an exit table -[x] Tiles that are flagged as exit have all the rest of their flags point into the exit table -[ ] Exits may be locked -[ ] Add sprite based door animation that plays while the map is doing a prtial redraw -[x] Doors may be opened and can unveil more of the map -[x] Implement partial map redraws. Allow queueing up a map redraw which then is processed over several frames. Allow setting a start address, tiles per row and rows to redraw. - -[ ] Map generator rework -> each floor consists of 16x16 maps -[ ] Save cursor to player's current map location -[ ] When player is at the top, left, right, bottom tile and presses up, down, left, right -> move cursor -[ ] Re-generate map based on the saved seed for each map -[ ] Maps are simply rooms. Doors are at the edge. -[ ] Maps can have limited visibility (e.g. monsters can only be seen nearby) -[ ] A single room pattern is placed per map. -[ ] When initially loading a floor generate where the exits go -[ ] For this purpose add a floor struct containing - - Exits - - Seeds - - Enemy save data -[ ] Remove exit tables -[ ] mapgen should call load map after selecting a map from a table -[ ] load maps from random table per floor -[ ] remove room patterns and replace with map tables - -# Items - -[ ] Each item can have all stats either as a positive or negative effect -[ ] Each item can also increase or decrease attack damage - -## Units - -[x] Move unit with d-pad -[ ] A/B = attack in direction -[ ] Ranged attacks can be blocked by solid tiles -[ ] Ranged attacks have a max range -[ ] Units wake up when a player is too close -[ ] Units inside a hidden map area only wake up when the area is uncovered -[ ] Units flash for a while when they were damaged - -## UI - -### Map UI - -[ ] Display active unit player stats hp, mp and fatigue -[x] Only center camera on player -[x] Implement shadow UI tileset similar to how a map is kept in ram -[x] Allow queueing up a redraw of the UI +[ ] Bullet shooter ## Randomness -[x] The entire game is based on d16 rolls -[ ] Weapons do damage based on a roll -[ ] Some weapons can roll twice and take the best -[ ] Some weapons can roll twice and take the worst -[ ] When being hit a resistance roll based on armor and other stats is done -[ ] Add special sprites that can be positioned on units that display their last roll - -## Map-gen - -[x] 9 maps are hard-coded with exit tables -[x] Each map has their walls or exit tiles set up on the edge -[x] on non-wall tiles rooms are generated -[ ] The player cannot return to previous floors -[x] The enemies that may appear on each floor should be randomized from a list -[ ] Some enemies are hard-coded to appear -[ ] Some floors can have hard-coded maps that load in -[ ] Chest tiles are placed randomly -[x] Enemies are placed randomly -[x] Map-gen places small rooms -[x] It searches for a spot where empty tiles are large enough for the room to fit -[x] It places doors to a wall it finds nearby. -[x] It repeats this until no more rooms can be placed -[ ] Each level has its onw post generation step that can be run -[ ] Each level has a hard-cided post step that places the exit to the next level -[ ] Each level has a shortcut to town (previous entrance) -[ ] Save map state (e.g. actor flags, chest flags, door flags, loot flags with seed and map ptr used) in sram - Do not save the actual generated map -> instead generate it again on demand ## Weapons -[x] Melee attack -> one tile range -[ ] Range attack -> uses mp (munition points) -[ ] Weapon upgrades via items - - -## Menu -[ ] Direction -> walk -[ ] Direction if enemy in way -> attack -[ ] Select -> Show all commands and allow player to assign one to A and one to B button -[ ] Start -> stats and inventory -[ ] Commands: Cast, Equip, Eat/Drink, Read -[x] Some commands require an additional direction input -> when executed put player in - direction select state. ## Inventory [ ] Stackable upgrade items @@ -148,10 +29,6 @@ [x] make table for each actor type where animations can be looked up e.g. idle for each, walk left, walk right, walk up, walk down, attack etc -[ ] allow sub tile movement by setting up a rt_st_x and _y value in each actor - this value will then be inc/dec in special move left, right, up, down wait states - this value will be added to the rendered object in unit_draw - ## movement [ ] rework movement to be pixel instead of tile based @@ -161,11 +38,22 @@ [ ] player can turn with direction keys [ ] if shoot is pressed turning is disabled and the direction is held -## mapgen +## actors: + +[ ] actors have a specific collision box + +## map + +[ ] maps are vertical levels +[ ] each map can have many map objects +[ ] map objects are based on the current page +[ ] objec types: + - wall (collision rectangle) + - shootable wall (takes damage) + - enemy spwaner (spwans n enemies of a specific type) + - enemies always spawn slightly off screen and walk in once a spwaner is triggered +[ ] scrolling is only possible up. moving back cannot be done + +## sate machine -[ ] rework maps to use patterns -[ ] maps scroll upwards -> spawn actors from table -[ ] once actors are defeated allow moving up again -[ ] repeat until level is beaten -[ ] maps can have objects (e.g. doors, collision rectangles etc) -[ ] remove tile flags entierly +[ ] rework state machine to only consist of a sub pointer that can be changed with a call