1.7
This commit is contained in:
parent
4bb5802285
commit
7fd1ff94e5
117 changed files with 2830 additions and 0 deletions
59
Docs/FAQ.txt
Normal file
59
Docs/FAQ.txt
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
1. Dev questions
|
||||
1.1. Why don't we have feature X yet?
|
||||
1.2. Are you going to add feature X?
|
||||
2. Gameplay questions
|
||||
2.1. What do I do? Where do I go?
|
||||
2.2. I don't have a place to live!
|
||||
2.3. How do I find a residential building, bar, hotel, etc.?
|
||||
2.4. How do I change a building's type?
|
||||
3. Tech questions
|
||||
3.1. I can't bring up the console!
|
||||
3.2. How do I change or add to the content?
|
||||
|
||||
1. Dev questions
|
||||
|
||||
1.1. Why don't we have X yet?
|
||||
|
||||
Because it hasn't been made yet. Perhaps you can help out?
|
||||
Creating content for LifePlay is easy to do, and because it's meant to be a moddable game, it's not just the developer who can do it. See the Docs/Modding folder to learn how.
|
||||
|
||||
1.2. Are you going to add X?
|
||||
|
||||
Quite possibly. It may take a while though. Other things need adding too!
|
||||
|
||||
2. Gameplay questions
|
||||
|
||||
2.1. What do I do? Where do I go?
|
||||
|
||||
The idea is that you live the life of the character you're playing. There is no one story, and no other background to the player character than what you imagine yourself. You can tweak your character's looks and stats, potentially give them relatives via the contacts menu (ctrl-P), make sure to load up content modules that fit your tastes (ctrl-M), and take it from there.
|
||||
|
||||
You should probably find a place to live, and get an income so you can pay for expenses. Or you could just sleep in hotels and hope money'll drop from the sky. Suit yourself ;)
|
||||
|
||||
2.2. I don't have a place to live!
|
||||
|
||||
Find a residential building during work hours, click on it, and select "arrange a viewing". This'll then give you the option to rent an apartment, or not.
|
||||
|
||||
2.3. How do I find a residential building, bar, hotel, etc.?
|
||||
|
||||
Hover the mouse over a building and ideally, an icon should show up telling you what type of building it is. Buildings with a question mark haven't been given a type yet.
|
||||
You can also click on the magnifying glass icon to the left, leave the search field blank, then click on the icon so you can choose from a variety of building types to choose from. The search results will try to display them based on how far you have to walk.
|
||||
|
||||
2.4. How do I change a building's name or type?
|
||||
|
||||
Some maps have far more detailed information on buildings than others, and it's also always possible you want to insert or change a building type because you just want to. To do that, you just click on any building, and select "edit building".
|
||||
|
||||
Changes to a building on a map carry over to any new game you start on that same map, so perhaps you shouldn't change buildings on one game that could be your other game's character's home or job?
|
||||
|
||||
3. Tech Questions
|
||||
|
||||
3.1. I can't bring up the console!
|
||||
|
||||
Ordinarily you bring up the console with #
|
||||
Due to different keyboard mappings throughout the world, though, the key to use may differ for you. You can change the key in Config/DefaultInput.ini, look for the line:
|
||||
+ActionMappings=(ActionName="TestScenes",Key=#,bShift=False,bCtrl=False,bAlt=False,bCmd=False)
|
||||
|
||||
3.2. How do I change or add to the content?
|
||||
|
||||
Intel on how to write or edit scenes is found in the Docs/Modding folder. It mostly deals with the scripting language at the moment, in a noob-friendly way, and focuses on adding scenes, actions, stats, character presets, sex descriptions and sex talk. These are the easiest to change: a simple text editor is all you need, and the documentation is noob-friendly.
|
||||
|
||||
(Not ready to say anything useful about asset creation...)
|
||||
15
Docs/Modding/Command_Functions/Divorce.txt
Normal file
15
Docs/Modding/Command_Functions/Divorce.txt
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
Divorce()
|
||||
|
||||
USE:
|
||||
This command undoes the marriage between player and their husband/wife. It will revert their status to being boyfriend(s)/girlfriend(s) though, so you probably want to follow up with loseDating().
|
||||
|
||||
TYPE: Command, non-Ref
|
||||
RETURNS: /
|
||||
THEME: Relationships
|
||||
COMPARE: getMarried, isMarried, loseDating
|
||||
|
||||
EXAMPLE:
|
||||
Official:: "Sign here and here and here and here... Initial here and here and here... Very well, everything's in order."
|
||||
Player(Disgusted):: "About damn time!"
|
||||
Divorce()
|
||||
loseDating()
|
||||
21
Docs/Modding/Command_Functions/Filter.txt
Normal file
21
Docs/Modding/Command_Functions/Filter.txt
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
Filter(Tag)
|
||||
|
||||
USE:
|
||||
Limit a sex scene to animations that have the specified tag.
|
||||
|
||||
TYPE: Command, non-Ref
|
||||
RETURNS: /
|
||||
THEME: Sex
|
||||
COMPARE: TalkNonConsensual
|
||||
|
||||
EXAMPLE:
|
||||
|
||||
"A while later in front of her place."
|
||||
Player(Flirty)::"Baby, since I just took you to that fancy place and all, maybe I could... come inside?"
|
||||
Girlfriend(Offended)::"Hey, what do you take me for? I don't put out just for a meal!"
|
||||
Player(Shy)::"I know you don't, I mean, I didn't think you would, but... please, being around you drives me nuts! I'm about to burst!"
|
||||
Girlfriend(Annoyed)::"Oh, alright then. But there's no way we're actually doing 'it' tonight! A quick shake and then I'm off to bed, and you're off to yours!"
|
||||
setBackground(home)
|
||||
Player.strip()
|
||||
Filter(Handjob)
|
||||
Sex(Player, Girlfriend)
|
||||
14
Docs/Modding/Command_Functions/LosePT.txt
Normal file
14
Docs/Modding/Command_Functions/LosePT.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
losePT()
|
||||
|
||||
USE:
|
||||
The player fires their current personal trainer.
|
||||
|
||||
TYPE: Command, Non-Ref
|
||||
RETURNS: /
|
||||
THEME: Special Characters
|
||||
COMPARE: setPT
|
||||
|
||||
EXAMPLE:
|
||||
Player(Angry):: "I've made no progress under your instructions. You're fired!"
|
||||
losePT()
|
||||
"I need to find a new personal trainer now."
|
||||
17
Docs/Modding/Command_Functions/Random.txt
Normal file
17
Docs/Modding/Command_Functions/Random.txt
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
Random(float, float)
|
||||
|
||||
USE:
|
||||
returns a random float number between the entered float parameters. Commonly used to influence the chance a condition is true based on an actor stat.
|
||||
|
||||
TYPE: Command, non-Ref
|
||||
RETURNS: float
|
||||
THEME: Math
|
||||
COMPARE:
|
||||
|
||||
EXAMPLE:
|
||||
attrBonus = Random(1,5)
|
||||
Actor:attrtoplayer += attrBonus
|
||||
|
||||
If Random(30, 100) > attractiveness // condition is only possible if attractiveness is higher than 30, and more likely to happen the higher attractiveness is
|
||||
|
||||
If Random(50,300) < Actor:perversion // only possible perversions is higher than 50, but only has a 20% chance of happening
|
||||
20
Docs/Modding/Command_Functions/Sex.txt
Normal file
20
Docs/Modding/Command_Functions/Sex.txt
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
Sex(Actor1, Actor2, ..., ActorN)
|
||||
|
||||
|
||||
USE:
|
||||
Start a sex scene involving these actors. If the player is involved, it will also check whether the player is cheating or not and add to the affair list accordingly.
|
||||
The order in which roles are given to actors for the sex scene (important for descriptions and dirtytalk) depends largely on gender and domincance. Males are given roles before transsexuals, then women. Between people of the same gender, the most dominant one (lowest submission stat) is given a role first.
|
||||
However, the order of the actor parameters to the Sex() function matters somewhat in group sex: Sex(Male1, Player, Male2) will be different from Sex(Male2, Player, Male1).
|
||||
|
||||
TYPE: Command, non-Ref
|
||||
RETURNS: /
|
||||
THEME: Sex
|
||||
COMPARE: SexNoAffair
|
||||
|
||||
EXAMPLE:
|
||||
Boss(Happy):: "Baby, let's get closer!"
|
||||
Sex(Boss, Player)
|
||||
|
||||
If Boss.isAffair() // if you are in a relationship with someone else, this will return true after sex
|
||||
"I cheated on my boyfriend with my boss."
|
||||
Endif
|
||||
19
Docs/Modding/Command_Functions/SexNoAffair.txt
Normal file
19
Docs/Modding/Command_Functions/SexNoAffair.txt
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
SexNoAffair(Actor1, Actor2, ..., ActorN)
|
||||
|
||||
USE:
|
||||
Start a sex scene involving these actors. Even if the player is involved, it will not check whether the player is cheating or not.
|
||||
The order in which roles are given to actors for the sex scene (important for descriptions and dirtytalk) depends largely on gender and domincance. Males are given roles before transsexuals, then women. Between people of the same gender, the most dominant one (lowest submission stat) is given a role first.
|
||||
However, the order of the actor parameters to the Sex() function matters somewhat in group sex: SexNoAffair(Male1, Player, Male2) will be different from SexNoAffair(Male2, Player, Male1).
|
||||
|
||||
TYPE: Command, non-Ref
|
||||
RETURNS: /
|
||||
THEME: Sex
|
||||
COMPARE: Sex
|
||||
|
||||
EXAMPLE:
|
||||
Boss(Happy):: "Baby, let's get closer!"
|
||||
SexNoAffair(Boss, Player)
|
||||
|
||||
If Boss.isAffair() // this will return false no matter what
|
||||
"I cheated on my boyfriend with my boss."
|
||||
Endif
|
||||
15
Docs/Modding/Command_Functions/TalkNonConsensual.txt
Normal file
15
Docs/Modding/Command_Functions/TalkNonConsensual.txt
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
TalkNonConsensual()
|
||||
|
||||
USE:
|
||||
call this command before starting a sex scene to make sure that none of the regular 'dirtytalk' (ie both ppl wanting it) is played, and only non-consensual talk is played.
|
||||
|
||||
TYPE: Command, non-Ref
|
||||
RETURNS: /
|
||||
THEME: Sex
|
||||
COMPARE: Filter(Aggressive)
|
||||
|
||||
EXAMPLE:
|
||||
"Before I knew what was happening, the door slammed shut behind me..."
|
||||
Filter(Aggressive)
|
||||
TalkNonConsensual()
|
||||
SexNoAffair(Aggressor, Player)
|
||||
20
Docs/Modding/Command_Functions/WHAT.txt
Normal file
20
Docs/Modding/Command_Functions/WHAT.txt
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
WHAT
|
||||
|
||||
USE:
|
||||
WHAT is mostly used to enter a condition at the top of a scene, affecting its random triggering depending on what the player's doing.
|
||||
However, it can also be used as a command in the rest of the scene script, returning the player's current activity.
|
||||
Available actionIDs can be found in the different files contained in the "Actions" folder in modules.
|
||||
|
||||
TYPE: Condition, non-Ref
|
||||
RETURNS: actionID (string)
|
||||
THEME: Scenes, Activity
|
||||
COMPARE: WHAT, WHEN
|
||||
|
||||
EXAMPLE:
|
||||
If WHAT == socialize && WHERE == nightclub
|
||||
"It shouldn't be surprising that when you talk to random strangers at a nightclub, somebody will think you're just hitting on people."
|
||||
Jealous = generatePerson()
|
||||
Jealous.dress()
|
||||
Jealous.show()
|
||||
Jealous(Angry)::"Stay away from my <Player.boyfriend_or_girlfriend>, you <Player.creep_or_skank>!"
|
||||
Endif
|
||||
19
Docs/Modding/Command_Functions/WHEN.txt
Normal file
19
Docs/Modding/Command_Functions/WHEN.txt
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
WHEN
|
||||
|
||||
USE:
|
||||
WHEN is mostly used to enter a condition at the top of a scene, affecting its random triggering depending on what time of day it is.
|
||||
However, it can also be used as a command in the rest of the scene script, to return the time of day in a float.
|
||||
|
||||
TYPE: Command, non-Ref
|
||||
RETURNS: float
|
||||
THEME: Scenes, Time
|
||||
COMPARE: WHAT, WHERE
|
||||
|
||||
EXAMPLE:
|
||||
If WHEN > 21 || WHEN < 4
|
||||
time = "late"
|
||||
Elseif WHEN < 9
|
||||
time = "early"
|
||||
Endif
|
||||
"My neighbour's having <Neighbour.p> stereo on, and it's so loud the bass can be heard from a block away! I've got a good mind to tell <Neighbour.o> that I'm calling the police if <Neighbour.s> ever makes such noise this <time> again!"
|
||||
|
||||
20
Docs/Modding/Command_Functions/WHERE.txt
Normal file
20
Docs/Modding/Command_Functions/WHERE.txt
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
WHERE
|
||||
|
||||
USE:
|
||||
WHERE is mostly used to enter a condition at the top of a scene, affecting its random triggering depending on the player's location.
|
||||
However, it can also be used as a command in the rest of the scene script, returning the player's location.
|
||||
Available locationIDs can be found in Docs/Lists/all_wheres.txt
|
||||
|
||||
TYPE: Condition, non-Ref
|
||||
RETURNS: locationID (string)
|
||||
THEME: Scenes, Location
|
||||
COMPARE: isAtHome, WHAT, WHEN
|
||||
|
||||
EXAMPLE:
|
||||
Title = "shop assistant"
|
||||
If WHERE == bank
|
||||
Title = "cashier"
|
||||
Elseif WHERE == bar || WHERE == nightclub
|
||||
Title = "bartender"
|
||||
Endif
|
||||
"It's my lucky day. I found myself being served by a <New_Person.handsome_or_cute> <Title>."
|
||||
13
Docs/Modding/Command_Functions/addColleague.txt
Normal file
13
Docs/Modding/Command_Functions/addColleague.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
Actor.addColleague()
|
||||
|
||||
USE:
|
||||
Add this actor to the list of colleagues. Can be found later with getSpecific(Colleague)
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Job
|
||||
COMPARE: removeColleague, isColleague
|
||||
|
||||
EXAMPLE:
|
||||
John(Happy):: "Hi there, I just got hired."
|
||||
John.addColleague()
|
||||
13
Docs/Modding/Command_Functions/addDatingFriend.txt
Normal file
13
Docs/Modding/Command_Functions/addDatingFriend.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
Actor.addDatingFriend()
|
||||
|
||||
USE:
|
||||
Add this actor to the list of your significant other's friends. Can be found later with getSpecific(Dating_Friend)
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Acquaintance
|
||||
COMPARE: removeDatingFriend, isDatingFriend
|
||||
|
||||
EXAMPLE:
|
||||
John(Happy):: "Hi there, I'm your boyfriend's friend."
|
||||
John.addDatingFriend()
|
||||
13
Docs/Modding/Command_Functions/addNeighbour.txt
Normal file
13
Docs/Modding/Command_Functions/addNeighbour.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
Actor.addNeighbour()
|
||||
|
||||
USE:
|
||||
Add this actor to the list of neighbours. Can be found later with getSpecific(Neighbour)
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Housing
|
||||
COMPARE: removeNeighbour, isNeighbour
|
||||
|
||||
EXAMPLE:
|
||||
John(Happy):: "Hi there, I'm new here. Just moved in."
|
||||
John.addNeighbour()
|
||||
20
Docs/Modding/Command_Functions/blendPreset.txt
Normal file
20
Docs/Modding/Command_Functions/blendPreset.txt
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
Actor.blendPreset(PresetID)
|
||||
|
||||
USE:
|
||||
Blend this actor with a preset, usually called after generatePerson().
|
||||
Presets are contained in a module's folder for the purpose, and can contain either body morphing or stat-related intel.
|
||||
PresetID is the filename without the extension.
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Actor Creation, Looks, Stats
|
||||
COMPARE: generatePerson, generatePersonTemporary
|
||||
|
||||
EXAMPLE:
|
||||
// We want a male bodybuilder
|
||||
Bodybuilder = generatePerson() // just so that we get the random stats etc, but this might generate a female
|
||||
|
||||
Bodybuilder.blendPreset(bodybuilder) // if the above is female, then this will reset face and hair to the default male face and hair, so it's best to follow up with
|
||||
|
||||
Actor.randomizeFace()
|
||||
Actor.randomizeHairs()
|
||||
13
Docs/Modding/Command_Functions/blockContact.txt
Normal file
13
Docs/Modding/Command_Functions/blockContact.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
blockContact(Actor)
|
||||
|
||||
USE:
|
||||
Remove this person from your contact list.
|
||||
|
||||
TYPE: Command, Non-Ref
|
||||
RETURNS: /
|
||||
THEME: Acquaintance
|
||||
COMPARE: exchangeContact, isContactExchanged
|
||||
|
||||
EXAMPLE:
|
||||
"This guy is a stalker. This is enough."
|
||||
blockContact(John)
|
||||
13
Docs/Modding/Command_Functions/clearGlobal.txt
Normal file
13
Docs/Modding/Command_Functions/clearGlobal.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
GlobalVariableName.clearGlobal()
|
||||
|
||||
USE:
|
||||
Delete this global variable completely.
|
||||
|
||||
TYPE: Command, Non-Ref (but syntax is ref-like)
|
||||
RETURNS: /
|
||||
THEME: Variables
|
||||
COMPARE: getGlobal, setGlobal
|
||||
|
||||
EXAMPLE:
|
||||
SugarDaddy.clearGlobal()
|
||||
FloatVariable = SugarDaddy.getGlobal() // will now return 0
|
||||
17
Docs/Modding/Command_Functions/closeEyes.txt
Normal file
17
Docs/Modding/Command_Functions/closeEyes.txt
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
Actor.closeEyes(bool)
|
||||
|
||||
USE:
|
||||
force actor to close or open their eyes
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Scenes
|
||||
COMPARE:
|
||||
|
||||
EXAMPLE:
|
||||
|
||||
Masseuse::"Just lie down and relax."
|
||||
Player.CloseEyes(true)
|
||||
|
||||
Mom(Angry)::"Hey, wake up, sleepy head! You're about to be late for work!"
|
||||
Player.CloseEyes(false)
|
||||
14
Docs/Modding/Command_Functions/convertToLocalCurrency.txt
Normal file
14
Docs/Modding/Command_Functions/convertToLocalCurrency.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
Float.convertToLocalCurrency()
|
||||
|
||||
USE
|
||||
Converts a dollar value to the local currency for the home city in string format.
|
||||
|
||||
TYPE: Command, non-Ref (syntax is ref-like)
|
||||
RETURNS: String, expressing the number in local currency
|
||||
THEME: Money
|
||||
COMPARE: getRent, getSalary, setRent, setSalary
|
||||
|
||||
EXAMPLE:
|
||||
Salary = 3000
|
||||
SalaryConverted = Salary.convertToLocalCurrency()
|
||||
"My salary is <SalaryConverted>." // will show up as 'My salary is £ 2000.'
|
||||
9
Docs/Modding/Command_Functions/delete.txt
Normal file
9
Docs/Modding/Command_Functions/delete.txt
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
Actor.Delete()
|
||||
|
||||
USE:
|
||||
Force remove this actor from current memory. Used in rare cases where SceneEnd() (which does this automatically to all actors used in the scene) isn't called.
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Actor Removal
|
||||
COMPARE: hide, makePermanent
|
||||
20
Docs/Modding/Command_Functions/dress.txt
Normal file
20
Docs/Modding/Command_Functions/dress.txt
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
Actor.dress(optional_item)
|
||||
|
||||
USE:
|
||||
If there's nothing in the bracket, it will dress the actor fully appropriate to the current building. If a clothing piece is specified, will put that on only. Check LifePlay\Content\Heavy\Clothes for the names of the items
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Clothes
|
||||
COMPARE: strip
|
||||
|
||||
EXAMPLE:
|
||||
setBackground(work)
|
||||
Player.dress() // will put on a full suit with oxford shoes etc and underwear underneath
|
||||
|
||||
OR
|
||||
|
||||
Player.dress(Casual-Clothes_1_F) // will put on casual clothes only, no shoe or underwear
|
||||
|
||||
|
||||
|
||||
14
Docs/Modding/Command_Functions/dressWedding.txt
Normal file
14
Docs/Modding/Command_Functions/dressWedding.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
Actor.dressWedding()
|
||||
|
||||
USE:
|
||||
This command puts the actor in a wedding dress or suit.
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Relationships
|
||||
COMPARE: getMarried, dress
|
||||
|
||||
EXAMPLE:
|
||||
"It took quite a bit of doing, getting into that corset, but I finally was good to go, and ready to step down the aisle."
|
||||
setBackground(place_of_worship)
|
||||
Player.dressWedding()
|
||||
13
Docs/Modding/Command_Functions/endDate.txt
Normal file
13
Docs/Modding/Command_Functions/endDate.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
endDate()
|
||||
|
||||
USE:
|
||||
End the current 'date', i.e. get rid of the current companion.
|
||||
|
||||
TYPE: Command, Non-Ref
|
||||
RETURNS: /
|
||||
THEME: Companions
|
||||
COMPARE: startDate
|
||||
|
||||
EXAMPLE:
|
||||
"We already hung out for the whole afternoon. It's time to separate."
|
||||
endDate()
|
||||
13
Docs/Modding/Command_Functions/exchangeContact.txt
Normal file
13
Docs/Modding/Command_Functions/exchangeContact.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
exchangeContact(Actor)
|
||||
|
||||
USE:
|
||||
Exchange numbers with this actor.
|
||||
|
||||
TYPE: Command, Non-Ref
|
||||
RETURNS: /
|
||||
THEME: Acquaintance
|
||||
COMPARE: blockContact, isContactExchanged
|
||||
|
||||
EXAMPLE:
|
||||
"We exchanged numbers and parted ways."
|
||||
exchangeContact(John)
|
||||
13
Docs/Modding/Command_Functions/forgiveAffairs.txt
Normal file
13
Docs/Modding/Command_Functions/forgiveAffairs.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
forgiveAffairs()
|
||||
|
||||
USE:
|
||||
Clear all affairs commited while in this current relationship. This is done automatically when SetDating().
|
||||
|
||||
TYPE: Command, Non-Ref
|
||||
RETURNS: /
|
||||
THEME: Relationships
|
||||
COMPARE: isAffair, loseDating
|
||||
|
||||
EXAMPLE:
|
||||
Dating(Crying):: "Alright, after everything we've been through, I guess I can forgive you this time ..."
|
||||
forgiveAffairs()
|
||||
18
Docs/Modding/Command_Functions/generatePerson.txt
Normal file
18
Docs/Modding/Command_Functions/generatePerson.txt
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
generatePerson()
|
||||
generatePerson(preset1, preset2, ..., presetN)
|
||||
|
||||
USE:
|
||||
Generate a new actor. If nothing inside the bracket: completely random actor. Or you can specify the presets to blend into this new actor. The actor generated using this method will be permanent right away, meaning they will remain after the current scene ends and are usable for some functions that only work with permanent actors.
|
||||
|
||||
TYPE: Command, Non-Ref
|
||||
RETURNS: Actor
|
||||
THEME: Actor Creation
|
||||
COMPARE: generatePersonTemporary, blendPreset
|
||||
|
||||
EXAMPLE:
|
||||
Actor = generatePerson() // OR Actor = generatePerson(easterneuropean, twenties, fitness_model)
|
||||
Actor.dress()
|
||||
Actor.show(2)
|
||||
|
||||
exchangeContact(Actor) // this will succeed because this is a permanent actor
|
||||
|
||||
20
Docs/Modding/Command_Functions/generatePersonTemporary.txt
Normal file
20
Docs/Modding/Command_Functions/generatePersonTemporary.txt
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
generatePersonTemporary()
|
||||
generatePersonTemporary(preset1, preset2, ..., presetN)
|
||||
|
||||
USE:
|
||||
Generate a new actor. If nothing inside the bracket: completely random actor. Or you can specify the presets to blend into this new actor.
|
||||
|
||||
The actor generated using this method will be temporary at first (unless you call MakePermanent() on them later on), meaning they will be deleted with no traces left (not even in a lpcharacter) after the current scene ends. Useful for loops and for one-off actors like thiefs and prostitutes. Also, your adultery with a temporary actor will never be caught!
|
||||
|
||||
TYPE: Command, Non-Ref
|
||||
RETURNS: Actor
|
||||
THEME: Actor Creation
|
||||
COMPARE: generatePerson, blendPreset, makePermanent
|
||||
|
||||
EXAMPLE:
|
||||
Actor = generatePersonTemporary() // OR Actor = generatePersonTemporary(easterneuropean, twenties, fitness_model)
|
||||
Actor.dress()
|
||||
Actor.show(2)
|
||||
|
||||
exchangeContact(Actor) // this will fail because this is a temporary actor that will be lost forever after the current scene ends. You need to call MakePermanent first.
|
||||
|
||||
17
Docs/Modding/Command_Functions/getCompanion.txt
Normal file
17
Docs/Modding/Command_Functions/getCompanion.txt
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
getCompanion()
|
||||
|
||||
USE:
|
||||
Get the current companion. Not entirely necessary as the current companion has a special variable "CurrentCompanion" that is always available.
|
||||
|
||||
TYPE: Command, non-Ref
|
||||
RETURNS: Actor
|
||||
THEME: Companions
|
||||
COMPARE: isWithCompanion
|
||||
|
||||
EXAMPLE:
|
||||
Actor = getCompanion()
|
||||
Actor.dress()
|
||||
|
||||
// is the same as
|
||||
|
||||
CurrentCompanion.dress()
|
||||
15
Docs/Modding/Command_Functions/getGlobal.txt
Normal file
15
Docs/Modding/Command_Functions/getGlobal.txt
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
GlobalVariable.getGlobal()
|
||||
|
||||
USE:
|
||||
Get the float value of a global variable. If there's no global variable under such name, returns 0.
|
||||
|
||||
TYPE: Command, non-Ref (ref-like syntax)
|
||||
RETURNS: float
|
||||
THEME: Variables
|
||||
COMPARE: clearGlobal, setGlobal, getID
|
||||
|
||||
EXAMPLE:
|
||||
SugarDaddyID = SugarDaddyGV.getGlobal()
|
||||
If SugarDaddy != 0
|
||||
SugarDaddyActor = getSpecific(SugarDaddyID)
|
||||
Endif
|
||||
20
Docs/Modding/Command_Functions/getID.txt
Normal file
20
Docs/Modding/Command_Functions/getID.txt
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
Actor.getID()
|
||||
|
||||
USE:
|
||||
Get the ID number of this actor, which can then be saved as a global variable and then called on using getSpecific.
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: Float
|
||||
THEME: Identity, Variables
|
||||
COMPARE: setGlobal, getGlobal, getSpecific
|
||||
|
||||
EXAMPLE:
|
||||
ID = Actor.getID()
|
||||
SugarDaddy.setGlobal(ID)
|
||||
|
||||
// another scene
|
||||
|
||||
ID = SugarDaddy.getGlobal()
|
||||
If ID != 0
|
||||
Actor = getSpecific(ID)
|
||||
Endif
|
||||
13
Docs/Modding/Command_Functions/getMarried.txt
Normal file
13
Docs/Modding/Command_Functions/getMarried.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
getMarried()
|
||||
|
||||
USE:
|
||||
Call this function to marry the player to their current bf/gf. This doesn't trigger a wedding scene, but flags them as being married.
|
||||
|
||||
TYPE: Command, non-Ref
|
||||
RETURNS: /
|
||||
THEME: Relationships
|
||||
COMPARE: setDating, isMarried, Divorce, DressWedding, getSpecific(Dating)
|
||||
|
||||
EXAMPLE:
|
||||
Priest::"I now pronounce you man and wife."
|
||||
getMarried()
|
||||
14
Docs/Modding/Command_Functions/getPerson.txt
Normal file
14
Docs/Modding/Command_Functions/getPerson.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
getPerson(optional bool)
|
||||
|
||||
USE:
|
||||
Get a random person in your current game (i.e. could be anyone that has been created with GeneratePerson() or GeneratePersonTemporary() then MakePermanent() ). Optional bool parameters to filter for whether their contact has been exchanged to you or not.
|
||||
|
||||
TYPE: Command, Non-Ref
|
||||
RETURNS: Actor
|
||||
THEME: Actor Loading
|
||||
COMPARE: getSpecific
|
||||
|
||||
EXAMPLE:
|
||||
Actor = getPerson() // get anyone
|
||||
Actor = getPerson(true) // get someone who has exchanged numbers with me
|
||||
Actor = getPerson(false) // get someone whose number I don't have
|
||||
17
Docs/Modding/Command_Functions/getRelative.txt
Normal file
17
Docs/Modding/Command_Functions/getRelative.txt
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
getRelative()
|
||||
getRelative(keyword, keyword, ..., keyword)
|
||||
|
||||
USE:
|
||||
Retrieves an actor who's related to the player.
|
||||
This can be filtered down to only certain types of relatives with keywords: Sibling, StepSibling, Child, StepChild, Cousin, ParentSibling (uncles/aunts), GrandParent, Parent, StepParent
|
||||
|
||||
TYPE: Command, non-Ref
|
||||
RETURNS: Actor
|
||||
THEME: Family, Actor Loading
|
||||
COMPARE: getRelativeExcept
|
||||
|
||||
EXAMPLE:
|
||||
|
||||
WHO: Actor = getRelative()
|
||||
|
||||
WHO: Actor = getRelative(Sibling, StepSibling, Cousin, Child, StepChild)
|
||||
13
Docs/Modding/Command_Functions/getRelativeExcept.txt
Normal file
13
Docs/Modding/Command_Functions/getRelativeExcept.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
getRelativeExcept(keyword, ..., keyword)
|
||||
|
||||
USE:
|
||||
Retrieves an actor who is related to the player, but isn't tagged by the listed keyword(s).
|
||||
|
||||
TYPE: Command, non-Ref
|
||||
RETURNS: Actor
|
||||
THEME: Family, Actor Loading
|
||||
COMPARE: getRelative
|
||||
|
||||
EXAMPLE:
|
||||
|
||||
WHO: Actor = getRelativeExcept(GrandParent) // returns a relative who isn't a grandparent of the player
|
||||
15
Docs/Modding/Command_Functions/getRent.txt
Normal file
15
Docs/Modding/Command_Functions/getRent.txt
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
getRent()
|
||||
|
||||
USE:
|
||||
Get the current rent into a float variable.
|
||||
|
||||
TYPE: Command, Non-Ref
|
||||
RETURNS: Float
|
||||
THEME: Housing, Money
|
||||
COMPARE: setRent, convertToLocalCurrency
|
||||
|
||||
EXAMPLE
|
||||
Rent = getRent()
|
||||
Rent *= 1.2
|
||||
Rent.setRent()
|
||||
"Damn, the rent was increased by 20%."
|
||||
15
Docs/Modding/Command_Functions/getSalary.txt
Normal file
15
Docs/Modding/Command_Functions/getSalary.txt
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
getSalary()
|
||||
|
||||
USE:
|
||||
Get the current salary into a float variable.
|
||||
|
||||
TYPE: Command, Non-Ref
|
||||
RETURNS: Float
|
||||
THEME: Job, Money
|
||||
COMPARE: setSalary, convertToLocalCurrency
|
||||
|
||||
EXAMPLE
|
||||
Salary = getSalary()
|
||||
Salary *= 1.2
|
||||
Salary.setRent()
|
||||
"Yay, my salary was increased by 20%."
|
||||
27
Docs/Modding/Command_Functions/getSpecific.txt
Normal file
27
Docs/Modding/Command_Functions/getSpecific.txt
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
getSpecific(keyword)
|
||||
getSpecific(float)
|
||||
getSpecific(float variable)
|
||||
|
||||
USE:
|
||||
Get a specific person in your current game.
|
||||
Available keywords are: Dating, Dating_Friend, Boss, Colleague, Neighbour, PT, ExDating, Landlord, CurrentBabyDaddy, Impregnated
|
||||
|
||||
Alternatively, you can input an ID number or a float variable containing it to get the actor with that ID.
|
||||
|
||||
TYPE: Command, Non-Ref
|
||||
RETURNS: Actor
|
||||
THEME: Actor Loading
|
||||
COMPARE: getPerson, getID, setGlobal, getGlobal, isValid
|
||||
|
||||
EXAMPLE:
|
||||
SO = getSpecific(Dating) // get my boyfriend / girlfriend
|
||||
if SO.isValid
|
||||
// I actually have a bf/gf
|
||||
endif
|
||||
|
||||
Actor5 = getSpecific(5) // get the fifth generated actor in this current game
|
||||
|
||||
ID = SugarDaddy.getGlobal()
|
||||
If ID != 0
|
||||
SugarDaddyActor = getSpecific(ID) // get the sugar daddy via the float variable
|
||||
Endif
|
||||
14
Docs/Modding/Command_Functions/hide.txt
Normal file
14
Docs/Modding/Command_Functions/hide.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
Actor.hide()
|
||||
|
||||
USE:
|
||||
Hide the actor from the player's view. Opposite to show().
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Actor Removal, Scenes
|
||||
COMPARE: show
|
||||
|
||||
EXAMPLE:
|
||||
Actor.show(2)
|
||||
"<Actor.name> said hi then quickly left."
|
||||
Actor.hide()
|
||||
13
Docs/Modding/Command_Functions/loseDating.txt
Normal file
13
Docs/Modding/Command_Functions/loseDating.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
loseDating()
|
||||
|
||||
USE:
|
||||
Break up with current boyfriend / girlfriend. All affairs and SO's friends are cleared and become acquaintances.
|
||||
|
||||
TYPE: Command, Non-Ref
|
||||
RETURNS: /
|
||||
THEME: Relationships
|
||||
COMPARE: setDating, isDating, getSpecific(Dating), getSpecific(ExDating)
|
||||
|
||||
EXAMPLE:
|
||||
"It's over. He broke up with me!"
|
||||
loseDating()
|
||||
14
Docs/Modding/Command_Functions/loseHome.txt
Normal file
14
Docs/Modding/Command_Functions/loseHome.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
loseHome()
|
||||
|
||||
USE:
|
||||
The player moves out of their current home. Set rent to 0. Landlord and neighbours become acquantainces.
|
||||
|
||||
TYPE: Command, Non-Ref
|
||||
RETURNS: /
|
||||
THEME: Housing
|
||||
COMPARE: moveHome
|
||||
|
||||
EXAMPLE:
|
||||
Landlord(Angry):: "That's enough. You're evicted!"
|
||||
loseHome()
|
||||
"I need to find a new place to live now."
|
||||
14
Docs/Modding/Command_Functions/loseJob.txt
Normal file
14
Docs/Modding/Command_Functions/loseJob.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
loseJob()
|
||||
|
||||
USE:
|
||||
The player stops working at their current company. Set salary to 0. Boss and colleagues become acquantainces.
|
||||
|
||||
TYPE: Command, Non-Ref
|
||||
RETURNS: /
|
||||
THEME: Job
|
||||
COMPARE: moveJobs
|
||||
|
||||
EXAMPLE:
|
||||
Boss(Angry):: "That's enough. You're fired!"
|
||||
loseJob()
|
||||
"I need to find a new place to work now."
|
||||
18
Docs/Modding/Command_Functions/makePermanent.txt
Normal file
18
Docs/Modding/Command_Functions/makePermanent.txt
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
Actor.makePermanent()
|
||||
|
||||
USE:
|
||||
This turns a temporary actor (generatePersonTemporary) into a permanent actor that persists after the current scene ends. Does nothing if called on an already permanent actor.
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Actor Creation
|
||||
COMPARE: generatePersonTemporary, generatePerson
|
||||
|
||||
EXAMPLE:
|
||||
// Generate someone who is into the player's gender
|
||||
InterestedPerson = generatePersonTemporary()
|
||||
While !InterestedPerson.isInterestedIn(Player)
|
||||
InterestedPerson = generatePersonTemporary() // use this instead of GeneratePerson() because otherwise there would be too many (depending how many loops it takes to generate oen that's into the player) permanent actors who appear out of nowhere.
|
||||
Endwhile
|
||||
InterestedPerson.makePermanent() // now that an interested person is generated, we can make them permanent now.
|
||||
|
||||
16
Docs/Modding/Command_Functions/moveHome.txt
Normal file
16
Docs/Modding/Command_Functions/moveHome.txt
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
moveHome()
|
||||
|
||||
USE:
|
||||
Move into the current building and make it your new home. Remember to use SetLandlord() and SetRent() separately.
|
||||
|
||||
TYPE: Command, Non-Ref
|
||||
RETURNS: /
|
||||
THEME: Housing
|
||||
COMPARE: loseHome, setLandlord, setRent
|
||||
|
||||
EXAMPLE:
|
||||
"I signed the contract."
|
||||
moveHome()
|
||||
Rent = 1000
|
||||
Landlord.setLandlord()
|
||||
Rent.setRent()
|
||||
16
Docs/Modding/Command_Functions/moveJobs.txt
Normal file
16
Docs/Modding/Command_Functions/moveJobs.txt
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
moveJobs()
|
||||
|
||||
USE:
|
||||
Get hired at this current building and make it our new workplace. Remember to use setBoss() and SetSalary() separately.
|
||||
|
||||
TYPE: Command, Non-Ref
|
||||
RETURNS: /
|
||||
THEME: Job
|
||||
COMPARE: loseJob, setBoss, setSalary
|
||||
|
||||
EXAMPLE:
|
||||
"I signed the contract."
|
||||
moveJobs()
|
||||
Salary = 2000
|
||||
Interviewer.setBoss()
|
||||
Salary.setSalary()
|
||||
23
Docs/Modding/Command_Functions/moveTo.txt
Normal file
23
Docs/Modding/Command_Functions/moveTo.txt
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
moveTo(place)
|
||||
|
||||
USE:
|
||||
Instantly move the player (and possible companion) to this place. Currently there are only three places: Home, Home_Dating, Work
|
||||
|
||||
TYPE: Command, Non-Ref
|
||||
RETURNS: /
|
||||
THEME: Location
|
||||
COMPARE: setBackground
|
||||
|
||||
EXAMPLE:
|
||||
"Where should I go?"
|
||||
0:: "Home"
|
||||
1:: "My boyfriend's place"
|
||||
2:: "The office"
|
||||
|
||||
If 0
|
||||
moveTo(home)
|
||||
Elseif 1
|
||||
moveTo(home_dating)
|
||||
Else
|
||||
moveTo(work)
|
||||
Endif
|
||||
16
Docs/Modding/Command_Functions/passTime.txt
Normal file
16
Docs/Modding/Command_Functions/passTime.txt
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
passTime(hours_min, hours_max)
|
||||
|
||||
USE:
|
||||
I initially intended this as a way to pass time during a scene, but it turned out too complicated due to stat depreciations. All it does now is add to the variable TimePassed, which can be useful for while loop I guess.
|
||||
|
||||
TYPE: Command, Non-Ref
|
||||
RETURNS: /
|
||||
THEME: Time
|
||||
COMPARE:
|
||||
|
||||
EXAMPLE:
|
||||
While TimePassed < 3
|
||||
"The party continues ..."
|
||||
passTime(0.25, 1)
|
||||
Endwhile
|
||||
"The party ends."
|
||||
16
Docs/Modding/Command_Functions/randomizeFace.txt
Normal file
16
Docs/Modding/Command_Functions/randomizeFace.txt
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
Actor.randomizeFace()
|
||||
|
||||
USE:
|
||||
Randomize the actor's face and skin. Commonly called after blendpreset (which might change the gender which resets the actor to the default face and hair for that gender)
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Looks
|
||||
COMPARE: randomizeHairs, blendPreset
|
||||
|
||||
EXAMPLE:
|
||||
// We want a male bodybuilder
|
||||
Bodybuilder = generatePerson() // just so that we get the random stats etc, but this might generate a female
|
||||
Bodybuilder.blendPreset(bodybuilder) // if the above is female, then this will reset face and hair to the default male face and hair
|
||||
Actor.randomizeFace()
|
||||
Actor.randomizeHairs()
|
||||
16
Docs/Modding/Command_Functions/randomizeHairs.txt
Normal file
16
Docs/Modding/Command_Functions/randomizeHairs.txt
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
Actor.randomizeHairs()
|
||||
|
||||
USE:
|
||||
Randomize the actor's hair and pubic hair. Commonly called after blendpreset (which might change the gender which resets the actor to the default face and hair for that gender)
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Looks
|
||||
COMPARE: randomizeFace, blendPreset
|
||||
|
||||
EXAMPLE:
|
||||
// We want a male bodybuilder
|
||||
Bodybuilder = generatePerson() // just so that we get the random stats etc, but this might generate a female
|
||||
Bodybuilder.blendPreset(bodybuilder) // if the above is female, then this will reset face and hair to the default male face and hair
|
||||
Actor.randomizeFace()
|
||||
Actor.randomizeHairs()
|
||||
13
Docs/Modding/Command_Functions/removeColleague.txt
Normal file
13
Docs/Modding/Command_Functions/removeColleague.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
Actor.removeColleague()
|
||||
|
||||
USE:
|
||||
Remove this actor from the list of colleague. Will remain acquaintance at least though.
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Job
|
||||
Compare: addColleague, isColleague, getSpecific(Colleague)
|
||||
|
||||
EXAMPLE:
|
||||
John(Sad):: "I'm leaving the company."
|
||||
John.removeColleague()
|
||||
13
Docs/Modding/Command_Functions/removeDatingFriend.txt
Normal file
13
Docs/Modding/Command_Functions/removeDatingFriend.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
Actor.removeDatingFriend()
|
||||
|
||||
USE:
|
||||
Remove this actor from the list of your significant other's friends. Will remain acquaintance at least though.
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Acquaintance
|
||||
COMPARE: addDatingFriend, isDatingFriend, getSpecific(Dating_Friend)
|
||||
|
||||
EXAMPLE:
|
||||
John(Sad):: "Your boyfriend is an asshole. I'm no longer his friend."
|
||||
John.removeDatingFriend()
|
||||
13
Docs/Modding/Command_Functions/removeNeighbour.txt
Normal file
13
Docs/Modding/Command_Functions/removeNeighbour.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
Actor.removeNeighbour()
|
||||
|
||||
USE:
|
||||
Remove this actor from the list of your neighbours. Will remain acquaintance at least though.
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Housing
|
||||
COMPARE: addNeighbour, isNeighbour, getSpecific(Neighbour)
|
||||
|
||||
EXAMPLE:
|
||||
John(Sad):: "Goodbye, we're moving to another apartment."
|
||||
John.removeNeighbour()
|
||||
9
Docs/Modding/Command_Functions/sceneEnd.txt
Normal file
9
Docs/Modding/Command_Functions/sceneEnd.txt
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
sceneEnd()
|
||||
|
||||
USE:
|
||||
End the scene and return to map view. This will also clear all actors (except player and current companion from memory) after saving them back into their lpcharacters.
|
||||
|
||||
TYPE: Command, Non-Ref
|
||||
RETURNS: /
|
||||
THEME: Scenes
|
||||
COMPARE: sceneStart, timeout, timeoutprecise
|
||||
9
Docs/Modding/Command_Functions/sceneStart.txt
Normal file
9
Docs/Modding/Command_Functions/sceneStart.txt
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
sceneStart()
|
||||
|
||||
USE:
|
||||
Start the scene and open the scene UI
|
||||
|
||||
TYPE: Command, non-Ref
|
||||
RETURNS: /
|
||||
THEME: Scenes
|
||||
COMPARE: sceneEnd, setBackground
|
||||
13
Docs/Modding/Command_Functions/setBackground.txt
Normal file
13
Docs/Modding/Command_Functions/setBackground.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
setBackground(where)
|
||||
|
||||
USE:
|
||||
Set the background image. Check all_where.txt for full list. This is also important for dress() which decides how to dress the actor appropriately based on the background (suits for work, sport clothes for sports_centre etc)
|
||||
|
||||
TYPE: Command, non-Ref
|
||||
RETURNS: /
|
||||
THEME: Scenes, Location
|
||||
COMPARE: sceneStart, dress
|
||||
|
||||
EXAMPLE:
|
||||
setBackground(work)
|
||||
Player.dress() // player will put on professional clothes
|
||||
16
Docs/Modding/Command_Functions/setBoss.txt
Normal file
16
Docs/Modding/Command_Functions/setBoss.txt
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
Actor.setBoss()
|
||||
|
||||
USE:
|
||||
Make this person your boss. Current boss is no longer boss and becomes acquaintance.
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Job
|
||||
COMPARE: isBoss, getSpecific(Boss), moveJobs
|
||||
|
||||
EXAMPLE:
|
||||
"I signed the contract."
|
||||
moveJobs()
|
||||
Salary = 2000
|
||||
Interviewer.setBoss()
|
||||
Salary.setRent()
|
||||
13
Docs/Modding/Command_Functions/setDating.txt
Normal file
13
Docs/Modding/Command_Functions/setDating.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
Actor.setDating()
|
||||
|
||||
USE:
|
||||
Make this person your significant other. Current SO is no longer dating you and becomes acquaintance. Also clears out all friends of previous SOs and affairs, who all become acquaintances.
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Relationships
|
||||
COMPARE: loseDating, isDating, getSpecific(Dating)
|
||||
|
||||
EXAMPLE:
|
||||
"I agreed to be his girlfriend"
|
||||
John.setDating()
|
||||
17
Docs/Modding/Command_Functions/setGlobal.txt
Normal file
17
Docs/Modding/Command_Functions/setGlobal.txt
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
GlobalVariableName.setGlobal(float or floatvariable)
|
||||
|
||||
USE:
|
||||
Set (add if it doesn't already exist) a global variable to a certain number.
|
||||
|
||||
TYPE: Command, non-Ref (ref-like syntax)
|
||||
RETURNS: /
|
||||
THEME: Variables
|
||||
COMPARE: getGlobal, clearGlobal, getID
|
||||
|
||||
EXAMPLE:
|
||||
NumberOfChildren.setGlobal(3)
|
||||
|
||||
OR
|
||||
|
||||
SugarDaddyID = Actor2.getID()
|
||||
SugarDaddy.setGlobal(SugarDaddyID)
|
||||
0
Docs/Modding/Command_Functions/setHomeCity.txt
Normal file
0
Docs/Modding/Command_Functions/setHomeCity.txt
Normal file
16
Docs/Modding/Command_Functions/setLandlord.txt
Normal file
16
Docs/Modding/Command_Functions/setLandlord.txt
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
Actor.setLandlord()
|
||||
|
||||
USE:
|
||||
Make this person your landlord. Current landlord is no longer landlord and becomes acquaintance.
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Housing
|
||||
COMPARE: isLandlord, setRent, getSpecific(Landlord)
|
||||
|
||||
EXAMPLE:
|
||||
"I signed the contract."
|
||||
moveHome()
|
||||
Rent = 1000
|
||||
Landlord.setLandlord()
|
||||
Rent.setRent()
|
||||
18
Docs/Modding/Command_Functions/setLivingWithPlayer.txt
Normal file
18
Docs/Modding/Command_Functions/setLivingWithPlayer.txt
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
Actor.setLivingWithPlayer(bool)
|
||||
|
||||
USE:
|
||||
flags or unflags an actor as living with the player
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Housing
|
||||
COMPARE: livesWithPlayer
|
||||
|
||||
EXAMPLE:
|
||||
"Since I have a spare room available and could do with the extra cash, I've agreed to sub-let it to a foreign exchange student."
|
||||
Student = generatePerson(twenties)
|
||||
Student::"Hello! Thank you for letting me stay here!"
|
||||
Student.setLivingWithPlayer(true)
|
||||
|
||||
Roomie(Angry)::"I've had it with living in this pig sty! You never clean up after yourself!"
|
||||
Roomie.setLivingWithPlayer(false)
|
||||
13
Docs/Modding/Command_Functions/setPT.txt
Normal file
13
Docs/Modding/Command_Functions/setPT.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
Actor.setPT()
|
||||
|
||||
USE:
|
||||
Make this person your personal trainer. Current personal trainer is no longer PT and becomes acquaintance.
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Special Characters
|
||||
COMPARE: losePT
|
||||
|
||||
EXAMPLE:
|
||||
"<John.name> agreed to train me."
|
||||
John.setPT()
|
||||
16
Docs/Modding/Command_Functions/setRent.txt
Normal file
16
Docs/Modding/Command_Functions/setRent.txt
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
FloatVar.setRent()
|
||||
|
||||
USE:
|
||||
Set this as your current rent.
|
||||
|
||||
TYPE: Command, non-Ref (ref-like syntax)
|
||||
RETURNS: /
|
||||
THEME: Housing, Money
|
||||
COMPARE: getRent, setLandlord, moveHome
|
||||
|
||||
EXAMPLE:
|
||||
"I signed the contract."
|
||||
moveHome()
|
||||
Rent = 1000
|
||||
Landlord.setLandlord()
|
||||
Rent.setRent()
|
||||
16
Docs/Modding/Command_Functions/setSalary.txt
Normal file
16
Docs/Modding/Command_Functions/setSalary.txt
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
Floatvar.setSalary()
|
||||
|
||||
USE:
|
||||
Set this as your current salary.
|
||||
|
||||
TYPE: Command, Non-Ref (ref-like syntax)
|
||||
RETURNS: /
|
||||
THEME: Job, Money
|
||||
COMPARE: getSalary, moveJobs
|
||||
|
||||
EXAMPLE:
|
||||
"I signed the contract."
|
||||
moveJobs()
|
||||
Salary = 2000
|
||||
Interviewer.setBoss()
|
||||
Salary.setSalary())
|
||||
14
Docs/Modding/Command_Functions/show.txt
Normal file
14
Docs/Modding/Command_Functions/show.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
Actor.show(position_index)
|
||||
|
||||
USE:
|
||||
Show this actor on screen. The player's default position is 0. 1 - 6 is counted from right to left of the screen.
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Actor Loading, Scenes
|
||||
COMPARE: hide, getSpecific, generatePerson, generatePersonTemporary, getPerson
|
||||
|
||||
EXAMPLE:
|
||||
NewGuy = generatePerson()
|
||||
NewGuy.dress()
|
||||
NewGuy.show(2)
|
||||
13
Docs/Modding/Command_Functions/startDate.txt
Normal file
13
Docs/Modding/Command_Functions/startDate.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
Actor.startDate()
|
||||
|
||||
USE:
|
||||
Start hanging out with this person (make them your current companion)
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Companions
|
||||
COMPARE: endDate, isWithCompanion
|
||||
|
||||
EXAMPLE:
|
||||
"I decided to hang out with <John.name> today."
|
||||
John.startDate()
|
||||
13
Docs/Modding/Command_Functions/strip.txt
Normal file
13
Docs/Modding/Command_Functions/strip.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
Actor.strip()
|
||||
|
||||
USE:
|
||||
Strip this actor of all clothes
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Clothes
|
||||
COMPARE: dress
|
||||
|
||||
EXAMPLE:
|
||||
Player.strip()
|
||||
"I'm nude now ..."
|
||||
14
Docs/Modding/Command_Functions/timeout.txt
Normal file
14
Docs/Modding/Command_Functions/timeout.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
timeout(hours, sceneid1, sceneid2, ..., sceneidN)
|
||||
|
||||
USE:
|
||||
Timeout these scenes for x hours so that they won't trigger again. The number of hours is adjusted by the scene frequency setting however.
|
||||
|
||||
TYPE: Command, non-Ref
|
||||
RETURNS: /
|
||||
THEME: Scenes
|
||||
COMPARE: timeoutprecise, timeoutActor, timeoutActorPrecise
|
||||
|
||||
EXAMPLE:
|
||||
"I just met someone. I don't want to meet another person for a while."
|
||||
|
||||
timeout(20, meet_new_person) // could be more or less than 20 hours depending on the scene frequency setting
|
||||
18
Docs/Modding/Command_Functions/timeoutActor.txt
Normal file
18
Docs/Modding/Command_Functions/timeoutActor.txt
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
timeoutActor(hours, sceneID, Actor1, ..., ActorN)
|
||||
|
||||
USE:
|
||||
Similar to timeout, except only for one particular scene. It puts a cooldown on the scene for x hours (adjusted by the scene frequency setting), but only for one or more specified actors, who won't get selected by the WHO condition of the scene.
|
||||
|
||||
TYPE: Command, non-Ref
|
||||
RETURNS: /
|
||||
THEME: Scenes
|
||||
COMPARE: timeout, timeoutPrecise, timeoutActorPrecise
|
||||
|
||||
EXAMPLE:
|
||||
|
||||
Player(Angry)::"Stop calling me so many times a day!"
|
||||
Contact(Offended)::"Uh... Ok, I guess. Catch you tomorrow, maybe?"
|
||||
|
||||
sceneEnd()
|
||||
|
||||
timeoutActor(24, call_invite, Contact)
|
||||
17
Docs/Modding/Command_Functions/timeoutActorPrecise.txt
Normal file
17
Docs/Modding/Command_Functions/timeoutActorPrecise.txt
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
timeoutActorPrecise(hours, sceneID, actor1, ..., actorN)
|
||||
|
||||
USE:
|
||||
Combination of timeoutPrecise and timeoutActor. Puts a scene on cooldown for exactly the amount of hours specified, but limited to the stated actor(s) who will not pass the scene's WHO condition.
|
||||
|
||||
TYPE: Command, Reference
|
||||
RETURNS: /
|
||||
THEME: Scenes
|
||||
COMPARE: timeout, timeoutPrecise, timeoutActor
|
||||
|
||||
EXAMPLE:
|
||||
Friend(Happy)::"Well, I'm off to Barbados for a week. Bye!"
|
||||
Player(Happy)::"Have a good time!"
|
||||
|
||||
sceneEnd
|
||||
|
||||
timeoutActorPrecise(156, call_invite, Friend)
|
||||
13
Docs/Modding/Command_Functions/timeoutPrecise.txt
Normal file
13
Docs/Modding/Command_Functions/timeoutPrecise.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
timeoutPrecise(hours, sceneid1, sceneid2, ..., sceneidN)
|
||||
|
||||
USE:
|
||||
Timeout these scenes for x hours so that they won't trigger again. The number of hours is fixed and not affected by the scene frequency setting.
|
||||
|
||||
TYPE: Command, non-Ref
|
||||
RETURNS: /
|
||||
THEME: Scenes
|
||||
COMPARE: timeout, timeoutActor, timeoutActorPrecise
|
||||
|
||||
Example:
|
||||
"I just celebrated my birthday."
|
||||
timeoutPrecise(8760, birthday) // it will be my birthday again exactly this time next year
|
||||
26
Docs/Modding/Condition_Functions/ForcedTrigger.txt
Normal file
26
Docs/Modding/Condition_Functions/ForcedTrigger.txt
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
ForcedTrigger()
|
||||
|
||||
USE:
|
||||
Returns whether a scene was force triggered with an action that has the SCENE_ALWAYS field filled (which overrides the conditions at the top of a scene). Use it to know if the scene was consciously triggered by the player or randomly triggered.
|
||||
|
||||
TYPE: Condition, non-Ref
|
||||
RETURNS: bool
|
||||
THEME: Scenes
|
||||
COMPARE: sceneStart
|
||||
|
||||
EXAMPLE:
|
||||
The "organize_a_house_party.lpaction" file has the following field filled:
|
||||
SCENE_ALWAYS: house_party
|
||||
|
||||
And the house_party.lpscene consults it like this:
|
||||
PlayerHosting = ForcedTrigger()
|
||||
|
||||
sceneStart()
|
||||
|
||||
If PlayerHosting
|
||||
"My preparations are all done. It's time to welcome the guests!"
|
||||
Player(Happy):: "Come in, everyone! Don't be shy. Everything's ready."
|
||||
Else
|
||||
"My phone rang! It's <Host.name>. I wonder what <Host.he_or_she> is calling me for?"
|
||||
...
|
||||
Endif
|
||||
14
Docs/Modding/Condition_Functions/Tag.txt
Normal file
14
Docs/Modding/Condition_Functions/Tag.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
Tag(tag1, tag2, ..., tagN)
|
||||
|
||||
USE:
|
||||
(Used for lpdesc and lptalk files) Check if the current animation contains ALL of the tags specified.
|
||||
|
||||
TYPE: Condition, non-Ref
|
||||
RETURNS: bool
|
||||
THEME: sex talk
|
||||
COMPARE:
|
||||
|
||||
EXAMPLE:
|
||||
Tag(Hugging, NonSexual, Couple)
|
||||
// To check if the current animation contains ANY of the tags specified, use this instead:
|
||||
Tag(Hugging) || Tag(NonSexual) || Tag(Couple)
|
||||
14
Docs/Modding/Condition_Functions/isAffair.txt
Normal file
14
Docs/Modding/Condition_Functions/isAffair.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
Actor.isAffair()
|
||||
|
||||
USE:
|
||||
Check if you have commited an affair with this actor while with your current boyfriend / girlfriend.
|
||||
|
||||
TYPE: Condition, Reference
|
||||
RETURNS: bool
|
||||
THEME: Relationships
|
||||
COMPARE: forgiveAffairs
|
||||
|
||||
EXAMPLE:
|
||||
If John.isAffair()
|
||||
John(Flirty):: "Oh baby, your stupid boyfriend has no idea what we've done."
|
||||
Endif
|
||||
14
Docs/Modding/Condition_Functions/isAsexual.txt
Normal file
14
Docs/Modding/Condition_Functions/isAsexual.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
Actor.isAsexual()
|
||||
|
||||
USE:
|
||||
returns true if the actor doesn't have any of the gender preferences "interested in male", "interested in female", or "interested in trans".
|
||||
|
||||
TYPE: Condition, Reference
|
||||
RETURNS: bool
|
||||
THEME: Gender Preference
|
||||
COMPARE: isInterestedIn
|
||||
|
||||
EXAMPLE
|
||||
If !Actor.isAsexual() && !Actor.isInterestedIn(Player) && Player.isMale()
|
||||
"<Actor.name> is probably a lesbian."
|
||||
Endif
|
||||
19
Docs/Modding/Condition_Functions/isAtHome.txt
Normal file
19
Docs/Modding/Condition_Functions/isAtHome.txt
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
isAtHome()
|
||||
|
||||
USE:
|
||||
Check if the player is at their own home. Frequently used to separate 'WHERE: home' cases of the player being at home and being at their significant other's home.
|
||||
|
||||
TYPE: Condition, non-Ref
|
||||
RETURNS: bool
|
||||
THEME: Location
|
||||
COMPARE: moveTo
|
||||
|
||||
EXAMPLE:
|
||||
WHERE: home
|
||||
....
|
||||
|
||||
If isAtHome()
|
||||
"Home sweet home"
|
||||
Else
|
||||
"I must be at my boyfriend's house."
|
||||
Endif
|
||||
14
Docs/Modding/Condition_Functions/isBoss.txt
Normal file
14
Docs/Modding/Condition_Functions/isBoss.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
Actor.isBoss()
|
||||
|
||||
USE
|
||||
Check if the actor is the player's boss.
|
||||
|
||||
TYPE: Condition, Reference
|
||||
RETURNS: bool
|
||||
THEME: Job
|
||||
COMPARE: setBoss, moveJobs, getSpecific(Boss)
|
||||
|
||||
EXAMPLE:
|
||||
If John.isBoss()
|
||||
John(Angry):: "You're fired!"
|
||||
Endif
|
||||
14
Docs/Modding/Condition_Functions/isColleague.txt
Normal file
14
Docs/Modding/Condition_Functions/isColleague.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
Actor.isColleague()
|
||||
|
||||
USE:
|
||||
Check if the actor is one of the player's colleagues.
|
||||
|
||||
TYPE: Condition, Reference
|
||||
RETURNS: bool
|
||||
THEME: Job
|
||||
COMPARE: addColleague, removeColleague, getSpecific(Colleague)
|
||||
|
||||
EXAMPLE:
|
||||
If John.isColleague()
|
||||
John(Happy):: "Hey, wanna go for lunch?"
|
||||
Endif
|
||||
17
Docs/Modding/Condition_Functions/isContactExchanged.txt
Normal file
17
Docs/Modding/Condition_Functions/isContactExchanged.txt
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
Actor.isContactExchanged()
|
||||
|
||||
USE:
|
||||
Check if the actor has exchanged numbers with the player.
|
||||
|
||||
TYPE: Condition, Reference
|
||||
RETURNS: bool
|
||||
THEME: Acquaintance
|
||||
COMPARE: blockContact, exchangeContact
|
||||
|
||||
EXAMPLE:
|
||||
If John.isContactExchanged()
|
||||
John(Happy):: "Well, you have my number. Just call me if you need anything else."
|
||||
Else
|
||||
John(Happy):: "Actually, why don't we exchange numbers. So that you'll know how to reach me if you need anything else."
|
||||
exchangeContact(John)
|
||||
Endif
|
||||
20
Docs/Modding/Condition_Functions/isDating.txt
Normal file
20
Docs/Modding/Condition_Functions/isDating.txt
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
Actor.isDating()
|
||||
|
||||
USE:
|
||||
Check if the actor is in a relationship with the player.
|
||||
Alternatively, if the Actor is Player then it checks whether the player is currently in a relationship at all.
|
||||
|
||||
TYPE: Condition, Reference
|
||||
RETURNS: bool
|
||||
THEME: Relationships
|
||||
COMPARE: loseDating, setDating, getSpecific(Dating)
|
||||
|
||||
EXAMPLE:
|
||||
If Player.isDating()
|
||||
"I'm dating someone ..."
|
||||
If John.isDating()
|
||||
"And <John.name> is my <John.boyfriend_or_girlfriend>."
|
||||
Else
|
||||
"But my significant other isn't <John.name>."
|
||||
Endif
|
||||
Endif
|
||||
14
Docs/Modding/Condition_Functions/isDatingFriend.txt
Normal file
14
Docs/Modding/Condition_Functions/isDatingFriend.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
Actor.isDatingFriend()
|
||||
|
||||
USE:
|
||||
Check if the actor is a friend of your significant other
|
||||
|
||||
TYPE: Condition, Reference
|
||||
RETURNS: bool
|
||||
THEME: Acquaintance
|
||||
COMPARE: addDatingFriend, removeDatingFriend, getSpecific(Dating_Friend)
|
||||
|
||||
EXAMPLE:
|
||||
If John.isDatingFriend()
|
||||
John(Happy):: "Nice to meet you at last, <Player.name>. <Dating.name> can't stop talking about you."
|
||||
Endif
|
||||
14
Docs/Modding/Condition_Functions/isDominantSex.txt
Normal file
14
Docs/Modding/Condition_Functions/isDominantSex.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
Actor1.isDominantSex(Actor2)
|
||||
|
||||
USE:
|
||||
Check if the one actor would take a dominant role in a sexual relationship with another actor. This doesn't take into account sexual orientation. The rule is male is dominant to female, female with penis dominant to female with vagina. When it's male-male or female-female, it compares the masochist / submissive stat, the actor with lower masochist is dominant. Useful for mostly gender-related roles (opening doors, who walks who home etc)
|
||||
|
||||
TYPE: Condition, Reference
|
||||
RETURNS: bool
|
||||
THEME: Gender, Dominance
|
||||
COMPARE: isMale, isSameGender
|
||||
|
||||
EXAMPLE:
|
||||
If John.isDominantSex(Player)
|
||||
"A <John.guy_or_girl> approached me and introduced <John.himself_or_herself> as <John.name>."
|
||||
Endif
|
||||
14
Docs/Modding/Condition_Functions/isInterestedIn.txt
Normal file
14
Docs/Modding/Condition_Functions/isInterestedIn.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
Actor1.isInterestedIn(Actor2)
|
||||
|
||||
USE:
|
||||
Check if the one actor is interested sexually in another actor's gender. Does not take into account attractiontoplayer stat, just look at Actor1's sexual orientation and Actor2's gender.
|
||||
|
||||
TYPE: Condition, Reference
|
||||
RETURNS: bool
|
||||
THEME: Gender Preference
|
||||
COMPARE:
|
||||
|
||||
EXAMPLE:
|
||||
If John.isInterestedIn(Player)
|
||||
"A <John.guy_or_girl> approached me and introduced <John.himself_or_herself> as <John.name>."
|
||||
Endif
|
||||
14
Docs/Modding/Condition_Functions/isLandlord.txt
Normal file
14
Docs/Modding/Condition_Functions/isLandlord.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
Actor.isLandlord()
|
||||
|
||||
USE:
|
||||
Check if the actor is your landlord.
|
||||
|
||||
TYPE: Condition, Reference
|
||||
RETURNS: bool
|
||||
THEME: Housing
|
||||
COMPARE: setLandlord, getSpecific(Landlord)
|
||||
|
||||
EXAMPLE:
|
||||
If John.isLandlord()
|
||||
John(Angry):: "Hey, there has been a noise complaint about you."
|
||||
Endif
|
||||
14
Docs/Modding/Condition_Functions/isMale.txt
Normal file
14
Docs/Modding/Condition_Functions/isMale.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
Actor.isMale()
|
||||
|
||||
USE:
|
||||
Check if the actor is male.
|
||||
|
||||
TYPE: Condition, Reference
|
||||
RETURNS: bool
|
||||
THEME: Gender
|
||||
COMPARE: isDominantSex, isSameGender, isInterestedIn
|
||||
|
||||
EXAMPLE:
|
||||
If John.isMale()
|
||||
"<John.name> is a dude!"
|
||||
Endif
|
||||
17
Docs/Modding/Condition_Functions/isMarried.txt
Normal file
17
Docs/Modding/Condition_Functions/isMarried.txt
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
Actor.isMarried()
|
||||
|
||||
USE:
|
||||
Returns true if the calling actor is married.
|
||||
|
||||
TYPE: Condition, Reference
|
||||
RETURNS: bool
|
||||
THEME: Relationships
|
||||
COMPARE: isDating
|
||||
|
||||
EXAMPLE:
|
||||
Parent = getRelative(Parent)
|
||||
If Parent.isValid()
|
||||
If !Parent.isMarried()
|
||||
"Ever since my <Parent.mom_or_dad> left <Parent.o>, my <Parent.dad_or_mom> hasn't been the same."
|
||||
Endif
|
||||
Endif
|
||||
14
Docs/Modding/Condition_Functions/isModEnabled.txt
Normal file
14
Docs/Modding/Condition_Functions/isModEnabled.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
isModEnabled(ModID)
|
||||
|
||||
USE:
|
||||
Check if a mod, identified by its ID in its .lpmod file, is enabled.
|
||||
|
||||
TYPE: Condition, non-Ref
|
||||
RETURNS: bool
|
||||
THEME: Mods
|
||||
COMPARE:
|
||||
|
||||
EXAMPLE:
|
||||
If isModEnabled(vin_VanillaPorn)
|
||||
"Some really silly porn plot is going to happen!"
|
||||
Endif
|
||||
14
Docs/Modding/Condition_Functions/isNeighbour.txt
Normal file
14
Docs/Modding/Condition_Functions/isNeighbour.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
Actor.isNeighbour()
|
||||
|
||||
USE:
|
||||
Check if the actor is one of your neighbours.
|
||||
|
||||
TYPE: Condition, Reference
|
||||
RETURNS: bool
|
||||
THEME: Housing
|
||||
COMPARE: addNeighbour, removeNeighbour, getSpecific(Neighbour)
|
||||
|
||||
EXAMPLE:
|
||||
If John.isNeighbour()
|
||||
John(Happy):: "Hey, I'm your neighbour. Nice to meet you!"
|
||||
Endif
|
||||
14
Docs/Modding/Condition_Functions/isPlayer.txt
Normal file
14
Docs/Modding/Condition_Functions/isPlayer.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
Actor.isPlayer()
|
||||
|
||||
USE:
|
||||
Check if the actor is the player.
|
||||
|
||||
TYPE: Condition, Reference
|
||||
RETURNS: bool
|
||||
THEME: Identity
|
||||
COMPARE: getID, isSameAs
|
||||
|
||||
EXAMPLE:
|
||||
If John.isPlayer()
|
||||
"Should have just use the variable Player!"
|
||||
Endif
|
||||
20
Docs/Modding/Condition_Functions/isRelative.txt
Normal file
20
Docs/Modding/Condition_Functions/isRelative.txt
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
Actor.isRelative()
|
||||
|
||||
USE:
|
||||
returns true if the calling actor is a relative of the player's
|
||||
|
||||
TYPE: Condition, Reference
|
||||
RETURNS: bool
|
||||
THEME: Family
|
||||
COMPARE: getRelative, getRelativeExcept
|
||||
|
||||
EXAMPLE:
|
||||
"Should I make a pass at <Actor.name>?"
|
||||
0:: "Yes"
|
||||
1:: "No"
|
||||
|
||||
If 0
|
||||
If Actor.isRelative()
|
||||
Actor(Disgusted):: "Ew, sick!"
|
||||
Endif
|
||||
Endif
|
||||
14
Docs/Modding/Condition_Functions/isSameAs.txt
Normal file
14
Docs/Modding/Condition_Functions/isSameAs.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
Actor1.isSameAs(Actor2)
|
||||
|
||||
USE:
|
||||
Check if the two actors are the same person
|
||||
|
||||
TYPE: Condition, Reference
|
||||
RETURNS: bool
|
||||
THEME: Identity
|
||||
COMPARE: getID, isPlayer
|
||||
|
||||
EXAMPLE:
|
||||
If John.isSameAs(Jack)
|
||||
"They're the same dude!"
|
||||
Endif
|
||||
14
Docs/Modding/Condition_Functions/isSameGender.txt
Normal file
14
Docs/Modding/Condition_Functions/isSameGender.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
Actor1.isSameGender(Actor2)
|
||||
|
||||
USE:
|
||||
Check if the two actors are the same gender
|
||||
|
||||
TYPE: Condition, Reference
|
||||
RETURNS: bool
|
||||
THEME: Gender
|
||||
COMPARE: isMale, isDominantSex, isInterestedIn
|
||||
|
||||
EXAMPLE:
|
||||
If John.isSameGender(Jack)
|
||||
"They're both <John.male_or_female>."
|
||||
Endif
|
||||
19
Docs/Modding/Condition_Functions/isValid.txt
Normal file
19
Docs/Modding/Condition_Functions/isValid.txt
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
Actor.isValid()
|
||||
|
||||
USE:
|
||||
Check if an actor variable is valid. Most commonly used after GetPerson(), GetCompanion() or GetSpecific()
|
||||
|
||||
TYPE: Condition, Reference
|
||||
RETURNS: bool
|
||||
THEME: Actor Loading
|
||||
COMPARE: getPerson, getSpecific
|
||||
|
||||
EXAMPLE:
|
||||
John = getSpecific(Colleague)
|
||||
If John.isValid()
|
||||
"I have at least one colleague"
|
||||
Else
|
||||
John = generatePerson()
|
||||
John.addColleague()
|
||||
"I met a new colleague, <John.name>"
|
||||
Endif
|
||||
14
Docs/Modding/Condition_Functions/isWithCompanion.txt
Normal file
14
Docs/Modding/Condition_Functions/isWithCompanion.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
isWithCompanion()
|
||||
|
||||
USE:
|
||||
Check if the player is currently hanging out with a companion.
|
||||
|
||||
TYPE: Condition, non-Ref
|
||||
RETURNS: bool
|
||||
THEME: Companions
|
||||
COMPARE: getCompanion, startDate, endDate, "CurrentCompanion" global var
|
||||
|
||||
EXAMPLE:
|
||||
If isWithCompanion()
|
||||
"I'm currently with <CurrentCompanion.name>."
|
||||
Endif
|
||||
18
Docs/Modding/Condition_Functions/livesWithPlayer.txt
Normal file
18
Docs/Modding/Condition_Functions/livesWithPlayer.txt
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
Actor.livesWithPlayer()
|
||||
|
||||
USE:
|
||||
Returns true if the actor lives with the player, ie in the same apartment, not the same building (that'd be a neighbour).
|
||||
|
||||
TYPE: Condition, Reference
|
||||
RETURNS: bool
|
||||
THEME: Housing
|
||||
COMPARE: isNeighbour
|
||||
|
||||
EXAMPLE:
|
||||
|
||||
Parent = getRelative(Parent)
|
||||
if Parent.isValid()
|
||||
if Parent.livesWithPlayer()
|
||||
Player(Sad)::"I still live with my <Parent.dad_or_mom>."
|
||||
endif
|
||||
endif
|
||||
37
Docs/Modding/FullGuides/Creating_Actions.txt
Normal file
37
Docs/Modding/FullGuides/Creating_Actions.txt
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
CREATING ACTIONS
|
||||
|
||||
Actions are the activities you can choose from when you click on a building. You add them to your mod with an .lpaction file.
|
||||
|
||||
Let's look at an example:
|
||||
|
||||
ACTION_UNIQUEID: have_a_meal_in
|
||||
ACTION_NAME: Have a meal
|
||||
WHERE: home, work
|
||||
WHEN: 5.30 - 22.30
|
||||
MINUTES: 40 - 90
|
||||
TIMEOUT_MINUTES: 180
|
||||
ALSO_TIMEOUT: have_a_snack_in, have_a_snack, have_a_meal_in
|
||||
EFFECTS: stock_meal -1 (START), mood +3 (END), energy +15 (DURATION), mood -1 (INTERRUPTED)
|
||||
CONDITIONS: stock_meal >= 0.8 (STAT_COMPARE)
|
||||
MOVE_FIRST: true
|
||||
SCENE_ALWAYS:
|
||||
ANIMATION:
|
||||
|
||||
1. ACTION_UNIQUEID is the ID for the action. Scenes use this to figure out if they should be triggered during this action or not.
|
||||
2. ACTION_NAME is how the action is displayed in the list of choices for the building.
|
||||
3. WHERE contains the locations where the action is available. See Docs/Modding/Lists/All_wheres.txt
|
||||
4. WHEN contains a time range during which the action is available. This can also roll over from one day to the next: 22 - 4
|
||||
5. MINUTES gives you a range to specify or randomize how long the action should take.
|
||||
6. TIMEOUT_MINUTES makes it impossible to have the same action again for a specific number of minutes.
|
||||
7. ALSO_TIMEOUT contains the IDs of other actions that should also time out for the time stated in TIMEOUT_MINUTES.
|
||||
8. EFFECTS contains the effect the action should have on the player's stats. Different flags, between parentheses, mean different things here:
|
||||
START: the effect is applied when the action begins
|
||||
END: the effect is applied when the action ends
|
||||
DURATION: the effect is gradually applied during the action. If the action is aborted early, that means part of the effect has been applied.
|
||||
INTERRUPTED: the effect is applied when the action is interrupted
|
||||
BUFF:minutes : this effect is applied for a certain amount of minutes, for example
|
||||
attractiveness +5 (BUFF:300)
|
||||
9. CONDITIONS contains additional conditions (beyond WHERE and WHEN) that need to be true for the action to be available. This is currently limited to checking the value of stats, marked with (STAT_COMPARE).
|
||||
10. MOVE_FIRST contains a bool that checks if the player should be moved to the location first before performing the action.
|
||||
11. SCENE_ALWAYS lists a scene ID that should immediately trigger when the action is started. It's best to limit this use to action files of your own, rather than modifications of someone else's.
|
||||
12. ANIMATION lists animations that should play while the action lasts. Hardly any animations are available for this, but eg sleep.lpaction comes with such an anim.
|
||||
40
Docs/Modding/FullGuides/Creating_Presets.txt
Normal file
40
Docs/Modding/FullGuides/Creating_Presets.txt
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
CREATING PRESETS
|
||||
|
||||
1. Intro
|
||||
|
||||
Presets are used in scene scripts to create characters according to specific intel on body morphs, hair, skin, eyes, stats, gender and sexual preferences. They can also be used by players during character generation, or when they edit an existing character's appearance.
|
||||
|
||||
Character presets are really character files (.lpcharacter). The game creates such files for every character it generates, and stores them in Content/Saves, according to your save slot, whenever you perform a save. In the meantime, they're held in Content/Saves/_session.
|
||||
|
||||
2. Exporting from game
|
||||
|
||||
When you first create your character on starting a new game, you can choose to export it, at any time, to a file and folder of your choosing under Content/Modules. You can do the same when you edit an existing character via the Contacts menu.
|
||||
|
||||
When you export your own character, this happens before you can set your stats in the menu that follows, so stat information will not be entered into the file you create. Typically, it'll also only contain any information that deviates from the default character (Content/Saves/Default).
|
||||
|
||||
Full information for your, or any other character, can still be found in Content/Saves. Simply copy a file of a character from there to your mod's folder to be able to have a 'full' file.
|
||||
|
||||
|
||||
3. Editing an .lpcharacter file
|
||||
|
||||
All intel fields in an exported file will have only 1 value, with a 100% chance of that value being true. After all, the character you made or edited, really did have that single value set on them.
|
||||
|
||||
If you want to use it as a preset, however, you may want to randomize certain information. You do this by
|
||||
- replacing a single float value with a numeric range:
|
||||
eg
|
||||
SKIN Skin_Age: 100% 0.031212
|
||||
can become
|
||||
SKIN Skin_Age: 100% 0.4=>0.7
|
||||
|
||||
- replacing any single value by a weighted list of values:
|
||||
eg
|
||||
INFO Interested_In_Men: 100% false
|
||||
can become
|
||||
INFO Interested_In_Men: 70% false, 30% true
|
||||
|
||||
A lot of what's in an .lpcharacter file should be fairly easy to adjust:
|
||||
- INFO and STAT shouldn't give you any problems
|
||||
- skin, hair and eye color involve looking up RGB values somewhere and converting them to a float value between 0 and 1
|
||||
- stipulating race, hair type, beard type etc may involve exporting a few different characters to figure out the ID of those things (or looking inside the game's content with the Unreal Editor)
|
||||
|
||||
The only thing that'll be hard to predict is probably the thing you're most likely to want to know more about: face and body morph data. I can't help you there. You'll need to see it in-game to know what works and what doesn't.
|
||||
27
Docs/Modding/FullGuides/Getting_Started.txt
Normal file
27
Docs/Modding/FullGuides/Getting_Started.txt
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
GETTING STARTED
|
||||
|
||||
LifePlay content is both moddable ('modification') and modular ('module'): even the 'official' content is really 'just a mod'.
|
||||
|
||||
A mod consists of a folder that goes into the LifePlay/Content/Modules folder.
|
||||
|
||||
At the very least it should contain an .lpmod file, which contains its basic meta-information:
|
||||
MODULE_UNIQUEID: vin_NTR // unique ID for the mod, must match the mod folder's name under Content\Modules
|
||||
MODULE_NAME: Official Netorare Module
|
||||
MODULE_AUTHOR: Vinfamy
|
||||
MODULE_LINK: www.loverslab.com
|
||||
MODULE_DESCRIPTION: Netorare, cuckoldry, being cheated on - aka the most divisive fetish on the internet
|
||||
MODULE_REQUIREMENTS: vin_VanillaRealistic // The UniqueID of mods that are needed in order for this one to work. If your mod refers to another's stats, actions, scenes etc, you need to fill this in.
|
||||
|
||||
The most easily moddable content consists of:
|
||||
- Scenes, which are in .lpscene files. These are the virtual-novel type story situations that potentially lead to sex. See Docs/Modding/FullGuides/Writing_Scenes.txt
|
||||
- Actions, which are in .lpaction files. These are the activities you can choose when you click on a building. See Docs/Modding/FullGuides/Creating_Actions.txt
|
||||
- Descriptions, which are in .lpdesc files. These are the narrations that appear in the top right corner during a sex scene. See Docs/Modding/FullGuides/Writing_Sex_Text.txt
|
||||
- DirtyTalks, which are in .lptalk files. These are dialogue lines floating near characters during sex scenes.See Docs/Modding/FullGuides/Writing_Sex_Text.txt
|
||||
- Stats, which are in .lpstat files. They contain stats that the player and/or NPCs have, and are consulted in other file types. See Docs/Modding/ShortGuides/explanation.lpstat
|
||||
- Characters, which are in .lpcharacter files. They are generated in-game when characters are created, and you can also export them when in the character creation menu. They can contain a variety of information. When placed inside a mod folder, they can be used as character presets by the player and by Scene scripts that generate or modify characters. See Docs/Modding/FullGuides/Creating_Presets.txt
|
||||
|
||||
It's definitely best to write and edit such files in a text editor that is good for coding and scripting. Avoid word processors such as Microsoft Word like the plague. These docs contain a syntax highlighter for Notepad++, so unless you prefer Atom or something, you should probably use NP++. It's free.
|
||||
|
||||
How you organize these files inside your own mod is really up to you. The vin_Base module's way of organizing them in folders by file type is a pretty good standard to follow though.
|
||||
|
||||
If two mods contain the exact same file in the same place, the one lowest in the load order wins. You can manage the load order in-game with the mod manager (ctrl-M).
|
||||
429
Docs/Modding/FullGuides/Writing_Scenes.txt
Normal file
429
Docs/Modding/FullGuides/Writing_Scenes.txt
Normal file
|
|
@ -0,0 +1,429 @@
|
|||
1. Basics
|
||||
2. Triggering a scene
|
||||
3. Scoping
|
||||
3.1. Creating a new actor
|
||||
3.2. Loading an actor
|
||||
3.3. Introducing the actor
|
||||
3.4. Removing the actor
|
||||
4. Main script
|
||||
4.1. Descriptions and Dialogue
|
||||
4.2. Functions
|
||||
4.3. Variables and Stats
|
||||
4.4. Choices
|
||||
4.5. Conditions
|
||||
4.6. Loops
|
||||
4.7. Random
|
||||
4.8. Commenting, Indentation
|
||||
5. Testing
|
||||
|
||||
1. Basic structure
|
||||
|
||||
A 'scene' in the game is a virtual novel-type showing of characters with dialogue and choices, potentially leading to a sex scene. Scenes are built by a script in an .lpscene file, which is typically structured as follows:
|
||||
|
||||
// trigger conditions
|
||||
WHAT:
|
||||
WHERE:
|
||||
WHEN:
|
||||
WHO:
|
||||
OTHER:
|
||||
|
||||
// some code can happen before the scene UI triggers
|
||||
|
||||
SceneStart() // brings up scene UI
|
||||
|
||||
// scene script goes here
|
||||
|
||||
SceneEnd() // closes scene UI, removes newly generated chars & sticks them back in their lpcharacters
|
||||
|
||||
timeout(200, sceneID) // cooldown on the scene appearing again
|
||||
|
||||
|
||||
2. Triggering a Scene
|
||||
|
||||
At the top of the scene are a few fields where you can stipulate basic conditions for the scene to trigger randomly.
|
||||
|
||||
WHAT: sleep, masturbate
|
||||
// lists the activities that can trigger the scene using their ID, separated by commas. See the 'Actions' folder of loaded modules to figure out which are available. Alternatively, you can use 'all' and exempt certain actions by prepending them with a - symbol:
|
||||
// WHAT: all, -sleep
|
||||
// If you don't want to put anything here, add 'none'
|
||||
// WHAT: none
|
||||
|
||||
WHERE: home, office
|
||||
// lists locations that trigger the scenes. See the Docs/Lists/All_wheres.txt for locations. You can also use all and -home, for instance, as with WHAT.
|
||||
// If you don't want to put anything here, add 'none'
|
||||
// WHERE: none
|
||||
|
||||
WHEN: 9-21
|
||||
// time periods when scene is available, can roll over a date transition (22-4)
|
||||
|
||||
WHO: Actor = getSpecific(Dating)
|
||||
// Assigns an actor id to the "actor" variable. This variable can be named whatever, and is simply a way of knowing if an actor with the specific scope is available and immediately being able to refer to them in the rest of the script. See 3.: scoping. Multiple actors can be introduced, separated by a semi-colon:
|
||||
// WHO: Dating = getSpecific(Dating); Affair = getSpecific(Affair); Actor = getSpecific(Dating_Friend)
|
||||
|
||||
// Additional conditions depending on the actor(s) can be added after this with a semi-colon and a leading 'If', like
|
||||
// WHO: Actor = getSpecific(ExDating); If !Actor.isContactExchanged() && Random(20,100) < Actor:rapportwithplayer
|
||||
|
||||
// If the game fails to find an appropriate actor or if the following If-condition returns false, the scene will be skipped.
|
||||
// If you don't want to put anything here, just add 'none'
|
||||
// WHO = none
|
||||
|
||||
OTHER: !isWithCompanion
|
||||
// other conditions
|
||||
|
||||
|
||||
Alternatively, you can bypass these trigger conditions if you enter the name of the scene to the SCENE_ALWAYS field of an action file. For an example in the base game, see
|
||||
Modules/vin_Base/Actions/Social/organize_a_house_party.lpaction
|
||||
Modules/vin_Base/Scenes/Social/house_party.lpscene
|
||||
house_party can still trigger randomly, but if you organize it yourself, it immediately triggers. In order to know if it was force-triggered or not, to make sure your text and code can follow up on that, you can use the ForcedTrigger condition.
|
||||
|
||||
|
||||
3. Scoping
|
||||
|
||||
Scoping is necessary for any scene involving more than the player. It winds down to either creating a new actor or finding an existing one, and then storing their ID in a variable for use in the scene.
|
||||
Scoping can happen inside or outside the main script, as well as in the WHO condition on top.
|
||||
|
||||
3.1. Creating a new actor
|
||||
|
||||
There are two ways of creating a new actor to introduce to your player's life: a permanent one and a temporary one.
|
||||
|
||||
GeneratePerson() creates an actor who will stay in your game permanently, and assigns their actorID to the variable you call the function on:
|
||||
ActorVar = GeneratePerson()
|
||||
Between those parentheses, you can specify any actor presets you want to use (see the Presets folder of the modules). For instance, if you want to create a bodybuilder male, you type:
|
||||
ActorVar = GeneratePerson(bodybuilder)
|
||||
You can combine presets too:
|
||||
ActorVar = GeneratePerson(easterneuropean, twenties, fitness_model)
|
||||
|
||||
While this already gives you some control over who is created, it might not be enough. Certain data such as gender preference and most actor stats is entirely randomized on creation, so you may need to create a few actors before you land on the right person. Or you may simply want to create an actor who's only needed for the duration of the scene, but shouldn't stay in your game permanently.
|
||||
|
||||
GeneratePersonTemporary() creates such a non-permanent actor, and uses the same presets as GeneratePerson. Sex with temporary actors doesn't count as an affair.
|
||||
|
||||
For example, if you want to only generate an actor who's interested in your gender, you could use a while loop to generate temporary actors until you find the right one:
|
||||
|
||||
ActorVar = GeneratePersonTemporary()
|
||||
While !ActorVar.isInterestedIn(Player)
|
||||
ActorVar = GeneratePersonTemporary()
|
||||
EndWhile
|
||||
|
||||
After that, you can still make the temporary actor permanent, by using the makePermanent function:
|
||||
|
||||
ActorVar.makePermanent()
|
||||
|
||||
And it's possible that you want to apply a preset to a person after they're already generated:
|
||||
ActorVar.blendPreset(bodybuilder)
|
||||
|
||||
When you do so, however, their face and hair will most likely be set to the default for that preset, causing some repetition. You can mix things up a little with:
|
||||
ActorVar.randomizeFace()
|
||||
ActorVar.randomizeHairs()
|
||||
|
||||
|
||||
3.2. Loading an actor
|
||||
|
||||
In order to find a (permanent) actor to use in your scene, you have the following options:
|
||||
|
||||
- "Player" is you. Yes, you! "Player" is a special global var that always contains the player's actorID.
|
||||
|
||||
- "CurrentCompanion" is a special global var that'll always hold your current companion's ID so you can use it right away. Its function counterpart is getCompanion, which is largely pointless.
|
||||
CurrentCompanion.dress()
|
||||
is the same as
|
||||
ActorVar = getCompanion()
|
||||
ActorVar.dress()
|
||||
|
||||
- getPerson() gets a random actor.
|
||||
ActorVar = getPerson() // get a random, permanent actor
|
||||
ActorVar = getPerson(true) // get a random actor whose number you have
|
||||
ActorVar = getPerson(false) // get a random actor whose number you don't have
|
||||
|
||||
- getSpecific() gets a specific actor. You can stipulate which actor by
|
||||
- keyword: Dating (bf/gf), Dating_Friend (friend of your bf/gf), Boss, Colleague, Neighbour, PT (personal trainer), ExDating (ex-bf/gf), Landlord, CurrentBabyDaddy (father of player's unborn child), Impregnated (carrying player's child)
|
||||
|
||||
- ID: every actor has a reference number that you can get with the getID() function. You can store it in a global var and look it up later in order to find them back again:
|
||||
ID = ActorVar.GetID // 'ID' is a local var
|
||||
MySpecialNPC.SetGlobal(ID) // there now is a 'MySpecialNPC' global var with the value previously stored in 'ID'
|
||||
and then in another script:
|
||||
ID = MySpecialNPC.GetGlobal()
|
||||
if ID != 0
|
||||
Actor = getSpecific(ID)
|
||||
endif
|
||||
|
||||
|
||||
3.3. Introducing the actor
|
||||
|
||||
Once you have an actor selected for your scene, chances are you want him or her to actually show up:
|
||||
Actor.show()
|
||||
|
||||
Perhaps they should be dressed first though, so let's type
|
||||
Actor.dress()
|
||||
Actor.show()
|
||||
|
||||
You can specify where on the screen the actor is to show up with a number, stating their position, from right to left:
|
||||
Actor.show(2)
|
||||
|
||||
3.4. Removing the actor
|
||||
|
||||
Once you no longer need or want an actor in the scene, you can remove them:
|
||||
Actor.hide()
|
||||
When the scene ends, all actors are removed from the scene UI automatically.
|
||||
|
||||
|
||||
4. Main script
|
||||
|
||||
The main script will typically consist of a sequence of descriptions and dialogue, functions, operators, and choices. Everything is written and read from top to bottom.
|
||||
Its structure is usually given shape with 'if'-conditions, and sometimes 'while'-loops or 'Random' structures.
|
||||
|
||||
4.1. Descriptions and Dialogue
|
||||
|
||||
Scene descriptions provide narration and are added between double quotation marks:
|
||||
"I heard a knock on the door. I wonder who it is."
|
||||
|
||||
Dialogue is also between double quotation marks, but is preceded by the actor speaking it:
|
||||
|
||||
Player:: "Oh, it's you, <Actor.name>. What a shame though, <Dating.name> just went out and won't be back for another few hours."
|
||||
Actor(Happy):: "Yes, I know. <Dating.S> told me."
|
||||
|
||||
As you can tell, you can direct the emotion of the actor by inserting a "mood" keyword in parentheses after the actor. A list of available mood keywords is in Docs/Lists/All_moods.txt.
|
||||
|
||||
Both scene descriptions and dialogue can dynamically insert text based on an actor var. This is called interpolating, and is marked by < >.
|
||||
<Actor.name> // Actor's first name
|
||||
<Actor.name_last> // Actor's last name
|
||||
<Actor.relationship> // Player's family relationship to the actor
|
||||
<Actor.callplayer> // Actor's family relationship to the Player
|
||||
<Actor.S> or <Actor.s> // Subject pronoun: I, he, she - with or without capitalization
|
||||
<Actor.P> or <Actor.p> // Possessive adjective: my, his, her
|
||||
<Actor.O> or <Actor.o> // Object pronoun: me, him, her
|
||||
<Actor.R> or <Actor.r> // Reflexive pronoun: myself, himself, herself
|
||||
<Actor.PP> or <Actor.pp> // Possessive pronoun: mine, his, hers
|
||||
|
||||
In order to choose between other words to inject, based on the actor's gender, you park them between _or_:
|
||||
<Actor.name> is a successful <Actor.man_or_woman>.
|
||||
|
||||
If you've stored a string in a var, you can also use that:
|
||||
myGift = "chocolates"
|
||||
herPref = "flowers"
|
||||
"I gave her <myGift> but she said she preferred <herPref>."
|
||||
|
||||
|
||||
4.2. Functions
|
||||
|
||||
All existing functions are listed in /Docs/Modding. Each file under Docs/Modding/Command_Functions and Docs/Modding/Condition_Functions describes the use of a single function.
|
||||
|
||||
If you're unsure what you're looking for, consider using the Lists/Functions_By_Theme.txt file, which groups functions according to the context in which they're used.
|
||||
|
||||
Let's go over what's typically in one of them.
|
||||
- The top line is a short example showcasing the function's syntax.
|
||||
Actor.addColleague()
|
||||
- USE: this field describes what the function is for.
|
||||
- TYPE: this field tells you what kind of function it is. Eg a command or a condition, a reference function (meant to run on an actor) or not.
|
||||
- RETURNS: if the function returns a data type, this field will tell you which one.
|
||||
- THEME: keywords describing the context in which this function is used (see Lists/Functions_By_Theme.txt)
|
||||
- COMPARE: other functions relevant to this one
|
||||
- EXAMPLE: an example in context
|
||||
|
||||
|
||||
4.3. Variables and Stats
|
||||
|
||||
Three types of variables are available:
|
||||
- local ones you use in the script
|
||||
- global ones you use with the getGlobal and setGlobal functions
|
||||
- actor stats
|
||||
|
||||
Local variables can be added at any point by simply assigning them a value with "=". You don't need to declare them first. The values can be numbers, actorIDs, boolean (true/false), as well as strings:
|
||||
Choices = 7 // stores number
|
||||
Friend = getPerson(true) // stores actorID
|
||||
Dating = Friend.isDating() // stores true or false
|
||||
DateType = "Hang Out" // stores string, this can be injected in a description or dialog: "<DateType> with <Friend.name>"?
|
||||
|
||||
Global variables are stored outside of the script and can be consulted in any other script. You create them by giving them a name and setting them to a value (either explicit or contained in a local var):
|
||||
myGlobalVarName.setGlobal(5)
|
||||
myGlobalVarName.setGlobal(myLocalVar)
|
||||
They are consulted by passing them to a local var:
|
||||
myLocalVar = myGlobalVarName.getGlobal()
|
||||
You delete them like this:
|
||||
myGlobalVarName.clearGlobal()
|
||||
|
||||
Actor stats are added to the game with separate .lpstat files in the module (/"Stats"). They are consulted on an actor by connecting the actor var with the actor stat's ID with a colon:
|
||||
if 20 > actorA:perversion
|
||||
attr = actorB:attractiveness
|
||||
If you don't specify the actor, the game will assume you mean to check the stat on the player:
|
||||
if 30 < perversion
|
||||
is the same as
|
||||
if 30 < Player:perversion
|
||||
Unlike local vars, you cannot assign a value to actor stats with '=' but must use '=>' instead:
|
||||
actorA:attractiontoplayer => 20
|
||||
|
||||
Local numeric and actor variables can be easily manipulated with 'assignment operators', setting their value to the result of a calculation involving themselves:
|
||||
somefloat += 1 // the same as somefloat = somefloat + 1
|
||||
somefloat -= 2
|
||||
actor:somestat *= 0.8
|
||||
actor:somestat /= 2
|
||||
|
||||
4.4. Choices
|
||||
|
||||
If you want to give the player a choice between several options on how to proceed further in the scene, you set them up with consecutive integers starting with 0, followed by two colons:
|
||||
|
||||
SO = getSpecific(Dating)
|
||||
|
||||
"<SO.name> has hardly spoken a word all night. What do I do?"
|
||||
0:: "Enjoy the peace and quiet."
|
||||
1:: "Tell a joke"
|
||||
2:: "What's wrong, <SO.name>?"
|
||||
|
||||
You can also make certain choices only selectable if they meet a certain condition:
|
||||
0:: masochism < -20:: "Enjoy the peace and quiet."
|
||||
1:: interpersonal > 30:: "Tell a joke."
|
||||
2:: "What's wrong, <SO.name>?"
|
||||
|
||||
Make sure that one option is always selectable so that the player doesn't get stuck. In order to follow up on these choices, you're going to need if-conditions.
|
||||
|
||||
|
||||
4.5. Conditions
|
||||
|
||||
Conditions make sure that certain code is only executed under certain circumstances. Conditions are already part of the top triggers of a scene, the triggers of an action file, or choices, but you can also add some in the main script with an if-structure.
|
||||
|
||||
If-structures are useful for any kind of branching that you want to see in the scene, and essential to follow up on previous choices:
|
||||
|
||||
If 0
|
||||
SO(Angry)::"You never pay any attention to me!"
|
||||
Elseif 1
|
||||
SO(Happy)::"You always know how to cheer me up."
|
||||
Else
|
||||
SO(Disgusted)::"Well I met <Frenemy.name> today and would you believe she had the nerve to tell me that..."
|
||||
Endif
|
||||
|
||||
If-structures are organized as follows:
|
||||
If conditionA // opens the if-structure
|
||||
// lines dependent on conditionA being true
|
||||
Elseif conditionB // optional elseif
|
||||
// lines dependent on conditionA being false but conditionB being true
|
||||
... // there can be multiple elseifs, each one assuming that the conditions above are false
|
||||
Else // optional else: there can be only one
|
||||
// lines dependent on all of the conditions above being false
|
||||
Endif // closes the structure
|
||||
|
||||
They can also be nested:
|
||||
If conditionA
|
||||
If conditionAA
|
||||
Elseif conditionAB
|
||||
Endif
|
||||
Elseif conditionB
|
||||
if conditionBA
|
||||
Else
|
||||
Endif
|
||||
Endif
|
||||
|
||||
Apart from conditions following up on choices, any condition is always boolean: it only evaluates whether the entire expression that follows is true or false.
|
||||
To make certain that your expression will be valid for a condition, it should contain either
|
||||
- (boolean) condition functions, which return 'true' or 'false'
|
||||
If Actor.livesWithPlayer()
|
||||
If isWithCompanion() etc.
|
||||
In order to check the reverse of a boolean function, you prepend it with the not symbol (!):
|
||||
!Actor.liveswithPlayer()
|
||||
|
||||
- vars containing 'true' or 'false' as a value
|
||||
If conditionA
|
||||
breakup = true // assigns 'true' to the variable
|
||||
Else
|
||||
breakup = false
|
||||
Endif
|
||||
...
|
||||
If breakup // var's value returns true or false, so this is a valid expression
|
||||
|
||||
Endif
|
||||
|
||||
- comparison operators that check the value of a variable or stat against another value or var/stat
|
||||
If MyLocalVar > Actor.interpersonal // greater than
|
||||
Elseif attractiveness < 20 // smaller than
|
||||
Elseif MyLocalVar != 0 // not equal to
|
||||
Elseif Actor.intelligence == 60 // equal to
|
||||
Elseif perversion >= 30 // greater than or equal to
|
||||
Elseif Actor.intelligence <= 20 // smaller than or equal to
|
||||
Endif
|
||||
|
||||
- a combination of the above, held together with logical operators:
|
||||
&& means AND:
|
||||
If Actor.isMale() && Actor.isDating()
|
||||
"<Actor.name> is my boyfriend."
|
||||
Endif
|
||||
|
||||
|| means OR:
|
||||
If Actor.isColleague() || Actor.isBoss()
|
||||
"It was odd seeing <Actor.name> outside of work."
|
||||
Endif
|
||||
|
||||
OR takes precedence over AND, so the following
|
||||
If Actor.isColleague() && Actor.isMale() || Actor.isBoss()
|
||||
is only true if the actor is
|
||||
either male or your boss
|
||||
AND a colleague
|
||||
which, given how colleagues and bosses are different groups, means that it will never be true for your boss. You probably meant for the condition to always and only be true for either bosses or male colleagues.
|
||||
If so, you can use brackets [] to override the hierarchy:
|
||||
If [Actor.isColleague() && Actor.isMale()] || Actor.isBoss()
|
||||
It's never a bad idea to add brackets, if only just for readability.
|
||||
|
||||
Just like with boolean functions, any expression inside brackets can be preceded by the NOT operator: !
|
||||
If ![Actor.isColleague() && Actor.isMale()]
|
||||
|
||||
|
||||
4.6. Loops
|
||||
|
||||
A while-loop repeats code and lines as long as the conditional expression that follows 'while' is true:
|
||||
While intoxication < 80
|
||||
Creep(Grin)::"Can I ply you with another drink?"
|
||||
Player(Happy)::"Sure, I can do with another..."
|
||||
intoxication += 10
|
||||
endWhile
|
||||
Player(Drained)::"I think I've had far too many..."
|
||||
|
||||
For another example on using while-loops, refer back to 3.1.
|
||||
|
||||
The most important thing to know about a while loop is that you must absolutely make sure that it isn't infinite. If the expression has no chance of ever becoming false, the loop will just keep excuting what's inside it forever, which usually results in crashing the game.
|
||||
While Player.isPlayer()
|
||||
// crash: the player is always going to be the player
|
||||
endWhile
|
||||
|
||||
While 30 > attractiveness
|
||||
// crash if attractiveness isn't increased inside the loop
|
||||
endWhile
|
||||
|
||||
|
||||
4.7. Random
|
||||
|
||||
You can randomize code and text lines by placing them between a Random and endRandom block, giving each code or text line an equal chance of being displayed:
|
||||
Random
|
||||
New_Person(Flirty):: "Hey there good-looking, fancy meeting you here!"
|
||||
New_Person(Flirty):: "<Player.name>! Is that you, a sight to admire as always? How is it going?"
|
||||
New_Person(Flirty):: "I knew it was you right away, hottie! How is life treating you?"
|
||||
endRandom
|
||||
|
||||
Random
|
||||
Guest1 = getPerson()
|
||||
Guest1 = generatePerson()
|
||||
endRandom
|
||||
|
||||
4.8. Commenting, Indentation
|
||||
|
||||
You can comment out a line by prepending it with a double slash
|
||||
// This is a comment: it won't be executed by the game, but helps you keep track of what parts of the script are supposed to do
|
||||
If conditionA // what's behind this double slash is also a comment
|
||||
|
||||
Indentation makes the overall structure easier to follow, and has been used throughout this document already:
|
||||
If conditionA
|
||||
// some code doing something
|
||||
If conditionAA
|
||||
// some more code here
|
||||
Else
|
||||
// why not here too
|
||||
Endif
|
||||
Endif
|
||||
|
||||
While most people are used to using the Tab key for indentation, there seems to be a problem with getting LifePlay files to recognize them. If you're using a proper text editor, you can find an option to convert Tabs to clusters of spaces. For Notepad++, that's in Edit/Blank Operations/TAB to Space. Just run it when you're done.
|
||||
|
||||
5. Testing
|
||||
|
||||
Once you're done with a scene, you'll probably want to give it a try and see if it works. Rather than waiting for it to trigger randomly, you can
|
||||
- open the console with #
|
||||
- type in the scene's ID, eg meet_new_person
|
||||
|
||||
A scene's ID is its file name, without the extension.
|
||||
|
||||
If the # key doesn't work for you, you can specifiy a different one in the game's Config/DefaultInput.ini file. Find and edit the following line:
|
||||
+ActionMappings=(ActionName="TestScenes",Key=#,bShift=False,bCtrl=False,bAlt=False,bCmd=False)
|
||||
114
Docs/Modding/FullGuides/Writing_Sex_Text.txt
Normal file
114
Docs/Modding/FullGuides/Writing_Sex_Text.txt
Normal file
|
|
@ -0,0 +1,114 @@
|
|||
WRITING SEX TEXT
|
||||
|
||||
Descriptions are narrative flavor texts that appear at the top right corner of the screen during a sex scene. They are entered in .lpdesc files in the following format:
|
||||
Condition
|
||||
Text
|
||||
## // separates this description from the following one
|
||||
|
||||
|
||||
DirtyTalks are dialogue lines floating near a character during a sex scene. They are entered in .lptalk files in the following format:
|
||||
Condition
|
||||
A1's text
|
||||
A2's text
|
||||
// and so on for group sex
|
||||
## // separates this DT from the following one
|
||||
|
||||
Writing or editing these is pretty much alike, so we talk about them in one and the same document. They both are very reliant on using Tags in the condition, have to consider actor roles, and can use interpolation.
|
||||
|
||||
1. The conditions
|
||||
|
||||
The condition line for descriptions and dirtytalks heavily uses the Tag() condition function. This lists one or several tags that must be true for the current animation, if the text is to be displayed. A list of available tags is in Docs/Modding/Lists/All_sex_tags.txt
|
||||
|
||||
description:
|
||||
Tag(Kneeling, Hugging, Couple)
|
||||
<A2.name> got down on <A2.p> knees and tied <A1.name>'s shoe.
|
||||
##
|
||||
|
||||
dirtytalk
|
||||
Tag(Kneeling, Hugging, Couple)
|
||||
Christ almighty, that feels so good!
|
||||
(muffled) Hm-hm?
|
||||
##
|
||||
|
||||
Several conditions can be tied together with the AND (&&) or OR (||) logical operators. A conditional expression can also be negated by the NOT (!) operator. For more info on using logical operators, have a look at chapter 4.5 in "Writing Scenes.txt"
|
||||
Tag(Doggystyle) || Tag(ReverseCowgirl)
|
||||
<A2.name> couldn't quite see the look on <A1.name>'s face.
|
||||
##
|
||||
|
||||
Tag(DoggyStyle) || Tag(ReverseCowgirl)
|
||||
... // use three dots to not display anything for this actor
|
||||
Are you alright back there?
|
||||
##
|
||||
|
||||
Tag(Hugging, Couple) && !Tag(MM)
|
||||
<A1.name> placed <A1.p> hands on <A2.name>'s shoulders.
|
||||
##
|
||||
|
||||
Tag(Hugging, Couple) && !Tag(MM)
|
||||
Honk honk!
|
||||
Real mature...
|
||||
##
|
||||
|
||||
Descriptions and DirtyTalks can be marked to only play when a particular anim starts or ends:
|
||||
*START* Tag(Kissing, Couple)
|
||||
<A2.name> took <A1.name>'s hand and smiled.
|
||||
##
|
||||
|
||||
*END* Tag(Standing, Couple) && toCum > 90
|
||||
Oh god, I can't wait!
|
||||
Yes, yes, stay close!
|
||||
##
|
||||
|
||||
Conditions in descriptions and dirtytalks aren't limited to Tag alone, and most of what's said in chapter 4.5 of "Writing Scenes" applies here too (except for the if-structure):
|
||||
*START* Tag(Kissing, Kneeling) && [30 > [A2:attractiveness - A1:attractiveness] ]
|
||||
<A1.S> couldn't believe that a <A2.man_or_woman> as <A2.handsome_or_gorgeous> as <A2.name> was on <A2.p> knees before <A1.o>
|
||||
|
||||
Finally, a special variable is available in sex scenes, which corresponds to the arousal meter: toCum. See an example above.
|
||||
|
||||
|
||||
2. Actor roles
|
||||
|
||||
Conditions, and the text of descriptions, refer to the actors involved with pre-determined actor variables: A1, A2, and so on. The sequence of lines of a dirtytalk also follows this order.
|
||||
|
||||
So, how do you know which actor's going to be which?
|
||||
|
||||
Generally, when a sex scene is started in a narrative scene script with the Sex() command, the actors to use are stated as parameters.
|
||||
Sex(Boss, Player)
|
||||
Sex(Male1, Player, Male2)
|
||||
|
||||
This will rarely affect the roles that are assigned, except perhaps for threesomes: Sex(Male1, Player, Male2) will not be the same as Sex(Male2, Player, Male1).
|
||||
|
||||
The default ordering happens
|
||||
- first, by gender: males are assigned a role before transsexuals, who come before women
|
||||
- between same genders, by dominance: same-gender actors with a lower submission stat come first
|
||||
So a foursome with two guys, a transsexual and woman would be ordered like
|
||||
A1: most dominant male
|
||||
A2: least dominant male
|
||||
A3: transsexual
|
||||
A4: female
|
||||
|
||||
Of course, we need to bear in mind that the player can swap roles at any time.
|
||||
|
||||
A common pitfall in writing descriptions and dirtytalks is to wind up talking about body parts that the actors simply don't have. This can be due to
|
||||
- incorrect tag use (eg 'Couple' instead of 'MF')
|
||||
- not anticipating a particular actor role order or the possibility of role swaps
|
||||
- using actual words where interpolation would've been better
|
||||
|
||||
|
||||
3. Interpolation
|
||||
|
||||
As you can tell by previous examples, you can use specific in-text functions between < > to insert text based on the actor's names, whether an actor is the player, or the actor's gender. We call this interpolation, and it is very similar to how it works in narrative scenes (see 4.1. of "Writing Scenes").
|
||||
|
||||
Available functions:
|
||||
<A1.name> // A1's first name
|
||||
<A1.name_last> // A1's last name
|
||||
<A1.S> or <A1.s> // Subject pronoun (I, he, she), with or without capitals
|
||||
<A1.P> or <A1.p> // Possessive adjective (my, his, her)
|
||||
<A1.O> or <A1.o> // Object pronoun (me, him, her)
|
||||
<A1.R> or <A1.r> // Reflexive pronoun (myself, himself, herself)
|
||||
<A1.PP> or <A1.pp> // Possessive Pronoun (mine, his, hers)
|
||||
|
||||
In addition, you can always insert any choice of two words, depending on an actor's gender, by placing them around _or_ :
|
||||
<A1.Mr_or_Mrs> <A1.name_last> is a very attractive <A1.man_or_woman>.
|
||||
and if you don't use that 'on' an actor, it'll be based on whether the player is involved in the scene:
|
||||
<We_or_They> had the time of <our_or_their> lives.
|
||||
37
Docs/Modding/Lists/All_moods.txt
Normal file
37
Docs/Modding/Lists/All_moods.txt
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
These are used in dialogue like below:
|
||||
Player(Happy):: "Hello!"
|
||||
|
||||
Replace 'Happy' with any of the below:
|
||||
Angry
|
||||
Annoyed
|
||||
Anxious
|
||||
Attentive
|
||||
Bored
|
||||
Confused
|
||||
Crying
|
||||
Curious
|
||||
Disgusted
|
||||
Drained
|
||||
Embarassed
|
||||
Evil
|
||||
Excited
|
||||
Flirty
|
||||
Furious
|
||||
Grin
|
||||
Irritated
|
||||
Kiss
|
||||
Lazy
|
||||
Offended
|
||||
Pain
|
||||
Peaceful
|
||||
Posing
|
||||
Sarcastic
|
||||
Scared
|
||||
Serene
|
||||
Shocked
|
||||
Shy
|
||||
Surprised
|
||||
Wink
|
||||
Sad
|
||||
Happy
|
||||
Tired
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue