Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const int T_CHAIN = 196; //Mace Chain
- const int T_HEAD = 197; //Mace Head
- //Gives an enemy a mace to swing at Link
- ffc script MaceEnemy{
- void run(int num, int maxradius, int damage, int cset){
- int counter = Rand(360);
- int spintimer;
- int radius = maxradius;
- int x; int y;
- int ret;
- Waitframes(4);
- npc e = Screen->LoadNPC(num);
- while(e->isValid()){
- spintimer = 0;
- //spin the ball
- while(spintimer < 240+Rand(120) && e->isValid()){
- SpinBall(radius,counter,num,damage,false,cset);
- if(spintimer%90 == 0) Game->PlaySound(SFX_BRANG);
- spintimer++;
- counter = (counter+3)%360;
- Waitframe();
- }
- //pull the ball in
- while(radius > 20 && e->isValid()){
- SpinBall(radius,counter,num,damage,false,cset);
- radius -= 2;
- counter = (counter+3)%360;
- Waitframe();
- }
- spintimer = 0;
- //spin very fast with small radius
- while(spintimer < 120 && e->isValid()){
- SpinBall(radius,counter,num,damage,false,cset);
- if(spintimer%30 == 0) Game->PlaySound(SFX_BRANG);
- spintimer++;
- counter = (counter+10)%360;
- Waitframe();
- }
- //throw at Link
- x = Link->X;
- y = Link->Y;
- counter = 4;
- ret = 1;
- while(e->isValid() && counter > 0){
- SpinBall(counter,ArcTan((x-e->X),(y-e->Y)),num,damage,true,cset);
- if(Abs(x-(e->X + RadianCos(ArcTan((x-e->X),(y-e->Y)))*counter)) < 4
- && Abs(y-(e->Y + RadianSin(ArcTan((x-e->X),(y-e->Y)))*counter)) < 4){
- if(ret == 1){
- Game->PlaySound(SFX_HAMMER);
- Pause(counter,ArcTan((x-e->X),(y-e->Y)),num,damage,cset);
- }
- //return
- ret = -1;
- }
- counter += 4*ret;
- Waitframe();
- }
- Pause(0,0,num,damage,cset);
- //bring back to main spin position
- counter = Floor(ArcTan((x-e->X),(y-e->Y))*180/PI);
- radius = 0;
- while(radius < maxradius && e->isValid()){
- SpinBall(radius,counter,num,damage,false,cset);
- radius += 2;
- counter = (counter+3)%360;
- Waitframe();
- }
- }
- Screen->ClearSprites(SL_EWPNS);
- }
- void Pause(int r, int c, int n, int d, int cset){
- for(int i=0;i<10;i++){
- SpinBall(r,c,n,d,true,cset);
- Waitframe();
- }
- }
- void SpinBall(int radius, int counter, int num, int damage, bool radians, int cset){
- npc e = Screen->LoadNPC(num);
- Screen->ClearSprites(SL_EWPNS);
- for(int i=0;i<5;i++){
- eweapon ball = Screen->CreateEWeapon(EW_SCRIPT1);
- if(i<4) ball->Tile = T_CHAIN;
- else ball->Tile = T_HEAD;
- ball->CSet = cset;
- ball->Damage = damage;
- if(radians){
- ball->X = e->X + RadianCos(counter)*(radius*(i+1)/5);
- ball->Y = e->Y + RadianSin(counter)*(radius*(i+1)/5);
- }else{
- ball->X = e->X + Cos(counter)*(radius*(i+1)/5);
- ball->Y = e->Y + Sin(counter)*(radius*(i+1)/5);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement