phupdup

Well-Known Member
Oct 24, 2019
1,391
1,114
Why are Alexia and Rowan being forced into stovepipe paths that seem to force them to choose either Jezera or Andras for their mode of corruption? Also why does Alexia have to be on the verge of dumping Rowan before the more hardcore events get triggered for sex? For example we have the follwing event triggers for Alexia corruption that test for relationship, obedience and whether one has more influence than the other before triggering. The "powerless" event is the gatekeeper for Alexia eventually having sex with Andras.

Code:
./events/alexia_corruption2.rpy:    event('powerless', triggers='week_end', conditions=('all_actors["alexia"].flags["andras_influence"] > 5','all_actors["alexia"].relation < 50', 'alexiaJezObedient == False', 'all_actors["alexia"].flags["andras_influence"] >= all_actors["alexia"].flags["jezera_influence"]',), depends=('alexia_med_corruption',), run_count=1, priority=pr_story)

./events/alexia_corruption.rpy:    event('in_her_hands', triggers='week_end', conditions=('all_actors["alexia"].flags["jezera_influence"] > 5','all_actors["alexia"].relation < 50', 'alexiaAndrasObedient == False', 'all_actors["alexia"].flags["jezera_influence"] > all_actors["alexia"].flags["andras_influence"]',), depends=('alexia_med_corruption',), run_count=1, priority=pr_story)
At the very beginning in the prologue, Rowan is forced to choose to have sex with either Jezera or Andras if he has sex at all. That choice sets mutually exclusive flags andrasIntroSex and jezeraIntroSex. Why can't there be an option for a threeway where Rowan gets his backdoor broken in by Andras while going down on Jezera up front?

Rowan has an option to go along with the twins for now while keeping the option of turning the tables on them later on the back burner. He has dialog with Alexia suggesting she go along with their advances as well in order to gain influence and intel. If the two are going to form a proper Peoples Front of Rosaria, they should be able to go after both of the twins together at the same time while learning the joys of a proper swinger lifestyle. Our favorite succubus stayed out of the last war for their own reasons and probably thinks that the twins would be setting up for another epic fail if it wasn't for her favorite couple experiment. Perhaps following her route would set up a proper chaotic neutral endgame much like a siding with Werden in Rastadel hints at a Lawful neutral ending.
 

nighlur

Newbie
May 18, 2019
23
23
Why are Alexia and Rowan being forced into stovepipe paths that seem to force them to choose either Jezera or Andras for their mode of corruption? Also why does Alexia have to be on the verge of dumping Rowan before the more hardcore events get triggered for sex? For example we have the follwing event triggers for Alexia corruption that test for relationship, obedience and whether one has more influence than the other before triggering. The "powerless" event is the gatekeeper for Alexia eventually having sex with Andras.

Code:
./events/alexia_corruption2.rpy:    event('powerless', triggers='week_end', conditions=('all_actors["alexia"].flags["andras_influence"] > 5','all_actors["alexia"].relation < 50', 'alexiaJezObedient == False', 'all_actors["alexia"].flags["andras_influence"] >= all_actors["alexia"].flags["jezera_influence"]',), depends=('alexia_med_corruption',), run_count=1, priority=pr_story)

./events/alexia_corruption.rpy:    event('in_her_hands', triggers='week_end', conditions=('all_actors["alexia"].flags["jezera_influence"] > 5','all_actors["alexia"].relation < 50', 'alexiaAndrasObedient == False', 'all_actors["alexia"].flags["jezera_influence"] > all_actors["alexia"].flags["andras_influence"]',), depends=('alexia_med_corruption',), run_count=1, priority=pr_story)
At the very beginning in the prologue, Rowan is forced to choose to have sex with either Jezera or Andras if he has sex at all. That choice sets mutually exclusive flags andrasIntroSex and jezeraIntroSex. Why can't there be an option for a threeway where Rowan gets his backdoor broken in by Andras while going down on Jezera up front?

Rowan has an option to go along with the twins for now while keeping the option of turning the tables on them later on the back burner. He has dialog with Alexia suggesting she go along with their advances as well in order to gain influence and intel. If the two are going to form a proper Peoples Front of Rosaria, they should be able to go after both of the twins together at the same time while learning the joys of a proper swinger lifestyle. Our favorite succubus stayed out of the last war for their own reasons and probably thinks that the twins would be setting up for another epic fail if it wasn't for her favorite couple experiment. Perhaps following her route would set up a proper chaotic neutral endgame much like a siding with Werden in Rastadel hints at a Lawful neutral ending.
Well imo i dont think Alexia should be given such manipulative options although she is no fool but still she is just a villagers wife being put into extraordinary situations she lacks the perspective and cunning to feign submission to the twins in the same way Rowan a great hero and master strategist would be able to.
 

FlipFish

Active Member
Oct 23, 2017
568
2,359
Three years ago I asked about the rpg elements and if they arent a bit excessive. Today I replay the game and fail to send Alexia to the Wulump because rng decided Im not allowed to succeed the DC.
Feels great. :)
You got NTR'd by RNG, it's part of the experience.
 

Rein

Active Member
Game Developer
May 8, 2017
811
3,061
Why are Alexia and Rowan being forced into stovepipe paths that seem to force them to choose either Jezera or Andras for their mode of corruption? Also why does Alexia have to be on the verge of dumping Rowan before the more hardcore events get triggered for sex?
Because swinging and NTR are incompatible with each other, and would be a nightmare to plan around.
 

phupdup

Well-Known Member
Oct 24, 2019
1,391
1,114
The devs need to revisit texts/buildings_descriptions.rpy, core/research.rpy and core/buildings.rpy since it looks like they are suffering from some bit rot due to update issues. The first thing I ran into was the upgrade of the Tavern from lvl 1 to 2 becoming available in the workshop even though I had only 95% of my first research of Fiendish Diplomacy finished.

The prereqs listed for this upgrade show requirements for both Fiendish Diplomacy and Silks and Smiles being done. I can't even see Silks and Smiles listed in the library research list yet because Fiendish Diplomacy isn't even done. So I shouldn't even see this lvl 2 upgrade being available in the workshop. Time for a code dive....

The popup screen for a given building or building upgrade in the workshop relies on data structures defined in the above three rpy files. The Prereqs section comes from the research tree classes defined in research.rpy and how the req_met method definition for a given research item class returns True or False (assumed True in the prototype if not overridden).

Code:
    class FiendishDiplomacy(Research):
        uid = 'fiendish_diplomacy'
        name = 'Fiendish diplomacy'
        category = 'diplomacy'
        cost = 40
        requires = 'Opulence, level 2 castle hall'
        unlocks = 'Can recruit new soldier types.'

        def on_complete(self):
            castle.buildings['hall'].max_lvl = 2
            castle.buildings['brothel'].max_lvl = 1
Fiendish Diplomacy is immediately available for research at game start since there is no override here for req_met. When done, it allows the castle hall to be upgraded to lvl 2 and allows the brothel to become available (going from lvl 0 to lvl 1). That means Rowan should be able to build the brothel next week since the research is 95% done and the castle probably will have the 200 gold available in castle.treasury (which is over 300 at the moment).

Code:
 class SilksAndSmiles(Research):
        uid = 'silks_and_smiles'
        name = 'Silks and smiles'
        category = 'diplomacy'
        cost = 120
        requires = 'Dark Subterfuge, brothel'
        unlocks = 'Level 2 brothel, level 2 tavern.'

        def req_met(self):
            return castle.researches['fiendish_diplomacy'].completed and (castle.buildings['brothel'].lvl >= 1 or castle.buildings['tavern'].lvl >= 1)

        def on_complete(self):
            castle.buildings['brothel'].max_lvl = 2
            castle.buildings['tavern'].max_lvl = 2
            castle.buildings["brothel"].available_spies.append(Spy(renpy.random.choice(["m", "f"])).uid)
The req_met method override for SilksAndSmiles will only return True if both FiendishDiplomacy is completed and the castle already has either a brothel or a tavern built. So it will probably appear next week when the research is completed for Fiendish Diplomacy.

Going into the console, I can verify by hand to show what can be researched and what is completed by using the "uid" name attribute defined in each class to index the castle.researches list.

Code:
castle.researches['fiendish_diplomacy"].req_met()
True
castle.researches["fiendish_diplomacy"].completed
False
castle.researches["silks_and_smiles"].req_met()
False
The on_complete method is a callback that runs when the research is completed. This appears to be a "clean" way going forward for research events to make buildings and upgrades available in the workshop by setting the max_lvl values. Unfortunately, it appears that buildings.rpy still has some cruft left over from earlier releases.

There are two methods on the Building class "can_be_built" and "can_be_shown" that make a building or building upgrade available in the workshop menu and be active and shown in the castle when built respectively. Our problem for the Tavern is that a can_be_built() is returning True when it shouldn't for the lvl 2 upgrade.

Code:
    class Building(object):
        '''Base class for castle buildings'''
        def __init__(self, uid):
            self.uid = uid
            self.name = all_buildings[uid]['name']
            self.lvl = 0
            # max level of this building, changing through game
            self.max_lvl = 0
            self.income = 0
            self.maintenance = 0
            self.morale = 0
            self.research = 0
            self._capacity = 0
            self.recruitment = 0
            self.description = all_buildings[uid]['name'] + ' description'
            self.available = all_buildings[uid]['available']

.
.
.
        def can_be_built(self):
            '''Returns True if all conditions for upgrading to next level are met'''
            # can be built if there is enough money and if this upgrade is not already scheduled and if current level is lesser than max level
            #TODO
            if self.name == "Summoning Chambers":
                return False
            return (castle.buildings[self.uid].up_cost <= castle.treasury) and (len(castle.scheduled_upgrades) == 0) and castle.buildings[self.uid].lvl < castle.buildings[self.uid].max_lvl and castle.buildings[self.uid].req_met()

        def can_be_shown(self):
            '''Returns True if building can be shown to player'''
            return castle.buildings[self.uid].lvl <= castle.buildings[self.uid].max_lvl and castle.buildings[self.uid].req_met()

        def req_met(self):
            '''Returns True if building-specific conditions are met'''
            if self.uid == "arena":
                if self.lvl == 0:
                    return castle.researches['ordering_chaos'].completed
                elif self.lvl == 1:
                    return castle.researches['military_logistics'].completed
            elif self.uid == "pit" or self.uid == "kennel":
                if self.lvl == 0:
                    return castle.researches['monster_taming'].completed
            elif self.uid == "brothel":
                if self.lvl == 0:
                    return castle.researches['fiendish_diplomacy'].completed
                elif self.lvl == 1:
                    return castle.researches['silks_and_smiles'].completed
            elif self.uid == "hall":
                if self.lvl == 1:
                    return castle.researches['fiendish_diplomacy'].completed
                elif self.lvl == 2:
                    return castle.researches['opulence'].completed
            elif self.uid == "library":
                if self.lvl == 1:
                    return castle.researches['contact_network'].completed
                elif self.lvl == 2:
                    return castle.researches['research_infrastructure'].completed
            elif self.uid == "barracks":
                if self.lvl == 1:
                    return castle.researches['ordering_chaos'].completed
                elif self.lvl == 2:
                    return castle.researches['military_logistics'].completed
            return True
That whole req_met method definition definitely is old code that needs to be deleted and taken out of the can_be_built and can_be_shown methods. We have a new research.rpy that is setting up callbacks to adjust max_lvl values upwards as the given research is completed. The code checking here is redundant and can cause confusion if it gets out of synch with the values set up in the research completion methods over in research.rpy. It's also bad style to be putting subclass specific code like this in the prototype class Building. If anything, it should just be defined to return True and then be overridden as necessary in the subclasses like Forge and Barracks.

Speaking of subclasses.... Where's Hall, Quarters, Tavern, Summoning, Caravan and Nasimchamber defined as subclasses? They are only in the all_buildings datastructure at the bottom of buildings.rpy. It would be more proper form to have Building as a pure template class with everything else subclassing either it or its MagicBuilding subclass. That way the Castle class in core/castle.rpy won't need to be checking for one versus the other when instantiating.

But we are getting distracted with the whole thing about why castle.buildings["tavern"].can_be_built() is still returning True even after the lvl 1 Tavern has been built but before silks_and_smiles is ever researched and completed to set the Tavern max_lvl to 2. It turns out the real culprit is a really old section of code that's been around since probably before the whole "Rowan is a cuck" flame wars first broke out on F95. Look what we have way up at the tippy top of rowan_intro.rpy where the castle itself gets instantiated:

Code:
# temporary dict to store event's variables
# should only be used to save vars in event scope
default event_tmp = {}

label rowan_intro:
    python:
        # timestamp in weeks
        week = 0
        # adult mode (NSFW)
        adult = True
        # create avatar Rowan
        avatar = Avatar('Rowan')
        # set variable to show events that this scenario is Rowan's
        Rowan_sc = True
        # add some items to backpack
        avatar.inventory.add_items(('iron_sword', 'leather_straps'))
        # equip 'sword' to main hand
        avatar.inventory.equip('iron_sword')
        avatar.inventory.equip('leather_straps')
        avatar.gold = 100
        avatar.base_strength = 10
        avatar.base_vitality = 10
        avatar.base_reflexes = 5
        avatar.base_intelligence = 5
        avatar.base_luck = 5
        avatar.heal()
        # create castle
        castle = Castle()
        # hide temporary uid
    python hide:
        # create starting buildings
        for uid in starting_buildings:
            castle.buildings[uid].build()
        # unlock first level of some buildings - they are available without research
        for uid in castle.buildings.keys():
            if uid in ["hall", "library", "barracks"]:
                castle.buildings[uid].max_lvl = 3
            elif uid in ["sanctum", "tavern", "forge", "brothel", "arena"]:
                castle.buildings[uid].max_lvl = 2
Of all the stupid places to be setting max_lvl for a building nowadays.... We have the max_lvl value being set to the actual max level of the building here, and the devs apparently forgot that this old early code is still hanging around. This should be in each building subclass init method in building.rpy where lvl and max_lvl is set to be either 0 or 1 depending on whether the building is immediately available for building or already built at game start. There's the proper excuse for the devs to follow through and define a proper subclass for Hall, Tavern and the like that I mentioned earlier. Because Tavern wasn't a proper subclass, and its max_lvl was set to 2 here at game start, the level 2 becomes immediately available as an upgrade as soon as you have the lvl 1 built and the proper amount of scratch in your castle.treasury.
 

Ataman87

Active Member
Jun 9, 2018
770
838
Im more it to swinging not so much NTR. Aside from Greyhide and the succubus is there more swinging planed - like with the twins of some of the other characters.
 

sagatoto

Newbie
Nov 17, 2019
18
5
I have only one question I can be good at this game I don't like games that force me to be bad I don't feel that way I don't know
 

T51bwinterized

Well-Known Member
Game Developer
Oct 17, 2017
1,456
3,493
I have only one question I can be good at this game I don't like games that force me to be bad I don't feel that way I don't know
Within reason. The situation Rowan is in forces him to make compromises and do evil things. But a dedicated version of Rowan can keep his spirit and continue to try to do good where he can.
 
  • Like
Reactions: Back

aykarin

Member
Aug 3, 2019
335
734
There's been internal discussions about it, and it's on our "to do" list. But, distinctly not very high on our "to do" list.
What's on your "to do" list after finishing Shaya's character arc and implementing new gameplay mechanics? What's left to do in Arc I?
 

johlem

Newbie
Apr 30, 2018
32
52
It's been a little over 2 years since I played this game, and I was wondering if the intro has been reworked since?

It's not that it's not good but I still find that it could develop the Rowan / Alexia relationship a bit more, because compared to the important role that Alexia has in the game, as a player, I would like that we really feel like we know Alexia for a while and have time to care a little bit about her during the prologue.

Exept that I really like this game and the evolution of it, ( and I hardly resist not playing it again before the end of act 1 xd)

But I think it might be a good idea to incorporate a little "prologue" quest into this story. Before the twins cross the path of Rowan and Alexia

This would allow Rowan to be played as a hero, and would increase the player's feeling of playing has a "fallen hero" (if it can be considered as such xd).

it would also increase the chance and the opportunity to appreciate Alexia, because although she and Rowan have been married for a long time, as a player we do not have the feeling to know her more than the other png, and that It's a shame because of the different events that focus on this character afterwards, which have less impact than it should be.

Of course it's just a small detail, but I really think that's missing at the beginning of the game.
 
3.90 star(s) 182 Votes