The Game & Concept

The Simple Game you are about to read about is a Factorio-inspired automation prototype. Built as an introduction to data-driven systems, procedural world generation, and elements of automation for myself. This game is one spawned from a desire to explore these concepts in a simple, accessible way - which was a foolish belief to have in retrospect. It is designed as a foundation, not a finished product. There is a lot more I wish to explore and implement. This is not currently a game, but rather a proof of concept, and a plunge point I wish to use to grow further.

The Concept

Inspired by Factorio & Satisfactory; Prototory explores how and the why when we investigate how to organise, construct and move data around a procedurally generated world. The player has input, the world is generated by a deterministic seed system and chunking logic(Hence some blocky terrain), the goal was to fuse Procedural World Generation with a data-driven architecture, where resources are accrued at the pace the player wishes to play at, and the player can build machines that interact with the world and each other.

A Prototype by Design

This is not where development stops. Prototory is a project I want to use as an example to myself - a testbed for understanding data-driven architecture, Extensible registries, Adding onto an existing codebase, and the separation of logic from visuals before scaling up. Data is changeable, visuals are their own concern. So why not make that a focus? Data Driven design, conveyed in a simplistic way using the data - Makes programmatic Abilities such as connecting Conveyor A to Conveyor B easier, we have the logic, we can programme the visuals to follow it and adapt to fit! Not to hard code an environment, or a situation and system that respects the players creativity to problem solve, and to make a system that can be built upon for that purpose in the future.

Built to Extend

Every system in Prototory is written as a foundation. Registries are ready to be swapped for JSON parsing. Data layers are decoupled from rendering. As I've reiterated on this page a few times, I want functionality and extensibility over polish and presentation. I am able to amend visual design and polish issues later, but I need to know my systems are built to last and grow, not just be a relic of me now. I want the code to be able to grow and stretch as I learn more, this Project isn't just a game, it's a learning experience for me, and I want to be able to look back on it and see how far I've come, to tell others that where you are now, Doesn't have to define anything, except where you were then.

Showcase Images

The images shown are from the current build of Prototory, and show the world generation, and some of the machines and systems in action. As you can see, the showcase is simple, but it does show the machines in and out of their element - See image to the left of a failed attempt to place a machine in the world on stone, no forest nearby. No Wood to harvest.

Core Systems

Prototory is built around a small set of interconnected systems, Some examples;

Procedural World Generation

A seeded, deterministic 2D world generated using different noise types. The same seed will always produce the same world - though in practice, its difficult to notice that as there is no built in seed setter yet.

Rendering & Data Separation

Rendering and data transferral are kept intentionally separate. A "TileAccessor" bridges most of the gap - a deliberate tradeoff that keeps operations clean, but one that has to be actively maintained to ensure that there isn't a De-sync issue. It isn't perfect and could be done better, but it is an example, and it is servicable currently and it can be improved, another staple for wanting to work on it! - Knowing it can be more.

Data-Driven Registries

Machinery and resources register through a flexible system ready to be swapped for JSON parsing - an addition, not a whole refactor. New entries can be made and initialised and function correctly without hardcoding. Perfect for modding or updating! Best part, outside of adding the JSON parsing - the architecture is already there!

Machine Communication

The machines you build and add to the world are designed to interact with each other and the world around them. Conveyors move resources, pull from nearby machines and push to the next. Each machine and its defining components hold data and logic that allows them to interact with the world or player, and is organized with some slight alterations or refactors to be easily extended and added onto! This forms the backbone of the automation system.

Links

Feel free to get in touch via the email or github below.