-
Notifications
You must be signed in to change notification settings - Fork 504
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Relationship/kin thought weights | Option to save dead relationships #2476
base: development
Are you sure you want to change the base?
Relationship/kin thought weights | Option to save dead relationships #2476
Conversation
…nto development
Cousins now are only initiated after all uncles/aunts
- Fixed kin thoughts overwriting relationship thoughts - now the roll is truly weighted - For some bizarre reason I had to put "import random" before "from random import" and remove "choices" from the list to get "choices" to work. Tried multiple different solutions and this was the only one to work.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some minor things I found, the files cat.py and load_cat.py I still have to look at (when I have more brain power)
# since we rolled a special thought already and couldn't get one | ||
thought_choices_reroll = ['kin', 'normal'] | ||
weights_reroll = [ | ||
(1.25 * game.config["relationship"]["kin_thought_chance"]), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why is there still a multiplication when there is a setting for the chance? The reason for the settings is to reduce such values as much as possible.
(same as in other lines such as 1733)
} | ||
|
||
kin = { | ||
"gen_grandparents": [cat.all_cats.get(cat_id) for cat_id in cat.all_cats if cat.all_cats.get(cat_id).is_grandparent(cat)], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The "get_kin_groups" function is not very performant. To improve it at least a little add the new "kin" to the inheritance class. It seems it was done but not used?
@@ -1665,6 +1665,43 @@ def change_relationship_values( | |||
if log_text not in rel.log: | |||
rel.log.append(log_text) | |||
|
|||
def get_kin_groups(cat, include_dead=True): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is it important at this point to already have the cat class? It would be more performant to just use the id's as long as possible and then fetch the cat, when the information from them is needed.
close_kin, kin, distant_kin = get_kin_groups(self, include_dead=include_dead) | ||
|
||
# 50% chance of choosing close kin | ||
if kin_group_choice >= 50: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The chances of each type of kin group can and should also be added in the settings.
chosen_cat = choice(distant_kin_cats) | ||
other_cat = chosen_cat.ID | ||
#print("distant kin thought: from: ", self.name, " to: ", chosen_cat.name) | ||
else: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
'else: pass'
sections doesn't change anything and should be removed.
break | ||
# for dead cats | ||
# Roll relation and kin thought chances | ||
if thought_type == 'relationship': |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The thought type should be handled before the "if where_kitty == " statement. In that way there won't be that many code duplications in the class.
@Snowstar38 Sorry that it (to be specific I) took so long (also there was the feature freeze in between) |
About The Pull Request
When generating cat thoughts, there will now be a chance for the other_cat to be a cat that they already have a relationship with, or one they are related to (determined by relationship_thought_chance and kin_thought_chance).
In addition, an option (dead_relations) was added in the clansettings to enable retaining dead cats' relationships. This is false by default. The reason these two changes are bundled is because when dead_relations is enabled, dead cats can now have relationship thoughts rolled, so they will have a chance to think about cats they were friends with before dying.
This also fixes a bug I discovered during testing in which some cousins would not properly be displayed in the family tree (now cousins aren't checked until the full list of aunts and uncles is complete).
Why This Is Good For ClanGen
Thoughts are one of the main ways to get insight into the day-to-day lives of the cats in your Clan. Oftentimes, cats in Clangen can feel a bit disconnected with one another, especially in larger Clans; while there is a relationship and kin system, it has no impact on who they're thinking of. This change will hopefully make the Clan feel more "alive" by allowing cats' connections to affect thoughts.
It also makes dead cat thoughts more interesting, as now a dead cat is more likely to be thinking of their kin (or friends, if dead_relations is enabled) left behind in the living world.
Allowing dead cats to retain their relationships is a commonly requested feature; it is by default off and includes a tooltip warning mentioning possible performance impacts on large Clans (though it's not clear if this impact would be all that significant). Keeping that information is valuable for those who like to look back through their cats in StarClan and the Dark Forest and remember who they were friends or rivals with.
Proof of Testing
Changelog/Credits
Big changes:
Technical changes:
Bugfix: