CREATE YOUR AI CUM SLUT ON CANDY.AI TRY FOR FREE
x

Grim

Active Member
Aug 17, 2016
894
614
Anyone know if there's a way via trigger to make a character immediately interactable after they lose a fight? I've tried copying what the Brute module supposedly does, by setting the character's LockState to 0, but this doesn't actually seem to work when the character is in the post-fight state on the ground. The red circle remains around them and you can't interact with them. Is there some other way of accomplishing this?
 

Monosomething

Well-Known Member
May 24, 2019
1,514
2,390
Just noticed something interesting:

Ive played around for about 2 weeks (up to the first exam) with one character. Had some sex, beat up some bitches, the usual. Thing is... i was playing as a female card (thats new for me) and didnt really like how the whole thing played out (not a fan of female protags, if i can avoid it).

So, on saturday (exam day) ive switched to my "main" card (male - kicked out the female PC). Ive also replaced the teacher, but thats not that important. Heres the thing: ive played through saturday (only two break periods due to the exam) and sunday (also two break periods) without speaking to anybody. All i did those two days is train (to get my strength up). Ive checked QtEdit to see what the class thought of me (out of curiosity), and...

Apparently, for not speaking to anybody, both me and the teacher gained 5 partial dislike points (the teacher got them due to me skipping time while training - they only managed to speak to one person), but the two cards with "Absentminded" trait generated only 1 partial dislike point towards us.

Now... my assumption is obvious. Thats a (potentially) 80% reduction to dislike/hate gain! Holy crap! Avoid cards with this trait - if you get into a relationship with one, you will have a TON of work to do to peel off whoever is going after them, since your partner, due to gaining only 20% dislike/hate, will keep fanning the flames, even if the other card hates them by this point.

Absolutely disgusting.
 
  • Like
Reactions: bloodbirthe

bloodbirthe

Member
Nov 25, 2018
106
169
I want this character to avoid having sex when I'm not playing as them, and the closest module I've found for achieving that purpose is 'not for lewding', but that particular module also applies to player characters, which is a problem. I don't want them to never have sex, I only want them to be able to do it when I can control the scene. I know that I can create a new module and basically rewrite this one without the PC/player character part, but why won't it just let me delete that part? Is there a quicker way to achieve my goal than copying this module from scratch? Again, my goal is to try to avoid characters having sex off camera when I'm not controlling the scene.
 

Grim

Active Member
Aug 17, 2016
894
614
I know that I can create a new module and basically rewrite this one without the PC/player character part, but why won't it just let me delete that part?
You have to unpack the module from the Modules tab before you can edit the triggers
 
Last edited:
  • Like
Reactions: bloodbirthe

Deviator13

New Member
May 30, 2018
10
4
Hi, can someone share the full packed game with all needed mods from MIG? (Maybe in PM) I've tried to make it on my own but MEGA telling me to pay for traffic now. Thanks.
 

bloodbirthe

Member
Nov 25, 2018
106
169
You have to unpack the module from the Modules tab before you can edit the triggers
Thank you! I never understood how that worked but I get it now. This caused me to also figure out why the Drunk module wasn't working. In its Init trigger, they had it named No Bullshit instead of Drunk. A completely different module. Now that I can edit these easily, I can play around a lot more.
 
  • Like
Reactions: Grim

Grim

Active Member
Aug 17, 2016
894
614
Thank you! I never understood how that worked but I get it now. This caused me to also figure out why the Drunk module wasn't working. In its Init trigger, they had it named No Bullshit instead of Drunk. A completely different module. Now that I can edit these easily, I can play around a lot more.
Seems like somebody was doing some copying and pasting when they made that module. That brings me back to my previous question though. Even though the Init trigger for the Drunk module is setting the wrong bool, shouldn't the other triggers have still worked regardless? When they try and look up the Drunk field, they won't find it and will instead fallback to the default value of true, which should let the subsequent code run.

Edit: I loaded the Drunk module onto an NPC card to test whether it worked or not despite the Init trigger being incorrect.
drunk_test.jpg
I asked the NPC to go to the restaurant with me after school, and you can see in the log the message about them getting tipsy, which is a message being logged from the module's Drink trigger. So even though the Init trigger doesn't work correctly, the rest of the triggers in the module are still running. With the way they module is set up though, it doesn't actually have any influence if the NPC with the module is the one to initiate the restaurant invite. It has to be somebody else asking them.

The inclusion of init triggers and the checks for module initialization in other triggers appears to be superfluous in most cases. There's very little public documentation for trigger/module making, so I'm guessing in most cases people are just copying what they see others doing because they don't know any better, and there's no available information telling them otherwise. The only cases I can think of where it's actually useful is:
  • To allow other modules to check for the inclusion of the module, possibly to have different behavior if both modules are loaded on the card.
  • If there's default values being set during initialization, or other logic in the init trigger, then you would want to check if the module was actually initialized properly, and if it wasn't then you wouldn't run other trigger logic. For this to work though the default for GetBool has to be false, which I almost never see anyone do.
  • I suppose a module might want to also be able to disable itself, or allow other modules to disable it, but I haven't seen any examples of this being done
 
Last edited:
  • Like
Reactions: bloodbirthe

bloodbirthe

Member
Nov 25, 2018
106
169
The inclusion of init triggers and the checks for module initialization in other triggers appears to be superfluous in most cases. There's very little public documentation for trigger/module making, so I'm guessing in most cases people are just copying what they see others doing because they don't know any better, and there's no available information telling them otherwise.
I'll be honest, I was content with most premade modules until just recently too, and thought digging into the code myself would be too time consuming as someone who doesn't usually touch modding. But many assumptions I made before experimenting have already been turned on their heads. I didn't understand that the init trigger was mostly superfluous until reading your post, and have just trying to learn from what I've seen so far, as you suggested lol. If you have any more tips or discoveries, keep posting about them.
 
  • Like
Reactions: Grim

Grim

Active Member
Aug 17, 2016
894
614
I'll be honest, I was content with most premade modules until just recently too, and thought digging into the code myself would be too time consuming as someone who doesn't usually touch modding.
It is time consuming. I've been working on a couple modules for a few weeks now, and neither of them is ready for public release. To be fair though, I had no experience with module creation prior to working on these.
 

JustAl

Active Member
Jan 28, 2022
683
792
If I recall, the init triggers are typically in the form of something like "StringName Default True", although some older modules don't use the verbose form and simply say "StringName = True". Although I do notice some logic behind it.

In the rest of the triggers, the check is "If StringName Default True", which is important because if the character lacks the string var because it wasn't created or malformed, "Default True" will let the script run if what it is looking for is missing and can't be verified as false. So essentially, do not run if you find out it is false, but if you find out it is true or can't find it at all, assume it is true and go ahead.

This init feature is relevant when using some modules to toggle on/off other modules, for example you can make an interlink-style module that immediately finds and turns off other modules when the character joins the class, then re-enables them again when a certain other module's conditions are met. For example, add some sluttifying modules, then some new triggers (or unpacked and changed init triggers) to make them start false, then have your new triggers watch for an event like their virtue dropping low each period start (likely due to the Corruption module but from any other source okay too)... if their virtue is low, enable being a slut. If their virtue increases beyond slut-enabling and the next period starts, turn off their slut triggers.

I've spun all this from the top of my head's memory, but essentially the "string default true" logic is to let the code run even if the string init is missing or wrong, since it lets the code run even if someone's inappropriately fucked it up. However it also enables the toggling on/off of the code by setting the string to false just in case your have a specific immersive (or debugging) action to make this happen. Then you can enable it back by setting it to true.
 

Grim

Active Member
Aug 17, 2016
894
614
If I recall, the init triggers are typically in the form of something like "StringName Default True", although some older modules don't use the verbose form and simply say "StringName = True". Although I do notice some logic behind it.

In the rest of the triggers, the check is "If StringName Default True", which is important because if the character lacks the string var because it wasn't created or malformed, "Default True" will let the script run if what it is looking for is missing and can't be verified as false. So essentially, do not run if you find out it is false, but if you find out it is true or can't find it at all, assume it is true and go ahead.

This init feature is relevant when using some modules to toggle on/off other modules, for example you can make an interlink-style module that immediately finds and turns off other modules when the character joins the class, then re-enables them again when a certain other module's conditions are met. For example, add some sluttifying modules, then some new triggers (or unpacked and changed init triggers) to make them start false, then have your new triggers watch for an event like their virtue dropping low each period start (likely due to the Corruption module but from any other source okay too)... if their virtue is low, enable being a slut. If their virtue increases beyond slut-enabling and the next period starts, turn off their slut triggers.

I've spun all this from the top of my head's memory, but essentially the "string default true" logic is to let the code run even if the string init is missing or wrong, since it lets the code run even if someone's inappropriately fucked it up. However it also enables the toggling on/off of the code by setting the string to false just in case your have a specific immersive (or debugging) action to make this happen. Then you can enable it back by setting it to true.
Do you know of any actual modules either disabling themselves or disabling other modules? I get the idea behind it, but I haven't actually seen any examples of it in the wild
 

JustAl

Active Member
Jan 28, 2022
683
792
Do you know of any actual modules either disabling themselves or disabling other modules? I get the idea behind it, but I haven't actually seen any examples of it in the wild
I have seen only one, and it's a weird cause too: the Detective module will turn itself off if you blame the wrong person and win the fight with them. So you effectively lose your detective license if you blame and capture an innocent for a murder.

In my own use cases, I made a character who upon meeting the conditions of the Corruption module to be considered "fully corrupted", toggle on/off various modules of the honorable and slutty quality based on whether they should be honorable or slutty. The implementation was crude to save time, I simply unpacked Corruption, unpacked every module toggled by it, set their init string to start False, and let Corruption handle toggling them on or off. I didn't want to commit to a proper bridge module, and frankly due to how underutilized modules are in the community I didn't see the point.
 

Grim

Active Member
Aug 17, 2016
894
614
I have seen only one, and it's a weird cause too: the Detective module will turn itself off if you blame the wrong person and win the fight with them. So you effectively lose your detective license if you blame and capture an innocent for a murder.
Ah, interesting. I hadn't really looked at the Detective module too closely before. That one is also weird because it relies on external lua functions, which I guess you could also write and add yourself but the file would get overwritten when there's a new AAU update so you'd have to restore it/manually merge it every time, or you'd have to get the AAU team to officially add them.

I didn't want to commit to a proper bridge module, and frankly due to how underutilized modules are in the community I didn't see the point.
It is interesting that everyone seems to be following these coding conventions to allow for functionality that pretty much no one takes advantage of, but I guess maybe it'll be helpful for somebody in the future.

If you have any more tips or discoveries, keep posting about them.
Some things I've found helpful to speed up development:
  • Download the AAU source code from Github. You can sometimes glean information about how actions, expressions, or game mechanics work from reading through it, beyond what the normal documentation tells you. You can search through it quickly for specific keywords using something like Notepad++
  • Open up 2 copies of AAEdit so you can easily reference the triggers in other modules while working on your own. I couldn't figure out a simple way of doing this since the game doesn't seem to like you running 2 editors simultaneously. I got around this by running a 2nd copy of it in Windows Sandbox, but you could also set up a virtual machine with something like VirtualBox.
 

emok13

New Member
May 25, 2020
2
5
After some term searches, I decided that my question hadn't been answered previously, so I'll ask;
Is there a convenient way for me to randomize underwear for the class? I really don't want to go in and give everyone unique sets from the hundreds of textures I have. I will, but iunwanna
 

Zadke

Member
Nov 21, 2017
245
471
After some term searches, I decided that my question hadn't been answered previously, so I'll ask;
Is there a convenient way for me to randomize underwear for the class? I really don't want to go in and give everyone unique sets from the hundreds of textures I have. I will, but iunwanna
Nope, the only way its manual either in the game or in qt edit (i found it easier in the game tho)
 

bloodbirthe

Member
Nov 25, 2018
106
169
After some term searches, I decided that my question hadn't been answered previously, so I'll ask;
Is there a convenient way for me to randomize underwear for the class? I really don't want to go in and give everyone unique sets from the hundreds of textures I have. I will, but iunwanna
God I wish. Good luck if you go this route, but you may have to
1. save each change of underwear as its own unique outfit
2. apply the fashionable module to each character that you want to alternate their underwear
3. and then create unique styles for each outfit for each character, named so that the fashionable module will apply them

Although, considering how much effort I've already put into my game I might as well try this out myself too, and report back.
 

bloodbirthe

Member
Nov 25, 2018
106
169
After some term searches, I decided that my question hadn't been answered previously, so I'll ask;
Is there a convenient way for me to randomize underwear for the class? I really don't want to go in and give everyone unique sets from the hundreds of textures I have. I will, but iunwanna
God I wish. Good luck if you go this route, but you may have to
1. save each change of underwear as its own unique outfit
2. apply the fashionable module to each character that you want to alternate their underwear
3. and then create unique styles for each outfit for each character, named so that the fashionable module will apply them

Although, considering how much effort I've already put into my game I might as well try this out myself too, and report back.
Okay, I just tested this method and this DOES WORK. It's also compatible with Sunday Fashion, if you, like myself, enjoy seeing them in something special for a date.

On normal weekdays though, your characters won't wear the (default style), or the sunday style, only the styles confined in the red box (of course you'll probably want more than 4). But they will always switch to sunday style on sunday.

God damn it, now I'm going to have to apply this to all my characters now too. It's just too good to pass up.
(also let me know if this works for you)
 
4.70 star(s) 17 Votes