Grappling Beam

Version:

1.0

Added on:

29 Oct 2013 23:06

Tags:

No tags added for this snippet.

Description:
Uses the Fireball Gun as the Grappling beam, so it needs /fireball to be on. It can be used without mouse aiming, but that is not recommended.
You can also hurt enemies with it.
Many thanks to Sir Ementaler for helping me.
/*GrapplingBeam*/
/*Author: szmol96*/

void GrapplingBeam(jjOBJ@ beam) {
  if (beam.state == STATE::START) beam.state = STATE::FLY;
  jjPLAYER@ p = jjPlayers[beam.creatorID];
  
  beam.xPos = beam.xPos + beam.xSpeed + (beam.xAcc * 2);
  beam.yPos = beam.yPos + beam.ySpeed + (beam.yAcc * 2);
  
  float dx = beam.xPos - p.xPos;
  float dy = beam.yPos - p.yPos;
  float length = sqrt(dx*dx+dy*dy);
  
  
  if (jjMaskedPixel(beam.xPos, beam.yPos)) {
    beam.xSpeed = 0;
    beam.ySpeed = 0;
    beam.xAcc = 0;
    beam.yAcc = 0;
    p.xSpeed = 30*dx/length;
    p.ySpeed = 30*dy/length;
  }
  
  for(float pos = 0; pos<length; pos += 1){
  jjDrawSpriteFromCurFrame(p.xPos + pos * dx/length, p.yPos + pos * dy/length, beam.curFrame, 0, SPRITE::NORMAL, 0, 4, 4, -1);
  }
  
  if (p.keyFire == false || length > 400) beam.delete();
  
  beam.frameID = (++beam.counter >> 1) % 9;
  beam.determineCurFrame();
  beam.draw();
}

void onLevelLoad() {
  jjWeapons[WEAPON::GUN8].style = WEAPON::MISSILE;
  jjObjectPresets[OBJECT::FIREBALLBULLET].behavior = GrapplingBeam;
  jjObjectPresets[OBJECT::FIREBALLBULLET].special = jjObjectPresets[OBJECT::FIREBALLBULLET].determineCurAnim(ANIM::PICKUPS, 85);
  jjObjectPresets[OBJECT::FIREBALLBULLETPU].behavior = GrapplingBeam;
  jjObjectPresets[OBJECT::FIREBALLBULLETPU].special = jjObjectPresets[OBJECT::FIREBALLBULLETPU].determineCurAnim(ANIM::WITCH, 3);
}

void onPlayer(jjPLAYER@ p) {
  p.ammo[8] = 3;
}