Advertisement
ZoriaRPG

Zelda 3 Follower v0.8

Apr 10th, 2019
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 15.70 KB | None | 0 0
  1. import "std.zh"
  2. import "classic.zh"
  3.  
  4. /////////////////////////////
  5. /// Zelda 3 Follower      ///
  6. /// v0.7                  ///
  7. /// 10th April, 2019      ///
  8. /// By: ZoriaRPG          ///
  9. /// Made for: JudasRising ///
  10. /////////////////////////////
  11. // v0.1 : Initial
  12. // v0.2 : Changed hardcoded > 3 frame cap to use FOLLOWER_MAX_FRAME in drawing loops.
  13. // v0.3 : Fix scrolling positions and positions onContinue
  14. // v0.4 : The follower's tile is now set by the combo of the ffc 'GetZelda'. (It's combo tile, -4.)
  15. //      : Added the ability for the follower to play a message, and give an item to Link, when Link
  16. //      : delivers them to their destination.
  17. //  : Added the ability to show a message when you collect the npc.
  18. // v0.5 : The follower CSet is now set by the ffc when you collect him.
  19. // v0.6 : Renamed scripts and functions, and moved global functions into local functions of ffc script Follower.
  20. // v0.7 : Moved array to be script-namespace local to ffc Follower. Used for 2.55.
  21. //      : You could use this in 2.53, but it needs the included Init script to work, as it will have bugs
  22. //      : (the array values aren't correct) on init in versions < 2.55.
  23. //  : The follower ffc now makes its data invisible on init.
  24. // v0.8 : Added support for up to 10 unique followers in a quest.
  25.  
  26.  
  27. //Settings
  28. const int FOLLOWER_ZELDA_MIDI_DURATION  = 300;
  29. const int FOLLOWER_ZELDA_MIDI       = 1;
  30. const int FOLLOWER_MAX_FRAME        = 3; //4-frame walking animation
  31. //Binary flags for Screen->D
  32. const int FOLLOWER_SHOWED_MESSAGE   = 10b;
  33. const int FOLLOWER_GAVE_ITEM        = 1b;
  34. const int FOLLOWER_DELIVERED        = 100b;
  35. const int FOLLOWER_RESCUED      = 1000b;
  36. const int FOLLOWER_REGISTER         = 1; //Screen->D register to use on any screen where you leave a follower.
  37.  
  38. //Array and array indices.
  39. //int TheFollower[128] = {-1, -1};
  40. const int FOLLOWER_MIDI_TIMER   = 0;
  41. const int FOLLOWER_CUR_RESCUED  = 1;
  42. const int FOLLOWER_ACTIVE   = 2;
  43. const int FOLLOWER_ANIMATING    = 3;
  44. const int FOLLOWER_FRAME    = 4;
  45. const int FOLLOWER_SUBFRAME     = 5;
  46.  
  47. const int FOLLOWER_ORIG_MIDI    = 6;
  48. const int FOLLOWER_BASE_TILE    = 7;
  49. const int FOLLOWER_CSET     = 8;
  50. const int FOLLOWER_CURRENT_ID   = 9;
  51.  
  52.  
  53. const int FOLLOWER_X        = 10;
  54. const int FOLLOWER_X1       = 11;
  55. const int FOLLOWER_X2       = 12;
  56. const int FOLLOWER_X3       = 13;
  57. const int FOLLOWER_X4       = 14;
  58. const int FOLLOWER_X5       = 15;
  59. const int FOLLOWER_X6       = 16;
  60. const int FOLLOWER_X7       = 17;
  61. const int FOLLOWER_X8       = 19;
  62. const int FOLLOWER_X9       = 20;
  63. const int FOLLOWER_X10      = 21;
  64. const int FOLLOWER_X11      = 22;
  65. const int FOLLOWER_X12      = 23;
  66. const int FOLLOWER_X13      = 23;
  67. const int FOLLOWER_X14      = 24;
  68. const int FOLLOWER_X15      = 26;
  69. const int FOLLOWER_X16      = 27;
  70. const int FOLLOWER_X17      = 28;
  71. const int FOLLOWER_X18      = 29;
  72. const int FOLLOWER_X19      = 30;
  73. const int FOLLOWER_X20      = 31;
  74.  
  75. const int FOLLOWER_Y        = 40;
  76. const int FOLLOWER_Y1       = 41;
  77. const int FOLLOWER_Y2       = 42;
  78. const int FOLLOWER_Y3       = 43;
  79. const int FOLLOWER_Y4       = 44;
  80. const int FOLLOWER_Y5       = 45;
  81. const int FOLLOWER_Y6       = 46;
  82. const int FOLLOWER_Y7       = 47;
  83. const int FOLLOWER_Y8       = 48;
  84. const int FOLLOWER_Y9       = 49;
  85. const int FOLLOWER_Y10      = 50;
  86. const int FOLLOWER_Y11      = 51;
  87. const int FOLLOWER_Y12      = 52;
  88. const int FOLLOWER_Y13      = 53;
  89. const int FOLLOWER_Y14      = 54;
  90. const int FOLLOWER_Y15      = 55;
  91. const int FOLLOWER_Y16      = 56;
  92. const int FOLLOWER_Y17      = 57;
  93. const int FOLLOWER_Y18      = 58;
  94. const int FOLLOWER_Y19      = 59;
  95. const int FOLLOWER_Y20      = 60;
  96.  
  97. const int FOLLOWER_DIR      = 70;
  98. const int FOLLOWER_DIR1     = 71;
  99. const int FOLLOWER_DIR2     = 72;
  100. const int FOLLOWER_DIR3     = 73;
  101. const int FOLLOWER_DIR4     = 74;
  102. const int FOLLOWER_DIR5     = 75;
  103. const int FOLLOWER_DIR6     = 76;
  104. const int FOLLOWER_DIR7     = 77;
  105. const int FOLLOWER_DIR8     = 78;
  106. const int FOLLOWER_DIR9     = 79;
  107. const int FOLLOWER_DIR10    = 80;
  108. const int FOLLOWER_DIR11    = 81;
  109. const int FOLLOWER_DIR12    = 82;
  110. const int FOLLOWER_DIR13    = 83;
  111. const int FOLLOWER_DIR14    = 84;
  112. const int FOLLOWER_DIR15    = 85;
  113. const int FOLLOWER_DIR16    = 86;
  114. const int FOLLOWER_DIR17    = 87;
  115. const int FOLLOWER_DIR18    = 88;
  116. const int FOLLOWER_DIR19    = 89;
  117. const int FOLLOWER_DIR20    = 90;
  118.  
  119. const int FOLLOWER_ID_1_TILE    = 100;
  120. const int FOLLOWER_ID_2_TILE    = 101;
  121. const int FOLLOWER_ID_3_TILE    = 102;
  122. const int FOLLOWER_ID_4_TILE    = 103;
  123. const int FOLLOWER_ID_5_TILE    = 104;
  124. const int FOLLOWER_ID_6_TILE    = 105;
  125. const int FOLLOWER_ID_7_TILE    = 106;
  126. const int FOLLOWER_ID_8_TILE    = 107;
  127. const int FOLLOWER_ID_9_TILE    = 108;
  128. const int FOLLOWER_ID_10_TILE   = 109;
  129. const int FOLLOWER_ID_1_CSET    = 110;
  130. const int FOLLOWER_ID_2_CSET    = 111;
  131. const int FOLLOWER_ID_3_CSET    = 112;
  132. const int FOLLOWER_ID_4_CSET    = 113;
  133. const int FOLLOWER_ID_5_CSET    = 114;
  134. const int FOLLOWER_ID_6_CSET    = 115;
  135. const int FOLLOWER_ID_7_CSET    = 116;
  136. const int FOLLOWER_ID_8_CSET    = 117;
  137. const int FOLLOWER_ID_9_CSET    = 118;
  138. const int FOLLOWER_ID_10_CSET   = 119;
  139.  
  140. const int FOLLOWER_CUR_SRC_DMAP     = 120;
  141. const int FOLLOWER_CUR_SRC_SCRN     = 121;
  142.  
  143.  
  144. // When Link collides with this ffc, it triggers the follower.
  145. //
  146. // When you use this, add a second ffc on the screen with the combo of the follower, and then
  147. // set the Link property of the ffc running the script to the ffc ID of the second ffc.
  148. //
  149. // The second, linked ffc is used to draw the follower until you collect them, and it also sets
  150. // both the tiles to draw, and the CSet to use when drawing the follower.
  151. //
  152. // You can Link this to itself, but then Link will need to walk onto the follower image to 'collect' them.
  153. // Arg 'id' (D2) should be 0 to 9, for a total of 10 possible, unique followers in a quest.
  154. // NOTE: You will need to use this same ID in arg D2 (id) for the LeaveFollower ffc script, as a PAIR.
  155. ffc script Follower
  156. {
  157.     int data[128];
  158.     void run(int sfx, int msg, int id)
  159.     {
  160.         this->Data = CMB_INVISIBLE;
  161.         ffc f = Screen->LoadFFC(this->Link);
  162.         Trace(Screen->D[FOLLOWER_REGISTER]);
  163.         //FOLLOWER_DELIVERED
  164.         if ((Screen->D[FOLLOWER_REGISTER]))
  165.         {
  166.             f->Data = 0;
  167.             SetLayerComboD(1, ComboAt(f->X, f->Y), 0); //Clear the solid combo under the npc follower graphic.
  168.             Quit();
  169.         }
  170.        
  171.         while(1)
  172.         {
  173.             //if ( Follower.data[FOLLOWER_CURRENT_ID] )
  174.             //{
  175.             //  if ( Follower.data[FOLLOWER_CURRENT_ID] == id+1 ) f->Data = 0;
  176.             //  Waitframe(); continue;
  177.             //} //Cannot have two at the same time.
  178.             if ( Collision(this) && !(Screen->D[FOLLOWER_REGISTER]) && !Follower.data[FOLLOWER_CURRENT_ID] )
  179.             {
  180.                 Follower.data[FOLLOWER_CUR_RESCUED] = 2;
  181.                 Game->PlaySound(sfx);
  182.                 Follower.data[FOLLOWER_BASE_TILE] = Game->ComboTile(f->Data)-4;
  183.                 Follower.data[FOLLOWER_CSET] = f->CSet;
  184.                
  185.                 Follower.data[FOLLOWER_ID_1_TILE+id] = Game->ComboTile(f->Data)-4;
  186.                 Follower.data[FOLLOWER_ID_1_CSET+id] = f->CSet;
  187.                 Follower.data[FOLLOWER_CURRENT_ID] = id+1;
  188.                 Follower.data[FOLLOWER_CUR_SRC_DMAP] = Game->GetCurDMap();
  189.                 Follower.data[FOLLOWER_CUR_SRC_SCRN] = Game->GetCurScreen();
  190.                
  191.                
  192.                
  193.                 if ( msg ) Screen->Message(msg);
  194.                 SetLayerComboD(1, ComboAt(f->X, f->Y), 0); //Clear the solid combo under the npc follower graphic.
  195.             }
  196.             if ( Follower.data[FOLLOWER_ACTIVE] > 15 && Follower.data[FOLLOWER_CURRENT_ID] == id+1 )
  197.             {
  198.                 f->Data = 0;
  199.             }
  200.             if ( Link->Action == LA_SCROLLING ) Follower.data[FOLLOWER_ACTIVE] = 16; //Immediately jump on scroll.
  201.            
  202.             Waitframe();
  203.         }
  204.     }
  205.     void wait(int num, int x, int y, int til, int cset, bool noaction)
  206.     {
  207.         for (; num >= 0; --num)
  208.         {
  209.             Screen->FastTile(2, x, y, til, cset, 128 );
  210.             if ( noaction ) { NoAction(); } //NoPress(true); NoInput(true); }
  211.             Waitframe();
  212.         }
  213.     }
  214.     //Returns true if the player is holding, or pressed a directional key or button.
  215.     bool pressedDPad()
  216.     {
  217.         if ( Link->InputUp ) return true;
  218.         if ( Link->InputDown ) return true;
  219.         if ( Link->InputLeft ) return true;
  220.         if ( Link->InputRight ) return true;
  221.         if ( Link->PressUp ) return true;
  222.         if ( Link->PressDown ) return true;
  223.         if ( Link->PressLeft ) return true;
  224.         if ( Link->PressRight ) return true;
  225.         if ( Link->InputAxisUp ) return true;
  226.         if ( Link->InputAxisDown ) return true;
  227.         if ( Link->InputAxisLeft ) return true;
  228.         if ( Link->InputAxisRight ) return true;
  229.         if ( Link->PressAxisUp ) return true;
  230.         if ( Link->PressAxisDown ) return true;
  231.         if ( Link->PressAxisLeft ) return true;
  232.         if ( Link->PressAxisRight ) return true;
  233.         return false;
  234.     }
  235.     //Zelda follows in Link's path with an 8 frame delay before updating
  236.     void draw()
  237.     {
  238.         if ( !Follower.data[FOLLOWER_ACTIVE] ) return;
  239.         if ( pressedDPad() )
  240.         {
  241.             ++Follower.data[FOLLOWER_ACTIVE];
  242.             if ( Follower.data[FOLLOWER_ACTIVE] > 100000 ) Follower.data[FOLLOWER_ACTIVE] = 8; //Don't roll over
  243.            
  244.         }
  245.        
  246.        
  247.            
  248.         if ( Link->Action == LA_GOTHURTLAND ) return; //Don't update if Link was hurt and pushed back.
  249.  
  250.         if ( pressedDPad() )
  251.         {
  252.             ++Follower.data[FOLLOWER_SUBFRAME];
  253.             if ( Follower.data[FOLLOWER_SUBFRAME]&1 )
  254.             {
  255.                 ++Follower.data[FOLLOWER_FRAME];
  256.                 if ( Follower.data[FOLLOWER_FRAME] > FOLLOWER_MAX_FRAME ) Follower.data[FOLLOWER_FRAME] = 0;
  257.             }
  258.            
  259.             Follower.data[FOLLOWER_X] = Link->X;
  260.             Follower.data[FOLLOWER_Y] = Link->Y;
  261.             Follower.data[FOLLOWER_DIR] = Link->Dir;
  262.             for ( int q = FOLLOWER_X12; q >= FOLLOWER_X; --q )
  263.             {
  264.                 Follower.data[q] = Follower.data[q-1];
  265.             }
  266.             for ( int q = FOLLOWER_Y12; q >= FOLLOWER_Y; --q )
  267.             {
  268.                 Follower.data[q] = Follower.data[q-1];
  269.             }
  270.             for ( int q = FOLLOWER_DIR12; q >= FOLLOWER_DIR; --q )
  271.             {
  272.                 Follower.data[q] = Follower.data[q-1];
  273.             }
  274.        
  275.         }
  276.         if ( Follower.data[FOLLOWER_ACTIVE] < 16 ) return; //Wait 8 frames to begin.
  277.         //Draw tiles
  278.         int the_tile;
  279.          
  280.         the_tile = Follower.data[FOLLOWER_BASE_TILE] + (Follower.data[FOLLOWER_DIR12]*4) + Follower.data[FOLLOWER_FRAME];
  281.         //Based on X, Y, Dir and Frame
  282.         Screen->FastTile(2, Follower.data[FOLLOWER_X12], Follower.data[FOLLOWER_Y12],
  283.                     the_tile, Follower.data[FOLLOWER_CSET], 128 );
  284.        
  285.        
  286.         //...then Update the frame
  287.        
  288.     }
  289.    
  290.    
  291.     //Called to initialise the follower.
  292.     void rescue(int follower_midi, int dur)
  293.     {
  294.         if ( Follower.data[FOLLOWER_CUR_RESCUED] < 2 ) return;
  295.        
  296.         --Follower.data[FOLLOWER_CUR_RESCUED];
  297.         if ( !dur ) dur = FOLLOWER_ZELDA_MIDI_DURATION;
  298.         if ( !follower_midi ) follower_midi = FOLLOWER_ZELDA_MIDI;
  299.         Follower.data[FOLLOWER_ACTIVE] = 1;
  300.         if ( Follower.data[FOLLOWER_MIDI_TIMER] == -1 )
  301.         {
  302.            
  303.             Follower.data[FOLLOWER_ORIG_MIDI] = Game->DMapMIDI[Game->GetCurDMap()];
  304.             Follower.data[FOLLOWER_MIDI_TIMER] = dur;
  305.             Game->PlayMIDI(follower_midi);
  306.         }
  307.         else
  308.         {
  309.             --Follower.data[FOLLOWER_MIDI_TIMER];
  310.             if ( Follower.data[FOLLOWER_MIDI_TIMER] < 1 )
  311.             {
  312.                 Game->PlayMIDI(Follower.data[FOLLOWER_ORIG_MIDI]);
  313.                 Follower.data[FOLLOWER_MIDI_TIMER] = 0;
  314.             }
  315.         }
  316.  
  317.     }  
  318.  
  319.     // Clears the follower positions if Link dies, if the playe presses F6, and so forth.
  320.     // Called in active, continue, and exit scripts.
  321.     // Use in Link's Init script if using 2.55.
  322.     void clear()
  323.     {
  324.         for ( int q = FOLLOWER_X; q <= FOLLOWER_X20; ++q )
  325.         {
  326.             Follower.data[q] = Link->X;
  327.         }
  328.         for ( int q = FOLLOWER_Y; q <= FOLLOWER_Y20; ++q )
  329.         {
  330.             Follower.data[q] = Link->Y;
  331.         }
  332.         for ( int q = FOLLOWER_DIR; q <= FOLLOWER_DIR20; ++q )
  333.         {
  334.             Follower.data[q] = Link->Dir;
  335.         }
  336.     }
  337.  
  338.     // Called in the active script during scrolling to prevent the follower from drawing at the wrong position.
  339.     void scroll()
  340.     {
  341.         if ( Link->Action != LA_SCROLLING ) return;
  342.         for ( int q = FOLLOWER_X; q <= FOLLOWER_X20; ++q )
  343.         {
  344.             Follower.data[q] = Link->X;
  345.         }
  346.         for ( int q = FOLLOWER_Y; q <= FOLLOWER_Y20; ++q )
  347.         {
  348.             Follower.data[q] = Link->Y;
  349.         }
  350.         for ( int q = FOLLOWER_DIR; q <= FOLLOWER_DIR20; ++q )
  351.         {
  352.             Follower.data[q] = Link->Dir;
  353.         }
  354.     }
  355. }
  356.  
  357.  
  358. //Place on the screen where Link is to leave the follower, at the position to which you want the
  359. //follower to move toward, and stop, on the screen.
  360. //Set this to run on screen init.
  361. ffc script LeaveFollower
  362. {
  363.     void run(int msg, int itm, int id)
  364.     {
  365.         this->Data = CMB_INVISIBLE;
  366.        
  367.         int the_tile;
  368.        
  369.         if ( (Screen->D[FOLLOWER_REGISTER] & FOLLOWER_DELIVERED) )
  370.         {
  371.             while(1)
  372.             {
  373.                 Follower.wait(2,this->X,this->Y,Follower.data[FOLLOWER_ID_1_TILE+id]+4, Follower.data[FOLLOWER_ID_1_CSET+id],false);
  374.             }
  375.         }
  376.        
  377.         while ( 1 ) //Follower.data[FOLLOWER_X12] != this->X && Follower.data[FOLLOWER_Y12] != this->Y )
  378.         {
  379.             if ( Follower.data[FOLLOWER_CURRENT_ID] == id+1 )
  380.             {
  381.                 Follower.data[FOLLOWER_ANIMATING] = 1;
  382.                 //Move to the target.
  383.                 if ( Follower.data[FOLLOWER_X12] < this->X ) { ++Follower.data[FOLLOWER_X12]; Follower.data[FOLLOWER_DIR12] = DIR_RIGHT; }
  384.                 if ( Follower.data[FOLLOWER_X12] > this->X ) { --Follower.data[FOLLOWER_X12]; Follower.data[FOLLOWER_DIR12] = DIR_LEFT; }
  385.                
  386.                 if ( Follower.data[FOLLOWER_Y12] < this->Y ) { ++Follower.data[FOLLOWER_Y12]; Follower.data[FOLLOWER_DIR12] = DIR_DOWN; }
  387.                 if ( Follower.data[FOLLOWER_Y12] > this->Y ) { --Follower.data[FOLLOWER_Y12]; Follower.data[FOLLOWER_DIR12] = DIR_UP; }
  388.            
  389.                 ++Follower.data[FOLLOWER_FRAME];
  390.                 if ( Follower.data[FOLLOWER_FRAME] > FOLLOWER_MAX_FRAME ) Follower.data[FOLLOWER_FRAME] = 0;
  391.                 the_tile = Follower.data[FOLLOWER_BASE_TILE] + (Follower.data[FOLLOWER_DIR12]*4) + Follower.data[FOLLOWER_FRAME];
  392.                 if ( Follower.data[FOLLOWER_X12] == this->X && Follower.data[FOLLOWER_Y12] == this->Y ) { Follower.data[FOLLOWER_DIR12] = DIR_DOWN; Follower.data[FOLLOWER_FRAME] = 0; }
  393.                
  394.                 if ( !(Screen->D[FOLLOWER_REGISTER]&FOLLOWER_DELIVERED)) Follower.wait(2,Follower.data[FOLLOWER_X12],Follower.data[FOLLOWER_Y12],the_tile, Follower.data[FOLLOWER_CSET],true);
  395.                 else Follower.wait(2,Follower.data[FOLLOWER_X12],Follower.data[FOLLOWER_Y12],the_tile, Follower.data[FOLLOWER_CSET],false);
  396.                 if ( Follower.data[FOLLOWER_X12] == this->X )
  397.                 {
  398.                     if ( Follower.data[FOLLOWER_Y12] == this->Y )
  399.                     {
  400.                         Trace(Follower.data[FOLLOWER_CUR_SRC_DMAP]);
  401.                         Trace(Follower.data[FOLLOWER_CUR_SRC_SCRN]);
  402.                         int src_d = Game->GetDMapScreenD(Follower.data[FOLLOWER_CUR_SRC_DMAP], Follower.data[FOLLOWER_CUR_SRC_SCRN], FOLLOWER_REGISTER);
  403.                         Trace(src_d);
  404.                         src_d |= FOLLOWER_DELIVERED;
  405.                         Trace(src_d);
  406.                         Game->SetDMapScreenD(Follower.data[FOLLOWER_CUR_SRC_DMAP], Follower.data[FOLLOWER_CUR_SRC_SCRN], FOLLOWER_REGISTER, src_d);
  407.                            
  408.                         if ( Follower.data[FOLLOWER_ACTIVE] )
  409.                         {
  410.                             Follower.data[FOLLOWER_ACTIVE] = 0;
  411.                             Screen->D[FOLLOWER_REGISTER] |= FOLLOWER_DELIVERED;
  412.                             Follower.data[FOLLOWER_CURRENT_ID] = 0;
  413.                            
  414.                             //Set the flags on its source screen, too.
  415.                            
  416.                         }
  417.                         if ( msg )
  418.                         {
  419.                             if ( !(Screen->D[FOLLOWER_REGISTER]&FOLLOWER_SHOWED_MESSAGE) )
  420.                             {
  421.                                 Screen->D[FOLLOWER_REGISTER] |= FOLLOWER_SHOWED_MESSAGE;
  422.                                 Screen->Message(msg);
  423.                             }
  424.                         }
  425.                         if ( itm )
  426.                         {
  427.                             if ( !(Screen->D[FOLLOWER_REGISTER]&FOLLOWER_GAVE_ITEM) )
  428.                             {
  429.                                 Screen->D[FOLLOWER_REGISTER] |= FOLLOWER_GAVE_ITEM;
  430.                                 item giveit = Screen->CreateItem(itm);
  431.                                 giveit->X = Link->X;
  432.                                 giveit->Y = Link->Y;
  433.                                 giveit->Pickup = IP_HOLDUP;
  434.                            
  435.                             }
  436.                         }
  437.                         while(1) Follower.wait(2,this->X,this->Y,Follower.data[FOLLOWER_ID_1_TILE+id]+4, Follower.data[FOLLOWER_ID_1_CSET+id],false);
  438.                     }
  439.                 }
  440.             }
  441.             else Waitframe();
  442.        
  443.         }
  444.    
  445.     }
  446. }  
  447.  
  448. //Example global script.
  449. global script FollowerActive
  450. {
  451.     void run()
  452.     {
  453.         Follower.clear();
  454.         while(1)
  455.         {
  456.             //if ( Follower.data[FOLLOWER_ANIMATING] ) { Trace(1); NoAction(); }
  457.             Follower.rescue(FOLLOWER_ZELDA_MIDI, FOLLOWER_ZELDA_MIDI_DURATION);
  458.             Follower.draw();
  459.             Follower.scroll();
  460.             Waitdraw();
  461.             Waitframe();
  462.         }
  463.     }
  464. }
  465.  
  466.  
  467.  
  468.  
  469.  
  470. global script FollowerResume
  471. {
  472.     void run()
  473.     {
  474.         Follower.clear();
  475.     }
  476. }
  477.  
  478. global script Init
  479. {
  480.     void run()
  481.     {
  482.         Follower.data[0] = -1;
  483.         Follower.data[1] = -1;
  484.     }
  485. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement