Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //start Bomb Arrows
- lweapon script BombArrow
- {
- void run(int bombDamage, bool hurtsLink)
- {
- //Initialize the arrow
- this->X = Hero->X + dirX(Hero->Dir) * 8;
- this->Y = Hero->Y + dirY(Hero->Dir) * 8;
- this->Dir = Hero->Dir;
- //Loop while it lives
- while(this->DeadState != WDS_DEAD)
- {
- int x = this->X + this->HitXOffset + 4, y = this->Y + this->HitYOffset + 4, oy = y;
- for(int q = 0; q < 3; ++q)
- {
- y = oy;
- for(int p = 0; p < 3; ++p)
- {
- if(Screen->isSolid(x,y)
- || ComboFI(ComboAt(x,y),CF_BOMB))
- {
- //Kill the arrow; it collided with something
- this->DeadState = WDS_DEAD;
- q = 3;
- break;
- }
- y += 4;
- }
- x += 4;
- }
- if(this->DeadState == WDS_DEAD) break;
- Waitframe();
- }
- //When the arrow dies, explode!
- lweapon bomb = CreateLWeaponAt(LW_BOMBBLAST, this->X, this->Y);
- bomb->Damage = bombDamage;
- if(hurtsLink)
- {
- eweapon bomb = CreateEWeaponAt(EW_BOMBBLAST, this->X, this->Y);
- bomb->Damage = bombDamage;
- }
- }
- //start extra functions
- /**
- * Returns 1 if the dir is rightward, -1 if leftward, 0 if neither
- */
- int dirX(int dir) //start
- {
- switch(dir)
- {
- case DIR_RIGHT: case DIR_RIGHTUP: case DIR_RIGHTDOWN:
- return 1;
- case DIR_LEFT: case DIR_LEFTUP: case DIR_LEFTDOWN:
- return -1;
- default:
- return 0;
- }
- } //end
- /**
- * Returns 1 if the dir is downward, -1 if upward, 0 if neither
- */
- int dirY(int dir) //start
- {
- switch(dir)
- {
- case DIR_DOWN: case DIR_LEFTDOWN: case DIR_RIGHTDOWN:
- return 1;
- case DIR_UP: case DIR_LEFTUP: case DIR_RIGHTUP:
- return -1;
- default:
- return 0;
- }
- } //end
- //end extra functions
- }
- //end Bomb Arrows
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement