(in no particular order; these are bugs; these are deprecated features or plans [mouse over to see text] )
Plants
- 3d turtle geometry system
- break down lsystem into discrete parts and draw lines between every connected point
- expand 'connected lines' to a tapering solid; draw outward-facing hexagons at the end of each branch
- make sure the tapering solid's edges join properly
- expand 'connected lines' to a tapering solid; draw outward-facing hexagons at the end of each branch
- break down lsystem into discrete parts and draw lines between every connected point
- lol root system D:
- slice off parts of l-system iteration that grow into forbidden areas of the world (e.g., solid rock, total darkness, etc)
- including avoiding growing into other plants, which seems like it would be more of a constraint than growing into the terrain
- bias plant growth (via l-system expansion) towards areas that have 'nutrients' of various sorts (aboveground: light; belowground: magic deposits)
- let the player slice off parts of the tree to prune it
- including avoiding growing into other plants, which seems like it would be more of a constraint than growing into the terrain
- actual plant growth cycles
- seasonal plants + plants that only flower after being established
- hybridizing plants
- plant death
- plant seeding
- 3d turtle geometry system
Hexes
- allow nonplanar hexes again, by storing their corner/center values
- tile stacks that allow for overhangs
- volumetric storage of tiles?
- fences/walls which run from any one corner to any other corner
- cursor tile picking
- IN-GAME TILE EDITING
- blueprints
- ui for making blueprints
- positioning and placing blueprints
- conflict resolution re: differing landscape at placement than at the design site
- targeting specific tiles for one-time deformation (minecraft-style block removal?; roller coaster tycoon-style corner sloping???)
- blueprints
- cosmetic improvements to hex rendering
- hex vertex jitter (corners not on grid) [optional]
- hex edge curve (tile edges not straight lines) [optional??]
- TEXTURES
- better png loader
- that can load a rectangular sheet and break its pixels down into 2^x square opengl textures
- geometry deformation (from texture data)
- rotate texture around hex's surface by hashing its position within a hex region
- better png loader
- increase efficiency of hex drawing
- don't draw any grounds which are entirely outside of the view frustum
- draw distant hexes as triangles
- merge planar hexes into larger triangles, and be more aggressive about what 'planar' means the further away the hexes are
- Tile occupants aren't actually updated if the occupant moves. This creates some issues when destroying grounds, since the occupant lists don't match up with the position of the occupants. so. fix that.
- Sub-problem due to the same code: if the ground the player spawns on is ever destroyed (e.g., by walking until it's unloaded like any other distant ground) the player object is unceremoniously deleted since it's still in the ground's occupants list and so the program thinks it should be deleted.
- Some issue with grounds being destroyed when they shouldn't be; maybe caused by trans-pole rendering or revisiting previously-loaded grounds (might also be due to worldgen)
- Crossing pole edges crashes the game
CAMERA
- working 3rd-person camera
- clamp 3rd-person rotation to target rotation
- clamp isometric pitch to avoid making the horizon visible
- decouple isometric rotation from target rotation
- camera initialization should initialize with a camera label (otherwise there's a one-frame flicker where the view is rendered at the origin)
- camera view jitters wildly every so often; probably something to do with the new matrix calculations having outdated target position data for one frame after a grounds update (note: grounds update, not camera label blah blah blah update)
- Sometimes randomly at program start the grounds will not be loaded, and the player will be stranded on a one-ground island in the middle of the void.
- working 3rd-person camera
COLLISION
- calculate tile footprint for various primitives
- collision primitives
- upright cylinder
- sphere?
- grid-bound tile (i.e., tile that's part of a tile region)
- free tile (e.g., moving/reacting 'cloudstone' tile that may not align with the grid boundary)
- aaa not falling endlessly through the floor aaaaaa
FONTS & UI
- aaah freetype
LSYSTEM IMPROVEMENTS
- expand lsystem by adding before/after symbol checks to the predeccesor
- basic calculator parser that
- allows defining variables (i.e.,
calculatorVarMap ('y', 5)
) - can do simple arithmatic over
+ - *
and/
(i.e,calculatorParse ('2 + 4')
) - blah blah precedence and use of parentheses
- allows defining variables (i.e.,
- expand lsystem by adding symbol variables, using the calculator parser above
COMPONENT/ENTITY SYSTEM
- register message responses with function pointers + arbitrary string, instead of a huge switch
- component loading w/ priority queue that can't loop infinitely
- breakpoints to allow other components to defer and trigger loads
- entity system should itself be an instance of a processing/timing component. maybe? idk.
Saving and Loading
- every game construct has to be able to serialize and unserialize itself (i guess by responding to a specific message?)
- something to do with byte-order???
- config files!
- all sorts of options are currently hardcoded and they all ought to be put into a config file
- video resolution/modes
- world size
- key maps
- all sorts of options are currently hardcoded and they all ought to be put into a config file
- every game construct has to be able to serialize and unserialize itself (i guess by responding to a specific message?)
Map Generation
- put together some hex operators that will eventually make up the atomic level for the real parser
- hex selector that returns a list of hexes
- ...in an efficient format, rather than a dynarr or whatever
- tile editor that changes tile heights
- hex selector that returns a list of hexes
- Priority queue goes into an infinite loop when the camera moves outside the visible world (which is only possible when the draw distance is set to zero or one ground)
- something something overlapping hexes something rules for selections and effects something???
- ACTUAL RECURSIVE PATTERN DEFINITIONS
- Grounds are only imprinted once, so their terrain can't be regenerated (from the player moving away from them until they're unloaded then coming back)
- Have the worldgen establish a world pattern graph
- MAP LAYER TO STORE DATA
- Patterns that actually do something. specifically, patterns that alter data on the map layer
- Patterns that update iteratively/continuously, both during worldgen and in the background during play
- Map → Tile imprinting onto grounds
- put together some hex operators that will eventually make up the atomic level for the real parser
Map
- Have the UI map fetch world pattern data and display it
- First just pattern graph data since that's easy (easier)
- Then stored data from the map layer, once there's actually a map layer
- Poles are drawn all wonky as UI elements
- Pattern graph edges are only drawn once, to the drawn relative pole, ignoring the pattern edge direction value if set
- Game crashes if movement keys are held down when map is closed or if certain imput toggles have changed from when the map was opened (?!)
- Have the UI map fetch world pattern data and display it
Cross-platform development
- change timer code to use an internal sdl timer
- get compilation suites in other OSes
- some version of windows
- some version of macOS
Coding Infrastructure
- some form of
error
andlogLine
functions- ideally one that is a macro wrapped around a function that uses
__LINE__
and__FILE__
so I can actually tell where the thing is - figure out what you can do in C with
stdout
andstderr
re: redirecting and styling them (e.g., error messages from the function colored depending on severity) - turn off warnings & errors when doing unit tests that check the failure conditions
- make it actually log to a file (or to multiple files)
- add multiple types (e.g., memory allocation, rendering, map) that can have their warning level set independently, to allow for turning on of debug minutiae without flooding the console
- ideally one that is a macro wrapped around a function that uses
- memory allocation functions that don't suck
- fix the resorting issue so that allocation no longer takes O (logn * n) time when debugging is on
- allow for compartmentalization of memory and strict memory limits per compartment (e.g., video is limited to 1024kb of scratch memory), and write functions to query the current memory available
- rewrite everything that does allocating to use these new functions
- maybe even add support for dummy allocations to track library code allocations
- rewrite everything that does allocating to use these new functions
- some kind of "has memory address been freed" function for unit testing
- some form of
Skybox
- DRAW A SKYBOX
- compare skybox vs. skydome (subdivided pyramid)
- draw stars and constellations to the skybox texture
- raycast really distant hexes on top of the skybox texture
- DRAW A SKYBOX
Magic
- write up the magic section of the todo :V