## 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
[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
[ ] 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