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