Advertisement
Venrob

Ball and Chain CSet edit

Mar 12th, 2019
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.73 KB | None | 0 0
  1. const int T_CHAIN = 196; //Mace Chain
  2. const int T_HEAD = 197; //Mace Head
  3. //Gives an enemy a mace to swing at Link
  4. ffc script MaceEnemy{
  5. void run(int num, int maxradius, int damage, int cset){
  6. int counter = Rand(360);
  7. int spintimer;
  8. int radius = maxradius;
  9. int x; int y;
  10. int ret;
  11. Waitframes(4);
  12. npc e = Screen->LoadNPC(num);
  13. while(e->isValid()){
  14. spintimer = 0;
  15. //spin the ball
  16. while(spintimer < 240+Rand(120) && e->isValid()){
  17. SpinBall(radius,counter,num,damage,false,cset);
  18. if(spintimer%90 == 0) Game->PlaySound(SFX_BRANG);
  19. spintimer++;
  20. counter = (counter+3)%360;
  21. Waitframe();
  22. }
  23. //pull the ball in
  24. while(radius > 20 && e->isValid()){
  25. SpinBall(radius,counter,num,damage,false,cset);
  26. radius -= 2;
  27. counter = (counter+3)%360;
  28. Waitframe();
  29. }
  30. spintimer = 0;
  31. //spin very fast with small radius
  32. while(spintimer < 120 && e->isValid()){
  33. SpinBall(radius,counter,num,damage,false,cset);
  34. if(spintimer%30 == 0) Game->PlaySound(SFX_BRANG);
  35. spintimer++;
  36. counter = (counter+10)%360;
  37. Waitframe();
  38. }
  39. //throw at Link
  40. x = Link->X;
  41. y = Link->Y;
  42. counter = 4;
  43. ret = 1;
  44. while(e->isValid() && counter > 0){
  45. SpinBall(counter,ArcTan((x-e->X),(y-e->Y)),num,damage,true,cset);
  46. if(Abs(x-(e->X + RadianCos(ArcTan((x-e->X),(y-e->Y)))*counter)) < 4
  47. && Abs(y-(e->Y + RadianSin(ArcTan((x-e->X),(y-e->Y)))*counter)) < 4){
  48. if(ret == 1){
  49. Game->PlaySound(SFX_HAMMER);
  50. Pause(counter,ArcTan((x-e->X),(y-e->Y)),num,damage,cset);
  51. }
  52. //return
  53. ret = -1;
  54. }
  55. counter += 4*ret;
  56. Waitframe();
  57. }
  58. Pause(0,0,num,damage,cset);
  59. //bring back to main spin position
  60. counter = Floor(ArcTan((x-e->X),(y-e->Y))*180/PI);
  61. radius = 0;
  62. while(radius < maxradius && e->isValid()){
  63. SpinBall(radius,counter,num,damage,false,cset);
  64. radius += 2;
  65. counter = (counter+3)%360;
  66. Waitframe();
  67. }
  68. }
  69. Screen->ClearSprites(SL_EWPNS);
  70. }
  71. void Pause(int r, int c, int n, int d, int cset){
  72. for(int i=0;i<10;i++){
  73. SpinBall(r,c,n,d,true,cset);
  74. Waitframe();
  75. }
  76. }
  77. void SpinBall(int radius, int counter, int num, int damage, bool radians, int cset){
  78. npc e = Screen->LoadNPC(num);
  79. Screen->ClearSprites(SL_EWPNS);
  80. for(int i=0;i<5;i++){
  81. eweapon ball = Screen->CreateEWeapon(EW_SCRIPT1);
  82. if(i<4) ball->Tile = T_CHAIN;
  83. else ball->Tile = T_HEAD;
  84. ball->CSet = cset;
  85. ball->Damage = damage;
  86. if(radians){
  87. ball->X = e->X + RadianCos(counter)*(radius*(i+1)/5);
  88. ball->Y = e->Y + RadianSin(counter)*(radius*(i+1)/5);
  89. }else{
  90. ball->X = e->X + Cos(counter)*(radius*(i+1)/5);
  91. ball->Y = e->Y + Sin(counter)*(radius*(i+1)/5);
  92. }
  93. }
  94. }
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement