//-------------------------------------------
case (state.dyn.me.task.blowjob.state)
{
[START]
{
// Kneel
loc.state.pose_type = KNEEL;
loc.state.pose_id = 0;
SetCharState(loc.state);
SetPose(loc.state.pose_type);
state.dyn.me.task.blowjob.state = WAIT_POSE;
}
[WAIT_POSE]
{
[state.dyn.me.pose.result == NONE] return;
case (state.dyn.me.task.blowjob.mood)
{
[DISGUSTED]
{
loc.next_state = MOVEAWAY;
loc.def_exp = A_BIT_UNHAPPY;
loc.def_exp2 = A_BIT_UNHAPPY;
loc.mouth_state = NORMAL;
loc.focus_mode = REPEL;
}
[SCARED]
{
loc.next_state = MOVEAWAY;
loc.def_exp = A_BIT_UNHAPPY;
loc.def_exp2 = A_BIT_UNHAPPY;
loc.mouth_state = NORMAL;
loc.focus_mode = REPEL;
}
[HESITANT]
{
loc.next_state = NEUTRAL;
loc.def_exp = A_BIT_UNHAPPY;
loc.def_exp2 = NONE;
loc.mouth_state = NORMAL;
loc.focus_mode = NONE;
}
[NEUTRAL]
{
loc.next_state = NEUTRAL;
loc.def_exp = NONE;
loc.def_exp2 = NONE;
loc.mouth_state = NORMAL;
loc.focus_mode = NONE;
}
[EAGER]
{
loc.next_state = PENETRATE;
loc.def_exp = SMILE;
loc.def_exp2 = NONE;
loc.mouth_state = OPEN;
loc.focus_mode = FOCUS;
}
[LIKE]
[]
{
loc.next_state = LICK;
loc.def_exp = POLITE;
loc.def_exp2 = NONE;
loc.mouth_state = CLOSED;
loc.focus_mode = NONE;
}
}
// Set state
loc.state.mouth_state = loc.mouth_state;
[loc.mouth_state == OPEN] loc.state.mouth_v = 0.01;
else loc.state.mouth_v = 0.0;
loc.state.exp2 = loc.def_exp2;
loc.state.def_exp2 = loc.def_exp2;
loc.state.focus_obj = "#main:PENIS_BLOW";
loc.state.focus_mode = loc.focus_mode;
SetCharState(loc.state);
// Set main focus and exp
loc.mm.focus_type = STARE;
loc.mm.def_exp = loc.def_exp;
set_main_mood(loc.mm);
// Set exp2
SetExp2(loc.state.exp2);
SetDefExp2(loc.state.def_exp2);
// Set mouth state
loc.ms.state = loc.state.mouth_state;
loc.ms.v = loc.state.mouth_v;
SetMouthState(loc.ms);
// Set focus object
SetFocusObj(loc.state.focus_obj);
// Set focus mode
SetFocusMode(loc.focus_mode);
// Init task data
state.dyn.me.task.ts = null;
state.dyn.me.task.ts2 = null;
state.dyn.me.task.ts3 = null;
state.dyn.me.task.blowjob.count = 0;
state.dyn.me.task.blowjob.count2 = 0;
state.dyn.me.task.blowjob.depth_max = 11;
state.dyn.me.task.blowjob.depth_min = 5;
state.dyn.me.task.blowjob.ts = null;
// Goto next state
state.dyn.me.task.blowjob.state = loc.next_state;
}
[PENETRATE]
{
[state.dyn.me.avatar.penis_mode > 0]
{
SetFocusObj("#main:PENIS_BLOW");
}
else
{
SetFocusObj(NONE);
}
[state.dyn.me.coll.mouth_pen.obj_type == PENIS_OBJ]
{
loc.ms.state = OPEN;
loc.ms.v = 0.01;
SetMouthState(loc.ms);
loc.ts = GetTs();
[state.dyn.me.coll.mouth_deep.obj_par >= state.dyn.me.task.blowjob.depth_max]
[loc.ts > state.dyn.me.task.blowjob.ts]
{
loc.v = GetFocusMode();
[loc.v != REPEL]
{
state.dyn.me.task.blowjob.ts = null;
[state.dyn.me.task.blowjob.count <= 9]
{
loc.mode = REPEL;
loc.speed = state.dyn.me.task.blowjob.count;
[loc.speed > 6] loc.speed = 6;
loc.speed *= 100;
loc.speed += 600;
SetFocusMode(loc);
state.dyn.me.task.blowjob.count += 1;
[state.dyn.me.task.blowjob.count == 9]
{
state.dyn.me.task.blowjob.depth_max = 15;
state.dyn.me.task.blowjob.depth_min = 8;
}
}
else
{
loc.mode = REPEL;
loc.speed = 8.0;
loc.dis = 0.5;
SetFocusMode(loc);
loc.sb.speed = 1.5;
loc.sb.scale = 0.5;
SetBreath(loc.sb);
loc.ms.state = NORMAL;
loc.ms.v = 0.0;
SetMouthState(loc.ms);
mood_cry(3.0);
task_set_timer(7);
state.dyn.me.task.blowjob.state = OUTOFBREATH;
}
}
}
else
[state.dyn.me.coll.mouth_deep.obj_par <= state.dyn.me.task.blowjob.depth_min]
{
loc.v = GetFocusMode();
[loc.v != ATTRACT]
{
loc.mode = ATTRACT;
loc.speed = state.dyn.me.task.blowjob.count;
[loc.speed > 6] loc.speed = 6;
loc.speed *= 100;
loc.speed += 600;
[state.dyn.me.task.blowjob.depth_max > 11] loc.dis = 1.3;
else loc.dis = 1.0;
SetFocusMode(loc);
SetMouthMucus(0);
}
}
else [state.dyn.me.coll.mouth_deep.obj_par != null]
{
[state.dyn.me.task.blowjob.ts == null]
{
state.dyn.me.task.blowjob.ts = loc.ts;
state.dyn.me.task.blowjob.ts += 4000;
}
}
[state.dyn.me.coll.mouth_deep.obj_par >= 4]
{
[state.dyn.me.task.blowjob.depth_max > 11] loc.mc = 2.0;
else loc.mc = 1.0;
SetMouthMucus(loc.mc);
}
}
else
{
SetMouthMucus(0);
[state.dyn.me.task.blowjob.mood == EAGER]
loc.focus_mode = FOCUS;
else
loc.focus_mode = NONE;
SetFocusMode(loc.focus_mode);
// If no object in mouth
[state.dyn.me.coll.mouth_pen.obj_type == null]
{
// Open and close mouth if eager
[state.dyn.me.task.blowjob.mood == EAGER]
{
loc.ts = GetTs();
[loc.ts > state.dyn.me.task.ts3]
{
loc.open = GetMouthIsOpen();
[loc.open]
{
loc.ms.state = NORMAL;
loc.ms.v = 0.0;
loc.v = Rnd(3);
loc.v += 1;
}
else
{
loc.ms.state = OPEN;
loc.ms.v = 0.01;
loc.v = Rnd(8);
loc.v += 4;
}
SetMouthState(loc.ms);
task_set_timer3(loc.v);
}
else
{
[state.dyn.me.task.ts3 == null]
task_set_timer3(8);
}
}
}
}
}
[OUTOFBREATH]
{
loc.ts = GetTs();
[loc.ts <= state.dyn.me.task.ts] return;
loc.sb.speed = 0.5;
loc.sb.scale = 0.75;
SetBreath(loc.sb);
mood_cry(0);
state.dyn.me.task.ts = null;
state.dyn.me.task.ts2 = null;
state.dyn.me.task.ts3 = null;
state.dyn.me.task.blowjob.count = 0;
state.dyn.me.task.blowjob.count2 = 0;
state.dyn.me.task.blowjob.depth_max = 11;
state.dyn.me.task.blowjob.depth_min = 5;
state.dyn.me.task.blowjob.ts = null;
state.dyn.me.task.blowjob.state = PENETRATE;
}
}
//-------------------------------------------
state.dyn.me.do.task = BLOWJOB;
[par == null] state.dyn.me.task.blowjob.mood = LIKE;
else state.dyn.me.task.blowjob.mood = par;
state.dyn.me.task.blowjob.state = START;