BS by the way, it isn't more powerful and only maybe more complicated.
I apologize, Pytherworld's job scripts are indeed less powerful than PyTFalls approach since they can only manipulate those parts of the game the game exposes to them. Just remember, with great power comes great responsibility.
Note that for all that code you have 6 possible outcomes in a game where there are no traits, no social status and you simply add stats into a single variable to check against that, limiting options for responses.
6 possible outcomes of job descriptions, that's true. The main purpose of this job script is to modify the girl's stats based on what she did and how well she did it. Also the customer has a little influence on the outcome. That code was never meant to produce a large variety of job description outcomes. Instead, it produces a large variety of stat increases, so you don't know exactly what a girl will learn during one job.
Pytherworld does have social status, implemented via social game classes, but it's not used much currently.
Pytherworld does not have traits, but I don't see the need for them currently, although they are easy to add. Matching images to how girls look is accomplished via Pytherworlds intricate tagging system. In that context, your trait and my tag are pretty much the same - a keyword describing looks.
I checked against a single added number because I chose too. However, doing stuff like the following is perfectly possible too. It's just Python code, after all.
if (char.has_class("stripper") or
char.charisma > 75 and char.happiness> 75) or
char.dancing > 75):
As for power there is not one damn thing you can swing with that approach that cannot be done with strip method of Brothel class
Well, what about moddability ;-)
There's also readability, ease of debugging and maintaining the code, but that's just future me being lazy I suppose.
I expect that there is a lot less control over the content of those texts in PW than in PytFall.
You are right. I never put work into the descriptions so far, I just load them from Otherworlds XML and display them. Currently, there is no control over the contents at all, except for statically editing the XML files of course.
As opposed to:
"chr.mod('fatigue', 2) or chr.fatigue += 2"?
Yes. Calling the mod method can achieve the same things but is not as easy to understand, read, and write.
Adding 2 to the fatigue attribute can not check if this would raise the attribute above it's maximum, or do anything else that needs to be done if this attribute changes, unless you modify the __setattr__ method of chr's type (or you turn fatigue into a property, but don't do that, I've been there and it wasn't pretty).