Ren'Py Brothel King [v0.2] [Goldo]

4.60 star(s) 46 Votes

Jman9

Engaged Member
Jul 17, 2019
2,295
958
I haven't looked into this, but unless it's a new bug introduced with the latest changes, I'd imagine we'd need a save to try and troubleshoot this.
 

Minxin

New Member
Apr 4, 2022
4
1
I'd like to ask a rather silly question.
I am working on the Chinese translation.

Code:
add_dialogue("exhausted", "generic", "Sorry Master, I am still exhausted and need more rest.  I will go back to work as a {b}[girl.job]{/b} after I recover.")
How does [girl.job] in this translate to it?

This is the way I have translated it elsewhere. Use 'girl_related_dict[]' to translate it.
Code:
resting_text += "\n{color=[c_emerald]}她现在已经完全康复,可以回去" + girl_related_dict[self.job] + "继续工作了。{/color}"

log.add_report(girl.fullname + "今天的工作是" + girl_related_dict[girl.job] + "。")
Maybe that's a silly question.
 
Last edited:
  • Like
Reactions: __neronero

DougTheC

Member
Oct 15, 2018
386
218
I'd like to ask a rather silly question.
I am working on the Chinese translation.

Code:
add_dialogue("exhausted", "generic", "Sorry Master, I am still exhausted and need more rest.  I will go back to work as a {b}[girl.job]{/b} after I recover.")
How does [girl.job] in this translate to it?

This is the way I have translated it elsewhere. Use 'girl_related_dict[]' to translate it.
Code:
resting_text += "\n{color=[c_emerald]}她现在已经完全康复,可以回去" + girl_related_dict[self.job] + "继续工作了。{/color}"

log.add_report(girl.fullname + "今天的工作是" + girl_related_dict[girl.job] + "。")
Maybe that's a silly question.
Good question.

One way is probably to translate it when it is stored into girl.job (self.job when used in Girl class operations, like def set_job() ).

Then the substitution/interpolation of [girl.job] should happen when it is used in a Ren'Py "say" statement. It needs to be a simple use of a variable or object attribute/property, so using your created dict like [girl_related_dict[girl.job]] will not work.

This does mean that compare operations like the following will have to be changed to compare to the translated value:

(in set_job(), and
Code:
 if job == "whore" or (job in all_jobs and self.work_whore):
But, since this string is also used as a key in other code, like
BKfunctions.rpy
Code:
and_tags += perform_job_dict[girl.job + "_tags"]
maybe a better way is to add a field like girl.job_tr for the translated value, and use it in the strings for the say statements. Make sure it is set to a zero-length string in the Girl class __init__() process.
 
Last edited:

Minxin

New Member
Apr 4, 2022
4
1
Good question.

One way is probably to translate it when it is stored into girl.job (self.job when used in Girl class operations, like def set_job() ).

Then the substitution/interpolation of [girl.job] should happen when it is used in a Ren'Py "say" statement. It needs to be a simple use of a variable or object attribute/property, so using your created dict like [girl_related_dict[girl.job]] will not work.

This does mean that compare operations like the following will have to be changed to compare to the translated value:

(in set_job(), and
Code:
 if job == "whore" or (job in all_jobs and self.work_whore):
But, since this string is also used as a key in other code, like
BKfunctions.rpy
Code:
and_tags += perform_job_dict[girl.job + "_tags"]
maybe a better way is to add a field like girl.job_tr for the translated value, and use it in the strings for the say statements. Make sure it is set to a zero-length string in the Girl class __init__() process.
Thank you~
After I posted this question earlier, I went and asked Never Crash, who was working with me on the translation.

The solution he proposes is this:
Code:
if isinstance(char, Girl):
        $ char.job_cn = girl_related_dict[char.job]
Then change all the girl.jobs to girl.jobs_cn.

I think it should be fine for now.
 
Last edited:

DougTheC

Member
Oct 15, 2018
386
218
Thank you~
After I posted this question earlier, I went and asked Never Crash, who was working with me on the translation.

The solution he proposes is this:
Code:
if isinstance(char, Girl):
        $ char.job_cn = girl_related_dict[char.job]
Then change all the girl.jobs to girl.jobs_cn.

I think it should be fine for now.
I don't know where you are using this code to be needing "isinstance(char, Girl)". I would set girl.job_cn after any line that sets girl.job. Using girl_related_dict should work.

As mentioned, be sure to set the default in Girls class __init__() with
self.job_cn = ""

You should look at the parts of code that uses girl.job as a key value, and see if you want to change or leave untranslated as girl.job the parts not visible to the user (the "behind the scenes" like filming a movie).
An example is perform_job_dict in BKfunctions.rpy, where the key/index could be translated or not, but the dict values for tags should remain unchanged to match the tags in existing girl pack filenames.

You should be OK changing all [girl.job] in quotes that will be said by girls, to [girl.job_cn]. The following would not change unless you separately translate the related variables:

BKendday.rpy
for act in [girl.job] + all_sex_acts:

BKhelp.rpy
girl_stats[girl][day][girl.job] += 1

BKfunctions.rpy
text1 = "{size=18}A horny customer started undressing in the middle of the " + job_room_dict[girl.job] + ". He dared %s to do the same." % girl.name

BKscreens.rpy
$ text_col = job_color[girl.job]

$ col = job_color[girl.job]

$ job_customers[girl.job] += 1
 
Last edited:

gully324

New Member
Aug 15, 2021
2
0
Hi, is there a way to make all the girls in the slave market spawn on Rank C and Level 1, even when you are in the later stages of the game ?
 

Jman9

Engaged Member
Jul 17, 2019
2,295
958
The Headhunter? Not sure I actually checked this works for vanilla, though...
 

Minxin

New Member
Apr 4, 2022
4
1
I don't know where you are using this code to be needing "isinstance(char, Girl)". I would set girl.job_cn after any line that sets girl.job. Using girl_related_dict should work.

As mentioned, be sure to set the default in Girls class __init__() with
self.job_cn = ""

You should look at the parts of code that uses girl.job as a key value, and see if you want to change or leave untranslated as girl.job the parts not visible to the user (the "behind the scenes" like filming a movie).
An example is perform_job_dict in BKfunctions.rpy, where the key/index could be translated or not, but the dict values for tags should remain unchanged to match the tags in existing girl pack filenames.

You should be OK changing all [girl.job] in quotes that will be said by girls, to [girl.job_cn]. The following would not change unless you separately translate the related variables:

BKendday.rpy
for act in [girl.job] + all_sex_acts:

BKhelp.rpy
girl_stats[girl][day][girl.job] += 1

BKfunctions.rpy
text1 = "{size=18}A horny customer started undressing in the middle of the " + job_room_dict[girl.job] + ". He dared %s to do the same." % girl.name

BKscreens.rpy
$ text_col = job_color[girl.job]

$ col = job_color[girl.job]

$ job_customers[girl.job] += 1
Thanks~
I will refer to it.
 

__neronero

Member
Jan 23, 2021
285
392
So I'll give it until the end of April. Then I'll have to start looking for an alternative home for BK. Sucks that a lot of content would get lost that way (especially the looong explanation I did on the lore and events - I foolishly didn't back it up).
We'll have to create a list of things to (attempt to) recover if it comes to that. I recently searched through google's cache to list a few important links.

As for the lore, you're in luck: .
 
Jul 21, 2020
43
119
We'll have to create a list of things to (attempt to) recover if it comes to that. I recently searched through google's cache to list a few important links.

As for the lore, you're in luck: .
Would you happen to have a link to the Community dialogue project spreadsheet by any chance?

I always used to go there from the forum with my VPN on, so I don’t have a link to the address in my browser history.

- Hareb

EDIT: oops, sorry, just noticed it was in the links.

Nothing to see here: move on :cautious:
 

goldo00

Newbie
Aug 9, 2019
20
59
Hi, is there a way to make all the girls in the slave market spawn on Rank C and Level 1, even when you are in the later stages of the game ?
There is, if you're willing to get your hands a bit dirty and edit the code.

Locate this part of BKfunctions.rpy around line 496 (you can use a code editor or simply wordpad):
Python:
    def update_slaves():

        nb = dice(6)+5

        slavemarket.girls = [] # Empties slavemarket to get another chance at generating an original girl
        slavemarket.girls = get_girls(nb)
Change it to:
Python:
    def update_slaves():

        nb = dice(6)+5

        slavemarket.girls = [] # Empties slavemarket to get another chance at generating an original girl
        slavemarket.girls = get_girls(nb, level_range=[1, 1])
 

goldo00

Newbie
Aug 9, 2019
20
59
Unfortunately the HHS website has mysteriously disappeared and no one can get in contact with the host. For now there's not much we can do but wait. We're hoping that things return to normal around April 23rd at the latest (that's when the registrar will send the host an automatic reminder to renew the domain)
I've gathered some links below.

Brothel King:
+

Useful links:



Mods:



For modders & pack creators:

+
Do you also have the link to the remade base girl pack?
 

duleshna

New Member
Jul 19, 2017
6
6
Code:
I'm sorry, but an uncaught exception occurred.

While running game code:
  File "game/BKmain.rpy", line 1121, in script
    $ result = ui.interact()
  File "game/BKmain.rpy", line 1121, in <module>
    $ result = ui.interact()
  File "game/BKscreens.rpy", line 4555, in execute
    screen tool(x, y, w, h, bg = True):
  File "game/BKscreens.rpy", line 4555, in execute
    screen tool(x, y, w, h, bg = True):
  File "game/BKscreens.rpy", line 4569, in execute
    if text1:
  File "game/BKscreens.rpy", line 4570, in execute
    frame:
  File "game/BKscreens.rpy", line 4601, in execute
    text text1 yalign 0.0 size s justify True
AttributeError: 'NoneType' object has no attribute 'fullname'

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

Full traceback:
  File "game/BKmain.rpy", line 1121, in script
    $ result = ui.interact()
  File "renpy/ast.py", line 928, in execute
    renpy.python.py_exec_bytecode(self.code.bytecode, self.hide, store=self.store)
  File "renpy/python.py", line 2245, in py_exec_bytecode
    exec(bytecode, globals, locals)
  File "game/BKmain.rpy", line 1121, in <module>
    $ result = ui.interact()
  File "renpy/ui.py", line 298, in interact
    rv = renpy.game.interface.interact(roll_forward=roll_forward, **kwargs)
  File "renpy/display/core.py", line 3325, in interact
    repeat, rv = self.interact_core(preloads=preloads, trans_pause=trans_pause, pause=pause, pause_start=pause_start, **kwargs)
  File "renpy/display/core.py", line 3737, in interact_core
    root_widget.visit_all(lambda i : i.per_interact())
  File "renpy/display/core.py", line 568, in visit_all
    d.visit_all(callback, seen)
  File "renpy/display/core.py", line 568, in visit_all
    d.visit_all(callback, seen)
  File "renpy/display/core.py", line 568, in visit_all
    d.visit_all(callback, seen)
  File "renpy/display/screen.py", line 436, in visit_all
    callback(self)
  File "renpy/display/core.py", line 3737, in <lambda>
    root_widget.visit_all(lambda i : i.per_interact())
  File "renpy/display/screen.py", line 447, in per_interact
    self.update()
  File "renpy/display/screen.py", line 637, in update
    self.screen.function(**self.scope)
  File "game/BKscreens.rpy", line 4555, in execute
    screen tool(x, y, w, h, bg = True):
  File "game/BKscreens.rpy", line 4555, in execute
    screen tool(x, y, w, h, bg = True):
  File "game/BKscreens.rpy", line 4569, in execute
    if text1:
  File "game/BKscreens.rpy", line 4570, in execute
    frame:
  File "game/BKscreens.rpy", line 4601, in execute
    text text1 yalign 0.0 size s justify True
  File "renpy/text/text.py", line 1574, in __init__
    self.set_text(text, scope, substitute)
  File "renpy/text/text.py", line 1693, in set_text
    i, did_sub = renpy.substitutions.substitute(i, scope, substitute)
  File "renpy/substitutions.py", line 270, in substitute
    s = formatter.vformat(s, (), kwargs)
  File "/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python2.7/string.py", line 563, in vformat
  File "/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python2.7/string.py", line 585, in _vformat
  File "/home/tom/ab/renpy-build/tmp/install.linux-x86_64/lib/python2.7/string.py", line 652, in get_field
AttributeError: 'NoneType' object has no attribute 'fullname'

Windows-10-10.0.19041
Ren'Py 7.4.11.2266
Brothel King 0.2 v220407
Thu Apr 14 13:15:31 2022
 
4.60 star(s) 46 Votes