home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Singles (French)
/
Singles-FrenchVersion-Win95.iso
/
data1.cab
/
Statemachine
/
doublebedChar.lua
< prev
next >
Wrap
Text File
|
2004-03-05
|
40KB
|
1,338 lines
-- bed character state machine
beginStateMachine()
onEnter(function(msg)
print("doublebed enter " .. getParent().getCharacterName());
local bed = retrieveStateObject("bed");
if (not bed) then
-- no bed was stored
bed = getStateObjectFromID(msg.sender);
storeStateObject("bed", bed);
end
if (bed) then
-- bed does exist
local actionPointName = retrieveData("actionPointName");
local actionPoint = getParent().getFreeActionPoint(bed, actionPointName);
if exitIfWrongPosition(getParent(), bed, retrieveData("actionPointName")) then return end;
if (actionPoint) then
-- action point is free
getParent().lockActionPoint(bed, actionPointName);
local blanket;
if (actionPointName == "layDown2") then
storeData("mirrorAnims", true);
blanket = bed.findChildGO("blanket2");
else
storeData("mirrorAnims", false);
blanket = bed.findChildGO("blanket1");
end
if (not blanket) then
print("blanket not found");
else
print("blanket O.K.");
storeStateObject("blanket", blanket);
end
else
-- action point is not free anymore
getParent().setEmoticon(EMOTICON_CANNOT, EMOTICON_DELAY);
sendMsg("emoThink", getParent().walkSO);
exitStateMachine();
end
else
-- bed does not exist anymore
getParent().setEmoticon(EMOTICON_CANNOT, EMOTICON_DELAY);
sendMsg("emoThink", getParent().walkSO);
exitStateMachine();
end
freeHands(getParent());
end )
onExit(function(msg)
local actionPointName = retrieveData("actionPointName");
print("doublebed.lua onExit(" .. getParent().getCharacterName() .. ") actionPoint:" .. actionPointName);
local bed = retrieveStateObject("bed");
if (bed) then
getParent().unlockActionPoint(bed, actionPointName);
getParent().stopAllActivities(bed);
end;
local partner = retrieveStateObject("partner");
if (partner) then
getParent().unlockActionPoints(partner.getParent());
getParent().stopAllActivities(partner.getParent());
removeStateObject("partner");
end;
removeStateObject("bed");
removeStateObject("blanket");
end )
-- test if we need to cancel
onMsg("test", function(msg)
if testCancel() or testCancelSleeping() then
setState("outOfBed");
else
sendDelayedMsgThis("test", 1000);
end
end )
---------------------------------------------------------------------------------------------------------------
-- interaction ------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
-- wait intimate --------------------------------------------------------------------------------------------
state("waitIntimate")
onEnter(function(msg)
print("-- waitIntimate -- " .. getParent().getCharacterName());
--startAnimation("sleepingTurnToLeftSide", retrieveData("mirrorAnims"));
--local blanket = retrieveStateObject("blanket");
--blanket.startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
sendDelayedMsgThis("sendReadyMsg", 1000);
sendDelayedMsgThis("stopWaiting", 30000);
sendMsg("neutral", getParent().mimicSO);
getParent().setEmoticon("");
end )
onMsg("sendReadyMsg", function(msg)
-- local partner = retrieveStateObject("partner");
-- if (not partner) then print("no partner found"); end;
-- sendMsg("partnerReady", partner);
-- sendDelayedMsgThis("sendReadyMsg", 1000);
if testCancel() then
sendMsgThis("stopWaiting");
else
local partner = retrieveStateObject("partner");
if (not partner) then
print("sendReadyMsg no partner found");
sendMsgThis("stopWaiting");
return
end
sendMsg("partnerReady", partner);
sendDelayedMsgThis("sendReadyMsg", 1000);
end
end )
onMsg("stopWaiting", function(msg)
setState("lieInBed");
end )
onMsg("partnerReady", function(msg)
setState("startIntimate");
local partner = retrieveStateObject("partner");
partner.setState("startIntimate");
end )
onMsg("partnerCancel", function(msg)
setState("lieInBed");
end )
onMsg("end", function(msg)
if testCancel() then
setState("outOfBed");
else
actionComplete();
end
end )
-- start intimate
state("startIntimate")
onEnter(function(msg)
print("-- startIntimate --" .. getParent().getCharacterName());
local bed = retrieveStateObject("bed");
getParent().stopActivity("sleep", bed);
-- character not sleeping anymore
getParent().setSleeping(false);
local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
startAnimation(genderize(getParent(), "bedHoldStart"), mirror);
retrieveStateObject("blanket").startSkeletonAnimation(genderize(getParent(), "blanketGetIntimate"), retrieveData("mirrorAnims"));
end )
onMsg("end", function(msg)
print("-- startIntimate -- end");
if (testCancel()) then
print("-- startIntimate -- end -- testCancel");
setState("stopIntimate");
else
-- local partner = retrieveStateObject("partner");
-- local getInitmateBed = getParent().startActivity("getIntimateBed", partner.getParent());
-- local length, scale = getActivityLength(getInitmateBed);
-- storeData("lengthIntimate", length);
--getParent().changeOutfit(NOTHING);
changeOutfit(getParent(), NOTHING_SEX);
-- if (retrieveData("activePart") == true) then getParent().enableBlend(true); end
print("startIntimate nextAction: doIntimate " .. getParent().getCharacterName() .. " queue: " .. getQueueCount());
setState("doIntimate");
--setDefaultState("doIntimate");
--nextAction();
end
end )
-- do intimate
state("doIntimate")
onEnter(function(msg)
print("-- doIntimate -- " .. getParent().getCharacterName());
--getParent().replaceQueueEntry(0, "pm_getIntimateBed");
setTopQueueEntry(getParent(), "pm_getIntimateBed", true);
clearCancel();
local partner = retrieveStateObject("partner");
local getInitmateBed = getParent().startActivity("getIntimateBed", partner.getParent());
local length, scale = getActivityLength(getInitmateBed);
storeData("lengthIntimate", length);
sendDelayedMsgThis("complete", length);
sendDelayedMsgThis("testCancel", 1000);
sendMsgThis("startLoop");
end )
onExit(function(msg)
local partner = retrieveStateObject("partner");
getParent().stopAllActivities(partner.getParent());
end )
onMsg("startLoop", function(msg)
local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
startAnimation(genderize(getParent(), "bedKissLoop"), mirror, 1.0, SEX_FADE_TIME);
if (getParent().isMale()) then
retrieveStateObject("blanket").startSkeletonAnimation("blanketKissLoop", mirror);
end;
end )
onMsg("partnerCancel", function(msg)
local partner = retrieveStateObject("partner");
getParent().stopAllActivities(partner.getParent());
setState("stopIntimate");
end )
onMsg("complete", function(msg)
local partner = retrieveStateObject("partner");
getParent().stopAllActivities(partner.getParent());
--sendMsg("partnerCancel", partner);
setState("stopIntimate");
end )
onMsg("testCancel", function(msg)
if (testCancel() or (getParent().getActivityQueueCount() > 1)) then
print("doIntimate: onMsg testCancel CANCELED ".. getParent().getCharacterName());
sendMsgThis("complete");
else
sendDelayedMsgThis("testCancel", 1000);
end
end )
onMsg("queue", function(msg)
print("doIntimate: onMsg queue CANCELED ".. getParent().getCharacterName());
sendMsgThis("complete");
end )
onMsg("end", function(msg)
if (testCancel()) then
sendMsgThis("complete");
else
sendMsgThis("startLoop");
end
end )
onMsg("kissBed", function(msg)
print("doIntimate: onMsg kissBed ".. getParent().getCharacterName());
setState("kissWait");
end )
onMsg("pettingBed", function(msg)
print("doIntimate: onMsg pettingBed " .. getParent().getCharacterName());
setState("pettingWait");
end )
onMsg("sexBed", function(msg)
print("doIntimate: onMsg sexBed " .. getParent().getCharacterName());
setState("sexWait");
end )
onMsg("kissReady", function(msg)
print("doIntimate: onMsg kissReady " .. getParent().getCharacterName());
local partner = retrieveStateObject("partner");
sendMsg("kissReady", partner);
end )
onMsg("pettingReady", function(msg)
print("doIntimate: onMsg pettingReady " .. getParent().getCharacterName());
local partner = retrieveStateObject("partner");
sendMsg("pettingReady", partner);
end )
onMsg("sexReady", function(msg)
print("doIntimate: onMsg sexReady " .. getParent().getCharacterName());
local partner = retrieveStateObject("partner");
sendMsg("sexReady", partner);
end )
-- stop intimate
state("stopIntimate")
onEnter(function(msg)
print("-- stopIntimate -- " .. getParent().getCharacterName());
--setDefaultState("stand");
-- check shortcuts to next queued action
local partner = retrieveStateObject("partner");
local partnerChar = partner.getParent();
if checkShortcut(partnerChar, {"kissBed", "pettingBed", "sexBed"}, {"kissWait", "pettingWait", "sexWait"}, {"kissBed", "pettingBed", "sexBed"}) then
return
end
sendMsg("partnerCancel", partner);
local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
startAnimation(genderize(getParent(), "bedHoldStart"), mirror, -1);
--retrieveStateObject("blanket").startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
retrieveStateObject("blanket").startSkeletonAnimation(genderize(getParent(), "blanketGetIntimate"), retrieveData("mirrorAnims"), -1.0);
--getParent().changeOutfit(UNDERWEAR);
changeOutfit(getParent(), UNDERWEAR);
-- if (retrieveData("activePart") == true) then getParent().enableBlend(false); end
end )
onMsg("end", function(msg)
-- local partner = retrieveStateObject("partner");
-- getParent().stopAllActivities(partner.getParent());
--setDefaultState("stand");
setState("outOfBedFast");
-- for testing
-- local bed = retrieveStateObject("bed");
-- bed.setChildEnable("blanket1", true);
-- bed.setChildEnable("blanket2", true);
sendMsg("stop", getParent().mimicSO);
end )
-- lay down on bed to get initmate
state("layDownToGetIntimate")
onEnter(function(msg)
if (not hasOutfit(getParent(), UNDERWEAR)) then
storeData("stateAfterUndress", "layDownToGetIntimate");
setState("undress");
return
end
startAnimation("laydownBed", retrieveData("mirrorAnims"));
local blanket = retrieveStateObject("blanket");
blanket.startSkeletonAnimation("blanketLayDownBed", retrieveData("mirrorAnims"));
local bed = retrieveStateObject("bed");
--bed.loopSound("Bettgerausch");
bed.playSound("bedLaydown");
getParent().startActivity("lie", bed);
end )
onMsg("end", function(msg)
if testCancel() then
setState("outOfBed")
else
setState("waitIntimate");
--local bed = retrieveStateObject("bed");
--getParent().startActivity("sleep", bed);
end
end )
-----------------------------------------------------------------------------------------------------------
-- kiss in bed --------------------------------------------------------------------------------------------
state("kissWait")
onEnter(function(msg)
print("-- kissWait -- " .. getParent().getCharacterName());
getParent().replaceQueueEntry(0, "pm_kissBed");
sendDelayedMsgThis("sendReadyMsg", 1000);
sendDelayedMsgThis("stopWaiting", 30000);
end )
onMsg("sendReadyMsg", function(msg)
if testCancel() then
sendMsgThis("stopWaiting");
else
local partner = retrieveStateObject("partner");
sendMsg("kissReady", partner);
sendDelayedMsgThis("sendReadyMsg", 1000);
end
end )
onMsg("stopWaiting", function(msg)
--getParent().replaceQueueEntry(0, "pm_getIntimateBed");
setState("doIntimate");
--nextAction();
end )
onMsg("kissReady", function(msg)
setState("kissStart");
local partner = retrieveStateObject("partner");
partner.setState("kissStart");
end )
state("kissStart")
onEnter(function(msg)
print("------- kissStart ---------" .. getParent().getCharacterName());
local mirror = retrieveData("mirrorAnims") == getParent().isMale();
startAnimation(genderize(getParent(), "bedKissStart"), mirror, SEX_SPEEDUP);
if (getParent().isMale()) then
retrieveStateObject("blanket").startSkeletonAnimation("blanketKissStart", mirror, SEX_SPEEDUP);
end;
--retrieveStateObject("blanket").startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
-- put dummy item into passive characters queue to allow him cancel
if (retrieveData("activePart") == false) then
local partner = retrieveStateObject("partner");
--getParent().pushCommand("pm_kissBed", "", partner.getParent(), "");
--getParent().pushQueueEntry("pm_kissBed");
end;
sendMsg("stop", getParent().mimicSO);
end )
onMsg("partnerCancelKiss", function(msg)
setState("kissStop");
end )
onMsg("end", function(msg)
if (testCancel()) then
local partner = retrieveStateObject("partner");
sendMsg("partnerCancelKiss", partner);
setState("kissStop");
else
setState("doKiss");
end
end )
state("doKiss")
onEnter(function(msg)
print("------- doKiss ---------" .. getParent().getCharacterName());
local partner = retrieveStateObject("partner");
local kissBed = getParent().startActivity("kissBed", partner.getParent());
local length, scale = getActivityLength(kissBed);
sendDelayedMsgThis("complete", length);
sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
startAnimation(genderize(getParent(), "bedKissLoop"), mirror, SEX_SPEEDUP);
if (getParent().isMale()) then
retrieveStateObject("blanket").startSkeletonAnimation("blanketKissLoop", mirror, SEX_SPEEDUP);
end;
--retrieveStateObject("blanket").startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
end )
onMsg("complete", function(msg)
local partner = retrieveStateObject("partner");
getParent().stopActivity("kissBed",partner.getParent());
sendMsg("partnerCancelKiss", partner);
setState("kissStop");
end )
onMsg("partnerCancelKiss", function(msg)
local partner = retrieveStateObject("partner");
getParent().stopActivity("kissBed",partner.getParent());
setState("kissStop");
end )
onMsg("testCancel", function(msg)
if testCancel() then
print("---------------- testCancel testCancel() true");
sendMsgThis("complete");
else
sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
end
end )
onMsg("end", function(msg)
if testCancel() then
print("--------------- end testCancel() true");
sendMsgThis("complete");
else
local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
startAnimation(genderize(getParent(), "bedKissLoop"), mirror, SEX_SPEEDUP);
if (getParent().isMale()) then
retrieveStateObject("blanket").startSkeletonAnimation("blanketKissLoop", mirror, SEX_SPEEDUP);
end;
--retrieveStateObject("blanket").startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
end
end )
state("kissStop")
onEnter(function(msg)
print("------- kissStop ---------" .. getParent().getCharacterName());
local mirror = retrieveData("mirrorAnims") == getParent().isMale();
startAnimation(genderize(getParent(), "bedKissStart"), mirror, -1);
if (getParent().isMale()) then
retrieveStateObject("blanket").startSkeletonAnimation("blanketKissLoop", mirror, -SEX_SPEEDUP);
end;
--retrieveStateObject("blanket").startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
end )
onMsg("end", function(msg)
--getParent().replaceQueueEntry(0, "pm_getIntimateBed");
setState("doIntimate");
--nextAction();
end )
-----------------------------------------------------------------------------------------------------------
-- petting in bed --------------------------------------------------------------------------------------------
state("pettingWait")
onEnter(function(msg)
print("-- pettingWait -- " .. getParent().getCharacterName());
getParent().replaceQueueEntry(0, "pm_pettingBed");
sendDelayedMsgThis("sendReadyMsg", 1000);
sendDelayedMsgThis("stopWaiting", 30000);
end )
onMsg("sendReadyMsg", function(msg)
if testCancel() then
sendMsgThis("stopWaiting");
else
local partner = retrieveStateObject("partner");
sendMsg("pettingReady", partner);
sendDelayedMsgThis("sendReadyMsg", 1000);
end
end )
onMsg("stopWaiting", function(msg)
--getParent().replaceQueueEntry(0, "pm_getIntimateBed");
setState("doIntimate");
--nextAction();
end )
onMsg("pettingReady", function(msg)
setState("pettingStart");
local partner = retrieveStateObject("partner");
partner.setState("pettingStart");
end )
state("pettingStart")
onEnter(function(msg)
print("------- pettingStart ---------" .. getParent().getCharacterName());
local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
-- character animation
if (retrieveData("activePart") == true) then
startAnimation(genderize(getParent(), "bedPettingStart"), mirror, SEX_SPEEDUP, SEX_FADE_TIME);
else
startAnimation(genderize(getParent(), "bedPetedStart"), mirror, SEX_SPEEDUP, SEX_FADE_TIME);
end
-- blanket animation
if (getParent().isMale()) then
if (retrieveData("activePart") == true) then
retrieveStateObject("blanket").startSkeletonAnimation("blanketPettingStartMike", mirror, SEX_SPEEDUP);
else
retrieveStateObject("blanket").startSkeletonAnimation("blanketPettingStartElaine", mirror, SEX_SPEEDUP);
end
end;
-- put dummy item into passive characters queue to allow him cancel
if (retrieveData("activePart") == false) then
local partner = retrieveStateObject("partner");
--getParent().pushCommand("pm_pettingBed", "", partner.getParent(), "");
--getParent().pushQueueEntry("pm_pettingBed");
end;
--retrieveStateObject("blanket").startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
end )
onMsg("partnerCancelPetting", function(msg)
local partner = retrieveStateObject("partner");
getParent().stopActivity("pettingBed",partner.getParent());
setState("pettingStop");
end )
onMsg("end", function(msg)
if (testCancel()) then
local partner = retrieveStateObject("partner");
sendMsg("partnerCancelPetting", partner);
setState("pettingStop");
else
setState("doPetting");
end
end )
state("doPetting")
onEnter(function(msg)
print("------- doPetting ---------" .. getParent().getCharacterName());
local partner = retrieveStateObject("partner");
local pettingBed = getParent().startActivity("pettingBed", partner.getParent());
local length, scale = getActivityLength(pettingBed);
sendDelayedMsgThis("complete", length);
sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
sendMsgThis("startLoop");
if (not retrieveData("activePart")) then
local delay = SEX_GROAN_GAP; if getParent().isMale() then delay = SEX_GROAN_GAP/2 end;
sendDelayedMsgThis("groan", delay/SEX_SPEEDUP);
end
-- local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
-- if (retrieveData("activePart") == true) then
-- startAnimation(genderize(getParent(), "bedPettingLoop"), mirror, SEX_SPEEDUP);
-- else
-- startAnimation(genderize(getParent(), "bedPetedLoop"), mirror, SEX_SPEEDUP);
-- end
--retrieveStateObject("blanket").startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
end )
onMsg("startLoop", function(msg)
-- character animation
local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
if (retrieveData("activePart") == true) then
startAnimation(genderize(getParent(), "bedPettingLoop"), mirror, SEX_SPEEDUP);
else
startAnimation(genderize(getParent(), "bedPetedLoop"), mirror, SEX_SPEEDUP);
end
-- blanket animation
if (getParent().isMale()) then
if (retrieveData("activePart") == true) then
retrieveStateObject("blanket").startSkeletonAnimation("blanketPettingLoopMike", mirror, SEX_SPEEDUP);
else
retrieveStateObject("blanket").startSkeletonAnimation("blanketPettingLoopElaine", mirror, SEX_SPEEDUP);
end
end;
end )
onMsg("groan", function(msg)
groan();
sendDelayedMsgThis("groan", SEX_GROAN_GAP/SEX_SPEEDUP);
end )
onMsg("complete", function(msg)
local partner = retrieveStateObject("partner");
getParent().stopActivity("pettingBed",partner.getParent());
sendMsg("partnerCancelPetting", partner);
setState("pettingStop");
end )
onMsg("partnerCancelPetting", function(msg)
local partner = retrieveStateObject("partner");
getParent().stopActivity("pettingBed",partner.getParent());
setState("pettingStop");
end )
onMsg("testCancel", function(msg)
if testCancel() then
sendMsgThis("complete");
else
sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
end
end )
onMsg("end", function(msg)
if testCancel() then
sendMsgThis("complete");
else
sendMsgThis("startLoop");
end
end )
state("pettingStop")
onEnter(function(msg)
print("------- pettingStop ---------" .. getParent().getCharacterName());
local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
-- character animation
if (retrieveData("activePart") == true) then
startAnimation(genderize(getParent(), "bedPettingStart"), mirror, -SEX_SPEEDUP, SEX_FADE_TIME);
else
startAnimation(genderize(getParent(), "bedPetedStart"), mirror, -SEX_SPEEDUP, SEX_FADE_TIME);
end
-- blanket animation
if (getParent().isMale()) then
if (retrieveData("activePart") == true) then
retrieveStateObject("blanket").startSkeletonAnimation("blanketPettingStartMike", mirror, -SEX_SPEEDUP);
else
retrieveStateObject("blanket").startSkeletonAnimation("blanketPettingStartElaine", mirror, -SEX_SPEEDUP);
end
end;
--startAnimation(genderize(getParent(), "bedPettingStop"), retrieveData("mirrorAnims"));
--retrieveStateObject("blanket").startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
end )
onMsg("end", function(msg)
--getParent().replaceQueueEntry(0, "pm_getIntimateBed");
setState("doIntimate");
--nextAction();
end )
-----------------------------------------------------------------------------------------------------------
-- sex in bed --------------------------------------------------------------------------------------------
state("sexWait")
onEnter(function(msg)
print("-- sexWait -- " .. getParent().getCharacterName());
getParent().replaceQueueEntry(0, "pm_sexBed");
sendDelayedMsgThis("sendReadyMsg", 1000);
sendDelayedMsgThis("stopWaiting", 30000);
end )
onMsg("sendReadyMsg", function(msg)
if testCancel() then
sendMsgThis("stopWaiting");
else
local partner = retrieveStateObject("partner");
sendMsg("sexReady", partner);
sendDelayedMsgThis("sendReadyMsg", 1000);
end
end )
onMsg("stopWaiting", function(msg)
--getParent().replaceQueueEntry(0, "pm_getIntimateBed");
setState("doIntimate");
--nextAction();
end )
onMsg("sexReady", function(msg)
setState("sexStart");
local partner = retrieveStateObject("partner");
partner.setState("sexStart");
end )
state("sexStart")
onEnter(function(msg)
print("------- sexStart ---------" .. getParent().getCharacterName());
-- character animation
local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
if (retrieveData("activePart") == true) then
startAnimation(genderize(getParent(), "bedSexStart"), mirror, SEX_SPEEDUP, SEX_FADE_TIME);
else
startAnimation(genderize(getParent(), "bedSexedStart"), mirror, SEX_SPEEDUP, SEX_FADE_TIME);
end
-- blanket animation
if (getParent().isMale()) then
if (retrieveData("activePart") == true) then
retrieveStateObject("blanket").startSkeletonAnimation("blanketSexStartMike", mirror, SEX_SPEEDUP);
else
retrieveStateObject("blanket").startSkeletonAnimation("blanketSexStartElaine", mirror, SEX_SPEEDUP);
end
end;
-- put dummy item into passive characters queue to allow him cancel
if (retrieveData("activePart") == false) then
local partner = retrieveStateObject("partner");
--getParent().pushCommand("pm_sexBed", "", partner.getParent(), "");
--getParent().pushQueueEntry("pm_sexBed");
end;
--retrieveStateObject("blanket").startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
end )
onMsg("partnerCancelSex", function(msg)
local partner = retrieveStateObject("partner");
getParent().stopActivity("sexBed",partner.getParent());
setState("sexStop");
end )
onMsg("end", function(msg)
if (testCancel()) then
local partner = retrieveStateObject("partner");
sendMsg("partnerCancelSex", partner);
setState("sexStop");
else
setState("doSex");
end
end )
state("doSex")
onEnter(function(msg)
print("------- doSex ---------" .. getParent().getCharacterName());
local partner = retrieveStateObject("partner");
local sexBed = getParent().startActivity("sexBed", partner.getParent());
local length, scale = getActivityLength(sexBed);
sendDelayedMsgThis("complete", length);
sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
sendMsgThis("startLoop");
local delay = SEX_GROAN_GAP; if getParent().isMale() then delay = SEX_GROAN_GAP/2 end;
sendDelayedMsgThis("groan", delay/SEX_SPEEDUP);
end )
onMsg("startLoop", function(msg)
-- character animation
local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
if (retrieveData("activePart") == true) then
startAnimation(genderize(getParent(), "bedSexLoop"), mirror, SEX_SPEEDUP);
else
startAnimation(genderize(getParent(), "bedSexedLoop"), mirror, SEX_SPEEDUP);
end
-- blanket animation
if (getParent().isMale()) then
if (retrieveData("activePart") == true) then
retrieveStateObject("blanket").startSkeletonAnimation("blanketSexLoopMike", mirror, SEX_SPEEDUP);
else
retrieveStateObject("blanket").startSkeletonAnimation("blanketSexLoopElaine", mirror, SEX_SPEEDUP);
end
end;
end )
onMsg("complete", function(msg)
local partner = retrieveStateObject("partner");
getParent().stopActivity("sexBed",partner.getParent());
sendMsg("partnerCompleteSex", partner);
setState("sexOrgasm");
end )
onMsg("canceled", function(msg)
local partner = retrieveStateObject("partner");
getParent().stopActivity("sexBed",partner.getParent());
sendMsg("partnerCancelSex", partner);
setState("sexStop");
end )
onMsg("groan", function(msg)
groan();
sendDelayedMsgThis("groan", SEX_GROAN_GAP/SEX_SPEEDUP);
end )
onMsg("partnerCancelSex", function(msg)
local partner = retrieveStateObject("partner");
getParent().stopActivity("sexBed",partner.getParent());
setState("sexStop");
end )
onMsg("partnerCompleteSex", function(msg)
local partner = retrieveStateObject("partner");
getParent().stopActivity("sexBed",partner.getParent());
setState("sexOrgasm");
end )
onMsg("testCancel", function(msg)
if testCancel() then
sendMsgThis("canceled");
else
sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
end
end )
onMsg("end", function(msg)
if testCancel() then
sendMsgThis("canceled");
else
sendMsgThis("startLoop");
end
end )
state("sexOrgasm")
onEnter(function(msg)
print("------- sexOrgasm ---------" .. getParent().getCharacterName());
local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
if (retrieveData("activePart") == true) then
startAnimation(genderize(getParent(), "bedSexOrgasm"), mirror, SEX_SPEEDUP, SEX_FADE_TIME * 2);
else
startAnimation(genderize(getParent(), "bedSexedOrgasm"), mirror, SEX_SPEEDUP, SEX_FADE_TIME * 2);
end
groan(4);
end )
onMsg("end", function(msg)
setState("sexStop");
end )
state("sexStop")
onEnter(function(msg)
print("------- sexStop ---------" .. getParent().getCharacterName());
local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
if (retrieveData("activePart") == true) then
startAnimation(genderize(getParent(), "bedSexStart"), mirror, -SEX_SPEEDUP, SEX_FADE_TIME * 2);
else
startAnimation(genderize(getParent(), "bedSexedStart"), mirror, -SEX_SPEEDUP, SEX_FADE_TIME * 2);
end
-- blanket animation
if (getParent().isMale()) then
if (retrieveData("activePart") == true) then
retrieveStateObject("blanket").startSkeletonAnimation("blanketSexStartMike", mirror, -SEX_SPEEDUP);
else
retrieveStateObject("blanket").startSkeletonAnimation("blanketSexStartElaine", mirror, -SEX_SPEEDUP);
end
end;
--startAnimation(genderize(getParent(), "bedSexStop"), retrieveData("mirrorAnims"));
--retrieveStateObject("blanket").startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
end )
onMsg("end", function(msg)
--getParent().replaceQueueEntry(0, "pm_getIntimateBed");
setState("doIntimate");
--nextAction();
end )
---------------------------------------------------------------------------------------------------------------
-- sleeping ---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------
state("undress")
onEnter(function(msg)
--startAnimation("ausziehen2");
startAnimation(getChangeOutfitAnim(getParent()));
sendDelayedMsgThis("underwear", 1600);
end )
onMsg("underwear", function(msg)
changeOutfit(getParent(), UNDERWEAR);
end )
onMsg("end", function(msg)
setState(retrieveData("stateAfterUndress"))
end )
-- lay down on bed --------------------------------------------------------------------------------------------
state("layDown")
onEnter(function(msg)
if (not hasOutfit(getParent(), UNDERWEAR) and not hasOutfit(getParent(), NOTHING)) then
storeData("stateAfterUndress", "layDown");
setState("undress");
return
end
startAnimation("laydownBed", retrieveData("mirrorAnims"));
local blanket = retrieveStateObject("blanket");
blanket.startSkeletonAnimation("blanketLayDownBed", retrieveData("mirrorAnims"));
local bed = retrieveStateObject("bed");
--bed.loopSound("Bettgerausch");
bed.playSound("bedLaydown");
end )
onMsg("end", function(msg)
if testCancel() then
setState("outOfBedFast")
else
setState("lieInBed");
end
end )
-- sleeping - lying down quietly
state("lieInBed")
onEnter(function(msg)
startAnimation("lieInBed", retrieveData("mirrorAnims"));
local blanket = retrieveStateObject("blanket");
blanket.startSkeletonAnimation("blanketLiePose", retrieveData("mirrorAnims"));
local bed = retrieveStateObject("bed");
getParent().startActivity("sleep", bed);
getParent().startActivity("lie", bed);
-- character now sleeping
getParent().setSleeping(true);
sendMsg("eyeClose", getParent().mimicSO);
getParent().setEmoticon(EMOTICON_SLEEPING);
end )
onMsg("end", function(msg)
if testCancel() or testCancelSleeping() then
setState("outOfBed")
else
sendDelayedMsgThis("test", 1000);
setDelayedState("sleepingTurnToLeftSide", random(5000, 10000));
end
end )
-- lying only no sleeping
state("lieOnlyInBed")
onEnter(function(msg)
startAnimation("lieInBed", retrieveData("mirrorAnims"));
local bed = retrieveStateObject("bed");
getParent().startActivity("lie", bed);
sendDelayedMsgThis("testCancel", 1000);
end )
onMsg("testCancel", function(msg)
if testCancel() then
setState("outOfBed")
else
sendDelayedMsgThis("testCancel", 1000);
end
end )
-- sleeping - turn to to left side
state("sleepingTurnToLeftSide")
onEnter(function(msg)
startAnimation("sleepingTurnToLeftSide", retrieveData("mirrorAnims"));
local blanket = retrieveStateObject("blanket");
blanket.startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
end )
onMsg("end", function(msg)
if testCancel() or testCancelSleeping() then
setState("outOfBed")
else
sendDelayedMsgThis("test", 1000);
setDelayedState("sleepingTurnToTommy", random(5000, 10000));
end
end )
-- sleeping - turn to to tummy
state("sleepingTurnToTommy")
onEnter(function(msg)
startAnimation("sleepingTurnToTommy", retrieveData("mirrorAnims"));
local blanket = retrieveStateObject("blanket");
blanket.startSkeletonAnimation("blanketTurnToTommy", retrieveData("mirrorAnims"));
end )
onMsg("end", function(msg)
if testCancel() or testCancelSleeping() then
setState("outOfBed")
else
sendDelayedMsgThis("test", 1000);
setDelayedState("sleepingTurnToRightSide", random(5000, 10000));
end
end )
-- sleeping - turn to to tummy
state("sleepingTurnToRightSide")
onEnter(function(msg)
startAnimation("sleepingTurnToRightSide", retrieveData("mirrorAnims"));
local blanket = retrieveStateObject("blanket");
blanket.startSkeletonAnimation("blanketTurnToRightSide", retrieveData("mirrorAnims"));
end )
onMsg("end", function(msg)
if testCancel() or testCancelSleeping() then
setState("outOfBed")
else
sendDelayedMsgThis("test", 1000);
setDelayedState("sleepingTurnToBack", random(5000, 10000));
end
end )
-- sleeping - turn to back
state("sleepingTurnToBack")
onEnter(function(msg)
startAnimation("sleepingTurnToBack", retrieveData("mirrorAnims"));
local blanket = retrieveStateObject("blanket");
blanket.startSkeletonAnimation("blanketTurnToBack", retrieveData("mirrorAnims"));
end )
onMsg("end", function(msg)
if testCancel() then
setState("outOfBed")
else
setState("lieInBed");
end
end )
-- get out of bed
state("outOfBed")
onEnter(function(msg)
print("------- outOfBed ---------" .. getParent().getCharacterName());
local character = getParent();
local bed = retrieveStateObject("bed");
-- character not sleeping anymore
character.setSleeping(false);
-- check shortcuts to other bed activities, before standing up
if checkShortcut(bed, {"getIntimateBed", "sleep"}, {"waitIntimate", "lieInBed"}, {"getIntimateBedShortcut"}) then
return
end
local others = (getOtherUsers(character, bed, "lie"));
local other = others[1];
if (other) then
if checkShortcut(other, {"getIntimateBed"}, {"waitIntimate"}, {"getIntimateBedShortcut"}) then
return
end
else
print("outOfBed check shortcuts; no OtherUsers found");
end
startAnimation(genderize(getParent(), "standupBed"), retrieveData("mirrorAnims"));
local blanket = retrieveStateObject("blanket");
local blanketAnimSpeed = cond(getParent().isMale(), 1.0, 2.0)
blanket.startSkeletonAnimation("blanketStandupBed", retrieveData("mirrorAnims"), blanketAnimSpeed);
character.playSound(genderizeReal(getParent(), "wakeUp"));
--bed.stopSound("Bettgerausch");
character.stopAllActivities(bed);
sendMsg("neutral", character.mimicSO);
character.setEmoticon("");
end )
onMsg("end", function(msg)
--local blanket = retrieveStateObject("blanket");
--blanket.startSkeletonAnimation("blanketStoodupBed", retrieveData("mirrorAnims"));
flipPoseDirection();
setCurrentPosition();
exitStateMachine();
end )
-- get out of bed
-- state("outOfBed")
--~
--~ onEnter(function(msg)
--~ startAnimation("standupBed", retrieveData("mirrorAnims"));
--~
--~ -- character not sleeping anymore
--~ getParent().setSleeping(false);
--~
--~ local blanket = retrieveStateObject("blanket");
--~ blanket.startSkeletonAnimation("blanketStandupBed", retrieveData("mirrorAnims"));
--~ local bed = retrieveStateObject("bed");
--~ --bed.stopSound("Bettgerausch");
--~ getParent().stopAllActivities(bed);
--~
--~ sendMsg("neutral", getParent().mimicSO);
--~ getParent().setEmoticon("");
--~
--~ end )
--~
--~ onMsg("end", function(msg)
--~ exitStateMachine();
--~ end )
-- get out of bed
state("outOfBedFast")
onEnter(function(msg)
print("------- outOfBedFast ---------" .. getParent().getCharacterName());
local character = getParent();
local bed = retrieveStateObject("bed");
-- character not sleeping anymore
character.setSleeping(false);
-- check shortcuts to other bed activities, before standing up
if checkShortcut(bed, {"getIntimateBed", "sleep"}, {"waitIntimate", "lieInBed"}, {"getIntimateBedShortcut"}) then
return
end
local other = getOtherUser(character, bed, "lie");
if (other) then
if checkShortcut(other, {"getIntimateBed"}, {"waitIntimate"}, {"getIntimateBedShortcut"}) then
return
end
else
print("outOfBedFast check shortcuts; no OtherUsers found");
end
startAnimation("laydownBed", retrieveData("mirrorAnims"), -1.0, 1000);
local blanket = retrieveStateObject("blanket");
blanket.startSkeletonAnimation("blanketStandupBed", retrieveData("mirrorAnims"), 5.0);
local bed = retrieveStateObject("bed");
--bed.stopSound("Bettgerausch");
getParent().stopAllActivities(bed);
sendMsg("neutral", getParent().mimicSO);
getParent().setEmoticon("");
end )
onMsg("end", function(msg)
exitStateMachine();
end )
endStateMachine()