News:

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

Former www.henthighschool.com

v0.3 Test Version (April 2025 Update)

Started by Goldo, Aug 25, 2024, 10:58 PM

Previous topic - Next topic

vadi92

Quote from: Jman on Mar 02, 2025, 03:57 PMAlso, neronero is currently not putting up any resistance and you're on a roll, so +64 posts seems quite doable. Wonder if something's happened to the rat hamster?

Maybe some IRL issue idk. Or he simply vanished just like Leortha and DoughTheC. Well it has been quite awhile since he last loged in.

Jman

#421
Leortha's actually been logged in more recently than when neronero's last posted.

I hope nero didn't pull a Zythen. :(
And with strange aeons even death may die...

vadi92

Quote from: Jman on Mar 02, 2025, 05:30 PMLeortha's actually been logged in more recently than when neronero's last posted.

I hope nero didn't pull a Zythen. :(

Let's hope he will be like you. Gone 'MIA' for awhile but came back like nothing happened.

PANDA129

[code]
I'm sorry, but an uncaught exception occurred.

While running game code:
  File "game/BKendday.rpy", line 931, in script
    python:
  File "game/BKendday.rpy", line 951, in <module>
    farm_events += farm.programs[girl].resolve("training")
  File "game/BKfarm.rpy", line 544, in resolve
    change_log = self.apply_changes(girl, changes)
  File "game/BKfarm.rpy", line 984, in apply_changes
    mojo_color = green  # Default color, adjust as needed
NameError: name 'green' is not defined

-- Full Traceback ------------------------------------------------------------

Full traceback:
  File "game/BKendday.rpy", line 931, in script
    python:
  File "E:\Downloads\Brothel_King-pc\renpy\ast.py", line 823, in execute
    renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store)
  File "E:\Downloads\Brothel_King-pc\renpy\python.py", line 1178, in py_exec_bytecode
    exec(bytecode, globals, locals)
  File "game/BKendday.rpy", line 951, in <module>
    farm_events += farm.programs[girl].resolve("training")
  File "game/BKfarm.rpy", line 544, in resolve
    change_log = self.apply_changes(girl, changes)
  File "game/BKfarm.rpy", line 984, in apply_changes
    mojo_color = green  # Default color, adjust as needed
NameError: name 'green' is not defined

Windows-10-10.0.19041 AMD64
Ren'Py 8.2.0.24012702
Bro King 0.3t v250203
Tue Mar 18 19:59:23 2025
[/code]

When unlock the farm mojo system , each beginning will send this error code. It can be ignored , i don't know whether it is because of  Chinese translation. But I still try to fix it .

In BK farm.rpy I add "mojo_color = c_lightprune"


        def apply_changes(self, girl, changes):
            mojo_color = c_lightprune  # Default color, adjust as needed
            change_log = NightChangeLog(girl.fullname)

            for stat, chg in changes.items():

                # Generates mojo
                if stat == "fear":
                    if self.target == "no training":
                        mojo_color = rand_choice(mojo_act_dict[self.holding])
                    elif self.act:
                        mojo_color = rand_choice(mojo_act_dict[self.act])

                    changes[stat] = girl.change_fear(chg*reverse_if(girl.get_effect("boost", "farm fear generation"), chg), mojo_color=mojo_color)

                    if changes[stat] >= 1:
                        change_log.add("{image=img_fear}" * min(3, round_int(changes[stat]/2))) # Adds one to three fear icons

                else:
                    changes[stat] = girl.change_stat(stat, chg)

                if stat not in ("mood", "fear", "love"):
                    change_log.add("%s: %i/%i (%s)" % (__(girl_related_dict[stat.capitalize()]), girl.get_stat(stat), girl.get_stat_max(stat), plus_text(changes[stat], color_scheme="standard")))

            return change_log



Jman

#424
It seems that the group sex tip bonus is displayed incorrectly:
            # Group sex
            if act in all_sex_acts and len(customers) > 1:
                tip_multiplier *= tip_act_modifier["group bonus"] * len(customers) #? As diff already increases base tip for groups, this might be too much of an advantage
                gold_ttip += "\nGroup bonus: x%s" % percent_text(tip_act_modifier["naked bonus"] * self.get_effect("boost", "naked bonus"), False)

Looks like too much copy and not enough paste. :P



Incidentally, this also seems to penalise group sex quite heavily due to the x5 multiplier cap. As if gangbanging needed even more nerfs... :'(



Also, 'laid' gets counted twice for results above 'good', which is fine and dandy until you get 2/1 'customers served'.


Edit: It looks like a girl who gets her energy zeroed in the job phase can still go on to provide 'extra service' to customers. I don't think they even suffer any penalty from it?
And with strange aeons even death may die...

Jman

#425
Double post, I guess, but this is kinda important. It appears that 'tip_act_modifier' no longer scales tips, but is now used to scale customer budgets instead.

This invalidates the most important part of Job Mod and makes balancing it impossible.

Unless a solution is found, Job Mod is dead for the time being.
And with strange aeons even death may die...

GoldoTopic starter

I guess I didn't include it in the get_tip() formula since the tip_modifier for jobs in vanilla is always 1.0, but it would be trivial to add it to the calculation if needed.
Maker of BK. Looking for the latest patch for BK 0.2? The link doesn't change, so bookmark it!

Jman

#427
It is very much needed, and used to be there before all the refactoring.

But since this number now serves another purpose (budget scaling), I'm not sure just adding it back is 100% okay. Personally, I'd make a new set of variables for budget use, and return this modifier to where it used to be (see here for how I'm temporarily working around this).



Edit: I've found another issue:
            #<Chris Job Mod: Bonus/Malus from Entertainment Score>
            if game.has_active_mod("chrisjobmod"):
                sex_act_bonus += ((cust.entertainment_score - entertainment_neutral_score) * entertainment_bonus_strength)
                ttip += "\nJob Mod modifier: %s" % plus_text((cust.entertainment_score - entertainment_neutral_score) * entertainment_bonus_strength)
            #</Chris Job Mod>

During group/bi sex, the 'cust' in there getting serviced isn't actually required to be one of the customers and is probably someone from another act or even earlier night.



Edit2: So what I really want to have some semblace of balance in Job Mod is these three things, or some equivalent thereof:
            # Sanity check: final tip_multiplier cannot go below 10% or above 500%
            if tip_multiplier > 5.0:
                gold_ttip += "\n{i}Total modifier cannot exceed x5.0{/i}"
            tip_multiplier = min(5.0, max(0.1, tip_multiplier))

            tip *= tip_multiplier

################ NEW CODE #########################################################
            act_modif = tip_act_modifier[act]
            if act_modif != 1.0:
                tip *= act_modif
                gold_ttip += "\nAct modifier: x%s" % str(int(act_modif * 100)) + "%"
################ END OF NEW CODE ##################################################

            #<Chris Job Mod>
            if game.has_active_mod("chrisjobmod") and act in all_jobs:
                tip /= act_max_customers_modifier[self.job]
                gold_ttip += "\nJob Mod modifier: x%s" % percent_text(1.0/act_max_customers_modifier[self.job], False)
            #</Chris Job Mod>
            #<Chris Job Mod: Bonus/Malus from Entertainment Score>
            if game.has_active_mod("chrisjobmod"):
                cust_avg_entertainment_score = round_int((sum((c.entertainment_score) for c in customers )) / (len(customers)*1.0) )
                sex_act_bonus += ((cust_avg_entertainment_score - entertainment_neutral_score) * entertainment_bonus_strength)
                ttip += "\nJob Mod modifier: %s" % plus_text((cust_avg_entertainment_score - entertainment_neutral_score) * entertainment_bonus_strength)
            #</Chris Job Mod>
        def get_sex_act_bonus(self, bis=False, group=False):
            r = self.get_effect("change", "whore satisfaction") + self.get_effect("change", "satisfaction")

            # Customers that haven't been entertained first get an additional penalty
            if not self.got_entertainment:
                r -= self.rank - 1

            # Customers will not complain about the sex act during group or bisexual
            if bis or group:
                self.service_dict["extra"] = 1
            elif self.wants_sex_act != self.got_sex_act:
                r -= self.rank - 1

################ NEW CODE #########################################################
            if group:
                r -= self.rank//2 + 1
################ END OF NEW CODE ##################################################

            return r
And with strange aeons even death may die...

GoldoTopic starter

I don't understand fully your snippets 1 and 3.

Shouldn't your act modifier apply at stage 2, like the naked or group modifiers, to keep under the x5 limit?
And what does the change to group satisfaction do?
Maker of BK. Looking for the latest patch for BK 0.2? The link doesn't change, so bookmark it!

Jman

#429
The act modifier should not go under the x5 limit, since it's always (or at least in the Job Mod) less than one and thus would actually work against said limit. It's basically a counter to the 'Job Mod' customer number multiplier, which is not counted under the x5 limit either.


The group satisfaction change makes it so that group sex is a lower-rank customer thing and bisexual is more of an aristocrat attraction, by always giving a rank-dependant malus per extra customer. I guess it should go behind some sort of extra flag or variable, otherwise it'd change vanilla where group is more niche.


Group modifier going under the x5 limit isn't something I like too much, either, but I think together with the other changes it can work as an additional 'cap group to low levels' thing.



Edit: It appears that sensitivity bonus is not shown under the 'Skill modifier' line in the nightly event reports.



Edit2: This line nullifies group and bisexual bonuses if they were applied before:
sex_act_bonus = base_sex_act_bonus + sum(g.get_effect("increase satisfaction", "all sex acts") for g in girls) + sum(g.get_effect("increase satisfaction", act) for g in girls)
Should be '+=' instead of '='. It also produces double lines of 'Perks and special effects'.
And with strange aeons even death may die...

Cantsleep25

It's been a while since I last touched Brothel King and I've been rather surprised by the fact there is a test version for 0.3 now. I honestly thought this game would be in permanent limbo forever, but am glad to see it is still receiving support.

I wished to inquire about what folks might recommend I do if I wish to get back into the game. I understand the current version is a test version, but is it at a point where it would be recommended over 0.2?

Or should I—if I were to download the game again—stick with 0.2.

I'd also like to try my hand out at the deeper customizations of girl packs as well, as when I last touched the game AI and the like were in their infancy. I'm pretty decent with Stable Diffusion and would like to not only make my own girl packs but also custom events and whatnot since I'm learning to code with Python rn.

I bring this up as I am willing to sacrifice a few crashes now and then for a more robust experience.

Jman

#431
I would recommend 0.3. There's a bunch of new stuff, both story and game mechanics, and I don't think 0.3 is appreciably less stable than 0.2 now. Most crashes I've seen come from either problematic girlpacks or people forgetting to use the update on top of base 0.3.


There are some more subtle problems (see my posts just above) and the story for chapter 3 isn't complete yet. But it's not as if 0.2 was completely bug-free, either.

More pack makers who make full use of the customisation system are always welcome. :)
And with strange aeons even death may die...

nemojason

Ayant tester le jeu plusieurs fois après des traductions LOONGUEsS et laborieuses xd, j'ai eut un gros problème avec les succés, et après quelques recherches: il faudrait ajouté cette ligne pour éviter le crash avec l'activation et désactivation avec le mod "Traits King", en fait le jeu conservais en mémoire "refinement" un mot clé du mod traits kings  et lorsque je démarrais une nouvelle partie en désactivant le mod, j'avais chaque fois un message d'erreur. Après quelques temps passés à rechercher sur le net : il faut rajouté ceci à la ligne 277 de BKachievements.rpy:

    def test_achievements(target_list):
        r = []
        for target in target_list:
            if target in achievement_dict and achievement_dict[target].test(): #modification personnel pour éviter crash avec trait king
                r.append(achievement_dict[target])
                memorize_achievement(target)

Du coup, maintenant je ne plante plus quand je fais des nouvelles parties avec ou sans le mod Trait King.


Jman

I don't understand. Trait King does nothing with achievements on its own, and 'Refinement' is already a base game key for 'achievement_dict' (but 'refinement' is not!).

I tried both starting the game, disabling TK (and F&F) and then going for a new game, and disabling TK, restarting and a new game... no crash except for some complaining about TK-specific traits in some girl pack.

Maybe it has something to do with me already having a mid-grade achievement for 'Refinement', but still, achievements should have been initialised from the start.


Honestly, I suspect this might have something to do with your French translation rather than TK.
And with strange aeons even death may die...

nemojason

#434
Quote from: Jman on Apr 06, 2025, 10:45 AMI don't understand. Trait King does nothing with achievements on its own, and 'Refinement' is already a base game key for 'achievement_dict' (but 'refinement' is not!).

I tried both starting the game, disabling TK (and F&F) and then going for a new game, and disabling TK, restarting and a new game... no crash except for some complaining about TK-specific traits in some girl pack.

Maybe it has something to do with me already having a mid-grade achievement for 'Refinement', but still, achievements should have been initialised from the start.


Honestly, I suspect this might have something to do with your French translation rather than TK.
i said it, it s during my test during i translate the game that i obtain this error not without do nothing to the game, it s when u do some changes with translation with the mod than i obtain the error.... do the test : translate into french : BKachievement.ini + BKchapter1 +BKstart.ini

and for refinement look in the code of trait of TK mod better, you are wrong about refinement :

    Ligne  398:                 Trait("Princess", verb = "be a", effects=[Effect("boost", "prestige", 1.0, scales_with = "rank"), Effect("boost", "job customer budget", 1.0), Effect("boost", "whore customer budget", 1.0), Effect("change", "[b]refinement[/b]", 15, scales_with = "rank"), Effect("boost", "upkeep", 4.0), Effect("change", "job obedience target", 80), Effect("change", "whore obedience target", 200), Effect("change", "train obedience target", 50), Effect("personality", "princess"), Effect("gain", "reputation", 100), Effect("change", "valuation", +1000)], archetype="The Courtesan", base_description = "They say she has royal blood flowing through her veins."),
    Ligne  399:                 Trait("Royal concubine", verb = "be a", effects=[Effect("boost", "prestige", 1), Effect("boost", [b]"refinement[/b] gains", 0.5), Effect("change", "whore obedience target", -50), Effect("change", "train obedience target", -50), Effect("boost", "tip", 0.25), Effect("boost", "upkeep", 1.0), Effect("gain", "reputation", 25), Effect("change", "valuation", +250)], archetype="The Courtesan", base_description = "Rumour has it she once served as one of the King's concubines."),
    Ligne  462:                 Trait("Enchanting", verb="be", effects=[Effect("increase satisfaction", "geisha", 1), Effect("gain", "reputation", 25), Effect("change", "refinement", 10), Effect("change", "valuation", +50)], archetype="The Fox", base_description = "She carries a captivating aura with her."),
    Ligne  494:                 Trait("Erudite", verb = "be", effects=[Effect("change", "refinement", 30), Effect("boost", "class results", 0.5), Effect("boost", "xp gains", 0.5)], archetype="The Courtesan", base_description = "She is cultured and well-educated."),
    Ligne  554:                 Trait("Groomed", verb="be", effects = [Effect("change", [b]"refinement"[/b], 5, scales_with = "rank"), Effect("change", "all main skills", 10), Effect("gain", "reputation", 10), Effect("change", "valuation", +40)], opposite = "Uncouth", archetype="The Courtesan", base_description = "She has been educated in mannerisms befitting a Lady of the Court."),
    Ligne  574:                 Trait("Feminine", verb = "be", eff1 = Effect("change", "[b]refinement[/b]", 5, scales_with = "rank"), eff2 = Effect("gain", "reputation", 5), archetype="The Model", base_description = "She is characteristically female."),
    Ligne  583:                 Trait("Graceful", verb = "be", eff1 = Effect("change", "[b]refinement[/b]", 5, scales_with = "rank"), eff2 = Effect("gain", "reputation", 10), eff3=Effect("change", "valuation", +30), archetype="The Courtesan", base_description = "She moves with grace, like a princess."),
    Ligne  621:                 Trait("Polite", verb = "be", eff1 = Effect("change", "refinement", 20), eff2 = Effect("gain", "reputation", 5), archetype="The Courtesan", base_description = "She has great manners."),
    Ligne  628:                 Trait("Elegant", verb = "be", eff1 = Effect("boost", "refinement gains", 1.0), eff2 = Effect("gain", "reputation", 10), eff3=Effect("change", "valuation", +40), archetype="The Courtesan", base_description = "She moves with grace."), 
    Ligne  642:                 Trait("Soft skin", verb = "have", eff1 = Effect("change", "beauty", 10), eff2 = Effect("change", "refinement", 10), archetype="The Courtesan", base_description = "She has unblemished skin."),
    Ligne  702:                 Trait("Rude", verb = "be", eff1 = Effect("change", "refinement", -10, scales_with = "rank"), opposite = "Polite", base_description = "She can be very impolite."),
    Ligne  711:                 Trait("Vulgar", verb = "be", eff1 = Effect("boost", "refinement gains", -0.5), opposite = "Elegant", base_description = "She can swear like a sailor."),
    Ligne  773:                 Trait("Uncouth", verb="be", eff1=Effect("change", "refinement", -40), eff2= Effect("boost", "reputation gains", -0.1), opposite = "Groomed", base_description = "She has absolutely no manners."),
    Ligne 1318:                 "Mean" : Trait("Reserved", verb = "be", eff1 = Effect("change", "charm", -5, scales_with = "rank"), eff2 = Effect("change", "refinement", 10), base_description = "She has a mean streak, but tries not to speak her mind whenever it is filled with negativity.", public=False),
    Ligne 1321:                 "Rude" : Trait("Raw", verb = "be", eff1 = Effect("change", "refinement", -5, scales_with = "rank"), base_description = "She tries to be considerate, despite her uncultured origins.", public=False),
    Ligne 1326:                 "Uncouth" : Trait("Primitive", verb="be", eff1=Effect("change", "refinement", -20), opposite = "Groomed", base_description = "She lacks basic manners, but has good intentions.", public=False),
    Ligne 1331:                 "Vulgar" : Trait("Honest", verb = "be", eff1 = Effect("boost", "refinement gains", -0.25), eff2 = Effect("change", "libido", 10), opposite = "Elegant", base_description = "She freely speaks her mind without mincing words.", public=False),
    Ligne 1332:                 "Tame" : Trait("Restrained", verb = "be", eff1 = Effect("boost", "libido gains", -0.25), eff2=Effect("change", "[b]refinement[/b]", 10), opposite = "Slutty", base_description = "She is well-behaved.", public=False),
    Ligne 1335:                 "Distrustful" : Trait("Independent", verb = "be", eff1 = Effect("boost", "love gains", -0.25), eff2 = Effect("change", "refinement", 10), opposite = "Loyal", base_description = "She's an independent and reliable girl.", public=False),
    Ligne 1339:                 "Prude" : Trait("Behaved", verb = "be", eff1 = Effect("boost", "service jp gains", -0.25), eff2 = Effect("boost", "sex jp gains", -0.25), eff3=Effect("change", "refinement", 10), opposite = "Naughty", base_description = "She does not like meaningless sex and prefers to build a connection first.", public=False),
    Ligne 1341:                 "Square" : Trait("Traditional", verb = "be", eff1 = Effect("change", "sex act requirements", 20), eff2=Effect("change", "refinement", 10), opposite = "Pervert", base_description = "She prefers to do things by the book.", public=False),
    Ligne 1352:                 "Lazy" : Trait("Peaceful", verb = "be", eff1 = Effect("boost", "max energy", -0.1), eff2 = Effect("change", "refinement", 10), opposite = ["Energetic", "Driven"], base_description = "She is serene and carefree.", public=False),
    Ligne 1357:                 "Cold" : Trait("Cool", verb = "be", eff1 = Effect("change", "refinement", -10, scales_with = "rank"), eff2 = Effect("boost", "tiredness", -0.1), base_description = "She knows how to hold her nerve.", public=False),
    Ligne 1364:                 "City girl" : Trait("Cosmopolitan", verb="be a", eff1=Effect("boost", "farm preference increase", -1.0), eff2=Effect("change", "valuation", +60), eff3 = Effect("change", "refinement", 20), archetype="The Escort", base_description = "She is a cultured soul who thrives in the city, but would despise living in the countryside.", public=False),
    Ligne 1408:         housebroken_trait = trait_dict["Housebroken"] = Trait("Housebroken", verb="be", effects = [Effect("change", "job obedience target", -10), Effect("change", "whore obedience target", -10), Effect("change", "refinement", -10, scales_with = "rank")], base_description = "She lost her virginity in a brothel with a customer. This is all she knows.")
.....

I think that i get this error beacuse i do the mistake to translate into french "refinement" into "raffinement", but i change my mind after because i understand it s not a good idea to translate this word because it s a variable...and then even after correcting it, I kept getting this error when making new games. The line of code permit to verify the change in achievement_dict or target_list and avoid crash