This class library implements mechanics and models for a 2D sandbox game focused on building, crafting, and narrative, more or less in that priority order.
A game built with this system offers many of the features of contemporary quest-driven building games but in a simple, top-down world and without combat.
Code and documentation are incomplete and under rapid development. Expect frequent breaking changes. Maybe don't use this yet; when the Alpha milestone has been hit the project should be much more usable.
Design and usage will be fully documented once the Beta milestone has been reached.
Development milestone deadlines are tentative right now. Because this is one of several side projects that I maintain in addition to my fulltime dayjob, it will be a long time before Parquet is ready.
This project has two goals:
- To provide a foundation for games developed in C# stacks;
- To provide a learning exercise for the lead developer.
Due to goal 2, no attempt has been made to design the most elegant, efficient, general-purpose, or powerful library possible. What has been attempted is a cleanly-coded, clearly-documented, easily maintainable class library.
Parquet targets the following features:
- A peaceful 2D top-down overworld map that may be explored.
- Simple free-form building mechanics allowing player characters to create homes in the world.
- Resource collection mechanics allowing players to upgrade their homes and tools.
- A simple crafting system allowing players to unlock new tools and building materials.
- Interactive noncombatant NPCs.
- A quest system encouraging players to build particular building types.
- Dialogue and narrative delivery.
- Data-driven design with all game models customizable from CSV files.
The solution contains several related projects. Each C# namespace gets its own folder.
- Documentation
- How to use the library and its tools.
- ExampleData
- Configuration files used in developing and testing the library.
- ParquetClassLibrary
- The library itself. The root namespace contains classes for working with Models and Statuses.
- Beings, including player characters and NPCs.
- Biomes, sets of characteristics that Regions may share.
- Crafts, recipes and mini-games that produce Items.
- Items, objects that Beings may carry, including parquets.
- Parquets, the basic units of play.
- Properties error strings, icons, and other static content.
- Regions, collections of parquets and Beings which together make up the game world.
- Rooms, built from parquets and recognized at runtime.
- Scripts, used to define Being Interactions and Item effects.
- ParquetRunner
- A simple smoke test.
- ParquetUnitTests
- Unit tests for ParquetClassLibrary.
To work with this repository you will need:
- .NET 5
- CSVHelper 19
- XUnit 2.4 (to compile the unit tests only)
- Library design and code by Paige Ashlynn.
- Special thanks to Mint Gould, Caidence Stone, Ashley Hauck, Emma Maassen, and Lillian Harris for help with code reviews, mathematics, algorithms, game design, and technical decisions.