home *** CD-ROM | disk | FTP | other *** search
/ Classic Fond 52 / ClassicFond52.iso / GAMES / DROIDW.RAR / DWCD.GOB / mission_cog_02_catapult.cog < prev    next >
Encoding:
Text File  |  1998-11-04  |  16.9 KB  |  529 lines

  1. # Droids Cog Script
  2. #
  3. # D0_skyway.cog
  4. #
  5. # Skyways cog
  6. #
  7. #                                                      
  8. #
  9. #
  10. # [MT]
  11. #
  12. #
  13. # (C) 1997 LucasLearningLimited. All Rights Reserved
  14.  
  15.  
  16.  
  17. symbols                     
  18. message             startup     
  19. message             activate
  20. message             arrived
  21. message             pulse
  22. message             entered
  23. message             timer
  24. message             user0                              //Countdown is done
  25. message             user1                              //Create fake crate
  26. message             user3                              //time to create a fake AD
  27. message             user4
  28. message             user5                              //Supervisor sez: bring in a crate!
  29. message             touched
  30.  
  31. surface             adjustswitch        linkid=2       //rotates the catapult                    
  32. surface             destructionfloor0   mask=0x004
  33. surface             destructionfloor1   mask=0x004
  34. surface             destructionfloor2   mask=0x004
  35. surface             fakelever           linkid=1       //launches the crate 
  36. surface             add_sand            linkid=10
  37. surface             rem_sand            linkid=4
  38. surface             led_ones            nolink
  39. surface             led_tens            nolink
  40. surface             led_hund            nolink
  41.  
  42. sector              destructionsector               
  43. sector              curplayersector
  44. sector              ds2
  45.  
  46. thing               catapult
  47. thing               minecart            linkid=3
  48. thing               catapult0
  49. thing               catapult1
  50. thing               catapult2
  51. thing               catapult3
  52. thing               catapult4
  53. thing               catapult5
  54. thing               smallcrate          local
  55. thing               player              local 
  56. thing               createcrateghost 
  57. thing               breakdoor
  58. thing               AD                
  59. thing               ghostcamera
  60.  
  61. template            ADcratetemplate
  62.  
  63. cog                 countdowncog
  64. cog                 callcratecog
  65. cog                 ADAIcog
  66. cog                 finalcog
  67.  
  68. //template              explosion_tpl=+grenade_exp    
  69.  
  70. flex                md_power=10.0       local
  71. flex                c_dest=10.0         local
  72. flex                sand_inc=5.0         local
  73. flex                payloadweight       local
  74. flex                playerweight        local
  75. flex                timecount           local
  76. int                 callcrate=0         local
  77. int                 crateisinworld=0    local
  78. int                 movedyet=0          local
  79. int                 launch=0            local
  80. int                 cratev              local
  81. int                   step=10             local
  82. vector              catvel              local  
  83.  
  84. //sound               t1catadjloop
  85. //sound               t1catadjstop
  86. sound               t1catlaunch
  87. sound               t1caton
  88. sound               t1catreset
  89. sound               t1catwarmup
  90. sound               texplo01          
  91.  
  92. sound               clicksound                  
  93. template              explosion_tpl=+grenade_exp         local   
  94. thing               launchcamera
  95.  
  96. surface             badsurface1         mask=0xffff         linkid=28
  97. surface             badsurface2         mask=0xffff         linkid=28
  98. surface             CRMface             linkid=2
  99. surface             fakeadd_sand1       linkid=10
  100. surface             fakeadd_sand2       linkid=10
  101. surface             fakerem_sand1       linkid=4
  102. surface             fakerem_sand2       linkid=4
  103.  
  104. cog                 sneakycog
  105.  
  106. sound          switchsound=swt00ltswch1.wav   
  107.  
  108. sound               dave=mcht1ctrsetstp.wav 
  109. template            ADtemplate
  110. thing               telehide
  111. thing               trinityTeleport
  112. cog                 downtothewellcog
  113. int                 ADactive=0          local
  114. int                 ADdead=0            local
  115. end
  116.  
  117. ## Code Section
  118. code    
  119. startup:
  120.      player=getlocalplayerthing();
  121.      attachthingtothing(minecart, catapult);
  122.      callcrate=0;
  123.      crateisinworld=0;
  124.      movedyet=0;
  125.      launch=0;
  126.      donotlaunch=0;
  127.      md_power=10.0; 
  128.      canFTOtalk=0;
  129.      sleep(3);
  130.      call displayweight;     
  131.      setwallcel(CRMface, 1);
  132.      setwallcel(fakelever, 1);
  133. #     AD=creatething(ADtemplate, ADhide);
  134.      setactorflags(AD, 8);
  135.      ADactive=0;
  136.      ADdead=0;
  137.      return;
  138.      
  139. pulse:
  140.      if (ADactive==0) {
  141.           if ((getthingsector(crate))==destructionsector) {
  142.                call destroycrate;
  143.           }
  144.           if (getthingsector(crate)==ds2) {
  145.                print("you did it!");
  146.                call specialdestroycrate;
  147.      //          call destroycrate;
  148.           }     
  149.      }
  150.      else if (ADactive==1) {
  151.           if ( (getthingsector(AD)==ds2)&&(ADdead==0) ) {
  152.                print("true destruction of AD");
  153.                ADdead=1;
  154.                sendmessage(finalcog, user0);   
  155.                sendmessage(downtothewellcog, user0);          
  156.                destroything(AD);
  157.                print("YOU DID IT!!!");
  158.                setpulse(0);
  159.           }
  160.      }
  161.      
  162.      return;
  163.      
  164. touched:
  165.      if (getsourceref()==crate) print("crate touched something");
  166.      if ((getsenderid()==28)&&(getsourceref()==crate)) call destroycrate;     
  167.      return;
  168.      
  169. destroycrate:
  170.      print("boom!!!");
  171.      settimerEX(2, 4, 0, 0);
  172.      setpulse(0);
  173.      exsector=getthingsector(crate);
  174.      expos=getthingpos(crate);
  175.      createthingatpos(explosion_tpl, exsector, expos, '0,0,0');  
  176.      destroything(crate);
  177.      playsoundpos(tExplo01, expos, 1, -1, 80, 0);     
  178.      callcrate=0;
  179.      crateisinworld=0;
  180.      movedyet=0;
  181. //     sleep(2);
  182.      if (canFTOtalk==1) {
  183.           print("I think you missed");
  184.           dwplaycharacterspeech("SFC400", "m2bd045.wav"); #that crate nearly made it...
  185.           dwcleardialog();
  186.           canFTOtalk=0;
  187.      }          
  188.      dwunfreezeplayer();
  189.      setcurrentcamera(7);
  190.      call callcrates;
  191.      return;
  192.      
  193. specialdestroycrate:
  194.      dwdisableescape();
  195.      settimerEX(2, 4, 0, 0);
  196.      setpulse(0);
  197. //     destroything(crate);
  198.      callcrate=0;
  199.      crateisinworld=0;
  200.      movedyet=0;
  201.  //    setwallcel(adjustswitch, 1);
  202.      teleportthing(AD, trinityteleport); 
  203.      setwallcel(fakelever, 1);
  204.      setwallcel(add_sand, 1);
  205.      setwallcel(rem_sand, 1);     
  206.      setwallcel(CRMface, 0);
  207.      if (canFTOtalk==1) {
  208.           print("You did it.");
  209.           dwplaycharacterspeech("SFC410", "m2bd046.wav");
  210.           dwcleardialog();
  211.           canFTOtalk=0;
  212.      }     
  213.      setcamerafocii(2, breakdoor, ghostcamera);
  214.      setcurrentcamera(2);
  215.      settimerEX(3, 5, 0, 0);     
  216.      movetoframe(breakdoor, 1, 1);
  217.      sendmessage(sneakycog, user2);
  218.      dwplaycharacterspeech("ADX700", "M2ad007.wav");
  219.      dwcleardialog();
  220.      dwenableescape();
  221.      print("time to wake up");
  222.      sendmessage(callcratecog, user6);
  223. //     AIclearmode(AD, 0x2000);
  224. //     AIsetmode(AD, 563);
  225.      return;
  226.  
  227. getpayloadweight:
  228.      if (crateisinworld==1) payloadweight=730;
  229.      else if (getthingsector(AD)==curplayersector) payloadweight=330;
  230.      else payloadweight=getthingmass(player)/2.2;
  231. //     else payloadweight=1000;   //playerweight
  232.      print("payloadweight is ");
  233.      printflex(payloadweight);
  234.      return;               
  235.  
  236. arrived:
  237. //if the mine cart has arrived at the end of the catapult, launch the crate
  238.      if (getsenderid()==3) {   
  239.           if (donotlaunch==1) {               
  240.                playsoundthing(dave, minecar, 1, -1, -1, 0);
  241.                return;
  242.           }                
  243.           playsoundthing(t1catreset, minecar, 1, 7, 14, 0);          
  244.           if ((launch==1)&&(crateisinworld==0)&&(getsectorplayercount(curplayersector)!=1)&&(getthingsector(AD)!=curplayersector) ) {
  245.                call launchnothing;
  246.                return;
  247.           }
  248.           launch=1;
  249.           call getpayloadweight;                         
  250.           if ((getcurframe(catapult))==0) {
  251.                catvel=computecatapultvelocity(payloadweight, catapult0, catapult1, catpower);           
  252.                skiptoframe(minecart, 0, 3);
  253.                if (crateisinworld==1) call launchcrate;
  254.                else if ((crateisinworld==0)&&((getsectorplayercount(curplayersector))==1)) call launchplayer;
  255.                else if ( (crateisinworld==0)&&(getthingsector(AD)==curplayersector) ) call launchAD;            
  256.             }
  257.           else if ((getcurframe(catapult))==1) {
  258.                skiptoframe(minecart, 2, 3);
  259.                catvel=computecatapultvelocity(payloadweight, catapult2, catapult3, catpower);                  
  260.                if (crateisinworld==1) call launchcrate;
  261.                else if ((crateisinworld==0)&&((getsectorplayercount(curplayersector))==1)) call launchplayer;
  262.                else if ( (crateisinworld==0)&&(getthingsector(AD)==curplayersector) ) call launchAD;                  
  263.           }
  264.           else if ((getcurframe(catapult))==2) { 
  265.                skiptoframe(minecart, 4, 3);           
  266.                catvel=computecatapultvelocity(payloadweight, catapult4, catapult5, catpower);                  
  267.                if (crateisinworld==1) call launchcrate;
  268.                else if ((crateisinworld==0)&&((getsectorplayercount(curplayersector))==1)) call launchplayer;
  269.                else if ( (crateisinworld==0)&&(getthingsector(AD)==curplayersector) ) call launchAD;                 
  270. //               playsoundthing(t1catadjstop, catapult, 1, -1, -1, 0);
  271. //               stopsound(channel22, 0.5);                       
  272.           }        
  273.      }            
  274.      else if (getsenderref()==catapult) {     
  275.           setwallcel(CRMface, 1);
  276.           if (getcurframe(catapult)==0) setwallcel(adjustswitch, 0);
  277.           else if (getcurframe(catapult)==1) setwallcel(adjustswitch, 1);
  278.           else if (getcurframe(catapult)==2) setwallcel(adjustswitch, 2);
  279.       
  280. //          playsoundthing(t1catadjstop, catapult, 1, -1, -1, 0);
  281. //          stopsound(channel22, 0.5);         
  282.      }              
  283.      return;
  284.      
  285. launchnothing:
  286.           print("launchnothing");
  287.           donotlaunch=1;
  288.           if ((getcurframe(catapult))==0) {         
  289.                skiptoframe(minecart, 0, 3);
  290.           }
  291.           else if ((getcurframe(catapult))==1) {
  292.                skiptoframe(minecart, 2, 3);
  293.           }
  294.           else if ((getcurframe(catapult))==2) { 
  295.                skiptoframe(minecart, 4, 3);           
  296.           }        
  297.           return;
  298.      
  299.  
  300. //launches the minecar   
  301. user0:
  302.      launchchannel=playsoundthing(t1catlaunch, minecar, 1, 7, 14, 0);
  303.      if ((getcurframe(catapult))==0) skiptoframe(minecart, 1, 29.17);
  304.      else if ((getcurframe(catapult))==1) skiptoframe(minecart, 3, 29.17);
  305.      else if ((getcurframe(catapult))==2) skiptoframe(minecart, 5, 29.17);            
  306.      stopsound(warmupchannel, 0.5);       
  307.      return;
  308.  
  309. //create the true crate out of thin air     
  310. user1:     
  311.      crateisinworld=1;
  312.      settimerEX(2,1,0,0);
  313.      crate=creatething(ADcratetemplate, createcrateghost);
  314.      return;    
  315.      
  316. #user3:
  317. #     print("creating SABOTAGE AD");
  318. #     AD=creatething(ADtemplate, telehide);
  319. #     setactorflags(AD, 8);
  320. #     return;
  321.      
  322. user4:
  323.      print("coming back into your life");
  324.      settimerEX(1, 1, 0, 0);     
  325. #     teleportthing(AD, createcrateghost);
  326. #     destroything(AD);
  327.      AD=creatething(ADtemplate, createcrateghost);
  328.      Aiclearmode(AD, 0xffff);
  329.      Aisetmode(AD, 0x3000);
  330.      stopthing(AD);
  331.      AIsetmovespeed(AD, 0.0);
  332.      print("FITTOOOO!!!!");
  333.      return; 
  334.      
  335. activate:  
  336.      //start the launch sequence to move the minecar.
  337.      print("activate");
  338.      printint(getsenderid());
  339.      if (getsenderid()==1) {
  340.           if (getwallcel(fakelever)==1) return;
  341.           else {               
  342.                dwfreezeplayer();
  343.                donotlaunch=0;
  344.                setwallcel(fakelever, 1);
  345.                print("Starting launch sequence.");
  346.                warmupchannel=playsoundthing(t1catwarmup, minecar, 1, 7, 14, 0x1);
  347.                playsoundthing(t1caton, minecar, 1, 7, 14, 0);
  348.                call user0;
  349. //               settimerEX(12,1,0,0);
  350.           }
  351.       }
  352.      //move (rotate) the catapult
  353.      else if (getsenderid()==2) {
  354.           if ( (isthingmoving(catapult)!=0)||(getwallcel(CRMface)==0)||(getwallcel(fakelever)==1) ) return;
  355.           else {               
  356.                playsoundpos(switchsound, getsurfacecenter(adjustswitch), 1.0, -1, -1, 0);
  357.                setwallcel(CRMface, 0);
  358.                setwallcel(adjustswitch, 4);               
  359.                if ((getcurframe(catapult))==0) movetoframe(catapult, 1, 0.3);
  360.                else if ((getcurframe(catapult))==1) movetoframe(catapult, 2, 0.3);
  361.                else if ((getcurframe(catapult))==2) movetoframe(catapult, 0, 0.3);
  362.           }
  363.      }
  364.      else if (GetSenderId() == 10)  call sand_add;     
  365.      else if (GetSenderId() == 4)  {
  366.           print("removing sand");
  367.           call sand_rem;     
  368.      }
  369.      return;
  370.      
  371. user5:    
  372. callcrates:
  373.      //bring in a small crate
  374.      sendmessage(callcratecog, user1);
  375.      truecratetype=0;
  376.      call nocrates;
  377.      return;
  378.  
  379. timer:
  380.      if (getsenderid()==2) {
  381.          md_power = md_power + sand_inc;
  382.          if (md_power < step) {
  383.              SetWallCel(add_sand, 0);
  384.              SetWallCel(rem_sand, 0);
  385.              md_power = step;
  386.              
  387.              }
  388.           else if (md_power>100) {
  389.                SetWallCel(add_sand,0);
  390.                SetWallCel(rem_sand,0);
  391.                md_power=100;
  392.           }
  393.          
  394.          else if (md_power == c_dest)        {
  395.              SetWallCel(add_sand, 0);
  396.              SetWallCel(rem_sand, 0);
  397.              }
  398.      
  399.           else {
  400.                SetTimerEX(0.02,2,0,0);
  401.           }
  402.            call displayweight;
  403.      }
  404.      else if (getsenderid()==4) {
  405.           dwenddialog();
  406.           dwclearresponses();
  407.      }
  408.      else if (getsenderid()==1) {
  409.           setthingmass(crate, 0);
  410.           setwallcel(fakelever, 0);
  411.           setthingmass(AD, 0);
  412.      }        
  413.      else if (getsenderid()==5) {
  414.           dwunfreezeplayer();
  415.           setcurrentcamera(7);
  416.      }
  417.      else if (getsenderid()==6) {
  418.           if (ADdead==0) {
  419.                print("timing out the AD");
  420.                ADdead=1;
  421.                sendmessage(finalcog, user0);   
  422.                sendmessage(downtothewellcog, user0);          
  423.                destroything(AD);
  424.                print("YOU DID IT!!!");
  425.                setpulse(0);
  426.           }
  427.      }
  428.      return;
  429.        
  430. nocrates:
  431.      launch=0;
  432.      callcrate=1; 
  433.      crateisinworld=1;
  434.      return;
  435.  
  436. launchcrate:
  437.      setthingmass(crate, 100);
  438.      canFTOtalk=1;    
  439.      setcamerafocii(2, crate, launchcamera);
  440.      setcurrentcamera(2);
  441.      setTimerEX(4, 3, 0, 0);
  442.      donotlaunch=1;
  443.      callcrate=0;
  444.      detachthing(crate);
  445.      setthingvel(crate, catvel);
  446.      call getpulsetime;
  447.      print("pulsetime equals");
  448.      printflex(pulsetime);
  449.      setpulse(pulsetime);
  450.      return;
  451.      
  452. getpulsetime:
  453.      if (getcurframe(catapult)==1) {
  454.           print("curframe1");
  455.           if (md_power>60) pulsetime=2.0;
  456.           else pulsetime=0.025;
  457.      }
  458.      else if (getcurframe(catapult)==2) {
  459.           print("curframe2");
  460.           if ((md_power>30)&&(md_power<80)) pulsetime=2.0;
  461.           else pulsetime=0.025;
  462.      }
  463.      else pulsetime=0.025;
  464.      return;
  465.  
  466.  
  467.      
  468. launchplayer:
  469.      setcamerafocii(2, player, launchcamera);
  470.      setcurrentcamera(2);
  471.      setTimerEX(4, 3, 0, 0);
  472.      donotlaunch=1;
  473.      detachthing(player);
  474.      setthingvel(player, catvel);
  475.      return;  
  476.      
  477. launchAD:
  478.      print("launching AD");     
  479.      ADactive=1;
  480.      setthingmass(AD, 100);
  481.      setcamerafocii(2, AD, launchcamera);
  482.      setcurrentcamera(2);
  483.      setTimerEX(4, 3, 0, 0);     
  484.      print("catvel is");
  485.  //    dwplaycharacterspeech("ADX900", "M2ad009.wav");
  486.      printvector(catvel);
  487.      donotlaunch=1;
  488.      detatchthing(AD);
  489.      setthingvel(AD, catvel);
  490.      ADactive=1;
  491.      setpulse(.5);
  492.      settimerEX(1.9, 6, -1, -1);
  493.      return;  
  494.      
  495. sand_add:
  496.       if (GetWallCel(add_sand) != 1)    //Nothing's already happening
  497.      {
  498.      SetWallCel(add_sand, 1);
  499.      sand_inc = 1;
  500.      c_dest = md_power + step;
  501.      SetTimerEX(0.02,2,0,0);
  502.      }
  503.      return;
  504.      
  505. sand_rem:
  506.      if (GetWallCel(rem_sand) != 1)    //Nothing's already happening
  507.           {
  508.           SetWallCel(rem_sand, 1);
  509.           sand_inc = -1;
  510.           c_dest = md_power - step;
  511.           SetTimerEX(0.02,2,0,0);
  512.           }
  513.      return;
  514.      
  515. displayweight:
  516.      playsoundpos(clicksound, getsurfacecenter(led_tens), 0.3, -1, -1, 0);
  517.      SetWallCel(led_ones, md_power %  10);
  518.      SetWallCel(led_tens, (md_power / 10) % 10);
  519.      SetWallCel(led_hund, (md_power / 100) % 10);
  520.      catpower=(md_power/100)*20000;
  521.      return;
  522.                      
  523. end
  524.  
  525.  
  526.  
  527.  
  528.