Gameplay: Money: - Add basic subsidy @milestone(1: Basic Money) @done(2021-01-27) - Basic Balance sheet - Basic balance sheet @milestone(1: Basic Money) - Basic display @done(2021-01-27) - Movement @done(2021-01-27) - Close button @done(2021-01-28) - Better appearance - Money graph @maybe Procgen: short phase, maybe? - Add some procedurally generated dialog @maybe @milestone(2: Procgen) - Add some procedurally generated newspaper @maybe @milestone(2: Procgen) @done(2021-03-15) - Basic NEWS tab @milestone(2: Procgen) - Different tabs for different sources @done(2021-02-21) Straight-ahead news, tabloid, and something environmental? - Write a small number of testing @done(2021-03-15) - Write five stories for each source - Arborist - Wire @done(2021-03-22) - True - Figure out update interval @done(2021-03-22) - Better NEWS tab - Images for some stories - More stories—a dozen for each source? Logging: - Add contract struct @milestone(3: Contracts) @nvm - Add tree simulation @milestone(3: Contracts) @done(2021-04-27) - Add contract generation @milestone(3: Contracts) @done(2021-04-12) - Outline reserved areas @milestone(3: Contracts) @done(2021-04-09) - Add company images @milestone(3: Contracts) @maybe @done(2021-05-21) - Contracts should end Trees: - Add basic maintenance cost @milestone(1: Basic Money) @done(2021-01-27) - Add basic age simulation - Add water @milestone(6: Trees and Tiles) - Biodiversity @maybe @milestone(6: Trees and Tiles) - Tree Types @done(2022-01-27) - Grass? - Biodiversity score? - Research agreements @maybe - Forest rangers allocatable as law enforcement? @maybe Have to think about thematic implications - Have an "enforce trespassing" policy Seems like a good way to get started? Reduces cost of vandalism repair? - Sell Firewood? - Preserve @milestone(6: Trees and Tiles) - Add preserve tool @done(2021-02-17) - Add bulldozer @done(2022-03-16) - Adjust odds in preserve @done(2021-02-20) - Dialog - Assistant warns when a lot of the map has been made into preserve? - Congratulations when reaching a majority Maybe 75 percent Staff: - Ranger staffing? @maybe @milestone(1: Basic Money) - Staffing window - Ranger allocation - Set employee salaries, leave, etc. @maybe - Figure out roles: ranger, educator, researcher? Don't want to be too derivative - Employee training mechanic @maybe Leisure: - Add way to mark off area for leisure @milestone(7: Leisure) Maybe add leisure items instead? Or both? - Add paths @milestone(7: Leisure) - Basic satisfaction @milestone(7: Leisure) - Set End games/outcomes: - Financial mismanagement @milestone(5: Events) @done(2021-10-23) - Figure out threshold @done(2021-11-07) - Self-sufficient i.e., no need for subsidy May not be ending - Forest mismanagement @milestone(5: Events) @done(2021-12-12) - Figure out threshold - High biodiversity? @maybe - High satisfaction - Figure out how to differentiate this from forest health - Hat Trick: Satisfaction, Forest Health, **and** Self-Sustaining - Figure out extent that this should even be possible? Thematically, maybe dubious? On the other hand, could be something that requires luck It's possible in SimSafari - Land repatriation to indigenous @maybe Like the acknowledgement, don't want it to be too white savior-y (although obv. player isn't necessarily white) - Research center @maybe Community: Differing reputation with different groups. Could mix more and less political. Don't want to go too Democracy 3/4: being able to affect the group size via policy is probably out. (Groups being intersectional might work, but is kind of tricky.) Maybe a procedurally generated set of groups with some hard-coded elements? E.g Misc: - Assistant commentary @milestone(5: Events) Need to ensure it's not annoying - Basic random events - Tree planting campaign @done(2021-09-28) @milestone(5: Events) - Friends of the park fundraiser @done(2021-11-07) @milestone(5: Events) - Federal grant @done(2021-11-27) @milestone(5: Events) - Celebrity visit @original_milestone(5: Events) @nvm Probably neets to affect reputation or attendance, which aren't implemented yet. - Disasters @maybe - Fire would probably have to animate - Disease - Photos for dialog? - Graphs window @done(2021-01-05) Could use ImPlot for this Structure: - Add modes - Refactor stuff out of FNAGame At this point, virtually everything in FNAGame is setting up key Engines or doing drawing - Saving @prototyped @milestone(4: Beginning) - Options are duplicated in too many places: - Replace Options with OptionComponent? - Put Options in OptionMessage? - Remove Options from Encompass? Options don't seem like a great fit for th ECS model. - OptionsWindow should use two Options instances instead of recreating each field. Adding an option requires adding variabls - Encompass @maybe @done(2021-04-03) Currently thinking about a hybrid model where the Simulation class receives a lot of the events from Encompass. so things like Events, Contracts, and Research agreements are handled by Encompass. Perhaps Input, too? - Ensure library loads - Windows - Linux @done(2021-04-19) - macOS @done(2021-04-27) Technically done - Decide how to handle ImGUI ref parameters Basically have to decide whether to embrace its style or go toward a more functional approach - Add Ink @maybe - Add NuGet package @done(2021-08-14) - Load .Ink files @done(2021-08-14) - Rewrite Dialog to show Ink @done(2021-08-14) - SetTextVariable also sets variables within Ink Technically doesn't have to be done this way, but having what would essentially be separate namespaces for Tracery variables and Ink ones seems confusing. - Integrate with Tracery @done(2021-08-14) Could run everything through Tracery or could create an Ink function that calls Tracery - Change conversation to use Encompass @milestone(5: events) @done(2021-08-04) - Refactor out common ImGUI patterns - Tooltips @done(2021-08-21) - Status indicators (not yet implemented) @done(2021-08-21) By status indicators, I mean putting an icon on, say, the Contracts button to indicate a contract is about to expire. - Rearchitect to avoid giving everything access to Simulation - Add a start screen @milestone(4: Beginning) @done(2021-06-08) - Add a create park dialog @milestone(4: Beginning) - Procgen park names (that player can override) - Button to generate new name? - Allow player to choose title @maybe @done(2021-07-29) Some possibilities: Mr., Ms., Mx., Director, Dr., Professor, Miss, Col., Herr Dr. Dr. nothing, custom Might be fun to have tiny acknowledgement of choice — probably dialog only, no mechanical change. (E.g., a researcher might allude to you having a PhD. or an enby character might say something comiserating.) - Allow player to choose difficulty @done(2021-07-30) I'm thinking: Easy would be constant subsidy, Medium would be declining subsidy, and Hard would be none. Could name them Benevolent, Austerity, and Hostility? Or Conservationist, Austerity, Libertarian? (Maybe too pointed!) I kind of like describing these as the government's "orientation" or "attitude" toward park. - Allow player to choose profile image @maybe Same style as rest of the game (dithered b&w, at least right now) - Basic In-game menu @milestone(4: Beginning) @done(2021-06-13) At minimum, New Game, Quit, and Quit to Menu - Graphics options - Add to in-game menu @done(2021-06-13) - Additional in-game menu - Save - Save & Quit - Fix selection Selections require two components to really work, which is messy and doesn't really fit. A Selection without some sort of associated selection that describes what's selected doesn't really work - Turn tools into classes? Creating a shallow hierarchy seems a little nicer than the current setup. Music and Audio: Sound Effects: - Generic click sound (push button) - Cheer/boo crowd sound effect This is a sorta easter egg and a reference to SimCity - Explosion effect (for bulldozer) Performance: Issues: - Seeing up to 32 ms in update on framework-release? @done(2022-05-16) - Drawing very large areas is very slow. @done(2022-05-16) Sorta fixed - Slows to a halt (~7fps) when drawing many preserve squares. Structural improvements: - Button to clear/thin debug buffers? Take every nth to reduce counters to past 100 measurements - Disable some timing code in release mode? Needs some way to enable it. - Avoid redrawing tiles every time? Draw tiles once Instrumentation: - Time individual sections of update loop @done(2022-05-16) - Time simulation @done(2022-05-16) - Time each engine? Other features: Accessibility: - Verify contrast - Option to Increase display size - Add message for font changes @done(2021-06-26) - Relocate fonts to central place @done(2021-06-26) - Remove fonts from DebugWindow? - Adjust window dimensions when font changes - Option to Turn off bad outcomes or disasters @maybe - Dyslexic-friendly font @maybe @done(2021-06-26) Cursory research indicates open sans-serif fonts are best, although fonts only help so much. (Monospaced fonts are also cited as good options so Iosevka might already be good enough. Still, I added Roboto.) - Screen reader support @maybe Would probably be a big undertaking (sort of opposite to the web, where things tend to be accessible unless you start reimplenting things or going more advanced) - Investigate .NET support for screen readers - Ask on social media - Moontools Discord - FNA Discord - Mastodon - Figure out a good screen reader to use for testing - macOS - Windows - Linux - Look for prior art - Add a "describe" button/key that speaks the current scene @maybe - No fees when contracts break - Contracts go dormant instead of ending. Other QoL things: - Adjust display size @done(2021-06-23) - Toggle trees translucency Right now we hide trees outright, which probably should be limited to debugging - Right click to center @done(2021-06-06) Internationalization: - Probably won't pay to translate or anything, but should consider setting up the structure @maybe @milestone(4: Beginning) If nothing else, might be useful for future projects. Balance: - Hard mode is impossible with current map size. Upkeep is too much money. Might be addressed by adding staff instead of fixed upkeep. Bugs: Graphics: - Trees jump around when pressing show/hide grid @done(2022-01-23) - Grids sometimes overlap trees, including area overlays - Trees sometimes overlap each other @done(2022-01-23) - Area overlays overlap trees @done(2022-01-24) - Sometimes framerate jumps to 180-200 fps. (Better than reverse, but kinda weird) - Graphics don't adjust for the resolution - Scroll area @done(2021-06-23) - Ingame Menu @done(2021-06-22) - Main Menu Simulation: - Can keep playing after losing if you don't acknowledge the loss in the dialog - Create preemption/priority system Have to decide whether to have two levels: normal/preempting or a series of priorities - Expired areas can't be reused. @done(2021-08-07) Dialog: - Dialogs don't appear after Crashes/Stability: - News window crashes. - Drawing error when clicking sometimes on main screen. @done(2022-04-27) Tries to draw area? - Crash when extending preserve past bottom. @done(2022-04-27) - Segfault on quit (when it tries to dispose of the sound) or on playing sound on Linux May be due to a quirk of my Linux setup - Weird ImGui crash: dotnet: /home/alys/repos/outside/ImGui.NET-nativebuild/cimgui/imgui/imgui.cpp:6293: bool ImGui::Begin(const char*, bool*, ImGuiWindowFlags): Assertion `name != __null && name[0] != '\0'' failed. - Crashes after exiting a game. Seems to be a draw issue (Batch hasn't begun.) In Area renderer? - Misc: - Starting a game after exiting a previous one doesn't really work, afaict Also crases, but I suspect the crash isn't related. - Events may not be deleted - Exits are messy (does Encompass add threading?) @done(2021-11-28) Appears to be fixed by using Game.Exit [xcb] Unknown sequence number while appending request [xcb] Most likely this is a multi-threaded client and XInitThreads has not been called [xcb] Aborting, sorry about that. dotnet: ../../src/xcb_io.c:145: append_pending_request: Assertion `!xcb_xlib_unknown_seq_number' failed. Aborted (core dumped)