Attachment:
blowjob_script.jpg [ 97.71 KiB | Viewed 42064 times ]
An interesting mini-game is the blowjob simulation.
Here are two movies showing it:
1) Girl likes you: Blowjob Simulation Movie2) Girl dislikes you: Blowjob Simulation MovieIt contains a lot of different emotions/features namely:
- Repelling when seeing something that the character dislikes
- Attracting when seeing something the character likes
- Cum threads
- Licking
- Sucking
- Panic expression when in too deep
- Fast/heavy breathing
The Brain:Before I show you some detailed scripts for things like licking and the sucking, first some basic info.
Each character has a brain. This brain contains code and a state.
The state contains the data of the brain. It has a static part and a dynamic part. The static part contains data that is not changed during the game.
The dynamic part contains data that is changed during the game. Only the dynamic part is saved when saving.
This is how they are defined in the script.
char_objecti:CHAR_BASE SAMANTHA
{
brain
{
state
{
const:
stat {#include "init/brain/chars/state/test_samantha.dat"}
dynamic:
dyn {}
}
code
{
#include "init/brain/chars/code/test_samantha.dat"
}
}
}Events:The code part contains the code that makes the character do things and react on things.
It is constantly being fed events during the game. These events can be:
- talks events (when someone talks to the character)
- environment events (when another character is in view)
- touch events (when being touched)
- collision events (when colliding with other objects)
- etc...
Talk events are already transformed by the NLP into more simple commands. But I will describe that into more detail another time.
With the blowjob simulation collision events are very important.
The dynamic variable '
state.dyn.me.coll' contains the collision values that can be polled. It is also possible to react on the event, but we will use polling in most cases.
The collision with the mouth can result in data for the following variables:
-
state.dyn.me.coll.mouth_pen.obj_type : contain the object that is colliding
-
state.dyn.me.coll.mouth_deep.obj_par: contains how deep the object is
-
state.dyn.me.coll.mouth_speed.obj_par: contains how fast the object moves
-
state.dyn.me.coll.mouth_wide.obj_par: contains how wide the mouth is
Callback functions:To let the character 'do' things you can use callback functions in the script. These callback functions control the character. So the events are the input and the callback are the output for the brain. There are a lot of callback functions. For the blowjob simulation useful callback functions are:
-
SetExp: gives the character a specific facial expression
-
SetFocusObj: focusses on an object (like the penis)
-
SetFocusMode: makes the character attract or repel to the object it is focussing on
-
SetMouthMucus: creates mucus when penis is in/near mouth
-
SetMouthState: opens or closes mouth. When mouth is closed it cannot be penetrated and tongue can collide with penis.
Ok, that is all the info you need to understand the basics for the blowjob scripting. Now for some scripting.
Licking:// If avatar has penis out
[state.dyn.me.avatar.penis_mode > 0]
{
// Focus on penis
SetFocusObj(PENIS);
// Close mouth so it cannot be penetrated, and tongue collides with penis
SetMouthState(CLOSED);
}
// Focus on avatar instead
else SetFocusObj(NONE);
// When penis object touches mouth
[state.dyn.me.coll.mouth_pen.obj_type == PENIS_OBJ]
{
// If not already licking (licking is done same way as talking)
[!IsTalking()]
{
// Choose random type of licking
loc.v = Rnd(3);
case (loc.v)
{
[0] loc.s = "#totuti"; // tongue out, tongue up, tongue in
[1] loc.s = "#totutotuti"; // out, up, out, up, in
[2] loc.s = "#totutotutotuti"; // out, up, out, up, out, up, in
}
// Talk the licking command (starts with #)
loc.text = false; // Dont show text in window
loc.scale = 100; // Mouth scale 100%
loc.speed = 15; // Mouth speed
Talk(loc); // Talk callback function
// Focus on penis its top
SetFocusObj(PENIS_TOP);
// Attract to focus object (penis top)
SetFocusMode(ATTRACT);
}
// Create some mucus
SetMouthMucus(40);
}
Sucking (pushing in and out): // When penis object touches mouth
[state.dyn.me.coll.mouth_pen.obj_type == PENIS_OBJ]
{
// If penis in deep
[state.dyn.me.coll.mouth_deep.obj_par >= 3]
{
// Move back
loc.mode = REPEL;
loc.speed = 70;
SetFocusMode(loc);
}
// If penis moves out
else [state.dyn.me.coll.mouth_deep.obj_par <= 1]
{
// Move forward
loc.mode = ATTRACT;
loc.speed = 70;
SetFocusMode(loc);
}
// Create some mucus when penis in mouth
SetMouthMucus(20);
}
Gagging:GAGGING_STATE:
// When penis to long in
[state.dyn.task.blowjob.count >= 120]
{
// Move back fast (8x)
loc.mode = REPEL;
loc.speed = 800;
SetFocusMode(loc);
state.dyn.task.blowjob.state = OUTOFBREATH_STATE;
return;
}
// When penis object touches mouth
[state.dyn.me.coll.mouth_pen.obj_type == PENIS_OBJ]
{
// If deep
[state.dyn.me.coll.mouth_deep.obj_par >= 3]
{
// Show surprised facial expression (large eyes)
loc.exp = SURPRISED;
loc.scale = 90;
SetExp(loc);
// Count gagging
state.dyn.task.blowjob.count += 1;
}
else
{
// Move in on penis
SetFocusMode(ATTRACT);
}
// Create some mucus
SetMouthMucus(40);
}
else
{
// Do not focus
SetFocusMode(NONE);
}
OUTOFBREATH_STATE:
// Heavy breathing
loc.speed = 160;
loc.scale = 75;
SetBreath(loc);
As you can see you can program the responses on a very detailed level. It contains a lot of options to create low level gameplay. Its also pretty readable and easy to change.
We have tried to keep a middle ground between the amount of options you have and the ease to write scripts.
Thank you for reading!
