- MCP server with stdio transport for local use - Search episodes, transcripts, hosts, and series - 4,511 episodes with metadata and transcripts - Data loader with in-memory JSON storage 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
311 lines
16 KiB
Plaintext
311 lines
16 KiB
Plaintext
Episode: 2898
|
|
Title: HPR2898: Modeling people in space game
|
|
Source: https://hub.hackerpublicradio.org/ccdn.php?filename=/eps/hpr2898/hpr2898.mp3
|
|
Transcribed: 2025-10-24 12:55:44
|
|
|
|
---
|
|
|
|
This is HPR Episode 2898 entitled, Modeling People in Space Game, and in part of the series,
|
|
Hackel, it is the 30th anniversary show of Tuku Toroto, and is about 22 minutes long,
|
|
and Karima Clean Flag.
|
|
The summer is, Tuku Toroto talks how they approach Modeling People in Space Game.
|
|
This episode of HPR is brought to you by archive.org.
|
|
Universal Access to All Knowledge by heading over to archive.org forward slash donate.
|
|
Hello, you are listening to the Hackel pop-up radio, and this is to tour the talking about
|
|
people, especially, specifically about how the people are modeled in the game I am writing.
|
|
This is a pretty long topic.
|
|
I will split this into multiple episodes and probably going to return to this again and again
|
|
as the game progresses.
|
|
This one will be mainly about how data is organized isn't that much of actual coding this episode.
|
|
So, there will be lots and lots and lots of people in the game, and some of those will be most
|
|
of them to be controlled by the computer and some of those will be controlled by the players.
|
|
And the ones that are controlled by the players are avatars.
|
|
So, every player always has a one character that they are playing as, and when that character dies,
|
|
then it's not the game over for the player, but the player will continue playing as the hero of that character
|
|
that they were just playing.
|
|
So, in a sense, they are playing as a single character, but as a dynasty, as a plotline that continues over the time.
|
|
So, if there's no air here, the player can choose any person to play.
|
|
I'm not going to kick them out of the game.
|
|
So, there's plenty of data about the people.
|
|
They are currently probably the most complicated complex convoluted part of the game.
|
|
Most of it is stored in the person table and the person data in the game.
|
|
So, there's a simple stuff like name, sex, gender, date of birth, some stats.
|
|
I'm probably starting directly from the Crusader Kings II.
|
|
There's a diplomat in Maasel, Stewarchs, in Greek, and learning at least currently.
|
|
I think this fits better describing a rule than, for example, the 20 stats of strength and wisdom and textarity.
|
|
But it might change in the future.
|
|
There's a primary title.
|
|
This is the, in case the character has domain over multiple places.
|
|
For example, if he's a ruler of three planets, then he has a bigger one of those as his primary place.
|
|
That place is where his court will be located.
|
|
And that also defines what his title will be, or at least his primary title.
|
|
So, if you are a ruler of a planet, for example, terra, then you are a traitor of terra.
|
|
And if you are a ruler of whole solar system, whether terra is located, then you are a procurator of soul.
|
|
And so on. I'm borrowing those from the Romans.
|
|
And names, names are actually funny.
|
|
And what's reading quite a bit about how people are.
|
|
People have been naming people over the course of history.
|
|
And there's lots and lots and lots of various ways.
|
|
I'm not going to implement all of them at this time.
|
|
Probably never going to implement all of them in any way.
|
|
But I choose three cases to spot it.
|
|
The simplest one is symbol name. That is just the first name.
|
|
And maybe a cognoment that's a name that describes the character.
|
|
That's sort of like an extra name.
|
|
Then you could be a massive fisherman.
|
|
Or you can beat a beat if you are not.
|
|
These are usually people of not that big importance.
|
|
Then there are regular names, which are first name and family name, and maybe cognoment.
|
|
And then you get to the level of the rulers, you get the regular names.
|
|
That's the first name family name, hecknall number and maybe cognoment.
|
|
And the hecknall number is one.
|
|
And that's the rule.
|
|
You get the regular names.
|
|
That's the first name family name, hecknall number and maybe cognoment.
|
|
And the diagonal number is what tells rulers that have been named in the same way from each other.
|
|
So you can have a number throwing up by a flank.
|
|
Elisabeth II, for example, there was a Elisabeth at some point and then there was a new queen called Elisabeth.
|
|
So that's Elisabeth II.
|
|
And also, I'm not here yet deciding how exactly the diagonal number will go.
|
|
It might actually differ from culture to culture.
|
|
Some cultures have the number to go in a way that everyone is every ruler who has a name is first.
|
|
And if there's the same one, then that's the second.
|
|
Some cultures too, that you are just a name.
|
|
And when somebody later on takes the same name, they are the second and you are the first from that point on.
|
|
So the number and scheme is different from the culture to culture.
|
|
And if you combine that with the title, you get things like Acrypina VII, the bold procurator of Sol.
|
|
This is a formal way of addressing them and so on the game.
|
|
I mentioned the Dynasties at some bit earlier, so they are the how the game progresses through the time.
|
|
The Dynasties group of people sharing the answers to more or less.
|
|
Of course, it's a bit more complicated than that because there are marriages involved.
|
|
And when somebody marries to different Dynasties, they don't in the game, they don't switch to that Dynasties.
|
|
But they have to choose who is the Dynasties.
|
|
The children of two Dynasties.
|
|
Two persons from different Dynasties marrying the children can be only either one of the Dynasties.
|
|
And because the inheritance goes through the Dynasties bloodline.
|
|
Then it's a pretty important decision.
|
|
And the higher up you go in the ranks, the more political the marriage is then to be.
|
|
And the marriages are actually stored in the separate table for this specific reason.
|
|
You have to have an information of who is married to who and who is done as the children will belong to.
|
|
I was talking about sex and gender.
|
|
So sex, that is the biological aspect.
|
|
In the game, I have just simple enumerous male and female intersex.
|
|
And gender is the social aspect that is enumerous of non-human or gender non-binary.
|
|
This is very coarse division, but it's sufficient for the purposes of the game for now.
|
|
I might fine-tune this a bit later on, but I just want to get some sort of framework into place where I can start experimenting with the data.
|
|
And see how this thing works.
|
|
I know that this will lead into the troubles, into later on.
|
|
It will be easy to just have a binary human and that's it.
|
|
But having a more complex system, I think it's more nuanced and offers more interesting choices later on.
|
|
For example, if we have an agnostic prognostic, meaning that the eldest children child will inherit and the preference is for the male,
|
|
but if there's no male here available, then the oldest female will inherit it.
|
|
But then in our system, we can easily have a transgender or intersex or non-binary character,
|
|
figuring out how inheritance laws work in these cases might be a bit tricky.
|
|
I have been giving it a little bit, doesn't seem to be too easy.
|
|
But I will tackle that when I get into the writing inheritance, how that they actually actually go.
|
|
Reading about different systems and different customs around the world.
|
|
I'm not currently not modeling sexuality at all.
|
|
I haven't yet figured out how to do that and how important it will be for the game.
|
|
But that's in the long list of things to figure out and start working at some point.
|
|
One of the important factor part of the characters is traits.
|
|
These are things that define, these are sort of defining features of the people.
|
|
They include things like brave, outward, ambitious, content honest, deceitful.
|
|
And these are binary, meaning that you need to have it or you don't have it.
|
|
You cannot be 55 person brave.
|
|
That's not possible in this system.
|
|
Either are brave or you are not brave or you are either covered or you are not covered or you are neither one.
|
|
So it's basically a three step setting in this topic market.
|
|
And these can change over time.
|
|
And they are stored in the separate table, again that links to the parent table.
|
|
And these can change.
|
|
Because these can change over time.
|
|
You have to keep track that you don't get into the situation where you are both brave and coward.
|
|
That doesn't make sense.
|
|
I have been thinking of writing it in a way that if some special event happens and you are as a result of that event,
|
|
you turn out to be brave.
|
|
Okay, fine, then you are brave.
|
|
But if later on happens another event where you act in a way that will be cowardly,
|
|
you don't turn into the coward immediately.
|
|
But you lose your brave status.
|
|
And if you do that simulating again, then you are coward.
|
|
Okay, relations between characters.
|
|
And this is, this is, this I found very, very interesting to write.
|
|
So stored in the person's relation table.
|
|
Basically, there are just two people.
|
|
The type of relation.
|
|
This is enumeration.
|
|
If it's a child or parent or spouse or friend or rival, for example.
|
|
And visibility.
|
|
Is it a public relation?
|
|
Is it a family relation?
|
|
Or is it part relation?
|
|
The public relations are known for everyone, basically.
|
|
Everybody knows of public relations.
|
|
Family relations are known for not necessarily for the family,
|
|
but for the smaller group of people.
|
|
And private relations are known only by the, by the persons involved.
|
|
So there's a three level setting on how secret relation is and how well known it is.
|
|
And this form interconnected web, like the same relation.
|
|
Every person in the game will have a bunch of relations.
|
|
And players will never ever have a whole information about this information,
|
|
of this web, web, web, to themself.
|
|
And they have to, they have to somehow try to uncover the information of the persons
|
|
that they are interested of knowing.
|
|
Or they might be the allies, they might be the enemies, they might be some powerful person
|
|
that is neither one and they are trying to figure out where they stand on a grand scale of the things.
|
|
And for this, figure out things that are in there.
|
|
And if you remember how I did that in the, with the planets in, in the planets,
|
|
they were a system that keeps collecting more and more information
|
|
and slowly builds up better picture for the player about certain planets.
|
|
First, first they only know maybe its location and its name.
|
|
And then as the information starts feeding in, they get the information
|
|
about the gravity and composition of the atmosphere
|
|
and what kind of buildings are located, if they are anything located,
|
|
who's the current ruler and how many people are living there.
|
|
I mean, information like this.
|
|
But I couldn't do it.
|
|
No, probably I could have done that with the people too,
|
|
but the amount of data would have been pretty big.
|
|
And it started feeling hard to keep track of things while coding.
|
|
So I opted for a slightly different system.
|
|
So there's a human interlinked change.
|
|
It's thought that they will name it in the same way.
|
|
That is basically just to store the information about the,
|
|
there's a link to the person.
|
|
There's the owner of the info and level of the info.
|
|
So this basically just tells that some person has,
|
|
some certain level of information about another person.
|
|
And they can, things like, on the level, they can,
|
|
they have spots or demesne, demesne, meaning,
|
|
area, they are controlling, fanny relations, secret relations,
|
|
opinions, trades, and so on.
|
|
So when I'm showing the data to them,
|
|
players on the UI, I have to, I'm not loading the,
|
|
I'm not showing them the information directly from the person
|
|
and relation, relation and so on tables,
|
|
but I'm filtering them based on the person intel
|
|
that they have about that specific, specific person.
|
|
So if they, for example, don't have a,
|
|
if they have stats intel about a person,
|
|
then they can, then they are shown the stats of the,
|
|
of the person.
|
|
If they don't have that information, then they are not shown,
|
|
shown of the, shown that information.
|
|
And the, and how this is done is, for example,
|
|
in the case of trades.
|
|
There's a person report that is the information
|
|
that is transferred between client and server,
|
|
showing, showing information of the person.
|
|
There's a field called person type of trades,
|
|
that is maybe trade report.
|
|
I'm sorry, maybe list trade report.
|
|
And this one tends possible list of trade reports,
|
|
hence it, maybe.
|
|
In the code, it's intended with the exclamation mark,
|
|
meaning that, that field is always evaluated
|
|
instead of tank being constructed.
|
|
Because Haskell Haskell works in a way that,
|
|
if you, if you create a total record,
|
|
and put, mark that some field is a result of some computation,
|
|
Haskell doesn't automatically perform that comp,
|
|
comp, computation, it creates something called tank
|
|
that is basically a place order,
|
|
that knows how to compute that information.
|
|
And only when that information is needed,
|
|
then the tank is forced, and you get the actual value.
|
|
Sometimes it really is, really nice you can,
|
|
you don't, well, big advantage is that you don't have to think about
|
|
in which order things have to happen.
|
|
Haskell will take care of that for you,
|
|
and it won't compute things that you don't actually end up using.
|
|
But the drawback is that if you have a big report
|
|
that has a lot of fields that you always end up using,
|
|
then this tank creation is wasted effort.
|
|
So, when preventing them with the exclamation mark,
|
|
you get the, you force the Haskell to compute the value
|
|
as soon as, as soon as you are creating the record.
|
|
So, yeah, so, so that percent report,
|
|
trades is maybe a list of trade reports.
|
|
And in the code we are creating this,
|
|
I'm just finding that percent report trades,
|
|
equals if trades element market intel,
|
|
meaning that if market intel value,
|
|
and that's a list holds a trade,
|
|
that's a very intel value,
|
|
then just dollar trade report,
|
|
dollar market trades, else and nothing.
|
|
Meaning that if we have the trade information about this person,
|
|
then we are going to call trade report function
|
|
to each and every of these trades of this person
|
|
to create a report otherwise we are returning nothing.
|
|
And the trade report is a function
|
|
that goes from person trade to the trade report
|
|
that includes name, description, trade pipe,
|
|
and information how long the trade is valid,
|
|
because some of them are very transient in nature.
|
|
So, this means that,
|
|
that if this information is the one that is sent to the client,
|
|
so on the server side,
|
|
they might be just a single value trade,
|
|
nothing else,
|
|
storing into the database for this person.
|
|
And when it's loaded and sent to the client,
|
|
then we are going to call the client side,
|
|
they are going to be a nice little record
|
|
that has name, description,
|
|
so, brave and string this person's particular brave.
|
|
Then there's the trade pipe,
|
|
that is the enumeration,
|
|
and information how long that is good.
|
|
So, that's basically all the code
|
|
I'm going to talk on this episode.
|
|
So, to recap, there's a person,
|
|
and from the person,
|
|
there's hanging from several other tables
|
|
that have information about the narratives and the relations
|
|
and intel that this person has about another person,
|
|
and this data is what represents a person in the game.
|
|
Next time, I'm going to look more closely into opinions.
|
|
This episode is starting long enough already as of yet.
|
|
So, I'm going to leave it to the next time,
|
|
but the opinions are going to be picked in the game
|
|
because this describes how, basically,
|
|
what somebody else has opinion about somebody.
|
|
So, it's as a rule,
|
|
you have to keep track,
|
|
what opinions you have about you,
|
|
and what opinions your allies have about you,
|
|
and have to manage them,
|
|
but I'm going to leave that for the next time.
|
|
That's about it for this time.
|
|
I'm going to stop now.
|
|
If you have any questions, comments or feedback,
|
|
they're always welcome.
|
|
Easy to get to me,
|
|
nowadays is the email or the first one,
|
|
where I'm too durable,
|
|
I'm master, and that's also,
|
|
other after.
|
|
You've been listening to HecopobliGradio
|
|
at HecopobliGradio.org.
|
|
We are a community podcast network
|
|
that releases shows every weekday, Monday through Friday.
|
|
Today's show, like all our shows,
|
|
was contributed by an HPR listener like yourself.
|
|
If you ever thought of recording a podcast,
|
|
then click on our contributing
|
|
to find out how easy it really is.
|
|
HecopobliGradio was founded by the Digital Dove Pound
|
|
and the Infonomicon Computer Club,
|
|
and is part of the binary revolution at binrev.com.
|
|
If you have comments on today's show,
|
|
please email the host directly,
|
|
leave a comment on the website
|
|
or record a follow-up episode yourself.
|
|
Unless otherwise stated,
|
|
today's show is released on the
|
|
Creative Commons'
|
|
Attribution,
|
|
ShareLite,
|
|
3.0 license.
|