diff --git a/data/gfx/berserk.gif b/data/gfx/berserk.gif new file mode 100644 index 0000000..7396226 Binary files /dev/null and b/data/gfx/berserk.gif differ diff --git a/data/gfx/sprites.gif b/data/gfx/sprites.gif index 784d1e9..8defad5 100644 Binary files a/data/gfx/sprites.gif and b/data/gfx/sprites.gif differ diff --git a/data/maps/rooms_background.gif b/data/maps/rooms_background.gif index ade1fd4..ff0aee6 100644 Binary files a/data/maps/rooms_background.gif and b/data/maps/rooms_background.gif differ diff --git a/data/maps/rooms_foreground.gif b/data/maps/rooms_foreground.gif index ee6f1ac..4ff3d4e 100644 Binary files a/data/maps/rooms_foreground.gif and b/data/maps/rooms_foreground.gif differ diff --git a/data/maps/rooms_items.gif b/data/maps/rooms_items.gif index ee77d80..002086e 100644 Binary files a/data/maps/rooms_items.gif and b/data/maps/rooms_items.gif differ diff --git a/data/modules/ia/berserk.lua b/data/modules/ia/berserk.lua new file mode 100644 index 0000000..c6be6dc --- /dev/null +++ b/data/modules/ia/berserk.lua @@ -0,0 +1,58 @@ + +function ia.update_berserk(spr) + map.surf(rooms.surf_foreground) + if spr.state == templates.ALIVE then + if sprites.hero.state == templates.ALIVE then + local x1,y1,w1,h1 = util.aabb(spr) -- El meu aabb + local x2,y2,w2,h2 = util.aabb(sprites.hero) -- el aabb del heroi + -- Si toca al heroi... + if util.check_aabb_collision(x1,y1,w1,h1, x2,y2,w2,h2) then + sprites.hero.hit() + spr.flipped = not spr.flipped + end + end + + local advance = 1 + if sprites.hero.pos.y == spr.pos.y-1 then advance = 2 end + if spr.flipped then + local tx, ty = (spr.pos.x+3)>>3, (spr.pos.y+15)>>3 + if map.tile(tx,ty) < 16 and map.tile(tx,ty-1) < 16 and map.tile(tx,ty+1) > 0 then + spr.pos.x = spr.pos.x - advance + else + spr.flipped = not spr.flipped + end + else + local tx, ty = (spr.pos.x+12)>>3, (spr.pos.y+15)>>3 + if map.tile(tx,ty) < 16 and map.tile(tx,ty-1) < 16 and map.tile(tx,ty+1) > 0 then + spr.pos.x = spr.pos.x + advance + else + spr.flipped = not spr.flipped + end + end + + + elseif spr.state == templates.DYING then + if spr.animation ~= "mummy_dying" then + sprites.set_animation(spr, "mummy_dying") + spr.surf = surf.load("gfx/mummy.gif") + else + if spr.current_frame == 8 then + sprites.set_animation(spr, "mummy_dead") + spr.state = templates.DEAD + end + end + + + elseif spr.state == templates.DEAD then + if spr.current_wait == 1 then + sprites.set_animation(spr, "mummy_undying") + spr.state = templates.RESURRECTING + end + elseif spr.state == templates.RESURRECTING then + if spr.current_frame == 13 then + sprites.set_animation(spr, "mummy_walk") + spr.surf = surf.load("gfx/berserk.gif") + spr.state = templates.ALIVE + end + end +end diff --git a/data/modules/items.lua b/data/modules/items.lua index 80bb304..14622c2 100644 --- a/data/modules/items.lua +++ b/data/modules/items.lua @@ -17,4 +17,5 @@ items = { { name="nemesio", label="nemesio", visual={x=16, y=80, w=16, h=16} }, { name="rata", label="rata", visual={x=80, y=48, w=9, h=8} }, { name="gota", label="gota", visual={x=80, y=56, w=8, h=8} }, + { name="berserk", label="berserk", visual={x=16, y=24, w=16, h=16} }, } diff --git a/data/modules/templates.lua b/data/modules/templates.lua index 5e84d9f..0288a64 100644 --- a/data/modules/templates.lua +++ b/data/modules/templates.lua @@ -246,6 +246,22 @@ function me.create(type, options) room = options.room, ia = ia.update_gota_esguit } + elseif key == "berserk" then + sprite = { + type = key, + pos = options.pos,--{ x=100, y=4*12*8+71 }, + size = { w=16,h=16 }, + bbo = { left=3, top=2, right=3, bottom=0 }, + current_frame = 1, + current_wait = 1, + flipped = options.flipped, + surf = surf.load("gfx/berserk.gif"), + animation = "mummy_walk", + state = me.ALIVE, + enemy = true, + room = options.room, + ia = ia.update_berserk + } else error("Template not recognized") end