Not sure what's wrong. Bolded line is the issue.
Code: Select all
turret = class:new()
function turret:init(x, y)
self.x = x
self.y = y
self.id = id
self:randomtime()
self.timer = self.time-0.5
self.autodelete = true
self.graphic = Turret
self.quad = Turretquad
--PHYSICS STUFF
self.cox = x
self.coy = y
self.x = x-12/16
self.y = y-14/16
self.speedy = 0
self.speedx = 0
self.width = 12/16
self.height = 14/16
self.static = false
self.active = true
self.category = 9
self.parent = nil
self.portaloverride = true
self.lasertable = {}
times = 16 --Turret Death time D:
self.cox = x
self.coy = y
self.dir = dir
self.r = r
time2 = 16 -- Test for Laser duration
self.enabled = true
self.mask = { true,
false, false, false, false, false,
false, true, false, true, true,
false, false, true, false, false,
true, true, false, false, true,
false, true, true, false, false,
true, false, true, true, true}
self.emancipatecheck = true
self.userect = adduserect(self.x, self.y, 12/16, 12/16, self)
--IMAGE STUFF
self.drawable = true
self.graphic = Turret
self.quad = Turretquad
self.offsetX = 10
self.offsetY = 6
self.quadcenterX = 6
self.quadcenterY = 6
self.rotation = 0 --for portals
self.falling = false
self.destroying = false
self.outtable = {}
self.portaledframe = false
end
function turret:update(dt)
self.timer = self.timer + dt
if self.timer > self.time and self.x > splitxscroll[1] and self.x < splitxscroll[1]+width+2 then
if self:fire() then
self.timer = 0
self:randomtime()
end
end
local friction = boxfrictionair
if self.falling == false then
friction = boxfriction
end
if not self.pushed then
if self.speedx > 0 then
self.speedx = self.speedx - friction*dt
if self.speedx < 0 then
self.speedx = 0
end
else
self.speedx = self.speedx + friction*dt
if self.speedx > 0 then
self.speedx = 0
end
end
else
self.pushed = false
end
if self.parent then
local oldx = self.x
local oldy = self.y
self.x = self.parent.x+math.sin(-self.parent.pointingangle)*0.3
self.y = self.parent.y-math.cos(-self.parent.pointingangle)*0.3
if self.portaledframe == false then
for h, u in pairs(emancipationgrills) do
if u.dir == "hor" then
if inrange(self.x+6/16, u.startx-1, u.endx, true) and inrange(u.y-14/16, oldy, self.y, true) then
self:emancipate(h)
end
else
if inrange(self.y+6/16, u.starty-1, u.endy, true) and inrange(u.x-14/16, oldx, self.x, true) then
self:emancipate(h)
end
end
end
end
end
self.userect.x = self.x
self.userect.y = self.y
--check if offscreen
if self.y > 17 then
self:destroy()
end
self.portaledframe = false
if self.destroying then
return true
else
return false
end
end
function turret:fire()
if #objects["bulletbill"] >= maximumbulletbills then
return false
end
--get nearest player
local pl = 1
for i = 2, players do
if math.abs(objects["player"][i].x + 14/16 - self.x) < math.abs(objects["player"][pl].x + 14/16 - self.x) then
pl = i
end
end
if objects["player"][pl].x + 14/16 > self.x + bulletbillrange then
table.insert(objects["bulletbill"], bulletbill:new(self.x, self.y, "right"))
return true
elseif self:used() then
end
end
function turret:randomtime()
local rand = math.random(bulletbilltimemin*10, bulletbilltimemax*10)/10
self.time = rand
end
function turret:leftcollide(a, b)
if a == "button" then
self.y = b.y - self.height
self.x = b.x + b.width - 0.01
if self.speedy > 0 then
self.speedy = 0
end
return false
elseif a == "player" then
self.pushed = true
return false
end
end
function turret:rightcollide(a, b)
if a == "button" then
self.y = b.y - self.height
self.x = b.x - self.width+0.01
if self.speedy > 0 then
self.speedy = 0
end
return false
elseif a == "player" then
self.pushed = true
return false
end
end
function turret:floorcollide(a, b)
if self.falling then
self.falling = false
end
if a == "goomba" or a == "bulletbill" then
b:stomp()
addpoints(200, self.x, self.y)
playsound(stompsound)
self.falling = true
return false
end
end
function turret:passivecollide(a, b)
if a == "player" then
if self.x+self.width > b.x+b.width then
self.x = b.x+b.width
else
self.x = b.x-self.width
end
end
end
function turret:startfall()
self.falling = true
end
function turret:emancipate()
if self.parent then
self.parent:cubeemancipate()
end
self:destroy()
end
function turret:destroy()
self.userect.delete = true
self.destroying = true
for i = 1, #self.outtable do
if self.outtable[i].input then
self.outtable[i]:input("toggle")
end
end
end
function turret:addoutput(a)
table.insert(self.outtable, a)
end
function turret:used(id)
self.parent = objects["player"][id]
self.active = false
objects["player"][id]:pickupturret(self) <--------------------------------------------------
end
function turret:dropped()
self.parent = nil
self.active = true
end
function turret:portaled()
self.portaledframe = true
end
----------------------
bulletbill = class:new()
function bulletbill:init(x, y, dir)
self.startx = x-14/16
--PHYSICS STUFF
self.x = self.startx
self.y = y-14/16
self.speedy = 0
if dir == "left" then
self.speedx = -bulletbillspeed
self.customscissor = {self.x-18/16, self.y-2/16, 1, 1}
else
self.speedx = bulletbillspeed
self.customscissor = {self.x+14/16, self.y-2/16, 1, 1}
end
self.width = 12/16
self.height = 12/16
self.static = false
self.active = true
self.gravity = 0
self.rotation = 0
self.autodelete = true
self.timer = 0
--IMAGE STUFF
self.drawable = true
self.quad = Laserquad[spriteset]
self.offsetX = 6
self.offsetY = 2
self.quadcenterX = 8
self.quadcenterY = 8
self.graphic = laserimg
self.category = 11
self.animationdirection = dir
self.mask = { true,
true, false, false, false, true,
true, true, true, true, true,
true, false, true, true, true,
true, true, true, true, true,
true, true, true, true, true,
true, true, true, true, true}
self.shot = false
playsound(Lasersound)
end
function bulletbill:update(dt)
if self.x < self.startx - 1 or self.x > self.startx + 1 then
self.customscissor = nil
end
if self.shot then
self.speedy = self.speedy + shotgravity*dt
self.x = self.x+self.speedx*dt
self.y = self.y+self.speedy*dt
--check if goomba offscreen
if self.y > 18 then
return true
else
return false
end
else
self.timer = self.timer + dt
if self.timer >= bulletbilllifetime then
return true
end
if self.rotation ~= 0 then
if math.abs(math.abs(self.rotation)-math.pi/2) < 0.1 then
self.rotation = -math.pi/2
else
self.rotation = 0
end
end
if self.speedx < 0 then
self.animationdirection = "left"
elseif self.speedx > 0 then
self.animationdirection = "right"
elseif self.speedy < 0 then
self.animationdirection = "right"
elseif self.speedy > 0 then
self.animationdirection = "left"
end
end
end
function bulletbill:rightcollide(a, b)
self:globalcollide(a, b)
return false
end
function bulletbill:leftcollide(a, b)
self:globalcollide(a, b)
return false
end
function bulletbill:floorcollide(a, b)
self:globalcollide(a, b)
return false
end
function bulletbill:globalcollide(a, b)
end
function bulletbill:portaled()
self.killstuff = true
end