Open jefgodesky opened 5 years ago
Here's one of the most dire things I've had to face up to: the rivers in the Fifth World might be almost entirely dead. Some carp and bass might be OK, but I'm having a hard time finding any other examples. Freshwater species tend to be pretty niche creatures, adapted to particular temperate and flow conditions. The oceans are all connected, so as conditions change you can move, but that's not always true with freshwater environments. If the climate changes, quite often, there's just nowhere to go. So we're not going to try to figure out if you have any rivers nearby, because the sad truth is, it's unlikely to change anything for you.
My starting point here is a quick run-down of foods preferred. by the Aché in Paraguay and the Mbuti in the Congo. They're both hunter-gatherers living in tropical environments, but they're on different continents and have very different approaches. They're also heavily studied, with lots of quantitative data to look at. So I've been figuring, any community creation that could be used to create an Aché community or a Mbuti community is probably a good starting point.
Then there's domesticated animals that have gone feral, giving us that post-apocalyptic vibe.
If each community can pick 4, and we want to make sure we have a good amount of variety in here, we'll need at least 20 for the base list. I got to 18 using the sources above, and it seemed a little animal-heavy anyway, so I added cassava, the three sisters, and all the plants that Giuli mentioned as lending their names to a generation in chapter 1 of Children of Wormwood: tomato, chili pepper, onion, garlic, banana, sweet potato, lemongrass, ginger, coconut, coffee, cocoa, and vanilla. And while I was at it, I really love potatoes and I love what James C. Scott has to say about the impact of tubers like potatoes in The Art of Not Being Governed, so potatoes make the cut, too. That gives us a base list of 32. I thought we might want to make it a nice round 25, so I cut horses, armadillos (even though the Aché apparently rely really heavily on them, that might be a niche thing), ants and larvae (everyone eats insects, but I'm not sure anyone would emphasize it), and leaves (a little too broad, there).
If you pick any of the options marked with an asterisk (*), that makes your community horticultural (smaller territory, larger population, living in villages, more complex political life).
If you're on the coast, there's five more options, which could bring your total options up to 30. Mbuti eat crabs and shellfish, but ocean acidification and climate change don't bode well for them. In fact, global warming will hit the oceans even harder than the land. But ecology is never simple enough to be summed up with just doom and gloom. One species's loss is always some other species's gain, right? In Children of Wormwood Giuli describes the Nares people not as fisherfolk but as squidders, because cephalopods appear to be doing well under these conditions. So we'll put squid, cuttlefish, annd octopi on the list. Jellyfish seem to be benefiting from climate change, so we'll add them to the list, too. How global warming will affect sharks is up in the air, but I'm going to go with the possibility that they make it and are abundant enough to be a regular source of food, because (a) they're some of the most ancient creatures in the seas and have survived plenty of apocalypses before, and (b) they eat squids, octopi, and jellyfish, so if those species are doing well, then sharks won't be hurting for food.
Everyone’s going to discover these places:
If you picked bananas, cassava, cows, pigs, potatoes, sheep, sweet potatoes, or the three sisters for foods that you emphasize, then you’re a horticultural village (you might hunt feral cows, sheep, or pigs as a hunter-gatherer, but to emphasize them you’ll need to keep a semi-domesticated herd). Otherwise, you’re a hunter-gatherer band. This will determine the diamonds place you discover.
Hunter-gatherer band | Horticultural village | |
---|---|---|
Average population | 30 | 150 |
Average territory area | 90 sq. miles | 30 sq. miles |
Average population density | 0.33/sq. mile | 5/sq. mile |
Average territory radius | 5.5 miles | 3 miles |
Place | Hunting ground | Garden |
Card | D5 | D7 |
These cards should help flesh out some important details about your community.
So with these places, we have your community off to a good start from a gameplay perspective and we’ve filled in some broad strokes about your community’s traditions, history, values, and concerns. Hopefully, this will create a lot of hooks in a way that’s fairly straightforward and really leads you by the hand along the way.
Our top-level cycle will be time, measured in years. The “present” of the Fifth World is always 144,000 days from today, a little more than 394 years from now. We’ll start 150 years before that, which would be 244 years from now. So, for example, I’m writing this in 2019, so if I were to run this right now it would start with 2263 and run to 2413.
The number of ancestors we start working from differs by community type. We’ll start by marking that many years in the first 25 years that we’re cycling through as years to generate a new character. For example, a hunter-gatherer band has four ancestors, so we pick four numbers between 1 and 25 randomly and get 24, 12, 18, and 14. So we mark years 12, 14, 18, and 24. We start cycling. Year 1, nothing happens because we don’t have anyone in our community yet. Year 2, same. Year 3, same, until we get to year 12. At year 12, we generate our first community member, so in year 13 we apply our first random event to that person’s life. In year 14, that person gets another random event, and we add a second community member.
Community | Ancestors |
---|---|
Hunter-gatherer band | 4 |
Horticultural village | 20 |
And then we just keep doing that until we reach the “present” of the Fifth World in 2413, and we see what we have (the problem of how we actually display all of this I’m leaving for the next installment).
We give each character some traits to begin with.
null
if the character is not a psychopath, but starts at 1
for those who are. See Psychopathy for special procedures for these characters.First, let’s talk about carrying capacity. This differs by community type.
Community | Carrying capacity |
---|---|
Hunter-gatherer band | 30 |
Horticultural village | 150 |
The community begins with a discord score equal to a random number between 5 and 10. Generate a number of random numbers equal to the community's discord and use the lowest value generated.
In the table below, Normal indicates the probability of this event under normal circumstances, and Overpopulated indicates the probability of this event when the community exceeds its carrying capacity. Discord shows the impact that this event has on the community's discord score.
Normal | Overpopulated | Event | Discord |
---|---|---|---|
1 | 10 | Conflict. | +3 |
1 | 25 | Sickness. | +2 |
1 | 50 | Lean times. | +1 |
97 | 15 | Peace. | -1 |
Then, each member of the community gets a random event. In the table below, There is a separate column with probabilities under each of the four community statuses.
Peace | Conflict | Sickness | Lean | Event |
---|---|---|---|---|
10 | 3 | 4 | 8 | +1 to Openness to Experience, to a maximum of 3. This can trigger a family event (see below). |
10 | 3 | 4 | 8 | -1 to Openness to Experience, to a minimum of -3. |
10 | 3 | 4 | 8 | +1 to Conscientiousness, to a maximum of 3. |
10 | 3 | 4 | 8 | -1 to Conscientiousness, to a minimum of -3. |
10 | 3 | 4 | 8 | +1 to Extraversion, to a maximum of 3. This can trigger a family event (see below). |
10 | 5 | 6 | 10 | -1 to Extraversion, to a minimum of -3. This can trigger a breakup (see below). |
10 | 3 | 4 | 8 | +1 to Agreeableness, to a maximum of 3. This can trigger a family event (see below). |
10 | 5 | 6 | 10 | -1 to Agreeableness, to a minimum of -3. This can trigger a breakup (see below). |
5 | 5 | 6 | 10 | +1 to Neuroticism, to a maximum of 3. This can trigger a breakup (see below). |
10 | 3 | 4 | 8 | -1 to Neuroticism, to a minimum of -3. |
1 | 36 | 40 | 6 | Sickness. The character has a 5% chance of dying, and skill learning does not advance. |
1 | 25 | 11 | 5 | Injury. See Injury for procedure. |
Six of the random events above can trigger family events or breakups. These involve a love score, which involves a personality distance.
Personality distance is calculated by taking each of the Big Five personality traits and calculating the absolute value of the difference between one person's score for that trait and the other person's score for that trait, and adding those all together. To be more specific, for individuals A and B, such that Ao means "the Openness to Experience score for individual A" and Bo means "the Openness to Experience score for individual B,"
P = |Ao - Bo| + |Ac - Bc| + |Ae - Be| + |Aa - Ba| + |An - Bn|
An initial love score is calculated by taking the personality distance between two people and subtracting a random value between 0 and 1. A lower score here indicates that the characters love each other more.
Three of the random events above can trigger family events. These only happen when the character is 20 years of age or older.
To be eligible, a character must either be a male with a female partner, or female with a male partner, and the mother must not have had another child in the past 4 years. If this is true, we start with a probability equal to 90 minus the community's discord times 10. We cut that probability in half for each child that the character's family already has. If we pass all of that, they have a child. Neither of the parents nor any others they are in a relationship with (e.g., a man and his wife, or a man and his three wives, or four people of various genders in a group relationship) will have any other family events or breakups for this year.
We generate a new character for the child. Most traits are assigned randomly, except for body type and achondroplasia, which are influenced by the parents.
If a family event is triggered but the character won’t reproduce, she might find a new partner.
If the character has no partner and the community's population exceeds its carrying capacity, the character leaves the community, joining her partner in some other community.
Otherwise, the probability that the character will leave the community to join her partner's community somewhere else equals the community's discord times ten.
Otherwise, we start with a 90% chance, and cut it in half for each partner that the character already has. If she passes, we’ll generate 10 candidates, with genders proportional to the character’s sexual orientation. We then calculate personality distance by taking the difference between their scores on each of the Big Five personality traits and adding those together. We then give each one an attraction score equal to that personality difference minus a random number between 0 and 1 (reflecting that, hey, the heart wants what the heart wants, right?). The candidate with the lowest number wins.
If the character isn't getting a new partner but has one already, decrease the love score of one relationship by one.
Three of the random events above can trigger breakups. When these arise for a character who has one or more partners, check the personality distance of each. The personality distance times ten is the probability that their love score goes up by one. Then, see if a breakup occurs by checking against a probability equal to the new love score times ten.
If a breakup occurs,there's a 50% chance that the partner simply leaves, but there's also a 50% chance of an affair. Create a list of candidates in the community proportional to the partner's sexual orientation, age 20 or older, not more than 10 years older or younger than the partner, who do not share any parents or grandparents. Calculate an initial love score for candidate, sort the list by that score, and take the top one. If that candidate is in a relationship, there is a 50% chance that each of her partners will leave her, but this will just be simple separation, not a potential domino effect of affairs.
Each affair increases discord in the community by 1. So, for example, if we get the 50% result for an affair, that's +1 to discord, and if the candidate selected is in a relationship with two other people, that's 2 more affairs, so another +2 to discord, for a total of +3.
This is probably no more true than the “10,000 hours” canard, but let’s say it does take 7 years to master a skill. You spend your first seven years mastering the skills of just living in the world: walking, talking, and all of that. You spend your next 7 years mastering the more specific skills of engaging with your society. After that, it’s up to you.
Here, I’m going to leave the details a little fuzzy to fill in later, but we’ll have a list for young adults, a list for middle-aged people, and a list for elders. We take a random skill from the appropriate list, based on age, and we set a time equal to the current year plus learning time. Learning time will be equal to seven minus the character’s intelligence score (so intelligent characters pick up skills more quickly).
If you are learning a skill, we check the current year against the year when you’re supposed to finish. If the current year is greater than or equal to that, we add it to the list of skills that you’ve mastered. You now count as not learning anything, so next year you’ll start on something new.
The year when you're injured, your skill learning does not advance, because you spend so much time recovering from your injury.
% | Injury |
---|---|
2 | Loss of vision. The character is blind. |
2 | Loss of left eye. If the right eye was already lost, the character is blind. |
2 | Loss of right eye. If the left eye was already lost, the character is blind. |
2 | Loss of hearing. The character is deaf. |
2 | Loss of left ear. If the right ear was already lost, the character is deaf. |
2 | Loss of right ear. If the left ear was already lost, the character is deaf. |
4 | Loss of left arm. |
4 | Loss of right arm. |
4 | Loss of left leg. |
4 | Loss of right leg. |
3 | The character dies. |
9 | The injury becomes infected, and the character dies. |
60 | The character takes a scar. |
Most characters will have a null
as their psychopathy value, but psychopaths will have a number, indicating the extremity of their risk-taking behavior. At age 15 and each year thereafter, the psychopath might act out. A random event that lowers conscientiousness or agreeableness, or raises neuroticism, will also motivate a psychopath to act. The community's discord is increased by the value of the character's psychopathy score.
The community has a chance to discover the psychopath's actions equal to his psychopathy score times 5. If discovered, the probability that they kill the psychopath is equal to his psychopathy score times 20. If he isn't killed, he's exiled.
If the psychopath acts out and is not caught, his psychopathy score increases by one. He'll need to do something more extreme next time to get that same thrill.
In each year of her 50s, a character has a 1% chance of dying of old age. In her 60s, this becomes 2%; in her 70s, 4%; in her 80s, 8%, in her 90s, 16%, in her 100s, 32%, and in her 110s, 64%.
Any time a character dies, add +1 to community discord.
OK, so at this point I still need details on skills and to figure out how the hell I'm going to display all of that information I generated with that procedure outlined above.
Made some edits to that last big comment to call out some specific calculations that get re-used and plug in more equations instead of thresholds, so that stuff becomes more likely as things progress, rather than just reaching some point where things just happen.
You might be looking at this and thinking there's a vicious cycle with discord, where once you get into it things just get worse and worse. That might be true, I'll have to test it to see. My thinking is that you get on the discord train when your population exceeds carrying capacity, and the discord leads you towards people leaving or dying. Which will bring you back under carrying capacity. Which makes it really likely (97%, to be precise) that you'll experience peace and prosperity. Which brings your discord back down. Which increases your birth rate. It's supposed to be, effectively, a Lotka-Volterra cycle, where the predator is discord.
We want to show the community we came up with and give the user a chance to either accept it, or run it over again. If accepted, we’ll be creating a page for the community and all its members, so we want to make sure that it’s good before we go making all those pages.
Since we went year by year, we can provide a yearly chronicle of the community’s history.
We’ll need to figure out a good solution to generate a graphic, but we’ll generate a relationship map, showing parents and children, and who’s in a relationship with who. This one could take a while to get just right, but it’s clearly the best way to present what’s going on. We’ll only show the “current state” of the community.
Then we can just list the characters.
Up to age 7, you’re learning the basics of life — walking, talking, and so on. From age 8-14, you’re mastering the specifics of cultural life in your community. Everyone in the community age 15 or older is assumed to have the basic level of skills needed for life in that community. So, for example, every member of a hunter-gatherer band can hunt and track as well as the best modern hunters, they know and can mimic animal and bird calls fluently enough to speak to them, they can shoot arrows well enough to count as expert marksmen, they can move quickly and quietly through the forest like ninjas, etc. That’s just baseline. To have one of the skills listed below means that you have mastered it to a degree to garner a reputation, to earn the respect of your community.
Some skills have sublists. These only become available if you take the core skill first. To gain a subskill means that you have excelled and focused on that specific subskill to the extent that you are renowned as one of the best that the community has ever seen.
The following skills are things that you’re less likely to start learning after the age of 56. If you pick one of these, we’ll pick again. But not a second time, so if you pick something like this twice, sure, you can be the guy who starts getting into endurance running at the age of 72. We just don’t want it to be equally likely as a 16 year old.
Each character has a magical calling, base of zero.
Factor | Effect |
---|---|
Mother knows magic | +20 |
Father knows magic | +20 |
Intersex | +20 |
Third gender | +20 |
Homosexual | +10 |
Neurodivergent | +25 |
Dwarf | +20 |
Each injury or sickness survived | +5 |
If you select magic as the skill you want to learn, check for magical calling. If that check fails, select again. If you select magic a second time, go with it.
Anytime a character receives a sickness or injury random event, also check for magical calling. On a pass, drop whatever skill you were learning and start learning magic instead.
Once you learn magic, its subskills are treated like any other subskills.
If you select reading and there’s no one in the community who can read, select again. If you get reading a second time, stick with it.
If you select reading and there is someone else in the community who can read, there’s a 50% chance that she’ll teach you if your intelligence is above average and your extraversion is below average. Otherwise, select again. If you get reading a second time, stick with it.
OK, there's quite a bit here, but I think we've laid out enough to get to work. I'm going to split this up into a bunch of new issues, and they're all going to be part of a new milestone: Community Creation. That'll help us track how much is left and when it's done.
I'm going to be making a new branch from develop
called community-creation
. I'll work on each ticket in its own branch from that using the normal convention (e.g., features/##-developer-description
), merging them back into community-creation
when they're finished. When we get to the point of merging community-creation
back into develop
, there will be much rejoicing.
Thanks for your feedback, everybody. This has been split up into other issues (#37, #38, #39, #40, #41, #42, and #43). This ticket will remain as the "bridge" to mark that we really do need to get community creation done before we can consider the initial launch successful (I don't think issues can belong to two milestones, and there's enough parts to this to warrant its own milestone to keep track of it, so this one is remaining in "Initial Launch" to track that part).
How this is supposed to work
Step 1: Where you at?
Base level here is just a textbox asking for your latitude and longitude. It's pretty bad, but what else can we do if JS fails? If JS works, we'll show a map, and request geolocation. If granted, we'll default to where the member is, and ask, "Is this where your community is?" They'll have the option to change it, but if we're doing this right, they shouldn't most of the time. If they have JS but deny geolocation, then you get a map and you need to choose where this community lives, roughly.
We use that to determine if this is a coastal community (draw a 20-mile radius circle centered on the point we were given; if that circle intersects our coastline polygons, it's coastal) or if it has access to rivers (if that same 20-mile radius circle intersects any rivers).
Step 2: What do you emphasize?
Pretty much everybody in the Fifth World generalizes, but what foods do you emphasize? You have a reputation for being really good at __. Pick ... ah'dunno, 4? Something like that.
The end of seasonality means that there isn't much difference from season to season, and a heterogeneous jungle planet from pole to pole means it's pretty much the same options everywhere you go. The diversity comes from the fact that you can't emphasize everything, so you'll end up in complex political-economic relationships with the people who emphasize the things that you don't — and perhaps in rivalries with those who emphasize the same things you do. So we get a tangled web of intrigue this way.
This is where figuring out if our communities has access to the coast and/or rivers comes back into play, as this will change the list of options available.
Step 3: Discover some places.
Based on the things that you choose in the previous step, we can put your community somewhere on a spectrum from horticulture to foraging. This lets us estimate population density and territory size.
It also lets us pick a few key cards from the deck that are particularly important to you. For example, if you grow a lot of plants, we'll want to name the Garden right from the start, whereas if you hunt a lot of animals, we'll want to name the Hunting Grounds instead.
If JS is working, you'll get a map, showing your territory (by relying on that estimate of territory size we were able to make, based on what you emphasize). Otherwise, you'll need to enter latitude and longitude again, which, again, will suck. We can make sure that the places you add aren't too far away, since we have that estimated territory size.
Step 4: Approve community.
Edit: Scratching all of this. See comments.
How I'm going to do this
Well, there's some theoretical work to be done here first, isn't there? You'll notice a few questions I just left dangling, unanswered. I'm going to have to answer those. That work's going to happen in the comments below.
And it's not like any of this is particularly useful until it's all done, so we're going to be working on this in the
features/36-community-creation
branch.