Guest User

Untitled

a guest
Feb 12th, 2014
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.27 KB | None | 0 0
  1. script_spell FantasySeal {
  2.  
  3. let imgSpell = GetCurrentScriptDirectory~"reimu-spell.png";
  4. let SfxSpell1 = GetCurrentScriptDirectory~"spell1.wav";
  5. let SfxSpell2 = GetCurrentScriptDirectory~"spell2.wav";
  6.  
  7. @Initialize {
  8. LoadGraphic(imgSpell);
  9. LoadSE(SfxSpell1);
  10. LoadSE(SfxSpell2);
  11. SetPlayerInvincibility(240);
  12. ForbidShot(true);
  13. // SetSpeed(3, 3);
  14. Tmain;
  15. }
  16.  
  17. task TBexplosion(x, y, color) {
  18. let object = Obj_Create(OBJ_SPELL);
  19. let radius = 0;
  20.  
  21. Obj_SetAlpha(object, 200);
  22. ObjEffect_SetTexture(object, imgSpell);
  23. ObjEffect_SetRenderState(object, ALPHA);
  24. ObjEffect_CreateVertex(object, 4);
  25. ObjEffect_SetPrimitiveType(object,PRIMITIVE_TRIANGLEFAN);
  26. ObjEffect_SetVertexUV(object, 0, 128, 0 + 128 * color);
  27. ObjEffect_SetVertexUV(object, 1, 256, 0 + 128 * color);
  28. ObjEffect_SetVertexUV(object, 2, 256,128 + 128 * color);
  29. ObjEffect_SetVertexUV(object, 3, 128,128 + 128 * color);
  30.  
  31. let slide = 50;
  32. ascent(i in 0..slide) {
  33. radius += 8;
  34. let alpha = 200 * (slide - i) / slide;
  35.  
  36. ObjEffect_SetVertexColor(object, 0, alpha, 255, 255, 255);
  37. ObjEffect_SetVertexColor(object, 1, alpha, 255, 255, 255);
  38. ObjEffect_SetVertexColor(object, 2, alpha, 255, 255, 255);
  39. ObjEffect_SetVertexColor(object, 3, alpha, 255, 255, 255);
  40. ObjEffect_SetVertexXY(object, 0, x - radius, y - radius);
  41. ObjEffect_SetVertexXY(object, 1, x + radius, y - radius);
  42. ObjEffect_SetVertexXY(object, 2, x + radius, y + radius);
  43. ObjEffect_SetVertexXY(object, 3, x - radius, y + radius);
  44. yield;
  45. SetIntersectionCircle(x, y, radius, 3, true);
  46. }
  47. }
  48.  
  49. task TBorb(angle, color, target) {
  50. let object = Obj_Create(OBJ_SPELL);
  51. let x = GetPlayerX;
  52. let y = GetPlayerY;
  53. let shotAngle = angle;
  54. let imgAngle = 0;
  55. let radius = 1;
  56.  
  57. Obj_SetAlpha(object, 200);
  58. ObjEffect_SetTexture(object, imgSpell);
  59. ObjEffect_SetRenderState(object, ADD);
  60. ObjEffect_CreateVertex(object, 4);
  61. ObjEffect_SetPrimitiveType(object,PRIMITIVE_TRIANGLEFAN);
  62. ObjEffect_SetVertexUV(object, 0, 1, 0 + 128 * color);
  63. ObjEffect_SetVertexUV(object, 1, 127, 0 + 128 * color);
  64. ObjEffect_SetVertexUV(object, 2, 127,128 + 128 * color);
  65. ObjEffect_SetVertexUV(object, 3, 1,128 + 128 * color);
  66.  
  67. let slide = 40;
  68. ascent(i in 0..slide) {
  69. let speed = 6 * (slide - i) / slide;
  70. x += speed * cos(shotAngle);
  71. y += speed * sin(shotAngle);
  72. radius += (64 - radius) * 0.05;
  73.  
  74. ObjEffect_SetVertexXY(object, 0, x - radius, y - radius);
  75. ObjEffect_SetVertexXY(object, 1, x + radius, y - radius);
  76. ObjEffect_SetVertexXY(object, 2, x + radius, y + radius);
  77. ObjEffect_SetVertexXY(object, 3, x - radius, y + radius);
  78. SetIntersectionCircle(x, y, radius, 0.3, true);
  79. yield;
  80. }
  81.  
  82. let enemyTarget = -1;
  83. let enemyDist = 100000;
  84. let enemyAngle = angle + 180;
  85. let targetBoss = false;
  86.  
  87. // Find nearest enemy
  88. if(IsBossExisting()) {
  89. targetBoss = true;
  90. } else {
  91. ascent(i in EnumEnemyBegin..EnumEnemyEnd) {
  92. let testEnemyTarget = EnumEnemyGetID(i);
  93. if(GetEnemyInfo(testEnemyTarget, ENEMY_LIFE) > 0 && GetEnemyInfo(testEnemyTarget, ENEMY_LIFE) < 9000) {
  94. let testDist = ((GetEnemyInfo(testEnemyTarget, ENEMY_X) - GetPlayerX) *
  95. (GetEnemyInfo(testEnemyTarget, ENEMY_X) - GetPlayerX)) +
  96. ((GetEnemyInfo(testEnemyTarget, ENEMY_Y) - GetPlayerY) *
  97. (GetEnemyInfo(testEnemyTarget, ENEMY_Y) - GetPlayerY));
  98. if(testDist < enemyDist) {
  99. enemyTarget = testEnemyTarget;
  100. enemyDist = testDist;
  101. }
  102. }
  103. }
  104. }
  105.  
  106. let speed = 0;
  107. loop(120) {
  108. // Aim at enemy
  109. if(targetBoss || enemyTarget != -1) {
  110. if(targetBoss) {
  111. enemyAngle = atan2(GetEnemyY - y, GetEnemyX - x);
  112. } else {
  113. enemyAngle = atan2(GetEnemyInfo(enemyTarget, ENEMY_Y) - y, GetEnemyInfo(enemyTarget, ENEMY_X) - x);
  114. }
  115. let angleDifference = shotAngle - enemyAngle;
  116.  
  117. while(angleDifference < -180) {
  118. angleDifference += 360;
  119. }
  120. while(angleDifference > 180) {
  121. angleDifference -= 360;
  122. }
  123.  
  124. if(angleDifference < 0) {
  125. shotAngle += 24;
  126. } else if(angleDifference > 0) {
  127. shotAngle -= 24
  128. }
  129. }
  130.  
  131. speed += 0.05;
  132. x += speed * cos(shotAngle);
  133. y += speed * sin(shotAngle);
  134.  
  135. ObjEffect_SetVertexXY(object, 0, x - radius * sin(-angle) - radius * cos(angle), y - radius * cos(-angle) - radius * sin(angle));
  136. ObjEffect_SetVertexXY(object, 1, x + radius * sin(-angle) - radius * cos(angle), y + radius * cos(-angle) - radius * sin(angle));
  137. ObjEffect_SetVertexXY(object, 2, x + radius * sin(-angle) + radius * cos(angle), y + radius * cos(-angle) + radius * sin(angle));
  138. ObjEffect_SetVertexXY(object, 3, x - radius * sin(-angle) + radius * cos(angle), y - radius * cos(-angle) + radius * sin(angle));
  139. SetIntersectionCircle(x, y, 64, 0.3, true);
  140. yield;
  141. }
  142. TBexplosion(x, y, color);
  143. PlaySE(SfxSpell2);
  144. Obj_Delete(object);
  145. }
  146.  
  147. task Tmain {
  148. loop(50){yield}
  149.  
  150. // Orb
  151. ascent(i in 0..4) {
  152. TBorb(i * 45, i, 2*i);
  153. TBorb(180 + i * 45, i, 2*i+1);
  154. PlaySE(SfxSpell1);
  155. loop(10){yield}
  156. }
  157.  
  158. loop(180){yield}
  159. ForbidShot(false);
  160. End();
  161. }
  162.  
  163. @MainLoop {
  164. CollectItems();
  165. yield;
  166. }
  167.  
  168. @Finalize {
  169. DeleteGraphic(imgSpell);
  170. }
  171. }
Advertisement
Add Comment
Please, Sign In to add comment