Carefree247

Member
May 24, 2019
303
617
I cannot say when it started but the writers have done a phenomenal job with the story as of late.The rework on X'zaratl character, the development to Shaya and Ameraine(minus the panda hair) have been interesting to say the least, though the story is still snail paced I still do enjoy playing annually to see how much it has progressed and whether it is still worth supporting every now and then.

I cannot say with guarantee if they actually managed to get the code overhaul working to their liking as I see no significant change besides some random events are more forthcoming than other while somehow creating editorial problems that require proof reading.

You don't have permission to view the spoiler content. Log in or register now.

Character arc wise I wonder if the writers managed to fully flesh out an idea of Rowan and his progression of the 3 different routes he has those being

1)Heroic

2)Submissive servant

3)Dominant one.

I feel as though he is lacking in his change during the battle of A'startes to fall of Rastadel progression of the story where he should have the most dramatic change in behaviour I see some but with a lot of holes like what made him chase Juliet or why for the matter as I never comprehended it till I played thrice and even then there are holes to the plot and out of character for someone like him, if anything that seems more like what Andras would do, if the writers used the same system as recruiting Liurel where

i)you don't help

ii)help but don't have sexual relations

iii)help and have sexual ties

and later on when facing Wendel you burst out in hot or cold rage revealing your fling it would later leave a lot to progress her story later on, mind you the writers wrote him one way for Maud where he cares for her while on the other hand he has little to no regard for Juliet at first but when presented with the option to have as a slave he changes face quick as a shopaholic offered an all you can buy shopping trip.

It's been 2 years since I first played this and still the writers have not come around to polishing Rowan before they polish the other characters which leaves room for mistakes that could happen in development and very unproductive in how they manage time and donations. Recalling their pitch they say they were inspired by Obsidian, Bioware, and the Witcher games, but in an effort to dish out quality content while keeping a steady flow of revenue coming in most people forget the heart of the matter while they work and that is the story, if the game has shiny graphics but no soul to them they are no different than the corporate trash churned out everyday, famous titles have one thing in common with each other and that is the players always keep coming back to them regardless the amount of time that has passed as we form a bond with the characters and the world so we come back to feel someting we might have forgotten or missed long past.I really enjoy the game for the choices it offers but man you guys really do need to polish up and fast I don't want to see 2 years from now the game is still in part 1 and still stuck polishing the various story arcs

EDIT: Whoever wrote the following deserves a raise and praise !
You don't have permission to view the spoiler content. Log in or register now.
 
Last edited:
  • Like
Reactions: Leo17 and errte13

phupdup

Well-Known Member
Oct 24, 2019
1,391
1,091
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,353
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
759
2,718
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,091
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
615
648
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.
 
4.00 star(s) 165 Votes