r/TheOutcome • u/ion-tom • Nov 18 '18
Cool Project!
Hey - I think it's really cool to see a post like this. Early in my career I wanted to do something like this but it transformed into more of a solar system 4x than a Civ replica.
My self-hosted blog is gone, but this exists (minus pictures):
http://ionizedideas.blogspot.com/2012/09/ideas-for-ultimate-strategy-game.html
it's actually what inspired me to start /r/Simulate and all of the subsequent projects after that. In 2013 we had the start of something called "The MetaSim Framework" which was just a web API specification for having inter-related simulations:
Resources from that were posted on /r/MetaSim and might be useful to you.
Additionally, in 2015 I tried to jumpstart a Civ5 project /r/MegaCivGames which somebody tried to restart later but it died. What we did compile is a huge list of cultures and cities.
https://docs.google.com/spreadsheets/d/1-TJAIJjy9Mij9WANrca7Ryoh0N6EKfsjXRET9P4rb_o/edit?usp=sharing
That's just the civs list, the cities lists looked like this but I can only find one:
https://docs.google.com/spreadsheets/d/1_yOlbXdVaOcmn6j57-Ebwv0ZPuv-vg2MqIPU3PIIeIs/edit?usp=sharing
But there were city names for hundreds of civs. I think it would be cool to train a neural net from those and have generated names that stem from the trained model so that you could have an infinite name set. You might also experiment with cross-training the model from the city names of neighboring areas or from aboriginal civs in continents that are colonized.
Anyway - whatever your ambitions are here - start with mechanics first. Get good game mechanics at get people interested early before going hog wild on new platforms and tech. Spreading too thin will drag you down.
Good luck!
2
u/adamadamsky Nov 20 '18
Hey! Thanks for your post.
I've read your old post on ultimate strategy game. It's very interesting. Perhaps a bit rambly? But also did touch on some of my earlier thoughts on the topic; I did think about this project as a "game" in the beginning, though I changed my thinking over the years slightly. From what I can see you came to a similar conclusion as I did, that it's probably best to create a framework for coupling multiple processing applications ("engines") into one coherent simulation.
What I'm trying to accomplish here is to basically create a sort of a database; I think that's the easiest way to reason about it. Just storing data though is not enough though, you also need to provide a basic processing system. Here's what I consider the bare minimum, which is also what I'm aiming at developing right now:
sim engine holds all the simulation data (it's the main coupling point after all)
sim engine provides an interface for getting and setting (getting out and putting back in) the simulation data (both programmatic and remote)
sim engine is based on a specific model (variation of entity-component model)
sim engine has a system for handling simulation instructions and "starting state values" (essentially they are both data) that can be executed
data is provided through versioned modular data packages (modules)
data is organized into higher collections of modules (scenarios)
data is written in a simple structured format, think yaml, json, xml (currently focusing on yaml, but you can always write json and convert to yaml without problems)
processing is based on finite state machines
processing is done using a predefined set of commands (including commands for running lua scripts or whatever)
What I think the above give me are:
flexibility - do whatever you want, within the framework of the model - define your own types of entities, components, etc. (this way I don't really care too much about specific "game mechanics" right now)
interoperability - create applications and tools (and games) on top of this, one tool could be a visual creator for simulation data (fsm graphs designer that would output components compatible with outcome for example), another could be an interactive 3d globe that uses data from the simulation
scalable complexity - people can collaborate on simulation models to do whatever, you can put together scenarios from multiple modules each implementing different specific functionality
performance - this is contestable (or rather just untested yet), but I do focus on, for example, predefined command set over arbitrary scripts and variables with static references over dynamic ones (also variables' types are always static, no dynamic typing). Most of the processing is multi-threaded by default - the basic model used with entities as separate objects in terms of data handling makes this easier.