Show More
Commit Description:
Add missing component and message.
Commit Description:
Add missing component and message.
References:
File last commit:
Show/Diff file:
Action:
README.mkd
179 lines | 9.3 KiB | text/x-markdown | MarkdownLexer
179 lines | 9.3 KiB | text/x-markdown | MarkdownLexer
r118 | ||||
# isometric-park-fna | ||||
r309 | As the director of a small state park, your job is to balance conservation, leisure, and fiscal sustainability. Gameplay is still being added. | |||
r118 | ||||
r544 | This is inspired by Maxis' [Sim series of games](https://en.wikipedia.org/wiki/List_of_Sim_video_games), particularly SimSafari, and Chris Sawyer's [Tycoon games](http://www.chrissawyergames.com/info.htm). Its premise more closely resembles [SimPark](https://en.wikipedia.org/wiki/SimPark), but I never played it except for a demo. (Alternatively, watch [1990's Sim Games. SO GOOD!](https://www.youtube.com/watch?v=APFnM6DqtiA)) | |||
r118 | ||||
r679 | I rewrote the core of this game for Procjam 2020, but the majority of the game has been added since. | |||
r118 | ## Controls ## | |||
r475 | Use the arrow keys or move the mouse to the edges to scroll around on the map. The plus and minus keys zoom in and out. 0 toggles pause. F opens the Forest Policy. B opens the budget. N opens News. Escape opens the in-game menu. | |||
## Accessibility ## | ||||
To change the font or font size: | ||||
1. Open the in-game menu (with Escape) | ||||
2. Click Options. | ||||
3. Change Font and Size as necessary. | ||||
You can also change the scaling, but this should be a last resort if other | ||||
options aren't sufficient. | ||||
Currently, there are no options for adjusting the difficulty beyond the settings | ||||
r544 | that appear on the initial selection when you begin a game. | |||
## System Requirements ## | ||||
The requirements are pretty modest. It runs pretty well on a 2010 MacBook Pro. Here's my estimated minimum: | ||||
r679 | * ~2 Ghz Core 2 Duo or equivalent | |||
r544 | * 2 GB of memory | |||
* Nvidia GeForce 200 series | ||||
If you have a more typical machine with, say, 8 GB of memory, an NVIDIA GeForce GTX, and an i5, you should have no trouble running the game. | ||||
r118 | ||||
r466 | ## Relationship to past work ## | |||
r118 | ||||
r544 | This game is a total rewrite of the [original version](https://actuallyalys.itch.io/isometric-park-working-title) in C#. I honestly like the original language and library more (Clojure and Quil), but Quil was starting to struggle with the amount of drawing, and I was hitting the limit of my optimization abilities and available information online. (Another drawback: I'm also giving up the browser version, unless people get FNA in the browser working.) | |||
r118 | ||||
r287 | ## Installing and Running ## | |||
* macOS users need to do an [extra step](https://support.apple.com/guide/mac-help/open-a-mac-app-from-an-unidentified-developer-mh40616/11.0/mac/11.0) the first time because the app is unsigned. | ||||
* Windows and Linux users should be able to double-click the EXE and run it. | ||||
* BSD users can try using [fbsd-fnaify](https://github.com/oshogbo/fbsd-fnaify), although I have yet to confirm it works with Isometric Park. (If you do try it, let me know!) | ||||
r118 | ## Developing ## | |||
To run from the command line, `make run`. | ||||
You can build and run the project using VSCode actions. | ||||
r465 | You can debug the project using the Debug pane in VSCode. | |||
r505 | ### Updating implot ### | |||
This is a huge pain. The last thing I tried: | ||||
1. Download the latest version of ImGui.Net, corresponding to DearImGui 1.86. | ||||
2. Removed the ImGui folder: `rm -r ImGui.NET/` | ||||
3. Copied `cp -r /tmp/ImGui.NET/src/ImGui.NET .` | ||||
r545 | ### Architecture ### | |||
This game uses an ECS structure, with significant parts of the simulation done in the `Simulation` class and some drawing in the `FNAGame` class. I use Encompass, which calls systems engines. It also adds messages, which last only one frame and are ideal for updates. | ||||
I call engines that connect the ECS and non-ECS parts bridge engines. It works reasonably well, although I'm trying to add new code to the ECS rather than to the `Simulation` and `FNAGame` classes. | ||||
r309 | ### File Structure ### | |||
r475 | <pre> | |||
r309 | . | |||
├── *encompass-cs* ECS library (vendored) | ||||
├── **FNA** Graphics and media library | ||||
├── **ImGui.NET** GUI library | ||||
├── **isometric-park-fna** | ||||
│ ├── **bin** | ||||
│ │ ├── **Debug** Debug version | ||||
│ │ └── **Release** Release version | ||||
r544 | │ ├── *Camera.cs* | |||
│ ├── *CellMap.cs* | ||||
r309 | │ ├── **Components** Components that store data on entities. | |||
│ ├── **Content** | ||||
│ │ ├── **DejaVuSerif-BoldItalic.ttf** | ||||
│ │ ├── **DejaVuSerif-Bold.ttf** | ||||
│ │ ├── **DroidSans.ttf** | ||||
│ │ ├── **grammar.json** | ||||
│ │ ├── **images** images | ||||
│ │ ├── **iosevka-medium.ttf** | ||||
│ │ ├── **iosevka-term-extendedmediumitalic.ttf** | ||||
│ │ ├── **iosevka-term-extendedmedium.ttf** | ||||
│ │ ├── **iosevka-term-medium.ttf** | ||||
│ │ ├── **news_items_pregenerated.yaml** | ||||
│ │ ├── **news_items.yaml** | ||||
│ │ ├── **part4_tileset_alt.png** | ||||
│ │ ├── **part4_tileset.png** | ||||
│ │ ├── **part4_tileset.xcf** | ||||
│ │ ├── **photos_converted3.png** | ||||
│ │ ├── **photos_converted.png** | ||||
│ │ ├── **solid_tileset.png** | ||||
│ │ └── **typicons.ttf** | ||||
│ ├── *DllMap.cs* (vendored) | ||||
│ ├── *DrawVertDeclaration.cs* | ||||
r544 | │ ├── **Engines** Engines | |||
r466 | │ ├── *FilledRectangle.cs* Class for drawing a filled rectangle. | |||
r309 | │ ├── *FNAGame.cs* Primary game class. | |||
│ ├── **fnalibs** Compiled native libraries. | ||||
r544 | │ │ ├── **lib64** | |||
r309 | │ │ ├── **osx** | |||
│ │ ├── **x64** | ||||
│ │ └── **x86** | ||||
│ ├── *ImageMap.cs* Map of images. | ||||
│ ├── *ImGuiRenderer.cs* Renderer backend for ImGui. (vendored) | ||||
│ ├── **isometric-park-fna-core.csproj** | ||||
│ ├── *isometric-park-fna-core.sln* | ||||
│ ├── **isometric-park-fna.csproj** | ||||
│ ├── *Line.cs* Class for drawing a line. | ||||
│ ├── *Logging.cs* Logging class. | ||||
│ ├── **Messages** Message classes. | ||||
│ ├── *Quad.cs* Draw a quadrilateral. | ||||
│ ├── **Renderers** Renderer classes. | ||||
│ │ ├── *AreaRenderer.cs* Renders areas on the map. | ||||
│ │ ├── *BudgetWindowRenderer.cs* Renders the budget window. | ||||
│ │ └── *ImGuiWindowRenderer.cs* Renders ImGUI windows. | ||||
│ ├── *Simulation.cs* Primary simulation class. | ||||
│ ├── **Sources.md** List of sources. | ||||
│ ├── *Tile.cs* Draws tiles. | ||||
r465 | │ ├── **UI** User interface code, one for each window. | |||
r309 | │ │ ├── *StyleSet.cs* Utility class for setting multiple style variables and colors at once. | |||
│ │ ├── . | ||||
│ │ ├── . | ||||
│ │ └── . | ||||
│ └── **Utils** | ||||
│ ├── *Extensions.cs* Extension methods. | ||||
│ ├── *MathUtils.cs* Math utility mentions. | ||||
│ └── *Node.cs* Simple tree. | ||||
├── *isometric-park-fna-core.sln* .NET Core solution. | ||||
├── *isometric-park-fna.sln* .NET Framework solution. | ||||
├── **README_future.mkd** | ||||
├── **README.mkd** | ||||
├── **scripts** Helper scripts. | ||||
r465 | │ ├── *add-branches.sh* Creates a Mercurial bookmark for each branch | |||
│ ├── *gitmirror.sh* Mirrors this Mercurial repository to a Git repository | ||||
│ ├── *LoadInk.csx* Loads Ink file, ensuring its validated | ||||
│ ├── *LoadYaml.csx* Loads and validates YAML | ||||
│ ├── *package.py* Creates packaages. | ||||
│ └── *UpdateYaml.csx* Adds missing entries to the YAML file. | ||||
r309 | ├── **SpriteFontPlus ** Font library. (Vendored) | |||
r465 | └── **TODO.taskpaper** Tasks, feature ideas, requests, and bugs. | |||
r475 | </pre> | |||
r309 | ||||
r373 | Right now, the largest parts of the code are `UI/`, `Engines/`, `FNAGame.cs` (which | |||
still contains a lot of drawing code), and `Simulation.cs`. | ||||
r309 | ||||
r118 | ## Acknowledgements ## | |||
r686 | Art: [Isometric 64x64 Outside Tileset by Yar](https://opengameart.org/content/isometric-64x64-outside-tileset), [Peaceful](https://silivar.itch.io/isometric-asset-pack-peaceful) by Silivar, and various images from the Library of Congress and USDA Forest Service | |||
r465 | ||||
r308 | Libraries: [FNA](https://fna-xna.github.io/), [SpriteFontPlus](https://github.com/rds1983/SpriteFontPlus), [Tracery.Net](https://github.com/josh-perry/Tracery.Net), [ImGui.NET](http://imgui.net/), and [Encompass-cs](http://moonside.games/docs/encompass/) | |||
r465 | ||||
r685 | Fonts: Droid Sans, [Iosevka](https://typeof.net/Iosevka/) by Belleve Invis, [Typicons](https://www.s-ings.com/typicons/) by Stephen Hutchings, [OCRA](http://luc.devroye.org/fonts-48511.html) designed by American Type Founders and converted by Matthew Skala | |||
r118 | ||||
r675 | Sounds: Bell, hammering, and jackhammer sounds by InspectorJ; Switch clicking by qubodup | |||
r653 | ||||
r544 | Sources for the procedural generation are documented in Sources.md. | |||
r143 | ||||
r544 | Watching ThinMatrix's [video devlogs](https://www.youtube.com/watch?v=90CZ7Q17sls&list=PLRIWtICgwaX1gcSZ8qj8Q473tz7PsNmpR) for Equilinox and his subsequent games inspired me to press on. :) Despite some similarities, the design of this game wasn't really inspired by Equilinox. (I've also enjoyed Thoughtquake's [video devlogs](https://www.youtube.com/user/Thoughtquake/videos) and Cliff Harris' Democracy 4 [video devlogs](https://www.youtube.com/user/cliffski2/videos)). | |||
r118 | ||||
The original versions used art from the [Low Poly Forest Pack](https://devilsworkshop.itch.io/lowpoly-forest-pack) by [Devil's Work.Shop](https://devilsworkshop.itch.io/). (I had converted the models into isometric 2D images, using [this process.](https://www.youtube.com/watch?v=bk0PXMgZgQg)) | ||||
## License ## | ||||
r544 | © 2022 Alys S. Brooks | |||
r118 | ||||
r308 | I haven't decided on a license. | |||