1fireball = class:new() 2 3function fireball:init(x, y, dir, v) 4 --PHYSICS STUFF 5 self.y = y+4/16 6 self.speedy = 0 7 if dir == "right" then 8 self.speedx = fireballspeed 9 self.x = x+6/16 10 else 11 self.speedx = -fireballspeed 12 self.x = x 13 end 14 self.width = 8/16 15 self.height = 8/16 16 self.active = true 17 self.static = false 18 self.category = 13 19 20 self.mask = { true, 21 false, true, false, false, true, 22 false, true, false, true, false, 23 false, true, false, true, false, 24 true, true, false, false, false, 25 false, true, false, false, true, 26 false, false, false, false, true} 27 28 self.destroy = false 29 self.destroysoon = false 30 --self.gravity = 40 31 32 --IMAGE STUFF 33 self.drawable = true 34 self.graphic = fireballimg 35 self.quad = fireballquad[1] 36 self.offsetX = 4 37 self.offsetY = 4 38 self.quadcenterX = 4 39 self.quadcenterY = 4 40 41 self.fireballthrower = v 42 43 self.rotation = 0 --for portals 44 self.timer = 0 45 self.quadi = 1 46end 47 48function fireball:update(dt) 49 --rotate back to 0 (portals) 50 self.rotation = 0 51 52 --animate 53 self.timer = self.timer + dt 54 if self.destroysoon == false then 55 while self.timer > staranimationdelay do 56 self.quadi = self.quadi + 1 57 if self.quadi == 5 then 58 self.quadi = 1 59 end 60 self.quad = fireballquad[self.quadi] 61 self.timer = self.timer - staranimationdelay 62 end 63 else 64 while self.timer > staranimationdelay do 65 self.quadi = self.quadi + 1 66 if self.quadi == 8 then 67 self.destroy = true 68 self.quadi = 7 69 end 70 71 self.quad = fireballquad[self.quadi] 72 self.timer = self.timer - staranimationdelay 73 end 74 end 75 76 if self.x < xscroll-1 or self.x > xscroll+width+1 or self.y > 15 and self.active then 77 self.fireballthrower:fireballcallback() 78 self.destroy = true 79 end 80 81 if self.destroy then 82 return true 83 else 84 return false 85 end 86end 87 88function fireball:leftcollide(a, b) 89 self.x = self.x-.5 90 self:hitstuff(a, b) 91 92 self.speedx = fireballspeed 93 return false 94end 95 96function fireball:rightcollide(a, b) 97 self:hitstuff(a, b) 98 99 self.speedx = -fireballspeed 100 return false 101end 102 103function fireball:floorcollide(a, b) 104 if a ~= "tile" and a ~= "portalwall" then 105 self:hitstuff(a, b) 106 end 107 108 self.speedy = -fireballjumpforce 109 return false 110end 111 112function fireball:ceilcollide(a, b) 113 self:hitstuff(a, b) 114end 115 116function fireball:passivecollide(a, b) 117 self:ceilcollide(a, b) 118 return false 119end 120 121function fireball:hitstuff(a, b) 122 if a == "tile" or a == "bulletbill" or a == "portalwall" or a == "spring" then 123 self:explode() 124 playsound(blockhitsound) 125 126 elseif a == "goomba" or a == "koopa" or a == "hammerbro" or a == "plant" or a == "cheep" or a == "bowser" or a == "squid" or a == "cheep" or a == "flyingfish" or a == "lakito" then 127 if a ~= "koopa" or b.t ~= "beetle" then 128 b:shotted("right") 129 if a ~= "bowser" then 130 addpoints(firepoints[a], self.x, self.y) 131 end 132 end 133 self:explode() 134 end 135end 136 137function fireball:explode() 138 if self.active then 139 self.fireballthrower:fireballcallback() 140 141 self.destroysoon = true 142 self.quadi = 5 143 self.quad = fireballquad[self.quadi] 144 self.active = false 145 end 146end