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

  1. -- character interaction state machine
  2. beginStateMachine()
  3.     
  4.     onEnter(function(msg)
  5.         print("----- entering " .. getParent().getCharacterName() .. " interaction -----");
  6.         
  7.     
  8.         setPose(archize(getParent(), "stand1"));
  9.     
  10.         local partner = retrieveStateObject("partner");
  11.         if (getParent().isOneActionPointLocked(partner.getParent())) then
  12.             print("----- entering " .. getParent().getCharacterName() .. " interaction isOneActionPointLocked-----");
  13.             -- action point is locked
  14.             exitStateMachine();
  15.         else
  16.             getParent().lockActionPoints(partner.getParent());
  17.         end
  18.         
  19.         
  20.     end )
  21.     
  22.     onExit(function(msg)
  23.         print("----- exiting " .. getParent().getCharacterName() .. " interaction -----");
  24.         local partner = retrieveStateObject("partner");
  25.         if (partner) then
  26.             getParent().unlockActionPoints(partner.getParent());
  27.             getParent().stopAllActivities(partner.getParent());
  28.             removeStateObject("partner");
  29.         end;
  30.         removeData("activePart");
  31.         removeData("activityPossible");
  32.         
  33.     end )
  34.     
  35.     
  36.     
  37.     
  38.     -- kissGeneric -----------------------------------------------------------------------------------------------
  39.     state("kiss")
  40.         onEnter(function(msg)
  41.         
  42.             local kissType = retrieveData("kissType", "Friendly");
  43.         
  44.             local activePart = retrieveData("activePart");
  45.             if (activePart == true) then
  46.                 print("----- " .. getParent().getCharacterName() .. " is waiting to kiss -----");
  47.             else
  48.                 print("----- " .. getParent().getCharacterName() .. " is waiting to be kissed -----");
  49.             end
  50.             
  51.             storeActivityPossible("kiss" .. kissType);            
  52.             
  53. --            if (activityPossible(getParent(), getState(), retrieveStateObject("partner").getParent())) then
  54. --                storeData("activityPossible", true)
  55. --            else
  56. --                storeData("activityPossible", false)
  57. --            end
  58.             
  59.             
  60.             -- periodically send a message to the other
  61.             -- character that this character is ready
  62.             sendDelayedMsgThis("ready", 1000);
  63.             -- or, after a longer period of waiting, stop waiting
  64.             sendDelayedMsgThis("stop", getInteractionWaitTime());
  65.             -- listen to queue message
  66. --            actionComplete();
  67.         end )
  68.     
  69. --        onMsg("end", function(msg)
  70. --            actionComplete();
  71. --        end )    
  72.     
  73.         onMsg("queue", function(msg)
  74.             --exitStateMachine();
  75.             sendMsgThis("partnerfailed");
  76.         end )        
  77.     
  78.         onMsg("stop", function(msg)
  79.             print("----- " .. getParent().getCharacterName() .. " has stopped waiting -----");
  80.             --exitStateMachine();
  81.             sendMsgThis("partnerfailed");
  82.         end )    
  83.         
  84.         onMsg("ready", function(msg)
  85.             print("----- " .. getParent().getCharacterName() .. " is ready -----");
  86.             local partner = retrieveStateObject("partner");            
  87.             if (testCancel()) then
  88.                 sendMsgThis("partnerfailed");
  89.             else                        
  90.                 if (retrieveData("activityPossible")) then
  91.                     sendMsg("partnerReady", partner);
  92.                 else
  93.                     sendMsgThis("partnerfailed");
  94.                 end            
  95.                 sendDelayedMsgThis("ready", 1000);
  96.             end
  97.             
  98.             -- send a message to the partner
  99. --            local partner = retrieveStateObject("partner");
  100. --            if (retrieveData("activityPossible") == true) then
  101. --                sendMsg("partnerReady", partner);
  102. --            else
  103. --                sendMsg("partnerfailed", partner);
  104. --            end
  105. --            sendDelayedMsgThis("ready", 1000);
  106.         end )
  107.         
  108.         onMsg("partnerReady", function(msg)
  109.             print("----- partner of " .. getParent().getCharacterName() .. " is ready -----");
  110.             local partner = retrieveStateObject("partner");
  111.             setState("doKiss");
  112.             sendMsg("partnerReady", partner);
  113.         end )
  114.  
  115.         onMsg("partnerfailed", function(msg)
  116.             print("----- partner of " .. getParent().getCharacterName() .. " failed -----");
  117.             local partner = retrieveStateObject("partner");
  118.             setState("failKiss");
  119.             sendMsg("partnerfailed", partner);
  120.         end )
  121.         
  122.     -- doKiss
  123.     state("doKiss")
  124.         onEnter(function(msg)
  125.         
  126.             local kissType = retrieveData("kissType", "Friendly");        
  127.             local partner = retrieveStateObject("partner");
  128.             local activePart = retrieveData("activePart");
  129.             
  130.             if (activePart) then
  131.                 this.getParent().startActivity("kiss" .. kissType, partner.getParent())
  132.                 startAnimation(genderize(getParent(), "kiss" .. kissType));
  133.             else
  134.                 startAnimation(genderize(getParent(), "kissed" .. kissType));
  135.             end    
  136.             sendMsg("stop", getParent().mimicSO);
  137.  
  138.         end )
  139.         
  140.         onMsg("end", function(msg)
  141.             exitStateMachine();
  142.         end )    
  143.             
  144.         onExit(function(msg)
  145.             local partner = retrieveStateObject("partner");
  146.             getParent().stopAllActivities(partner.getParent());
  147.         end )
  148.  
  149.     -- failKiss
  150.     state("failKiss")
  151.         onEnter(function(msg)
  152.             local activePart = retrieveData("activePart");
  153.             if (activePart == true) then
  154.                 sendMsg("sad", getParent().mimicSO);
  155.                 getParent().setEmoticon(EMOTICON_SAD, EMOTICON_DELAY);
  156.             else
  157.                 sendMsg("angry", getParent().mimicSO);
  158.                 getParent().setEmoticon(EMOTICON_ANGRY, EMOTICON_DELAY);
  159.             end
  160.             exitStateMachine();
  161.         end )
  162.     
  163.  
  164.  
  165.     
  166.     
  167.     -- kissSexy -----------------------------------------------------------------------------------------------
  168.     state("kissSexy")
  169.         onEnter(function(msg)
  170.         
  171. --            local kissType = retrieveData("kissType", "Friendly");
  172.         
  173.             local activePart = retrieveData("activePart");
  174.             if (activePart == true) then
  175.                 print("----- " .. getParent().getCharacterName() .. " is waiting to kissSexy -----");
  176.             else
  177.                 print("----- " .. getParent().getCharacterName() .. " is waiting to be kissedSexy -----");
  178.             end
  179.             
  180.             storeActivityPossible("kissSexy");    
  181.                     
  182. --            local active = cond(activePart, getParent(), retrieveStateObject("partner").getParent());
  183. --            local passive = cond(activePart, retrieveStateObject("partner").getParent(), getParent());
  184. ----            if (activityPossible(getParent(), getState(), retrieveStateObject("partner").getParent())) then
  185. --            if activityPossible(active, "kissSexy", passive) then
  186. --                storeData("activityPossible", true)
  187. --            else
  188. --                storeData("activityPossible", false)
  189. --            end
  190.             
  191.             -- periodically send a message to the other
  192.             -- character that this character is ready
  193.             sendDelayedMsgThis("ready", 1000);
  194.             -- or, after a longer period of waiting, stop waiting
  195.             sendDelayedMsgThis("stop", getInteractionWaitTime());
  196.             -- listen to queue message
  197. --            actionComplete();
  198.         end )
  199.         
  200.         onMsg("stop", function(msg)
  201.             print("----- " .. getParent().getCharacterName() .. " has stopped waiting -----");
  202.             exitStateMachine();
  203.         end )    
  204.         
  205.         onMsg("ready", function(msg)
  206.             print("----- " .. getParent().getCharacterName() .. " is ready -----");
  207.             local partner = retrieveStateObject("partner");            
  208.             if (testCancel()) then
  209.                 --sendMsgThis("partnerfailed");
  210.                 sendMsgThis("cancel");
  211.  
  212.             else                        
  213.                 if (retrieveData("activityPossible")) then
  214.                     sendMsg("partnerReady", partner);
  215.                 else
  216.                     sendMsgThis("partnerfailed");
  217.                 end            
  218.                 sendDelayedMsgThis("ready", 1000);
  219.             end
  220.                         
  221.             -- send a message to the partner
  222. --            local partner = retrieveStateObject("partner");
  223. --            if (retrieveData("activityPossible") == true) then
  224. --                sendMsg("partnerReady", partner);
  225. --            else
  226. --                sendMsg("partnerfailed", partner);
  227. --            end
  228. --            sendDelayedMsgThis("ready", 1000);
  229.         end )
  230.         
  231.         onMsg("partnerReady", function(msg)
  232.             print("----- partner of " .. getParent().getCharacterName() .. " is ready -----");
  233.             local partner = retrieveStateObject("partner");
  234.             setState("kissSexyStart");
  235.             sendMsg("partnerReady", partner);
  236.         end )
  237.  
  238.         onMsg("partnerfailed", function(msg)
  239.             print("----- partner of " .. getParent().getCharacterName() .. " failed -----");
  240.             local partner = retrieveStateObject("partner");
  241.             setState("failKissSexy");
  242.             sendMsg("partnerfailed", partner);
  243.         end )
  244.         
  245.         onMsg("cancel", function(msg)
  246.             print("-----kissSexy cancel " .. getParent().getCharacterName() .. " -----");            
  247.             local partner = retrieveStateObject("partner");
  248.             setState("kissSexyStop");
  249.             sendMsg("partnerCancel", partner);
  250.         end )
  251.  
  252.         onMsg("partnerCancel", function(msg)
  253.             print("-----kissSexy partner of " .. getParent().getCharacterName() .. " cancelled -----");            
  254.             setState("kissSexyStop");
  255.         end )
  256.         
  257.         
  258.     -- kissSexyStart
  259.     state("kissSexyStart")
  260.         onEnter(function(msg)
  261.             print("kissSexyStart ".. getParent().getCharacterName());
  262.         
  263.             startAnimation(genderize(getParent(), "kissSexyStart"));
  264.             sendMsg("stop", getParent().mimicSO);
  265.  
  266.         end )
  267.                 
  268.         onMsg("end", function(msg)
  269.             if (testCancel()) then
  270.                 --setState("kissSexyStop");
  271.                 sendMsgThis("cancel");    
  272.             else
  273.                 setState("kissSexyLoop");    
  274.             end
  275.         end )
  276.         
  277.         onMsg("partnerfailed", function(msg)
  278.             print("-----kissSexyStart partner of " .. getParent().getCharacterName() .. " failed -----");            
  279.             local partner = retrieveStateObject("partner");
  280.             setState("failTalk");
  281.             sendMsg("partnerfailed", partner);
  282.         end )
  283.         
  284.         onMsg("cancel", function(msg)
  285.             print("-----kissSexyStart cancel " .. getParent().getCharacterName() .. " -----");            
  286.             local partner = retrieveStateObject("partner");
  287.             setState("kissSexyStop");
  288.             sendMsg("partnerCancel", partner);
  289.         end )
  290.             
  291.         onMsg("partnerCancel", function(msg)
  292.             print("-----kissSexyStart partner of " .. getParent().getCharacterName() .. " cancelled -----");            
  293.             setState("kissSexyStop");
  294.         end )
  295.             
  296.         onExit(function(msg)
  297.             local partner = retrieveStateObject("partner");
  298.             getParent().stopAllActivities(partner.getParent());
  299.         end )        
  300.         
  301.         
  302.     -- kissSexyLoop
  303.     state("kissSexyLoop")
  304.         onEnter(function(msg)
  305.             print("kissSexyLoop " .. getParent().getCharacterName());
  306.         
  307.             startAnimation(genderize(getParent(), "kissSexyLoop"));
  308.  
  309.             local partner = retrieveStateObject("partner");
  310.             sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
  311.             
  312.             if (retrieveData("activePart", true)) then
  313.                 local kissSexy = this.getParent().startActivity("kissSexy", partner.getParent());
  314.                 local length = getActivityLength(kissSexy);
  315.                 sendDelayedMsgThis("kissSexyComplete", length);
  316.             end
  317.             
  318.         end )
  319.         
  320.                 
  321.         onMsg("testCancel", function(msg)
  322.             if testCancel() then
  323.                 --sendMsgThis("kissSexyComplete");
  324.                 sendMsgThis("cancel");
  325.             else
  326.                 sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
  327.             end
  328.         end )
  329.         
  330.         onMsg("kissSexyComplete", function(msg)        
  331.             setState("kissSexyStop")    
  332.             local partner = retrieveStateObject("partner");
  333.             sendMsg("kissSexyComplete", partner);
  334.         end )                        
  335.                         
  336.         
  337.         onMsg("end", function(msg)
  338.             if (testCancel()) then
  339.                 sendMsgThis("kissSexyComplete");
  340.             else
  341.                 startAnimation(genderize(getParent(), "kissSexyLoop"));
  342.             end
  343.         end )    
  344.             
  345.         onExit(function(msg)
  346.             local partner = retrieveStateObject("partner");
  347.             getParent().stopAllActivities(partner.getParent());
  348.             sendMsg("neutral", getParent().mimicSO);
  349.         end )
  350.         
  351.         onMsg("cancel", function(msg)
  352.             print("-----kissSexyLoop cancel " .. getParent().getCharacterName() .. " -----");            
  353.             local partner = retrieveStateObject("partner");
  354.             setState("kissSexyStop");
  355.             sendMsg("partnerCancel", partner);
  356.         end )
  357.  
  358.         onMsg("partnerCancel", function(msg)
  359.             print("-----kissSexyLoop partner of " .. getParent().getCharacterName() .. " cancelled -----");            
  360.             setState("kissSexyStop");
  361.         end )
  362.         
  363.         
  364.         
  365.     -- kissSexyStop
  366.     state("kissSexyStop")
  367.         onEnter(function(msg)
  368.             print("print kissSexyStop" .. getParent().getCharacterName());
  369.             startAnimation(genderize(getParent(), "kissSexyStart"), false, -1.0, 1000);
  370.         end )
  371.                 
  372.         onMsg("end", function(msg)
  373.             exitStateMachine();
  374.         end )    
  375.  
  376.         
  377.  
  378.     -- failKissSexy
  379.     state("failKissSexy")
  380.         onEnter(function(msg)
  381.             local activePart = retrieveData("activePart");
  382.             if (activePart == true) then
  383.                 sendMsg("sad", getParent().mimicSO);
  384.                 getParent().setEmoticon(EMOTICON_SAD, EMOTICON_DELAY);
  385.             else
  386.                 sendMsg("angry", getParent().mimicSO);
  387.                 getParent().setEmoticon(EMOTICON_ANGRY, EMOTICON_DELAY);
  388.             end
  389.             exitStateMachine();
  390.         end )
  391.     
  392.  
  393.  
  394.  
  395.     -- holdNice -----------------------------------------------------------------------------------------------
  396.     state("holdNice")
  397.         onEnter(function(msg)
  398.  
  399.             storeActivityPossible("holdNice");    
  400.  
  401.             
  402. --            if (activityPossible(getParent(), getState(), retrieveStateObject("partner").getParent())) then
  403. --                storeData("activityPossible", true)
  404. --            else
  405. --                storeData("activityPossible", false)
  406. --            end
  407.             
  408.             
  409.             -- periodically send a message to the other
  410.             -- character that this character is ready
  411.             sendDelayedMsgThis("ready", 1000);
  412.             -- or, after a longer period of waiting, stop waiting
  413.             sendDelayedMsgThis("stop", getInteractionWaitTime());
  414.             -- listen to queue message
  415. --            actionComplete();
  416.         end )
  417.     
  418. --        onMsg("end", function(msg)
  419. --            actionComplete();
  420. --        end )    
  421.     
  422.         onMsg("queue", function(msg)
  423.             exitStateMachine();
  424.         end )        
  425.     
  426.         onMsg("stop", function(msg)
  427.             print("----- " .. getParent().getCharacterName() .. " has stopped waiting -----");
  428.             exitStateMachine();
  429.         end )    
  430.         
  431.         onMsg("ready", function(msg)
  432.             print("----- " .. getParent().getCharacterName() .. " is ready -----");
  433.             local partner = retrieveStateObject("partner");            
  434.             if (testCancel()) then
  435.                 sendMsgThis("partnerfailed");
  436.             else                        
  437.                 if (retrieveData("activityPossible")) then
  438.                     sendMsg("partnerReady", partner);
  439.                 else
  440.                     sendMsgThis("partnerfailed");
  441.                 end            
  442.                 sendDelayedMsgThis("ready", 1000);
  443.             end
  444.             
  445. --            -- send a message to the partner
  446. --            local partner = retrieveStateObject("partner");
  447. --            if (retrieveData("activityPossible") == true) then
  448. --                sendMsg("partnerReady", partner);
  449. --            else
  450. --                sendMsg("partnerfailed", partner);
  451. --            end
  452. --            sendDelayedMsgThis("ready", 1000);
  453.         end )
  454.         
  455.         onMsg("partnerReady", function(msg)
  456.             print("----- partner of " .. getParent().getCharacterName() .. " is ready -----");
  457.             local partner = retrieveStateObject("partner");
  458.             setState("doHoldNice");
  459.             sendMsg("partnerReady", partner);
  460.         end )
  461.         
  462.         onMsg("partnerfailed", function(msg)
  463.             print("----- partner of " .. getParent().getCharacterName() .. " failed -----");
  464.             local partner = retrieveStateObject("partner");
  465.             setState("failHoldNice");
  466.             sendMsg("partnerfailed", partner);
  467.         end )
  468.         
  469.     -- doHoldNice
  470.     state("doHoldNice")
  471.         onEnter(function(msg)
  472.             startAnimation(genderize(getParent(), "holdNice"));
  473.             sendMsg("stop", getParent().mimicSO);
  474.  
  475.             if (retrieveData("activePart", true)) then
  476.                 local partner = retrieveStateObject("partner");
  477.                 this.getParent().startActivity("holdNice", partner.getParent())
  478.             end
  479.         end )
  480.         
  481.         onMsg("end", function(msg)
  482.             exitStateMachine();
  483.         end )    
  484.         
  485.         onExit(function(msg)
  486.             local partner = retrieveStateObject("partner");
  487.             this.getParent().stopAllActivities(partner.getParent());
  488.         end )
  489.         
  490.     -- failHoldNice
  491.     state("failHoldNice")
  492.         onEnter(function(msg)
  493.             local activePart = retrieveData("activePart");
  494.             if (activePart == true) then
  495.                 sendMsg("sad", getParent().mimicSO);
  496.                 getParent().setEmoticon(EMOTICON_SAD, EMOTICON_DELAY);
  497.             else
  498.                 sendMsg("angry", getParent().mimicSO);
  499.                 getParent().setEmoticon(EMOTICON_ANGRY, EMOTICON_DELAY);
  500.             end
  501.             exitStateMachine();
  502.         end )
  503.         
  504.         
  505.         
  506.         
  507.  
  508.     -- holdBehind -----------------------------------------------------------------------------------------------
  509.     state("holdBehind")
  510.         onEnter(function(msg)
  511.         
  512.         
  513.             storeActivityPossible("holdBehind");    
  514.         
  515.             
  516. --            if (activityPossible(getParent(), getState(), retrieveStateObject("partner").getParent())) then
  517. --                storeData("activityPossible", true)
  518. --            else
  519. --                storeData("activityPossible", false)
  520. --            end
  521.             
  522.             
  523.             -- periodically send a message to the other
  524.             -- character that this character is ready
  525.             sendDelayedMsgThis("ready", 1000);
  526.             -- or, after a longer period of waiting, stop waiting
  527.             sendDelayedMsgThis("stop", getInteractionWaitTime());
  528.         end )
  529.     
  530.     
  531.         onMsg("queue", function(msg)
  532.             exitStateMachine();
  533.         end )        
  534.     
  535.         onMsg("stop", function(msg)
  536.             print("----- " .. getParent().getCharacterName() .. " has stopped waiting -----");
  537.             exitStateMachine();
  538.         end )    
  539.         
  540.         onMsg("ready", function(msg)
  541.             print("----- " .. getParent().getCharacterName() .. " is ready -----");
  542.             local partner = retrieveStateObject("partner");            
  543.             if (testCancel()) then
  544.                 sendMsgThis("partnerfailed");
  545.             else                        
  546.                 if (retrieveData("activityPossible")) then
  547.                     sendMsg("partnerReady", partner);
  548.                 else
  549.                     sendMsgThis("partnerfailed");
  550.                 end            
  551.                 sendDelayedMsgThis("ready", 1000);
  552.             end
  553.                         
  554. --            -- send a message to the partner
  555. --            local partner = retrieveStateObject("partner");
  556. --            if (retrieveData("activityPossible") == true) then
  557. --                sendMsg("partnerReady", partner);
  558. --            else
  559. --                sendMsg("partnerfailed", partner);
  560. --            end
  561. --            sendDelayedMsgThis("ready", 1000);
  562.         end )
  563.         
  564.         onMsg("partnerReady", function(msg)
  565.             print("----- partner of " .. getParent().getCharacterName() .. " is ready -----");
  566.             local partner = retrieveStateObject("partner");
  567.             setState("doHoldBehind");
  568.             sendMsg("partnerReady", partner);
  569.         end )
  570.         
  571.         onMsg("partnerfailed", function(msg)
  572.             print("----- partner of " .. getParent().getCharacterName() .. " failed -----");
  573.             local partner = retrieveStateObject("partner");
  574.             setState("failHoldBehind");
  575.             sendMsg("partnerfailed", partner);
  576.         end )
  577.         
  578.     -- doHoldBehind
  579.     state("doHoldBehind")
  580.         onEnter(function(msg)
  581.         
  582.             local activePart = retrieveData("activePart");
  583.             startAnimation(genderize(getParent(), "holdBehind"));
  584.         
  585.             sendMsg("stop", getParent().mimicSO);
  586.  
  587.             if (retrieveData("activePart", true)) then
  588.                 local partner = retrieveStateObject("partner");
  589.                 this.getParent().startActivity("holdBehind", partner.getParent())
  590.             end
  591.         end )
  592.         
  593.         onMsg("end", function(msg)
  594.             exitStateMachine();
  595.         end )    
  596.         
  597.         onExit(function(msg)
  598.             local partner = retrieveStateObject("partner");
  599.             this.getParent().stopAllActivities(partner.getParent());
  600.         end )
  601.         
  602.     -- failHoldBehind
  603.     state("failHoldBehind")
  604.         onEnter(function(msg)
  605.             local activePart = retrieveData("activePart");
  606.             if (activePart == true) then
  607.                 sendMsg("sad", getParent().mimicSO);
  608.                 getParent().setEmoticon(EMOTICON_SAD, EMOTICON_DELAY);
  609.             else
  610.                 sendMsg("angry", getParent().mimicSO);
  611.                 getParent().setEmoticon(EMOTICON_ANGRY, EMOTICON_DELAY);
  612.             end
  613.             exitStateMachine();
  614.         end )
  615.         
  616.         
  617.     
  618.     
  619.     
  620.     -- talkGeneric-----------------------------------------------------------------------------------------------
  621.     state("talk")
  622.         onEnter(function(msg)
  623.         
  624.             local talkType = retrieveData("talkType", "Casual");
  625.             
  626.             print("--talk" .. talkType .." onEnter--- " .. getParent().getCharacterName());
  627.             
  628.             storeActivityPossible("talk" .. talkType);    
  629.  
  630. --            if (activityPossible(getParent(), getState() .. talkType, retrieveStateObject("partner").getParent())) then
  631. --                storeData("activityPossible", true)
  632. --            else
  633. --                storeData("activityPossible", false)
  634. --            end
  635. --            
  636.             
  637.             -- periodically send a message to the other
  638.             -- character that this character is ready
  639.             sendDelayedMsgThis("ready", 1000);
  640.             -- or, after a longer period of waiting, stop waiting
  641.             sendDelayedMsgThis("stop", getInteractionWaitTime());
  642.             
  643.             if (retrieveData("activePart")) then 
  644.                 startAnimation("emoSwingArms");
  645.                 sendDelayedMsgThis("emoticon", EMOTICON_DELAY);
  646.             end;
  647.                         
  648.             -- listen to queue message
  649. --            actionComplete();
  650.         end )
  651.         
  652.         onMsg("emoticon", function(msg)
  653.             getParent().setEmoticon(EMOTICON_WAIT, EMOTICON_DELAY);
  654.             sendDelayedMsgThis("emoticon", EMOTICON_DELAY * 2);    
  655.         end )    
  656.     
  657.         onMsg("end", function(msg)
  658.             startAnimation("emoSwingArms");
  659.         end )    
  660.     
  661. --        onMsg("queue", function(msg)
  662. --            exitStateMachine();
  663. --        end )        
  664.     
  665.         onMsg("stop", function(msg)
  666.             print("----- " .. getParent().getCharacterName() .. " has stopped waiting ----- " .. retrieveData("talkType", "?"));
  667. --            exitStateMachine();
  668.             sendMsgThis("partnerfailed");
  669.  
  670.         end )    
  671.         
  672.         onMsg("ready", function(msg)
  673.             print("----- " .. getParent().getCharacterName() .. " is ready ----- cancel: " .. tostring(testCancel()));
  674.             -- send a message to the partner
  675.             
  676.             local partner = retrieveStateObject("partner");            
  677.             if (testCancel()) then
  678.                 sendMsgThis("partnerfailed");
  679.             else                        
  680.                 if (retrieveData("activityPossible")) then
  681.                     sendMsg("partnerReady", partner);
  682.                     sendDelayedMsgThis("ready", 1000);
  683.                 else
  684.                     sendMsgThis("partnerfailed");
  685.                 end            
  686.             end
  687.         end )
  688.         
  689.         onMsg("partnerReady", function(msg)
  690.             print("----- partner of " .. getParent().getCharacterName() .. " is ready -----" .. retrieveData("talkType", "?"));
  691.             
  692.             local partner = retrieveStateObject("partner");
  693.             setState("doTalk");
  694.             sendMsg("partnerReady", partner);
  695.         end )
  696.         
  697.         onMsg("partnerfailed", function(msg)
  698.             print("----- partner of " .. getParent().getCharacterName() .. " failed -----" .. retrieveData("talkType", "?"));
  699.             
  700.             local partner = retrieveStateObject("partner");
  701.             setState("failTalk");
  702.             sendMsg("partnerfailed", partner);
  703.         end )
  704.  
  705.         
  706.     -- doTalk
  707.     state("doTalk")
  708.         onEnter(function(msg)
  709.         
  710.             local talkType = retrieveData("talkType", "Casual");
  711.             local activePart = retrieveData("activePart");
  712.             local diff = activeDiff("talk" .. talkType);
  713.             
  714.             local text = ""; if (activePart) then text = "is active"; end;
  715.             print("--doTalk" .. talkType .." onEnter--- " .. getParent().getCharacterName() .. " " .. text);
  716.             
  717.             sendMsg("stop", getParent().mimicSO);
  718.             
  719.             if (diff) then
  720.                 -- talk has passive version
  721.                 if (activePart == true) then
  722.                     startAnimation(genderize(getParent(), "talk" .. talkType));
  723.                 else
  724.                     startAnimation(genderize(getParent(), "talked" .. talkType));
  725.                 end
  726.             else
  727.                 -- talk has only active version 
  728. --                if (activePart == true) then
  729. --                    getParent().playSound("talk" .. talkType, SPEECH);
  730. --                end
  731.                 startAnimation(genderize(getParent(), "talk" .. talkType));
  732.             end
  733.  
  734.             if (activePart or (not isMonologue("talk" .. talkType))) then
  735.                 getParent().playSound(genderizeSpeech(getParent(), "talk" .. talkType, activePart, diff), 1.0, SPEECH, true);
  736.             end
  737.             
  738.  
  739.             local partner = retrieveStateObject("partner");
  740.             
  741.             if (activePart) then
  742.                 this.getParent().startActivity("talk" .. talkType, partner.getParent());
  743.             end
  744.             
  745.             if (talkType == "Argue") then
  746.                 -- give trouble point
  747.                 if (activePart) then
  748.                     this.getParent().incRelationshipCondition(partner.getParent().getCharacterID(), REL_TROUBLE, 1);
  749.                 end
  750.                 -- balance justice
  751.                 this.getParent().setCondition(NEED_JUSTICE, 1.0);
  752.             end
  753.             
  754.             sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
  755.             
  756.             if (activePart == true) then 
  757.                 getParent().setEmoticon(getIconForAction("talk" .. talkType));
  758.             else 
  759.                 print("--pushQueueEntry" .. talkType .." into " .. getParent().getCharacterName());
  760.                 setTopQueueEntry(getParent(), "pm_talk" .. talkType);
  761.             end;
  762.  
  763.         end )
  764.         
  765.         onMsg("testCancel", function(msg)
  766.             if testCancel() then
  767.                 local partner = retrieveStateObject("partner");
  768.                 sendMsgThis("talkCanceled");
  769.                 sendMsg("talkCanceled", partner);
  770.             else
  771.                 sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
  772.             end
  773.         end )
  774.         
  775.         
  776.         onMsg("talkCanceled", function(msg)
  777.         
  778.             local talkType = retrieveData("talkType", "Casual");
  779.         
  780.             print("--talk" .. talkType .." Canceled--- " .. getParent().getCharacterName());
  781.  
  782. --            local activePart = retrieveData("activePart");
  783. --            if (activePart == true) then
  784. --                if (activeDiff("talk" .. talkType)) then
  785. --                    getParent().stopSound(genderize(getParent(), "talk".. talkType));
  786. --                else
  787. --                    getParent().stopSound("talk".. talkType);
  788. --                end
  789. --            end
  790.             
  791.             exitStateMachine();
  792.         end )
  793.  
  794.         
  795.         onMsg("end", function(msg)
  796.             print("---------------------------------------------talk" .. retrieveData("talkType", "?") .." end --- " .. getParent().getCharacterName());
  797.  
  798.             exitStateMachine();
  799.         end )
  800.         
  801.         onMsg("exit", function(msg)
  802.             print("--talk" .. retrieveData("talkType", "?") .." exit --- " .. getParent().getCharacterName());
  803.  
  804.             exitStateMachine();
  805.         end )
  806.  
  807.         onExit(function(msg)
  808.         
  809.             print("--talk" .. retrieveData("talkType", "?") .." onExit --- " .. getParent().getCharacterName());
  810.             local partner = retrieveStateObject("partner");
  811.             
  812.             
  813. --            local activePart = retrieveData("activePart");
  814. --            if (activePart == false) then 
  815. --                getParent().popDummyQueueEntry();
  816. --            end
  817.  
  818.             getParent().stopAllSounds();
  819.             this.getParent().stopAllActivities(partner.getParent());
  820.             getParent().setEmoticon("");
  821.  
  822.         end )
  823.         
  824.     -- failTalk
  825.     state("failTalk")
  826.         onEnter(function(msg)
  827.         
  828.             print("--talk" .. retrieveData("talkType", "?") .." onEnter--- " .. getParent().getCharacterName());
  829.             
  830.             local activePart = retrieveData("activePart");
  831.             if (activePart == true) then
  832.                 sendMsg("sad", getParent().mimicSO);
  833.                 getParent().setEmoticon(EMOTICON_SAD, EMOTICON_DELAY);
  834.             else
  835.                 sendMsg("angry", getParent().mimicSO);
  836.                 getParent().setEmoticon(EMOTICON_ANGRY, EMOTICON_DELAY);
  837.             end
  838.             exitStateMachine();
  839.         end )
  840.     
  841.     
  842.     
  843.     
  844.     
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.     -- talkCutscene-----------------------------------------------------------------------------------------------
  855.     state("talkCutscene")
  856.         onEnter(function(msg)
  857.             print("--talkCutscene onEnter--- " .. getParent().getCharacterName());
  858.             setTopQueueEntry(getParent(), "pm_talkCutscene");
  859.             
  860.             -- periodically send a message to the other
  861.             -- character that this character is ready
  862.             sendDelayedMsgThis("ready", 1000);
  863.             -- or, after a longer period of waiting, stop waiting
  864.             --sendDelayedMsgThis("stop", getInteractionWaitTime());
  865.         end )
  866.     
  867.     
  868.         onMsg("stop", function(msg)
  869.             print("----- " .. getParent().getCharacterName() .. " has stopped waiting -----");
  870.             --exitStateMachine();
  871.             sendMsgThis("partnerfailed");
  872.         end )    
  873.         
  874.         onMsg("ready", function(msg)
  875.             print("----- " .. getParent().getCharacterName() .. " is ready -----");
  876.             local partner = retrieveStateObject("partner");            
  877.             if (testCancel()) then
  878.                 print("----- " .. getParent().getCharacterName() .. " ready testCancel == true  -----");
  879.                 sendMsgThis("partnerfailed");
  880.             else                        
  881.                 sendMsg("partnerReady", partner);
  882.                 sendDelayedMsgThis("ready", 1000);
  883.             end            
  884.             
  885.             
  886. --            -- send a message to the partner
  887. --            local partner = retrieveStateObject("partner");
  888. --            sendMsg("partnerReady", partner);
  889. --            sendDelayedMsgThis("ready", 1000);
  890.         end )
  891.         
  892.         onMsg("partnerReady", function(msg)
  893.             print("----- partner of " .. getParent().getCharacterName() .. " is ready -----");
  894.             
  895.             local partner = retrieveStateObject("partner");
  896.             setState("doTalkCutscene");
  897.             sendMsg("partnerReady", partner);
  898.         end )
  899.         
  900.         onMsg("partnerfailed", function(msg)
  901.             print("----- partner of " .. getParent().getCharacterName() .. " failed -----");
  902.             
  903.             local partner = retrieveStateObject("partner");
  904.             setState("failTalkCutscene");
  905.             sendMsg("partnerfailed", partner);
  906.         end )
  907.  
  908.         onMsg("talkingCancelled", function(msg)
  909.             print("----- partner of " .. getParent().getCharacterName() .. " talkingCancelled -----");
  910.             if retrieveData("topic") == msg.data then
  911.                 print("   ------ cancelling:" .. msg.data);
  912.                 sendMsgThis("partnerfailed");
  913.             end
  914.         end )
  915.         
  916.     -- doTalk
  917.     state("doTalkCutscene")
  918.         onEnter(function(msg)
  919.         
  920. --            local talkType = retrieveData("talkType", "Cutscene");
  921.             local activePart = retrieveData("activePart");
  922.             
  923.             print("--doTalkCutscene onEnter--- " .. getParent().getCharacterName() .. " active " .. tostring(activePart) .. " " .. tostring(retrieveData("topic")));
  924.             
  925.             
  926.             sendMsg("stop", getParent().mimicSO);
  927.             
  928.             -- send amessage to the mission that the quests can do something (e.g. start conversation)
  929.             if activePart then
  930.                 local topic = retrieveData("topic"); if not topic then topic = ""; end;
  931.                 getParent().sendMsg("talking", getParent().getGameObjectServer().mission, topic);
  932.             end
  933.  
  934.             sendMsgThis("startLoop");
  935.             sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
  936.         end )
  937.         
  938.         
  939.         onMsg("startLoop", function(msg)
  940.             local activePart = retrieveData("activePart");
  941.             if (activePart) then
  942.                 startAnimation(genderize(getParent(), "talkCasual"));
  943.             else
  944.                 startAnimation(genderize(getParent(), "talkedCasual"));
  945.             end
  946.             
  947.             getParent().playSound(genderizeSpeech(getParent(), "talkCasual", activePart, true), 1.0, SPEECH, true);
  948.             
  949.         end )
  950.         
  951.         
  952.         onMsg("testCancel", function(msg)
  953.             if testCancel() then -- or (this.getParent().getActivityQueueCount() > 1)
  954.                 local partner = retrieveStateObject("partner");
  955.                 sendMsgThis("talkCanceled");
  956.                 sendMsg("talkCanceled", partner);
  957.             else
  958.                 sendDelayedMsgThis("testCancel", CANCEL_POLLING_INTERVAL);
  959.             end
  960.         end )
  961.         
  962.         
  963.         onMsg("talkCanceled", function(msg)
  964.         
  965.             --local talkType = retrieveData("talkType", "Casual");
  966.         
  967.             print("--talkCutscene Canceled--- " .. getParent().getCharacterName());
  968.  
  969. --            local activePart = retrieveData("activePart");
  970. --            if (activePart == true) then
  971. --                if (activeDiff("talk" .. talkType)) then
  972. --                    getParent().stopSound(genderize(getParent(), "talk".. talkType));
  973. --                else
  974. --                    getParent().stopSound("talk".. talkType);
  975. --                end
  976. --            end
  977.             
  978.             exitStateMachine();
  979.         end )
  980.  
  981.         
  982.         onMsg("end", function(msg)
  983.             print("--talkCutscene end --- " .. getParent().getCharacterName());
  984.             if testCancel() then
  985.                 local partner = retrieveStateObject("partner");
  986.                 sendMsgThis("talkCanceled");
  987.                 sendMsg("talkCanceled", partner);
  988.             else
  989.                 sendMsgThis("startLoop");
  990.             end
  991.         end )
  992.         
  993.         onExit(function(msg)
  994.         
  995.             print("--talkCutscene onExit --- " .. getParent().getCharacterName());
  996.             getParent().stopAllSounds();
  997. --            local partner = retrieveStateObject("partner");
  998.             
  999.             
  1000. --            local activePart = retrieveData("activePart");
  1001. --            if (not activePart == false) then 
  1002. --                getParent().popDummyQueueEntry();
  1003. --            end
  1004.  
  1005. --            this.getParent().stopAllActivities(partner.getParent());
  1006. --            getParent().setEmoticon("");
  1007.  
  1008.         end )
  1009.         
  1010.     -- failTalk
  1011.     state("failTalkCutscene")
  1012.         onEnter(function(msg)
  1013.         
  1014.             print("--failTalkCutscene onEnter--- " .. getParent().getCharacterName());
  1015.             
  1016.             local activePart = retrieveData("activePart");
  1017.             if (activePart) then
  1018.                 local topic = retrieveData("topic"); if not topic then topic = ""; end;
  1019.                 getParent().sendMsg("talking", getParent().getGameObjectServer().mission, topic);
  1020.             end
  1021.             
  1022.             exitStateMachine();
  1023.         end )
  1024.     
  1025.  
  1026.  
  1027.  
  1028.  
  1029.  
  1030.  
  1031.  
  1032.  
  1033.  
  1034.  
  1035.  
  1036.     
  1037.  
  1038.  
  1039.         
  1040.         
  1041.     -- giveGift -----------------------------------------------------------------------------------------------
  1042.     state("giveGift")
  1043.         onEnter(function(msg)
  1044.             print("----- " .. getParent().getCharacterName() .. " onEnter  giveGift " .. tostring(testCancel()));
  1045.             
  1046.             storeActivityPossible("giveGift");    
  1047.  
  1048.  
  1049. --            if (activityPossible(getParent(), getState(), retrieveStateObject("partner").getParent())) then
  1050. --                storeData("activityPossible", true)
  1051. --            else
  1052. --                storeData("activityPossible", false)
  1053. --            end
  1054.  
  1055.             -- periodically send a message to the other
  1056.             -- character that this character is ready
  1057.             sendDelayedMsgThis("ready", 1000);
  1058.             -- or, after a longer period of waiting, stop waiting
  1059.             sendDelayedMsgThis("stop", getInteractionWaitTime());
  1060.             -- listen to queue message
  1061. --            actionComplete();
  1062.         end )
  1063.     
  1064. --        onMsg("end", function(msg)
  1065. --            actionComplete();
  1066. --        end )    
  1067.     
  1068.         onMsg("queue", function(msg)
  1069.             exitStateMachine();
  1070.         end )        
  1071.     
  1072.         onMsg("stop", function(msg)
  1073.             print("----- " .. getParent().getCharacterName() .. " has stopped waiting -----");
  1074.             --exitStateMachine();
  1075.             sendMsgThis("partnerfailed");
  1076.         end )    
  1077.         
  1078.         onMsg("ready", function(msg)
  1079.             print("----- " .. getParent().getCharacterName() .. " is ready -----");
  1080.             local partner = retrieveStateObject("partner");            
  1081.             if (testCancel()) then
  1082.                 sendMsgThis("partnerfailed");
  1083.             else                        
  1084.                 sendMsg("partnerReady", partner);
  1085.                 sendDelayedMsgThis("ready", 1000);
  1086.             end            
  1087.  
  1088.             -- send a message to the partner
  1089. --            local partner = retrieveStateObject("partner");
  1090. --            if (retrieveData("activityPossible") == true) then
  1091. --                sendMsg("partnerReady", partner);
  1092. --            else
  1093. --                sendMsg("partnerfailed", partner);
  1094. --            end
  1095. --            sendDelayedMsgThis("ready", 1000);
  1096.         end )
  1097.         
  1098.         onMsg("partnerReady", function(msg)
  1099.             print("----- partner of " .. getParent().getCharacterName() .. " is ready -----");
  1100.             local partner = retrieveStateObject("partner");
  1101.             setState("doGiveGift");
  1102.             sendMsg("partnerReady", partner);
  1103.         end )
  1104.         
  1105.         onMsg("partnerfailed", function(msg)
  1106.             print("----- partner of " .. getParent().getCharacterName() .. " failed -----");
  1107.             local partner = retrieveStateObject("partner");
  1108.             setState("failGiveGift");
  1109.             sendMsg("partnerfailed", partner);
  1110.         end )
  1111.         
  1112.     -- doGiveGift
  1113.     state("doGiveGift")
  1114.     
  1115.         onEnter(function(msg)
  1116.         
  1117.             local activePart = retrieveData("activePart");
  1118.             if (activePart == true) then
  1119.                 print("mike giving gift:" .. activePart);
  1120.                 getParent().handSO.stopAnimation(0.0);
  1121.                 startAnimation("giveGift", false, 1.0, 0.0);
  1122.                 
  1123.                 local partner = retrieveStateObject("partner");
  1124.                 getParent().startActivity("giveGift", partner.getParent())
  1125.             else
  1126.                 --print("" .. getParent().getCharacterName() .. " gets talked:" .. activePart);
  1127.                 freeHands(getParent());
  1128.                 startAnimation("takeGift");
  1129.                 sendDelayedMsgThis("transferGift", 4480);
  1130.             end
  1131.         end )
  1132.         
  1133.         onMsg("transferGift", function(msg)
  1134.             local partner = retrieveStateObject("partner");
  1135.             local gift = partner.getParent().getRightHeldObject();
  1136.             partner.getParent().detachRightObjectHolder();
  1137.             getParent().attachRightObjectHolder(gift);
  1138.             gift.buy();
  1139.         end )
  1140.  
  1141.         onMsg("end", function(msg)
  1142.             if (activePart == true) then
  1143.                 exitStateMachine();
  1144.             else
  1145.                 setState("checkGift");
  1146.             end
  1147.         end )
  1148.     
  1149.         onExit(function(msg)
  1150.             local partner = retrieveStateObject("partner");
  1151.             this.getParent().stopAllActivities(partner.getParent());
  1152.             print("stop giveGift");
  1153.         end )
  1154.         
  1155.         
  1156.     -- checkGift
  1157.     state("checkGift")
  1158.         onEnter(function(msg)
  1159.             local gift = getParent().getRightHeldObject();
  1160.             if (not gift) then exitStateMachine(); return end;
  1161.             
  1162.             local checkGift = this.getParent().startActivity("checkGift", gift);
  1163.             local length = getActivityLength(checkGift);
  1164.             sendDelayedMsgThis("complete", length);
  1165.             
  1166.             startAnimation("checkGift", false, 0.1, 1000);
  1167.             sendMsg("smile", getParent().mimicSO);
  1168.         end )    
  1169.             
  1170.         onMsg("complete", function(msg)
  1171.             local gift = getParent().getRightHeldObject();
  1172.             if (gift) then  print("stop checkGift"); getParent().stopAllActivities(gift); end;
  1173.             freeHands(getParent());
  1174.             sendMsg("neutral", getParent().mimicSO);
  1175.             exitStateMachine();
  1176.         end )
  1177.         
  1178.         onMsg("startAnim", function(msg)
  1179.             startAnimation("checkGift");
  1180.         end )
  1181.         
  1182.         onMsg("end", function(msg)
  1183.             if (testCancel()) then
  1184.                 sendMsgThis("complete")
  1185.             else
  1186.                 startAnimation("checkGift", false, 0.1, 1000);
  1187.                 --sendDelayedMsgThis("startAnim", random(500,1000));
  1188.             end
  1189.         end )
  1190.  
  1191.         
  1192.         
  1193.     -- failGiveGift
  1194.     state("failGiveGift")
  1195.         onEnter(function(msg)
  1196.             local activePart = retrieveData("activePart");
  1197.             if (activePart == true) then
  1198.                 freeHands(getParent());
  1199.                 sendMsg("sad", getParent().mimicSO);
  1200.                 getParent().setEmoticon(EMOTICON_SAD, EMOTICON_DELAY);
  1201.             else
  1202.                 sendMsg("angry", getParent().mimicSO);
  1203.                 getParent().setEmoticon(EMOTICON_ANGRY, EMOTICON_DELAY);
  1204.             end
  1205.             exitStateMachine();
  1206.         end )        
  1207.         
  1208.         
  1209.     
  1210.     
  1211.         
  1212. endStateMachine()