News:

Please request registration email again and then check your "Spam" folder

Former www.henthighschool.com

Trait Posting/Discussions

Started by Mayhem0, Dec 31, 2022, 06:55 PM

Previous topic - Next topic

Mayhem0Topic starter

Made this topic to have a place to post traits and discuss traits with others.

Mayhem0Topic starter

#1
Here are some overpowered traits. For some reason you can't use kings way to add traits when these are in the game but you can get them through the Headhunter mod.
https://mega.nz/folder/MU4XQSTR#p3Yh6xCudgv4T0t6AQGcIw
Traits have been updated so now there are three versions of the Overpowered traits

Mayhem0Topic starter

Quote from: Mayhem0 on Dec 31, 2022, 08:21 PMHere are some overpowered traits. For some reason you can't use kings way to add traits when these are in the game but you can get them through the Headhunter mod.
https://mega.nz/folder/MU4XQSTR#p3Yh6xCudgv4T0t6AQGcIw
The Traits are:
Goddess- She is otherworldly.
Sex Goddess- She is an otherworldly being who loves sex.
Flame Goddess- Fiery and Passionate, her dance sets the world alight with the flames of lust.
Nature Goddess- Calm and Serene, her actions and mannerisms set those around her at ease.
Water Goddess- Soothing and Unwavering, her beauty and personality attract those around her.
Goddess of Victory- Loyal and Caring, she watches over the brothel and protects the girls together with the Goddess of War.
Goddess of War- Cautious and Caring, she ensures that the girls are able to protect themselves and watches over the brothel together with the Goddess of Victory.
Goddess of Fame- Observant and Loving, she, along with the Goddess of Fortune, does her best to show the world the best of the girls that she can.
Goddess of Fortune- Charismatic and Observant, she, along with the Goddess of Fame, does her best to make sure that the customers give the girls what they can.
Goddess of the Hearth- Warm and Caring, she watches over   the girls and the customers with her aura soothing those who enter the brothel and ensuring that they are well taken care of.

neronero

Hot damn, you weren't kidding when you said they were overpowered  ;D
I think your examples would still be overpowered if the values were 5% of what they are now.

There's a difference between having a cool overpowered trait and having a trait that's just silly and makes the core gameplay a complete joke. That leaves me with the feeling that you're just adding big numbers without a good understanding of what they mean.

For example, take "increase satisfaction", in the difficulty settings putting a value of +3 on this would be considered extremely easy. Anything above that is already so absurdly strong that the game stops you from doing so. But most of these traits add +30, or even +50 for every job/act of every girl in your brothel!

Another example, increasing customer/capacity isn't very useful if your girls don't have equally insane boosts to energy/tiredness in order to service so many customers. An overpowered "customer capacity" will practically guarantee that your girl will be exhausted after 1 night, and an overpowered "change"/"customers" will lead to an army of angry clients that you're not able to service, so they'll all leave bad reviews on Yelp and tank your brothel's reputation.

All that being said, I don't mind the idea of overpowered traits. But I would prefer to combine them with some sort of really difficult challenge, through which the player can prove that he has already beaten the game and mastered its systems in some sense. Examples:
- If one girl clears 5 contracts, she gains a special trait
- If the player clears XX% of all achievements, he can now choose to start new games with a set of overpowered traits added to the mix.
My Girl Packs: [ link ] - Trait King mod: [ link ]


Mayhem0Topic starter

#5
How would one go about doing that? Sounds like something that would be interesting to do so was wondering If it was possible to make special achievements for each trait that requires the girls to do something.

Mayhem0Topic starter

I can also make another version of the traits that aren't as overpowered as these ones

Raptor010

Quote from: neronero on Jan 01, 2023, 12:32 PMAll that being said, I don't mind the idea of overpowered traits. But I would prefer to combine them with some sort of really difficult challenge, through which the player can prove that he has already beaten the game and mastered its systems in some sense. Examples:
- If one girl clears 5 contracts, she gains a special trait
- If the player clears XX% of all achievements, he can now choose to start new games with a set of overpowered traits added to the mix.

Honestly, I think that would be just a really cool addition overall - I'd probably test out the mod if it was tied into some system akin to what you proposed Nero.

neronero

Quote from: Mayhem0 on Jan 01, 2023, 07:18 PMHow would one go about doing that? Sounds like something that would be interesting to do so was wondering If it was possible to make special achievements for each trait that requires the girls to do something.
Well, the first step is determining exactly what you want to do.

- Should these new traits be unlocked through newly created unique achievements, or can they be tied to completing existing achievements?
- Should each achievement unlock its own new trait, or should there be collections of new traits that unlock all at once when you've completed (for example) 25 / 50 / 75 / 100% of all achievements
- Once you've determined the above, create a list of traits (and achievements) in line with those choices.
- Should users be able to turn individual unlocked traits on-and-off? Or is it just a matter of turning the entire mod on-and-off?
- Should these unlocks immediately be added to your existing game, or only appear once you start a new game (or should some even be immediately added to the girl that unlocks an achievement?)

My advice would be to start as simple as possible. Nothing wrong with dreaming big, but it'll become more and more complicated to build.
My Girl Packs: [ link ] - Trait King mod: [ link ]

Mayhem0Topic starter

#9
Quote from: neronero on Jan 02, 2023, 02:07 PM
Quote from: Mayhem0 on Jan 01, 2023, 07:18 PMHow would one go about doing that? Sounds like something that would be interesting to do so was wondering If it was possible to make special achievements for each trait that requires the girls to do something.
Well, the first step is determining exactly what you want to do.

- Should these new traits be unlocked through newly created unique achievements, or can they be tied to completing existing achievements?
- Should each achievement unlock its own new trait, or should there be collections of new traits that unlock all at once when you've completed (for example) 25 / 50 / 75 / 100% of all achievements
- Once you've determined the above, create a list of traits (and achievements) in line with those choices.
- Should users be able to turn individual unlocked traits on-and-off? Or is it just a matter of turning the entire mod on-and-off?
- Should these unlocks immediately be added to your existing game, or only appear once you start a new game (or should some even be immediately added to the girl that unlocks an achievement?)

My advice would be to start as simple as possible. Nothing wrong with dreaming big, but it'll become more and more complicated to build.
How would one tie the traits to the achievements? Don't really know what kind of wording would have to be used in the code to make it work or what kind of wording can be used for the code in renpy.

neronero

#10
Quote from: Mayhem0 on Jan 02, 2023, 03:25 PMHow would one tie the traits to the achievements? Don't really know what kind of wording would have to be used in the code to make it work or what kind of wording can be used for the code in renpy.

I think the easiest way would be by checking the contents of persistent.achievements

All unlocked achievements are stored there. How exactly you want to check it will depend on what your answers to my previous questions would be, but here's a very simple example:

sum(persistent.achievements.values())
This will return a score that starts at 0 if you haven't unlocked anything, but keeps going up for every achievement you've unlocked (every tier counts as 1 in tiered achievements)

A mod could check that value at the beginning of a new game to say "if this value is over 100, add the following list of traits to the trait dictionary, and if it's over 200, also add the following..." etc.

You could also inspect every value of persistent.achievements more rigorously to tie specific trait-unlocks to specific unlocked achievements.
My Girl Packs: [ link ] - Trait King mod: [ link ]

Mayhem0Topic starter

Quote from: neronero on Jan 02, 2023, 07:01 PM
Quote from: Mayhem0 on Jan 02, 2023, 03:25 PMHow would one tie the traits to the achievements? Don't really know what kind of wording would have to be used in the code to make it work or what kind of wording can be used for the code in renpy.

I think the easiest way would be by checking the contents of persistent.achievements

All unlocked achievements are stored there. How exactly you want to check it will depend on what your answers to my previous questions would be, but here's a very simple example:

sum(persistent.achievements.values())
This will return a score that starts at 0 if you haven't unlocked anything, but keeps going up for every achievement you've unlocked (every tier counts as 1 in tiered achievements)

A mod could check that value at the beginning of a new game to say "if this value is over 100, add the following list of traits to the trait dictionary, and if it's over 200, also add the following..." etc.

You could also inspect every value of persistent.achievements more rigorously to tie specific trait-unlocks to specific unlocked achievements.
What I meant was how would you code it so that you could have traits be unlocked through unique achievements. Also what I meant by wording was the words used in a code for it to work.

neronero

Quote from: Mayhem0 on Jan 02, 2023, 07:18 PMWhat I meant was how would you code it so that you could have traits be unlocked through unique achievements. Also what I meant by wording was the words used in a code for it to work.
With unique achievements it becomes a bit more complex as you also have to add your own achievements to achievement_list first, but after that the idea of checking persistent.achievements stays the same I think.

If you're not sure where to begin based on my description, I don't think you're ready to do this.
It's not reasonable to ask me to build the entire mod for you 'as an example'.

Try your best to learn some Python and to build your own mod and then tell us where/when you get stuck. If that's too difficult, then describe your idea as best you can and hope that Goldo, me or someone else will be inspired by that (but accept that it might not be built on your timeframe or exactly as you envisioned it)
My Girl Packs: [ link ] - Trait King mod: [ link ]

Goldo

Quote from: Mayhem0 on Jan 02, 2023, 07:18 PMWhat I meant was how would you code it so that you could have traits be unlocked through unique achievements. Also what I meant by wording was the words used in a code for it to work.

I'll break down your question a little to give you a good answer, but as neronero said it's going to require at least a little python knowledge to implement.

1) How do I add a unique achievement?
Spoiler
Achievement 'templates' are stored in a list called 'achievement_list' created at init time. It looks like this:
achievement_list = [
                        Achievement("Introduction: Brothel Management 101", "Watch the introduction.", pic="portrait.webp", pic_path="NPC/Sill/", target="intro"),

                        Achievement("New trainer: Maya", "You have unlocked Maya. She can improve your girls' defense.", pic="portrait.webp", pic_path="NPC/Maya/", target="trainer maya"),
[...]
]

To add your own achievement, you will need to append an instance of the Achievement() class to the list at init time. You can do that in a mod file.

But that is not all, you also need to update the achievement dictionary which mirrors the list:
achievement_dict[achv.target] = achv # Where achv is your custom Achievement object.
Now you're done, you have a brand new achievement (but it does nothing yet).
[close]

2) Test conditions for your unique achievement
Spoiler
Now that your achievement is listed, you need to code in the necessary bits so that it can be unlocked.

There are roughly two situations:
  • Easy: Your achievement is unlocked just by reaching a certain point in the game. You need to add a python line to unlock the achievement somewhere in the code:
    unlock_achievement(target) # Where target is a string: the target attribute of your Achievement object.
  • Hard: Your achievement needs some kinds of conditions to be tested before it unlocks. You can either update the 'test()' method of the Achievement() class to match your conditions and use that where you want to implement the check in the code, by calling test_achievement(target)Another option is to just test your conditions somewhere in the code, and when the condition is satisfied, call unlock_achievement(target)

Above methods probably require modifying native files, which cannot be done cleanly in a mod unless you get creative about it.
[close]

3) Add the new trait to the trait list if the achievement is unlocked
Spoiler
Traits are also stored in a list, in fact in three separate lists (gold_traits, pos_traits and neg_traits). You can pick one (probably gold_traits or pos_traits) and append your overpowered trait to it. Similarly to achievements, you also want to update the trait_dict dictionary: trait_dict[trait.name] = trait
In order to do it at the right time, you can either place it right after the above-mentioned 'unlock_achievement(target)' line, or edit the 'unlock_achievement()' function or the Achievement() class 'unlock()' method themselves.

But it is not all. Achievements are persistent, while the above trait lists are regenerated at init time. If you want your new traits to remain on a new game (you probably do), you also need to add a check when the trait list is created (somewhere in the 'init_trait()' function is probably the best place). You can use the technique neronero mentioned and check for the activation of your achievement likeso: if persistent.achievements[target]:
    [...]
[close]

Here is a complete recap (as you can see it is not such a walk in the park):
Spoiler
#### Use this code in your mod's rpy file

## Create achievement at init
init python:
    my_achievement = Achievement(target="overpowered") # Check the Achievement class for the complete list of arguments

    achievement_list.append(my_achievement)
    achievement_dict["overpowered"] = my_achievement

##########################################

#### Use this code somewhere in the code where you want your achievement check to happen (in native or mod .rpy)

python:
    ## Unlock achievement if condition is reached
    if condition: # Replace 'condition' with any logic test
        unlock_achievement("overpowered")
        my_trait = Trait(...) # Check the Trait class for the complete list of arguments
        pos_traits.append(my_trait)
        trait_dict[my_trait.name] = my_trait

##########################################

#### Use this code at the end of the 'init_traits()' function in BKtraits.rpy

python:
    ## Update trait list if achievement is reached
    if persistent.achievements["overpowered"]:
        my_trait = Trait(...) # Check the Trait class for the complete list of arguments
        pos_traits.append(my_trait)
        trait_dict[my_trait.name] = my_trait

##########################################
[close]

This is the general idea, I haven't tested any of this. Hopefully enough to put you on the right track.
Maker of BK. Looking for the latest patch for BK 0.2? The link doesn't change, so bookmark it!