home *** CD-ROM | disk | FTP | other *** search
/ Singles (French) / Singles-FrenchVersion-Win95.iso / data1.cab / Statemachine / doublebedChar.lua < prev    next >
Text File  |  2004-03-05  |  40KB  |  1,338 lines

  1. -- bed character state machine
  2. beginStateMachine()
  3.     
  4.     onEnter(function(msg)
  5.     
  6.         print("doublebed enter " .. getParent().getCharacterName());
  7.         
  8.         local bed = retrieveStateObject("bed");
  9.         if (not bed) then
  10.             -- no bed was stored
  11.             bed = getStateObjectFromID(msg.sender);
  12.             storeStateObject("bed", bed);
  13.         end
  14.         
  15.         
  16.         if (bed) then
  17.             -- bed does exist
  18.             local actionPointName = retrieveData("actionPointName");
  19.             local actionPoint = getParent().getFreeActionPoint(bed, actionPointName);
  20.             
  21.             if exitIfWrongPosition(getParent(), bed, retrieveData("actionPointName")) then return end;    
  22.             
  23.             
  24.             if (actionPoint) then
  25.                 -- action point is free
  26.                 getParent().lockActionPoint(bed, actionPointName);
  27.                 
  28.                 local blanket;
  29.                 
  30.                  if (actionPointName == "layDown2") then
  31.                     storeData("mirrorAnims", true);
  32.                     blanket = bed.findChildGO("blanket2");
  33.                 else
  34.                     storeData("mirrorAnims", false);
  35.                     blanket = bed.findChildGO("blanket1");
  36.                 end
  37.                 
  38.                 if (not blanket) then
  39.                     print("blanket not found");
  40.                 else
  41.                     print("blanket O.K.");                
  42.                     storeStateObject("blanket", blanket);
  43.                 end
  44.                                 
  45.                 
  46.             else
  47.                 -- action point is not free anymore
  48.                 getParent().setEmoticon(EMOTICON_CANNOT, EMOTICON_DELAY);
  49.                 sendMsg("emoThink", getParent().walkSO);
  50.                 exitStateMachine();
  51.             end
  52.         else
  53.             -- bed does not exist anymore
  54.             getParent().setEmoticon(EMOTICON_CANNOT, EMOTICON_DELAY);
  55.             sendMsg("emoThink", getParent().walkSO);
  56.             exitStateMachine();
  57.         end
  58.         
  59.         freeHands(getParent());
  60.             
  61.     end )
  62.     
  63.     onExit(function(msg)
  64.         local actionPointName = retrieveData("actionPointName");
  65.         print("doublebed.lua onExit(" .. getParent().getCharacterName() .. ") actionPoint:" .. actionPointName);
  66.         
  67.         local bed = retrieveStateObject("bed");
  68.         if (bed) then
  69.             getParent().unlockActionPoint(bed, actionPointName);
  70.             getParent().stopAllActivities(bed);
  71.         end;
  72.         
  73.         local partner = retrieveStateObject("partner");
  74.         if (partner) then
  75.             getParent().unlockActionPoints(partner.getParent());
  76.             getParent().stopAllActivities(partner.getParent());
  77.             removeStateObject("partner");
  78.         end;
  79.         
  80.         removeStateObject("bed");
  81.         removeStateObject("blanket");        
  82.     end )
  83.     
  84.     
  85.     -- test if we need to cancel
  86.     onMsg("test", function(msg)
  87.         if testCancel() or testCancelSleeping() then
  88.             setState("outOfBed");
  89.         else
  90.             sendDelayedMsgThis("test", 1000);
  91.         end
  92.     end )
  93.     
  94.     
  95.     
  96.     
  97.     
  98.     
  99.     ---------------------------------------------------------------------------------------------------------------    
  100.     -- interaction ------------------------------------------------------------------------------------------------
  101.     ---------------------------------------------------------------------------------------------------------------
  102.     
  103.     
  104.     
  105.     -- wait intimate --------------------------------------------------------------------------------------------
  106.     state("waitIntimate")
  107.     
  108.         onEnter(function(msg)
  109.             print("-- waitIntimate -- " .. getParent().getCharacterName());
  110.             --startAnimation("sleepingTurnToLeftSide", retrieveData("mirrorAnims"));
  111.             
  112.             --local blanket = retrieveStateObject("blanket");
  113.             --blanket.startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
  114.             
  115.             sendDelayedMsgThis("sendReadyMsg", 1000);
  116.             sendDelayedMsgThis("stopWaiting", 30000);
  117.             
  118.             sendMsg("neutral", getParent().mimicSO);
  119.             getParent().setEmoticon("");
  120.             
  121.         end )
  122.         
  123.         onMsg("sendReadyMsg", function(msg)
  124. --            local partner = retrieveStateObject("partner");
  125. --            if (not partner) then print("no partner found"); end;
  126. --            sendMsg("partnerReady", partner);
  127. --            sendDelayedMsgThis("sendReadyMsg", 1000);
  128.             
  129.             if testCancel() then
  130.                 sendMsgThis("stopWaiting");
  131.             else
  132.                 local partner = retrieveStateObject("partner");
  133.                 if (not partner) then
  134.                     print("sendReadyMsg no partner found");
  135.                     sendMsgThis("stopWaiting");
  136.                     return
  137.                 end
  138.                 sendMsg("partnerReady", partner);
  139.                 sendDelayedMsgThis("sendReadyMsg", 1000);
  140.             end
  141.             
  142.             
  143.         end )
  144.     
  145.         onMsg("stopWaiting", function(msg)
  146.             setState("lieInBed");
  147.         end )
  148.     
  149.         onMsg("partnerReady", function(msg)
  150.             setState("startIntimate");
  151.             local partner = retrieveStateObject("partner");
  152.             partner.setState("startIntimate");
  153.         end )
  154.         
  155.         onMsg("partnerCancel", function(msg)
  156.             setState("lieInBed");
  157.         end )
  158.  
  159.     
  160.         onMsg("end", function(msg)
  161.             if testCancel() then
  162.                 setState("outOfBed");
  163.             else
  164.                 actionComplete();
  165.             end
  166.         end )
  167.         
  168.         
  169.     -- start intimate
  170.     state("startIntimate")
  171.     
  172.         onEnter(function(msg)
  173.             print("-- startIntimate --" .. getParent().getCharacterName());
  174.             
  175.             local bed = retrieveStateObject("bed");
  176.             getParent().stopActivity("sleep", bed);
  177.             -- character not sleeping anymore
  178.             getParent().setSleeping(false);
  179.                                     
  180.             local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
  181.             startAnimation(genderize(getParent(), "bedHoldStart"), mirror);
  182.             
  183.             retrieveStateObject("blanket").startSkeletonAnimation(genderize(getParent(), "blanketGetIntimate"), retrieveData("mirrorAnims"));
  184.  
  185.  
  186.  
  187.         end )
  188.         
  189.     
  190.         onMsg("end", function(msg)
  191.             print("-- startIntimate -- end");
  192.             if (testCancel()) then
  193.                 print("-- startIntimate -- end -- testCancel");
  194.                 setState("stopIntimate");
  195.             else
  196. --                local partner = retrieveStateObject("partner");
  197. --                local getInitmateBed = getParent().startActivity("getIntimateBed", partner.getParent());
  198. --                local length, scale = getActivityLength(getInitmateBed);
  199. --                storeData("lengthIntimate", length);
  200.  
  201.                 --getParent().changeOutfit(NOTHING);
  202.                 changeOutfit(getParent(), NOTHING_SEX);
  203.                 
  204. --                if (retrieveData("activePart") == true) then getParent().enableBlend(true); end
  205.                 
  206.                 
  207.  
  208.                 print("startIntimate nextAction: doIntimate " .. getParent().getCharacterName() .. " queue: " .. getQueueCount());
  209.                 setState("doIntimate");
  210.                 --setDefaultState("doIntimate");
  211.                 --nextAction();
  212.                 
  213.             end
  214.         end )
  215.         
  216.             
  217.  
  218.     -- do intimate
  219.     state("doIntimate")
  220.     
  221.         onEnter(function(msg)
  222.             print("-- doIntimate -- " .. getParent().getCharacterName());
  223.             
  224.             --getParent().replaceQueueEntry(0, "pm_getIntimateBed");
  225.             setTopQueueEntry(getParent(), "pm_getIntimateBed", true);
  226.             clearCancel();
  227.                         
  228.             local partner = retrieveStateObject("partner");
  229.             local getInitmateBed = getParent().startActivity("getIntimateBed", partner.getParent());
  230.             local length, scale = getActivityLength(getInitmateBed);
  231.             storeData("lengthIntimate", length);
  232.             
  233.             
  234.             sendDelayedMsgThis("complete", length);
  235.             sendDelayedMsgThis("testCancel", 1000);
  236.             
  237.             sendMsgThis("startLoop");
  238.  
  239.         end )
  240.         
  241.         onExit(function(msg)
  242.             local partner = retrieveStateObject("partner");
  243.             getParent().stopAllActivities(partner.getParent());
  244.         end )
  245.         
  246.         
  247.         onMsg("startLoop", function(msg)
  248.             local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
  249.             startAnimation(genderize(getParent(), "bedKissLoop"), mirror, 1.0, SEX_FADE_TIME);
  250.             
  251.             if (getParent().isMale()) then
  252.                 retrieveStateObject("blanket").startSkeletonAnimation("blanketKissLoop", mirror);
  253.             end;
  254.         end )
  255.         
  256.         onMsg("partnerCancel", function(msg)
  257.             local partner = retrieveStateObject("partner");
  258.             getParent().stopAllActivities(partner.getParent());
  259.             setState("stopIntimate");
  260.         end )
  261.         
  262.  
  263.         onMsg("complete", function(msg)
  264.             local partner = retrieveStateObject("partner");
  265.             getParent().stopAllActivities(partner.getParent());
  266.             --sendMsg("partnerCancel", partner);            
  267.             setState("stopIntimate");
  268.         end )
  269.         
  270.         
  271.         onMsg("testCancel", function(msg)
  272.             if (testCancel() or (getParent().getActivityQueueCount() > 1)) then
  273.                 print("doIntimate: onMsg testCancel CANCELED ".. getParent().getCharacterName());                        
  274.                 sendMsgThis("complete");            
  275.             else
  276.                 sendDelayedMsgThis("testCancel", 1000);
  277.             end
  278.         end )
  279.         
  280.         onMsg("queue", function(msg)
  281.             print("doIntimate: onMsg queue CANCELED ".. getParent().getCharacterName());                        
  282.             sendMsgThis("complete");            
  283.         end )
  284.  
  285.         onMsg("end", function(msg)
  286.             if (testCancel()) then
  287.                 sendMsgThis("complete");            
  288.             else
  289.                 sendMsgThis("startLoop");
  290.             end
  291.         end )
  292.                 
  293.         
  294.         
  295.                 
  296.         
  297.         onMsg("kissBed", function(msg)
  298.             print("doIntimate: onMsg kissBed ".. getParent().getCharacterName());
  299.             setState("kissWait");                        
  300.         end )            
  301.                     
  302.         onMsg("pettingBed", function(msg)
  303.             print("doIntimate: onMsg pettingBed " .. getParent().getCharacterName());                        
  304.             setState("pettingWait");                        
  305.         end )            
  306.     
  307.         onMsg("sexBed", function(msg)
  308.             print("doIntimate: onMsg sexBed " .. getParent().getCharacterName());                        
  309.             setState("sexWait");                        
  310.         end )    
  311.         
  312.         onMsg("kissReady", function(msg)
  313.             print("doIntimate: onMsg kissReady " .. getParent().getCharacterName());                        
  314.             local partner = retrieveStateObject("partner");
  315.             sendMsg("kissReady", partner);
  316.         end )    
  317.         
  318.         onMsg("pettingReady", function(msg)
  319.             print("doIntimate: onMsg pettingReady " .. getParent().getCharacterName());                        
  320.             local partner = retrieveStateObject("partner");
  321.             sendMsg("pettingReady", partner);
  322.         end )    
  323.         
  324.         onMsg("sexReady", function(msg)
  325.             print("doIntimate: onMsg sexReady " .. getParent().getCharacterName());                        
  326.             local partner = retrieveStateObject("partner");
  327.             sendMsg("sexReady", partner);
  328.         end )    
  329.         
  330.         
  331.                 
  332.  
  333.         
  334.         
  335.         
  336.     -- stop intimate
  337.     state("stopIntimate")
  338.     
  339.         onEnter(function(msg)
  340.             print("-- stopIntimate -- " .. getParent().getCharacterName());
  341.             
  342.             --setDefaultState("stand");
  343.             
  344.             -- check shortcuts to next queued action
  345.             local partner = retrieveStateObject("partner");
  346.             local partnerChar = partner.getParent();
  347.             if checkShortcut(partnerChar, {"kissBed", "pettingBed", "sexBed"}, {"kissWait", "pettingWait", "sexWait"}, {"kissBed", "pettingBed", "sexBed"}) then
  348.                 return
  349.             end
  350.  
  351.             sendMsg("partnerCancel", partner);            
  352.                         
  353.                         
  354.             local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
  355.             startAnimation(genderize(getParent(), "bedHoldStart"), mirror, -1);
  356.             
  357.             
  358.             --retrieveStateObject("blanket").startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
  359.             retrieveStateObject("blanket").startSkeletonAnimation(genderize(getParent(), "blanketGetIntimate"), retrieveData("mirrorAnims"), -1.0);
  360.  
  361.             --getParent().changeOutfit(UNDERWEAR);
  362.             changeOutfit(getParent(), UNDERWEAR);
  363.             
  364. --            if (retrieveData("activePart") == true) then getParent().enableBlend(false); end
  365.             
  366.             
  367.         end )
  368.         
  369.     
  370.         onMsg("end", function(msg)
  371. --            local partner = retrieveStateObject("partner");
  372. --            getParent().stopAllActivities(partner.getParent());
  373.             
  374.             --setDefaultState("stand");
  375.             setState("outOfBedFast");
  376.             
  377.             -- for testing
  378. --            local bed = retrieveStateObject("bed");
  379. --            bed.setChildEnable("blanket1", true);
  380. --            bed.setChildEnable("blanket2", true);
  381.             sendMsg("stop", getParent().mimicSO);
  382.  
  383.             
  384.             
  385.         end )
  386.         
  387.         
  388.         
  389.     -- lay down on bed to get initmate
  390.     state("layDownToGetIntimate")
  391.     
  392.         onEnter(function(msg)
  393.         
  394.         
  395.             if (not hasOutfit(getParent(), UNDERWEAR)) then
  396.                 storeData("stateAfterUndress", "layDownToGetIntimate");
  397.                 setState("undress");
  398.                 return
  399.             end
  400.         
  401.         
  402.             startAnimation("laydownBed", retrieveData("mirrorAnims"));
  403.             
  404.             local blanket = retrieveStateObject("blanket");
  405.             blanket.startSkeletonAnimation("blanketLayDownBed", retrieveData("mirrorAnims"));
  406.                         
  407.             local bed = retrieveStateObject("bed");
  408.             --bed.loopSound("Bettgerausch");
  409.             bed.playSound("bedLaydown");
  410.             getParent().startActivity("lie", bed);
  411.         end )
  412.     
  413.         onMsg("end", function(msg)
  414.             if testCancel() then
  415.                 setState("outOfBed")
  416.             else
  417.                 setState("waitIntimate");
  418.                 --local bed = retrieveStateObject("bed");
  419.                 --getParent().startActivity("sleep", bed);
  420.             end
  421.         end )
  422.         
  423.     
  424.     -----------------------------------------------------------------------------------------------------------
  425.     -- kiss in bed --------------------------------------------------------------------------------------------
  426.  
  427.     state("kissWait")
  428.     
  429.         onEnter(function(msg)
  430.             print("-- kissWait -- " .. getParent().getCharacterName());
  431.             
  432.             getParent().replaceQueueEntry(0, "pm_kissBed");
  433.             
  434.             
  435.             sendDelayedMsgThis("sendReadyMsg", 1000);
  436.             sendDelayedMsgThis("stopWaiting", 30000);
  437.                         
  438.         end )
  439.         
  440.         onMsg("sendReadyMsg", function(msg)
  441.             if testCancel() then
  442.                 sendMsgThis("stopWaiting");
  443.             else
  444.                 local partner = retrieveStateObject("partner");
  445.                 sendMsg("kissReady", partner);
  446.                 sendDelayedMsgThis("sendReadyMsg", 1000);
  447.             end
  448.         end )
  449.     
  450.         onMsg("stopWaiting", function(msg)
  451.             --getParent().replaceQueueEntry(0, "pm_getIntimateBed");
  452.             setState("doIntimate");
  453.             --nextAction();
  454.         end )
  455.     
  456.         onMsg("kissReady", function(msg)
  457.             setState("kissStart");
  458.             local partner = retrieveStateObject("partner");
  459.             partner.setState("kissStart");
  460.         end )
  461.             
  462.     state("kissStart")
  463.     
  464.         onEnter(function(msg)
  465.             print("------- kissStart ---------" .. getParent().getCharacterName());
  466.             
  467.             local mirror = retrieveData("mirrorAnims") == getParent().isMale();
  468.             startAnimation(genderize(getParent(), "bedKissStart"), mirror, SEX_SPEEDUP);
  469.             
  470.             
  471.             if (getParent().isMale()) then
  472.                 retrieveStateObject("blanket").startSkeletonAnimation("blanketKissStart", mirror, SEX_SPEEDUP);
  473.             end;
  474.             --retrieveStateObject("blanket").startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
  475.             
  476.             -- put dummy item into passive characters queue to allow him cancel
  477.             if (retrieveData("activePart") == false) then 
  478.                 local partner = retrieveStateObject("partner");
  479.                 --getParent().pushCommand("pm_kissBed", "", partner.getParent(), ""); 
  480.                 --getParent().pushQueueEntry("pm_kissBed"); 
  481.             end;
  482.  
  483.             sendMsg("stop", getParent().mimicSO);
  484.  
  485.         end )
  486.     
  487.         onMsg("partnerCancelKiss", function(msg)    
  488.             setState("kissStop");
  489.         end )    
  490.  
  491.         onMsg("end", function(msg)
  492.             if (testCancel()) then
  493.                 local partner = retrieveStateObject("partner");
  494.                 sendMsg("partnerCancelKiss", partner);            
  495.                 setState("kissStop");
  496.             else
  497.                 setState("doKiss");
  498.             end
  499.         end )    
  500.     
  501.     
  502.     
  503.     state("doKiss")
  504.     
  505.         onEnter(function(msg)
  506.             print("------- doKiss ---------" .. getParent().getCharacterName());
  507.             local partner = retrieveStateObject("partner");
  508.             local kissBed = getParent().startActivity("kissBed", partner.getParent());
  509.             local length, scale = getActivityLength(kissBed);
  510.             
  511.             sendDelayedMsgThis("complete", length);
  512.             sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
  513.             
  514.             local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
  515.             startAnimation(genderize(getParent(), "bedKissLoop"), mirror, SEX_SPEEDUP);
  516.             
  517.             if (getParent().isMale()) then
  518.                 retrieveStateObject("blanket").startSkeletonAnimation("blanketKissLoop", mirror, SEX_SPEEDUP);
  519.             end;
  520.             --retrieveStateObject("blanket").startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
  521.         end )
  522.     
  523.         onMsg("complete", function(msg)    
  524.             local partner = retrieveStateObject("partner");
  525.             getParent().stopActivity("kissBed",partner.getParent());
  526.             sendMsg("partnerCancelKiss", partner);            
  527.             setState("kissStop");
  528.         end )    
  529.  
  530.         onMsg("partnerCancelKiss", function(msg)    
  531.             local partner = retrieveStateObject("partner");
  532.             getParent().stopActivity("kissBed",partner.getParent());
  533.             setState("kissStop");
  534.         end )    
  535.  
  536.         onMsg("testCancel", function(msg)    
  537.             if testCancel() then
  538.                 print("---------------- testCancel testCancel() true");
  539.                 sendMsgThis("complete");                            
  540.             else
  541.                 sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
  542.             end
  543.         end )    
  544.  
  545.         onMsg("end", function(msg)
  546.             
  547.             if testCancel() then
  548.                 print("--------------- end testCancel() true");
  549.                 sendMsgThis("complete");                            
  550.             else
  551.                 local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
  552.                 startAnimation(genderize(getParent(), "bedKissLoop"), mirror, SEX_SPEEDUP);
  553.                 
  554.                 if (getParent().isMale()) then
  555.                     retrieveStateObject("blanket").startSkeletonAnimation("blanketKissLoop", mirror, SEX_SPEEDUP);
  556.                 end;
  557.                 --retrieveStateObject("blanket").startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
  558.             end
  559.         end )    
  560.         
  561.                 
  562.     state("kissStop")
  563.     
  564.         onEnter(function(msg)
  565.             print("------- kissStop ---------" .. getParent().getCharacterName());
  566.             
  567.             local mirror = retrieveData("mirrorAnims") == getParent().isMale();
  568.             startAnimation(genderize(getParent(), "bedKissStart"), mirror, -1);
  569.             
  570.             if (getParent().isMale()) then
  571.                 retrieveStateObject("blanket").startSkeletonAnimation("blanketKissLoop", mirror, -SEX_SPEEDUP);
  572.             end;
  573.             --retrieveStateObject("blanket").startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
  574.         end )
  575.     
  576.         onMsg("end", function(msg)
  577.             --getParent().replaceQueueEntry(0, "pm_getIntimateBed");
  578.             setState("doIntimate");
  579.             --nextAction();
  580.         end )    
  581.     
  582.     
  583.     -----------------------------------------------------------------------------------------------------------
  584.     -- petting in bed --------------------------------------------------------------------------------------------
  585.  
  586.     state("pettingWait")
  587.     
  588.         onEnter(function(msg)
  589.             print("-- pettingWait -- " .. getParent().getCharacterName());
  590.             
  591.             getParent().replaceQueueEntry(0, "pm_pettingBed");
  592.             
  593.             sendDelayedMsgThis("sendReadyMsg", 1000);
  594.             sendDelayedMsgThis("stopWaiting", 30000);
  595.                         
  596.         end )
  597.         
  598.         onMsg("sendReadyMsg", function(msg)
  599.             if testCancel() then
  600.                 sendMsgThis("stopWaiting");
  601.             else
  602.                 local partner = retrieveStateObject("partner");
  603.                 sendMsg("pettingReady", partner);
  604.                 sendDelayedMsgThis("sendReadyMsg", 1000);
  605.             end
  606.         end )
  607.     
  608.         onMsg("stopWaiting", function(msg)
  609.             --getParent().replaceQueueEntry(0, "pm_getIntimateBed");
  610.             setState("doIntimate");
  611.             --nextAction();
  612.         end )
  613.     
  614.         onMsg("pettingReady", function(msg)
  615.             setState("pettingStart");
  616.             local partner = retrieveStateObject("partner");
  617.             partner.setState("pettingStart");
  618.         end )
  619.             
  620.     state("pettingStart")
  621.     
  622.         onEnter(function(msg)
  623.             print("------- pettingStart ---------" .. getParent().getCharacterName());
  624.         
  625.             
  626.             local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
  627.             
  628.             -- character animation
  629.             if (retrieveData("activePart") == true) then
  630.                 startAnimation(genderize(getParent(), "bedPettingStart"), mirror, SEX_SPEEDUP, SEX_FADE_TIME);
  631.             else
  632.                 startAnimation(genderize(getParent(), "bedPetedStart"), mirror, SEX_SPEEDUP, SEX_FADE_TIME);
  633.             end            
  634.             
  635.             -- blanket animation
  636.             if (getParent().isMale()) then
  637.                 if (retrieveData("activePart") == true) then 
  638.                     retrieveStateObject("blanket").startSkeletonAnimation("blanketPettingStartMike", mirror, SEX_SPEEDUP);
  639.                 else
  640.                     retrieveStateObject("blanket").startSkeletonAnimation("blanketPettingStartElaine", mirror, SEX_SPEEDUP);
  641.                 end
  642.             end;
  643.                         
  644.             -- put dummy item into passive characters queue to allow him cancel
  645.             if (retrieveData("activePart") == false) then 
  646.                 local partner = retrieveStateObject("partner");
  647.                 --getParent().pushCommand("pm_pettingBed", "", partner.getParent(), ""); 
  648.                 --getParent().pushQueueEntry("pm_pettingBed"); 
  649.             end;
  650.             
  651.             --retrieveStateObject("blanket").startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
  652.         end )
  653.     
  654.         onMsg("partnerCancelPetting", function(msg)    
  655.             local partner = retrieveStateObject("partner");
  656.             getParent().stopActivity("pettingBed",partner.getParent());
  657.             setState("pettingStop");
  658.         end )    
  659.  
  660.         onMsg("end", function(msg)
  661.             if (testCancel()) then
  662.                 local partner = retrieveStateObject("partner");
  663.                 sendMsg("partnerCancelPetting", partner);            
  664.                 setState("pettingStop");
  665.             else
  666.                 setState("doPetting");
  667.             end
  668.         end )    
  669.     
  670.     
  671.     
  672.     state("doPetting")
  673.     
  674.         onEnter(function(msg)
  675.             print("------- doPetting ---------" .. getParent().getCharacterName());
  676.             local partner = retrieveStateObject("partner");
  677.             local pettingBed = getParent().startActivity("pettingBed", partner.getParent());
  678.             local length, scale = getActivityLength(pettingBed);
  679.             
  680.             sendDelayedMsgThis("complete", length);
  681.             sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
  682.             
  683.             sendMsgThis("startLoop");
  684.             
  685.             if (not retrieveData("activePart")) then
  686.                 local delay = SEX_GROAN_GAP; if getParent().isMale() then delay = SEX_GROAN_GAP/2 end;
  687.                 sendDelayedMsgThis("groan", delay/SEX_SPEEDUP);
  688.             end
  689.             
  690.                                         
  691.             
  692. --            local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
  693. --            if (retrieveData("activePart") == true) then
  694. --                startAnimation(genderize(getParent(), "bedPettingLoop"), mirror, SEX_SPEEDUP);
  695. --            else
  696. --                startAnimation(genderize(getParent(), "bedPetedLoop"), mirror, SEX_SPEEDUP);
  697. --            end
  698.             --retrieveStateObject("blanket").startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
  699.         end )
  700.     
  701.         onMsg("startLoop", function(msg)    
  702.             -- character animation
  703.             local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
  704.             if (retrieveData("activePart") == true) then
  705.                 startAnimation(genderize(getParent(), "bedPettingLoop"), mirror, SEX_SPEEDUP);
  706.             else
  707.                 startAnimation(genderize(getParent(), "bedPetedLoop"), mirror, SEX_SPEEDUP);
  708.             end
  709.             
  710.             -- blanket animation
  711.             if (getParent().isMale()) then
  712.                 if (retrieveData("activePart") == true) then 
  713.                     retrieveStateObject("blanket").startSkeletonAnimation("blanketPettingLoopMike", mirror, SEX_SPEEDUP);
  714.                 else
  715.                     retrieveStateObject("blanket").startSkeletonAnimation("blanketPettingLoopElaine", mirror, SEX_SPEEDUP);
  716.                 end
  717.             end;
  718.         end )
  719.             
  720.         onMsg("groan", function(msg)
  721.             groan();
  722.             sendDelayedMsgThis("groan", SEX_GROAN_GAP/SEX_SPEEDUP);
  723.         end )
  724.             
  725.         onMsg("complete", function(msg)    
  726.             local partner = retrieveStateObject("partner");
  727.             getParent().stopActivity("pettingBed",partner.getParent());
  728.             sendMsg("partnerCancelPetting", partner);            
  729.             setState("pettingStop");
  730.         end )    
  731.  
  732.         onMsg("partnerCancelPetting", function(msg)    
  733.             local partner = retrieveStateObject("partner");
  734.             getParent().stopActivity("pettingBed",partner.getParent());
  735.             setState("pettingStop");
  736.         end )    
  737.  
  738.         onMsg("testCancel", function(msg)    
  739.             if testCancel() then
  740.                 sendMsgThis("complete");                            
  741.             else
  742.                 sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
  743.             end
  744.         end )    
  745.  
  746.         onMsg("end", function(msg)
  747.             
  748.             if testCancel() then
  749.                 sendMsgThis("complete");                            
  750.             else
  751.                 sendMsgThis("startLoop");                            
  752.             end
  753.         end )    
  754.         
  755.                 
  756.     state("pettingStop")
  757.     
  758.         onEnter(function(msg)
  759.             print("------- pettingStop ---------" .. getParent().getCharacterName());
  760.             
  761.             local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
  762.             
  763.             -- character animation
  764.             if (retrieveData("activePart") == true) then
  765.                 startAnimation(genderize(getParent(), "bedPettingStart"), mirror, -SEX_SPEEDUP, SEX_FADE_TIME);
  766.             else
  767.                 startAnimation(genderize(getParent(), "bedPetedStart"), mirror, -SEX_SPEEDUP, SEX_FADE_TIME);
  768.             end
  769.             
  770.             -- blanket animation
  771.             if (getParent().isMale()) then
  772.                 if (retrieveData("activePart") == true) then 
  773.                     retrieveStateObject("blanket").startSkeletonAnimation("blanketPettingStartMike", mirror, -SEX_SPEEDUP);
  774.                 else
  775.                     retrieveStateObject("blanket").startSkeletonAnimation("blanketPettingStartElaine", mirror, -SEX_SPEEDUP);
  776.                 end
  777.             end;
  778.  
  779.             --startAnimation(genderize(getParent(), "bedPettingStop"), retrieveData("mirrorAnims"));
  780.             --retrieveStateObject("blanket").startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
  781.         end )
  782.     
  783.         onMsg("end", function(msg)
  784.             --getParent().replaceQueueEntry(0, "pm_getIntimateBed");
  785.             setState("doIntimate");
  786.             --nextAction();
  787.         end )    
  788.     
  789.  
  790.     
  791.     -----------------------------------------------------------------------------------------------------------
  792.     -- sex in bed --------------------------------------------------------------------------------------------
  793.  
  794.  
  795.     state("sexWait")
  796.     
  797.         onEnter(function(msg)
  798.             print("-- sexWait -- " .. getParent().getCharacterName());
  799.             
  800.             getParent().replaceQueueEntry(0, "pm_sexBed");
  801.             
  802.             sendDelayedMsgThis("sendReadyMsg", 1000);
  803.             sendDelayedMsgThis("stopWaiting", 30000);
  804.                         
  805.         end )
  806.         
  807.         onMsg("sendReadyMsg", function(msg)
  808.             if testCancel() then
  809.                 sendMsgThis("stopWaiting");
  810.             else
  811.                 local partner = retrieveStateObject("partner");
  812.                 sendMsg("sexReady", partner);
  813.                 sendDelayedMsgThis("sendReadyMsg", 1000);
  814.             end
  815.         end )
  816.     
  817.         onMsg("stopWaiting", function(msg)
  818.             --getParent().replaceQueueEntry(0, "pm_getIntimateBed");
  819.             setState("doIntimate");
  820.             --nextAction();
  821.         end )
  822.     
  823.         onMsg("sexReady", function(msg)
  824.             setState("sexStart");
  825.             local partner = retrieveStateObject("partner");
  826.             partner.setState("sexStart");
  827.         end )
  828.         
  829.     
  830.     state("sexStart")
  831.     
  832.         onEnter(function(msg)
  833.             print("------- sexStart ---------" .. getParent().getCharacterName());
  834.             
  835.             -- character animation
  836.             local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
  837.             if (retrieveData("activePart") == true) then
  838.                 startAnimation(genderize(getParent(), "bedSexStart"), mirror, SEX_SPEEDUP, SEX_FADE_TIME);
  839.             else
  840.                 startAnimation(genderize(getParent(), "bedSexedStart"), mirror, SEX_SPEEDUP, SEX_FADE_TIME);
  841.             end
  842.  
  843.             -- blanket animation
  844.             if (getParent().isMale()) then
  845.                 if (retrieveData("activePart") == true) then 
  846.                     retrieveStateObject("blanket").startSkeletonAnimation("blanketSexStartMike", mirror, SEX_SPEEDUP);
  847.                 else
  848.                     retrieveStateObject("blanket").startSkeletonAnimation("blanketSexStartElaine", mirror, SEX_SPEEDUP);
  849.                 end
  850.             end;
  851.             
  852.             -- put dummy item into passive characters queue to allow him cancel
  853.             if (retrieveData("activePart") == false) then 
  854.                 local partner = retrieveStateObject("partner");
  855.                 --getParent().pushCommand("pm_sexBed", "", partner.getParent(), ""); 
  856.                 --getParent().pushQueueEntry("pm_sexBed"); 
  857.             end;
  858.             
  859.             
  860.             --retrieveStateObject("blanket").startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
  861.         end )
  862.     
  863.         onMsg("partnerCancelSex", function(msg)    
  864.             local partner = retrieveStateObject("partner");
  865.             getParent().stopActivity("sexBed",partner.getParent());
  866.             setState("sexStop");
  867.         end )
  868.         
  869.             
  870.         onMsg("end", function(msg)
  871.             if (testCancel()) then
  872.                 local partner = retrieveStateObject("partner");
  873.                 sendMsg("partnerCancelSex", partner);            
  874.                 setState("sexStop");
  875.             else
  876.                 setState("doSex");
  877.             end
  878.         end )    
  879.     
  880.     
  881.     
  882.     state("doSex")
  883.     
  884.         onEnter(function(msg)
  885.             print("------- doSex ---------" .. getParent().getCharacterName());
  886.             local partner = retrieveStateObject("partner");
  887.             local sexBed = getParent().startActivity("sexBed", partner.getParent());
  888.             local length, scale = getActivityLength(sexBed);
  889.             
  890.             sendDelayedMsgThis("complete", length);
  891.             sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
  892.  
  893.             sendMsgThis("startLoop");
  894.             
  895.             local delay = SEX_GROAN_GAP; if getParent().isMale() then delay = SEX_GROAN_GAP/2 end;
  896.             sendDelayedMsgThis("groan", delay/SEX_SPEEDUP);
  897.                                         
  898.             
  899.             
  900.         end )
  901.         
  902.         onMsg("startLoop", function(msg)    
  903.             -- character animation
  904.             local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
  905.             if (retrieveData("activePart") == true) then
  906.                 startAnimation(genderize(getParent(), "bedSexLoop"), mirror, SEX_SPEEDUP);
  907.             else
  908.                 startAnimation(genderize(getParent(), "bedSexedLoop"), mirror, SEX_SPEEDUP);
  909.             end
  910.             
  911.             -- blanket animation
  912.             if (getParent().isMale()) then
  913.                 if (retrieveData("activePart") == true) then 
  914.                     retrieveStateObject("blanket").startSkeletonAnimation("blanketSexLoopMike", mirror, SEX_SPEEDUP);
  915.                 else
  916.                     retrieveStateObject("blanket").startSkeletonAnimation("blanketSexLoopElaine", mirror, SEX_SPEEDUP);
  917.                 end
  918.             end;
  919.         end )    
  920.     
  921.         onMsg("complete", function(msg)    
  922.             local partner = retrieveStateObject("partner");
  923.             getParent().stopActivity("sexBed",partner.getParent());
  924.             sendMsg("partnerCompleteSex", partner);            
  925.             setState("sexOrgasm");
  926.         end )
  927.             
  928.         onMsg("canceled", function(msg)    
  929.             local partner = retrieveStateObject("partner");
  930.             getParent().stopActivity("sexBed",partner.getParent());
  931.             sendMsg("partnerCancelSex", partner);            
  932.             setState("sexStop");
  933.         end )
  934.         
  935.         onMsg("groan", function(msg)
  936.             groan();
  937.             sendDelayedMsgThis("groan", SEX_GROAN_GAP/SEX_SPEEDUP);
  938.         end )    
  939.  
  940.         onMsg("partnerCancelSex", function(msg)    
  941.             local partner = retrieveStateObject("partner");
  942.             getParent().stopActivity("sexBed",partner.getParent());
  943.             setState("sexStop");
  944.         end )    
  945.  
  946.         onMsg("partnerCompleteSex", function(msg)    
  947.             local partner = retrieveStateObject("partner");
  948.             getParent().stopActivity("sexBed",partner.getParent());
  949.             setState("sexOrgasm");
  950.         end )    
  951.  
  952.         onMsg("testCancel", function(msg)    
  953.             if testCancel() then
  954.                 sendMsgThis("canceled");                            
  955.             else
  956.                 sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
  957.             end
  958.         end )    
  959.  
  960.         onMsg("end", function(msg)
  961.             
  962.             if testCancel() then
  963.                 sendMsgThis("canceled");                            
  964.             else
  965.                 sendMsgThis("startLoop");                            
  966.             end
  967.         end )    
  968.         
  969.         
  970.     state("sexOrgasm")
  971.     
  972.         onEnter(function(msg)
  973.             print("------- sexOrgasm ---------" .. getParent().getCharacterName());
  974.             
  975.             local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
  976.             if (retrieveData("activePart") == true) then
  977.                 startAnimation(genderize(getParent(), "bedSexOrgasm"), mirror, SEX_SPEEDUP, SEX_FADE_TIME * 2);
  978.             else
  979.                 startAnimation(genderize(getParent(), "bedSexedOrgasm"), mirror, SEX_SPEEDUP, SEX_FADE_TIME * 2);
  980.             end
  981.             
  982.             groan(4);
  983.         end )
  984.             
  985.         onMsg("end", function(msg)
  986.             setState("sexStop");
  987.         end )    
  988.         
  989.         
  990.                 
  991.     state("sexStop")
  992.     
  993.         onEnter(function(msg)
  994.             print("------- sexStop ---------" .. getParent().getCharacterName());
  995.             
  996.             local mirror = (retrieveData("mirrorAnims") == getParent().isMale());
  997.             if (retrieveData("activePart") == true) then
  998.                 startAnimation(genderize(getParent(), "bedSexStart"), mirror, -SEX_SPEEDUP, SEX_FADE_TIME * 2);
  999.             else
  1000.                 startAnimation(genderize(getParent(), "bedSexedStart"), mirror, -SEX_SPEEDUP, SEX_FADE_TIME * 2);
  1001.             end
  1002.             
  1003.             -- blanket animation
  1004.             if (getParent().isMale()) then
  1005.                 if (retrieveData("activePart") == true) then 
  1006.                     retrieveStateObject("blanket").startSkeletonAnimation("blanketSexStartMike", mirror, -SEX_SPEEDUP);
  1007.                 else
  1008.                     retrieveStateObject("blanket").startSkeletonAnimation("blanketSexStartElaine", mirror, -SEX_SPEEDUP);
  1009.                 end
  1010.             end;
  1011.             
  1012.             --startAnimation(genderize(getParent(), "bedSexStop"), retrieveData("mirrorAnims"));
  1013.             --retrieveStateObject("blanket").startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
  1014.         end )
  1015.     
  1016.         onMsg("end", function(msg)
  1017.             --getParent().replaceQueueEntry(0, "pm_getIntimateBed");
  1018.             setState("doIntimate");
  1019.             --nextAction();
  1020.         end )    
  1021.     
  1022.  
  1023.  
  1024.  
  1025.  
  1026.  
  1027.  
  1028.  
  1029.     
  1030.     
  1031.     
  1032.     ---------------------------------------------------------------------------------------------------------------    
  1033.     -- sleeping ---------------------------------------------------------------------------------------------------
  1034.     ---------------------------------------------------------------------------------------------------------------
  1035.     
  1036.     state("undress")
  1037.     
  1038.         onEnter(function(msg)
  1039.             --startAnimation("ausziehen2");
  1040.             startAnimation(getChangeOutfitAnim(getParent()));
  1041.             sendDelayedMsgThis("underwear", 1600);
  1042.         end )
  1043.         
  1044.         onMsg("underwear", function(msg)
  1045.             changeOutfit(getParent(), UNDERWEAR);
  1046.         end )
  1047.     
  1048.         onMsg("end", function(msg)
  1049.             setState(retrieveData("stateAfterUndress"))
  1050.         end )
  1051.         
  1052.     
  1053.     -- lay down on bed --------------------------------------------------------------------------------------------
  1054.     state("layDown")
  1055.     
  1056.         onEnter(function(msg)
  1057.         
  1058.             if (not hasOutfit(getParent(), UNDERWEAR) and not hasOutfit(getParent(), NOTHING)) then
  1059.                 storeData("stateAfterUndress", "layDown");
  1060.                 setState("undress");
  1061.                 return
  1062.             end
  1063.  
  1064.             startAnimation("laydownBed", retrieveData("mirrorAnims"));
  1065.             
  1066.             local blanket = retrieveStateObject("blanket");
  1067.             blanket.startSkeletonAnimation("blanketLayDownBed", retrieveData("mirrorAnims"));
  1068.                                     
  1069.             local bed = retrieveStateObject("bed");
  1070.             --bed.loopSound("Bettgerausch");
  1071.             bed.playSound("bedLaydown");
  1072.         end )
  1073.     
  1074.         onMsg("end", function(msg)
  1075.             if testCancel() then
  1076.                 setState("outOfBedFast")
  1077.             else
  1078.                 setState("lieInBed");
  1079.             end
  1080.         end )
  1081.     
  1082.     -- sleeping - lying down quietly
  1083.     state("lieInBed")
  1084.     
  1085.         onEnter(function(msg)
  1086.             startAnimation("lieInBed", retrieveData("mirrorAnims"));
  1087.             
  1088.             local blanket = retrieveStateObject("blanket");
  1089.             blanket.startSkeletonAnimation("blanketLiePose", retrieveData("mirrorAnims"));
  1090.             
  1091.             local bed = retrieveStateObject("bed");
  1092.             getParent().startActivity("sleep", bed);
  1093.             getParent().startActivity("lie", bed);
  1094.             
  1095.             -- character now sleeping
  1096.             getParent().setSleeping(true);
  1097.             
  1098.  
  1099.             sendMsg("eyeClose", getParent().mimicSO);
  1100.             getParent().setEmoticon(EMOTICON_SLEEPING);
  1101.         end )
  1102.                 
  1103.     
  1104.         onMsg("end", function(msg)
  1105.             if testCancel() or testCancelSleeping() then
  1106.                 setState("outOfBed")
  1107.             else
  1108.                 sendDelayedMsgThis("test", 1000);
  1109.                 setDelayedState("sleepingTurnToLeftSide", random(5000, 10000));
  1110.             end
  1111.         end )
  1112.         
  1113.         
  1114.     -- lying only no sleeping
  1115.     state("lieOnlyInBed")
  1116.     
  1117.         onEnter(function(msg)
  1118.             startAnimation("lieInBed", retrieveData("mirrorAnims"));
  1119.             local bed = retrieveStateObject("bed");
  1120.             getParent().startActivity("lie", bed);
  1121.             sendDelayedMsgThis("testCancel", 1000);
  1122.         end )
  1123.     
  1124.         onMsg("testCancel", function(msg)
  1125.             if testCancel() then
  1126.                 setState("outOfBed")
  1127.             else
  1128.                 sendDelayedMsgThis("testCancel", 1000);
  1129.             end
  1130.         end )    
  1131.         
  1132.             
  1133.         
  1134.     -- sleeping - turn to to left side
  1135.     state("sleepingTurnToLeftSide")
  1136.     
  1137.         onEnter(function(msg)
  1138.             startAnimation("sleepingTurnToLeftSide", retrieveData("mirrorAnims"));
  1139.             
  1140.             local blanket = retrieveStateObject("blanket");
  1141.             blanket.startSkeletonAnimation("blanketTurnToLeftSide", retrieveData("mirrorAnims"));
  1142.                         
  1143.         end )
  1144.     
  1145.         onMsg("end", function(msg)
  1146.             if testCancel() or testCancelSleeping() then
  1147.                 setState("outOfBed")
  1148.             else
  1149.                 sendDelayedMsgThis("test", 1000);
  1150.                 setDelayedState("sleepingTurnToTommy", random(5000, 10000));
  1151.             end
  1152.         end )
  1153.         
  1154.     
  1155.         
  1156.     -- sleeping - turn to to tummy
  1157.     state("sleepingTurnToTommy")
  1158.     
  1159.         onEnter(function(msg)
  1160.             startAnimation("sleepingTurnToTommy", retrieveData("mirrorAnims"));
  1161.             
  1162.             local blanket = retrieveStateObject("blanket");
  1163.             blanket.startSkeletonAnimation("blanketTurnToTommy", retrieveData("mirrorAnims"));
  1164.         end )
  1165.     
  1166.         onMsg("end", function(msg)
  1167.             if testCancel() or testCancelSleeping() then
  1168.                 setState("outOfBed")
  1169.             else
  1170.                 sendDelayedMsgThis("test", 1000);
  1171.                 setDelayedState("sleepingTurnToRightSide", random(5000, 10000));
  1172.             end
  1173.         end )    
  1174.         
  1175.     -- sleeping - turn to to tummy
  1176.     state("sleepingTurnToRightSide")
  1177.     
  1178.         onEnter(function(msg)
  1179.             startAnimation("sleepingTurnToRightSide", retrieveData("mirrorAnims"));
  1180.             
  1181.             local blanket = retrieveStateObject("blanket");
  1182.             blanket.startSkeletonAnimation("blanketTurnToRightSide", retrieveData("mirrorAnims"));
  1183.         end )
  1184.     
  1185.         onMsg("end", function(msg)
  1186.             if testCancel() or testCancelSleeping() then
  1187.                 setState("outOfBed")
  1188.             else
  1189.                 sendDelayedMsgThis("test", 1000);
  1190.                 setDelayedState("sleepingTurnToBack", random(5000, 10000));
  1191.             end
  1192.         end )    
  1193.         
  1194.     -- sleeping - turn to back
  1195.     state("sleepingTurnToBack")
  1196.     
  1197.         onEnter(function(msg)
  1198.             startAnimation("sleepingTurnToBack", retrieveData("mirrorAnims"));
  1199.             
  1200.             local blanket = retrieveStateObject("blanket");
  1201.             blanket.startSkeletonAnimation("blanketTurnToBack", retrieveData("mirrorAnims"));
  1202.         end )
  1203.     
  1204.         onMsg("end", function(msg)
  1205.             if testCancel() then
  1206.                 setState("outOfBed")
  1207.             else
  1208.                 setState("lieInBed");
  1209.             end
  1210.         end )    
  1211.         
  1212.     -- get out of bed
  1213.     state("outOfBed")
  1214.     
  1215.         onEnter(function(msg)
  1216.             
  1217.             print("------- outOfBed ---------" .. getParent().getCharacterName());
  1218.  
  1219.             local character = getParent();
  1220.             local bed = retrieveStateObject("bed");
  1221.                     
  1222.             -- character not sleeping anymore
  1223.             character.setSleeping(false);
  1224.             
  1225.             -- check shortcuts to other bed activities, before standing up
  1226.             if checkShortcut(bed, {"getIntimateBed", "sleep"}, {"waitIntimate", "lieInBed"}, {"getIntimateBedShortcut"}) then
  1227.                 return
  1228.             end
  1229.             local others = (getOtherUsers(character, bed, "lie"));
  1230.             local other = others[1];
  1231.             if (other) then
  1232.                 if checkShortcut(other, {"getIntimateBed"}, {"waitIntimate"}, {"getIntimateBedShortcut"}) then
  1233.                     return
  1234.                 end
  1235.             else
  1236.                 print("outOfBed check shortcuts; no OtherUsers found");
  1237.             end
  1238.             
  1239.             
  1240.             startAnimation(genderize(getParent(), "standupBed"), retrieveData("mirrorAnims"));
  1241.             
  1242.             local blanket = retrieveStateObject("blanket");
  1243.             local blanketAnimSpeed = cond(getParent().isMale(), 1.0, 2.0)
  1244.             blanket.startSkeletonAnimation("blanketStandupBed", retrieveData("mirrorAnims"), blanketAnimSpeed);
  1245.  
  1246.             character.playSound(genderizeReal(getParent(), "wakeUp"));
  1247.  
  1248.             --bed.stopSound("Bettgerausch");
  1249.             character.stopAllActivities(bed);
  1250.             
  1251.             sendMsg("neutral", character.mimicSO);
  1252.             character.setEmoticon("");
  1253.             
  1254.         end )
  1255.     
  1256.         onMsg("end", function(msg)
  1257.             --local blanket = retrieveStateObject("blanket");
  1258.             --blanket.startSkeletonAnimation("blanketStoodupBed", retrieveData("mirrorAnims"));
  1259.  
  1260.             flipPoseDirection();
  1261.             setCurrentPosition();
  1262.             exitStateMachine();
  1263.         end )
  1264.         
  1265.     -- get out of bed
  1266. --    state("outOfBed")
  1267. --~     
  1268. --~         onEnter(function(msg)
  1269. --~             startAnimation("standupBed", retrieveData("mirrorAnims"));
  1270. --~                         
  1271. --~             -- character not sleeping anymore
  1272. --~             getParent().setSleeping(false);
  1273. --~             
  1274. --~             local blanket = retrieveStateObject("blanket");
  1275. --~             blanket.startSkeletonAnimation("blanketStandupBed", retrieveData("mirrorAnims"));
  1276.  
  1277. --~             local bed = retrieveStateObject("bed");
  1278. --~             --bed.stopSound("Bettgerausch");
  1279. --~             getParent().stopAllActivities(bed);
  1280. --~             
  1281. --~             sendMsg("neutral", getParent().mimicSO);
  1282. --~             getParent().setEmoticon("");
  1283. --~             
  1284. --~         end )
  1285. --~     
  1286. --~         onMsg("end", function(msg)
  1287. --~             exitStateMachine();
  1288. --~         end )    
  1289.         
  1290.     -- get out of bed
  1291.     state("outOfBedFast")
  1292.     
  1293.         onEnter(function(msg)
  1294.         
  1295.             print("------- outOfBedFast ---------" .. getParent().getCharacterName());
  1296.  
  1297.             local character = getParent();
  1298.             local bed = retrieveStateObject("bed");
  1299.                     
  1300.             -- character not sleeping anymore
  1301.             character.setSleeping(false);
  1302.             
  1303.             -- check shortcuts to other bed activities, before standing up
  1304.             if checkShortcut(bed, {"getIntimateBed", "sleep"}, {"waitIntimate", "lieInBed"}, {"getIntimateBedShortcut"}) then
  1305.                 return
  1306.             end
  1307.             local other = getOtherUser(character, bed, "lie");
  1308.             if (other) then
  1309.                 if checkShortcut(other, {"getIntimateBed"}, {"waitIntimate"}, {"getIntimateBedShortcut"}) then
  1310.                     return
  1311.                 end
  1312.             else
  1313.                 print("outOfBedFast check shortcuts; no OtherUsers found");
  1314.             end
  1315.         
  1316.             
  1317.         
  1318.             startAnimation("laydownBed", retrieveData("mirrorAnims"), -1.0, 1000);
  1319.                         
  1320.             
  1321.             local blanket = retrieveStateObject("blanket");
  1322.             blanket.startSkeletonAnimation("blanketStandupBed", retrieveData("mirrorAnims"), 5.0);
  1323.  
  1324.             local bed = retrieveStateObject("bed");
  1325.             --bed.stopSound("Bettgerausch");
  1326.             getParent().stopAllActivities(bed);
  1327.             
  1328.             sendMsg("neutral", getParent().mimicSO);
  1329.             getParent().setEmoticon("");
  1330.             
  1331.         end )
  1332.     
  1333.         onMsg("end", function(msg)
  1334.             exitStateMachine();
  1335.         end )    
  1336.             
  1337.     
  1338. endStateMachine()