1bowser = class:new() 2 3function bowser:init(x, y, i) 4 --PHYSICS STUFF 5 self.x = x+4 6 self.y = y-27/16 7 self.level = i or marioworld 8 self.startx = x+12 9 self.starty = y 10 self.speedy = 0 11 self.speedx = 0 12 self.width = 30/16 13 self.height = 28/16 14 self.static = false 15 self.active = true 16 self.emancipatecheck = true 17 self.category = 16 18 19 self.mask = { true, 20 false, false, false, false, true, 21 false, true, false, true, false, 22 false, false, true, true, false, 23 true, true, false, false, true, 24 false, true, true, false, false, 25 true, false, true, true, true} 26 27 self.gravity = bowsergravity 28 29 --IMAGE STUFF 30 self.drawable = true 31 self.graphic = bowserimg 32 self.quad = bowserquad[1][1] 33 self.walkframe = 1 34 self.offsetX = 14 35 self.offsetY = -2 36 self.quadcenterX = 16 37 self.quadcenterY = 12 38 39 self.rotation = 0 --for portals 40 self.jump = false 41 42 self.animationtimer = 0 43 self.animationdirection = "right" 44 self.fireframe = 1 45 self.timer = 0 46 self.hammertimer = 0 47 self.hammertime = 1 --Stop! 48 self.hammers = false 49 if self.level >= 6 then 50 self.hammers = true 51 end 52 53 self.hp = bowserhealth 54 55 self.shot = false 56 self.fall = false 57 58 self:newtargetx("right") 59end 60 61function bowser:update(dt) 62 if self.shot then 63 self.speedy = self.speedy + shotgravity*dt 64 65 self.x = self.x+self.speedx*dt 66 self.y = self.y+self.speedy*dt 67 68 if self.speedy > bowserfallspeed then 69 self.speedy = bowserfallspeed 70 end 71 72 return false 73 else 74 if self.speedy > bowserfallspeed then 75 self.speedy = bowserfallspeed 76 end 77 78 --rotate back to 0 (portals) 79 self.rotation = math.mod(self.rotation, math.pi*2) 80 if self.rotation > 0 then 81 self.rotation = self.rotation - portalrotationalignmentspeed*dt 82 if self.rotation < 0 then 83 self.rotation = 0 84 end 85 elseif self.rotation < 0 then 86 self.rotation = self.rotation + portalrotationalignmentspeed*dt 87 if self.rotation > 0 then 88 self.rotation = 0 89 end 90 end 91 92 if not self.fall then 93 self.animationtimer = self.animationtimer + dt 94 while self.animationtimer > bowseranimationspeed do 95 self.animationtimer = self.animationtimer - bowseranimationspeed 96 if self.walkframe == 1 then 97 self.walkframe = 2 98 else 99 self.walkframe = 1 100 end 101 end 102 103 if self.x < self.targetx then 104 self.speedx = bowserspeedforwards 105 if self.x+self.speedx*dt >= self.targetx then 106 self:newtargetx("left") 107 end 108 else 109 self.speedx = -bowserspeedforwards 110 if self.x+self.speedx*dt <= self.targetx then 111 self:newtargetx("right") 112 end 113 end 114 115 --stop, hammertime 116 if self.hammers and self.backwards == false then 117 self.hammertimer = self.hammertimer + dt 118 while self.hammertimer > self.hammertime do 119 table.insert(objects["hammer"], hammer:new(self.x+4/16, self.y+.5, "left")) 120 self.hammertimer = self.hammertimer - self.hammertime 121 122 --new delay 123 self.hammertime = bowserhammertable[math.random(#bowserhammertable)] 124 end 125 end 126 end 127 128 if self.backwards == false and firestarted and firetimer > firedelay-0.5 then 129 self.fireframe = 2 130 self.speedx = 0 131 else 132 self.fireframe = 1 133 end 134 135 self.quad = bowserquad[self.fireframe][self.walkframe] 136 137 --left of player override 138 if not self.fall then 139 if objects["player"][getclosestplayer(self.x+15/16)].x > self.x+15/16 and self.jump == false then 140 self.animationdirection = "left" 141 self.speedx = bowserspeedbackwards 142 self.backwards = true 143 else 144 self.backwards = false 145 self.animationdirection = "right" 146 self.timer = self.timer + dt 147 if self.timer > bowserjumpdelay and self.jump == false then 148 self.speedy = -bowserjumpforce 149 self.jump = true 150 self.timer = self.timer - bowserjumpdelay 151 end 152 end 153 end 154 end 155 156 return false 157end 158 159function bowser:draw() 160 --just for the hammers 161 if not self.fall and not self.backwards then 162 if self.hammertimer > self.hammertime - bowserhammerdrawtime then 163 love.graphics.drawq(hammerimg, hammerquad[spriteset][1], math.floor((self.x-xscroll)*16*scale), (self.y-.5-11/16)*16*scale, 0, scale, scale) 164 end 165 end 166end 167 168function bowser:newtargetx(dir) 169 if dir == "right" then 170 self.targetx = self.startx-1-math.random(2) 171 else 172 self.targetx = self.startx-7-math.random(2) 173 end 174end 175 176function bowser:shotted(dir) 177 self.hp = self.hp - 1 178 if self.hp == 0 then 179 self:firedeath() 180 end 181end 182 183function bowser:firedeath() 184 playsound(shotsound) 185 playsound(bowserfallsound) 186 self.shot = true 187 self.speedy = -shotjumpforce 188 self.direction = dir or "right" 189 self.active = false 190 self.gravity = shotgravity 191 self.speedx = 0 192 193 addpoints(firepoints["bowser"], self.x+self.width/2, self.y) 194 195 --image 196 if marioworld <= 7 then 197 self.graphic = decoysimg 198 self.quad = decoysquad[marioworld] 199 end 200end 201 202function bowser:leftcollide(a, b) 203 if a == "player" then 204 return false 205 end 206end 207 208function bowser:rightcollide(a, b) 209 if a == "player" then 210 return false 211 end 212end 213 214function bowser:ceilcollide(a, b) 215 if a == "player" then 216 return false 217 end 218end 219 220function bowser:startfall() 221 222end 223 224function bowser:floorcollide(a, b) 225 if self.jump then 226 self.jump = false 227 self.timer = 0 228 end 229 if a == "player" then 230 return false 231 end 232end 233 234function bowser:startfall() 235 self.jump = true 236end 237 238function bowser:emancipate(a) 239 240 self:shotted() 241end