Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

ankmairdor

1,057
Posts
3
Topics
3
Followers
A member registered Feb 27, 2019

Recent community posts

If the normal error messages from debug mode are not useful for your problems, then I recommend using the the print() or globals.traceFile() functions to track what is happening or not happening. When I am uncertain how code is actually executing, I'll scatter those around the code and run it to see what ran and what didn't. Usually it looks something like this:

print("Here1")
... various code ...
print("Here2")
... various code ...
print("Here3, var1: " + str(var1))


It is a simple boolean change with no other consequences, so the simplest way to give yourself the healing spell is to add a line like this to the _ready() function in Mansion.gd:

globals.spelldict.heal.learned = true

It's entirely doable, but there isn't any support within the sex system for those particular changes and some of them can end up being rather complex to implement. I would rate this as a significantly difficult set of changes that would probably take weeks or months for most people to implement.

1. Orgasm is a function in newsexsystem.gd. The only challenge is coming up with a proper set of conditions to check as there are some variations on the conditions you gave, such as the double dildo actions. 

2.  It's not particularly difficult to append the last action to the list of ongoing actions, but sex actions effectively have no state information, meaning that they don't track any changes or variations. The sex action scripts are reused by other participants so you cannot easily add variables to the sex action files to track the timer for a specific act. Storing the timer outside of the action and using it to switch between two types of text generation functions is complicated by the alternate text system that is used by many penetration actions, but at the very least this means altering the every penetration sex action file to handle the unique wording. I expect that altering the following line in newsexsystem.gd to include an entry for your action state information is the simplest approach:

var dict = {'scene' : scenescript, 'takers' : takers.duplicate(), 'givers' : givers.duplicate()}

3. There is some precedent for disabling action buttons based on other conditions and the conflicting actions function might produce data that can be used to accomplish this. Though there are other considerations for preventing actions from being cancelled, such as the "Interrupt" URL for ongoing actions. The sex system's GUI currently does not support alternate uses for URLs nor showing tooltips, though such functionalities exist for other GUIs in the game. Also, all actions get cancelled when restraints are removed from a slave that is resisting sex or when the sex interaction ends.

4. Timers themselves are easy to manage, but going back to #2 the core problems are where to store them and share them.

5. This is covered in #2, but changes to the flavor text of sex actions is messy work and likely to consume a disproportionately large portion of your time.

Yup, so if you bought a new slave just to fulfill Ayda's request in exchange for the quest potion, then after 15 days you would have a slave that was identical to when you first got them except that you have owned them for 15 days.

Every variable has it's own set of cases where it can be less reliable, so using any single variable will be prone to problems. For instance, "person.metrics.ownership" would be the variable that most consistently corresponds to days spent in your household, except that it actually counts days in your slave list. This means that time away for quests, vacations, training, or recovery still counts towards days of ownership.

Newly generated slaves don't really have any backstory and stores and slave auctions don't particularly constrain themselves to the rules of the world. Though only a few versions ago this was basically true for any time a slave was away from the mansion. Even now you can indefinitely lengthen the duration of a pregnancy by simply using the Dream spell on the slave every night.

There are no in-game methods to be certain if a slave at the auction is one that you've owned before. The best you could do in-game is to use mind reading to check if their courage, confidence, wit, and charm are extremely high or low values as slaves are generated with fairly average values. You could check their stats in the raw save file as there are several stats like stress, lust, lewdness, which will all be zero for newly generated auction slaves.

No, selling a slave has no impact on the stats of the slave, which is why some strategies utilize selling slaves as a somewhat expensive mechanic to get around certain problems. In fact, slaves that have been sold effectively enter a form of stasis(assuming they don't get deleted) as only slaves in the player's slave list experience end of day updates, so any slave you sell will be bought back in exactly the same condition as you sold it.

The game doesn't flag the persons available post-combat within their own data; it stores lots of data in arrays within the "defeated" dictionary, using the indexes from the insertion order to track the data. The persons are not renamed at all by the exploration nor mansion code. The captured list label is simply given a few existing strings to display:

newbutton.get_node("Label").set_text(defeated.names[i] + ' ' + person.sex+ ' ' + person.race)


The most obvious approach to improving descriptions is to add a bit of data to each person to track their context. However, that can be somewhat over-complicated unless you plan to incorporate that into other portions of the game, so the simplest alternative would probably be to add a new function or argument to the chain of description functions to pass the context. Another approach is to use the global reference path ("globals.main.exploration.defeated") to the "defeated" dictionary in order to search for the current person to ascertain their context. The indirection of it is a bit complicated but it puts all the problems in a single location.

There is no "Hard Mode" in this game, so perhaps you mean "Story Mode"? Either way, there is no difference in the daily mechanics between "Story Mode" and "Sandbox Mode," so you would have the same problem either way. There isn't any singular cause that can reduce obedience by 50 points in a single turn. There are some random events that can reduce obedience by 40 if poorly handled, but that would only affect a single slave. My best guess is that you have not cleaned your mansion, which can add stress and reduce obedience. And high stress can also reduce obedience, so you can get a double hit to obedience from not keeping the mansion clean which can add up to a loss of 50 obedience per turn if you are unlucky. Both of these problems leave messages in the End of Day reports for the player to read. Additionally, if you have high grade slaves, then they will have luxury demands, which if not met will result in a daily loss of obedience and a message in the report saying that they are unhappy with the quality of their living conditions.

The fastest way to improve the obedience of your slaves is to use the Meet or Sex (if you have their consent) interactions as the better they feel after the interaction, the more obedience they will gain. It's quite easy to max out a slave's obedience in 1 to 3 interactions depending on their initial conditions, but that won't help much if you don't improve their living conditions.

Also note, don't have multiple slaves sleep in the master's bed unless they all have had sex together. If they don't like each other, then they will really stress each other out.

The Modding Guide in the wiki was simply a slightly out of date version of the one available in the game. The Strive wiki may get re-uploaded at some point, but someone would need to re-format the data and maybe find new images. One user has pointed out in the Discord that the wiki is still available through the Wayback Machine's internet archive.

(1 edit)

Right, I forgot about the difference in engine versions. The game is essentially running on version 3.3 of the Godot engine, whereas the most recent version is 4.7.1, which includes a significant overhaul of the string variable functions. This is the relevant document for the game's string functions: https://docs.godotengine.org/en/3.3/classes/class_string.html. The string functions are still somewhat crude, so you will probably want to use the clunky #2 approach for most things. Alternatively you could use dictionaries to convert string keys into boolean values or integers, though it's really just pushing the bulk and work to somewhere else.

Godot is the game engine. GDScript is simply an abbreviation for Godot Script. Godot can run on other languages than GDScript, such as C#.

(1 edit)

First, the game's error logs are nearly useless most of the time, which is why there is a Debug mod (/t/1137280/debugmod-v10d) to provide error messages, file names, and line numbers for error messages in real time (though the terminal window) with the bonus of somewhat improving the messages in the log file. The Debug mod is not a true mod and doesn't use the mod system so there is no to worry about erasing all the changes to your files by using the mod system.

Second, I recommend finding an online interactive tutorial for Python as GDScript is heavily based on that mainstream language, which will have better tutorials and explanations for stuff like scope. A few hours with a tutorial can easily save you days of fumbling around on your own.

As to what your problem is specifically, I don't know. You didn't include any information or description of outcomes that would clearly identify one. While much of your code is bulky and inefficient, I didn't see anything that would necessarily cause errors. This leaves three issues which would be possible causes of errors that I cannot verify. The first and biggest one is that at the end of your post you are replacing "enby" in a person's sex with "female", but there's no indication that you have replaced "futanari" with "enby" in a person's sex variable, which means that "futanari" slaves are searching for data entries that may not exist unless you added them. The second is whitespace. I am unable to check if spaces were used instead of tabs in your code since the forums convert everything to spaces. The third is the validity of the references to the original variable for names "globals.racefile.names". It's not entirely clear what you have done or not done to the original lists of names. If those lists still exist in the original variables and entry names, then those should still be functioning and not a problem.

(1 edit)

This game was last updated more than 5 years ago; 4 years ago if you count the last version of the Bugfix mod. Some mods are more than 7 years old and work mostly fine because the code they altered was never really updated.

During the Sex interactions, if a character has a body image assigned and you hover your mouse over the top of their portrait image in their status bar, then it will display their body image.

Mods generally don't touch the number of beds and the Patreon Supporters code provides an unlock on the number of beds.


The number of Meet and Sex interactions per day is determined by the main character's Endurance. You get +1 interactions for every odd(1,3,5,7) point of Endurance.

The Constants mod can be used to easily and safely increase the base amount of daily interactions.

If you want any other scaling, then you would need to edit the code in ".../files/scripts/Mansion.gd":

    globals.state.sexactions = ceil(globals.player.send/2.0) + variables.basesexactions
    globals.state.nonsexactions = ceil(globals.player.send/2.0) + variables.basenonsexactions
Simply change the text, save the file, and run the game to use your changes. If you mess up and the game crashes, then you can always copy the file in the Backup folder over the file you edited. Note: if you install any mods it will automatically reset all game files to use the Backup folder, which will erase all edits to game files.

The game has ceased development, but maybe someone will make a mod for it. Personally, I don't think magic caps need to be raised as magic is already incredibly overpowered. If you didn't know, the game already has two methods of increasing the magic cap for slaves by 2 each, though one of the methods is stupidly expensive.

Yes, there is a level limit. Unfortunately, no amount of save file editing can change this limit. The only way to raise this limit is to mod the game's code to use two variables instead of one variable to count character levels. Though you would need to level-up non-stop at least 300 times per second to reach the level limit before the Sun makes Earth uninhabitable in about 1 billion years, so maybe it's not worth worrying about yet.

(1 edit)

Quick tip, it helps if you reference a file name when referring to code so the other person doesn't need to hunt for it.

In the sex action files, the game uses 2 separate types of randomization; one is relatively easy to replace with a specific order, one is somewhat complicated to order. Changing temparray to const would have no meaningful impact on the behavior of the array, as it only prevents you from changing the type of the variable to something that is not an array; it does not prevent changes to the contents of the array. 


text += temparray[randi()%temparray.size()]

This selects a random line of text within temparray and appends it to the text return variable. To change it to a specific order, the simplest approach is to replace the random integer generator "randi()" with a persistent variable storing an incrementing integer. If we keep most of the function unchanged we get:

var count1 = 0
func initiate():
    ...
    text += temparray[count1%temparray.size()]
    count1 += 1
    ...

However,  many sex actions use multiple layers of appended text to the text return variable and reusing count1 for every layer can restrict the number of combinations of text generated if the layers have the same number of lines of text in temparray. To fix that specific case we can use conditional increments.

var count1 = 0
var count2
func initiate():
    ...
    text += temparray[count1%temparray.size()] 
    count1 += 1
    temparray.clear()
    ...
    text += temparray[count2%temparray.size()]
    if count1%temparray.size() == 0:
        count2 += 1
    ...

The second type of randomization uses specific characters to mark the beginning, separations, and end of the set of randomly selected text:

{^gently:tenderly:carefully}

The first two characters "{^" mark the beginning of the randomized text, the individual texts are separated with colons, and the end is marked with another brace. This sounds straightforward and you might be tempted convert split those three words into separate lines to be handled by a layer of temparray, but consider this line from 100caress.gd:

temparray += ["[name1] {^gently:tenderly:carefully} {^stroke:fondle:cuddle:massage}[s/1] and {^caress[es/1]:rub[s/1]} [names2] [body2]"]

This single line provides 24 unique combinations of randomized text.

The code for this process is found in func splitrand(text) of sexdescriptions.gd. If we made the incorrect assumption that there are a minimal number of cases where these random sets of text are identical, then it's possible to use dictionary to implement an incrementing integer strategy similar to above.

var dictCounting = {}
func splitrand(text):
    var pos = text.find("{^")
    while pos >= 0:
        var targetText = text.substr(pos, text.find("}", pos)+1 - pos)
        var splitText = targetText.substr(2, targetText.length()-3).split(":")
        text = text.replace(targetText, splitText[ dictCounting.get(targetText,0) % splitText.size() ])
        dictCounting[targetText] = dictCounting.get(targetText,0) + 1
        pos = text.find("{^", pos)
    return text

It's been a while since I've coded, but I'm mostly certain this would work as long as I didn't make any typos. While this is an inaccurate solution as the assumption was incorrect, it's by far the least effort solution.

If you want any more control over the ordering of text than this, then you will probably have to create an array of all possible combinations of text for each sex action and then use the incrementing integer technique to walk through them one at a time.


Edit: Please note that itch.io converted all tabs to spaces, which will wreck havoc in Godot if you try to copy and paste my code.

Character sex/gender is only updated when the character undergoes a change which would be likely to change it. These changes are pretty much all driven by the player, though using too many potions too quickly can cause random mutations.

If the game crashes anytime you add a new line, even a blank one, then your editor is adding the wrong set of newline characters (the invisible characters that cause editors to put text on a new line) whenever you press the Enter/Return key.

If you don't have programming experience with Python, then I recommend taking a free online interactive tutorial for Python. GDScript is designed as a beginner friendly version of Python with some LUA, but since Python is a primary programming language it gets some better tutorials. A few hours with a tutorial will make things a lot clearer.

For simple debugging I recommend the Debug mod: /t/1137280/debugmod-v10d
I tend to do most of my programming in Sublime Text 3 with Python syntax highlighting and use the Debug mod to find out what breaks.
Otherwise get the Godot Editor version 3.3. It is needed if you want to work with the GUI, though it won't be much help for making mods.

This is the largest portrait pack and still works: https://gitgud.io/sqs4p-maitainer/strive-image-pack

Links generally stop working when the file sharing sites stop hosting the files, so many of them no longer have any links unless someone uploads them again. I don't  really feel like going through the links and my files to see what is available.

There are currently no AI mods for Strive for Power, though someone recently made one for Strive: Conquest.
The improved random portraits mod( /t/984434/randomportraits-and-portrait-pack-editor-for-the-10-ver... ) randomly selects images based on the tags that are similar to the character descriptions.

60 courage is needed to prevent the 50-75% reduction of food during hunting. The condition includes a random condition related to courage, so a slave with 55 courage will receive the penalty about 32% of the time on average. A slave with 0 courage will receive the penalty about 45% of the time on average. Thus Random Number Generation(RNG) is the dominant reason for the difference in outcomes.

Any change is possible if you put in the time and effort.
The flavor text provided during sexual interactions is created by ".../files/scripts/sexdescriptions.gd". The system converts pronoun tags into the most specific generalization for the group. Though it was designed for a simpler conception of pronouns, it should be relatively easy to adapt if you have already managed the change in person.gd.

The core of the sex interactions is ".../files/scripts/newsexsystem.gd". Search the file for the trait name. You will probably need to add exceptions for the action codes for those actions since the original system was designed with phallic-based assumptions about which side was the "giver" or "taker".

If your file names are changing, then the most likely causes are a user mistake or failing hardware. The game does not have any functionality to rename files and I have not seen any mods that do this. The cause of your problem cannot be determined without a specific error message. If your operating system is not providing the error message, then the Debug mod (/t/1137280/debugmod-v10d) can be used to have the game provide error messages.

This community could use a new portrait pack. There are still those that prefer non-AI images, though most of the focus is currently on using AI to generate images as it can be difficult to find a proper variety and consistency of images for the improved random portraits, much less the expanded image sets for AricsExpansion.  Either way, most of the discussion happens on the Discord: /t/284398/discord

(1 edit)

Potions add toxicity to slaves, which can be monitored using the Mind Read spell. When that toxicity is above 60 you will have a chance of mutations, and need to wait until it dissipates. Each potion has it's own amount of toxicity and the only resource for knowing how much is the items.gd script in the game's files. These values range from 0 for Hair Dye to 50 for an Elixir of Clarity.

Not really certain what you are asking for in your second post. The age of a slave has almost no impact on them at all, so there are no age requirements nor patterns for Specializations. Children, as in offspring from a pregnant person, will not inherit a specialization from their parents so they will not start with one.

The game does not support having more than one starting slave. If you edit a save to get more than one, then only the top one in the list will be considered the starting slave. The save files are JSON formatted plain text, so they can be edited with any text editor, though I highly recommend using something that supports the JSON format, such as an online editor. It is possible to move slaves between saves, but care needs to be taken to ensure that the relevant data such as slave IDs do not conflict nor overlap.

/post/10344412

This generally happens when someone tries to run the game without extracting all of the files from the Zip archive, or when buggy or conflicting mods are applied.

The Debug mod can be used to diagnose the cause of the error, though it also changes the crashing behavior of the game, but it does not fix errors. /t/1137280/debugmod-v10d

If mods were applied, then the best solution is to delete the Strive program folder and extract a new copy.

In ".../Strive/mods/AricsExpansion/customScripts/expansionsettings.gd" you can change the value of capturedSelect to your preference. The comment above that variable explains the values. The Constants mod can be used to easily chance many of the values, but support for that type of value was never added to either mod.

Hopefully you have already figured it out, but this mod does not replace any files. It simply provides a new executable that helps with finding errors in the game.

Line 684 of ".../files/scripts/jobs&specs.gd".

"checkforevents" is a variable in the mansion that essentially indicates whether the mansion should attempt to check for and display a new event. In practice, this value is only true while an event is being displayed, but it will be blocked from checking for new events until the first frame where the current event is no longer visible on screen. Thus "func nextdayevents" will be repeatedly called until the end of the function is reached without triggering an event.

The player gives birth first, followed by slaves giving birth in the order that they appear in the mansion list, followed by scheduled events, followed by random events, and followed by main quest story scenes. This order of presenting events is always maintained, though not every type of event occurs in a single day.

A new system was being planned to handle events in a more centralized manner, but the person contributing that code abandoned it for whatever reason. So the new system was removed from operation and the game uses the old system for events.

If you are simply trying to add it as new behavior style to the Headgirl job, then you would simply need to add the role to the GUI, either through patching the Mansion.tscn or adding code to the "_ready" function of Mansion.gd to add the option to the OptionButton.

If you are trying to add it as a new job, then you need to add an entry to the jobdict in ".../files/scripts/jobs&specs.gd".

After either of those, you add your code to the end-of-day function.

You found one of the messier parts of the game's code. Godot provides the option to set custom getter and setter functions for variables in a class. In this case, the class "progress" is found in ".../files/globals.gd". 

var condition = 85 setget cond_set

This variable declaration establishes a custom setter function for "condition", so any attempt to assign a value to "condition" outside the setter function will call the setter function with the new value as the argument for the function. Simply changing "condition = -X" to "condition -= X" causes the resulting value of "condition" to be "condition*2-X".

In order to make the switch, you would need to remove the setter function and update every line in the game that assigns to "condition". Note that all changes to "condition" are multiplied by "conditionmod", which is 1.3, so you would need to include this multiplier in every line when updating them otherwise the value would be reduced.

It's fairly quick and easy for an experienced modder, but tricky for someone unfamiliar with all the parts. A core issue is that the portrait displays are implemented separately for each part of the game, which would require the modder to locate a few different sections of the GUI and the corresponding code.

AricsExpansion went a different route and added the pregnancy icon to the slave tooltips and information tabs, which is far fewer locations.

There are no records of past orgasms/ejaculations in the unmodded game, so your options are to either add some type of record or add the relevant code from "func checkrequest" to "func orgasm". The latter approach is probably simpler.

This game should never show anything like "emptymod" nor "10001110". Are you playing Strive: Conquest?

In Strive for Power, the mod is always named by the folder containing the mod, so only a mod in a folder named "emptymod" could appear with that name. A new folder named "New folder" in the mod folder with only sub-folder named "scripts", will appear as a mod named "New folder" not "emptymod".

You don't need to give them gold and food to get them as slaves, but you do if you want to progress along that quest line. The amounts are 50 gold and 50 food, which should be trivial amounts, especially since you have at least 7 days before Tisha appears after you invite Emily into your mansion.

For an easy start, I play as a Halfkin Wolf Hunter, put 2 points into agility, buy and equip Chain Armor, and then explore the Outskirts of Wimborn for bystanders to rescue from thugs. I use the rewards I get from the bystanders to buy bandages and fight until I have enough gold to buy full gear for my combat group and 1000 to 2000 spare gold. While Emily cannot be used as part of the combat group immediately after inviting her into your mansion, an experienced player can use a Meet interaction to boost her obedience and loyalty to the levels required for the combat party (the Bugfix mod can help clarify why people cannot join the combat party). Then I buy 3 supplies and use the "Rest and eat" option to remove all stress from the combat group before I assign jobs and end the first day.

The Mods menu has a button to "Open Mod Folder", which will attempt to open the folder for you.

The location of the mod folder on your computer is dependent upon which OS you are using and tend to be hidden by the OS. As stated in the Help section of the Mods menu:

Replace USER_NAME with the value appropriate for your computer.
Windows:  C:/Users/USER_NAME/AppData/Roaming/Strive/mods
MacOSX:  Users/USER_NAME/Library/Application Support/Strive/mods
Linux:  ~/.local/share/Strive/mods
Note, if you are using the itch.io launcher to run the game, then your mod folder will be inside the data folder for the launcher.

Also, the folder ".../files/scripts/mods/" in the Strive program folder is strictly for the Constants mod that comes with the game.