Advertisement
ZoriaRPG

Dimentio's Lightning, LinkHit Modification

May 1st, 2017
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.78 KB | None | 0 0
  1. ffc script Lightning
  2. {
  3.  
  4.     void run(int dir, int repeattimes)
  5.     {
  6.         int Lightning1X[25];
  7.         int Lightning1Y[25];
  8.         int Lightning2X[25];
  9.         int Lightning2Y[25];
  10.         int Lightning3X[25];
  11.         int Lightning3Y[25];
  12.         int Lightning4X[25];
  13.         int Lightning4Y[25];
  14.         int HitCounter = 0;
  15.         for (int m = repeattimes; m!= 0;)
  16.         {
  17.             if (m > 0) m--;
  18.             for (int i = 24; i >= 0; i--)
  19.             {
  20.                 Lightning1X[i] = this->X;
  21.                 Lightning1Y[i] = this->Y;
  22.                 Lightning2X[i] = this->X;
  23.                 Lightning2Y[i] = this->Y;
  24.                 Lightning3X[i] = this->X;
  25.                 Lightning3Y[i] = this->Y;
  26.                 Lightning4X[i] = this->X;
  27.                 Lightning4Y[i] = this->Y;
  28.             }
  29.             Game->PlaySound(74);
  30.             while(((Lightning1X[24] > 0 || Lightning2X[24] > 0 || Lightning3X[24] > 0 || Lightning4X[24] > 0) && dir == DIR_LEFT) ||
  31.             ((Lightning1X[24] < 256 || Lightning2X[24] < 256 || Lightning3X[24] < 256 || Lightning4X[24] < 256) && dir == DIR_RIGHT) ||
  32.             ((Lightning1Y[24] > 0 || Lightning2Y[24] > 0 || Lightning3Y[24] > 0 || Lightning4Y[24] > 0) && dir == DIR_UP) ||
  33.             ((Lightning1Y[24] < 176 || Lightning2Y[24] < 176 || Lightning3Y[24] < 176 || Lightning4Y[24] < 176) && dir == DIR_DOWN))
  34.             {
  35.                 for (int l = 0; l <= 2; l++)
  36.                 {
  37.                     int Angle1 = Choose(210, 150, 225, 135);
  38.                     if (dir == DIR_UP) Angle1 += 90;
  39.                     else if (dir == DIR_DOWN) Angle1 -= 90;
  40.                     else if (dir == DIR_RIGHT) Angle1 += 180;
  41.                     ShiftArray(Lightning1X);
  42.                     ShiftArray(Lightning1Y);
  43.                     Lightning1X[0] += VectorX(10, Angle1);
  44.                     Lightning1Y[0] += VectorY(10, Angle1);
  45.                     int Angle2 = Choose(210, 150, 225, 135);
  46.                     if (dir == DIR_UP) Angle2 += 90;
  47.                     else if (dir == DIR_DOWN) Angle2 -= 90;
  48.                     else if (dir == DIR_RIGHT) Angle2 += 180;
  49.                     ShiftArray(Lightning2X);
  50.                     ShiftArray(Lightning2Y);
  51.                     Lightning2X[0] += VectorX(10, Angle2);
  52.                     Lightning2Y[0] += VectorY(10, Angle2);
  53.                     int Angle3 = Choose(210, 150, 225, 135);
  54.                     if (dir == DIR_UP) Angle3 += 90;
  55.                     else if (dir == DIR_DOWN) Angle3 -= 90;
  56.                     else if (dir == DIR_RIGHT) Angle3 += 180;
  57.                     ShiftArray(Lightning3X);
  58.                     ShiftArray(Lightning3Y);
  59.                     Lightning3X[0] += VectorX(10, Angle3);
  60.                     Lightning3Y[0] += VectorY(10, Angle3);
  61.                     int Angle4 = Choose(210, 150, 225, 135);
  62.                     if (dir == DIR_UP) Angle4 += 90;
  63.                     else if (dir == DIR_DOWN) Angle4 -= 90;
  64.                     else if (dir == DIR_RIGHT) Angle4 += 180;
  65.                     ShiftArray(Lightning4X);
  66.                     ShiftArray(Lightning4Y);
  67.                     Lightning4X[0] += VectorX(10, Angle4);
  68.                     Lightning4Y[0] += VectorY(10, Angle4);
  69.                     bool hitLink;
  70.                     for (int i = 24; i > 0; i--)
  71.                     {
  72.                         if ( !hitLink ) {
  73.                             if (lineBoxCollision(Lightning1X[i], Lightning1Y[i], Lightning1X[i-1], Lightning1Y[i-1], Link->X, Link->Y, Link->X+Link->HitWidth, Link->Y+Link->HitHeight, 0))
  74.                             {
  75.                                 hitLink = true;
  76.                                
  77.                             }
  78.                         }
  79.                         if ( !hitLink ) {                      
  80.                             if (lineBoxCollision(Lightning2X[i], Lightning2Y[i], Lightning2X[i-1], Lightning2Y[i-1], Link->X, Link->Y, Link->X+Link->HitWidth, Link->Y+Link->HitHeight, 0))
  81.                             {
  82.                                 hitLink = true;
  83.                             }
  84.                         }
  85.                         if ( !hitLink ) {
  86.                             if (lineBoxCollision(Lightning3X[i], Lightning3Y[i], Lightning3X[i-1], Lightning3Y[i-1], Link->X, Link->Y, Link->X+Link->HitWidth, Link->Y+Link->HitHeight, 0))
  87.                             {
  88.                                 hitLink = true;
  89.                             }
  90.                         }
  91.                         if ( !hitLink ) {
  92.                             if (lineBoxCollision(Lightning4X[i], Lightning4Y[i], Lightning4X[i-1], Lightning4Y[i-1], Link->X, Link->Y, Link->X+Link->HitWidth, Link->Y+Link->HitHeight, 0))
  93.                             {
  94.                                 hitLink = true;
  95.                             }
  96.                         }
  97.                         Screen->Line(3, Lightning1X[i], Lightning1Y[i], Lightning1X[i-1], Lightning1Y[i-1], 0x0B, 1, 0, 0, 0, 128);
  98.                         Screen->Line(3, Lightning2X[i], Lightning2Y[i], Lightning2X[i-1], Lightning2Y[i-1], 0x0B, 1, 0, 0, 0, 128);
  99.                         Screen->Line(3, Lightning3X[i], Lightning3Y[i], Lightning3X[i-1], Lightning3Y[i-1], 0x0B, 1, 0, 0, 0, 128);
  100.                         Screen->Line(3, Lightning4X[i], Lightning4Y[i], Lightning4X[i-1], Lightning4Y[i-1], 0x0B, 1, 0, 0, 0, 128);
  101.                        
  102.                         if ( hitLink ) {
  103.                             eweapon e = FireEWeapon(EW_SCRIPT10, Link->X+InFrontX(Link->Dir, 10), Link->Y+InFrontY(Link->Dir, 10), 0, 0, 2, -1, -1, EWF_UNBLOCKABLE);
  104.                             SetEWeaponLifespan(e, EWL_TIMER, 1);
  105.                             SetEWeaponDeathEffect(e, EWD_VANISH, 0);
  106.                             e->DrawYOffset = -1000;
  107.                             if (HitCounter <= 0) HitCounter = 10;
  108.                         }
  109.                        
  110.                         if (dir == DIR_LEFT || dir == DIR_RIGHT)
  111.                         {
  112.                             Screen->Line(3, Lightning1X[i], Lightning1Y[i] - 1, Lightning1X[i-1], Lightning1Y[i-1] - 1, 0x0B, 2, 0, 0, 0, 64);
  113.                             Screen->Line(3, Lightning2X[i], Lightning2Y[i] - 1, Lightning2X[i-1], Lightning2Y[i-1] - 1, 0x0B, 2, 0, 0, 0, 64);
  114.                             Screen->Line(3, Lightning3X[i], Lightning3Y[i] - 1, Lightning3X[i-1], Lightning3Y[i-1] - 1, 0x0B, 2, 0, 0, 0, 64);
  115.                             Screen->Line(3, Lightning4X[i], Lightning4Y[i] - 1, Lightning4X[i-1], Lightning4Y[i-1] - 1, 0x0B, 2, 0, 0, 0, 64);
  116.                         }
  117.                         else
  118.                         {
  119.                             Screen->Line(3, Lightning1X[i] - 1, Lightning1Y[i], Lightning1X[i-1] - 1, Lightning1Y[i-1], 0x0B, 2, 0, 0, 0, 64);
  120.                             Screen->Line(3, Lightning2X[i] - 1, Lightning2Y[i], Lightning2X[i-1] - 1, Lightning2Y[i-1], 0x0B, 2, 0, 0, 0, 64);
  121.                             Screen->Line(3, Lightning3X[i] - 1, Lightning3Y[i], Lightning3X[i-1] - 1, Lightning3Y[i-1], 0x0B, 2, 0, 0, 0, 64);
  122.                             Screen->Line(3, Lightning4X[i] - 1, Lightning4Y[i], Lightning4X[i-1] - 1, Lightning4Y[i-1], 0x0B, 2, 0, 0, 0, 64);
  123.                         }
  124.                     }
  125.                 }
  126.                 if (HitCounter > 0)
  127.                 {
  128.                     if (Link->HP > 0)Screen->Rectangle(6, 0, 0, 256, 176, 1, 1, 0, 0, 0, true, OP_OPAQUE);
  129.                 }
  130.                 Waitframe();
  131.                 for (int i = 24; i > 0; i--)
  132.                 {
  133.                     Screen->Line(3, Lightning1X[i], Lightning1Y[i], Lightning1X[i-1], Lightning1Y[i-1], 0x0B, 1, 0, 0, 0, 128);
  134.                     Screen->Line(3, Lightning2X[i], Lightning2Y[i], Lightning2X[i-1], Lightning2Y[i-1], 0x0B, 1, 0, 0, 0, 128);
  135.                     Screen->Line(3, Lightning3X[i], Lightning3Y[i], Lightning3X[i-1], Lightning3Y[i-1], 0x0B, 1, 0, 0, 0, 128);
  136.                     Screen->Line(3, Lightning4X[i], Lightning4Y[i], Lightning4X[i-1], Lightning4Y[i-1], 0x0B, 1, 0, 0, 0, 128);
  137.                     if (dir == DIR_LEFT || dir == DIR_RIGHT)
  138.                     {
  139.                         Screen->Line(3, Lightning1X[i], Lightning1Y[i] - 1, Lightning1X[i-1], Lightning1Y[i-1] - 1, 0x01, 2, 0, 0, 0, 64);
  140.                         Screen->Line(3, Lightning2X[i], Lightning2Y[i] - 1, Lightning2X[i-1], Lightning2Y[i-1] - 1, 0x01, 2, 0, 0, 0, 64);
  141.                         Screen->Line(3, Lightning3X[i], Lightning3Y[i] - 1, Lightning3X[i-1], Lightning3Y[i-1] - 1, 0x01, 2, 0, 0, 0, 64);
  142.                         Screen->Line(3, Lightning4X[i], Lightning4Y[i] - 1, Lightning4X[i-1], Lightning4Y[i-1] - 1, 0x01, 2, 0, 0, 0, 64);
  143.                     }
  144.                     else
  145.                     {
  146.                         Screen->Line(3, Lightning1X[i] - 1, Lightning1Y[i], Lightning1X[i-1] - 1, Lightning1Y[i-1], 0x01, 2, 0, 0, 0, 64);
  147.                         Screen->Line(3, Lightning2X[i] - 1, Lightning2Y[i], Lightning2X[i-1] - 1, Lightning2Y[i-1], 0x01, 2, 0, 0, 0, 64);
  148.                         Screen->Line(3, Lightning3X[i] - 1, Lightning3Y[i], Lightning3X[i-1] - 1, Lightning3Y[i-1], 0x01, 2, 0, 0, 0, 64);
  149.                         Screen->Line(3, Lightning4X[i] - 1, Lightning4Y[i], Lightning4X[i-1] - 1, Lightning4Y[i-1], 0x01, 2, 0, 0, 0, 64);
  150.                     }
  151.                 }
  152.                 if (HitCounter > 0)
  153.                 {
  154.                     if (Link->HP > 0)Screen->Rectangle(6, 0, 0, 256, 176, 1, 1, 0, 0, 0, true, OP_OPAQUE);
  155.                     HitCounter--;
  156.                 }
  157.                 Waitframe();
  158.                 for (int i = 24; i > 0; i--)
  159.                 {
  160.                     Screen->Line(3, Lightning1X[i], Lightning1Y[i], Lightning1X[i-1], Lightning1Y[i-1], 0x01, 1, 0, 0, 0, 128);
  161.                     Screen->Line(3, Lightning2X[i], Lightning2Y[i], Lightning2X[i-1], Lightning2Y[i-1], 0x01, 1, 0, 0, 0, 128);
  162.                     Screen->Line(3, Lightning3X[i], Lightning3Y[i], Lightning3X[i-1], Lightning3Y[i-1], 0x01, 1, 0, 0, 0, 128);
  163.                     Screen->Line(3, Lightning4X[i], Lightning4Y[i], Lightning4X[i-1], Lightning4Y[i-1], 0x01, 1, 0, 0, 0, 128);
  164.                     if (dir == DIR_LEFT || dir == DIR_RIGHT)
  165.                     {
  166.                         Screen->Line(3, Lightning1X[i], Lightning1Y[i] - 1, Lightning1X[i-1], Lightning1Y[i-1] - 1, 0x0B, 2, 0, 0, 0, 64);
  167.                         Screen->Line(3, Lightning2X[i], Lightning2Y[i] - 1, Lightning2X[i-1], Lightning2Y[i-1] - 1, 0x0B, 2, 0, 0, 0, 64);
  168.                         Screen->Line(3, Lightning3X[i], Lightning3Y[i] - 1, Lightning3X[i-1], Lightning3Y[i-1] - 1, 0x0B, 2, 0, 0, 0, 64);
  169.                         Screen->Line(3, Lightning4X[i], Lightning4Y[i] - 1, Lightning4X[i-1], Lightning4Y[i-1] - 1, 0x0B, 2, 0, 0, 0, 64);
  170.                     }
  171.                     else
  172.                     {
  173.                         Screen->Line(3, Lightning1X[i] - 1, Lightning1Y[i], Lightning1X[i-1] - 1, Lightning1Y[i-1], 0x0B, 2, 0, 0, 0, 64);
  174.                         Screen->Line(3, Lightning2X[i] - 1, Lightning2Y[i], Lightning2X[i-1] - 1, Lightning2Y[i-1], 0x0B, 2, 0, 0, 0, 64);
  175.                         Screen->Line(3, Lightning3X[i] - 1, Lightning3Y[i], Lightning3X[i-1] - 1, Lightning3Y[i-1], 0x0B, 2, 0, 0, 0, 64);
  176.                         Screen->Line(3, Lightning4X[i] - 1, Lightning4Y[i], Lightning4X[i-1] - 1, Lightning4Y[i-1], 0x0B, 2, 0, 0, 0, 64);
  177.                     }
  178.                 }
  179.                 Waitframe();
  180.                 for (int i = 24; i > 0; i--)
  181.                 {
  182.                     Screen->Line(3, Lightning1X[i], Lightning1Y[i], Lightning1X[i-1], Lightning1Y[i-1], 0x01, 1, 0, 0, 0, 128);
  183.                     Screen->Line(3, Lightning2X[i], Lightning2Y[i], Lightning2X[i-1], Lightning2Y[i-1], 0x01, 1, 0, 0, 0, 128);
  184.                     Screen->Line(3, Lightning3X[i], Lightning3Y[i], Lightning3X[i-1], Lightning3Y[i-1], 0x01, 1, 0, 0, 0, 128);
  185.                     Screen->Line(3, Lightning4X[i], Lightning4Y[i], Lightning4X[i-1], Lightning4Y[i-1], 0x01, 1, 0, 0, 0, 128);
  186.                     if (dir == DIR_LEFT || dir == DIR_RIGHT)
  187.                     {
  188.                         Screen->Line(3, Lightning1X[i], Lightning1Y[i] - 1, Lightning1X[i-1], Lightning1Y[i-1] - 1, 0x01, 2, 0, 0, 0, 64);
  189.                         Screen->Line(3, Lightning2X[i], Lightning2Y[i] - 1, Lightning2X[i-1], Lightning2Y[i-1] - 1, 0x01, 2, 0, 0, 0, 64);
  190.                         Screen->Line(3, Lightning3X[i], Lightning3Y[i] - 1, Lightning3X[i-1], Lightning3Y[i-1] - 1, 0x01, 2, 0, 0, 0, 64);
  191.                         Screen->Line(3, Lightning4X[i], Lightning4Y[i] - 1, Lightning4X[i-1], Lightning4Y[i-1] - 1, 0x01, 2, 0, 0, 0, 64);
  192.                     }
  193.                     else
  194.                     {
  195.                         Screen->Line(3, Lightning1X[i] - 1, Lightning1Y[i], Lightning1X[i-1] - 1, Lightning1Y[i-1], 0x01, 2, 0, 0, 0, 64);
  196.                         Screen->Line(3, Lightning2X[i] - 1, Lightning2Y[i], Lightning2X[i-1] - 1, Lightning2Y[i-1], 0x01, 2, 0, 0, 0, 64);
  197.                         Screen->Line(3, Lightning3X[i] - 1, Lightning3Y[i], Lightning3X[i-1] - 1, Lightning3Y[i-1], 0x01, 2, 0, 0, 0, 64);
  198.                         Screen->Line(3, Lightning4X[i] - 1, Lightning4Y[i], Lightning4X[i-1] - 1, Lightning4Y[i-1], 0x01, 2, 0, 0, 0, 64);
  199.                     }
  200.                 }
  201.                 Waitframe();
  202.             }
  203.         }
  204.         while(HitCounter > 0)
  205.         {
  206.             if (Link->HP > 0) Screen->Rectangle(6, 0, 0, 256, 176, 1, 1, 0, 0, 0, true, OP_OPAQUE);
  207.             Waitframe();
  208.             if (Link->HP > 0) Screen->Rectangle(6, 0, 0, 256, 176, 1, 1, 0, 0, 0, true, OP_OPAQUE);
  209.             HitCounter--;
  210.             Waitframe();
  211.             Waitframe();
  212.             Waitframe();
  213.         }
  214.     }
  215.     void ShiftArray(int Array)
  216.     {
  217.         for (int i = SizeOfArray(Array)-1; i > 0; i--)
  218.         {
  219.             Array[i] = Array[i-1];
  220.         }
  221.     }
  222. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement