Current version (7.0):
Here are the full notes on the mod in it's current version:
I have added a semi-beta version of the final product. Download is in the file list, notes on changes/additions follow, all changes affect Advanced functionality only:
Individual updates:
If you have a similar feature that you would like me to add to this mod, please let me know below. I will not guarantee I will work on it, but if it is reasonably simple to add (and fits with the rest of the mod, i.e. I am not going to add new body/hair types, sounds, positions etc) I may give it a shot. If I decide against it, I will give you a reply stating that I will not be adding it.
If anyone wants to add to this mod themselves, feel free. I included the source code in the zip file.
Since I was starting to get several versions up, I moved them over to mega upload. Links to each version are available in that versions section of the post. From now on, I will only keep the newest version loaded to the attachments section of the post.
I have included a demo dialogue with appropriate position files below.
The showhim_partial file should be present in the animtool15 positions that came with that mod.
This is obviously just a quick demo of a few of the more complex functions. It shows off value_custom, position_custom, set_test, active_test, and x_custom
Most of the remaining triggers are either much simpler (init_resistance) or very similar (random_custom)
I will probably add one more comparison criteria for the testing section of the mod later, which is testing whether the auto-function is going towards min value or x value.
Here are the full notes on the mod in it's current version:
Basic Notes:
Advanced Notes:
This is my first Mod attempt. I believe I have most of the bugs worked out, but let me know if you find any.
This mod adds 22 dialogue triggers. 16 are listed here, the remaining 6 are listed in the Advanced functionality.txt file also included in this package, these triggers are for more complicated dialogues and you should probably fully understand those listed in this file before working with those.
Changes by version:
Mod triggers:
The only KNOWN issues are:
List of valid keys:
This mod adds 22 dialogue triggers. 16 are listed here, the remaining 6 are listed in the Advanced functionality.txt file also included in this package, these triggers are for more complicated dialogues and you should probably fully understand those listed in this file before working with those.
Changes by version:
v7: Added line callback functionality that allows the writer to create test conditions, which when fulfilled cause the dialogue to jump to a specified line. Also fixed ramp/random interaction.
v6.1: bug fix for value_custom + ramping, many extra configuration options from value_custom.
v6: overhauled code to be more stable/have more options. Too many changes to list indivually, new functions/inputs below.
v5: added trigger to automate breaking through initial resistance, allows you to specify speed she moves down, and speed she moves back up seperately.
Mainly added to handle very large penis sizes where the other auto functions won't keep her pulled off long enough for the animation to clear her mouth, so it will not decrease her resistance further leading to never getting a deepthroat.
v4.2:Fixed major problem preventing custom functions from operating.
Logic changed/simplified to be much more reliable in most cases for very fast/slow automations.
v4.1: The mouse release was not occurring after a hold to balls trigger was used followed by a normal trigger so until a base auto function or stop_custom was called, or the player pressed and released the mouse button she would not take it in her mouth again. This has been fixed and the other triggers will release the hold.
v4: Fixed issue with non-oral positions always trying to reset to get in the penis in her mouth, and added 3 more new triggers: [START_LICKING_<speed>], [PRESS_BALLS_<speed>], and [MOVE_TONGUE_<IN/OUT>.
v3.2: Fixed [STOP_CUSTOM] trigger, and allowed slower speeds for [POSITION_CUSTOM], also made it less likely that the fix from 3.1 would trigger when it should not due to built in movement from breathing during very slow movements.
v3.1: Fixed issue with "missing" as the penis passes her mouth, so she just went alongside it.
v6.1: bug fix for value_custom + ramping, many extra configuration options from value_custom.
v6: overhauled code to be more stable/have more options. Too many changes to list indivually, new functions/inputs below.
v5: added trigger to automate breaking through initial resistance, allows you to specify speed she moves down, and speed she moves back up seperately.
Mainly added to handle very large penis sizes where the other auto functions won't keep her pulled off long enough for the animation to clear her mouth, so it will not decrease her resistance further leading to never getting a deepthroat.
v4.2:Fixed major problem preventing custom functions from operating.
Logic changed/simplified to be much more reliable in most cases for very fast/slow automations.
v4.1: The mouse release was not occurring after a hold to balls trigger was used followed by a normal trigger so until a base auto function or stop_custom was called, or the player pressed and released the mouse button she would not take it in her mouth again. This has been fixed and the other triggers will release the hold.
v4: Fixed issue with non-oral positions always trying to reset to get in the penis in her mouth, and added 3 more new triggers: [START_LICKING_<speed>], [PRESS_BALLS_<speed>], and [MOVE_TONGUE_<IN/OUT>.
v3.2: Fixed [STOP_CUSTOM] trigger, and allowed slower speeds for [POSITION_CUSTOM], also made it less likely that the fix from 3.1 would trigger when it should not due to built in movement from breathing during very slow movements.
v3.1: Fixed issue with "missing" as the penis passes her mouth, so she just went alongside it.
Mod triggers:
[INIT_RESISTANCE_<level>]:
[HOLD_CUSTOM]:
[STOP_CUSTOM]:
[PAUSE_CUSTOM]:
[CONTINUE_CUSTOM]:
[MOUSE_BUTTON_<position>]:
[MOVE_TO_BALLS_<speed>]:
[MOVE_TONGUE]:
[INIT_RESIST_BREAK_<speed-going-down>_<(optional)speed-going-up>]:
Base automation triggers:
Random auto triggers:
Ramping auto triggers:
Sets the initial resistance to value that replaces <level>
Example: [INIT_RESISTANCE_75] will set the initial resistance to 75.
Example: [INIT_RESISTANCE_75] will set the initial resistance to 75.
[HOLD_CUSTOM]:
Locks him/her in position so no movement will occur until command is canceled with an AUTO
setting, or another CUSTOM command.
setting, or another CUSTOM command.
[STOP_CUSTOM]:
Cancels the current CUSTOM command.
[PAUSE_CUSTOM]:
Freezes the current custom automation.
[CONTINUE_CUSTOM]:
Unfreezes the current custom animation, picking up exactly where it left off when pasue_animation was used.
[MOUSE_BUTTON_<position>]:
Simulates holding/releasing the left mouse button, position = down holds down, up releases, position is not case-sensitive. This allows for the dialogue writer to pull her up/down or move her alongside the penis.
[MOVE_TO_BALLS_<speed>]:
Moves her down to his balls. Speed argument specifies how fast she moves to his balls, if above ~60 or on very large penises may not activate mouse hold quickly enough. To insure it works properly, recommend using MOUSE_BUTTON_DOWN first.
[MOVE_TONGUE]:
Toggles tongue on or off, if the argument is either 'in', the tongue will be toggled off, if the srgument is 'out' otherwise it will be toggled on, the argument is not case-sensitive.
[INIT_RESIST_BREAK_<speed-going-down>_<(optional)speed-going-up>]:
Moves her up and down his penis with slight pauses (4 frames, or about 0.15 seconds) to allow animation to catch up. This allows her to clear his penis even at very high speeds so initial resistance will continue to degrade allowing an eventual deep throat. With the other custom triggers, at high speeds the animation would not catch up to the position fast enough, so she would begin going back down before she actually came off the penis. When pulling her off, it stops with a small (10-15 pixel) gap between her lips and the tip of the penis.
Example:
[INIT_RESIST_BREAK_100_20] would force her all the way down at 100% of max speed, then pull her back off at 20% speed.
Example:
[INIT_RESIST_BREAK_100_20] would force her all the way down at 100% of max speed, then pull her back off at 20% speed.
Base automation triggers:
For the following triggers, all values should be between 0 and 100. All x/y coordinates are percentages of maximum value, they represent mouse positions when auto is off. so x = 30 represents the mouse being placed 30% of the way across the screen from left to right. X coordinates can be replaced with words that will calculate the appropriate position automatically, these are:
To overcome initial resistance the penis MUST actually exit her mouth before pressing back in.
[X_CUSTOM_<min-x-coordinate>_<max-x-coordinate>_<x-speed-down>_<(optional)x-speed-up>)_<(optional)x-delay-down>_<(optional)x-delay-up>]:
[FULL_CUSTOM_<min-x-coordinate>_<max-x-coordinate>_<x-speed-down>_<min-y-coordinate>_<max-y-coordinate>_<y-speed-down>_<(optional)x-speed-up>_<(optional)y-speed-up>_<(optional)x-delay-down>_<(optional)x-delay-up>]:
[POSITION_CUSTOM_<x-coordinate>_<y-coordinate>_<speed>]:
'off': sets position to 0%.
'tip': places her lips near the tip of the penis.
'head':places her lips at the base of the head of the penis.
'center': attempts to place her lips at the center of the penis, value is calculated from initial resistance broken and no throat resist.
'hilt': attempts to place her all the way down the penis. Again, affected by current resistances.
'tip': places her lips near the tip of the penis.
'head':places her lips at the base of the head of the penis.
'center': attempts to place her lips at the center of the penis, value is calculated from initial resistance broken and no throat resist.
'hilt': attempts to place her all the way down the penis. Again, affected by current resistances.
To overcome initial resistance the penis MUST actually exit her mouth before pressing back in.
[X_CUSTOM_<min-x-coordinate>_<max-x-coordinate>_<x-speed-down>_<(optional)x-speed-up>)_<(optional)x-delay-down>_<(optional)x-delay-up>]:
Sets up a custom automation with default y values, only specify x values. Optional triggers have default values if unspecified, but you cannot skip them. So to do x-delay-down you MUST specify x-speed-up first. if speed/delay up are not set, they default to the value set for the down version. Delay down defaults to 3 frames.
Example 1: [X_CUSTOM_20_50_40] will move between a simulated mouse at 20%, and 50% and back at 40% of the maximum speed, at each end point it will stay for 3 frames before reversing directions.
Example 2: [X_CUSTOM_20_50_40_70_15] will move from a simulated mouse at 20%, over to 50% at 40% of max speed, it will then stay there for 15 frames before moving back from 50% to 20% at 70% of maximum speed where it will stay for another 15 frames before beginning again.
Example 3: [X_CUSTOM_tip_center_40_70_15_20] will move her lips from the tip of the penis to the center of the penis at 40% of max speed, it will then stay there for 15 frames before moving back from the center to the tip at 70% of maximum speed where it will stay for 20 frames before beginning again.
Example 1: [X_CUSTOM_20_50_40] will move between a simulated mouse at 20%, and 50% and back at 40% of the maximum speed, at each end point it will stay for 3 frames before reversing directions.
Example 2: [X_CUSTOM_20_50_40_70_15] will move from a simulated mouse at 20%, over to 50% at 40% of max speed, it will then stay there for 15 frames before moving back from 50% to 20% at 70% of maximum speed where it will stay for another 15 frames before beginning again.
Example 3: [X_CUSTOM_tip_center_40_70_15_20] will move her lips from the tip of the penis to the center of the penis at 40% of max speed, it will then stay there for 15 frames before moving back from the center to the tip at 70% of maximum speed where it will stay for 20 frames before beginning again.
[FULL_CUSTOM_<min-x-coordinate>_<max-x-coordinate>_<x-speed-down>_<min-y-coordinate>_<max-y-coordinate>_<y-speed-down>_<(optional)x-speed-up>_<(optional)y-speed-up>_<(optional)x-delay-down>_<(optional)x-delay-up>]:
Same as previous except y values are also specified, y delays are not currently adjustable due to lack of visibility and size of trigger result.
[POSITION_CUSTOM_<x-coordinate>_<y-coordinate>_<speed>]:
This trigger works much the same as the FULL and X triggers, but it smoothly transitions to the
specified point and stays there until another command, such as [AUTO_HARD] or [X_CUSTOM] is given.
Example: [POSITION_CUSTOM_tip_80_40] would cause her to move her lips to the tip of his penis, with the mouse simulated at 80% of the way down the screen. This movement will be at 40% of the maximum speed.
specified point and stays there until another command, such as [AUTO_HARD] or [X_CUSTOM] is given.
Example: [POSITION_CUSTOM_tip_80_40] would cause her to move her lips to the tip of his penis, with the mouse simulated at 80% of the way down the screen. This movement will be at 40% of the maximum speed.
Random auto triggers:
The next three triggers act the same, and have the same initial parameters as the X_CUSTOM triggers, but more parameters are added to each:
[RANDOM_CUSTOM_<min-x>_<max-x>_<speed-down-x>_<random-chance>_<random-scale>_<speed-up>_<delay-down>_<delay-up>]:
[RANDOM_SPECIFY_<min-x>_<max-x>_<speed-down-x>_<random-chance>_<random-scale>_+key-value-pairs-if-desired]:
First is the random chance, this is the chance that it will update the current min/max, speed up/down, and delay up/down of the animation. The chance is equal to this parameter/1000 and can range from 0-1000. It is HIGHLY recommended that you stay under 100, as that would average out to a new set of values every 10 frames or ~.33 seconds.
The second new parameter is the range you want the random adjustments to occur in, i.e. if this parameter is 30, all parameters will be between 70% and 130% of the original value. For delay this is rounded off as delays are measured in frames. For min/max, the change is calculated from the average of the two, and then added to the original value i.e. if min = 20 and max = 50 with a random scale of 0.2, to update min, we take average min/max = 35 * 0.2 = 7, min + 7 = 27 so now it would be 27-50. The same would be done for max.
Each item has the scale calculated individually so if the given scale is 20% (parameter = 20) each would be multiplied by 0.8-1.2. One may be multiplied by 1.15 while another might get 0.83, they are independent of each other.
Note: Every time the values are updated, the values are taken from the GIVEN parameters not the current ones. So it will NOT stack as time goes on, these blocks have rather complex inputs, so be careful when using them.
RANDOM_CUSTOM requires you to specify EVERY value, while RANDOM_SPECIFY require min/max, speedDown, randomChance, and randomScale, then choose which additional components you wish to change. both start with TRIGGER_<min-x>_<max-x>_<speed-down-x>_<random-chance>_<random-scale>
RANDOM_CUSTOM then adds _<speed-up-x>_<delay-down-x>_<delay-up-x>
RANDOM_SPECIFY you add <key>_<value> pairs, where key is the value you wish to change, and value is value you wish to assign to that key.
The second new parameter is the range you want the random adjustments to occur in, i.e. if this parameter is 30, all parameters will be between 70% and 130% of the original value. For delay this is rounded off as delays are measured in frames. For min/max, the change is calculated from the average of the two, and then added to the original value i.e. if min = 20 and max = 50 with a random scale of 0.2, to update min, we take average min/max = 35 * 0.2 = 7, min + 7 = 27 so now it would be 27-50. The same would be done for max.
Each item has the scale calculated individually so if the given scale is 20% (parameter = 20) each would be multiplied by 0.8-1.2. One may be multiplied by 1.15 while another might get 0.83, they are independent of each other.
Note: Every time the values are updated, the values are taken from the GIVEN parameters not the current ones. So it will NOT stack as time goes on, these blocks have rather complex inputs, so be careful when using them.
RANDOM_CUSTOM requires you to specify EVERY value, while RANDOM_SPECIFY require min/max, speedDown, randomChance, and randomScale, then choose which additional components you wish to change. both start with TRIGGER_<min-x>_<max-x>_<speed-down-x>_<random-chance>_<random-scale>
RANDOM_CUSTOM then adds _<speed-up-x>_<delay-down-x>_<delay-up-x>
RANDOM_SPECIFY you add <key>_<value> pairs, where key is the value you wish to change, and value is value you wish to assign to that key.
[RANDOM_CUSTOM_<min-x>_<max-x>_<speed-down-x>_<random-chance>_<random-scale>_<speed-up>_<delay-down>_<delay-up>]:
[RANDOM_SPECIFY_<min-x>_<max-x>_<speed-down-x>_<random-chance>_<random-scale>_+key-value-pairs-if-desired]:
Operate similarly to how X_CUSTOM does, with the extra parameters described above.
Example 1: [RANDOM_CUSTOM_20_70_80_50_30_60_10_15] will begin oscillating between simulating a mouse at 20% across the game window and 70% across the game window, with a 50/1000 = 5% chance (approximately 1 second on average) to update values to between 0.7 and 1.3 times the values you specified. it will begin by moving right at 80% of maximum speed, and will pause for 10 frames before moving back to the left at 60% of maximum speed, where it will wait for 15 frames before beginning again.
Every time that 5% chance occurs each of those values will be adjusted.
A full list of valid keys is available at the end of this file.
Example 2: [RANDOM_SPECIFY_20_70_80_50_30_dlydown_30] will use the same basis as in example one, but speed-up and delay-up were not specified so speed-up will duplicate speed-down, and delay-up will use the default 3 frames. Therefore she will move between 20-70% across the screen at 80% of maximum speed, pausing for 30 frames on the right end, and 3 frames on the left end. ~once per second it will choose a random value between 70-130% for each component and adjust it that far from your initial settings.
Example 1: [RANDOM_CUSTOM_20_70_80_50_30_60_10_15] will begin oscillating between simulating a mouse at 20% across the game window and 70% across the game window, with a 50/1000 = 5% chance (approximately 1 second on average) to update values to between 0.7 and 1.3 times the values you specified. it will begin by moving right at 80% of maximum speed, and will pause for 10 frames before moving back to the left at 60% of maximum speed, where it will wait for 15 frames before beginning again.
Every time that 5% chance occurs each of those values will be adjusted.
A full list of valid keys is available at the end of this file.
Example 2: [RANDOM_SPECIFY_20_70_80_50_30_dlydown_30] will use the same basis as in example one, but speed-up and delay-up were not specified so speed-up will duplicate speed-down, and delay-up will use the default 3 frames. Therefore she will move between 20-70% across the screen at 80% of maximum speed, pausing for 30 frames on the right end, and 3 frames on the left end. ~once per second it will choose a random value between 70-130% for each component and adjust it that far from your initial settings.
Ramping auto triggers:
The final two triggers are similar, but instead of a random chance, and random scaling, you select the amount you want each value to increase each interval, and how long you want that interval to be. These blocks have rather complex inputs, so be careful when using them.
[RAMP_CUSTOM_<min-x>_<max-x>_<speed-down-x>_<frames-between-increments>_<speed-up>_<delay-down>_<delay-up>_<min-increment>_<max-increment>_
<speed-down-increment>_<speed-up-increment>_<delay-down-increment>_<delay-up-increment>]:
[RAMP_SPECIFY_<min-x>_<max-x>_<speed-down-x>_<frames-between-increments>_<first-key>_<first-value>_+additional-key-value-pairs-if-desired]:
[RAMP_CUSTOM_<min-x>_<max-x>_<speed-down-x>_<frames-between-increments>_<speed-up>_<delay-down>_<delay-up>_<min-increment>_<max-increment>_
<speed-down-increment>_<speed-up-increment>_<delay-down-increment>_<delay-up-increment>]:
[RAMP_SPECIFY_<min-x>_<max-x>_<speed-down-x>_<frames-between-increments>_<first-key>_<first-value>_+additional-key-value-pairs-if-desired]:
Operate as the RANDOM series does, so you will give the base command (CUSTOM or SIMPLE) and append the min, max, speed down, and increment interval to it. min/max/speed increments are in units 1/10 as large as the original values, the increment interval and delays are in frames.
If min becomes greater than max, their values and increments swap so they will begin getting farther apart again. Delays will not go below 1 frame, and speeds will not go below 1% of maximum.
These triggers are VERY large as there are many components you can specify. The result is that you append between 8 and 20 values to the base trigger. CUSTOM you specify every component in order for a total of 13 values, SPECIFY you give <key>_<value> pairs as in the random series, for between 8 and 22 values. Use CUSTOM to decrease the size of trigger if you want to specify all of them.
Example 1: [RAMP_CUSTOM_30_80_50_35_10_15_20_10_-10_50_20_2_-1] Will cause her to begin oscillating between 30-80% of maximum distance, going onto the penis at 50% of max speed, pausing for 15 frames, then moving back off at 10% of maximum speed and pausing for 20 frames before starting over. Every 35 frames the minimum will increase by 1%, the maximum will decrease by 1%, the speed down will increase by 5%, the speed up will increase by 2%, the delay before backing off will increase by 2 frames, and the speed before starting to move right again will decrease by 1 frame.
Example 2: [RAMP_SPECIFY_TIP_CENTER_10_50_dlydown_15_dlyup_20_dlydowninc_1_dlyupinc_-1_spdup_30_spddowninc_-20_spdupinc_30_maxinc_15] will begin oscillation between having her lips at the tip and at the center of the penis, going right at 10% of maximum speed, delaying 15 frames before going back off at 30% maximum speed, and then waiting 20 frames before starting to go right again. Every 50 frames, the maximum depth will increase by 1.5%, speed down will decrease by 2%, speed up will increase by 3%, delay down will increase by 1 frame, and delay up will decrease by 1 frame.
If min becomes greater than max, their values and increments swap so they will begin getting farther apart again. Delays will not go below 1 frame, and speeds will not go below 1% of maximum.
These triggers are VERY large as there are many components you can specify. The result is that you append between 8 and 20 values to the base trigger. CUSTOM you specify every component in order for a total of 13 values, SPECIFY you give <key>_<value> pairs as in the random series, for between 8 and 22 values. Use CUSTOM to decrease the size of trigger if you want to specify all of them.
Example 1: [RAMP_CUSTOM_30_80_50_35_10_15_20_10_-10_50_20_2_-1] Will cause her to begin oscillating between 30-80% of maximum distance, going onto the penis at 50% of max speed, pausing for 15 frames, then moving back off at 10% of maximum speed and pausing for 20 frames before starting over. Every 35 frames the minimum will increase by 1%, the maximum will decrease by 1%, the speed down will increase by 5%, the speed up will increase by 2%, the delay before backing off will increase by 2 frames, and the speed before starting to move right again will decrease by 1 frame.
Example 2: [RAMP_SPECIFY_TIP_CENTER_10_50_dlydown_15_dlyup_20_dlydowninc_1_dlyupinc_-1_spdup_30_spddowninc_-20_spdupinc_30_maxinc_15] will begin oscillation between having her lips at the tip and at the center of the penis, going right at 10% of maximum speed, delaying 15 frames before going back off at 30% maximum speed, and then waiting 20 frames before starting to go right again. Every 50 frames, the maximum depth will increase by 1.5%, speed down will decrease by 2%, speed up will increase by 3%, delay down will increase by 1 frame, and delay up will decrease by 1 frame.
The only KNOWN issues are:
DialogueActions [AUTO_OFF] trigger does NOT turn off the custom triggers, it only returns control to mouse. If you reactivate auto mode by using a hotkey or the auto checkbox the custom setting will turn back on. Use another AUTO trigger or [STOP_CUSTOM] to deactivate a custom setting.
If in [AUTO_CUSTOM_SIMPLE] deep is set to CENTER the throat resistance setting may cause her to stop slightly short of the center if the penis is long enough, as it goes by mouse position at no resistance and the higher the resistance the farther you have to push to get her to throat it.
And finally: If moving her down quickly or on a very large penis within a frame or two of activating the mouse hold she will take the penis in her mouth before the signal that the mouse is being held is processed. Therefore you should put in a 1-2 character delay between setting mouse button to down and giving the movement command. This includes the MOVE_TO_BALLS command, if using a very large penis or high speed, use MOUSE_BUTTON_DOWN with a small delay afterward before triggering the move. Example:
move:"[MOUSE_BUTTON_down]ББ[MOVE_TO_BALLS_90]"
If in [AUTO_CUSTOM_SIMPLE] deep is set to CENTER the throat resistance setting may cause her to stop slightly short of the center if the penis is long enough, as it goes by mouse position at no resistance and the higher the resistance the farther you have to push to get her to throat it.
And finally: If moving her down quickly or on a very large penis within a frame or two of activating the mouse hold she will take the penis in her mouth before the signal that the mouse is being held is processed. Therefore you should put in a 1-2 character delay between setting mouse button to down and giving the movement command. This includes the MOVE_TO_BALLS command, if using a very large penis or high speed, use MOUSE_BUTTON_DOWN with a small delay afterward before triggering the move. Example:
move:"[MOUSE_BUTTON_down]ББ[MOVE_TO_BALLS_90]"
List of valid keys:
Keys valid for all key accepting functions:
MIN: Minimum x value to oscillate to.
MAX: Maximum x value to oscillate to.
SPDDOWN: Movement speed moving on to penis.
SPDUP: Movement speed backing off the penis.
DLYDOWN: Delay in frames before beginning to move off of penis.
DLYUP: Delay in frames before beginning to move back onto penis.
Keys valid for ramping and value_custom functions:
MININC: Amount to increase the minimum x value.
MAXINC: Amount to increase the maximum x value.
SPDUPINC: Amount to increment the speed backing off the penis.
SPDDOWNINC: Amount to increment the speed moving onto the penis.
DLYUPINC: Amount to increment the delay before starting to move onto the penis.
DLYDOWNINC: Amount to increment the delay before starting to back off of the penis.
All keys include a second version for changing Y values, just append Y to the key, i.e. SPDDOWNY to change the Y down speed.
Keys are NOT case-sensitive.
MIN: Minimum x value to oscillate to.
MAX: Maximum x value to oscillate to.
SPDDOWN: Movement speed moving on to penis.
SPDUP: Movement speed backing off the penis.
DLYDOWN: Delay in frames before beginning to move off of penis.
DLYUP: Delay in frames before beginning to move back onto penis.
Keys valid for ramping and value_custom functions:
MININC: Amount to increase the minimum x value.
MAXINC: Amount to increase the maximum x value.
SPDUPINC: Amount to increment the speed backing off the penis.
SPDDOWNINC: Amount to increment the speed moving onto the penis.
DLYUPINC: Amount to increment the delay before starting to move onto the penis.
DLYDOWNINC: Amount to increment the delay before starting to back off of the penis.
All keys include a second version for changing Y values, just append Y to the key, i.e. SPDDOWNY to change the Y down speed.
Keys are NOT case-sensitive.
Advanced Notes:
These notes are for the more complicated functionality of the mod. You should probably understand the functionality outlined in Notes.txt before attempting to use the functionality described in this file.
These triggers/keys allow you to set up conditions, and if they are all filled, jump to a specific line in the dialogue. For example, you may wish to trigger a line ~6 seconds after a activation, with these functions you can do so. Lets say you have the following line:
Example with explanation:
Extra triggers:
Advanced keys:
These triggers/keys allow you to set up conditions, and if they are all filled, jump to a specific line in the dialogue. For example, you may wish to trigger a line ~6 seconds after a activation, with these functions you can do so. Lets say you have the following line:
Example with explanation:
go_deeper:"[RAMP_SPECIFY_0_20_50_30_maxinc_50]"
And you wish to stop increasing max one it reachs 70. Add tests to it as follows:
go_deeper:"[SET_TEST_0_max_70_ge][ACTIVE_TEST_0_on][RAMP_SPECIFY_0_20_50_30_maxinc_50][VALUE_CUSTOM_LINE_bottom-out_TEST_on]"
bottom-out:"[VALUE_CUSTOM_freqinc_1000000]"
Walking through these lines:
The first trigger sets test 0 to compare the current value of maxX to 70, and if maxX >= 70 return true.
The second trigger activates test 0.
The third trigger begins a ramp function, which start off moving between x = 0 and 20 at half of max speed. Every 30 frames maxX will increase by 5.
The fourth trigger uses the LINE keyword to set the line you wish to jump to as 'bottom-out', and then uses the TEST keyword to turn testing on.
At this point, each frame maxX will be checked to see if it is >= 70. If it returns true, then bottom-out will be called.
The trigger in bottom-out then sets the frequency at which X based increases occur to 1 per 1000000 frames, which is over 10 hours. Therefore maxX ceases to increment. (Note, even if you wait that long, the maximum value of count is 360000 after which it resets, so it still won't increment any more.)
You should be aware that when a call is made using a test based callback, it WILL interrupt and replace any dialogue that is already playing, so make sure you are not beginning the test until you are done with any previous dialogue you wish to play.
And you wish to stop increasing max one it reachs 70. Add tests to it as follows:
go_deeper:"[SET_TEST_0_max_70_ge][ACTIVE_TEST_0_on][RAMP_SPECIFY_0_20_50_30_maxinc_50][VALUE_CUSTOM_LINE_bottom-out_TEST_on]"
bottom-out:"[VALUE_CUSTOM_freqinc_1000000]"
Walking through these lines:
The first trigger sets test 0 to compare the current value of maxX to 70, and if maxX >= 70 return true.
The second trigger activates test 0.
The third trigger begins a ramp function, which start off moving between x = 0 and 20 at half of max speed. Every 30 frames maxX will increase by 5.
The fourth trigger uses the LINE keyword to set the line you wish to jump to as 'bottom-out', and then uses the TEST keyword to turn testing on.
At this point, each frame maxX will be checked to see if it is >= 70. If it returns true, then bottom-out will be called.
The trigger in bottom-out then sets the frequency at which X based increases occur to 1 per 1000000 frames, which is over 10 hours. Therefore maxX ceases to increment. (Note, even if you wait that long, the maximum value of count is 360000 after which it resets, so it still won't increment any more.)
You should be aware that when a call is made using a test based callback, it WILL interrupt and replace any dialogue that is already playing, so make sure you are not beginning the test until you are done with any previous dialogue you wish to play.
Extra triggers:
[VALUE_CUSTOM]:
[ACTIVATE_CUSTOM]:
[RANDOM_ACTIVATE_<random-chance>_<random-scale>]:
[RAMP_ACTIVATE_<frames-between-increments>]:
[SET_TEST_<test-number>_<variable-key>_<test-value>_<comparison-operation>]:
[ACTIVE_TEST_<test-number>_<new-state>]:
Allows you to assign a single value as listed at the end of this file. Argument is a key value pair. Intended for use to modify a function that is already active, or to be followed by an ACTIVATE function. May be used to specify Y values that can not otherwise be specified, such as delayDownY, and randomChanceY. This is the only way to set up random/ramping Y values. Multiple values may be set in one trigger, the only limit is the number of values available to be set: 30. Yes, this means it can have SIXTY entries for the 30 key:value pairs, I do not expect anyone to actually use nearly that many, but the option is available.
Example 1: [VALUE_CUSTOM_MIN_30] will change the minimum x value to be 30% across the game window.
Example 2: [VALUE_CUSTOM_MIN_30_MINY_20_RANDCHANY_5] would set minimum x to 30%, minimum Y to 20% and chance for Y values to be adjusted randomly to 0.5%
In order to activate testing using TEST you must have at least one test set and already active, and LINE must have been set, LINE values may not contain an underscore "_", since the trigger reads an underscore as the separator between inputs.
Example 1: [VALUE_CUSTOM_MIN_30] will change the minimum x value to be 30% across the game window.
Example 2: [VALUE_CUSTOM_MIN_30_MINY_20_RANDCHANY_5] would set minimum x to 30%, minimum Y to 20% and chance for Y values to be adjusted randomly to 0.5%
In order to activate testing using TEST you must have at least one test set and already active, and LINE must have been set, LINE values may not contain an underscore "_", since the trigger reads an underscore as the separator between inputs.
[ACTIVATE_CUSTOM]:
Begins an auto function using current values for all settings, intended for use after a [VALUE_CUSTOM] call.
This WILL allow for a function that has set values for all x and y settings, that ramps, and is randomized off of those ramped values if you REALLY want customization.
This WILL allow for a function that has set values for all x and y settings, that ramps, and is randomized off of those ramped values if you REALLY want customization.
[RANDOM_ACTIVATE_<random-chance>_<random-scale>]:
RANDOM_ACTIVATE uses the the current value of all parameters, intended to be used after one or more calls to [VALUE_CUSTOM].
[RAMP_ACTIVATE_<frames-between-increments>]:
RAMP_ACTIVATE uses the the current value of all parameters, intended to be used after one or more calls to [VALUE_CUSTOM].
[SET_TEST_<test-number>_<variable-key>_<test-value>_<comparison-operation>]:
Sets the given test (0-2) to compare the chosen variable (using the keys listed at the bottom of the notes) to the test value using the comparison operator. If a test is not active, then when checked it will return true. Case is only checked for the trigger, not the arguments.
All active tests must return true or the final result will be false.
Comparison values are:
g: Greater than.
ge: Greater than or equal to.
e: Equal to.
le: Less than or equal to.
l: Less than.
Example 1: [SET_TEST_1_MAX_50_le] will set test 1 to check if the current maximum x value is less than/equal to 50.
Example 2: [SET_TEST_0_COUNT_80_g] will set test 0 to check if it has been more than 80 frames since testing was activated.
If testing against COUNT, the timer does not begin until you have successfully activated testing using VALUE_CUSTOM_test_on.
All active tests must return true or the final result will be false.
Comparison values are:
g: Greater than.
ge: Greater than or equal to.
e: Equal to.
le: Less than or equal to.
l: Less than.
Example 1: [SET_TEST_1_MAX_50_le] will set test 1 to check if the current maximum x value is less than/equal to 50.
Example 2: [SET_TEST_0_COUNT_80_g] will set test 0 to check if it has been more than 80 frames since testing was activated.
If testing against COUNT, the timer does not begin until you have successfully activated testing using VALUE_CUSTOM_test_on.
[ACTIVE_TEST_<test-number>_<new-state>]:
Activates/Deactivates the selected test. test-number may be 0, 1, or 2. new-state must be 'on' or 'off', case does not matter for the arguments.
The test you wish to activate must have already been set using SET_TEST.
Example 1: [ACTIVE_TEST_0_on]: sets test 0 to active.
Example 2: [ACTIVE_TEST_1_off]: sets test 1 to inactive.
The test you wish to activate must have already been set using SET_TEST.
Example 1: [ACTIVE_TEST_0_on]: sets test 0 to active.
Example 2: [ACTIVE_TEST_1_off]: sets test 1 to inactive.
Advanced keys:
Keys valid only for the VALUE_CUSTOM function:
Keys valid only for SET_TEST function:
To change the Y version of freqinc, randchan, randscale, or current, just append Y to the end of the key: randchany alters the random chance of y values changing.
FREQINC: Number of frames between ramp increases.
RANDCHAN: Chance in units of 1/10 of 1% that the randomized update will occur.
RANDSCALE: Maximum percentage to scale entered values when randomized update occurs, may scale up or down by that percentage.
LINE: Line to jump to when conditions are fulfilled.
TEST: Sets testing on or off.
RANDCHAN: Chance in units of 1/10 of 1% that the randomized update will occur.
RANDSCALE: Maximum percentage to scale entered values when randomized update occurs, may scale up or down by that percentage.
LINE: Line to jump to when conditions are fulfilled.
TEST: Sets testing on or off.
Keys valid only for SET_TEST function:
CURRENT: Tests against the last recorded X position.
COUNT: Tests against the number of frames since testing was activated.
COUNT: Tests against the number of frames since testing was activated.
I have added a semi-beta version of the final product. Download is in the file list, notes on changes/additions follow, all changes affect Advanced functionality only:
VALUE_CUSTOM:
SET_TEST:
Keys valid only for SET_TEST function:
Additionally, by placing a '+' behind the value, you may adjust the value by that amount instead of setting it to that amount. i.e. [VALUE_CUSTOM_max_+-5] will add -5 to maxX. So if maxX was 50, it will now be 45.
SET_TEST:
Format is now:
[SET_TEST_<test-number>_<variable-key>_<test-value>_<comparison-operation>_<(optional)adjustment-values>_<(optional)Maximum-number-of-adjustments>]
The optional values (both must be included if either is included) allow you to specify changes to be made when that test is true, and a number of times that adjustment can be made. The format for the values is the same as for VALUE_CUSTOM except ~ replaces _.
Example 3: [SET_TEST_1_MOVE_DOWN_max~+2~spddown~+3_5] will set test 1 to check if the she just reached her maximum depth, and if so will return true. The first 5 times it returns true it will also increase maxX by 2 and speedDownX by 3.
[SET_TEST_<test-number>_<variable-key>_<test-value>_<comparison-operation>_<(optional)adjustment-values>_<(optional)Maximum-number-of-adjustments>]
The optional values (both must be included if either is included) allow you to specify changes to be made when that test is true, and a number of times that adjustment can be made. The format for the values is the same as for VALUE_CUSTOM except ~ replaces _.
Example 3: [SET_TEST_1_MOVE_DOWN_max~+2~spddown~+3_5] will set test 1 to check if the she just reached her maximum depth, and if so will return true. The first 5 times it returns true it will also increase maxX by 2 and speedDownX by 3.
Keys valid only for SET_TEST function:
MOVE: Tests her current movement to see where she is in that movement. Returns one of 4 values:
1: If she just reached maxX that frame: "DOWN"
2: If she just reached minX that frame: "UP"
3: If she is moving towards maxX: "GODOWN"
4: If she is moving towards minX: "GOUP"
After the frame from 1 and 2, for the rest of the delay it will count as 3 and 4 respectively.
1: If she just reached maxX that frame: "DOWN"
2: If she just reached minX that frame: "UP"
3: If she is moving towards maxX: "GODOWN"
4: If she is moving towards minX: "GOUP"
After the frame from 1 and 2, for the rest of the delay it will count as 3 and 4 respectively.
Individual updates:
Version 6.1:
Version 5.0:
Version 4.x:
Version 3.2:
Version 3.1:
Version 3:
Version 2 post:
Version 1 post:
Version 0.5 post:
Information:
Link:
This is my first Mod attempt. I believe I have most of the bugs worked out, but let me know if you find any.
This mod adds 20 dialogue triggers.
Changes by version:
Mod triggers:
This mod adds 20 dialogue triggers.
Changes by version:
v6.1: bug fix for value_custom + ramping, many extra configuration options from value_custom.
v6: overhauled code to be more stable/have more options. Too many changes to list indivually, new functions/inputs below.
v5: added trigger to automate breaking through initial resistance, allows you to specify speed she moves down, and speed she moves back up seperately.
Mainly added to handle very large penis sizes where the other auto functions won't keep her pulled off long enough for the animation to clear her mouth, so it will not decrease her resistance further leading to never getting a deepthroat.
v4.2:Fixed major problem preventing custom functions from operating.
Logic changed/simplified to be much more reliable in most cases for very fast/slow automations.
v4.1: The mouse release was not occurring after a hold to balls trigger was used followed by a normal trigger so until a base auto function or stop_custom was called, or the player pressed and released the mouse button she would not take it in her mouth again. This has been fixed and the other triggers will release the hold.
v4: Fixed issue with non-oral positions always trying to reset to get in the penis in her mouth, and added 3 more new triggers: [START_LICKING_<speed>], [PRESS_BALLS_<speed>], and [MOVE_TONGUE_<IN/OUT>.
v3.2: Fixed [STOP_CUSTOM] trigger, and allowed slower speeds for [POSITION_CUSTOM], also made it less likely that the fix from 3.1 would trigger when it should not due to built in movement from breathing during very slow movements.
v3.1: Fixed issue with "missing" as the penis passes her mouth, so she just went alongside it.
v6: overhauled code to be more stable/have more options. Too many changes to list indivually, new functions/inputs below.
v5: added trigger to automate breaking through initial resistance, allows you to specify speed she moves down, and speed she moves back up seperately.
Mainly added to handle very large penis sizes where the other auto functions won't keep her pulled off long enough for the animation to clear her mouth, so it will not decrease her resistance further leading to never getting a deepthroat.
v4.2:Fixed major problem preventing custom functions from operating.
Logic changed/simplified to be much more reliable in most cases for very fast/slow automations.
v4.1: The mouse release was not occurring after a hold to balls trigger was used followed by a normal trigger so until a base auto function or stop_custom was called, or the player pressed and released the mouse button she would not take it in her mouth again. This has been fixed and the other triggers will release the hold.
v4: Fixed issue with non-oral positions always trying to reset to get in the penis in her mouth, and added 3 more new triggers: [START_LICKING_<speed>], [PRESS_BALLS_<speed>], and [MOVE_TONGUE_<IN/OUT>.
v3.2: Fixed [STOP_CUSTOM] trigger, and allowed slower speeds for [POSITION_CUSTOM], also made it less likely that the fix from 3.1 would trigger when it should not due to built in movement from breathing during very slow movements.
v3.1: Fixed issue with "missing" as the penis passes her mouth, so she just went alongside it.
Mod triggers:
[INIT_RESISTANCE_<level>]:
[HOLD_CUSTOM]:
[STOP_CUSTOM]:
[PAUSE_CUSTOM]:
[CONTINUE_CUSTOM]:
[MOUSE_BUTTON_<position>]:
[MOVE_TO_BALLS_<speed>]:
[MOVE_TONGUE]:
[VALUE_CUSTOM]:
[ACTIVATE_CUSTOM]:
[INIT_RESIST_BREAK_<speed-going-down>_<(optional)speed-going-up>]:
For the following triggers, all values should be between 0 and 100. All x/y coordinates are percentages of maximum value, they represent mouse positions when auto is off. so x = 30 represents the mouse being placed 30% of the way across the screen from left to right. X coordinates can be replaced with words that will calculate the appropriate position automatically, these are:
To overcome initial resistance the penis MUST actually exit her mouth before pressing back in.
[X_CUSTOM_<min-x-coordinate>_<max-x-coordinate>_<x-speed-down>_<(optional)x-speed-up>)_<(optional)x-delay-down>_<(optional)x-delay-up>]:
[FULL_CUSTOM_<min-x-coordinate>_<max-x-coordinate>_<x-speed-down>_<min-y-coordinate>_<max-y-coordinate>_<y-speed-down>_<(optional)x-speed-up>_<(optional)y-speed-up>_<(optional)x-delay-down>_<(optional)x-delay-up>]:
[POSITION_CUSTOM_<x-coordinate>_<y-coordinate>_<speed>]:
The next three triggers act the same, and have the same initial parameters as the X_CUSTOM triggers, but more parameters are added to each:
[RANDOM_CUSTOM_<min-x>_<max-x>_<speed-down-x>_<random-chance>_<random-scale>_<speed-up>_<delay-down>_<delay-up>]:
[RANDOM_SPECIFY_<min-x>_<max-x>_<speed-down-x>_<random-chance>_<random-scale>_+key-value-pairs-if-desired]:
[RANDOM_ACTIVATE_<random-chance>_<random-scale>]:
The final three triggers are similar, but instead of a random chance, and random scaling, you select the amount you want each value to increase each interval, and how long you want that interval to be. These blocks have rather complex inputs, so be careful when using them.
[RAMP_CUSTOM_<min-x>_<max-x>_<speed-down-x>_<frames-between-increments>_<speed-up>_<delay-down>_<delay-up>_<min-increment>_<max-increment>_
<speed-down-increment>_<speed-up-increment>_<delay-down-increment>_<delay-up-increment>]:
[RAMP_SPECIFY_<min-x>_<max-x>_<speed-down-x>_<frames-between-increments>_<first-key>_<first-value>_+additional-key-value-pairs-if-desired]:
[RAMP_ACTIVATE_<frames-between-increments>]:
The only KNOWN issues are:
List of valid keys:
Sets the initial resistance to value that replaces <level>
Example: [INIT_RESISTANCE_75] will set the initial resistance to 75.
Example: [INIT_RESISTANCE_75] will set the initial resistance to 75.
[HOLD_CUSTOM]:
Locks him/her in position so no movement will occur until command is canceled with an AUTO
setting, or another CUSTOM command.
setting, or another CUSTOM command.
[STOP_CUSTOM]:
Cancels the current CUSTOM command.
[PAUSE_CUSTOM]:
Freezes the current custom automation.
[CONTINUE_CUSTOM]:
Unfreezes the current custom animation, picking up exactly where it left off when pasue_animation was used.
[MOUSE_BUTTON_<position>]:
Simulates holding/releasing the left mouse button, position = down holds down, up releases, position is not case-sensitive. This allows for the dialogue writer to pull her up/down or move her alongside the penis.
[MOVE_TO_BALLS_<speed>]:
Moves her down to his balls. Speed argument specifies how fast she moves to his balls, if above ~60 or on very large penises may not activate mouse hold quickly enough. To insure it works properly, recommend using MOUSE_BUTTON_DOWN first.
[MOVE_TONGUE]:
Toggles tongue on or off, if the argument is either 'in', the tongue will be toggled off, if the srgument is 'out' otherwise it will be toggled on, the argument is not case-sensitive.
[VALUE_CUSTOM]:
Allows you to assign a single value as listed at the end of this file. Argument is a key value pair. Intended for use to modify a function that is already active, or to be followed by an ACTIVATE function.
May be used to specify Y values that can not otherwise be specified, such as delayDownY, and randomChanceY. This is the only way to set up random/ramping Y values.
Multiple values may be set in one trigger, the only limit is the number of values available to be set: 30. Yes, this means it can have SIXTY entries for the 30 key:value pairs, I do not expect anyone to actually use nearly that many though, but the option is available.
Example 1: [VALUE_CUSTOM_MIN_30] will change the minimum x value to be 30% across the game window.
Example 2: [VALUE_CUSTOM_MIN_30_MINY_20_RANDCHANY_5] would set minimum x to 30%, minimum Y to 20% and chance for Y values to be adjusted randomly to 0.5%
May be used to specify Y values that can not otherwise be specified, such as delayDownY, and randomChanceY. This is the only way to set up random/ramping Y values.
Multiple values may be set in one trigger, the only limit is the number of values available to be set: 30. Yes, this means it can have SIXTY entries for the 30 key:value pairs, I do not expect anyone to actually use nearly that many though, but the option is available.
Example 1: [VALUE_CUSTOM_MIN_30] will change the minimum x value to be 30% across the game window.
Example 2: [VALUE_CUSTOM_MIN_30_MINY_20_RANDCHANY_5] would set minimum x to 30%, minimum Y to 20% and chance for Y values to be adjusted randomly to 0.5%
[ACTIVATE_CUSTOM]:
Begins an auto function using current values for all settings, intended for use after a [VALUE_CUSTOM] call.
This WILL allow for a function that has set values for all x and y settings, that ramps, and is randomized off of those ramped values if you REALLY want customization.
This WILL allow for a function that has set values for all x and y settings, that ramps, and is randomized off of those ramped values if you REALLY want customization.
[INIT_RESIST_BREAK_<speed-going-down>_<(optional)speed-going-up>]:
Moves her up and down his penis with slight pauses (4 frames, or about 0.15 seconds) to allow animation to catch up. This allows her to clear his penis even at very high speeds so initial resistance will continue to degrade allowing an eventual deep throat. With the other custom triggers, at high speeds the animation would not catch up to the position fast enough, so she would begin going back down before she actually came off the penis. When pulling her off, it stops with a small (10-15 pixel) gap between her lips and the tip of the penis.
Example:
[INIT_RESIST_BREAK_100_20] would force her all the way down at 100% of max speed, then pull her back off at 20% speed.
Example:
[INIT_RESIST_BREAK_100_20] would force her all the way down at 100% of max speed, then pull her back off at 20% speed.
For the following triggers, all values should be between 0 and 100. All x/y coordinates are percentages of maximum value, they represent mouse positions when auto is off. so x = 30 represents the mouse being placed 30% of the way across the screen from left to right. X coordinates can be replaced with words that will calculate the appropriate position automatically, these are:
'off': sets position to 0%.
'tip': places her lips near the tip of the penis.
'head':places her lips at the base of the head of the penis.
'center': attempts to place her lips at the center of the penis, value is calculated from initial resistance broken and no throat resist.
'hilt': attempts to place her all the way down the penis. Again, affected by current resistances.
'tip': places her lips near the tip of the penis.
'head':places her lips at the base of the head of the penis.
'center': attempts to place her lips at the center of the penis, value is calculated from initial resistance broken and no throat resist.
'hilt': attempts to place her all the way down the penis. Again, affected by current resistances.
To overcome initial resistance the penis MUST actually exit her mouth before pressing back in.
[X_CUSTOM_<min-x-coordinate>_<max-x-coordinate>_<x-speed-down>_<(optional)x-speed-up>)_<(optional)x-delay-down>_<(optional)x-delay-up>]:
Sets up a custom automation with default y values, only specify x values. Optional triggers have default values if unspecified, but you cannot skip them. So to do x-delay-down you MUST specify x-speed-up first. if speed/delay up are not set, they default to the value set for the down version. Delay down defaults to 3 frames.
Example 1: [X_CUSTOM_20_50_40] will move between a simulated mouse at 20%, and 50% and back at 40% of the maximum speed, at each end point it will stay for 3 frames before reversing directions.
Example 2: [X_CUSTOM_20_50_40_70_15] will move from a simulated mouse at 20%, over to 50% at 40% of max speed, it will then stay there for 15 frames before moving back from 50% to 20% at 70% of maximum speed where it will stay for another 15 frames before beginning again.
Example 3: [X_CUSTOM_tip_center_40_70_15_20] will move her lips from the tip of the penis to the center of the penis at 40% of max speed, it will then stay there for 15 frames before moving back from the center to the tip at 70% of maximum speed where it will stay for 20 frames before beginning again.
Example 1: [X_CUSTOM_20_50_40] will move between a simulated mouse at 20%, and 50% and back at 40% of the maximum speed, at each end point it will stay for 3 frames before reversing directions.
Example 2: [X_CUSTOM_20_50_40_70_15] will move from a simulated mouse at 20%, over to 50% at 40% of max speed, it will then stay there for 15 frames before moving back from 50% to 20% at 70% of maximum speed where it will stay for another 15 frames before beginning again.
Example 3: [X_CUSTOM_tip_center_40_70_15_20] will move her lips from the tip of the penis to the center of the penis at 40% of max speed, it will then stay there for 15 frames before moving back from the center to the tip at 70% of maximum speed where it will stay for 20 frames before beginning again.
[FULL_CUSTOM_<min-x-coordinate>_<max-x-coordinate>_<x-speed-down>_<min-y-coordinate>_<max-y-coordinate>_<y-speed-down>_<(optional)x-speed-up>_<(optional)y-speed-up>_<(optional)x-delay-down>_<(optional)x-delay-up>]:
Same as previous except y values are also specified, y delays are not currently adjustable due to lack of visibility and size of trigger result.
[POSITION_CUSTOM_<x-coordinate>_<y-coordinate>_<speed>]:
This trigger works much the same as the FULL and X triggers, but it smoothly transitions to the
specified point and stays there until another command, such as [AUTO_HARD] or [X_CUSTOM] is given.
Example: [POSITION_CUSTOM_tip_80_40] would cause her to move her lips to the tip of his penis, with the mouse simulated at 80% of the way down the screen. This movement will be at 40% of the maximum speed.
specified point and stays there until another command, such as [AUTO_HARD] or [X_CUSTOM] is given.
Example: [POSITION_CUSTOM_tip_80_40] would cause her to move her lips to the tip of his penis, with the mouse simulated at 80% of the way down the screen. This movement will be at 40% of the maximum speed.
The next three triggers act the same, and have the same initial parameters as the X_CUSTOM triggers, but more parameters are added to each:
First is the random chance, this is the chance that it will update the current min/max, speed up/down, and delay up/down of the animation. The chance is equal to this parameter/1000 and can range from 0-1000. It is HIGHLY recommended that you stay under 100, as that would average out to a new set of values every 10 frames or ~.33 seconds.
The second new parameter is the range you want the random adjustments to occur in, i.e. if this parameter is 30, all parameters will be between 70% and 130% of the original value. For delay this is rounded off as delays are measured in frames. For min/max, the change is calculated from the average of the two, and then added to the original value i.e. if min = 20 and max = 50 with a random scale of 0.2, to update min, we take average min/max = 35 * 0.2 = 7, min + 7 = 27 so now it would be 27-50. The same would be done for max.
Each item has the scale calculated individually so if the given scale is 20% (parameter = 20) each would be multiplied by 0.8-1.2. One may be multiplied by 1.15 while another might get 0.83, they are independent of each other.
Note: Every time the values are updated, the values are taken from the GIVEN parameters not the current ones. So it will NOT stack as time goes on, these blocks have rather complex inputs, so be careful when using them.
RANDOM_CUSTOM requires you to specify EVERY value, while RANDOM_SPECIFY require min/max, speedDown, randomChance, and randomScale, then choose which additional components you wish to change. both start with TRIGGER_<min-x>_<max-x>_<speed-down-x>_<random-chance>_<random-scale>
RANDOM_CUSTOM then adds _<speed-up-x>_<delay-down-x>_<delay-up-x>
RANDOM_SPECIFY you add <key>_<value> pairs, where key is the value you wish to change, and value is value you wish to assign to that key.
The second new parameter is the range you want the random adjustments to occur in, i.e. if this parameter is 30, all parameters will be between 70% and 130% of the original value. For delay this is rounded off as delays are measured in frames. For min/max, the change is calculated from the average of the two, and then added to the original value i.e. if min = 20 and max = 50 with a random scale of 0.2, to update min, we take average min/max = 35 * 0.2 = 7, min + 7 = 27 so now it would be 27-50. The same would be done for max.
Each item has the scale calculated individually so if the given scale is 20% (parameter = 20) each would be multiplied by 0.8-1.2. One may be multiplied by 1.15 while another might get 0.83, they are independent of each other.
Note: Every time the values are updated, the values are taken from the GIVEN parameters not the current ones. So it will NOT stack as time goes on, these blocks have rather complex inputs, so be careful when using them.
RANDOM_CUSTOM requires you to specify EVERY value, while RANDOM_SPECIFY require min/max, speedDown, randomChance, and randomScale, then choose which additional components you wish to change. both start with TRIGGER_<min-x>_<max-x>_<speed-down-x>_<random-chance>_<random-scale>
RANDOM_CUSTOM then adds _<speed-up-x>_<delay-down-x>_<delay-up-x>
RANDOM_SPECIFY you add <key>_<value> pairs, where key is the value you wish to change, and value is value you wish to assign to that key.
[RANDOM_CUSTOM_<min-x>_<max-x>_<speed-down-x>_<random-chance>_<random-scale>_<speed-up>_<delay-down>_<delay-up>]:
[RANDOM_SPECIFY_<min-x>_<max-x>_<speed-down-x>_<random-chance>_<random-scale>_+key-value-pairs-if-desired]:
[RANDOM_ACTIVATE_<random-chance>_<random-scale>]:
Operate similarly to how X_CUSTOM does, with the extra parameters described above.
RANDOM_ACTIVATE uses the the current value of all parameters, intended to be used after one or more calls to [VALUE_CUSTOM].
Example 1: [RANDOM_CUSTOM_20_70_80_50_30_60_10_15] will begin oscillating between simulating a mouse at 20% across the game window and 70% across the game window, with a 50/1000 = 5% chance (approximately 1 second on average) to update values to between 0.7 and 1.3 times the values you specified. it will begin by moving right at 80% of maximum speed, and will pause for 10 frames before moving back to the left at 60% of maximum speed, where it will wait for 15 frames before beginning again.
Every time that 5% chance occurs each of those values will be adjusted.
A full list of valid keys is available at the end of this file.
Example 2: [RANDOM_SPECIFY_20_70_80_50_30_dlydown_30] will use the same basis as in example one, but speed-up and delay-up were not specified so speed-up will duplicate speed-down, and delay-up will use the default 3 frames. Therefore she will move between 20-70% across the screen at 80% of maximum speed, pausing for 30 frames on the right end, and 3 frames on the left end. ~once per second it will choose a random value between 70-130% for each component and adjust it that far from your initial settings.
RANDOM_ACTIVATE uses the the current value of all parameters, intended to be used after one or more calls to [VALUE_CUSTOM].
Example 1: [RANDOM_CUSTOM_20_70_80_50_30_60_10_15] will begin oscillating between simulating a mouse at 20% across the game window and 70% across the game window, with a 50/1000 = 5% chance (approximately 1 second on average) to update values to between 0.7 and 1.3 times the values you specified. it will begin by moving right at 80% of maximum speed, and will pause for 10 frames before moving back to the left at 60% of maximum speed, where it will wait for 15 frames before beginning again.
Every time that 5% chance occurs each of those values will be adjusted.
A full list of valid keys is available at the end of this file.
Example 2: [RANDOM_SPECIFY_20_70_80_50_30_dlydown_30] will use the same basis as in example one, but speed-up and delay-up were not specified so speed-up will duplicate speed-down, and delay-up will use the default 3 frames. Therefore she will move between 20-70% across the screen at 80% of maximum speed, pausing for 30 frames on the right end, and 3 frames on the left end. ~once per second it will choose a random value between 70-130% for each component and adjust it that far from your initial settings.
The final three triggers are similar, but instead of a random chance, and random scaling, you select the amount you want each value to increase each interval, and how long you want that interval to be. These blocks have rather complex inputs, so be careful when using them.
[RAMP_CUSTOM_<min-x>_<max-x>_<speed-down-x>_<frames-between-increments>_<speed-up>_<delay-down>_<delay-up>_<min-increment>_<max-increment>_
<speed-down-increment>_<speed-up-increment>_<delay-down-increment>_<delay-up-increment>]:
[RAMP_SPECIFY_<min-x>_<max-x>_<speed-down-x>_<frames-between-increments>_<first-key>_<first-value>_+additional-key-value-pairs-if-desired]:
[RAMP_ACTIVATE_<frames-between-increments>]:
Operate as the RANDOM series does, so you will give the base command (CUSTOM or SIMPLE) and append the min, max, speed down, and increment interval to it. min/max/speed increments are in units 1/10 as large as the original values, the increment interval and delays are in frames.
If min becomes greater than max, their values and increments swap so they will begin getting farther apart again. Delays will not go below 1 frame, and speeds will not go below 1% of maximum.
These triggers are VERY large as there are many components you can specify. The result is that you append between 8 and 20 values to the base trigger. CUSTOM you specify every component in order for a total of 13 values, SPECIFY you give <key>_<value> pairs as in the random series, for between 8 and 22 values. Use CUSTOM to decrease the size of trigger if you want to specify all of them.
RAMP_ACTIVATE uses the the current value of all parameters, intended to be used after one or more calls to [VALUE_CUSTOM].
Example 1: [RAMP_CUSTOM_30_80_50_35_10_15_20_10_-10_50_20_2_-1] Will cause her to begin oscillating between 30-80% of maximum distance, going onto the penis at 50% of max speed, pausing for 15 frames, then moving back off at 10% of maximum speed and pausing for 20 frames before starting over. Every 35 frames the minimum will increase by 1%, the maximum will decrease by 1%, the speed down will increase by 5%, the speed up will increase by 2%, the delay before backing off will increase by 2 frames, and the speed before starting to move right again will decrease by 1 frame.
Example 2: [RAMP_SPECIFY_TIP_CENTER_10_50_dlydown_15_dlyup_20_dlydowninc_1_dlyupinc_-1_spdup_30_spddowninc_-20_spdupinc_30_maxinc_15] will begin oscillation between having her lips at the tip and at the center of the penis, going right at 10% of maximum speed, delaying 15 frames before going back off at 30% maximum speed, and then waiting 20 frames before starting to go right again. Every 50 frames, the maximum depth will increase by 1.5%, speed down will decrease by 2%, speed up will increase by 3%, delay down will increase by 1 frame, and delay up will decrease by 1 frame.
If min becomes greater than max, their values and increments swap so they will begin getting farther apart again. Delays will not go below 1 frame, and speeds will not go below 1% of maximum.
These triggers are VERY large as there are many components you can specify. The result is that you append between 8 and 20 values to the base trigger. CUSTOM you specify every component in order for a total of 13 values, SPECIFY you give <key>_<value> pairs as in the random series, for between 8 and 22 values. Use CUSTOM to decrease the size of trigger if you want to specify all of them.
RAMP_ACTIVATE uses the the current value of all parameters, intended to be used after one or more calls to [VALUE_CUSTOM].
Example 1: [RAMP_CUSTOM_30_80_50_35_10_15_20_10_-10_50_20_2_-1] Will cause her to begin oscillating between 30-80% of maximum distance, going onto the penis at 50% of max speed, pausing for 15 frames, then moving back off at 10% of maximum speed and pausing for 20 frames before starting over. Every 35 frames the minimum will increase by 1%, the maximum will decrease by 1%, the speed down will increase by 5%, the speed up will increase by 2%, the delay before backing off will increase by 2 frames, and the speed before starting to move right again will decrease by 1 frame.
Example 2: [RAMP_SPECIFY_TIP_CENTER_10_50_dlydown_15_dlyup_20_dlydowninc_1_dlyupinc_-1_spdup_30_spddowninc_-20_spdupinc_30_maxinc_15] will begin oscillation between having her lips at the tip and at the center of the penis, going right at 10% of maximum speed, delaying 15 frames before going back off at 30% maximum speed, and then waiting 20 frames before starting to go right again. Every 50 frames, the maximum depth will increase by 1.5%, speed down will decrease by 2%, speed up will increase by 3%, delay down will increase by 1 frame, and delay up will decrease by 1 frame.
The only KNOWN issues are:
DialogueActions [AUTO_OFF] trigger does NOT turn off the custom triggers, it only returns control to mouse. If you reactivate auto mode by using a hotkey or the auto checkbox the custom setting will turn back on. Use another AUTO trigger or [STOP_CUSTOM] to deactivate a custom setting.
If in [AUTO_CUSTOM_SIMPLE] deep is set to CENTER the throat resistance setting may cause her to stop slightly short of the center if the penis is long enough, as it goes by mouse position at no resistance and the higher the resistance the farther you have to push to get her to throat it.
If a ramping action runs for more than 3.5 hours, there will be one extra increment for each ~3.5 hours it runs (VERY unlikely to be a problem, as this resets anytime an auto command other than pause/continue is issued, not to mention it is unlikely that you are not at the maximum for that item by that time.)
And finally: If moving her down quickly or on a very large penis within a frame or two of activating the mouse hold she will take the penis in her mouth before the signal that the mouse is being held is processed. Therefore you should put in a 1-2 character delay between setting mouse button to down and giving the movement command. This includes the MOVE_TO_BALLS command, if using a very large penis or high speed, use MOUSE_BUTTON_DOWN with a small delay afterward before triggering the move. Example:
move:"[MOUSE_BUTTON_down]ББ[MOVE_TO_BALLS_90]"
If in [AUTO_CUSTOM_SIMPLE] deep is set to CENTER the throat resistance setting may cause her to stop slightly short of the center if the penis is long enough, as it goes by mouse position at no resistance and the higher the resistance the farther you have to push to get her to throat it.
If a ramping action runs for more than 3.5 hours, there will be one extra increment for each ~3.5 hours it runs (VERY unlikely to be a problem, as this resets anytime an auto command other than pause/continue is issued, not to mention it is unlikely that you are not at the maximum for that item by that time.)
And finally: If moving her down quickly or on a very large penis within a frame or two of activating the mouse hold she will take the penis in her mouth before the signal that the mouse is being held is processed. Therefore you should put in a 1-2 character delay between setting mouse button to down and giving the movement command. This includes the MOVE_TO_BALLS command, if using a very large penis or high speed, use MOUSE_BUTTON_DOWN with a small delay afterward before triggering the move. Example:
move:"[MOUSE_BUTTON_down]ББ[MOVE_TO_BALLS_90]"
List of valid keys:
MIN: Minimum x value to oscillate to.
MAX: Maximum x value to oscillate to.
SPDDOWN: Movement speed moving on to penis.
SPDUP: Movement speed backing off the penis.
DLYDOWN: Delay in frames before beginning to move off of penis.
DLYUP: Delay in frames before beginning to move back onto penis.
MININC: Amount to increase the minimum x value.
MAXINC: Amount to increase the maximum x value.
SPDUPINC: Amount to increment the speed backing off the penis.
SPDDOWNINC: Amount to increment the speed moving onto the penis.
DLYUPINC: Amount to increment the delay before starting to move onto the penis.
DLYDOWNINC: Amount to increment the delay before starting to back off of the penis.
FREQINC: Number of frames between ramp increases.
RANDCHAN: Chance in units of 1/10 of 1% that the randomized update will occur.
RANDSCALE: Maximum percentage to scale entered values when randomized update occurs, may scale up or down by that percentage.
All keys include a second version for changing Y values, just append Y to the key, i.e. SPDDOWNY to change the Y down speed.
Keys are NOT case-sensitive.
MAX: Maximum x value to oscillate to.
SPDDOWN: Movement speed moving on to penis.
SPDUP: Movement speed backing off the penis.
DLYDOWN: Delay in frames before beginning to move off of penis.
DLYUP: Delay in frames before beginning to move back onto penis.
MININC: Amount to increase the minimum x value.
MAXINC: Amount to increase the maximum x value.
SPDUPINC: Amount to increment the speed backing off the penis.
SPDDOWNINC: Amount to increment the speed moving onto the penis.
DLYUPINC: Amount to increment the delay before starting to move onto the penis.
DLYDOWNINC: Amount to increment the delay before starting to back off of the penis.
FREQINC: Number of frames between ramp increases.
RANDCHAN: Chance in units of 1/10 of 1% that the randomized update will occur.
RANDSCALE: Maximum percentage to scale entered values when randomized update occurs, may scale up or down by that percentage.
All keys include a second version for changing Y values, just append Y to the key, i.e. SPDDOWNY to change the Y down speed.
Keys are NOT case-sensitive.
Version 5.0:
Information:
Link:
This is my first Mod attempt. I believe I have most of the bugs worked out, but let me know if you find any.
This mod adds 18 dialogue triggers.
[INIT_RESISTANCE_<level>]:
[HOLD_CUSTOM]:
[STOP_CUSTOM]:
[PAUSE_CUSTOM]:
[CONTINUE_CUSTOM]:
[START_LICKING_<speed>]:
[PRESS_BALLS_<speed>]:
[MOVE_TONGUE]:
[INIT_RESIST_BREAK_<speed-going-down>_<speed-going-up>]:
Details on basic automation triggers:
[POSITION_CUSTOM_<target_x_coordinate>_<target_y_coordinate>_<speed>]:
[AUTO_CUSTOM_X_<target x coordinate>_<x magnitude>_<x speed>]:
[AUTO_CUSTOM_FULL_<target x coordinate>_<x magnitude>_<x speed>_<target y coordinate>_<y magnitude>_<y speed>]:
[AUTO_CUSTOM_SIMPLE_<shallow_position>_<deep_position>_<speed>]:
Details on the next three triggers:
[AUTO_CUSTOM_RANDOM_FULL]:
[AUTO_CUSTOM_RANDOM_X]:
[AUTO_CUSTOM_RANDOM_SIMPLE]:
Details on the final three triggers:
[AUTO_CUSTOM_RAMP_FULL]:
[AUTO_CUSTOM_RAMP_X]:
[AUTO_CUSTOM_RAMP_SIMPLE]:
Current known issues (unlikely to be corrected anytime soon)
This mod adds 18 dialogue triggers.
[INIT_RESISTANCE_<level>]:
Sets the initial resistance to value that replaces <level>
Example: [INIT_RESISTANCE_75] will set the initial resistance to 75.
Example: [INIT_RESISTANCE_75] will set the initial resistance to 75.
[HOLD_CUSTOM]:
Locks him/her in position so no movement will occur until command is canceled with an AUTO
setting, or another CUSTOM command.
setting, or another CUSTOM command.
[STOP_CUSTOM]:
Cancels the current CUSTOM command.
[PAUSE_CUSTOM]:
Freezes the current custom automation.
[CONTINUE_CUSTOM]:
Unfreezes the current custom animation, picking up exactly where it left off when pause_animation was used.
[START_LICKING_<speed>]:
Moves her down to his balls and causes her to begin licking them. Speed argument specifies how fast she moves to his balls. i.e START_LICKING_20
Speeds work the same as in the other triggers.
If the tongue is not already out when this command is called, give it about 2 seconds to move tongue out before you expect her to actually start licking.
Speeds work the same as in the other triggers.
If the tongue is not already out when this command is called, give it about 2 seconds to move tongue out before you expect her to actually start licking.
[PRESS_BALLS_<speed>]:
Same as START_LICKING but will NOT lick.
[MOVE_TONGUE]:
Toggles tongue on or off, if the argument is either 'IN' or 'in', the tongue will be toggled off, otherwise it will be toggled on.
[INIT_RESIST_BREAK_<speed-going-down>_<speed-going-up>]:
Moves her up and down his penis with slight pauses (5 frames, or about .16-.2 seconds) to allow animation to catch up. This allows her to clear his penis even at very high speeds so initial resistance will continue to degrade allowing an eventual deep throat. With the other custom triggers, at high speeds the animation would not catch up to the position fast enough, so she would begin going back down before she actually came off the penis. When pulling her off, it stops with a small (10-15 pixel) gap between her lips and the tip of the penis.
Example:
[INIT_RESIST_BREAK_100_20] would force her all the way down at 100% of max speed, then pull her back off at 20% speed.
Example:
[INIT_RESIST_BREAK_100_20] would force her all the way down at 100% of max speed, then pull her back off at 20% speed.
Details on basic automation triggers:
For the following triggers, all values should be between 0 and 100. If target coordinate +- magnitude is outside of this range, then a portion of the sin wave will hold her still. Target coordinate sets the mid-point of the sin wave, magnitude determines how far from the center point it moves, and speed determines how fast the sin wave shifts. if magnitude is less than 100, you can increase the speed to keep the animation from slowing down, at a magnitude of 100, max speed is ~ 100, at magnitude 50, max speed is ~ 200. Speed variable is capped at 200 to prevent problems with the synchronization of her animation and the current requested position.
To overcome initial resistance the penis MUST actually exit her mouth before pressing back in.
To overcome initial resistance the penis MUST actually exit her mouth before pressing back in.
[POSITION_CUSTOM_<target_x_coordinate>_<target_y_coordinate>_<speed>]:
This trigger works much the same as the FULL and X triggers, but it smoothly transitions to the specified point and stays there until another command, such as [AUTO_HARD] or AUTO_CUSTOM_FULL] is given. You can also use the position labels from the _SIMPLE set in place of an x coordinate, in which case the y coordinate will be ignored (It must still be present however.)
Example: [POSITION_CUSTOM_50_75_40] would cause her to transition to the point she would be at if the mouse was halfway across the screen, and 3/4ths of the way down the screen at 3/4ths of the maximum speed.
Example 2: [POSITION_CUSTOM_HEAD_75_40] would cause her to move towards the head of the penis until just the head was in her mouth. This would occur at 40% of the maximum speed, and the 75 will not be used.
Example: [POSITION_CUSTOM_50_75_40] would cause her to transition to the point she would be at if the mouse was halfway across the screen, and 3/4ths of the way down the screen at 3/4ths of the maximum speed.
Example 2: [POSITION_CUSTOM_HEAD_75_40] would cause her to move towards the head of the penis until just the head was in her mouth. This would occur at 40% of the maximum speed, and the 75 will not be used.
[AUTO_CUSTOM_X_<target x coordinate>_<x magnitude>_<x speed>]:
Sets up a custom automation with default y values, only specify x values.
Example: [AUTO_CUSTOM_X_100_70_40] Will move between a simulated mouse at 30% of the screen, and 100% and back every (4/40) * 2PI/(180*PI) = ~36 frames. Since 100 is the max, time spent higher than 100 will hold still with the penis fully down her throat. So half the time will be spent pulling out and shoving back in, and the other half will be just held down.
Example: [AUTO_CUSTOM_X_100_70_40] Will move between a simulated mouse at 30% of the screen, and 100% and back every (4/40) * 2PI/(180*PI) = ~36 frames. Since 100 is the max, time spent higher than 100 will hold still with the penis fully down her throat. So half the time will be spent pulling out and shoving back in, and the other half will be just held down.
[AUTO_CUSTOM_FULL_<target x coordinate>_<x magnitude>_<x speed>_<target y coordinate>_<y magnitude>_<y speed>]:
Same as previous except y values are also specified.
[AUTO_CUSTOM_SIMPLE_<shallow_position>_<deep_position>_<speed>]:
This trigger causes her to oscillate between the shallow and deep position specified, at the given speed.
The available options for shallow are: OFF (fully left), TIP (lips just touching head of penis), HEAD (mouth just covering the head of the penis), and CENTER (mid-point of the penis.)
Available options for deep are: TIP, HEAD, CENTER, and HILT (all the way down for full deepthroat.)
Example: [AUTO_CUSTOM_SIMPLE_HEAD_HILT_40] would cause her to oscillate between having just the head in her mouth, and pressed all the way down over the course of ~36 frames.
The available options for shallow are: OFF (fully left), TIP (lips just touching head of penis), HEAD (mouth just covering the head of the penis), and CENTER (mid-point of the penis.)
Available options for deep are: TIP, HEAD, CENTER, and HILT (all the way down for full deepthroat.)
Example: [AUTO_CUSTOM_SIMPLE_HEAD_HILT_40] would cause her to oscillate between having just the head in her mouth, and pressed all the way down over the course of ~36 frames.
Details on the next three triggers:
The next three triggers act the same, and have almost the same parameters as the AUTO_CUSTOM triggers, but two more parameters are added to each:
First is the random chance, this is the chance that it will update the current target point, magnitude, and speed of the animation. The chance is equal to this parameter/1000 and can range from 0-1000. It is HIGHLY recommended that you stay under 100, as that would average out to a new set of values every 10 frames or ~.33 seconds.
The second new parameter is the range you want the random adjustments to occur in, i.e. if this parameter is 30, target, magnitude, and speed will be between 70% and 130% of the original value.
Note: Every time the values are updated, the values are taken from the GIVEN parameters not the current ones. So it will NOT stack as time goes on.
First is the random chance, this is the chance that it will update the current target point, magnitude, and speed of the animation. The chance is equal to this parameter/1000 and can range from 0-1000. It is HIGHLY recommended that you stay under 100, as that would average out to a new set of values every 10 frames or ~.33 seconds.
The second new parameter is the range you want the random adjustments to occur in, i.e. if this parameter is 30, target, magnitude, and speed will be between 70% and 130% of the original value.
Note: Every time the values are updated, the values are taken from the GIVEN parameters not the current ones. So it will NOT stack as time goes on.
[AUTO_CUSTOM_RANDOM_FULL]:
[AUTO_CUSTOM_RANDOM_X]:
[AUTO_CUSTOM_RANDOM_SIMPLE]:
Operate as the AUTO_CUSTOM series do, with the two extra parameters described above.
Example: [AUTO_CUSTOM_RANDOM_X_50_20_80_10_30] will begin oscillating between simulating a mouse at 50% across the screen, with a 20% of screen movement leading to 30% and 70% across the game window at 80% of the maximum speed, with a 10/1000 = 1% chance (approximately 3-5 seconds on average) to update values.
When this 1% chance occurs, the resulting values will be:
Target center position between .7*.5 = 35% and 1.3*.5 = 65% across the screen,
Oscillation distance between 0.2*0.7 = 14% and 0.2*1.3 = 26% of the possible movement range
Speed will be between 0.8*0.7 = 56% and 0.8*1.3 = 104% --> 100% of maximum speed.
Example: [AUTO_CUSTOM_RANDOM_X_50_20_80_10_30] will begin oscillating between simulating a mouse at 50% across the screen, with a 20% of screen movement leading to 30% and 70% across the game window at 80% of the maximum speed, with a 10/1000 = 1% chance (approximately 3-5 seconds on average) to update values.
When this 1% chance occurs, the resulting values will be:
Target center position between .7*.5 = 35% and 1.3*.5 = 65% across the screen,
Oscillation distance between 0.2*0.7 = 14% and 0.2*1.3 = 26% of the possible movement range
Speed will be between 0.8*0.7 = 56% and 0.8*1.3 = 104% --> 100% of maximum speed.
Details on the final three triggers:
The final three triggers are similar, but instead of a random chance, and random scaling, you select the amount you want each value to increase each interval, and how long you want that interval to be. These blocks have rather complex inputs, so be careful when using them.
[AUTO_CUSTOM_RAMP_FULL]:
[AUTO_CUSTOM_RAMP_X]:
[AUTO_CUSTOM_RAMP_SIMPLE]:
Operate as the AUTO_CUSTOM series does, so you will give the base command (full, x, or simple) and append the shift in target_x, magnitude_x, speed_x, and increment interval to it. target and magnitude increments are in units 1/10 as large as the original values, speed is 1/4, and the increment interval is in frames.
Example: [AUTO_CUSTOM_RAMP_X_30_40_50_5_10_15_20] Will function like [AUTO_CUSTOM_X_50_20_80] except that every 20 frames, the target x position will move right 0.5 units, the magnitude will increase by one unit, and speed will increase by 20/4 = 5.
Example: [AUTO_CUSTOM_RAMP_X_30_40_50_5_10_15_20] Will function like [AUTO_CUSTOM_X_50_20_80] except that every 20 frames, the target x position will move right 0.5 units, the magnitude will increase by one unit, and speed will increase by 20/4 = 5.
Current known issues (unlikely to be corrected anytime soon)
DialogueActions [AUTO_OFF] trigger does NOT turn off the custom triggers, it only returns control to mouse. If you reactivate auto mode by using a hotkey or the auto checkbox the custom setting will turn back on. Use another AUTO trigger or [STOP_CUSTOM] to deactivate a custom setting.
If in [AUTO_CUSTOM_SIMPLE] deep is set to CENTER the throat resistance setting may cause her to stop slightly short of the center if the penis is long enough, as it goes by mouse position at no resistance and the higher the resistance the farther you have to push to get her to throat it.
If a ramping action runs for more than 3.5 hours, there will be one extra increment for each ~3.5 hours it runs (VERY unlikely to be a problem, as this resets anytime an auto command other than pause/continue is issued, not to mention it is unlikely that you are not at the maximum for that item by that time.)
If in [AUTO_CUSTOM_SIMPLE] deep is set to CENTER the throat resistance setting may cause her to stop slightly short of the center if the penis is long enough, as it goes by mouse position at no resistance and the higher the resistance the farther you have to push to get her to throat it.
If a ramping action runs for more than 3.5 hours, there will be one extra increment for each ~3.5 hours it runs (VERY unlikely to be a problem, as this resets anytime an auto command other than pause/continue is issued, not to mention it is unlikely that you are not at the maximum for that item by that time.)
Version 4.x:
Information:
Link to 4.2:
4.2: Fixed major problem preventing custom functions from operating.
Logic changed/simplified to be much more reliable in most cases for very fast/slow automations.
4.1: The mouse release was not occurring after a hold to balls trigger was used followed by a normal trigger so until a base auto function or stop_custom was called, or the player pressed and released the mouse button she would not take it in her mouth again. This has been fixed and the other triggers will release the hold.
I am not leaving a link to 4.1 as it has mod breaking bugs in it, sorry for the trouble there.
4.0: Fixed issue with non-oral positions always trying to reset to get in the penis in her mouth, and added 3 more new triggers: [START_LICKING_<speed>], [PRESS_BALLS_<speed>], and [MOVE_TONGUE_<IN/OUT>.
New triggers:
[START_LICKING_<speed>]:
Moves her down to his balls and causes her to begin licking them. Speed argument specifies how fast she moves to his balls.
[PRESS_BALLS_<speed>]:
Same as START_LICKING but will NOT lick.
[MOVE_TONGUE]:
Toggles tongue on or off, if the argument is either 'IN' or 'in', the tongue will be toggled off, otherwise it will be toggled on.
Logic changed/simplified to be much more reliable in most cases for very fast/slow automations.
4.1: The mouse release was not occurring after a hold to balls trigger was used followed by a normal trigger so until a base auto function or stop_custom was called, or the player pressed and released the mouse button she would not take it in her mouth again. This has been fixed and the other triggers will release the hold.
I am not leaving a link to 4.1 as it has mod breaking bugs in it, sorry for the trouble there.
4.0: Fixed issue with non-oral positions always trying to reset to get in the penis in her mouth, and added 3 more new triggers: [START_LICKING_<speed>], [PRESS_BALLS_<speed>], and [MOVE_TONGUE_<IN/OUT>.
New triggers:
[START_LICKING_<speed>]:
Moves her down to his balls and causes her to begin licking them. Speed argument specifies how fast she moves to his balls.
[PRESS_BALLS_<speed>]:
Same as START_LICKING but will NOT lick.
[MOVE_TONGUE]:
Toggles tongue on or off, if the argument is either 'IN' or 'in', the tongue will be toggled off, otherwise it will be toggled on.
Version 3.2:
Information:
Link:
This version fixes [STOP_CUSTOM] trigger, and allows slower speeds for [POSITION_CUSTOM], also made it less likely that the fix from 3.1 will trigger when it should not due to built in movement from breathing during very slow movements. Will now handle speeds as low as 0.1.
Lower values MAY work, but you will have trouble seeing such slow movement and (unlikely) MAY cause issues with one of the correction functions.
Lower values MAY work, but you will have trouble seeing such slow movement and (unlikely) MAY cause issues with one of the correction functions.
Version 3.1:
Fixes problem with her mouth "missing" the penis and traveling alongside it instead, instead of moving back to try again.
MEGA
MEGA
Version 3:
Information:
Link:
Fixed bug with POSITION_CUSTOM that could cause problems when switching from a member of the random set.
Also added the capability to use the position labels from the SIMPLE set in place of the x coordinate in the POSITION_CUSTOM trigger i.e. "TIP", "CENTER" etc.
Details on the three added triggers:
[AUTO_CUSTOM_RAMP_FULL]:
[AUTO_CUSTOM_RAMP_X]:
[AUTO_CUSTOM_RAMP_SIMPLE]:
Current known issues (unlikely to be corrected anytime soon)
Also added the capability to use the position labels from the SIMPLE set in place of the x coordinate in the POSITION_CUSTOM trigger i.e. "TIP", "CENTER" etc.
Details on the three added triggers:
These three triggers are similar, but instead of a random chance, and random scaling, you select the amount you want each value to increase each interval, and how long you want that interval to be. These blocks have rather complex inputs, so be careful when using them.
[AUTO_CUSTOM_RAMP_FULL]:
[AUTO_CUSTOM_RAMP_X]:
[AUTO_CUSTOM_RAMP_SIMPLE]:
Operate as the AUTO_CUSTOM series does, so you will give the base command (full, x, or simple) and append the shift in target_x, magnitude_x, speed_x, and increment interval to it. target and magnitude increments are in units 1/10 as large as the original values, speed is 1/4, and the increment interval is in frames.
Example: [AUTO_CUSTOM_RAMP_X_30_40_50_5_10_15_20] Will function like [AUTO_CUSTOM_X_50_20_80] except that every 20 frames, the target x position will move right 0.5 units, the magnitude will increase by one unit, and speed will increase by 20/4 = 5.
Example: [AUTO_CUSTOM_RAMP_X_30_40_50_5_10_15_20] Will function like [AUTO_CUSTOM_X_50_20_80] except that every 20 frames, the target x position will move right 0.5 units, the magnitude will increase by one unit, and speed will increase by 20/4 = 5.
Current known issues (unlikely to be corrected anytime soon)
DialogueActions [AUTO_OFF] trigger does NOT turn off the custom triggers, it only returns control to mouse. If you reactivate auto mode by using a hotkey or the auto checkbox the custom setting will turn back on. Use another AUTO trigger or [STOP_CUSTOM] to deactivate a custom setting.
If in [AUTO_CUSTOM_SIMPLE] deep is set to CENTER the throat resistance setting may cause her to stop slightly short of the center if the penis is long enough, as it goes by mouse position at no resistance and the higher the resistance the farther you have to push to get her to throat it.
If a ramping action runs for more than 3.5 hours, there will be one extra increment for each ~3.5 hours it runs (VERY unlikely to be a problem, as this resets anytime an auto command other than pause/continue is issued, not to mention it is unlikely that you are not at the maximum for that item by that time.)
If in [AUTO_CUSTOM_SIMPLE] deep is set to CENTER the throat resistance setting may cause her to stop slightly short of the center if the penis is long enough, as it goes by mouse position at no resistance and the higher the resistance the farther you have to push to get her to throat it.
If a ramping action runs for more than 3.5 hours, there will be one extra increment for each ~3.5 hours it runs (VERY unlikely to be a problem, as this resets anytime an auto command other than pause/continue is issued, not to mention it is unlikely that you are not at the maximum for that item by that time.)
Version 2 post:
Information:
Link:
Added a new version of the mod. Added 5 new triggers, and fixed a bug in custom_full and custom_x that kept the speed VERY low.
List of new additions:
List of new additions:
[PAUSE_CUSTOM]:
[CONTINUE_CUSTOM]:
Details you should know about the last three triggers:
[AUTO_CUSTOM_RANDOM_FULL]:
[AUTO_CUSTOM_RANDOM_X]:
[AUTO_CUSTOM_RANDOM_SIMPLE]:
Freezes the current custom automation.
[CONTINUE_CUSTOM]:
Unfreezes the current custom animation, picking up exactly where it left off when pasue_animation was used.
Details you should know about the last three triggers:
The final three triggers act the same, and have almost the same parameters as the AUTO_CUSTOM triggers, but two more parameters are added to each:
First is the random chance, this is the chance that it will update the current target point, magnitude, and speed of the animation. The chance is equal to this parameter/1000 and can range from 0-1000. It is HIGHLY recommended that you stay under 100, as that would average out to a new set of values every 10 frames or ~.33 seconds.
The second new parameter is the range you want the random adjustments to occur in, i.e. if this parameter is 30, target, magnitude, and speed will be between 70% and 130% of the original value.
Note: Every time the values are updated, the values are taken from the GIVEN parameters not the current ones. So it will NOT stack as time goes on.
First is the random chance, this is the chance that it will update the current target point, magnitude, and speed of the animation. The chance is equal to this parameter/1000 and can range from 0-1000. It is HIGHLY recommended that you stay under 100, as that would average out to a new set of values every 10 frames or ~.33 seconds.
The second new parameter is the range you want the random adjustments to occur in, i.e. if this parameter is 30, target, magnitude, and speed will be between 70% and 130% of the original value.
Note: Every time the values are updated, the values are taken from the GIVEN parameters not the current ones. So it will NOT stack as time goes on.
[AUTO_CUSTOM_RANDOM_FULL]:
[AUTO_CUSTOM_RANDOM_X]:
[AUTO_CUSTOM_RANDOM_SIMPLE]:
Operate as the AUTO_CUSTOM series do, with the two extra parameters described above.
Example: [AUTO_CUSTOM_RANDOM_X_50_20_80_10_30] will begin oscillating between simulating a mouse at 50% across the screen, with a 20% of screen movement leading to 30% and 70% across the game window at 80% of the maximum speed, with a 10/1000 = 1% chance (approximately 3-5 seconds on average) to update values.
When this 1% chance occurs, the resulting values will be:
Target center position between .7*.5 = 35% and 1.3*.5 = 65% across the screen,
Oscillation distance between 0.2*0.7 = 14% and 0.2*1.3 = 26% of the possible movement range
Speed will be between 0.8*0.7 = 56% and 0.8*1.3 = 104% --> 100% of maximum speed.
Example: [AUTO_CUSTOM_RANDOM_X_50_20_80_10_30] will begin oscillating between simulating a mouse at 50% across the screen, with a 20% of screen movement leading to 30% and 70% across the game window at 80% of the maximum speed, with a 10/1000 = 1% chance (approximately 3-5 seconds on average) to update values.
When this 1% chance occurs, the resulting values will be:
Target center position between .7*.5 = 35% and 1.3*.5 = 65% across the screen,
Oscillation distance between 0.2*0.7 = 14% and 0.2*1.3 = 26% of the possible movement range
Speed will be between 0.8*0.7 = 56% and 0.8*1.3 = 104% --> 100% of maximum speed.
Version 1 post:
Information:
Link:
Here is the first decent version of the mod, I am calling it version 1.
This mod gives extra trigger to allow dialogue writers more control over actions, there are currently 7 triggers added by this mod, some of which are VERY powerful for automation.
The full list:
This mod gives extra trigger to allow dialogue writers more control over actions, there are currently 7 triggers added by this mod, some of which are VERY powerful for automation.
The full list:
[INIT_RESISTANCE_<level>]:
[HOLD_CUSTOM]:
[STOP_CUSTOM]:
For the following triggers, all values should be between 0 and 100. If target coordinate +- magnitude is outside of this range, then a portion of the sin wave will hold her still. Target coordinate sets the mid-point of the sin wave, magnitude determines how far from the center point it moves, and speed determines how fast the sin wave shifts.
To overcome initial resistance the penis MUST actually exit her mouth before pressing back in.
[AUTO_CUSTOM_X_<target x coordinate>_<x magnitude>_<x speed>]:
[AUTO_CUSTOM_FULL_<target x coordinate>_<x magnitude>_<x speed>_<target y coordinate>_<y magnitude>_<y speed>]:
Same as previous except y values are also specified.
[POSITION_CUSTOM_<target_x_coordinate>_<target_y_coordinate>_<speed>]:
[AUTO_CUSTOM_SIMPLE_<shallow_position>_<deep_position>_<speed>]:
The only KNOWN issues are:
Sets the initial resistance to value that replaces <level>
Example: [INIT_RESISTANCE_75] will set the initial resistance to 75.
Example: [INIT_RESISTANCE_75] will set the initial resistance to 75.
[HOLD_CUSTOM]:
Locks him/her in position so no movement will occur until command is canceled with an AUTO setting, or another CUSTOM command.
[STOP_CUSTOM]:
Cancels the current CUSTOM command.
To overcome initial resistance the penis MUST actually exit her mouth before pressing back in.
[AUTO_CUSTOM_X_<target x coordinate>_<x magnitude>_<x speed>]:
Sets up a custom automation with default y values, only specify x values.
Example: [AUTO_CUSTOM_X_100_70_40] Will move between a simulated mouse at 30% of the screen, and 100% and back every (4/40) * 2PI/(180*PI) = ~36 frames. Since 100 is the max, time spent higher than 100 will hold still with the penis fully down her throat. So half the time will be spent pulling out and shoving back in, and the other half will be just held down.
Example: [AUTO_CUSTOM_X_100_70_40] Will move between a simulated mouse at 30% of the screen, and 100% and back every (4/40) * 2PI/(180*PI) = ~36 frames. Since 100 is the max, time spent higher than 100 will hold still with the penis fully down her throat. So half the time will be spent pulling out and shoving back in, and the other half will be just held down.
[AUTO_CUSTOM_FULL_<target x coordinate>_<x magnitude>_<x speed>_<target y coordinate>_<y magnitude>_<y speed>]:
Same as previous except y values are also specified.
[POSITION_CUSTOM_<target_x_coordinate>_<target_y_coordinate>_<speed>]:
This trigger works much the same as the FULL and X triggers, but it smoothly transitions to the specified point and stays there until another command, such as [AUTO_HARD] or [AUTO_CUSTOM_FULL] is given.
Example: [POSITION_CUSTOM_50_75_40] would cause her to transition to the point she would be at if the mouse was halfway across the screen, and 3/4ths pr the way down the screen over ~36 frames.
Example: [POSITION_CUSTOM_50_75_40] would cause her to transition to the point she would be at if the mouse was halfway across the screen, and 3/4ths pr the way down the screen over ~36 frames.
[AUTO_CUSTOM_SIMPLE_<shallow_position>_<deep_position>_<speed>]:
This trigger causes her to oscillate between the shallow and deep position specified, at the given speed.
The available options for shallow are: OFF (fully left), TIP (lips just touching head of penis), HEAD (mouth just covering the head of the penis), and CENTER (mid-point of the penis.)
Available options for deep are: TIP, HEAD, CENTER, and HILT (all the way down for full deepthroat.)
Example: [AUTO_CUSTOM_SIMPLE_HEAD_HILT_40] would cause her to oscillate between having just the head in her mouth, and pressed all the way down over the course of ~36 frames.
The available options for shallow are: OFF (fully left), TIP (lips just touching head of penis), HEAD (mouth just covering the head of the penis), and CENTER (mid-point of the penis.)
Available options for deep are: TIP, HEAD, CENTER, and HILT (all the way down for full deepthroat.)
Example: [AUTO_CUSTOM_SIMPLE_HEAD_HILT_40] would cause her to oscillate between having just the head in her mouth, and pressed all the way down over the course of ~36 frames.
The only KNOWN issues are:
DialogueActions [AUTO_OFF] trigger does NOT turn off the custom triggers, it only returns control to mouse. If you reactivate auto mode by using a hotkey or the auto checkbox the custom setting will turn back on. Use another AUTO trigger or [STOP_CUSTOM] to deactivate a custom setting.
If in [AUTO_CUSTOM_SIMPLE] deep is set to CENTER the throat resistance setting may cause her to stop slightly short of the center if the penis is long enough, as it goes by mouse position at no resistance and the higher the resistance the farther you have to push to get her to throat it.
Speed is having some issues for higher values, once I solve this problem I will make speed scale about 2-2.5 times faster as it increases from 0-100.
If in [AUTO_CUSTOM_SIMPLE] deep is set to CENTER the throat resistance setting may cause her to stop slightly short of the center if the penis is long enough, as it goes by mouse position at no resistance and the higher the resistance the farther you have to push to get her to throat it.
Speed is having some issues for higher values, once I solve this problem I will make speed scale about 2-2.5 times faster as it increases from 0-100.
Version 0.5 post:
Information:
File Link:
This is my first Mod attempt. I believe I have most of the bugs worked out, but let me know if you find any.
This mod adds 5 dialogue triggers, and requires DialogueActions + Loader.
In the next few days I will probably try to add several triggers with preset values that can be used without figuring out exact values for yourself. Settings such as slow, medium, or fast hilt to near tip (assuming "normal" penis size. I MAY be able to set it to change based off that size, I will have to look in to it.) Or slow, medium, fast bobbing near tip etc. It would probably wind up with another 12-18 triggers for different setups. I have to take a test in a couple days, so it will probably be after that.
This mod adds 5 dialogue triggers, and requires DialogueActions + Loader.
[INIT_RESISTANCE_<level>]
[HOLD_CUSTOM]
[STOP_CUSTOM]
Detailed information for using the last two triggers:
[AUTO_CUSTOM_X_<target x coordinate>_<x magnitude>_<x speed>]
[AUTO_CUSTOM_FULL_<target x coordinate>_<x magnitude>_<x speed>_<target y coordinate>_<y magnitude>_<y speed>]
The only KNOWN issues are:
These automations have NO randomness, they are pure sin waves. I am considering adding an extra pair of triggers that add SOME randomness to the functions but that will be sometime in the future.
Sets the initial resistance to value that raplaces <level>
Example: [INIT_RESISTANCE_75] will set the initial resistance to 75.
Example: [INIT_RESISTANCE_75] will set the initial resistance to 75.
[HOLD_CUSTOM]
Locks him/her in position so no movement will occur until command is canceled with an AUTO setting, or another CUSTOM command.
[STOP_CUSTOM]
Cancels the current CUSTOM command.
Detailed information for using the last two triggers:
For the following triggers, the left most value is -30, right most position is ~120. Further right will increase force somewhat but effect will mainly be staying pressed all the way down for a larger percentage of the sin wave. Target coordinate sets the mid-point of the sin wave, magnitude determines how far from the center point it moves, and speed determines how fast the sin wave shifts.
Speeds above 100 have issues due to rounding errors, some end points may be missed. Hard capped at 200.
To overcome initial resistance the penis MUST actually exit her mouth before pressing back in. The faster the speed, the further out it must be set to oscillate due to the rounding errors mentioned above.
Speeds above 100 have issues due to rounding errors, some end points may be missed. Hard capped at 200.
To overcome initial resistance the penis MUST actually exit her mouth before pressing back in. The faster the speed, the further out it must be set to oscillate due to the rounding errors mentioned above.
[AUTO_CUSTOM_X_<target x coordinate>_<x magnitude>_<x speed>]
Sets up a custom automation with default y values, only specify x values.
Example: [AUTO_CUSTOM_X_100_70_40] Will move between x = 30 and x = 170 and back
every 2PI/(40 / 200)) = ~31 frames.
Example: [AUTO_CUSTOM_X_100_70_40] Will move between x = 30 and x = 170 and back
every 2PI/(40 / 200)) = ~31 frames.
[AUTO_CUSTOM_FULL_<target x coordinate>_<x magnitude>_<x speed>_<target y coordinate>_<y magnitude>_<y speed>]
Same as previous except y values are also specified. I am unsure at what y-values the game begins having issues.
For now I have hard-coded 0 < target y < 2, 0 < magnitude y < 2, -1 < target y +/- magnitude y < 3,
0 < speed y < 1.5
For now I have hard-coded 0 < target y < 2, 0 < magnitude y < 2, -1 < target y +/- magnitude y < 3,
0 < speed y < 1.5
The only KNOWN issues are:
DialogueActions [AUTO_OFF] trigger does NOT turn off the custom triggers, it only returns control to mouse. If you reactivate auto mode by using a hotkey or the auto checkbox the custom setting will turn back on. Use another AUTO trigger or [STOP_CUSTOM] to deactivate a custom setting.
DialogueActions MUST be loaded before this mod, otherwise the trigger registration will throw an error.
If anyone knows how the APINotify function should be used to fix this, feel free to let me know and I will fix it.
DialogueActions MUST be loaded before this mod, otherwise the trigger registration will throw an error.
If anyone knows how the APINotify function should be used to fix this, feel free to let me know and I will fix it.
These automations have NO randomness, they are pure sin waves. I am considering adding an extra pair of triggers that add SOME randomness to the functions but that will be sometime in the future.
In the next few days I will probably try to add several triggers with preset values that can be used without figuring out exact values for yourself. Settings such as slow, medium, or fast hilt to near tip (assuming "normal" penis size. I MAY be able to set it to change based off that size, I will have to look in to it.) Or slow, medium, fast bobbing near tip etc. It would probably wind up with another 12-18 triggers for different setups. I have to take a test in a couple days, so it will probably be after that.
If you have a similar feature that you would like me to add to this mod, please let me know below. I will not guarantee I will work on it, but if it is reasonably simple to add (and fits with the rest of the mod, i.e. I am not going to add new body/hair types, sounds, positions etc) I may give it a shot. If I decide against it, I will give you a reply stating that I will not be adding it.
If anyone wants to add to this mod themselves, feel free. I included the source code in the zip file.
Since I was starting to get several versions up, I moved them over to mega upload. Links to each version are available in that versions section of the post. From now on, I will only keep the newest version loaded to the attachments section of the post.
I have included a demo dialogue with appropriate position files below.
The showhim_partial file should be present in the animtool15 positions that came with that mod.
This is obviously just a quick demo of a few of the more complex functions. It shows off value_custom, position_custom, set_test, active_test, and x_custom
Most of the remaining triggers are either much simpler (init_resistance) or very similar (random_custom)
I will probably add one more comparison criteria for the testing section of the mod later, which is testing whether the auto-function is going towards min value or x value.
Attachments
CustomAutomationV7.zip
24.5 KB · Views: 1,017
24.5 KB · Views: 1,017
Custom Auto Demo.txt
13.6 KB · Views: 716
13.6 KB · Views: 716
Standing.txt
3.7 KB · Views: 813
3.7 KB · Views: 813
Missionary_bed.txt
3.8 KB · Views: 931
3.8 KB · Views: 931
CustomAutomationV7.1.zip
26.7 KB · Views: 962
26.7 KB · Views: 962
Last edited: