@@ -13,11 +13,14 @@ class MoveSequence extends Sequence
1313 dt = coroutine.yield !
1414 time -= dt
1515
16+ thing\ set_direction Vec2d vx, vy if thing. set_direction
17+
1618 real_dt = if time < 0 then dt + time else dt
1719 cx, cy = thing\ fit_move real_dt * vx, real_dt * vy
1820 vx = - vx if cx
1921 vy = - vy if cy
2022
23+ thing\ set_direction! if thing. set_direction
2124 coroutine.yield " more" , - time if time < 0
2225
2326 shake : ( thing, total_time, mx= 5 , my= 5 , speed= 10 , decay_to= 0 ) ->
@@ -37,6 +40,10 @@ class MoveSequence extends Sequence
3740 thing. ox, thing. oy = ox, oy
3841 coroutine.yield " more" , - time if time < 0
3942
43+ charge : ( thing, dir, speed= 200 , decay= 0.5 ) ->
44+ thing. velocity = dir\ normalized! * speed
45+ Sequence . default_scope. tween thing. velocity, decay, [ 1 ] : 0 , [ 2 ] : 0
46+ thing\ set_direction dir
4047 }
4148
4249class Enemy extends Entity
@@ -107,6 +114,7 @@ class Enemy extends Entity
107114
108115module " enemies" , package.seeall
109116
117+ -- wanders around
110118class GreenSlime extends Enemy
111119 life : 15
112120 blood_color : { 267 , 244 , 129 }
@@ -179,6 +187,7 @@ class BounceBullet extends Bullet
179187 else
180188 super !
181189
190+ -- charges
182191class BlueSlime extends Enemy
183192 life : 21
184193
@@ -257,3 +266,58 @@ class RedSlime extends Enemy
257266class BadRedSlime extends RedSlime
258267 bullet_cls : BounceBullet
259268
269+
270+ class MadDog extends Enemy
271+ life : 45
272+
273+ new : ( ... ) =>
274+ super ...
275+
276+ with Spriter " img/sprite.png"
277+ stand_left_right = { " 60,65,17,12" , " 60,78,17,12" }
278+ stand_up_down = { " 82,52,5,13" , " 82,65,5,13" }
279+
280+ left_right = { " 60,65,17,12" , " 60,52,17,12" }
281+ up_down = { " 82,52,5,13" , " 93,52,5,13" }
282+
283+ @anim = StateAnim " stand_left" , {
284+ stand_down : \ seq stand_up_down, 0.25 , true , true
285+ stand_up : \ seq stand_up_down, 0.25
286+
287+ stand_right : \ seq stand_left_right, 0.25 , true
288+ stand_left : \ seq stand_left_right, 0.25
289+
290+ walk_down : \ seq up_down, 0.25 , false , true
291+ walk_up : \ seq up_down, 0.25
292+
293+ walk_right : \ seq left_right, 0.25 , true
294+ walk_left : \ seq left_right, 0.25
295+ }
296+
297+ set_direction : ( other_vel) =>
298+ v = @velocity
299+ v += other_vel if other_vel
300+ @anim \ set_state @direction_name " left" , v
301+
302+ update : ( dt) =>
303+ super dt
304+
305+ make_ai : =>
306+ @ai = MoveSequence ->
307+ wait 0.5
308+ player = @world . game. player
309+ vec = @box \ vector_to player. box
310+
311+ if vec\ len! < 60
312+ shake self , 0.3 , 2 , 1
313+ charge self , vec, 150 , 0.3
314+ wait 0.1
315+ charge self , @box \ vector_to( player. box) , 150 , 0.3
316+ else
317+ dx, dy = unpack Vec2d . random 25
318+ move self , dx, dy, 0.6
319+
320+ again!
321+
322+
323+
0 commit comments