home *** CD-ROM | disk | FTP | other *** search
/ Classic Fond 52 / ClassicFond52.iso / GAMES / DROIDW.RAR / DWCD.GOB / mission_cog_sy_crane.cog < prev    next >
Text File  |  1998-11-04  |  41KB  |  1,252 lines

  1. # Droids COG Script
  2. #
  3. # SY_Crane.cog
  4. #
  5. # The pulley/incline puzzle cog
  6. #
  7. #        Written By:    Doug Shannon 
  8. #    While listening to:     All 18 volumes of the Ultra-Lounge
  9. #
  10. # Desc:           
  11. #    This cog controls a crane that can pick up two different sized girders (large and small)
  12. #    and move them between three locations (A, B, and C). In addition, The crane can be docked
  13. #    without payload is a 4th position (frame 0). The crane uses 3 different pulley setups to
  14. #    help get the job done.  
  15. #    
  16. #    This cog makes extensive use of "AttachThingToThing()" to get things done. 
  17. #    All moving parts are attached to the crane for left/right movement, handled in the
  18. #    "move_crane" routine. For up and down movement, the crane's hook and its rope ghosts 
  19. #    are attached to one of six "girder ghosts". Each girder tips differently depending
  20. #    on what position it's at. Becuase of this, there are six ghosts: one ghost for each girder 
  21. #    at each location (large girder at A, B, and C; small girder at A, B, and C). There is also
  22. #    a ghost used for moving the hook when both the hook and the position it's in is empty. 
  23. #    
  24. #    When a pulley is added into the crane, the previous pulley is removed. The new pulley 
  25. #    creates all the ropes and attaches the rope's ghosts to either the crane (if they stay
  26. #    with the crane when the hook is lowered) or to the hook (if they move with the hook when 
  27. #    the hook is lowered). This way, when the hook is moved, the ropes and pulleys associated 
  28. #    with it move as well. 
  29. #
  30. #    By default the hook is attached to the crane. When the crane moves left and right, 
  31. #    the hook moves as well, moving the ropes and pulleys. When the hook needs to move up 
  32. #    and down, the hook is detached from the crane and attached to the appropriate girder ghost. 
  33. #    This girder ghost is moved, causing the hook to move with it. 
  34. #
  35. #    The girders, when picked up, get attached to the hook. This way, when the crane moves
  36. #    the hook left/right or a girder ghost moves the hook up/down, the girder moves along with
  37. #    it. When a girder is getting picked up, it's girder ghost moves (with hook attached) from
  38. #    frame 0 to frame 4 (frame 3 in position A). When a girder is getting dropped off, the girder
  39. #    ghosts frames are reversed, running from 4 (3 in pos. A) to 0. 
  40. #
  41. #    precise alignment of frames for the girder ghosts and the crane keep it all in check.
  42. #    All the girder ghosts start at the same vertical position (Z: 1.712). They also all 
  43. #    end at the same position (Z: 1.3). these two positions represent the resting position of
  44. #    the hook (1.712 when nothing's hooked on, and 1.3 when a girdered hooked). It is important
  45. #    that these vertical positions remain constant across all girder ghosts. This is what
  46. #    keeps the hook from sliding a little bit between pickups and drop-offs.        
  47. #
  48. #    Variables are used to keep track of what's in each position. Pulley_cargo is used to tell 
  49. #    what object in in the hook's hand. PulleyA_cargo, PulleyB_cargo, and PulleyC_cargo are used
  50. #    to tell what's laying on the floor in each area. A value of 0 means the position (or hook)
  51. #    is empty. Otherwise, it will equal the thing-reference-number of the thing that's there.   
  52. #
  53. #    More explanation of this cog can be found in each routine below. 
  54. #
  55. #                    02/20/98    -D. Shannon
  56. #
  57. #     02/17/98 [DGS]    Created
  58. #    02/20/98 [DGS]  Finished
  59. # ========================================================================================
  60.    
  61. symbols
  62. message     activate
  63. message        arrived
  64. message        startup
  65. message        pulse
  66. message        used
  67. message     timer
  68. message        entered
  69.  
  70. ## ----------------Cogs
  71.  
  72. ## ----------------Things
  73. thing        Crane_o            linkid=10
  74. thing        girder_small_o        
  75. thing        girder_large_o    
  76.  
  77. ## ---------------- Ghost Objects
  78. thing        pulley_top_g
  79. thing        pulley_bot_g
  80. thing        pulley_hook_g
  81. thing         smallC_g
  82. thing         smallB_g
  83. thing         smallA_g
  84.  
  85. thing         largeC_g
  86. thing         largeB_g
  87. thing         largeA_g
  88.  
  89. thing        pulleyE_g
  90. thing        small_g
  91. thing        large_g
  92.  
  93. ## ---------------- Rope Ghosts
  94. thing        rope1a_g
  95. thing        rope1b_g
  96. thing        rope2a_g
  97. thing        rope2b_g
  98. thing         rope3a_g
  99. thing         rope3b_g
  100. thing         rope4a_g
  101. thing         rope4b_g
  102. thing         rope5a_g
  103.  
  104. ## ----------------- Templates
  105. template        pulley1_t
  106. template        pulley2_t
  107. template        pulley3_t
  108. template        hook_t
  109.  
  110. ## ----------------Surfaces,sectors, & integer surfaces
  111. surface        Left_s     linkid=2 
  112. surface        right_s    linkid=3
  113. surface        lower_s    linkid=4
  114. surface        return_s linkid=5
  115. sector        track_sect           linkid=10
  116. int        on_s=0            local
  117.  
  118. ##----------------- Object Integers
  119. int        pulley_top_i=0        local
  120. int        pulley_bot_i=0        local
  121. int        pulley_hook_i=0        local
  122.  
  123. ##----------------- Rope Integers    
  124. int        rope1_i=0        local
  125. int        rope2_i=0        local
  126. int        rope3_i=0        local
  127. int        rope4_i=0        local
  128.  
  129. # ================== Sounds
  130. sound    act_snd=SWT00DrSwtch.WAV        local
  131. sound    put_snd=SWTt3PutPulley.WAV        local
  132. sound    move_snd=FLY00Crate1.WAV        local
  133. sound    start_snd=ELV00tSmllElvSt.WAV    local
  134. sound    stop_snd=ELV00tSmllElvStp.WAV    local
  135. sound    lower_snd=FLYt3PulleyLp.WAV        local
  136.  
  137. ## ----------------Misc. Vars
  138. int        pulleyA_cargo=0        local
  139. int        pulleyB_cargo=0        local
  140. int        pulleyC_cargo=0        local
  141. int        pulley_cargo=0        local
  142. int        crane_dir=0            local
  143. flex    crane_speed=4.0     local
  144. flex    speed_min=3.0        local
  145. flex    speed_max=4.0        local
  146. flex    pulley_speed=4.0    local
  147. int        moving=0            local
  148. int        pulley_1_b=28        local
  149. int        pulley_2_b=29        local
  150. int        pulley_3_b=30        local
  151. int        hookthing=0            local
  152. int        anim_frame=0        local
  153. int        r_color=0            local
  154. int        celnum=0            local
  155. int        buffer=0            local
  156. int        pressed=0            local
  157. flex    r_size=0.007        local
  158. int        setup=0                local
  159. end
  160. code
  161.  
  162.  //###############################################################################################################################################       
  163. startup:
  164.     pulleyC_cargo = girder_small_o;    //PulleyC_cargo is the variabel that tells this cog what's sitting underneath the crane at pos. C
  165.     pulleyB_cargo = 0;        // Nothing's at position B
  166.     pulleyA_cargo = girder_large_o; //PulleyC_cargo is the variabel that tells this cog what's sitting underneath the crane at pos. A
  167.     player = getlocalplayerthing();
  168.     //ChangeInv(player, pulley_1_b, 1);
  169.     //ChangeInv(player, pulley_3_b, 1); // add pulley 3 to the player's inv
  170.     //ChangeInv(player, pulley_2_b, 1); // add pulley 2 to the player's inv
  171.     movetoframe(largeC_g,4,1000); // Sets up ghosts so they're where we needs 'em to be. 
  172.     movetoframe(largeB_g,4,1000);
  173.     movetoframe(smallA_g,3,1000);
  174.     movetoframe(smallB_g,4,1000);
  175.     call update_bins;
  176.     call setup_pulley1;
  177.     return;
  178.  
  179. entered:
  180.     if (getsenderid() == 10)
  181.     {
  182.     if (enter_sect == 0)
  183.     
  184.         {
  185.         dwPlayCammySpeech(12260, "M1ca051.wav", 10, 0);        
  186.         enter_sect = 1;
  187.         print("Sayline");
  188.         }
  189.     }
  190.     return;
  191.  
  192. //###############################################################################################################################################       
  193. Setup_pulley1:
  194.     // This routine is responsible for creating objects for the first pulley setup
  195.     garbage = playsoundthing(put_snd,pulley_top_g,1.0,-1,-1,0);
  196.     
  197.     pulley_top_i     = creatething(pulley1_t,pulley_top_g);   // Crane's top pulley
  198.     capturething(pulley_top_i);
  199.     pulley_hook_i     = creatething(hook_t,pulley_hook_g);    // crane's hook
  200.     capturething(pulley_hook_i);
  201.     rope1_i        = addbeam(rope1a_g,pulley_hook_i,147,r_size);  // ropes    
  202.     pullet_bot_i = pulley_top_i;
  203.     attachthingtothing(rope1a_g,        crane_o);
  204.     attachthingtothing(pulley_top_i,    crane_o);
  205.     
  206.     //attachthingtothing(pulley_bot_i,pulley_hook_i);
  207.     call hook_to_crane;        // Attach the hook to the crane 3d0 
  208.     
  209.     setup = 1;            // Let's the cog know which setup's in place
  210.     ChangeInv(player, pulley_1_b, -1);
  211.     call update_bins; 
  212.     return;
  213. //---------------------------------------------------------
  214. takedown_pulley1:
  215.     // This removes/deletes all objects for pulley 1.
  216.     releasething(pulley_top_i);
  217.     releasething(pulley_hook_i);
  218.     detachthing(rope1a_g);
  219.     removelaser(rope1_i);
  220.     destroything(pulley_top_i);
  221.     destroything(pulley_hook_i);
  222.     
  223.     setup = 0;
  224.     ChangeInv(player, pulley_1_b, 1); 
  225.     return;
  226. //#############################################################