/* Grappling Beam 2.0, by szmol96 http://www.jazz2online.com/snippets/92/grappling-beam/ */ /*Grappling Beam*/ /*Author: szmol96*/ void GrapplingBeam(jjOBJ@ beam) { if (beam.state == STATE::START) { beam.state = STATE::FLY; jjSample(p.xPos, p.yPos, SOUND::AMMO_ICEPU4, 0, 9000); } 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; if (jjGameTicks% 25 == 0) jjSample(p.xPos, p.yPos, SOUND::COMMON_SHIELD1, 0, 10000); if (jjGameTicks% 25 == 0) jjSample(p.xPos, p.yPos, SOUND::COMMON_SHIELD1, 0, 11000); } for(float pos = 0; pos 400) beam.delete(); beam.frameID = (++beam.counter >> 1) % 9; beam.determineCurFrame(); beam.draw(); } void GrapplingBeamPU(jjOBJ@ beam) { if (beam.state == STATE::START) { beam.state = STATE::FLY; jjSample(p.xPos, p.yPos, SOUND::AMMO_SPZBL2, 0, 11000); jjSample(p.xPos, p.yPos, SOUND::AMMO_ICEPU4, 0, 9000); } 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; if (jjGameTicks% 25 == 0) jjSample(p.xPos, p.yPos, SOUND::COMMON_SHIELD1, 0, 10000); if (jjGameTicks% 25 == 0) jjSample(p.xPos, p.yPos, SOUND::COMMON_SHIELD1, 0, 11000); } for(float pos = 0; pos 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 = GrapplingBeamPU; jjObjectPresets[OBJECT::FIREBALLBULLETPU].special = jjObjectPresets[OBJECT::FIREBALLBULLETPU].determineCurAnim(ANIM::PICKUPS, 85); } void onPlayer(jjPLAYER@ p) { p.ammo[8] = 3; }