# TODO
-## turn based
+## scope
-- [x] Movement should be turn based
-- [x] PLayer moves from one tile to another
-- [x] Let animations play and then update AI actors after player move
-- [x] Collision can then only use a single coordinate to check
-- Animation system:
- - while an animation is playing the game is stopped
- - animations are queued in an animation queue with some simple parameters
+[ ] simple city builder
+[ ] map fills one scroll area of the gameboy - UI area
+[ ] UI area in window
+[ ] each frame a few tiles update. Tile updates end when the update max is exhausted of no more sprites are left for speical indicator (e.g. no power)
+[ ] if indicator sprites were used wait a few frames to allow the user to see them
+[ ] popup menu
+[ ] when hovering over tile show meta information
+[ ] display housing/commercial/industry demand in bottom UI
+## simulation state
-## dungeon generator
+### global
-- [x] Generate a map of rooms
-- [x] Maps are stored in wram
-- [x] Rooms are taken from a set of base rooms in rom
-- [x] Each room has 4 possible exit pointers which are set to 0000 by default
-- [x] When a room is made the next direction will be picked
-- [x] The generator then sets the exit pointer accordingly
-- [x] Low chance to backtrack in either direction.
-- [x] If direction is already taken, try again
-- [x] If it fails after 4 tries advance to a new room and try again
-- [x] Do this until all rooms are filled
-- [ ] Allow for maps that make more sense in 2D space (loops etc)
-- [ ] Implement a mini map
-- [ ] Do not hard-code enemy type instead only use location and pick an actor from an actor table randomly
+[ ] housing demand (0-3)
+[ ] commercial demand (0-3)
+[ ] industry demand (0-3)
+[ ] total population (24 bit)
+[ ] money (24 bit)
-## Room transition
+### per tile
-When a player hits the edge of the map a room transition should start.
-A player can either go north, west, east or south.
-The target room of a transition should be stored in a room exit table.
-When a transition happens the state of the previous room should be written back to sram (e.g. actor table).
-If possible make the animation smooth instead of simply blanking the screen.
-Scroll offsets need to be applied to:
- Actor objects
- Player objects
- The UI
-After a transition the UI needs to be redrawn again.
+[ ] type
+[ ] gfx
+[ ] traffic
+[ ] energy surplus
+[ ] crime rate
+[ ] fire risk
+[ ] FLAGS: on fire, destroyed, abandoned
+[ ] tiles have different update loop based on tile type
+[ ] occupdation/workers
+[ ] some more for special tiles
-## Actor table
+## tick based
-Refactor actor tables to only access the `curr_room_actor_table` which points to a region in ram.
-This will allow us to avoid calling memcpy every time we load a new room.
+[ ] simulation updates the entire map every N ticks
+[ ] pause key pauses simulation but allows player to still look around
-## Combat
+## map generator
-Combat happens on the map. The player opens an action menu, selects an action and then presses a direction.
-
-## Stats
-
-Add stats menu that shows all the player's stat numbers.
-The player can level up.
-
-[ ] Player stats should be simple to understand
-
-- HP
-- MP
-- ATK
-- DEF
-- EXP
-
-Stats should be 8 bit numbers.
-Only the player has stats saved, actors are simply looked up based on type + floor.
-
-
-## Animations
-
-[x] Add cursor around current active actor.
-
-## Item slots
-
-All items are held in slots.
-If the item space overflows one item if pushed out of the slots.
-Display all held items (icons) in select menu.
-
-## Resting
-
-Resting should always be possible, but it has a chance to spawn an enemy nearby.
+[ ] randomly generate maps with rivers