Author Topic: An early modern sociopolitical simulation  (Read 400 times)

Publius

  • Acolyte
  • *
  • Posts: 9
    • View Profile
An early modern sociopolitical simulation
« on: April 17, 2017, 09:03:57 PM »
TL;DR: here are some generated maps, which is the only thing I'm showing for now.

What it will be about?

I'm mainly inspired by two DF games, namely (of course) Dwarf Fortress and Daggerfall, maybe also Paradox games like Europa Universalis and well, me being a History B.A. (What I'll describe reminds me a little of Bay 12's Liberal Crime Squad, but I'm not that familiar with it.) The setting is mostly historical (1608 I believe?) but there may be some fantastical elements (like "horrific abominations from underground").

You shouldn't get to be a typical video game "hero" in this game.
You can act bold and heroically if you want, but one-man armies should be impossible. Instead, you will have to learn to be a part of social structure of early modern Europe. To accomplish big goals, you have to organize people to help you in what you want to do: either as your serfs, supporters or companions.

The estate you were born into matters and determines what the society will let you do. But the game by itself shouldn't enforce that. For example, the law forbids noblemen engaging in trade or crafts. Technically you can do that, but people will start to despise you and eventually a court decision can kick you out of nobility. Society expects noblemen to fight in army and do politics. As a peasant, you should theoretically farm land for your lord, but you can also flee and become a bandit. Or, if you're lucky, strike a deal with your lord that you will rob people (or trade) and give him a share.

But all this should be ultimately changable. I want it to be possible in the game to do peasant uprisings and even completely dismantle feudalism, but this should be extremely, extremely hard and probably require some serious bloodbaths and propaganda. Well, almost like in real life.

Mechanics: bloody wars & epic speeches

I devised a relatively simple, but strategic way of representing all public assemblies: local conventions of nobility, town municipalities, the parliament, courts, parties of soldiers/bandits and so on. The game will be heavy on that kind of politics. I want a (modifiable) legal system functioning in the country. Also, we'll have a couple of wars going on, which means some focus on warfare and guerrilla.

It will be very important how your character is perceived by others. It is, to a large extent, based on some special statistics. Probably they will be Honor, Might, Love and Effectiveness. Of course, you won't be able to max them all out. For example in order to be effective, you sometimes have to do some dishonorable things that people won't love you for.

While the setting is roughly historical, randomness will be far-reaching. For example, the stat effects of each ~20 of ethnic identities and ~10 of religions will be randomized. I hope to have interesting emergent outcomes. Or a mess, but that's fine!

Cold reality of coding :]

Now, it is clear that this is one of those monumental simulationist endeavors. I will see how far I will get, but at some point (if the project survives) I would probably want to make it more of a team effort. I write the logic in Common Lisp (which is great) and currently use voxeljs as my graphical engine, but I'm not that commited to the latter. Many things I leave to figure out later.

Here are some "global" maps of the game area: [LINK].

I do have some issues with those maps. They still feel a little not enough big and detailed to me. Probably I will force that mountains can't be too populous. Also I'm not sure if wacky rivers are more of a bug or of a feature.

More details (including the title) will come when they'll come :)

gwathlobal

  • Acolyte
  • *
  • Posts: 22
    • View Profile
Re: An early modern sociopolitical simulation
« Reply #1 on: April 18, 2017, 10:04:14 PM »
> I write the logic in Common Lisp (which is great)

Is it going to be open-source? :)

javelinrl

  • Priest
  • **
  • Posts: 86
  • Creator of Javelin
    • View Profile
    • Javelin - party-based roguelike (open-source RPG / strategy game)
Re: An early modern sociopolitical simulation
« Reply #2 on: April 19, 2017, 05:14:27 PM »
This looks amazing and I love the concept and the sheer scale of your ambition. I'd like to approach this from two methods though:

First, about the map themselves: they're great, even looking at them already gives the sheer scale of all the complexity you're talking about. However, I have 2 issues: one is that I agree with the comment made on the link itself (the maps do feel very similar to each other) and secondly, in my own opinion, there are way way way way way too many cities. When you have too much of one thing, in a game, it's just like have nothing as well because you can find it everywhere in abundance - for example, what the point of having gold if you're getting a million gold for every quest you complete? In that sense, you would do well to remove all minor towns and keeping only 20% to 10% of what you have there.

The second approach I'd like to try here is to play devil's advocate and act like a possible investor if you were trying to sell me this (as a publisher or on kickstarter, whatever). I hope you understand I mean nothing ill towards your project and I don't want to take any control over anything, it's just a way to help you think.

  • What sort of planning do you have in place to get this done? You cannot pull out something this big by just feeling your way through it.
  • Why should I play your finished game and not other complex simulations like Ultima Regum, Dwarf Fortress or even strategy games like EU, Civilization...?
  • What approach are you going to utilize to make sure that you don't need to work for 5 years to get an alpha done? What will the 5 first releases feature?
  • You mention you want team work but you plan to use CLisp, not only a rarely used language, but also a rarely used paradigm. Help is hard to find even with C# or Java. How will you find voluntary help that is both skilled in CLisp, expert enough to write a complex program like yours and willing to do voluntary work?
  • Why are you dead-set on using CLisp and not other more modern, accessible languages, or some other more modern Lisp dialect like Clojure?
  • In games, Lisp is usually known to be used for stateless software like MUD servers and so on. What tools and established examples are you going to use to make sure a very big CLisp project like this is maintainable once it grows very big and complex, as are your goals?
  • What kind of schedule and project management philosophy are you going to hold yourself to for all the years you're looking forward to work on this?
  • Can you give an architectural overview of how you're looking to implement some of the concepts you described in here: legal systems, reactive societies, speech, different play styles...?
  • What other successful game projects of yours can we look at to determine you're capable of handling something this big, complex and ambitious?
  • Do you think your game will have enough of a player-base to justify all the work put into it? Give me examples of existing similar games with many players.
  • From each of the games you've listed as influences, describe one thing you like about them, how it relates to your project and how they'll work together.
  • Why is this game a roguelike? Being procedurally generated doesn't make it a roguelike. How many elements of the Berlin Interpretation will you have?
  • What is your core gameplay loop? Also, how would you define your game in a single sentence?
  • What sort of testing (unit and systemic) approach are you going to use to make sure this huge thing doesn't break as you develop it further?
  • What sort of communities and support can you go to for your technical problems? Does CLisp have a strong community on forums, Stack Overflow, etc?
  • What third-party libraries and game engines are you going to use to reduce your own work load in writing custom code?

Honestly, I could go on for twice the size, probably - I'm reading your text to come up with those and I still haven't gotten to the second section. I haven't even touched on distribution. If you want me to, I'd be glad to do it, this can be a seriously good exercise and self-assessment (for your benefit, not mine, of course).

I will be happy to help you test your releases and see this project grow but, honestly, if you don't immediately have a solid, good answer for even one of these questions, you should seriously sit back and consider if you're really ready to start something this big right now. As an investor or kickstarter backer, I wouldn't put a red cent on your project if I wasn't satisfied with every single answer, because you're currently a one-man team and you're proposing to accomplish something many professional teams would shudder to even consider, much less on a budget of exactly zero moneys to get it done from start to finish.

Anyway, I hope this helps you in some way - either to make you feel you're ready, or not ready, or at least consider something you hadn't thought about up to now! If you want me to put up more questions, I can probably squeeze a few more, let me know.
Javelin, party-based roguelike (free RPG / strategy game for Win/Mac/Lin)
https://javelinrl.wordpress.com/

Publius

  • Acolyte
  • *
  • Posts: 9
    • View Profile
Re: An early modern sociopolitical simulation
« Reply #3 on: April 19, 2017, 08:53:33 PM »
Quote
Is it going to be open-source? :)
A tough question. Maybe, no promises. I found myself writing some utility functions and macros which I will opensource almost for sure. But I understand it's not what you're talking about.

javelinrl, I very much appreciate your post and the questions! :) Maybe they weren't meant to be answered on forums, but I found it worthwhile to answer most of them, well, in some way. Somehow it gave me more motivation, so thank you for this.

Quote
one is that I agree with the comment made on the link itself (the maps do feel very similar to each other)
Well, I take it as an argument for giving the map generator some more freedom. Currently it's some kind of cellular automaton, and I can feed it with more diverse start states.

Quote
there are way way way way way too many cities. When you have too much of one thing, in a game, it's just like have nothing as well because you can find it everywhere in abundance - for example, what the point of having gold if you're getting a million gold for every quest you complete? In that sense, you would do well to remove all minor towns and keeping only 20% to 10% of what you have there.
I just think it makes the map feel more real and impressive. Daggerfall has an insane amount of space and villages, for one: they're mostly repetitive, but they become a respectable feature in themselves. But these villages and provinces have also a strategic meaning in my game, since each one of them can be conquered, occupied, hold as a land property etc.

Quote
The second approach I'd like to try here is to play devil's advocate and act like a possible investor if you were trying to sell me this (as a publisher or on kickstarter, whatever). (...)

I will be happy to help you test your releases and see this project grow but, honestly, if you don't immediately have a solid, good answer for even one of these questions, you should seriously sit back and consider if you're really ready to start something this big right now. As an investor or kickstarter backer, I wouldn't put a red cent on your project if I wasn't satisfied with every single answer, because you're currently a one-man team and you're proposing to accomplish something many professional teams would shudder to even consider, much less on a budget of exactly zero moneys to get it done from start to finish.
Well, personally I don't frame it as a potential Kickstarter or "investable" project just yet. For now, I don't expect monetary or even emotional investment from anybody. Just wanted to share a vision of a cool hobby thing I'm making. Not saying if I will finish it. It will be okay to me if I'll eventually come to a conclusion "okay, so I will implement the chosen 10-20% of this grandiose feature set, stop there, and call it an interesting gamedev experience". (Possible also release something.) So I don't think the risks are high. I just find it so much easier to motivate myself to do moonshots. Constrained goals I have in the work and uni.

Questions like open source or commercial, single or multiplayer are undecided for now. It may be foolish from the biz or even realistic perspective. Okay, it is. But honestly I'm interested to see how the things (read: the simulation) will work in terms of hardware usage. I try to do aggresive math/serialization hacks to keep the memory usage low. I plan to use probabilistic statistical models (close to my current area of study) to reduce computation of offscreen things. I just find it an overall fascinating thing to do with my time.

So for now, I wouldn't concern myself with distribution. Hopefully I can use some questionnaire from you on this in future!

Quote
What sort of planning do you have in place to get this done? You cannot pull out something this big by just feeling your way through it.
Currently, I have a set of things I want to have in my next babystep "stage". It's mostly integrating global maps into the voxeljs and implementing NPC generation & placement. You should be able to walk through the world, see people (probably just markings "this person is generated there") and read their biographical descriptions.

I expect to go from milestone to milestone in this fashion, for a time being.

Quote
Why should I play your finished game and not other complex simulations like Ultima Regum, Dwarf Fortress or even strategy games like EU, Civilization...?
A short answer (and the only one I have for now) is because it is different. Most of these games focus on management. In my game you should have more of roleplaying one character and their immediate milieu, with the "big history" in the background, at least most of the time. Honestly I don't know if Ultima Ratio Regum offers similar level of world plasticity during gameplay that I want to have. I should install that Wine sometime, I guess (to run it on Linux).

Quote
You mention you want team work but you plan to use CLisp, not only a rarely used language, but also a rarely used paradigm. Help is hard to find even with C# or Java. How will you find voluntary help that is both skilled in CLisp, expert enough to write a complex program like yours and willing to do voluntary work?
Why are you dead-set on using CLisp and not other more modern, accessible languages, or some other more modern Lisp dialect like Clojure?
I'm not dead-set. It's just way easier to use CL to do exploratory programming where I'm able to build and debug and change/refactor things very quickly. Some time ago I attempted to make a much less ambitious game in C++, and amount of repetitive work to do very simple things felt just atrocious. I couldn't force myself to test different approaches to one thing, once it barely works.

I don't rule out rewriting parts of the code that become more stable in some less abstract language, when I already know how a given module is gonna work. (I consciously force myself to write clear, even verbose code to hopefully make it a bit easier if necessary.)

I do like that CL lets me actually mix paradigms and be functional/imperative depending on what seems more convenient for programming a given thing. It's very flexible and lets you really abstract things how you want. Although I did see much overengineered (to me) Common Lisp code in the community. I do admit that some constructs can be hard to port, but still, it should be possible to use the CL implementation as a "spec" what should the code do.

Besides, coding is not the only area one can use some help in. There is also artwork, design and content writing. I have some friends that can help me at least in the latter, which should be important even for the first "milestone".

Quote
In games, Lisp is usually known to be used for stateless software like MUD servers and so on. What tools and established examples are you going to use to make sure a very big CLisp project like this is maintainable once it grows very big and complex, as are your goals?
I don't have practical experience managing this big and complex software projects, but I do program for years. Just don't have significant open source/public things to show. I can only say that I use asdf/Quicklisp (which are standard CL solutions for package and depedency management), with clear separation of modules for different things, follow my own rather strict style guide etc. Also, since it is apparently not that obvious in the roguelike community, I do use version control, extensively :P

Quote
What other successful game projects of yours can we look at to determine you're capable of handling something this big, complex and ambitious?
The short answer is no.

Quote
Do you think your game will have enough of a player-base to justify all the work put into it? Give me examples of existing similar games with many players.
Well, maybe games I listed as inspirations. After all I wanted these titles to ring some bells. But I don't see the size of player-base as the main "justifying" factor. And by this I mean, I'm willing to wait for it (the player-base) to build up slowly.

Quote
From each of the games you've listed as influences, describe one thing you like about them, how it relates to your project and how they'll work together.
Dwarf Fortress - focus on story behind each individual character, and stories emerging from the complex simulation.
Daggerfall - the faction/reputation system, and the sheer size of the explorable world.
Europa Universalis - putting a researched historical reality (as a historian, I think the term "historical reality" is fishy, but anyway...) into a set of gameplay rules.

Quote
Why is this game a roguelike? Being procedurally generated doesn't make it a roguelike. How many elements of the Berlin Interpretation will you have?

I think I would have those things:
  • Random environment generation
  • Permadeath
  • Grid-based
  • Complexity
  • Resource management (the main resources being your personal wealth and social connections/popularity)
  • Single player character
  • Monsters are similar to players (well, "monsters" in a sense)

Also, possibly:
  • Tactical challenge (I really would like to have to this one)
  • Exploration and discovery

Quote
What is your core gameplay loop? Also, how would you define your game in a single sentence?
Well, this is clearly an important question, but it's hard to say. I'm aware of the possible trap of trying to simulate "everything" without focus. Will work on that.

Quote
What sort of testing (unit and systemic) approach are you going to use to make sure this huge thing doesn't break as you develop it further?
Currently I'm content with having tests for some algorithmic functions that are hard to test manually, but possible to test in general. (Some I consider very hard to test, like random generation as a whole - I could test that the output fits some probability distribution, but I don't think it's worthwhile.) Otherwise, I strive to write functions with clear purpose for each one of them, which are potentially testable. I will probably have to devote some time to write these unit tests at some point, but for now I don't want to sink my time into that. Many parts of this code I may nuke soon anyway.

Quote
What sort of communities and support can you go to for your technical problems? Does CLisp have a strong community on forums, Stack Overflow, etc?
You can get help for your problems with CL on IRC channel #Lisp in Freenode, where many quite knowledgeable people hang out. But most of the time, the language specification and the "Practical Common Lisp" book are sufficient for me.

Quote
What third-party libraries and game engines are you going to use to reduce your own work load in writing custom code?
I don't want to devote that much time to graphics, so I keep the "server" part clearly separated and would probably use some third-party engine for that (ie. the "client" side). Currently, it's voxeljs, which is pretty straightforward once you manage to fire it up.

javelinrl

  • Priest
  • **
  • Posts: 86
  • Creator of Javelin
    • View Profile
    • Javelin - party-based roguelike (open-source RPG / strategy game)
Re: An early modern sociopolitical simulation
« Reply #4 on: April 19, 2017, 11:45:58 PM »
> I found it worthwhile to answer most of them, well, in some way. Somehow it gave me more motivation, so thank you for this.

That's exactly what I wrote them for, glad it helped! I know some people would've thought of them as weird/hostile/whatever but they're absolutely not, they're just a honest assessment of the big picture here!

> I just think it makes the map feel more real

Doesn't look real at all. Take a look at medieval france. Your map gives the impression there's easily between 5 to 20 more villages in the same amount of space http://www.medieval-spell.com/Images/Travel-France/Travel-France-Map.jpg

> these villages and provinces have also a strategic meaning in my game, since each one of them can be conquered, occupied, hold as a land property

It's going to become a chore after the 10 or 20 first conquests. It's also impossible to balance any game as to make capturing all of them give the player a sensible reward. You'll either have to make the reward very small (near worthless) or, if the bonus is bigger, the game is going to be unbalanced (the game is "won" prematurely after a certain number of villages is conquered).

Such achievements as conquering a city need to be more rare to be meaningful. Conquering one city in 20 is a big achievement - both for the player and on gameplay terms. Conquering one city in a hundred, like your map shows, is meaningless and probably more a chore than anything else.

> I don't frame it as a potential Kickstarter

In all honesty, I doubt it'll ever be. KS is not the "dreamland" it was on the early years, the hype is gone. Now even very mature, professional projects pushed by industry veterans are failing to get funded and I think your game is very much a niche thing done by a nobody (sorry, but in the game's industry, you are).

> I don't think the risks are high

It's not a matter of losing a bet. It's a matter of "what is the best way to go around achieving my goals".

> I'm interested to see how the things (read: the simulation) will work in terms of hardware usage

I really doubt you'll be pushing any hardware limits in 2017 unless you're going for a model where you're simulating every single citizen in your villages all the time - which really you shouldn't, with what you want to accomplish. Premature optimization is one of the worst things a programmer can do and you seem very eager to do exactly that http://ubiquity.acm.org/article.cfm?id=1513451

> It's mostly integrating global maps into the voxeljs

You mean this is a 3D game?! As if it wasn't ambitious enough  ::)

> I should install that Wine sometime, I guess (to run it on Linux).

I've talked to the creator a couple of times. Linux support is on the way.

> exploratory programming where I'm able to build and debug and change/refactor things very quickly

Go with Python then? I think it's got plenty of mature tools for math and statistics, probably much more and better than CLisp. It also the third most used language on GitHub, meaning it wil be a lot easier for people to join the effort later on. I doubt CLisp is even in the top 50, to be honest.

> CL lets me actually mix paradigms

You may like that but to most people this makes the code unreadable. Most amateur programmers don't even realize there is more than one paradigm, let alone work with multiple in a single project.

Having more than one language and having a "spec" implementation are terrible ideas, even more so for the sheer size of your ambitions. Unless, of course you do it smart (like having a core engine and a scripting language).

Look man, I'm going to be honest with you. I would doubt anyone could pull this all through, even a great programmer but reading your entire reply just makes me think you're waaaay, waaaay too green and naive for all of this. This was already a huge project and now you're suddenly talking about 3D and multiplayer like it's no big deal. You're talking about using voxeljs as your client even though it has no built-in networking layer.

If that is really your passion, great, go for it, but I'm disengaging from this conversation because I don't want to incentivize you to do something I don't think you're anywhere close to being ready to tackle. If you're going for it, get an alpha version or demo ready, come back and show people what you've done. It's going to take you a many months of hard work to even get there, maybe even a year or two before there's anything playable and I'm not sure you understand it.

My advice to you: instead of going for something that is, for all intents and purposes, bigger than Minecraft or similar in scope to Dwarf Fortress (except multiplayer 3D  ::)), why don't you put this aside for later and start with a smaller game? Maybe something like a lesser Daggerfall? Just a couple cities, a handful of dungeons. Once you got some actual experience to your name and you fully understand the amount of work you're talking about, you can consider coming back to all of this with renewed strength and actually put some work into it.

I am not in a position to judge if you're ready or not to pull off this huge project, I don't know you. What I can guarantee you though, is that if you're not ready, and you try to, you will fail. I guarantee it. Do yourself a favor and if you really love this idea so much, consider doing something (much) smaller as a first public project before moving on to something even the greatest programmers and game devs would have serious reservations about ever starting on their own.
Javelin, party-based roguelike (free RPG / strategy game for Win/Mac/Lin)
https://javelinrl.wordpress.com/

Publius

  • Acolyte
  • *
  • Posts: 9
    • View Profile
Re: An early modern sociopolitical simulation
« Reply #5 on: April 20, 2017, 07:34:18 PM »
Especially since you said you are disengaging, I will only address this:

Quote
Doesn't look real at all. Take a look at medieval france. Your map gives the impression there's easily between 5 to 20 more villages in the same amount of space http://www.medieval-spell.com/Images/Travel-France/Travel-France-Map.jpg
It's hardly a map of villages in medieval France. Maybe I mean villages more like "hamlets", and this causes the confusion. The "towns" are light red, if I remember correctly. Here's a map showing more important town and cities in a part of France, in 1604: http://www.corpusetampois.com/cie-17-abrahamortelius1604campania.jpg

Also have to say that I disagree with the "premature optimization" statement. I feel that you just throw it in here as a piece of common wisdom; I see from my experience that the generation part quickly reaches annoying levels of complexity/usage, and I don't see why the simulation part would be different. Somehow Dwarf Fortress is famous for being taxing even for modern hardware. The approach of optimizing strictly when "everything" is ready is hard to execute if optimizing things reasonably has to mean redesigning architecture fundamentally. Also, the main possible harm of optimization is impeding the current or future development, which I am emphatically trying to avoid.

If it's not clear from my previous post, I overall respect the skepticism. Still, I'm going to do it my way, keeping the possibilities for shrinking the project's ambitions open, depending on what will turn out to be possible.