In 0.3a sex are via flags. I forget which ones. You want to add a history item into history.permanent as well as set a day value to some day in the past or something. I've found that once. Anal, I think was just getting trust high enough after that.
Considered putting that into the cheat injector but decided it would take too much out of the game, too much trouble (the code would be pretty long for an injection) and can sequence break the game and miss out on content.
Edit: Found it in my console history log. This might have changed for 0.4a. But in 0.3d, it was:
Code:
Rogue.History.permanent['went_on_date_with_player']=HistoryItemClass() //this instantiates the proper HistoryItem into the hash/dictionary/whatever python calls hashes
Rogue.History.permanent['went_on_date_with_player'].completed.append(day) //the HistoryItem has a list/array/tuple/whatever python calls an array with the current day. Signifying that it's been completed.
The function that determines shame copies a temporary instance of the character and its stats, which is why modifying them only applies until a scheme change, when it reverts back to referencing the original object. The best I've found is that shame is a calculation of love and trust (something like (love + trust) * 0.4). This is why my cheat injector breaks the love/trust limit. With a ridiculously high love and trust, they'll wear [or not wear] just about anything.
Proof of concept