From 966aebf046d3b4f8df73b9c1dc95b46082eeda09 Mon Sep 17 00:00:00 2001 From: lustlion Date: Sun, 17 Oct 2021 01:06:11 +0200 Subject: [PATCH] upload so it isnt lost now --- assets/characters/bird/bird_flying_anim.gif | Bin 0 -> 214 bytes .../bird/bird_flying_anim_strip_3.png | Bin 0 -> 187 bytes assets/characters/bird/bird_idle_anim.gif | Bin 0 -> 503 bytes .../bird/bird_idle_anim_strip_8.png | Bin 0 -> 206 bytes assets/characters/bird/bird_walk_anim.gif | Bin 0 -> 215 bytes .../bird/bird_walk_anim_strip_3.png | Bin 0 -> 196 bytes .../bomber_goblin_attack_anim.gif | Bin 0 -> 878 bytes .../bomber_goblin_attack_anim_strip_6.png | Bin 0 -> 969 bytes .../bomber_goblin_death_anim.gif | Bin 0 -> 424 bytes .../bomber_goblin_death_anim_strip_6.png | Bin 0 -> 495 bytes .../bomber goblin/bomber_goblin_hit_anim.gif | Bin 0 -> 286 bytes .../bomber_goblin_hit_anim_strip_3.png | Bin 0 -> 468 bytes .../bomber goblin/bomber_goblin_idle_anim.gif | Bin 0 -> 603 bytes .../bomber_goblin_idle_anim_strip_4.png | Bin 0 -> 565 bytes .../goblin_bomber_spritesheet.png | Bin 0 -> 1894 bytes .../characters/fly/blue_fly_attack_anim.gif | Bin 0 -> 233 bytes .../fly/blue_fly_attack_anim_srip_3.png | Bin 0 -> 219 bytes assets/characters/fly/blue_fly_death_anim.gif | Bin 0 -> 251 bytes .../fly/blue_fly_death_anim_strip_5.png | Bin 0 -> 233 bytes assets/characters/fly/blue_fly_hit_anim.gif | Bin 0 -> 175 bytes .../fly/blue_fly_hit_anim_strip_3.png | Bin 0 -> 221 bytes .../fly/blue_fly_idle_or_flying_anim.gif | Bin 0 -> 231 bytes .../blue_fly_idle_or_flying_anim_strip_3.png | Bin 0 -> 249 bytes assets/characters/fly/fly_spritesheet.png | Bin 0 -> 940 bytes .../characters/fly/orange_fly_atack_anim.gif | Bin 0 -> 233 bytes .../fly/orange_fly_atack_anim_srip_3.png | Bin 0 -> 220 bytes .../characters/fly/orange_fly_death_anim.gif | Bin 0 -> 253 bytes .../fly/orange_fly_death_anim_strip_5.png | Bin 0 -> 248 bytes assets/characters/fly/orange_fly_hit_anim.gif | Bin 0 -> 175 bytes .../fly/orange_fly_hit_anim_strip_3.png | Bin 0 -> 229 bytes .../fly/orange_fly_idle_or_flying_anim.gif | Bin 0 -> 231 bytes ...orange_fly_idle_or_flying_anim_strip_3.png | Bin 0 -> 262 bytes .../characters/goblin/goblin_attack_anim.gif | Bin 0 -> 500 bytes .../goblin/goblin_attack_anim_strip_4.png | Bin 0 -> 624 bytes .../characters/goblin/goblin_death_anim.gif | Bin 0 -> 382 bytes .../goblin/goblin_death_anim_strip_6.png | Bin 0 -> 448 bytes assets/characters/goblin/goblin_hit_anim.gif | Bin 0 -> 258 bytes .../goblin/goblin_hit_anim_strip_3.png | Bin 0 -> 423 bytes assets/characters/goblin/goblin_idle_anim.gif | Bin 0 -> 472 bytes .../goblin/goblin_idle_anim_strip_4.png | Bin 0 -> 562 bytes assets/characters/goblin/goblin_run_anim.gif | Bin 0 -> 686 bytes .../goblin/goblin_run_anim_strip_6.png | Bin 0 -> 574 bytes .../characters/goblin/goblin_spritesheet.png | Bin 0 -> 1801 bytes .../mushroom/mushroom_crushed_anim.gif | Bin 0 -> 633 bytes .../mushroom_crushed_anim_strip_6.png | Bin 0 -> 613 bytes .../mushroom/mushroom_death_anim.gif | Bin 0 -> 359 bytes .../mushroom/mushroom_death_anim_strip_6.png | Bin 0 -> 487 bytes .../characters/mushroom/mushroom_hit_anim.gif | Bin 0 -> 256 bytes .../mushroom/mushroom_hit_anim_strip_3.png | Bin 0 -> 431 bytes .../mushroom/mushroom_spritesheet.png | Bin 0 -> 1710 bytes .../mushroom/mushroom_walk_anim.gif | Bin 0 -> 939 bytes .../mushroom/mushroom_walk_anim_strip_8.png | Bin 0 -> 819 bytes assets/characters/nancy/fall.png | Bin 0 -> 389 bytes assets/characters/nancy/fall1.png | Bin 0 -> 282 bytes assets/characters/nancy/fall2.png | Bin 0 -> 273 bytes assets/characters/nancy/fall3.png | Bin 0 -> 270 bytes assets/characters/nancy/idle.png | Bin 0 -> 361 bytes assets/characters/nancy/idle1.png | Bin 0 -> 269 bytes assets/characters/nancy/idle2.png | Bin 0 -> 274 bytes assets/characters/nancy/idle3.png | Bin 0 -> 274 bytes assets/characters/nancy/idle4.png | Bin 0 -> 267 bytes assets/characters/nancy/jump.png | Bin 0 -> 324 bytes assets/characters/nancy/jump1.png | Bin 0 -> 266 bytes assets/characters/nancy/jump2.png | Bin 0 -> 272 bytes assets/characters/nancy/jump3.png | Bin 0 -> 268 bytes assets/characters/nancy/run.png | Bin 0 -> 409 bytes assets/characters/nancy/run1.png | Bin 0 -> 260 bytes assets/characters/nancy/run2.png | Bin 0 -> 263 bytes assets/characters/nancy/run3.png | Bin 0 -> 269 bytes assets/characters/nancy/run4.png | Bin 0 -> 267 bytes assets/characters/nancy/run5.png | Bin 0 -> 262 bytes assets/characters/nancy/run6.png | Bin 0 -> 261 bytes .../herochar_after_jump_dust_anim.gif | Bin 0 -> 182 bytes .../herochar_after_jump_dust_anim_strip_4.png | Bin 0 -> 138 bytes .../unformatted/herochar_attack_anim(new).gif | Bin 0 -> 414 bytes .../herochar_attack_anim_strip_4(new).png | Bin 0 -> 436 bytes .../herochar_before_jump_dust_anim.gif | Bin 0 -> 176 bytes ...herochar_before_jump_dust_anim_strip_4.png | Bin 0 -> 140 bytes .../herochar_before_or_after_jump.gif | Bin 0 -> 219 bytes .../herochar_before_or_after_jump_srip_2.png | Bin 0 -> 332 bytes .../nancy/unformatted/herochar_death_anim.gif | Bin 0 -> 445 bytes .../herochar_death_anim_strip_8.png | Bin 0 -> 450 bytes .../nancy/unformatted/herochar_hit_anim.gif | Bin 0 -> 221 bytes .../unformatted/herochar_hit_anim_strip_3.png | Bin 0 -> 374 bytes .../nancy/unformatted/herochar_idle_anim.gif | Bin 0 -> 426 bytes .../unformatted/herochar_jump_double_anim.gif | Bin 0 -> 229 bytes .../herochar_jump_double_anim_strip_3.png | Bin 0 -> 336 bytes .../unformatted/herochar_jump_down_anim.gif | Bin 0 -> 329 bytes .../herochar_jump_down_anim_strip_3.png | Bin 0 -> 351 bytes .../unformatted/herochar_jump_up_anim.gif | Bin 0 -> 332 bytes .../herochar_jump_up_anim_strip_3.png | Bin 0 -> 353 bytes .../herochar_pushing_foward_anim.gif | Bin 0 -> 587 bytes .../herochar_pushing_foward_anim_strip_6.png | Bin 0 -> 516 bytes .../nancy/unformatted/herochar_run_anim.gif | Bin 0 -> 597 bytes .../unformatted/herochar_spritesheet(new).png | Bin 0 -> 3812 bytes .../herochar_sword_attack_anim.gif | Bin 0 -> 483 bytes .../herochar_sword_attack_anim_strip_4.gif | Bin 0 -> 517 bytes .../herochar_sword_attack_anim_strip_4.png | Bin 0 -> 568 bytes .../nancy/unformatted/hit_sparkle_anim.gif | Bin 0 -> 230 bytes .../unformatted/hit_sparkle_anim_strip_4.png | Bin 0 -> 202 bytes .../nancy/unformatted/sword_effect(new).gif | Bin 0 -> 186 bytes .../unformatted/sword_effect_strip_4(new).png | Bin 0 -> 176 bytes assets/characters/rabbit/rabit_idle_anim.gif | Bin 0 -> 244 bytes .../rabbit/rabit_idle_anim_strip_4.png | Bin 0 -> 217 bytes assets/characters/rabbit/rabit_walk_anim.gif | Bin 0 -> 362 bytes .../rabbit/rabit_walk_anim_strip_6.png | Bin 0 -> 297 bytes assets/characters/ship/left1.png | Bin 0 -> 560 bytes assets/characters/ship/left2.png | Bin 0 -> 526 bytes assets/characters/ship/leftmiddle1.png | Bin 0 -> 595 bytes assets/characters/ship/leftmiddle2.png | Bin 0 -> 564 bytes assets/characters/ship/middle1.png | Bin 0 -> 611 bytes assets/characters/ship/middle2.png | Bin 0 -> 583 bytes assets/characters/ship/right1.png | Bin 0 -> 559 bytes assets/characters/ship/right2.png | Bin 0 -> 527 bytes assets/characters/ship/rightmiddle1.png | Bin 0 -> 571 bytes assets/characters/ship/rightmiddle2.png | Bin 0 -> 544 bytes assets/characters/slime/slime_death_anim.gif | Bin 0 -> 317 bytes .../slime/slime_death_anim_strip_6.png | Bin 0 -> 348 bytes assets/characters/slime/slime_hit_anim.gif | Bin 0 -> 225 bytes .../slime/slime_hit_anim_strip_3.png | Bin 0 -> 315 bytes assets/characters/slime/slime_idle_anim.gif | Bin 0 -> 483 bytes .../slime/slime_idle_anim_strip_5.png | Bin 0 -> 453 bytes assets/characters/slime/slime_spritesheet.png | Bin 0 -> 1719 bytes assets/characters/slime/slime_walk_anim.gif | Bin 0 -> 1443 bytes .../slime/slime_walk_anim_strip_15.png | Bin 0 -> 962 bytes assets/characters/worm/worm_death_anim.gif | Bin 0 -> 279 bytes .../worm/worm_death_anim_strip_6.png | Bin 0 -> 297 bytes assets/characters/worm/worm_hit_anim.gif | Bin 0 -> 173 bytes .../characters/worm/worm_hit_anim_strip_3.png | Bin 0 -> 261 bytes assets/characters/worm/worm_spritesheet.png | Bin 0 -> 612 bytes assets/characters/worm/worm_walk_anim.gif | Bin 0 -> 401 bytes .../worm/worm_walk_anim_strip_6.png | Bin 0 -> 330 bytes assets/decoration/antidote_potion.png | Bin 0 -> 227 bytes assets/decoration/apple_item.png | Bin 0 -> 197 bytes assets/decoration/arrow_plate_left.png | Bin 0 -> 266 bytes assets/decoration/arrow_plate_right.png | Bin 0 -> 264 bytes assets/decoration/bigflowers_props.png | Bin 0 -> 205 bytes assets/decoration/bomb_on_ground_anim.gif | Bin 0 -> 417 bytes .../bomb_on_ground_anim_strip_8.png | Bin 0 -> 267 bytes assets/decoration/bomb_thrown_anim.gif | Bin 0 -> 204 bytes .../decoration/bomb_thrown_anim_strip_3.png | Bin 0 -> 197 bytes assets/decoration/buttom.png | Bin 0 -> 139 bytes assets/decoration/buttom_pressed.png | Bin 0 -> 126 bytes assets/decoration/coin_anim.gif | Bin 0 -> 423 bytes assets/decoration/coin_anim_strip_6.png | Bin 0 -> 321 bytes assets/decoration/coin_pickup_anim.gif | Bin 0 -> 327 bytes .../decoration/coin_pickup_anim_strip_6.png | Bin 0 -> 284 bytes assets/decoration/door.png | Bin 0 -> 326 bytes assets/decoration/drygrass_props.png | Bin 0 -> 180 bytes assets/decoration/explosion_anim.gif | Bin 0 -> 1076 bytes assets/decoration/explosion_anim_strip_10.png | Bin 0 -> 1291 bytes assets/decoration/flowers_props.png | Bin 0 -> 243 bytes assets/decoration/grass_props.png | Bin 0 -> 178 bytes assets/decoration/health_potion.png | Bin 0 -> 225 bytes assets/decoration/lever_turned_left.png | Bin 0 -> 209 bytes assets/decoration/lever_turned_right.png | Bin 0 -> 195 bytes assets/decoration/loot_box_anim.gif | Bin 0 -> 1055 bytes assets/decoration/loot_box_anim_opening.gif | Bin 0 -> 596 bytes .../loot_box_anim_opening_strip_6.png | Bin 0 -> 416 bytes assets/decoration/loot_box_open.png | Bin 0 -> 204 bytes assets/decoration/meat_item.png | Bin 0 -> 170 bytes assets/decoration/orb.png | Bin 0 -> 116 bytes assets/decoration/orb_anim.gif | Bin 0 -> 346 bytes assets/decoration/orb_anim_strip_6.png | Bin 0 -> 262 bytes assets/decoration/orb_collected_anim.gif | Bin 0 -> 221 bytes .../decoration/orb_collected_anim_strip_5.png | Bin 0 -> 137 bytes assets/decoration/root_props.png | Bin 0 -> 160 bytes assets/decoration/save_point_anim.gif | Bin 0 -> 1345 bytes assets/decoration/save_point_anim_strip_9.png | Bin 0 -> 702 bytes assets/decoration/save_point_saving_anim.gif | Bin 0 -> 487 bytes .../save_point_saving_anim_strip_3.png | Bin 0 -> 465 bytes assets/decoration/spikes.png | Bin 0 -> 315 bytes assets/decoration/spikes_trap.png | Bin 0 -> 206 bytes .../spikes_trap_hit_wall_dust_effect.gif | Bin 0 -> 143 bytes ...ikes_trap_hit_wall_dust_effect_strip_3.png | Bin 0 -> 133 bytes assets/decoration/stone.png | Bin 0 -> 340 bytes .../decoration/strange_door_closed_anim.gif | Bin 0 -> 2091 bytes .../strange_door_closed_anim_strip_10.png | Bin 0 -> 844 bytes .../decoration/strange_door_opening_anim.gif | Bin 0 -> 1580 bytes .../strange_door_opening_anim_strip_14.png | Bin 0 -> 1045 bytes assets/decoration/tiki_torch_props.gif | Bin 0 -> 1189 bytes .../decoration/tiki_torch_props_strip_12.png | Bin 0 -> 567 bytes assets/decoration/trap_spikes_anim.gif | Bin 0 -> 682 bytes .../decoration/trap_spikes_anim_strip_7.png | Bin 0 -> 577 bytes assets/decoration/trap_suspended_anim.gif | Bin 0 -> 5569 bytes .../trap_suspended_anim_strip_18.png | Bin 0 -> 6313 bytes assets/decoration/vase.png | Bin 0 -> 183 bytes assets/decoration/vase_breaking_anim.gif | Bin 0 -> 408 bytes .../decoration/vase_breaking_anim_strip_5.png | Bin 0 -> 462 bytes assets/decoration/wood_slab_left.png | Bin 0 -> 202 bytes assets/decoration/wood_slab_middle.png | Bin 0 -> 205 bytes assets/decoration/wood_slab_right.png | Bin 0 -> 175 bytes assets/decoration/wooden_plate.png | Bin 0 -> 256 bytes assets/happy to sad.gif | Bin 0 -> 17591 bytes assets/menu/nancy.png | Bin 0 -> 5370 bytes assets/menu/spaceship.png | Bin 0 -> 1063 bytes assets/objects/loot_box_anim_strip_12.png | Bin 0 -> 434 bytes assets/projectiles/energy1.png | Bin 0 -> 123 bytes assets/projectiles/energy2.png | Bin 0 -> 132 bytes assets/projectiles/plasma1.png | Bin 0 -> 192 bytes assets/projectiles/plasma2.png | Bin 0 -> 189 bytes assets/spr_bunni_hat_strip4.png | Bin 0 -> 400 bytes assets/spr_witch_full_strip8.png | Bin 0 -> 2673 bytes assets/spr_witch_nohat_strip8.png | Bin 0 -> 2028 bytes assets/terrain/background.png | Bin 0 -> 11122 bytes assets/terrain/bg_0.png | Bin 0 -> 1279 bytes assets/terrain/bg_1.png | Bin 0 -> 3171 bytes assets/terrain/bg_2.png | Bin 0 -> 1378 bytes assets/terrain/fg_0.png | Bin 0 -> 262 bytes assets/terrain/fg_1.png | Bin 0 -> 927 bytes assets/terrain/flag_myrheon.aseprite | Bin 0 -> 3316 bytes assets/terrain/lava_bottom.png | Bin 0 -> 400 bytes assets/terrain/lava_fall.png | Bin 0 -> 591 bytes assets/terrain/lava_top.png | Bin 0 -> 389 bytes assets/terrain/myrheon_flag_1.png | Bin 0 -> 1216 bytes assets/terrain/myrheon_flag_2.png | Bin 0 -> 799 bytes assets/terrain/ta_lava_fall_end.png | Bin 0 -> 533 bytes assets/terrain/tileset.png | Bin 0 -> 10859 bytes assets/terrain/tileset2.png | Bin 0 -> 11519 bytes assets/terrain/waterfall_anim.gif | Bin 0 -> 273 bytes assets/terrain/waterfall_anim_strip_4.png | Bin 0 -> 182 bytes assets/terrain/waterfall_bottom_anim.gif | Bin 0 -> 217 bytes .../terrain/waterfall_bottom_anim_strip_4.png | Bin 0 -> 173 bytes assets/ui/coins_hud.png | Bin 0 -> 188 bytes assets/ui/fonts.png | Bin 0 -> 1850 bytes assets/ui/health_hud_left.png | Bin 0 -> 136 bytes assets/ui/health_hud_middle.png | Bin 0 -> 95 bytes assets/ui/health_hud_right.png | Bin 0 -> 151 bytes assets/ui/health_menu_hud.png | Bin 0 -> 498 bytes assets/ui/hearts_hud.png | Bin 0 -> 236 bytes assets/ui/lifes_icon.png | Bin 0 -> 245 bytes assets/ui/lost_hearts_anim.gif | Bin 0 -> 287 bytes assets/ui/lost_hearts_anim_strip_5.png | Bin 0 -> 284 bytes assets/ui/no_hearts_hud.png | Bin 0 -> 141 bytes assets/ui/orbs_hud.png | Bin 0 -> 188 bytes assets/ui/select_icon_anim.gif | Bin 0 -> 435 bytes assets/ui/select_icon_anim_strip_5.png | Bin 0 -> 273 bytes conf.lua | 7 + data/levels/2.json | 1 + data/levels/3.json | 1 + data/levels/ewae.json | 1 + data/levels/level1.json | 1 + data/levels/tileset.json | 1 + data/scripts.lua | 17 + data/scripts/camera.lua | 21 + data/scripts/collision.lua | 76 ++ data/scripts/debug.lua | 27 + data/scripts/entities/player.lua | 205 +++ data/scripts/entity.lua | 65 + data/scripts/enums.lua | 61 + data/scripts/in_out.lua | 14 + data/scripts/json.lua | 388 ++++++ data/scripts/level.lua | 493 +++++++ data/scripts/math.lua | 9 + data/scripts/objects.lua | 106 ++ data/scripts/pause.lua | 60 + data/tiles.lua | 1180 +++++++++++++++++ main.lua | 125 ++ 258 files changed, 2859 insertions(+) create mode 100644 assets/characters/bird/bird_flying_anim.gif create mode 100644 assets/characters/bird/bird_flying_anim_strip_3.png create mode 100644 assets/characters/bird/bird_idle_anim.gif create mode 100644 assets/characters/bird/bird_idle_anim_strip_8.png create mode 100644 assets/characters/bird/bird_walk_anim.gif create mode 100644 assets/characters/bird/bird_walk_anim_strip_3.png create mode 100644 assets/characters/bomber goblin/bomber_goblin_attack_anim.gif create mode 100644 assets/characters/bomber goblin/bomber_goblin_attack_anim_strip_6.png create mode 100644 assets/characters/bomber goblin/bomber_goblin_death_anim.gif create mode 100644 assets/characters/bomber goblin/bomber_goblin_death_anim_strip_6.png create mode 100644 assets/characters/bomber goblin/bomber_goblin_hit_anim.gif create mode 100644 assets/characters/bomber goblin/bomber_goblin_hit_anim_strip_3.png create mode 100644 assets/characters/bomber goblin/bomber_goblin_idle_anim.gif create mode 100644 assets/characters/bomber goblin/bomber_goblin_idle_anim_strip_4.png create mode 100644 assets/characters/bomber goblin/goblin_bomber_spritesheet.png create mode 100644 assets/characters/fly/blue_fly_attack_anim.gif create mode 100644 assets/characters/fly/blue_fly_attack_anim_srip_3.png create mode 100644 assets/characters/fly/blue_fly_death_anim.gif create mode 100644 assets/characters/fly/blue_fly_death_anim_strip_5.png create mode 100644 assets/characters/fly/blue_fly_hit_anim.gif create mode 100644 assets/characters/fly/blue_fly_hit_anim_strip_3.png create mode 100644 assets/characters/fly/blue_fly_idle_or_flying_anim.gif create mode 100644 assets/characters/fly/blue_fly_idle_or_flying_anim_strip_3.png create mode 100644 assets/characters/fly/fly_spritesheet.png create mode 100644 assets/characters/fly/orange_fly_atack_anim.gif create mode 100644 assets/characters/fly/orange_fly_atack_anim_srip_3.png create mode 100644 assets/characters/fly/orange_fly_death_anim.gif create mode 100644 assets/characters/fly/orange_fly_death_anim_strip_5.png create mode 100644 assets/characters/fly/orange_fly_hit_anim.gif create mode 100644 assets/characters/fly/orange_fly_hit_anim_strip_3.png create mode 100644 assets/characters/fly/orange_fly_idle_or_flying_anim.gif create mode 100644 assets/characters/fly/orange_fly_idle_or_flying_anim_strip_3.png create mode 100644 assets/characters/goblin/goblin_attack_anim.gif create mode 100644 assets/characters/goblin/goblin_attack_anim_strip_4.png create mode 100644 assets/characters/goblin/goblin_death_anim.gif create mode 100644 assets/characters/goblin/goblin_death_anim_strip_6.png create mode 100644 assets/characters/goblin/goblin_hit_anim.gif create mode 100644 assets/characters/goblin/goblin_hit_anim_strip_3.png create mode 100644 assets/characters/goblin/goblin_idle_anim.gif create mode 100644 assets/characters/goblin/goblin_idle_anim_strip_4.png create mode 100644 assets/characters/goblin/goblin_run_anim.gif create mode 100644 assets/characters/goblin/goblin_run_anim_strip_6.png create mode 100644 assets/characters/goblin/goblin_spritesheet.png create mode 100644 assets/characters/mushroom/mushroom_crushed_anim.gif create mode 100644 assets/characters/mushroom/mushroom_crushed_anim_strip_6.png create mode 100644 assets/characters/mushroom/mushroom_death_anim.gif create mode 100644 assets/characters/mushroom/mushroom_death_anim_strip_6.png create mode 100644 assets/characters/mushroom/mushroom_hit_anim.gif create mode 100644 assets/characters/mushroom/mushroom_hit_anim_strip_3.png create mode 100644 assets/characters/mushroom/mushroom_spritesheet.png create mode 100644 assets/characters/mushroom/mushroom_walk_anim.gif create mode 100644 assets/characters/mushroom/mushroom_walk_anim_strip_8.png create mode 100644 assets/characters/nancy/fall.png create mode 100644 assets/characters/nancy/fall1.png create mode 100644 assets/characters/nancy/fall2.png create mode 100644 assets/characters/nancy/fall3.png create mode 100644 assets/characters/nancy/idle.png create mode 100644 assets/characters/nancy/idle1.png create mode 100644 assets/characters/nancy/idle2.png create mode 100644 assets/characters/nancy/idle3.png create mode 100644 assets/characters/nancy/idle4.png create mode 100644 assets/characters/nancy/jump.png create mode 100644 assets/characters/nancy/jump1.png create mode 100644 assets/characters/nancy/jump2.png create mode 100644 assets/characters/nancy/jump3.png create mode 100644 assets/characters/nancy/run.png create mode 100644 assets/characters/nancy/run1.png create mode 100644 assets/characters/nancy/run2.png create mode 100644 assets/characters/nancy/run3.png create mode 100644 assets/characters/nancy/run4.png create mode 100644 assets/characters/nancy/run5.png create mode 100644 assets/characters/nancy/run6.png create mode 100644 assets/characters/nancy/unformatted/herochar_after_jump_dust_anim.gif create mode 100644 assets/characters/nancy/unformatted/herochar_after_jump_dust_anim_strip_4.png create mode 100644 assets/characters/nancy/unformatted/herochar_attack_anim(new).gif create mode 100644 assets/characters/nancy/unformatted/herochar_attack_anim_strip_4(new).png create mode 100644 assets/characters/nancy/unformatted/herochar_before_jump_dust_anim.gif create mode 100644 assets/characters/nancy/unformatted/herochar_before_jump_dust_anim_strip_4.png create mode 100644 assets/characters/nancy/unformatted/herochar_before_or_after_jump.gif create mode 100644 assets/characters/nancy/unformatted/herochar_before_or_after_jump_srip_2.png create mode 100644 assets/characters/nancy/unformatted/herochar_death_anim.gif create mode 100644 assets/characters/nancy/unformatted/herochar_death_anim_strip_8.png create mode 100644 assets/characters/nancy/unformatted/herochar_hit_anim.gif create mode 100644 assets/characters/nancy/unformatted/herochar_hit_anim_strip_3.png create mode 100644 assets/characters/nancy/unformatted/herochar_idle_anim.gif create mode 100644 assets/characters/nancy/unformatted/herochar_jump_double_anim.gif create mode 100644 assets/characters/nancy/unformatted/herochar_jump_double_anim_strip_3.png create mode 100644 assets/characters/nancy/unformatted/herochar_jump_down_anim.gif create mode 100644 assets/characters/nancy/unformatted/herochar_jump_down_anim_strip_3.png create mode 100644 assets/characters/nancy/unformatted/herochar_jump_up_anim.gif create mode 100644 assets/characters/nancy/unformatted/herochar_jump_up_anim_strip_3.png create mode 100644 assets/characters/nancy/unformatted/herochar_pushing_foward_anim.gif create mode 100644 assets/characters/nancy/unformatted/herochar_pushing_foward_anim_strip_6.png create mode 100644 assets/characters/nancy/unformatted/herochar_run_anim.gif create mode 100644 assets/characters/nancy/unformatted/herochar_spritesheet(new).png create mode 100644 assets/characters/nancy/unformatted/herochar_sword_attack_anim.gif create mode 100644 assets/characters/nancy/unformatted/herochar_sword_attack_anim_strip_4.gif create mode 100644 assets/characters/nancy/unformatted/herochar_sword_attack_anim_strip_4.png create mode 100644 assets/characters/nancy/unformatted/hit_sparkle_anim.gif create mode 100644 assets/characters/nancy/unformatted/hit_sparkle_anim_strip_4.png create mode 100644 assets/characters/nancy/unformatted/sword_effect(new).gif create mode 100644 assets/characters/nancy/unformatted/sword_effect_strip_4(new).png create mode 100644 assets/characters/rabbit/rabit_idle_anim.gif create mode 100644 assets/characters/rabbit/rabit_idle_anim_strip_4.png create mode 100644 assets/characters/rabbit/rabit_walk_anim.gif create mode 100644 assets/characters/rabbit/rabit_walk_anim_strip_6.png create mode 100644 assets/characters/ship/left1.png create mode 100644 assets/characters/ship/left2.png create mode 100644 assets/characters/ship/leftmiddle1.png create mode 100644 assets/characters/ship/leftmiddle2.png create mode 100644 assets/characters/ship/middle1.png create mode 100644 assets/characters/ship/middle2.png create mode 100644 assets/characters/ship/right1.png create mode 100644 assets/characters/ship/right2.png create mode 100644 assets/characters/ship/rightmiddle1.png create mode 100644 assets/characters/ship/rightmiddle2.png create mode 100644 assets/characters/slime/slime_death_anim.gif create mode 100644 assets/characters/slime/slime_death_anim_strip_6.png create mode 100644 assets/characters/slime/slime_hit_anim.gif create mode 100644 assets/characters/slime/slime_hit_anim_strip_3.png create mode 100644 assets/characters/slime/slime_idle_anim.gif create mode 100644 assets/characters/slime/slime_idle_anim_strip_5.png create mode 100644 assets/characters/slime/slime_spritesheet.png create mode 100644 assets/characters/slime/slime_walk_anim.gif create mode 100644 assets/characters/slime/slime_walk_anim_strip_15.png create mode 100644 assets/characters/worm/worm_death_anim.gif create mode 100644 assets/characters/worm/worm_death_anim_strip_6.png create mode 100644 assets/characters/worm/worm_hit_anim.gif create mode 100644 assets/characters/worm/worm_hit_anim_strip_3.png create mode 100644 assets/characters/worm/worm_spritesheet.png create mode 100644 assets/characters/worm/worm_walk_anim.gif create mode 100644 assets/characters/worm/worm_walk_anim_strip_6.png create mode 100644 assets/decoration/antidote_potion.png create mode 100644 assets/decoration/apple_item.png create mode 100644 assets/decoration/arrow_plate_left.png create mode 100644 assets/decoration/arrow_plate_right.png create mode 100644 assets/decoration/bigflowers_props.png create mode 100644 assets/decoration/bomb_on_ground_anim.gif create mode 100644 assets/decoration/bomb_on_ground_anim_strip_8.png create mode 100644 assets/decoration/bomb_thrown_anim.gif create mode 100644 assets/decoration/bomb_thrown_anim_strip_3.png create mode 100644 assets/decoration/buttom.png create mode 100644 assets/decoration/buttom_pressed.png create mode 100644 assets/decoration/coin_anim.gif create mode 100644 assets/decoration/coin_anim_strip_6.png create mode 100644 assets/decoration/coin_pickup_anim.gif create mode 100644 assets/decoration/coin_pickup_anim_strip_6.png create mode 100644 assets/decoration/door.png create mode 100644 assets/decoration/drygrass_props.png create mode 100644 assets/decoration/explosion_anim.gif create mode 100644 assets/decoration/explosion_anim_strip_10.png create mode 100644 assets/decoration/flowers_props.png create mode 100644 assets/decoration/grass_props.png create mode 100644 assets/decoration/health_potion.png create mode 100644 assets/decoration/lever_turned_left.png create mode 100644 assets/decoration/lever_turned_right.png create mode 100644 assets/decoration/loot_box_anim.gif create mode 100644 assets/decoration/loot_box_anim_opening.gif create mode 100644 assets/decoration/loot_box_anim_opening_strip_6.png create mode 100644 assets/decoration/loot_box_open.png create mode 100644 assets/decoration/meat_item.png create mode 100644 assets/decoration/orb.png create mode 100644 assets/decoration/orb_anim.gif create mode 100644 assets/decoration/orb_anim_strip_6.png create mode 100644 assets/decoration/orb_collected_anim.gif create mode 100644 assets/decoration/orb_collected_anim_strip_5.png create mode 100644 assets/decoration/root_props.png create mode 100644 assets/decoration/save_point_anim.gif create mode 100644 assets/decoration/save_point_anim_strip_9.png create mode 100644 assets/decoration/save_point_saving_anim.gif create mode 100644 assets/decoration/save_point_saving_anim_strip_3.png create mode 100644 assets/decoration/spikes.png create mode 100644 assets/decoration/spikes_trap.png create mode 100644 assets/decoration/spikes_trap_hit_wall_dust_effect.gif create mode 100644 assets/decoration/spikes_trap_hit_wall_dust_effect_strip_3.png create mode 100644 assets/decoration/stone.png create mode 100644 assets/decoration/strange_door_closed_anim.gif create mode 100644 assets/decoration/strange_door_closed_anim_strip_10.png create mode 100644 assets/decoration/strange_door_opening_anim.gif create mode 100644 assets/decoration/strange_door_opening_anim_strip_14.png create mode 100644 assets/decoration/tiki_torch_props.gif create mode 100644 assets/decoration/tiki_torch_props_strip_12.png create mode 100644 assets/decoration/trap_spikes_anim.gif create mode 100644 assets/decoration/trap_spikes_anim_strip_7.png create mode 100644 assets/decoration/trap_suspended_anim.gif create mode 100644 assets/decoration/trap_suspended_anim_strip_18.png create mode 100644 assets/decoration/vase.png create mode 100644 assets/decoration/vase_breaking_anim.gif create mode 100644 assets/decoration/vase_breaking_anim_strip_5.png create mode 100644 assets/decoration/wood_slab_left.png create mode 100644 assets/decoration/wood_slab_middle.png create mode 100644 assets/decoration/wood_slab_right.png create mode 100644 assets/decoration/wooden_plate.png create mode 100644 assets/happy to sad.gif create mode 100644 assets/menu/nancy.png create mode 100644 assets/menu/spaceship.png create mode 100644 assets/objects/loot_box_anim_strip_12.png create mode 100644 assets/projectiles/energy1.png create mode 100644 assets/projectiles/energy2.png create mode 100644 assets/projectiles/plasma1.png create mode 100644 assets/projectiles/plasma2.png create mode 100644 assets/spr_bunni_hat_strip4.png create mode 100644 assets/spr_witch_full_strip8.png create mode 100644 assets/spr_witch_nohat_strip8.png create mode 100644 assets/terrain/background.png create mode 100644 assets/terrain/bg_0.png create mode 100644 assets/terrain/bg_1.png create mode 100644 assets/terrain/bg_2.png create mode 100644 assets/terrain/fg_0.png create mode 100644 assets/terrain/fg_1.png create mode 100644 assets/terrain/flag_myrheon.aseprite create mode 100644 assets/terrain/lava_bottom.png create mode 100644 assets/terrain/lava_fall.png create mode 100644 assets/terrain/lava_top.png create mode 100644 assets/terrain/myrheon_flag_1.png create mode 100644 assets/terrain/myrheon_flag_2.png create mode 100644 assets/terrain/ta_lava_fall_end.png create mode 100644 assets/terrain/tileset.png create mode 100644 assets/terrain/tileset2.png create mode 100644 assets/terrain/waterfall_anim.gif create mode 100644 assets/terrain/waterfall_anim_strip_4.png create mode 100644 assets/terrain/waterfall_bottom_anim.gif create mode 100644 assets/terrain/waterfall_bottom_anim_strip_4.png create mode 100644 assets/ui/coins_hud.png create mode 100644 assets/ui/fonts.png create mode 100644 assets/ui/health_hud_left.png create mode 100644 assets/ui/health_hud_middle.png create mode 100644 assets/ui/health_hud_right.png create mode 100644 assets/ui/health_menu_hud.png create mode 100644 assets/ui/hearts_hud.png create mode 100644 assets/ui/lifes_icon.png create mode 100644 assets/ui/lost_hearts_anim.gif create mode 100644 assets/ui/lost_hearts_anim_strip_5.png create mode 100644 assets/ui/no_hearts_hud.png create mode 100644 assets/ui/orbs_hud.png create mode 100644 assets/ui/select_icon_anim.gif create mode 100644 assets/ui/select_icon_anim_strip_5.png create mode 100644 conf.lua create mode 100644 data/levels/2.json create mode 100644 data/levels/3.json create mode 100644 data/levels/ewae.json create mode 100644 data/levels/level1.json create mode 100644 data/levels/tileset.json create mode 100644 data/scripts.lua create mode 100644 data/scripts/camera.lua create mode 100644 data/scripts/collision.lua create mode 100644 data/scripts/debug.lua create mode 100644 data/scripts/entities/player.lua create mode 100644 data/scripts/entity.lua create mode 100644 data/scripts/enums.lua create mode 100644 data/scripts/in_out.lua create mode 100644 data/scripts/json.lua create mode 100644 data/scripts/level.lua create mode 100644 data/scripts/math.lua create mode 100644 data/scripts/objects.lua create mode 100644 data/scripts/pause.lua create mode 100644 data/tiles.lua create mode 100644 main.lua diff --git a/assets/characters/bird/bird_flying_anim.gif b/assets/characters/bird/bird_flying_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..34d1d2bdd47835187ebeda504335591771d131c9 GIT binary patch literal 214 zcmZ?wbh9u|2XLhODG#HFlW54mdA;#oe8L!6_0j4p!P?KYzA#} iyp3EP{IP2VS_`xs-DW-xMQ*+14o~e;{{$bPR%-x32RBUs literal 0 HcmV?d00001 diff --git a/assets/characters/bird/bird_flying_anim_strip_3.png b/assets/characters/bird/bird_flying_anim_strip_3.png new file mode 100644 index 0000000000000000000000000000000000000000..af049b8a461afbfc1031554709f023780524faaa GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^5cEUIpWtD1hqI3+8G&`8Q2+E@o49hSj1%D ze1h#+$uyx2j!ab73Uo2h-RO?y2lxpsC34jnjfpy1DkRF3mPiiPj* zZvAiItub}~_jkAIbEaKBT~qVvL%@UIpWtD1hqI3+8G&`7}y!u@M!0kSj1%D le1h#+$uyx2bHAhLWd`bH#iN%Gtk;9{S;;lVO|eW2)&N!FJkbCE literal 0 HcmV?d00001 diff --git a/assets/characters/bird/bird_walk_anim_strip_3.png b/assets/characters/bird/bird_walk_anim_strip_3.png new file mode 100644 index 0000000000000000000000000000000000000000..6258d494246960d9195460e564b961d13f408aff GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^5b`xx-QK4n%&gReb<%xS*_zPsHKKxZ*{y85}Sb4q9e0Csywg8%>k literal 0 HcmV?d00001 diff --git a/assets/characters/bomber goblin/bomber_goblin_attack_anim.gif b/assets/characters/bomber goblin/bomber_goblin_attack_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..21372f83f5e885641ddf4425ba0692f34ed69138 GIT binary patch literal 878 zcmZ?wbh9u|6krfwC}&_${Lk&@8WQa67~pE8XTZ$J02KPk!pQ}sb$}SCNPwXkNE;g) zUz_D;Yim0t!lTvS$vjcBwzk&az#_(6SJz)D#=;S#7zS881WtIa-doWoYa}33UU(=$ zsC9+pvw}H|7c)Ix^PNm%-8S?69=XJ2fjK!XiK+`Sq%2p?ExxQ0RdaLRCr2M^!Svboho0lE?w{R{2aQiJMsIsSh;g+ zH~l=YrcU_7j@Ngk@=)Bx2n;BGaI8V13>Zqt?gGV^xh`6ifdk5b#j$bkjIO}KYjeJ5 z0^N0F#ljU;Vs0^8)C%Vm<}GJwTF|*bv2fFun&k;eGj`3HuruQFi{A%JW+*#3?l?E+ z>fwjSi?q(Y*fjH~s4G%3Vq#!n;A7x{B_l}q00RdYM7W#+2`&~}ffJHhb9ZzdbUneC zSlFz}>YA|TV8H_UfVFF?=jON`E86!~L`vzyXO{4eg{sSAHIP000A!NklY!*^pmBPmQ8vUQrSXf~54J-WL|KKR$2Xyk8UG4QSAA1 z>b}?O<@Svd_)>nEN_En4oJeH~AyU5|v|GXc@wxgYFYmgp`mWh*qTB5P$REVl^2^ja z-NQk<6~u!FBm)}P{_(jrXtx5_bpzLRgHoxq5Dx&|ZWqmFGs5s|QU0wfQXzbUXD8K2 zOCMF&Fn#dR@uuooyrNB&cvM{j03**iE-9tfX(5C~z6v2M6W{CgtVO#xE?v^|+AtLi z=k54QyCG5h`B4R*0{Q*wj|!ySkeK&NaWo>TL`nhxY_1k_^Q6Ptrs9AwiGUO2v0>`s zJOL!uw0@cmzHSzu=z!W&0h9GY#2^K7+rPtb9vag*V5-Dz{|*N`Ra{(N8TmNt@7`eE zFX7wXr-Z%J(X~pVsf(z4bOA`~VhUdEsQ_LC{<&q8b%j!98oYoKTi-`ns&HE)NTLziY8N@CF~CpMhc z#qmxAl4nSobUXmddWpyt>jdJWH6&gbpG|Be3(JkGTl%;nVT00000NkvXXu0mjfF>>8L literal 0 HcmV?d00001 diff --git a/assets/characters/bomber goblin/bomber_goblin_death_anim.gif b/assets/characters/bomber goblin/bomber_goblin_death_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..dec232641bfaad1dfdf5b5d6152d897d8f9dba2f GIT binary patch literal 424 zcmZ?wbh9u|6krfwC}&_${Lk&@8WQa67~pE8XTZ$J02KPk!pQ}sb$}SCNPwXkNE;g) z`x{uqSU8#|YPR}2O^NV`G1t}gR|2WQ04&}DCp=g4T10dmm1rtURXHi>5+IQyxMYs_ z1`{(j_dJ=TsZZNu`%sL!g7dNi%G&~Zl_u9cj!!4rVl0ZvFv#EQwO!yVK{GNpi z&o*ebd{n;gwbTR2U}gp;22KWch6bR)pFVwH;&katJo%RY<|I}`U@!qK=LV{Rso`(w z7n``cCuY``uu7G>Zz8x=^0_o*uCC%;Jf~z|#X4p@M)L6VWdN;RJSTH!00VAHIP0005DNklX8Nl`%^?c*%G4L-QS7tV%2l9lFpV>Oi1Us2nOfAiI!YAaN8o zEoZ{KcP+TjJZzvtD@N5#LP%B|Q%WoIWT@(O5yzX%aVFAdt&2BlWqBn5H_rXCFzOEg z03V+Tf}33{6IJ#60cEkK7v$Qiyt){VpJJdY25`7yo7gu~RnMt2pVPELWjRd+(1j^3 z7Fz&7>J9PejxiqCA}LB3RzU=Fu|?_)t0z*_pMyGcf1B|fQGmPWF-H9Xe8eU50Eltw z4W+ABRsUZRW)$1V++-qQIh*3?^$mV%*P5rQ2h>~8HPSoRM3hoP_v()0O(rX1T}&rt zalqUVc5sX3Y+6cM&Zh8R-dj(4s@`!XhRQBT1zo!!6FA((LZrm&V+`@vy!J)&Q)0?C)anbsR%ycsoib;ko4i$W7!hV;>s;$XMV?@?31fi9Yfsuiafgh~(Xhs>6 zY>T|)@dfwig`}O!(mXXW|9uLln%=@63zzST>$!@ekBNa7sIwVprLnQGzkx-Jg`;_* zW~;x`ln9R)b6s73C7={0U~v`jkj$E~qs#Ef+%OF$Mn{&`gWl!Am7>!6`Tahu{R=dV|~oi6uhn(xC&38LAE;L26M_ z6oz0ccAVf;1ckSK_Gjn4?=J@aIXYFFQS_GPZQH)6^q28?cQ2g3Sv=G_uLI?UGVwfg zM99SR&=o-l5$^DPUwKYgtRk+0ET)RM3Mw&-xch11{HzZEc>g$n8i`Uwug(XXgdA~d zBtVj6hEeokVonxNw;yDvqTieC0RYF<0Jp9Kr*HAS@DRhJA$qetj;jG*@18=c%ulzz z%lt;q4zAWC01(LM?c-`7lu~O-$oKsY2uWGlJiWZ~z4>JPZCiyt5He7=iDlGn;@<$z zKwHSiZUBo8F`tZu_4#Cs^=4P_?*i>0FHfQH5Nn<5{_G;6iRnWKNn;?d`EO;~& zM3f1tEuiUaS#$^>8>t=*vE1yi-0a}d5V0E+GS!+Xl*je<64(MTGkcvxJUcRYI&~vk zRzkXcQ1%aCk)4`0fQ&T5)U>%Rk5TQn&|f^_2q7sW%ZRGh^7sOIEy+c}yyr3i0000< KMNUMnLSTaC;L~*g literal 0 HcmV?d00001 diff --git a/assets/characters/bomber goblin/bomber_goblin_idle_anim.gif b/assets/characters/bomber goblin/bomber_goblin_idle_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..1df7d3807a31af920421e59ddb6425f8417dff79 GIT binary patch literal 603 zcmZ?wbh9u|6krfwC}&_${Lk&@8WQa67~pE8XTZ$J02KPk!pQ}sb$}SCNPwXkNE;g) z`x{uqSU8#|YPR}2O^NV`G1t}gR|2WQ04%-&Cp=eARcyE3EYZ9nGAc8O(UGO~q1elg z+Q#hkl(IL+6c<~~({EpKlgHj+K}62o03VmnU!(N|R|P%Y72>-35(CGPyIt&(CVfl9 z)ENa4E&@4^58)z+Lx3)VI1QhRd<0HNX3dbeF?YMff&@>Xa}uKBq7qr$ZDd5#jvhY~ z6w38(7K74W|m-M2{-R!-&^Dnlz6y9GvEG|ev#K^!1 zbPzu*h~R-k*g>9P2VHp;ohoqEq33WpqrAnsW#JMB6@}fWA1&@(c-3m&JO(9&q`)?g zh>cGimFCS-4ssCXn;qOJ9AQ|ocUmli4O`MFjT?GQ$ic$|bPXTOH6#R&3uVExOpIoQb-q4sKi2S6N_EMNpB`IlZV*! zLclw7ALpF8PSn5!&2`-)^%-NvCHvJeEugvt#JoB+&goypqy>57>30W%ULOGP@wtcJ zjCSlJo! z08-yvggC5hDQLPU6A*BZx_lWAx-Mci#UM&Rb%Hto*AF8MdVQ?1!~OGXy1txEPQHc1 z%GRD9udfnNWo0H1$R1!$07^gwKt+HtX25li>C`ApNB&#^t4?4>0Fi(SK-tS^Ih*AC z_0yX&z6k+y6L6045sao=SpFEnJ}Mkro&AM?ExJJo@P_=60TOe09stZcLwJ60`rai* zKdWlc{zdUcRtA4M0i1y4k28SFoFL8R;2*DE005q!ja7}W*q;kXFS05EmYqOTMIf4P z;rXZpfYz{`ZnEek7Y?uMBL6CCQb6S$U^`vF3E{2E0Z>`^{sjx_cQ&;q1k4B^7Ll#V z05HZ3_w;_9cZR@b2yA}$*Vv^e^WOxNPQdNvCP$#i=ucGDzBacZ0Zl0Y0P8p*&HbtX z#QY)?1r+lyC18sd5u1xms*peDpIe=L5kG(EzO3dCkKOI2OX=Q}00000NkvXXu0mjf D^5Xjt literal 0 HcmV?d00001 diff --git a/assets/characters/bomber goblin/goblin_bomber_spritesheet.png b/assets/characters/bomber goblin/goblin_bomber_spritesheet.png new file mode 100644 index 0000000000000000000000000000000000000000..b90d4f5d2158334c12924091e492deb4724ab78d GIT binary patch literal 1894 zcmV-s2buVZP)$^&r3TXf!h#No)Oy_Xi7>G{5=t-n=)`n>Pk3fWz&r zpzJ=Bg+|#OARKOQ1+QM8v+Mo+edE570<-eVgtn8mZAWIN<2c&#hud4h)0b~p8B_jn zIArBEH#f1jw+Fynh zj^i|_ua4t1RQ&z@{YF|V79mr*X&tHw!}Bfip*8T(`uiIud=lgzNB=TGS_2Q42W^oW z0nJ2G0syS8w2b+L=ex;prFllU$pSY1Vz;T=g-zb5f#j;MPg^cfc9{Y7a&hTWk z4gh%j{)qkP8bCz&Kg9#cUt0sYd!uLW@(h0Ooc%~>)V_*u4LltGFu`ax z1rQ2b>_5+qxS*s(?%AUaj5zI!@H`LV!W+7+ds@D2+kxK;U0%ywgS$L~)t>+w7bBaw zR0j^$*nJu}wI5!$VhZGOdC&%{O92&s{oN{49%1CJp>O$8F0%lB0J6o8{J#ps=V$Uy z-KLf!1I;+^>@$E+X!N6NlRA>1vtoWS(2raRwJ+n72a&a}>VIqzCbExnwA|~Nv@`bb zytkS(F8IBW*Kc+rzE%gvaT+$F)<^xAeDY&%B&iNkV#{5N4OnNzq9p?HHADv)AAocn zATSGX9H+sPc+h}$-HEaPANP-84Ls)Ws16nQdZ`>KF?@3f!T+u5E03h|x_Yv-Pv|#0 z=r=ntj>wN$fJ_N=PbYlYEY1QFV7q$<x006wR&uF=8#)Brl1&)t)q7oyEC7vFj%HTg9jG^X<#VAo9ok z<5>S?+?WEsKY1AbadLfcglX~!68I(xWLyc~#0qtM9;!NSvVE1}VhRAj-eCbSKb8i0 z_&k^An_6Jq`3n>br9bAc^9Hc$qW$UgBItA;DEq2=p2Ss^Q^rB=-(3L!eEjbd+~t{( z5cBe>gQ{mq10=4jobDMt&mzFQXaHt$dLF6(R#rYiCwxNE3{{m$Qb1W?i!gmKT^_WR z5ky@GI4^%5&?UxkKFNbeA7*cEPNop3#uce zd%{`ZI8LMN**%?J1S%!!o|TEnhgg;fq6}I2oz8Kv zF3%!N$}jpmV2OfAY#-n%?3^V83xuvH55G*9C@CvfRW9O!DC#E*q58dZ*a_JHgs@CK zzlMv3JQ{ie;A%HiC&xfV6YMJL4id>nirH6xeBi>?3oPl^<2xXfC9^a1xN&d z>rENDPAdSBp9E2XBEKvJ-ZUa-#OQA^$DN+15q_S5X5owdryu{kYQkTj0!WoAm^NqU z&tHCx@PGXMx5W$;kUCA=L zd29yN5t$W`H$hc4`>Sxsqi95;p;_}A38wyCRc`&=D*HDzx8;yWWn9p_H-qYehy~<5 zz>szkUVyWJstA8xheYavC7>F@mmLzh4M=@P>?YoR=6y({PDrhQo3<8;T3Q1SyY2)# z<5TR6PqFJx!b2h{4~179m3a%|F|R`+bpUe*rZZdRf=t%|)i=OxJtSfr3o0TAXWMo_ g!X`n>?tM-8A4J=ZgcSb=Bme*a07*qoM6N<$g2+;eHvj+t literal 0 HcmV?d00001 diff --git a/assets/characters/fly/blue_fly_attack_anim.gif b/assets/characters/fly/blue_fly_attack_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..2fd8556402eea87521718a78025b4582ce3d2708 GIT binary patch literal 233 zcmZ?wbh9u|5anQ$k$%+4 t@pwtH&vFh)@5zlmho^FqW`f`X>867g>axxmo*rpjW({XAn{YB%0{|9wG4ucc literal 0 HcmV?d00001 diff --git a/assets/characters/fly/blue_fly_attack_anim_srip_3.png b/assets/characters/fly/blue_fly_attack_anim_srip_3.png new file mode 100644 index 0000000000000000000000000000000000000000..3a9cfa273773b659a3e2dd1e87a0242b24b0ba11 GIT binary patch literal 219 zcmV<103`p3P)w`#VksT8KymNGT0o zi%8Y{r&_B4f+nVMA(z;p)zi2DR2|kdz^c}I0pt=1t^s?tp+mmq0bsY^H2H+N#Qr>< z>uuk0+aCbVX$!zCa6BD)vle@9ndjHby_@$9X1T4_@&=y!u-uvhy!^U1{{{bRJOE7B VcXaG9rVaoA002ovPDHLkV1jrSS$qHh literal 0 HcmV?d00001 diff --git a/assets/characters/fly/blue_fly_death_anim.gif b/assets/characters/fly/blue_fly_death_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..cb5613f0a762ee1c642e3d41d1059b0922f9b412 GIT binary patch literal 251 zcmZ?wbh9u|2mHx%XE`I-h z-;!eg^S(UMde>ssJx_6aJIB~`zev(smCC}o;u5p6cS)>kHZ|Sf8q^tO*}#`zw%yV0 z@Yk0X&lzsyeXBdM{^LnbDZ!7yyO|SI&HI)!FANE;(5{qRd)(~8(WF`V)0?lqzEbsu hbBX__(?#`XnO|2_?EQ4mB^2m(22WQ%mvv4FO#po}T8RJv literal 0 HcmV?d00001 diff --git a/assets/characters/fly/blue_fly_hit_anim.gif b/assets/characters/fly/blue_fly_hit_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..81ccf9c9a69380165e26fb59ee67fa953b5b6f78 GIT binary patch literal 175 zcmZ?wbh9u|W*fVG4UX&<3=b0na#$)&d>y;jg5`NL-NZ?YF!|4|x9S$>aGFSruX+0%h literal 0 HcmV?d00001 diff --git a/assets/characters/fly/blue_fly_hit_anim_strip_3.png b/assets/characters/fly/blue_fly_hit_anim_strip_3.png new file mode 100644 index 0000000000000000000000000000000000000000..5e9c0c10daec4bd9f24f29f9fa365f45e81672f9 GIT binary patch literal 221 zcmV<303!d1P)ST5Jev-wUv$%kl5hLFc1?kL?*~UP+Ba2#0tm@TpB>ca7am!SNZhqcPE`;A%s~& znANKLrq#Y_&00iML^M9%R@q)mL@bW;m8z@(v?^=HsRJNA6IyZ$5z$3{Aia9%+&#I< zAFt<@=Y=CL9C0JF!8h_fdEpqR4)1+pHuyz8_>944hr0=UF7`~m--9*z`fGq~`oHi7 X?8#J+mECJ800000NkvXXu0mjfBtlwC literal 0 HcmV?d00001 diff --git a/assets/characters/fly/blue_fly_idle_or_flying_anim.gif b/assets/characters/fly/blue_fly_idle_or_flying_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..3ebae67c8d98606087252a375a96d4f4408e60ef GIT binary patch literal 231 zcmZ?wbh9u|~J?<&~xC)?08%HpIdjaR88LM+O+UKv?3Cq*amnrAV>A?eFhQ zL@aXUD!@2LNh;)A^WMwQW}QWsIufJeK~Ekg*0!O$+Qw~#T=sY5*l3h9=$d&f?l@>hgzX_f{8MuZNT zT4*u~(h`g_Ux(UbBLtYAwBAy?wJ0DujV;_&DTGEudP*M%yEk8LLqkuZ+X;(+SqU!jDeA0x7CL~{@N%=Ul7Rfy^L+MyP7l4v)dJC-Ub0pH2_ZA4) zeNYG?Ri0MH#Pk0L5qO$(000{TS|3z-wJ_%|&Zoh|dAyd-8Z^&p1|nGlT~M**)lL9#vtc$+*>o@IU}qGIg_c1QAp(4T&Wi>FU*9 zeEyj8-Cm4tFZOC^Z7>SFjW~{OFAi!oT7f>|PLob<*dbB*;L(ZW_n~R!=GF^abmsi5 z)z#p~-1kaFK;d6%zo+zrK((EcB=W9=N3`MU=Wc9d6Bp;x3MYh+qv0msRk!_#Eyk8`?ghK{jiGm%gKp(nj5g5`su z{f`hVADpFa%+hwSHwYnkJ~&I;L9HfOJ~%nM%ndsv7WrUP{2%!s`4xF28t{upoLJ<8p7;yY6@3SHVor|$ O0000wogv8er2JB}Ep4L12K%-uDUxCNmIr{_WxEQ`D zJdYFheDCH1z*sCni>ea*+M(46FE|C4@?{_`3q-B?-kI(t%TF1p?t=h(;+N) QjA7@gYdbwxhKs=(0Ler;O#lD@ literal 0 HcmV?d00001 diff --git a/assets/characters/fly/orange_fly_death_anim_strip_5.png b/assets/characters/fly/orange_fly_death_anim_strip_5.png new file mode 100644 index 0000000000000000000000000000000000000000..dc754e4e61f5346a5d1960e41f4bd18013edcc8c GIT binary patch literal 248 zcmVDqW85UGmVQX_=TGu~ zhJgn}#EXdkmY2}BH=p9Mrt70%wqGt@i~}E{hsWZhHEV05`>m}_=!rGmQ^jVnaY-M7 zT!7Nu3gCX7yqT{LC!BKzpm7d>%WmWQ^b-0en5%0T5%H^W1HgPXWqUpXB+bL#4GotH yqj~NFRS2e$GygPLK;I6gG+j6FoXRf&{uUjQk&2|1goHN$0000W*fVG4UX&<3=b0na#$)&d>y;jg5^j)@K71Pq0k_ eav^|Oh(qv{Vm>FwVTt0q4>=w>9A@BTum%8*Iwny7 literal 0 HcmV?d00001 diff --git a/assets/characters/fly/orange_fly_hit_anim_strip_3.png b/assets/characters/fly/orange_fly_hit_anim_strip_3.png new file mode 100644 index 0000000000000000000000000000000000000000..5ebed2aa9f29961bcff7278e0d72089c366cd8ff GIT binary patch literal 229 zcmV^P)IE0O*dT2Wy+D@#Ah>3{v^CiiSVr1mvJWn{IVF7kV!}cQppe_j|xdaihGrE}7 zXAhg^TAk&$$9>P^q7WB_yph=88~KsADA<04_r4Mv{34&`71O+a+^vB3#g^p9JxG(M fUjtyD{x3WMNYY%lq_g&D00000NkvXXu0mjfxqe^n literal 0 HcmV?d00001 diff --git a/assets/characters/fly/orange_fly_idle_or_flying_anim.gif b/assets/characters/fly/orange_fly_idle_or_flying_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..3b17715be12bfe26fdeca95aff98d026bd7957c7 GIT binary patch literal 231 zcmZ?wbh9u|rm3=g7YvdznK+SM!3cB%8_Wct6MzmuafL94z#1u~Z3Y~YGkQDP)23{<@MU7K F1^^9WFsc9m literal 0 HcmV?d00001 diff --git a/assets/characters/fly/orange_fly_idle_or_flying_anim_strip_3.png b/assets/characters/fly/orange_fly_idle_or_flying_anim_strip_3.png new file mode 100644 index 0000000000000000000000000000000000000000..64f8ce63e9e8f3ebab657ee13634c91ea51741a5 GIT binary patch literal 262 zcmV+h0r~!kP)gMd_yPk^thhL0RO|b zA>eg2=`!gp!w>od&jA8)tu^+T^K0o%0bZ_IM4X-}`x)am|LXjO2iz`h7T57dssI20 M07*qoM6N<$f)4y^*Z=?k literal 0 HcmV?d00001 diff --git a/assets/characters/goblin/goblin_attack_anim.gif b/assets/characters/goblin/goblin_attack_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..f46f61ceb1c89c6c4d5be42beb5dd6c94bc6d2b3 GIT binary patch literal 500 zcmZ?wbh9u|lwc5GC}&_${Lk&@8WQa67~pE8XTZ$J02KPk!pQ}sb%2-wq^t=@8yg$@ z8(73xI7ZgXnI~%Q+&`zN4^C~4qzu8F$uqYF-gBL^$ZeWql!!~XR_;Q! zk3NTQ%{-6*)5mqt*trW#;r5DF8fp}%0*Y%63;Y`S(LGb6BKwTVdP t%%kVBXP$fY$5PxtxInW1SYu+Q0^fXlR|eKyMAHIP0006vNkl9cBs(Bwcnw0p&k4f{Tz01?tDuYLFrbC;AYVZD(R5^ z?B%>9m*h^DzR6rJ@BRMY3H;-%C?suQjQR2!=REN{UD)P7l}1*?8o?OzoBJ|qmFi*b zYx9kd;?{@*w)sz`kq1fxsA6Qp3FH8ft&(i>pGrg25s`+k6!oIhUjP910E*+Q(7Rft z3T(I9MxKM;mIei!b6$w*E->cPd)gbtr%XWb0rTB*J+wY^=Kz3qYXyuNnJdROzio{m zvB$v&g2XmA02G~}!bQ>sG8h1Mo`ap|q_g(S{H8TH=Y{F0flhw`=k62x-uuxWF)2w2 zjvPTiV0gQ=0w%#TwX`YN=C`F`vb&TCV2t^t?i%gZ>M%QJ?i{;O18%vF$#$9h;IhfD zt3mtnXwBR?t|ylO@Yh+bmG<{X!eqGErk(x*(@_IJ{`<4))*wUF7{9)S_V;dYGW~av zQR=P_zoSNy%2$zFPB4ulid7Ux$POI?MMBYltjQ3$3B$pQ_^5S&sXzsk25z~I`=?=O z?eY0R$t^zbJO@+H0T6T(e&ZzSGpLJ!Vy8?1RRj^~8mJ3p#SPSZbt+zqKL!&lkNk-$ zF4M_Xwiq2QG$&Qa^9M;jya=XdKM*)>nqOzM=|Hq0_7)^NVIn{_5tm$3h~v)^pV$P5 z9bm&ToBVS3+U7rKq`Xx{CP2)lsn$Cczg&qX_^G=n@N$r|YWx79MxgWp>a;un0000< KMNUMnLSTa5mnjwi literal 0 HcmV?d00001 diff --git a/assets/characters/goblin/goblin_death_anim.gif b/assets/characters/goblin/goblin_death_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..7590b9ed5612f128e13578974f994e63d8937cec GIT binary patch literal 382 zcmZ?wbh9u|6krfwC}&_${Lk&@8WQa67~pE8XTZ$J02KPk!pQ}sb$}SCNPwXUNE;g) z`x{uqSU5)3%b6!??%aA9D9G%@vFhU90#?IS923u;(r;r_EV?Spni42*-%@1ii8O}| z$C9}3>96v(VebvhSRtdf;8jM(zX=!Odqbpt$uO^ETO#Wwgs_eYXd*WQCpPPVGC;tr z%prB=mt&9Sp)TWax2k!5A4FLb8Iuf4p9QVEE4jy6@zj<|HH3N03`{`N*clptT0edI zz{Kg&mw56m|IJCP2sKO$j9@!qYWQ3F#U`%qiJ7$}tWu@!n+R@|d@c={tE+ey&nekg Yv5py!kvu$o89-|n&&k{wz`$S)0HWtz>% literal 0 HcmV?d00001 diff --git a/assets/characters/goblin/goblin_death_anim_strip_6.png b/assets/characters/goblin/goblin_death_anim_strip_6.png new file mode 100644 index 0000000000000000000000000000000000000000..d9d1e4b2d56f92c487d984c8974ab2861dfe50e2 GIT binary patch literal 448 zcmV;x0YCnUP)AHIP0004pNklGyj zk*aq|6n(_Lf1&-xyn2&X7neMUS(`OaAWQ_*vze-wKTua^`az*p#pTtB`Z5Mm@#L55 zn|A=f4nX^5oC+LtdjRLTjZyV^=8O6&e_qD6-KzUfHO3f=gN~mHSOhBoz-YL}{P{9> z_EPnx0RXBuz%^&8LSY)PH*Pds7iyHMuM-CYun1Np!>IbY;h6$nm*?0{``B+SQQ;1# z`XW#cVOJ=(Aers74*;0)s8kv$R)dY+WX>_ovpIi?#Mz=uC%wrgG2WYO0Q?Sw%wNyz zi{j!QpxuIm@iLDOPs#J${jI65lY_DX%cil~3zdogHv3(nTmji!UQqTNXwakGf@VCO qvFHY+frfGblr!COYiejXDSiNryyUhQO_l=y0000Fc4-EGN$Yv14VG2(ng223`h!h9;m9#>U3}1{N_E zj*<0p=82j+w;l!xGTU%So%!Y6qsf#~6vWQ-^VX5l#6W>-!aPU6EWG}*?xhkx4__&3 fve}%5ObG*t>;q3!m)u_KWGcGuVu-6HCxbNrsS8mK literal 0 HcmV?d00001 diff --git a/assets/characters/goblin/goblin_hit_anim_strip_3.png b/assets/characters/goblin/goblin_hit_anim_strip_3.png new file mode 100644 index 0000000000000000000000000000000000000000..5e306f3d4a562e95e6bac025b956753752b0cd77 GIT binary patch literal 423 zcmV;Y0a*TtP)z zJx;?w5QV=4M@k~aqDdE}NP*-g&6XU128nA>Qc+M)P*6}&a*$ks(hUs~5gkI2Xpm7t zq!5|HtYyZ#&MxA|ylTCkvESQyGuyy`BzaEdUKnmSOtB_hA0C(Tcdss-^L9=hV#n!S_zm&vyFr$ye#B%7ntCC7u-$y0A$umj4@vKfW&u? zQ>9cIj2FD!bO8v)3xNE&2;C30XkrOXyomF&%Y1!udX%rfTmhS%Tq{s@nQh7~P9yIM z{6-(haSCv|O8&V%zpb63#y98?Orr3$#4%oh=j-5h&n#gN0R0 z@KX%G%FM2%jyeWERwhZr_?b+R&|bH!#d)>lx;FKTmQQbN6Y($%s!>6*l?iAt4_;dx zIJhouT-|ASBzRKRYmSRi4k;l(`o91(^ugGwO-a5*klRD?+UZhM%b0+c@!_$|iU^;reC)DpUVf^S VL|@z7{0_#K3OuoV%RCqutN{;>jOrIko@$8|qNIoT zt(*UK6CDsX$Y3&dmFwriK_RR)=&R1FZXf6&oswg3RXyFV-&{#hYh zE5JliRRd`}5mbW^uN60()t}}S1tJ@umT5pgP3kmT=({-0S;`47C(L zOFs~L$bAOvrv@*eB0y~FV3U|%6kb`r2wDA+Enw;0)Ba6C(Wh{@&!UjsyH)Uu=16S; zF$5Z)`$t6Nt3Z{n5@0=kBJU26fl6Ri^XVspe|hA;D%SNRwEzGB07*qoM6N<$g7~8P AfB*mh literal 0 HcmV?d00001 diff --git a/assets/characters/goblin/goblin_run_anim.gif b/assets/characters/goblin/goblin_run_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..9426ff0c1fd4e117b68e98ef81cb9eb24effa734 GIT binary patch literal 686 zcmZ?wbh9u|6krfwC}&_${Lk&@8WQa67~pE8XTZ$J02KPk!pQ}sb$}SCNPwXUNE;g) z`x{uqSU5)3%b6!??%aA9D9G&0vFpw{#beu>BqCbG_0I_l3p{CWT@)#DZE|tixwgew!C{k>#5^|DoCz+WJ|U-ymTgJh%89U#31}oQUi+LlR$bg{ z(BbIXF)6FsQDK3bZBK-VOSstMgX>^ZnD?p@RA*qWSj>6etE^jCw#K!JloJgpK7UU}9U zC~wZrvJTG?+v9iG#6W^~=-MN9>icPz0OsaP2`!?LiyM6|PqJEY*_DYj ztAO6phK3^ZPbsjsrUSk8V(A&r+7()xv!z5{Hyko-XWnG|v1M*sW!=v!g=3K)Xc05ZPUz5oCK literal 0 HcmV?d00001 diff --git a/assets/characters/goblin/goblin_run_anim_strip_6.png b/assets/characters/goblin/goblin_run_anim_strip_6.png new file mode 100644 index 0000000000000000000000000000000000000000..846e7488a4d4cfea2aae94f5745de1fe4ed8a73a GIT binary patch literal 574 zcmV-E0>S->P)AHIP00067Nkl)vw7qXiF8BZ6@B8j9Ij!M(Ydsn-Fp2p>d-kFPJbQ5R`o0(5`&eZ9=M~R3{zM`~zsI+D3ra$@ z{SyEM_381&(Eae5@K>!DBadHs3KETU3!s88a(byM%J4JBYKV%+nd9~Yg>nMKA{K#{ z_LuxAw$FoyY(?ql#l=vhfVp{SYSRlb&qw+SI`(Q+MOmJ|%%kYoKZNO_MOqrs3;+NC M07*qoM6N<$f{D`-f&c&j literal 0 HcmV?d00001 diff --git a/assets/characters/goblin/goblin_spritesheet.png b/assets/characters/goblin/goblin_spritesheet.png new file mode 100644 index 0000000000000000000000000000000000000000..4ff997efb8ab1540b4c6e4da22b6a2620a9539b9 GIT binary patch literal 1801 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 literal 0 HcmV?d00001 diff --git a/assets/characters/mushroom/mushroom_death_anim.gif b/assets/characters/mushroom/mushroom_death_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..fb5e9952d9bcd2f88bcbbf9190355063d87ecf8d GIT binary patch literal 359 zcmZ?wbh9u|6krfwC}&_${Lk&@8WQa67~pE8XTZ$J02KPk!pQ}sb$}SCNPwXUNE;g) zUzs>(Z(!77JGc3>*6iGR7%0f>$+7F=#tE#7Y?*!RpnyIv1yUs zU6yy)@{j1g-ljwgodg$F#lRoQI+M@%IB@p5HMuk!F3#kUjk##9bI(Z#VJpZ9JPfQD zwgQDAfLWA->*C&1oQ5Zo8+-OHUvkGF@`y+qC&C0~21W*U1{Q_}p!!drJ}|Mn)U};n z$ianB!331yWMG4<;A-iYoVe}Wt!xny+=@6`_#0Qhz8B}hidzjwOMc_&w`-yp8LR>0 Ccwm+Q literal 0 HcmV?d00001 diff --git a/assets/characters/mushroom/mushroom_death_anim_strip_6.png b/assets/characters/mushroom/mushroom_death_anim_strip_6.png new file mode 100644 index 0000000000000000000000000000000000000000..1d421fe9735814d3d3d2348e776e83ab6ab88c26 GIT binary patch literal 487 zcmVAHIP00055NklN|xicmg|Kt);dcP^Tyw7oY-pl(YF^~WevGDn9HZzi9k7>`o#gzu5)=c#|<)e+6gb12}AC*!VPhzR>8H%FXln@-k4By$Okk*(D1#s}c*W)*AqT zm%)$JL~edsJs>xqllJDbNmO!%oeMV}Wzux8ODnr7L! zR`UU%2<&$LA-u^L08q0kumLzkEWDG?(I;V=Wh3hnbSin3m}3~gHUVGv4`&Ixi}_7A zRv9WuNUIek$n{s!fNH%V>i4nOTSw&yNUJUK183vI#eC*HX2Tu><_0#omdZ$ dq5DF9`~g@#$#Hh3eqsOs002ovPDHLkV1jR#*%<%; literal 0 HcmV?d00001 diff --git a/assets/characters/mushroom/mushroom_hit_anim.gif b/assets/characters/mushroom/mushroom_hit_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..a2df40cba812ff9fd7e1ced7432517935d387248 GIT binary patch literal 256 zcmZ?wbh9u|6krfwC}&_${Lk&@8WQa67~pE8XTZ$J02KPk!pQ}sb$}SCNPwXMNPqhD zfl0ANUh?>g`)6i%2flhYrK5a3wm3)F)ceyh$SOWmDJ5?9} literal 0 HcmV?d00001 diff --git a/assets/characters/mushroom/mushroom_hit_anim_strip_3.png b/assets/characters/mushroom/mushroom_hit_anim_strip_3.png new file mode 100644 index 0000000000000000000000000000000000000000..2f350bd9b408f74f6fe394642bcf26dc5826265c GIT binary patch literal 431 zcmV;g0Z{&lP)v0y8nqnfZ4 z&(WD6qB8avLgrW2gUc%b!0pRZ&BO`NUA&spRlF{Th|2X~g!AhgV@~X`%GCmn2L2oV ziXux9GQVcx^iLF85HcS{mRiN(SQCIl29oUt{Qf7~jW#Csm?&tDGes<4i}7%R zFbXR1`(1(MY7U^i~Yt?LdS1Uq+O;_A}VDQrh(3>8qm>J Z7e7GfvQwsI#x(!{002ovPDHLkV1hYP$I$=) literal 0 HcmV?d00001 diff --git a/assets/characters/mushroom/mushroom_spritesheet.png b/assets/characters/mushroom/mushroom_spritesheet.png new file mode 100644 index 0000000000000000000000000000000000000000..06a104db2fdb759d7eb74ab59ac85ba6e0c4d19f GIT binary patch literal 1710 zcmV;f22uHmP) zJ!l(A6vzJx?hL{pgF%6`sgEs>fN>GhU$`x%SsswT2!i58_wlL(}Bsk@fD+8A+ zjKO#1lG?4o0)Yia;CipH-rn2U`P!Y)e#r9!gDuUQo%b;xJM(tkgMuiEQvP?6Bt2Ex zHp;uwbo=YlzfdV%_~gY~0KoL@6qDIC;@g>3LtN#l4w-x%L2%#n&s7*jQ94>5U^v(; z6x`b00RX)G@=@6kS9x6>TiZKES+O4ex2@stoBnHDfJdE*(fR;!6s2N?uJXJNmHf$z zw|I$ zH^m18QRRCoH5Z}%)S`-*xUi>flh5e321PKwCBuOuh zqO^>>?-i|U5A3r3Q52KYa8UV<1hEq_+m#DG)_b8sE-<+Zo=yd5_`4t%Bg> zYKr*y14xE{M@F!bS1C`u$YemBEQfjzK>;H6z*W&7LI<$XKN|ta2&%>d$UfIauZ_G6 zR|86WuwXnu-h=7-_fh{fu>f88)90^v{pxw{yHB6LDi!c0Ps+>W|N8q}D&wOE`)YsJ z^najg$m>_nF}a%Ne#8dps47nlmzCAYlR~aNcycvWw*T4FC&u=>%Ga&GG5|<`{{XgdHG4`mtqQb}CR5tVQn(AKno*;whiIen zI;yr`b~H^18K!KWCh(dQNOb^`04k9b*(5GWoj&YWH@Td^Dj6l5swr7AnncA4 z-$zbh6Xd3VDj6k&j{u^2fa+6_kEBpQ?Zm1MG}*5yvZTt17-G8p~?wt0)0+k ziHsVT0K($Bx&%nENAq4t&bJ+bR7s&O4s^9&Q+Ue>tZIO=qX!}OLYvWpuuclKbfC|S zq`E2G2J&N9*=d&QOq#E{bp|*R3}AEXM2M-?q43kLX=6! zpk81KAS%oM=DiPqwg+Zw0M-j#Q-o=dt_4pf4Wo#f8;7Se|1p49{}jaUUtBZ!sFq= z>GzAmP9Pv(1C)I{InWKX=lWHiaSyBzQ52=$zn!Pwzn!PD6TU$A(Y_*v2d6S^P} z6H>bLTwxc<3~K9qLJR_1=M%CZ(EYOnpnVTkt^yB$^3E4!$~s>rW0Q~~OGXK}VRaX< zY)lC$)3Z}d&ra`>Q9=-SMf+Spo!Gway=_m|cAeG)!1(eaODN6dBQQcPf`3}G2sGs* zgj|H>(3;yo{;pv0NSfY1931bT)=U9F$VF&^R@?;;!Rhr=Isja=Uv;~Hs(0;&z*ruw zItvK72=!CyK~2{a!7`_T{8|0509+oeS_8-k!~b&m51T8&X`aj&KmY&$07*qoM6N<$ Ef=RwTSO5S3 literal 0 HcmV?d00001 diff --git a/assets/characters/mushroom/mushroom_walk_anim.gif b/assets/characters/mushroom/mushroom_walk_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..ee9f7e00782afcb170b32589401f970ddd1750d4 GIT binary patch literal 939 zcmZ?wbh9u|6krfwC}&_${Lk&@8WQa67~pE8XTZ$J02KPk!pQ}sb$}SCNPwXUNE;g) zUzs>(Z(!77JGc3>*6iGRI6Neu*^^_}#f=kK71=TaS&gce^P7a;bBN_}oT|#jl4H{% zy}K;$u;m}oeZ5VI7CH$oPD&q-OUO-OU)C0}f@`V%(l99liORS)fs-`Tg%GxaoWO_I zRyU4S7dHx+0Btp#aL}@r=W694Rl!F$VjExaoi$r_ZSldrWFyDKKl_ATn_bR_bLa^kZO7^=XqMFgxf z$F4j7bWboW-Qj%9v1DGmk`mQH8Q_3@ZfzHz;k|K-_Utjz%t7dn~_Cwi#Z zsPLb@vcX}g8}o^jkR!$-;&|;tk4XGMI&HJ1g|=zy!{4kti@*PFl-TF|v0#b-cRpYZXzszpU=0BDCR95B literal 0 HcmV?d00001 diff --git a/assets/characters/mushroom/mushroom_walk_anim_strip_8.png b/assets/characters/mushroom/mushroom_walk_anim_strip_8.png new file mode 100644 index 0000000000000000000000000000000000000000..44751b8cc0c00c7ea47f7caec639e16c04f3c50a GIT binary patch literal 819 zcmV-31I+x1P)aTr$XxTDTj{#8Yb8@{e^@=h%{{b2>ebdu)DVp062NPGZs>p zZ_Cl$+ppxRdH8qN#&4Sb7AJ7mnGm*pL_(x$!n%B(!^EE)U*H6HS}xB)v4mfrKOxGF z+b-TF>TeM#Z2QKdxv0SJAOs2`>hdWEFWQ8v2GaEKCI)^7lMf#OK-<7g*5BemHs^8# zeh0|zX-)B~z#FLJ)}6q&px<=+;ZXJG28ffn_1?wB#mT%BSC_BG*!U`%n80<`Pk5hA zxh~dZpxgk_B0-o1T>bg|m-)#4M&=;Jfl^8@5+YrO-}Do0-3eT0{X&TJc6-M;{&sr@ zS3oMI^jg4+03k#gEfQdn;PU($!B)3KjHfe1;~Nl%pQ9$Y@J-@rimDoD<8sjS5Xd0v z1ilshPzJz7f4&1y6HLVe$dB9H>%!NeZUeOwtTYeMPcW^&iTYb=04;p~@PxC|qr$oS zhbNq7i0rXkP-avUD)Vl@6~%moj!2nW9uh$Qa zuS{*{c;ifOsYr+poUenryO=;G1j+{L^+V^2*yMlXR^_ULv}_(11C@4wsx8j8U=`P9 xAlvaO^Kib-L{&SN4Xg5+;;v#I(+;l7^$ZaE2-6!@hCl!S002ovPDHLkV1n$%l?VU; literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/fall.png b/assets/characters/nancy/fall.png new file mode 100644 index 0000000000000000000000000000000000000000..d71f208f40b5eae598e39a75ff757addbc252e9c GIT binary patch literal 389 zcmV;00eb$4P)Px$KS@MER7i={mOXETFbsyB2xX|0p(owY1u-DeAJ{*O#DG{U!GOeoPNG9)&T$=+ zT(9cgJModnuMLg?;K^mQo0YFOeyyK7mC^XWV1tVsI$u1TUS9X}ahc$=nAJpR49eew zl?pKw<_Sw`*Fj7I&9xX>5h?x>U(f{{Zr4FAhO2QUfK&JaR2}*Yyv2il?hFOmb%2le zw;w>P1@6U<%ap}iev?;CgGd3ne#7^3XRy~(`Ct#=apTHp`y5S@%GcYiJm!$YTLjM+ z|J}o+h#XbE-uM*BjY$qui0d`X!DT#q=M%l@{XSoPU=` j;{)*t^KAScPx#)Ja4^R5*>LQ?Uw!FbqwlI0zjo+;EFH2;K+Y&k7xitDr-`p&WQqdTCmPyL(fb z^t~jn6yQ&&t7314L*_iXgp(X3;r24nHa4EueS<|~BBD825};1Iw~d7*V3O1F0>>0) zxj}}C0*_8{!W3qBKJFPodQi!t?8-$-f>DhdIM&_i_{9mxz_IRPfyY;fCX#_fT=xye z<|8tNIqMz;JURsi4icdEZox*e^u5Fid^aNVNfwP|HWYN}ay0Rzb2fp5N2f|V|AgKQ gN9kjIEmF$A0pOHk0Y1|g82|tP07*qoM6N<$f`I68QUCw| literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/fall2.png b/assets/characters/nancy/fall2.png new file mode 100644 index 0000000000000000000000000000000000000000..ea5eb7f9fd390cea9e006cd1f10d203bf43d0e23 GIT binary patch literal 273 zcmV+s0q*{ZP)Px#%Sl8*R5*>Lk-Z9oFcgK45;6!G6dbw)2O)jHzO3LNu7VB$2NCR0V&lD6TiP?3 zc+Qvm1N^Dv>Stx@Ek1X?Wqx)MhsxEU$Z`O{I8PXqXOM&j;}DeuQL({k3+VT`S^6VE zfhi3ioo|yk&@4S3_Zth)7E)@Uuf`AwC=StS%gaBhVDE~qtXvHSq@{G`g%+o$Tjf=KsI X4lHMUBbZlb00000NkvXXu0mjfeAHPx#$Vo&&R5*>LQZWj{Fbq5glcC_Dg$`YUhd}zke%6p7cr7GDz=J8IlN{MmnwH*V z%ev!E7Vsz3-h(ym!tcY}i@jNqlddm=%jpaN7{i38o<$+W$($sCgt&<24JFw{pDSo= zP|;zSd*!0X7^Xyi+;1B~8KEj4DJy}CNP^-JySmxhKXO1rBy@En3WyG@X%~qwhA9o! zMKA6`a^RxRZ1caT!AhurH5Wx7a#uH*&~5}mxxOVnMv$8K_Wx&C(=JEuz7mn@Z>&;k U$sZ&VL;wH)07*qoM6N<$f<5SO00000 literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/idle.png b/assets/characters/nancy/idle.png new file mode 100644 index 0000000000000000000000000000000000000000..f773a618b808244f0d321470b0d41a8cb7cedfa6 GIT binary patch literal 361 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3-oPT6RhUDaPU;cPEB*=VV?2IUWH%A+A7r z%Pw~vX}#PYqi|Jgjqv0-sW}R~D(=Eg92^`MxAa`eGoE5<`~S;>{xhdtrgZ9S$9P-M zajm)bX`Ah1rz8kz%4w)$k*WkVOQIymFPPy!cJT6!iy2VOYEKu(5R2ZalMeD7QQ&Z? zmgc+n^S^!UmDstAvwMASeL2Xp;)l(1c89b*9{x-R&T25snE5zV{*BIyBYkH!H!f%U zsNc$U?Q)X4{{2?Abrt`* hAN0wuId5CfaF<8m)AXYZ?m%ZVc)I$ztaD0e0sy09niT*5 literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/idle1.png b/assets/characters/nancy/idle1.png new file mode 100644 index 0000000000000000000000000000000000000000..d4918c43ca766666350a539a51a6dda6b27001f9 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~j{u(#S0KG* zm%EO%UT%+3xT>{Ac=DXo90gt#cVQH6Mclhx5&Z zgy;Xvr}`_c?esPI#u(;mcS+=@0e9=BtsiM(3&iu(F~rhelF{r5}E*D2W$2K literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/idle2.png b/assets/characters/nancy/idle2.png new file mode 100644 index 0000000000000000000000000000000000000000..d5a7166982b55f2a5a2ea6409f4451b7cbcb7065 GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~j{u(#S0KG* zm%EO%UT%+3xT>{Ac=DXo90gt#cVQ%AR*ruO|?R+BeM_j*q~)_JD8QLmHt s$>bv$p;^n$94&wL`zG5D2iXIR)u&j}EaK$EfaWuJy85}Sb4q9e0Qs+PYybcN literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/idle3.png b/assets/characters/nancy/idle3.png new file mode 100644 index 0000000000000000000000000000000000000000..e59fb91555199624c3dcc6da7fe8839ad757e9a3 GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~j{u(#S0KG* zm%EO%UT%+3xT>{Ac=DXo90gt#cVQ6Lav!|P0n*0Bi rgy#dPPK!c4hqwEu++^T?!Ty6G+k!=leWBlCp!p1*u6{1-oD!M<#UpKI literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/idle4.png b/assets/characters/nancy/idle4.png new file mode 100644 index 0000000000000000000000000000000000000000..ed18ab507b30f0c94af671798e72f26673fd3827 GIT binary patch literal 267 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~j{u(#S0KG* zm%EO%UT%+3xT>{Ac=DXo90gt#cVQSQ2h+`z z7w`VpM-^r)^_2D5@kHc-abU9H$vrL;n>D->d-fcgxWHjzX-~%EeVW$1TU7Gve3@4n kbgx_<{{8_2zXkUV4^bACHom`ZK!X`PUHx3vIVCg!0C5LY0* zWtY2-v|etHQMjtLMtJg^)Eos~6?b7L4i1isTY9eK8BZ~_{r}}b|C!S+Q#$pvW4x{B zxYk_zw9WRhQxb$UNL2!wB~cRO7tHVdt!(b7tG|u5>^2b4j$Dw0-Z==Z06#ChYnnZOpz@k}KG0Hs4O8=hjyb vEIlvYcGTvN!LqYq^EcOCkb12BnESp(G|#2CH-1I{UBuw&>gTe~DWM4fF!+lw literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/jump1.png b/assets/characters/nancy/jump1.png new file mode 100644 index 0000000000000000000000000000000000000000..d51cfe72edaef5e58a398ba66875c7fd66bf8558 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~j{u(#S0KG* zm%EO%UT%+3xT>{Ac=DXo90gt#cVQSR2lLHS z56=Cs&r(#oQZ^~rqNjpUSSTb-m$8UxC)*OvxbMxM83iWHF}<`PuJ{bk^kwgkw#}+? jjNUi%+j_M`hjZdhKUs=u8AF?Z<}!G?`njxgN@xNAtjlOa literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/jump2.png b/assets/characters/nancy/jump2.png new file mode 100644 index 0000000000000000000000000000000000000000..c41527bdff4a6445a30828fdb31c445c32362ef1 GIT binary patch literal 272 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~j{u(#S0KG* zm%EO%UT%+3xT>{Ac=DXo90gt#cVQ{Ac=DXo90gt#cVQ)5S4FVrpu?p%8;22lLBo zhwT3UU-{t99LM09r5*~8gayiZt1y_XFSE!_Wzd${bx?QOzG6uj`6mh z<63j=(>B}3PDv2bl+#ehB2@`!mPARAUogXe?BL}c7c-!m+nz3tAr`$yCv9XpqQK#N zx8TLO|NmdE4Dp?CDew8EZk2wqbyMnPGoQPv8$IJ(b&D@WskbgyDB9pWk9Ohh<;j0m z-Eau{&rxufu{!XHQmo_sHuw6}`kahkRTpZ9&+sM4|{~g{L2kzCxtetwUd*{Ac=DXo90gt#cVQ{Ac=DXo90gt#cVQSR2lLH@ zg!ljJvp5AWxa^*wT(RJU_9>Z^9o{SC?V fG|R|i{{JG~zA=AwF|}9;G?c;9)z4*}Q$iB}f$?UT literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/run3.png b/assets/characters/nancy/run3.png new file mode 100644 index 0000000000000000000000000000000000000000..296f6f0376a3ae75d0844228c71c5a475b1fd002 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~j{u(#S0KG* zm%EO%UT%+3xT>{Ac=DXo90gt#cVQAs>SR2lLHW z2hRPk*Aii#lp(&Ci`BKRDf>gw!uuyuB^+0)uU;6X7{Ac=DXo90gt#cVQp%8;2$B{Ri zT5bRTU&*z2fqDAVG}Y#{e`Oz>o3vuBrl*R9bA_k>=_*40jP{Ac=DXo90gt#cVQ8bg=d#Wzp$PztW@z>R literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/run6.png b/assets/characters/nancy/run6.png new file mode 100644 index 0000000000000000000000000000000000000000..fb3a4cb54543d799fd00162b1dbd2f6976e880be GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~j{u(#S0KG* zm%EO%UT%+3xT>{Ac=DXo90gt#cVQSR2lMW! zjdTD14{=nQU~!{!w*c1%=_;!kZt$T(DvT`1vVrIBjv*1PZ!cWrVi4eIO+2-A z&;Q_4+y&~olLEc}-haDo^FtY+G6o4v)$q4HY2VV`8@*7;d9%IFVMgoG8GrH~u6lmO l_guGhRl^@&$$hK;uVT#dFq`*m1Mf|cE>BlKmvv4FO#m_wH5dQ@ literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/unformatted/herochar_attack_anim(new).gif b/assets/characters/nancy/unformatted/herochar_attack_anim(new).gif new file mode 100644 index 0000000000000000000000000000000000000000..ef5b8c042205b197bef2bdf323e5c5c13ef26eba GIT binary patch literal 414 zcmZ?wbh9u|6krfwC}&_${Lk&@8WQa67~pE8XTZ$J02KPk!pQ}sb$}SCNPwXUNE;g) zo5ajW??1hB>tT>M7%-c0?7H*M;FQBk7RMghB)O?iYZjiUNwDN{^b%k+3}TKh^WI&! zYEq`O^t&TmZE3sjy?i14Ozs>D!U{$PCI)^6K0H0QCSa7&_%lyk(*nx5Im11BQ+0AxHbUgM29c3s@7)8XjaFlpEE zFZ;aAY7`XASRT$emr(o0bZ0|_OB z^f*>s+`FLDl3Dud%^9Ufn!d3lI18LpShb>!3`Kv6UZyjB9IpjDX3mfyL*|SIyyiI3?Bl3I%aox=T2|0{XbA)`B0qkTA|(U= z_P1@fbpVkOQP%&Zl&WH`WnX_PfMqldCDA=$7RuGnxC=kux zt^Q7C<`Fj-mv39r)gbHA#H&O;RzLIqArA7p-6cng`-BVBR}4rLiANlMArKSKR{g3Lzq(@+|Pi$0~#jM2-!!DW&2H z)SUE1z+Ky7y-j==0S<)4w73-HpJcm!EQC2}FL|YJ2E5dTl3&Z39gybddw2&S66pGI^$jH18eKr00oGTPQDp*|_ TmURZAo4^Q{XXfb(WUvMR{Rt}R literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/unformatted/herochar_before_jump_dust_anim_strip_4.png b/assets/characters/nancy/unformatted/herochar_before_jump_dust_anim_strip_4.png new file mode 100644 index 0000000000000000000000000000000000000000..f13059ddfb59c43ac0603e082c47601f0844414d GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQo)`sjv*1PZ!ZRNF$nN9BtT>M7%&@i?7H*M;MB>ctslD#T`CTm#T7a!zA%j9@v_ zd3X1Md9u$$ra0<#DXw_rfn+`t0}BHW5aKppmt)n%y*eF^t`U=7B|6@__0{t1fq*5# eye}{NFgjYam=~@MXPu?`NJq#`G*E?s!5RQJP(qym literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/unformatted/herochar_before_or_after_jump_srip_2.png b/assets/characters/nancy/unformatted/herochar_before_or_after_jump_srip_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1146f8b671fca5a410e5ecbf29781829bf9592e5 GIT binary patch literal 332 zcmV-S0ki&zP)D-647^MO`;}ss4nMG8D6JGYJTOpDTv(~JcwbWEO8c1%Oo<%V?t5>8+o8yb&u8Zn z;2(b-!P_9Bq+`tNp8qMw<5^N@dJs`g1Oe$55t&2gdmKS0%A{?L6>;0m*w%PD3C*Fw z%t-rEI35fFvv`jErnuzKI9$QDMzr1R65Io;iME@oCaMYCYcdOG6SU%$0Byi=m@p1g z*_Ue%USSXA3WzA_(SLkC0Vrd`+xx3aB%QAX%e--zaCvz?3XsT7g?NH#U#@l|4H%l< z6s%)K!1w*f6q+7sU&@nH!cILxO0b-$*F-e|W)1`-pnh`JkLE!ZxBPJRC$tWEvEzO$ eLiL~FHSq-sGN{yBb&Y)h0000M0-D*L)x;io2SVb@L~g`(BxL?fZT! zav{uOVPIk4VBkVCOTwj3?XdE7DVYwou>Kn{pJgRHl$e%EE@DO1$O+Vn>Il)6eu3TF zjoLWUc)ddfYOdW)m6|*SMHe#zH_*BUpwofwW)cIcuasVEJDk=U-KvD2rt#z zd~6SrN@fN|23`g}xY_(I{gn&f@;^>4y4JmU;ZD3NWtX1@s`NIx)U|oqbrA+@0EVk{ AcK`qY literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/unformatted/herochar_death_anim_strip_8.png b/assets/characters/nancy/unformatted/herochar_death_anim_strip_8.png new file mode 100644 index 0000000000000000000000000000000000000000..5385e127b2a665c82081ebccba8343efae228db2 GIT binary patch literal 450 zcmV;z0X_bSP)c0V-AmwJVS&+*N|FQXNXb*#d0x zQsJ_X70^0Y0e~r_Q~?2hM9F0mIepYuMRIT@0eQ~=03eqs%eiUa4|B3T5p6#DVU7|| zD052%{7B-oXwR|@3ZOQa8KN7v-)F*=r735J(A>T6>~-w9spR*=tbzj2!PiicC0vtb z+Mh*Ws7%L@)5^WML=}?DB%A{9ktMn@xexCFGYcY8w%}6N)j`^G4siAUn4n*wucx4R z3t(nJKz0_@`sNT*9ajZu?d}pAavo~_14t&+)7c=ez4!O+|j{pDw07*qoM6N<$g29@{egFUf literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/unformatted/herochar_hit_anim.gif b/assets/characters/nancy/unformatted/herochar_hit_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..428580ee9de91af9e863206cd2a11521df036d62 GIT binary patch literal 221 zcmZ?wbh9u|6krfwC}&_${Lk&@8WQa67~pE8XTZ$J02KPk!pQ}sb$}SCNPwXMNPqhD zfk~mIf2DwI_MDuoTPf*h^9%nc#+3J@ST;$Do{RF*E{gG&VLiiJ6h!f0{|N wMNqO`)7Zs{|JICkaSOFlSq__#VkksO+nE}#zVtUCA}%JK#Q+hIga9rVG5H6r$7}nv9QTV6+Ye|0X-o$%C z_pG!hbgvJZO`OBp*^E@?xL(XiWk{OVFGLr%?e0dV)NMJtktro2?x#~K;91A)7nz8s U^}g**_y7O^07*qoM6N<$f|0(ab^rhX literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/unformatted/herochar_idle_anim.gif b/assets/characters/nancy/unformatted/herochar_idle_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..12cf9b6d41f427597b59b49e34137ff9739c5e29 GIT binary patch literal 426 zcmZ?wbh9u|6krfwC}&_${Lk&@8WQa67~pE8XTZ$J02KPk!pQ}sb$}SCNPwXUNE;g) zo5ajW??1hB>tT>M7%*FN?7Fi~vF&)1g!38kjq=f@jY2P2W~j_vEVVJiK|rvuY}TpX z_#F`v^PY*gq{i`1X=~Y|ID7ki{m4QUBzu^EhH>My$CP8$#ofL=4`<8?W-*Ii>~Nv- ziK|tko1lwx%X~K{iEXXndzU)vy|oSez&5#3&Rt?sM52N?C&DLaHUPZ=^bCqmOn^3Q z)akI4lQs?)*idjuxpu+isY#!KHs}Pg9=ch1b+SgqZ}#%t7xbSrh*(ZLasEUIsuvi6 zUf{438vF4&qiRJ$NA{;c_OUqlrs;XKKjNp0=dhwdZb|9$MC_%*0uy*Yik; Hk--`OpumAX literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/unformatted/herochar_jump_double_anim.gif b/assets/characters/nancy/unformatted/herochar_jump_double_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..5dd16e337e50481c47cbf8bb06e039a043e58a7c GIT binary patch literal 229 zcmZ?wbh9u|6krfwC}&_${Lk&@8WQa67~pE8XTZ$J02KPk!pQ}sb$}SCNPwXcNE;g) zo5ajW??26?*V4c8^j*e>%}G3hVJjr~X0n92Xx(;i>bS9V*;Ti+(#UYJqDQ^YlTLc9 zlsS^bh%k`?S)7s$G6?FFYH7}Bm~`t{ awez`@bkW1DXF^3q@-B$#Ob=vWum%84T|l(} literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/unformatted/herochar_jump_double_anim_strip_3.png b/assets/characters/nancy/unformatted/herochar_jump_double_anim_strip_3.png new file mode 100644 index 0000000000000000000000000000000000000000..857e7a5bc2322c3e395d36eba47ea6013fcaf35e GIT binary patch literal 336 zcmV-W0k8gvP)>O{hO>DNSEM`%iEEydIrE(K&~+7(7!p=(FU$!!wliZp26*t`EezIyh{W7R z()9l?eCCFf_%JRI5dZ*52oPID)Wj=Vi_luYgF!^1k|v3`Z$D?#ydrpaN#czBFfIt* zoeI$SVO$RPTOvLx2>_r7R`M;F<`vVt7Ph!=rvg**%ER(e6eC2^48DRU*BrTsjy%o2 z)eexnbusW==`;sP1n&^MYZlbg?V>bX39Gd;vqBuPy3dU%VqoaP9rh_s#g z!@eSM2f@3;8xRrT^<67KF+z%*Y%6*7y@RvuX5}mbbd|<^tG4WFkN2)YE8apLUrqK~ iKcd$7cVZv>HNF5u9kBspef%N-0000tT>M7%*FM?7Fi~@tAtEL_|y4#_!U?HCK! zJr2S!427MD%P_mg=~{_%FfcPl>e}PfGsg)F4vw3jCV+r9HEljW*LAD{{JBi&AtHKx zkBEv)iT?z9C_&~p0V2vEfB?Rfh>Rimcd)4!F%s4Zr?f7oWHs2l6oZJs-{ve|^H1^m z3v7~Y(J;D~_#XeL60!<8xYh#v61{w@zts=@Z4T?p`3jfwHCopsja&I1|L6?x^)R}w z3UZuYo^xp7EraGbMLn$hxh6#PdWy92lG*ET7}fw0MTaUkePjZ|=zxfL9mUE`pPawW zA?I%&8_l|$!e?Vc8EB7~)2v+QB>gp4^0xvo66A{PO@I&JFuKsgI#!7Vc($G7YW|xs xy2mJ|Z}2v?kvF&eyZjm-Nl%!6<3o^NtT>M7%*FN?2?kxF*9sy5ZZByJ&p0HZJ$U;iezg>R-BxpMa$0El(MpU zdS&xjS1awB(cvn3qNwQR6v;$`TMM*=5cV(u4dX%B1GEHa6^cEk9J?-V)akI4lQs?) z-B7@1-q>p~Ddw}Fi?c%zt5IYcW2|kFvwxyk(9`1L9H)uWDqCZ;rgI`}U394_Z`1CUiWBYbTnakz4fx#L8(D`1I literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/unformatted/herochar_jump_up_anim_strip_3.png b/assets/characters/nancy/unformatted/herochar_jump_up_anim_strip_3.png new file mode 100644 index 0000000000000000000000000000000000000000..05af352f8473bdc0c626c89deca1293f04ae2e61 GIT binary patch literal 353 zcmV-n0iOPeP)H6SUC=!IZirMp^nKvw5lgk@x2#gJE?+1Afn-GB2p>l zTfC2breM|dfQVKA5WwVY!Wy^TeEe3!bAJGBWFlT6pE-|h)zL306X!uhVD{xU{!{@8 zZ>tXZWSN)pOec$f)WE40xWXf%v6au^odoRHs|{{m%a{6lE5I`!hY7}Ea@MifR(**t z^><3ikF2(vkAabq(L$z%ukk+##o8cs`rN_CG<^K+GjN5k(Kr(DoxMcleNGumF2#oS zz}b+7a}RJ(u6?~IgTJ%w3#g_CvoFwgbM}28J!7+QNd)8Ryfefcs4)*|{gjtg_;>yV4B8#`R~IM*00000NkvXXu0mjfCa|B{ literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/unformatted/herochar_pushing_foward_anim.gif b/assets/characters/nancy/unformatted/herochar_pushing_foward_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..c9a836e399510d963c4827c29254d93b51fc5bd5 GIT binary patch literal 587 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 YmtV>j^T3SnjFx7g*mOUBHAV(&07vnm>i_@% literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/unformatted/herochar_sword_attack_anim_strip_4.gif b/assets/characters/nancy/unformatted/herochar_sword_attack_anim_strip_4.gif new file mode 100644 index 0000000000000000000000000000000000000000..9ec015288318abb774f88093cbee2a5263577a13 GIT binary patch literal 517 zcmZ?wbh9u|RA3NbC}&_${Lk&@8WQa67~pE8XTZ$J02KPk!pQ}sb%2-wq^t=@|3AZE zY;0^2Gb6qK^uK@qc5Xck6l4yN*mdWh!6{E|QHk4HY(EdFmAWkJE+27gMvD z?+2(~Xj7D!82xafB2SnO`?`(48?p|H7aJI-X>G{-TroFgrf-z^CYJumjEOq#F1kXb zSndP0JR4|vC;QJ^-x3nkI+8QBTwm{VRjFu^^jm9ueQSb*w%3}8fvl}PchhGI@-jE6 zCJN+QO_pEvc9zY(fUf)>EO8S$pE@v+VzD>G;+rj7O>R5>5}2t{aHO?$!iAaYQ4`k$ zoY`W%t|>8QYptOCwKGd^l=P_zY_w3A*l;TK0o&ItOIG=RQc9g67M`=k;+WN`bu9So z1qL-Rz!9PC39}M{P)H&H~_OY$GKTK;r}au7a9Lc<^W8&cPN7z?XcN zwAPcYnyYD=q=Jb}eu$gmf#w~OiAh7`e%>6R5 zsSx*v9qbP~=a?xTB+(I$XK60Obcmag?Rk{G)f*>M5!dXC)Yt`9ueSV}u$QcO!*&()4YSIGc=CZLj2r$lF zV*3{1J9_#AP#|cs+<15<$&+vQ&zrLasQg&rZ9h>4 FYXB%QNAv&y literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/unformatted/hit_sparkle_anim_strip_4.png b/assets/characters/nancy/unformatted/hit_sparkle_anim_strip_4.png new file mode 100644 index 0000000000000000000000000000000000000000..1024fb8bb9c7fffc75daf3480724f7c4746db0c2 GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQWHI0977^n-%dNo*Py`T-2QRT zhyU@JKNxLiY9uxFY?}1LPws@<>p7w`r%c&4ccEKxvKXVccd+?$qmX2YTOUOFO%4P} z|4Pa_8qM=*#+pa!6S{ZUDId@K;n98K*VBTtthO$H{*)}+!W>aoySGxuaY{g#a6a3f z-0G_m5!0m491&DJ&Shd3&CIj8uprI5zNF&We`e>3l{;t7oOTrGI0jEwKbLh*2~7Z! CTTv?j literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/unformatted/sword_effect(new).gif b/assets/characters/nancy/unformatted/sword_effect(new).gif new file mode 100644 index 0000000000000000000000000000000000000000..fa4ff40afc8e68715670293b0268597d0b14063a GIT binary patch literal 186 zcmZ?wbh9u|6krfwC}&_${Lk&@8WQa67~pE8XTZ$J02KPk!pQ}sb$}SCNPwXMNdNoy zk4dVff92`7{ExY|TuS?Vn(1RCs_E}PJ&?T#n dmwiN$jb~$EW?+P?Wa{BYm1IPg^kHPM1^``SF<1Zq literal 0 HcmV?d00001 diff --git a/assets/characters/nancy/unformatted/sword_effect_strip_4(new).png b/assets/characters/nancy/unformatted/sword_effect_strip_4(new).png new file mode 100644 index 0000000000000000000000000000000000000000..795f01ad95961b69dd6e6a02bc1f22a76c561e11 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQstg5jv*1PZ>QbmI-tPOdiHz$ zv&-w6cu%>=nmjKTeYkP)UxC0t5!a9Lw#t27GTl!auG4Ay%K6LcDOYi2}Pk7HRsEEt-^I$~iWMW`s;9_7$(<$5{%UHQ$ zkzdtCR>oY3&hz|jjs*1xw)9IfcAsXk4)9<$zMNb-SCo(~LLggCFY@DJTGS~!&x&_{ IE-QmI0RK-%r2qf` literal 0 HcmV?d00001 diff --git a/assets/characters/rabbit/rabit_idle_anim_strip_4.png b/assets/characters/rabbit/rabit_idle_anim_strip_4.png new file mode 100644 index 0000000000000000000000000000000000000000..80f8c7a740ef69df0af04c93d06ff04c94c96d7e GIT binary patch literal 217 zcmV;~04D#5P)Nkl~VCUAuB*z@3 zu}#egz~_DzLKZVHFfgcE3X^R)AqP-fKdJ6V2>@)GpI0qlkZenUvq^Qp^Qr|5subvF zU?4sM$VqkZEPzWh%=74MY?fm)gIN8z+<+Wt!~`Iz`Wf+AjtwXYX)$6GAFBERg5Rr4 T0m+F100000NkvXXu0mjfFT_;@ literal 0 HcmV?d00001 diff --git a/assets/characters/rabbit/rabit_walk_anim.gif b/assets/characters/rabbit/rabit_walk_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..53da2bdaf2e1243f0592856367487dfc3ddcc13b GIT binary patch literal 362 zcmZ?wbh9u|6ky7GTl!auG4Ay%K6LcDOYi2}Pk7HRsEEt-^I$~iWCH5o#?UF=BFk8Ld{Gn^ z(>7DdQ^n^e@IAIVZB7&+9)14wMKz%C~-Qr@BnzrduW(i+glrV~Aj6lz^qXmm# Yi~O{9&D%{C3OB5C_U-xoUzEWb0D41nYXATM literal 0 HcmV?d00001 diff --git a/assets/characters/rabbit/rabit_walk_anim_strip_6.png b/assets/characters/rabbit/rabit_walk_anim_strip_6.png new file mode 100644 index 0000000000000000000000000000000000000000..0a2859f4030b52d30e1b3da0232b3df176822091 GIT binary patch literal 297 zcmV+^0oMMBP)qvXVXjnU~vOJz(g<0Zy$e4u2zP7@2>q<64GM4ef%xMK)Hcj{mAac z=60MBfUcNS%aQf(+Hu;8 vu7D;-Kdco5W0PYqx*6!|(D~GEZsGy}V8k*tQOnNr00000NkvXXu0mjf{~d!u literal 0 HcmV?d00001 diff --git a/assets/characters/ship/left1.png b/assets/characters/ship/left1.png new file mode 100644 index 0000000000000000000000000000000000000000..ff0d49f23824bc2407b368dfced990d8a661a2ef GIT binary patch literal 560 zcmV-00?+-4P)Px$>PbXFR5*=|luKw+K@^6+Y2xETyQp1A3xO&~3o1lcEm%sf)n!c)T(~IWBGyH_ z5CX-0;XZ%xXGq+13s|05FvuQ6bupsOBXlNg^zLLTxW7;BtHzyIdjfG z|2gvzQc4tZqeEzrm=L#CjEga~s!s^CW+pYE^Lj*H7-0 zm)SkM$;S^te+qiBxH8RPA>c#-7(eSINGNEf(s2_3y5&_${$&3IYWGKX-&zwc4;q)v zPSDx@?A)<01zYdFu(&d9O{jJw!xri-sAFuU(up7&8l6ahPx$$Vo&&R5*=|lrcyfQ5eU6=SAy*4w6BX9%w-lutRiGsFfT=ibI;<)|4YUqfgk-5G9ZI2sTZWbr3Jn=9#X;@s;vMgD?@9jC9pC$Y-~W5x zd(RL;;3+vaj3hx&hWt}+x&ZW{mMA%KK5Z?Lw=5k{3lMqB;&Eb=XB+Q%vHs>hS0RAN zTNVv70>E4Pn8|1O{CZyt(Y4UCBHl-GY*pgi6N^{2Sg~@W$9MBcVkq)tjyXiYZh&F2DOna9(CfB^UVc{VM~1 z{!%+CGkV?Dw@`1oM)B$jGgbA24`P#n#Zt__nes`*OjU8xHZ=|zU$i;B{Kv#}27vMQ z;$5uD?eVhG0Z!UxZ7!G+s_{cAaZ37D8&Kz4@twFhaK^n Ql>h($07*qoM6N<$f=o2%IRF3v literal 0 HcmV?d00001 diff --git a/assets/characters/ship/leftmiddle1.png b/assets/characters/ship/leftmiddle1.png new file mode 100644 index 0000000000000000000000000000000000000000..f98c64a05cb2cd0246b0d35bf45733a36f41b081 GIT binary patch literal 595 zcmV-Z0<8UsP)Px%4M{{nR5*>Dls`xtQ5?s=FLzP`$&iYWQ_dPnv5>`rEfFdv*E-Z8y>@h{o0SeO z5^UFk5|W|dq)s9fiX;$3ZxFfQKiaWFp-wtv2o9x`3uLmt4(46oyL;E6UwCl$d%xf3 ze!uVW9wQ>CR4|g#Mzig)f{{eC?a7Hm6k7Rog3f2h>DSszI-eb<{mcO6(+TSBNx916 z{mcOAl^Q*yYtkz<(knH}rxQv@EZBA_9>;~I0{}iDh6kk=q0yRc4+SF$05afzqzAt) zYP4Ec7WKMd0KkYyS$ucm4vgF|w%0zR-tm;6X4_-Z2p5{}&u`?0k(e*z&9@`0TlXVJ zPu0stN>I#8JzM)vf4 z^#E8sh}!lgc~I|o(25SO`clZwE#uwR9_}r@M|N%*SA8jHMJE!#s@*QMq65n|{momW z87bMaO%cMR5lZnm`)ZrCkn4y0>>~!JOq_lHjgjolSs45|g@s%{0KkRAu6JktdcY6I zbPu*u9t*X~i@Er{5EBD#qXht1|MDXQ;4!z+!r{hb$OENRprAs4V3GK)0y6PVeERwX z07(23qTEIcJLNHUJC%&?z_Lxoy$BXtw#kBBNPxqQNk7qTw0u)}j6X|K-O5kqkHu$N haW1jqTuO1i{s4OJ6r@+8m^APx$?ny*JR5*>Dlrd-%VHC%IU+;RP0(q>{>(e>7)@dHX6HP@3* zm_h+45iy$2EuF>5&GBOQ6V0Ay1a-Qe(pEUO>|lQWHfQH?1mvq zTcMIjs4rz#wsMoS*IqKc;_~s^ALg@zZ(;h^3R}5J0NS+F>6_~VO89?JefM2}KxnGH z&p&yzHm{5~XutlU2~Fm(CIW~vn_zJO6_+A3U4;#%1Zp%UU^GVn%j>~w3n2dFV%d$D zBY>UNSq&1N>;psnfhg{`e)Y~FfZtTUd1rN2)BOb^b>_%{2-!;j0000Px%9Z5t%R5*>Dls{+_Q5?rVFLy-_E<@>(v|P|ZTFBC=M5r_#cCbT;WO30tX%Tc# zLUnZt1QeX2Qz;Z`AvB2GqNGSGjV@gT2Qi>gVu#|8KqmVfE_ZqNrxpB8_ulXK{r!9W7k>>1Lz4BgguzV3hX_sfPMlw4OpC6^6@wx)A^ zgj{%d^YLdS7QRR$H>cQE zA@V6xdXtSy_!s;c)cZY3W>RPchr_XPvdgPHT6@j;2am}vuW~pxj#hBc3XTX12#?&b zUrM`Z`N1>O=K|G+G0E`H-0Aj&4p1_a!b@1mP0+lu!Q_I)`_IRm&0Ymy^7jHOxd{N8 zIQ)6FBrc_s=sVpWOTu+EKdiJ>nT_=7kv$l{`lA^*Qc?$+jSc{{)=@;j+w*c9DRHE9 z1qLGav56H5!#@Q>%2<-RjuT9%WI)8Vq1xZ7%tnqe0J~`UA}X4V4tCKJwboH!$U@5C x<9qq`E_TtP+2{lUcF_`^(A(!1BL)5&e*w(v*OmGDW0?Q|002ovPDHLkV1n^48zBGy literal 0 HcmV?d00001 diff --git a/assets/characters/ship/middle2.png b/assets/characters/ship/middle2.png new file mode 100644 index 0000000000000000000000000000000000000000..f35efad6551a1cf2f35c1f2c4739c90dcf8d6b9b GIT binary patch literal 583 zcmV-N0=WH&P)Px%0ZBwbR5*>Dls{+_Q5?rVFLy-_E<@>(v?jEJw2-}=AZS9J>JU;yq98=nN~=p3!9k4wDy4%sB+$v8L;CLC-MwqU?{x3?`+mQ_ z-}}AyP82gX3GgCop(B|9Rm<`Nwf%h$pzcnPb@J?P{ou>ycRyaWETM4w2CBGfS#%7O zi>vSZ!E3NxYjWnnWtHQbq;%qy&pWJ2dekXWM8>jqos7$zMfm}%C@V_&(?)sL^KyAvUi zYM7E@)ksC}@h$B(q)BLqm#&{?W^zO;fd1WxZZ}kJN2Cjhmmhw`a?y(vbaO=8 zDnv13dvdZm!g26t(CBrk*lA&uTI>xBQkY-l_VP1M-CUwDzsTOeAV#T$QEG{(fso>L z_lf7u<^1G{@v%^~!<@(A%Y3!l6(&H%P76s`aE55lt};BGO!d= zJB27jv`s)Oju}jq{bTb@WMy|Qr~RphP61%)#SU+pU*%FJeeqOzjJxMf>b(9B{{TU? V#_PITrkMZ$002ovPDHLkV1lJ37xw@F literal 0 HcmV?d00001 diff --git a/assets/characters/ship/right1.png b/assets/characters/ship/right1.png new file mode 100644 index 0000000000000000000000000000000000000000..984d36d2ed4980aacbec16a022d5368caf620fa5 GIT binary patch literal 559 zcmV+~0?_@5P)Px$=}AOER5*=|lrd;iQ51&1XQEPkL24-^)j%s03nB!er4FUZ({_xJf)s}i4l$FP zAl)m$ZceeFgP=obF&)gH@(PORq(TOrESMn(N{2+cm>ie9>$`dHzWBq1d(ZvvfBtj0 z97{y-kV_@-LC|6O4|}aP07nRiRGb-h*O$37GGY?!M@6)iP1=%8+A=F$nU$`@?{7;s zY0HbLamgla>2nm{8Yn>>9`!A*(&I$xBrA4;v)w;z9v%W%!%FyXC;@+VFY_urK5af% zv2U@s*AvB!o0Qk4&#-p;60OhQDMdIi3M|c?#x9nbE&`JmhnHYNXX`E%XNH|ld$@xY zJ7Fa5t}g>{_1;UfKop)lcpnXs_{g!J zzj2>!vC}ySI8Y_*wb~XyEMHfb$Ine^!6MaihDxEqtD6_1OQ@DJfmmsNER3p^fLm(_SvxQJeq(002ovPDHLkV1i@f{O$k% literal 0 HcmV?d00001 diff --git a/assets/characters/ship/right2.png b/assets/characters/ship/right2.png new file mode 100644 index 0000000000000000000000000000000000000000..3ecd38c45ace5a2778cc7828c02a223a4d554a8f GIT binary patch literal 527 zcmV+q0`UEbP)Px$$w@>(R5*=|lrczKQ51&1*Q71d7m7$BQ6FeQD!53&Vh3yTpi&%S#6=t&L#A$m zI5>*v<`e`MK?hM<3ubVLleAM?=uoE)bqIpRAt^3Rj!WLIB=lv|u4L1$j7d|*q$$abL&>IH zIT?H=*|aO|9F_0f8$tc-v@Ool;z{Nyb8d>~&3|m(-U2wCM)+?jfZjdmJWq>nn;+EL zuS7D~6P25^kr#*hS$zMR+V|g-VjNfjZ(sG{7S|an0s}8Qk6=?{dzrF7%u%D>*}9RB#qqwBv^ z_qRD}+(aCx5zcCL2OyEJsNmxlgQ4U^zM`&j#6d2TB9X7)7d)!$(L3pJ{c`6v$OPAOA^=;l z31$O0HWym=(A#Ko;M}(f7>gr-H?!*86(s2F7raPu1hD$9KLpV`2S6>mIC literal 0 HcmV?d00001 diff --git a/assets/characters/ship/rightmiddle1.png b/assets/characters/ship/rightmiddle1.png new file mode 100644 index 0000000000000000000000000000000000000000..7967bb4a709da7ada238368d3ff095bc16e9c7d0 GIT binary patch literal 571 zcmV-B0>u4^P)Px$^+`lQR5*>Dlrd-&K@^6+y%=nEi!%t>zy?!@!Zi^BUSUXX6~QL1rjc00Djv2X zQA;6m5Ku^!ScxKpfOv{tp)E3K&!*;=?Lt*H@tHFQ|U`(62+)5bb^2WsY@ z$rb>g=AQv@>fRNrlS00D()9pXrob`2{|pr0Wv=@*wU^jccFZvKSu!`w{?SCV=e+H;sJO zsRmFpRpXX*w&%Cc0&xEBYdhfU`nRrD0p8zVGh!NGerM;809)P>5#tE|Rn}AJnP{-t zTck8S%dLkmIePsLrRiBVdyDi;Gz^FWII1{|f;4&X*pN0jjDjp=|3^}RFbbqv?jt_; zgn_Yu4_|gUQrf!<13$*7miqvB^J1?!1!OM=z)Ee{u&Roc)77O>Z3#4!4spE=z~aa6 z20+E)dOI!F05;h`c^QCwQTE#g)Lx`BSJwa}dlFg2^)@TDVdqeBf4>X|VH7xOFY?7< z6gYVo8eny4G#wb%+v%pNnCfe?y~?L&-evnT*VtgLv7yCP`vsII1U#zOe-;1$002ov JPDHLkV1k3_{Px$+DSw~R5*>DltD-oQ5eU6Z&kX?97F;~9MMB0>?si3L!>)I=*8B&gdOx$OV-jRg6MQsMZ^*7=={p4ZBf9oM*H6BYV+w!Fj3qednqa|=Kr}#Ub5e>^@yz)Ft2rsfCgk^rq!*G>EagHMmGKw! zjKqBWdP0A`c^7(qj8HCg0q}04X$I`uxcFvQfV9z9E1$kIKi;1LtangZ+qW8hX0yiu zWSM=iEP%>NVN6%1!Iwa_#ss`(2XJXJJ+>60Cnu%YF*|^Tv0e*ePS!v}Z#HH9)-T`M i2GF9?=7q6dtM3%RIo73M2UYC=0000E-0H2+2Ga1{MY$239ol1Y4RV%Z&aXVLIq&ad_{hchf}>E&%D^0_tc0y5Q5N4@?{` zed#CP?vv6$C}Cz`1{%r^SHj=YFFtX@x1gL{t!DAHIP0003aNklVXbqW(m(Ao}3Kn47^*8ZvD zB;O5yq9}?o7MyE+Y)**wIk(`F5Rn|vTFYuv^wLC(DMc-n!^NFzJvVl2F2|G#Afi97 zE10d8y;xT_fB>E=Vyr%N2j-akGp~%9>-&?Tmt64xfP9}zpMo)E!4*e}f11Gs0FaAx zURSKer0QdFuJzn0lH#AHXF>Pf%ZTQ?JsC^Y8&ei3Js^eA^nehHp#0xjTY$B!_9Tp* zGBHUj*;7bishpSve6S!y^q1`>ME|pd6p+e^Y2t%DpsO3`>V|w)^1)irt?2LkYx#G2 uCqUZidJ^)|^DOBCwKyDuZo!K36)=tkq;<}Vg|n83DX}6nGBL0+@G)?MH6G0bN=LM>70$OBjY%EcpDnGMXSt>PTg$UYuItHouhASsmzHCl}xRSTWcL2tn#+5URJYz zjrp%FHyRvX2sG<98hu^)cg8XngcXboEDU@MJb0|o<=7?gF2~Yv6-UlB+YMYI;f}r< zefLi$F4z^@xcgXB|_waX)@5|K=-3KUWa3s%(=6jf(ixB8G+*W zqRUeksIjG3mNs$)t>E@@jykXFm}8~)cuAC(vnNuhFfy0|$_3rmWbJp~4Vqvfb00mfs-T(jq literal 0 HcmV?d00001 diff --git a/assets/characters/slime/slime_idle_anim_strip_5.png b/assets/characters/slime/slime_idle_anim_strip_5.png new file mode 100644 index 0000000000000000000000000000000000000000..a46f19009f704a53b46c65c790e5973c73646697 GIT binary patch literal 453 zcmV;$0XqJPP)p^QYf;{I>uvj~JfvmFi<@71RqM#Lzc;lyx<;E7?H+ zLnr~AtnGu#+kODxaXdiD4!i4(gOYxLa095#W3z7sq!QN}ZFB-QUqB39E5jHy0- zxTNv14WQP_ouCxWMp(%XN_Gg@DCO{FT_y8NO%Qi|lb;oEd%0tKxg%tw^p|{01E>k& zu5a?wDXe4%oW6dawSH`NP)=J04**Zce_b|8I??B;^4eTVjlTfKo3#Ljz8S0Q`$GJwaCf~SCVs6K_={D1x()a>00000NkvXXu0mjf_v^~9 literal 0 HcmV?d00001 diff --git a/assets/characters/slime/slime_spritesheet.png b/assets/characters/slime/slime_spritesheet.png new file mode 100644 index 0000000000000000000000000000000000000000..a9b21192921a801a74be314da7106c535e4a5969 GIT binary patch literal 1719 zcmV;o21xmdP) zy-p)Z5XXy^C4!X@!DdJVJi6m85?pnHN7k8rvtIPD{BwDD=v3r)Nc(jk!%AZJKO zzQEgNrs}esAv_RD*!uFWZaAw5{w@?OEG#f0Myq zLBKO4H1vJGyO*WNMkF4m;NV@)uNc9k$3?2so4@6glj?xS&@;dZA zzBrf1>sKNBZ4E76=Yz;?wjB|X$Lp(}{~~oma58ur1RSAOfX>zrx|r~Cc0M5yl>~Vx zi(2iq?U2FSlNGQfkXzVKL9GB|wjx{MJzPq4@H=7w*u6^Z``z6Z%c55M_nyJ$N>sq1 z9#Et#kS+F8Q7gcdZLW>d40!e zgx&}^b_>Cg>qV{hemgOSIDr}g=6uhIaHtF@BJy(crDr1|BEPn2u-G48oXg_Re}1(S z?*R5KgZuuuc7`Su|K0D<6R_qM!l$p_RaZf4?7NP~e$3~)d({c7?ErEDjAen{cTd>n z=3kZ!+Rc2a?-0vER{O1wZ^a(k<};@Z9*diPySDhV#((!aEV_o8VO%zVEA9O@VnQe# z0rf1!3# zQ%G(6cc)=OWhKx6`=F=_~Jb3OD_A&QJh*V9Z>5zcx?u^CNK-N$L|Sv%G(ek^&NnJ zpD%X;UjOg^2o?e6f^f(SKy$(J-K-;!78%@{z)Iq;)$w-%)}DZ_Q~oxK{np88IslP2 z0?Y;BdlqjCYR^xr3|9cd$+x|18}w_Cm_^`v=AU7 zorbY8xZAgj+rK3K{1IS_1PA~C0000`%6k2je1 zo&_0uMm#dDtn>=VH^a#+^ITJ29xPLC{eU<=HFVc!VO zfi*+i_!$mL{o8TPy z`R=~=yrus?0L+8r5V~Y36ab9Rn+%-Gv}9s{`B3y~&O=y~4gdfE000000000Dsag*_ zRej(&mUjf0lH&EiW7h}niuUpPN?n~W)s9HM1F*i#0ALKV^?`j#s{>l=1N(lI)F<-A zFOn}$T3X%_U`mSX1EaPc?0%Isn8A`^E>6et~2SzKE>$4sC7KkbTJrV2D@w z08GIy1DBTP)NIq*mv#VCyeto3j`W7mp@sV;i}@|~u0CpweX9|K_V`1+kPo1go`64o z`?)KJnA#R&O8b%yAU1-~9-mAPbD>usSd`@vWA%Y8_9Cz48FSlWSn30}@E>4og7tw* zizHj^-FE*~J|gjA+re!H0iON1l@k8}000000000006;;q2zCffNsxbk|08Pu+uwhg zUIyS`IUhhkz?#yVDG{f{>(Gdp_frGp={<>Mt(&V6uZAfLgahmo(E{Ho#t`~c1;PRL ziQS`=v&+7TeR6O005}w)FSScyt!vd2%g82Xd N002ovPDHLkV1gt%Hyr=~ literal 0 HcmV?d00001 diff --git a/assets/characters/slime/slime_walk_anim.gif b/assets/characters/slime/slime_walk_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..cc8b86d6b23869b48b2e8df92b2dddf1516ddcf2 GIT binary patch literal 1443 zcmZ?wbh9u|6kw2GC}&_${Lk&@8WQa67~pE8XTZ$J02KPk!pQ}sb%2-wq^t=@8yg!- zl&8wiY*tpZ1&MGC%bz(2T=UHrlbO8iJ_oZ0O7L(44d%sTFwo7Q z;5pf}_gbW3mAIpDL7b#s^2&J*tEMG*@7wV8?4dh1nH?+kP0gNgxt0mZ%}hY|f&v70 zaOeY#77*B_&?ed#czWY4nd!EP9gV3XJXcFowGW;Yv$?R{W0O;~z1?Mwua{P+bg>}9 zgOPy)=xBaCW}ASVt?lu%Ng|>pZR7QePiv(GdR|;xcsPYmY0gyjhc_i`AM9R!xGBPW zqf=vtQ-r2bp{5YB1*`-tFan25lY=~OQpc_jKOQWrNRaf2jcFP#%>kzr zeFPrHvg_$)>0Z}T{S(kP4<&3sW((p88%vH|(&r311Q!$qhqSfdKl`M1js@SX)OjKb z8<&eMSe9VL?AY_Gqk5a@Q%jx|?~9!!avcVUGHst?$Jwg}*{#R6(e!t5(nI$7M# z5>;I)U9p{Wl@&O(Wy%yBJGQ;p@aNq8eT+G#Mt@sGm9;~QEapyIp~Q$B3!rGmXNf5> zme`$M&dVQa_%TSeJt#BNYBo|LWdtTtKD-eDwn2c!&?#q2-1OGea|&JZW_|N2`|hix z9M)cT&_UqwS+DH;tHw89vcF!c;u_-lD8oz~$p!|n54iCJ6flSJeAKm4bgHrFFx0s$ ztzH&y(KSzKPWq~i$xHdBL@YLT?D+L!txOlEdE-qT6r%~13TnVa%BOhh!y*A?e#giI zQ73fcGx%aF+g@gEn=Y0e;wf-T*X_|CHRKQng$BNYMvY_DMLBRmGa>M_;fxpyhsG0@ Zvn>;rPS}<1DR50DIxov~SBENtH30rzm$(1` literal 0 HcmV?d00001 diff --git a/assets/characters/slime/slime_walk_anim_strip_15.png b/assets/characters/slime/slime_walk_anim_strip_15.png new file mode 100644 index 0000000000000000000000000000000000000000..2bcdc6c0234a554de88e91bc9a84ff64db9a8eea GIT binary patch literal 962 zcmV;z13mnSP)-V7LvmZF_LPyRNgknFyM(6EIu{ z5&^btd)O|YF>`1Y=!oPiA!@EyY!Ek}Tk@3_15MkN<>a6OoS?+~Hz0AMEIJMPoR zCrf-8+;FxJrGbvXc^**F03_4>1yKfqgp zn}ere0w%x}pyP%`M+q;-3lS4hO_9f3RLU=nV-Bv5tbiqjtic}xTme#C;3&N9671r4 zpbF4GB@XlUuTd^4<=?x5PZgwqV;vBvD`W|OEN}&w;^t!1I^fesTm(OU{{;Z-SM%gG z3S7R+A2`0>R0Ft02M=Qc(=nk70aKq49CBS$$`9jE7-9lT1enV`C&Hl|5CHb8mmUWI z@O`ZW68>y4NAv5?cO1F_+?s=j`MEelBUS(YGxP*p@(JPb?Y-y}l*9KEr(Wi6y(yYN zZUe{(kaB_3vnRN@{g=c+edkL(1LZY4t3PS|`_It$#FAxP zwt$)ZFa{-r+7&fPV3%T!8C<;4qSSOLM0&Kt2L0q38*>Eti^uy!a4-fbiivvqXA7}4}Pus(-_}v1A9y8 zu|7ip{06|8ywoQlt^i%Gv&EduCFed<6lW0IXI{O{N-;={l&I%obel=d;(nXa1x|^cb(e+9JgiyVogLtfF{y$a4iRS k_xf=6*VJFQ0_2YW4=2=c&`{+TmH+?%07*qoM6N<$f+E4YJpcdz literal 0 HcmV?d00001 diff --git a/assets/characters/worm/worm_death_anim.gif b/assets/characters/worm/worm_death_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..da48416d65e234b6052c949aa8ff6e3170b9eff3 GIT binary patch literal 279 zcmZ?wbh9u|6kyRm#XqwyaA>v?hcRp`Qh)kBfl?O+Q~t zbE3FWpF?#B#}gx7R!rp$Ky9BsePH5n=}SL3_qGF)iOdX)3_J|X3~(ha{o)fhe7mHL gFa@H739f|QrJ=L@RUneLASxK)Dp+{>Bv~1(0r8eYMF0Q* literal 0 HcmV?d00001 diff --git a/assets/characters/worm/worm_death_anim_strip_6.png b/assets/characters/worm/worm_death_anim_strip_6.png new file mode 100644 index 0000000000000000000000000000000000000000..c8cf064fd5ac2c2cce41ae9ca3ab9c751c68c9ee GIT binary patch literal 297 zcmV+^0oMMBP)?8NnO4qR0r0kj9hHFaje`q+){`fgKPfjZ+;o;B~{UZ(*{Da!)J8EmKt!+TT8Gywo;6FzS(Y@kaBUp-VnDI+o0yJji4_r(C- z-pBpceJj%h+AMEx2y@0vANH*XdPl&mjE1|C4z}|I)U}ZtH$pf_00000NkvXXu0mjfOt*V= literal 0 HcmV?d00001 diff --git a/assets/characters/worm/worm_hit_anim.gif b/assets/characters/worm/worm_hit_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..19e86724263be4121600564253569a9bfcb75f51 GIT binary patch literal 173 zcmZ?wbh9u|6kyMXK!LSyneU5#EmJe5_7nw8yFZYsA4&4;MCX77&A}dNrl9L=bSShfB$;? zfGpqQ!~-h}IPVDiEU}WC9+f29@4t5A#*hDN{~GfA{*~Ne%Js1EAQ#Ax3ZI)y&;RfG z&FDIhb$(hzkfLhY1V){e6NIc!oIIL*N~|KNP%EWjcH3uLyZo(B4h!PC{x JWt~$(696Y2W2FE9 literal 0 HcmV?d00001 diff --git a/assets/characters/worm/worm_spritesheet.png b/assets/characters/worm/worm_spritesheet.png new file mode 100644 index 0000000000000000000000000000000000000000..4a9b8d31063d1c71c217027e295215d0c47d2e6d GIT binary patch literal 612 zcmV-q0-ODbP)?Y5BQejB)MZhr1M7M$1zw+O9PYoo~0dhyHk3X&WuNlW#T z1ATgQ97mC*Vjv|w9=G)iPE0Qxe*vI2Y#XsB=JfPeV}rYRX*c`y)CRYcLpG2x#yP(a z`%Zcb5mO_$;81NJHmJ5wz1D$!&Oh2`Kv$Cd(D)y^NxJH_)B&KW#)o~IhiJ7nHv41a zJk9G|nxXp5{@BX%Ne)$!rOp(k)obVH;Pivkw#dDe%=LN^^Kl%n23_|f5mOL4FtiB? zEyXB4=i`{6f}pYO8WXZE9P11KttvvA5ML<<0IGWWUNC?zM@Z+j4vgbf#ElKv6gajO z0IrtS)X-X_G7%T{tQ2&Q1G~c3!mfS*A1*`f-dCj6h)Fymg}fSX(#a%0I7_OTerN=M z=4Y&h%d(7UQ{v0vGcz+YdejY3Xxa7i@!8P7e}4r(v>)|V>Y1?3h$Qd@!gjokCJ?k2 zX?_#m*I2FdrLiIJ<)?z!2aEx` y7nxcaEWQoJR1@|thL|B+wYIv+3I;9Zsg0000$|s8{^R1ig)&tj$L0;-!}?G9Mb41Xc!e&k`e~ zTfRkB^0>z5FlNRmMgNLB&#shms!qAyn!9Y1VU3`NZeQM1F1;0>rK7=aOJG6@YM+z1q@*nkn(ftn^)1({$HM}UsveiJ3=eLGHK z68MW1A{sg$$1%AhPI`yw6LhA4h-ikkhGm)|d*`rBGn5^eSPx13#~#413W$hCH`Q)^ zXlp1`*u&<{#pm{sa&Smo5>i&`p_^(=K6~d-C@?;j^1cFwcw0D5x~aSe>ErFX%cmSn zH*QA&SdCp1H!#Q3QR2aE-glcrJoVsia?Axn#KZU@xi9Gz15*>5a4dU;2W7A1r3Jh) z{$u|EXH}@rW*&P<&hk>N2S8g*NbWO_VWl2r*KfYlzRtB7%9mZg>+^*IqnqlmMM-&S cd`=wy1xGwEXIKQpqW}N^07*qoM6N<$f-&ug)c^nh literal 0 HcmV?d00001 diff --git a/assets/decoration/antidote_potion.png b/assets/decoration/antidote_potion.png new file mode 100644 index 0000000000000000000000000000000000000000..8519cf95be61f821e46c3e614e0936a5083db7f4 GIT binary patch literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^96-#)!3HEdkIOdzsa2jXjv*3LV<#x`9dZzHiH{ap zq{+v3fboI4#Fb?kmmGFD@y-ffV9Bbf-f%^Er;DKI?Dw->C+J4co8|M&-$ab0MB+3L*o?AlI$x-@EnBs?zb bF#TXq<8bDm%{yT~(A5l{u6{1-oD!MGJDf#u;~H9iKc=}p}a-&Ov8XgjC(A)7?Q&PKuM i->0-}k&u*-kYLa?w!Xr#>Z&u)T@0SCelF{r5}E*|{z@JI literal 0 HcmV?d00001 diff --git a/assets/decoration/arrow_plate_left.png b/assets/decoration/arrow_plate_left.png new file mode 100644 index 0000000000000000000000000000000000000000..0efef1540f146303a58d6f1294407255742e9c6e GIT binary patch literal 266 zcmV+l0rmcgP) zFAu^n5XE1Y3bF)20uIR^H**$?;#2TBruj&yS?rlP2y(K?#FC|ANl{%Ec3ojlHJ5k4 zzPnaI5D__lW@aUMytLGKyPW!34mbqF%t}d(@7J?8?GDG_?fLxyO+-#=^pa|$5n`q( zB>+&>&1`^XW(6V#V{u+Duw5$|eYsrh;Se7pwJK=y+-zSzQ!^t8)!gKLd!2t1h5F&a48YE>q9RdKdvW^Nw zxA5&+oeoHfO)5OkBQGCv5!`}JDqk3s;AhgEi1<+32+m-?oOw<{S9k&8vRgR?lD9hm O0000UT8GY~kx@o8a7PJaB~ptq|y zTLJ`jO^SZNwoyV_`hR=o6ONY&AP{jTpfO2+=T3Xpk(aIV*;*TZ?R|66mrX?9;U~!a tlq1htpDh=c$jcQxDk+v_xBlTLhS@!~!P4JT_X6F=;OXk;vd$@?2>>rrPwxN# literal 0 HcmV?d00001 diff --git a/assets/decoration/bomb_on_ground_anim.gif b/assets/decoration/bomb_on_ground_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..26232710355036cb1e2704710bd0d183d64997a2 GIT binary patch literal 417 zcmZ?wbh9u|qqiEd7>cRY{Uoeh$G4r~G<2pDA2>bSC#J zC$hCnKx^5+egwK1>PIe@mIkBUZyyD1MhXr_28hxIpi7TtlreF*$hDn5Tjjur-86_% VK($OBIj|pFaGjmwm(nrfakO{$HErhtpxiID9aAj99?Pz`(#@WDxp)N!Cw>m}%@N zlIJe0W`ud}$%;4>`EwUmGa{?KHp}lnCGwv>efaNSmx@#VXhs=IAY0GqLXkHz2t|=6 zRzDL=BeLTX6LR2&^6?2UI@qPc<&ou(EvHl-=6P)L=#EDhLsm8051fwNg@{{gbEp2%hRe51OR53uGh@5 RYAyf(002ovPDHLkV1gYaZ*Twr literal 0 HcmV?d00001 diff --git a/assets/decoration/bomb_thrown_anim.gif b/assets/decoration/bomb_thrown_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..fe7c28769666d59639dc4387d3aa6a9cd1ee67b1 GIT binary patch literal 204 zcmZ?wbh9u|hlH2BDKD90VBz2FwBy8+eqI a*I9HdDP^enxx|4)&5UQXls6%1wgv!)88Z3+ literal 0 HcmV?d00001 diff --git a/assets/decoration/bomb_thrown_anim_strip_3.png b/assets/decoration/bomb_thrown_anim_strip_3.png new file mode 100644 index 0000000000000000000000000000000000000000..51db437f5b916918630c069aeb41b40257999e7a GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^54 z5)u+DW(BrgWi{~b;cGR5 z&yj}m_w$Y4+}qtXu@MM3)jZaum2BmqGaYEheX#Ff}wmG<^E>0jTHm1qUD(0+>ZPq!!90ZBgZz zSaL`5UEDSHB)$U{ocK%tY6lwf|3wef1W677nO#XdkDOE{Ma8Jic3$o|ce}^3OBN1z z-GSW{4{;^M&5r`vq@%wV0!_Jm8J{UYR{%W(Gzj4qDX?1vfNn|JG=qDq#KYXl?v9sN xn($3P3Pn(mvH?R88YpmMph3dGz%0xmuuyw3s|QE(A-_raTlrTQcrh_p0|0uUay|e6 literal 0 HcmV?d00001 diff --git a/assets/decoration/coin_anim_strip_6.png b/assets/decoration/coin_anim_strip_6.png new file mode 100644 index 0000000000000000000000000000000000000000..5e2e6e0b72b4c82ff983b5dae67453f980ee9450 GIT binary patch literal 321 zcmV-H0lxl;P)Q|31kdXcXbFS&a!Na zX6miqZ=FsuQV>N%9srCn3W*wXHm*2xuTSoehmxnsM88XX>r&t!f8nR{(1(0P9}EFeD0ruAGQm;yuNkT zVCNn(BQ0wHE?#`diqc{>UygcCX2?@}$R0qQR)4Y_zbErJ`IV@mw4*kgFY$AEA9Vne znITW@A?pT=F-mV7fZG+WcjxdDNaMyb6FX=0#sy#R&f(XHoqNcPwB%FvpPtcQl&lL> TUFS0200000NkvXXu0mjfRc4CI literal 0 HcmV?d00001 diff --git a/assets/decoration/coin_pickup_anim.gif b/assets/decoration/coin_pickup_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..8a6ba68c59807568dd4411853861e368d38ad562 GIT binary patch literal 327 zcmZ?wbh9u|&`!eQ=Cp2jyDRpyvi&ObGoTyEuTb0Z0S2G4Zza3ryVod`@S+ zSBS6{Zgu=DO^Msr)W$g*gsIN-T#w;1go!*Z4a+)@^DmBhvxAKbw}D(deQl@T^3RM~ I$iQF?01^{V9smFU literal 0 HcmV?d00001 diff --git a/assets/decoration/coin_pickup_anim_strip_6.png b/assets/decoration/coin_pickup_anim_strip_6.png new file mode 100644 index 0000000000000000000000000000000000000000..a9b986ba28bb9da0a6aa66cc66cecc04faced69a GIT binary patch literal 284 zcmV+%0ptFOP)y zO%8%E5QPW#dI94dOkTp86A*6Uo!EK~gKJl;ShDc~q#R&eVM^@`#iUBVgakTM@?L)) z(T^D0g6+qx`TC`rHctfr15kgciHR;y0|0k*$;J#`6VeLD7Pt#(0>IbHkxsdxtgonP zZe*JXUG*3Q8L)Xi4l#6m&1wTgL|I?WzW3*Q=Jxo;VzAo4DL3A6Td?~s9Wkk9_pH?? zGF{@aEz~5^#6*wLrI=i*{}lji%)nh;ZdatlB!1f7luXPn@zx?Tgtq}V8dG7m15!jL i0f6Mr{|B3nNr4xhr@xCvPI|Tg0000VGcVxGmAy>6nl>cc``pfIW*S|Fy`*YpP$< YH=pZ|aTub+YybcN07*qoM6N<$f_B1*L;wH) literal 0 HcmV?d00001 diff --git a/assets/decoration/drygrass_props.png b/assets/decoration/drygrass_props.png new file mode 100644 index 0000000000000000000000000000000000000000..091b14400720fc7b6cc31e5b0ea10481a27abbb2 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c!3HEhl+{lMQq`U=jv*QolM^J24&1o$WBdy5%+qXF!nQ>w6vS*)X zHM+i+ZquHSyZ?KKbfN+?5FBCaP&_f|#-B3>4jlOKTu3}--b;`npY!*pHCPI(aTe?8 cF$D877-j1JynAJL7|zopr0Nl|@y#N3J literal 0 HcmV?d00001 diff --git a/assets/decoration/explosion_anim.gif b/assets/decoration/explosion_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..8509771e94937c06b7cd24366073dc843c27f554 GIT binary patch literal 1076 zcmZ?wbh9u|RA5kGC}&_${Lk&@8WQa67~pE8XTZ$J02KPk!pQ}sb$}SCNP(dNNPqhD zfyt<)f92`7{EO#oxz)Y--k#t5ZI3*rJ?mT+bYNQy_wEQE_F~?6i`=(`?gnZ+7B zt`S{h~Qgo)~u99Ee&V`!GMG!7vVc=zu zU=W78KpV*g{v4IX8v^HvxhWS}Y5tPD7wMG$=ghZRcdAamD}Q%ek_%x969YSg41**? z6VM;mX8G+6i~>3U=pi5%0+>TNcHQ}BaLRM_UW;t;svEu68@n^|7AbT@E$3T3ed)%Y znO`ert2+w_U4H*vL9b`u!wpR~TC-=Wizu^3tvR=x`F2Lw?mJ69t`2Zp74=rEBX9H0 zcRz$CAbFmVfsH|qK?>{wpxqEhptxWn*ae3KRD>g3qH@n2UXa3&-aB7_X@2Fh2#KV3 z+^3rlWU5!QFO*&XU7DkPTf~IP&fgd;_zIrcJnXrw_UvV_)Jm14wx(uXj!A~DtbE!R zcy{<(Chgi11@zUJRR)whi~Qi*wjwPN`n*?D3jwm-<%X$&0cRYfk)7(c+k_ zu<*_)#|x{a8XJn^JvLYhsQ!M)UR+S4RlsG`DA>x^#oN)@Tcy}tCDhk3X+qEBf+?Mi zvv}s_&tI}YeCdisN-I|gVsUvRFrMLY&J+PmMUuN2?@nglmcH`Tr8wS-`^OpsJ3AJ9 zbXD1X?32&+Z@tf}-u3O;wQGlgGw+0!MHN;jn;)FiST^hYDu$PPvesN!J1vN{#Fm9N&8AalShvBFLD4K_&wXGE|GLfEG(|U!2qU=}6Y=qc?N^H9#`Zt5e(F zaqG`NFhSbaU#av7r~K=^H9AVq78|UZqS09Vw8u!06=5_pFfB;|A*#_TErQFdPySd` uxCuFLYAjILy5YI^vR68%7B)m98NvoML>R*mah|@F>95f;__Plq4AubJzM*yi literal 0 HcmV?d00001 diff --git a/assets/decoration/explosion_anim_strip_10.png b/assets/decoration/explosion_anim_strip_10.png new file mode 100644 index 0000000000000000000000000000000000000000..9d556bb043e38b46b773436824e5f1310a39f318 GIT binary patch literal 1291 zcmV+m1@!ufP) zJxd%x7{{LrDdn)0h^=6I>HK_tsz74SkEvH8RxYR1`BJiWl{1p41OOY{0IRBsZfg&>Ck+wNV!A~{ zL`OgFjb+VF&zqg&7a}4$xcs>~CM5>71G&!EJ6pWbiP*B%*wh(dF$U^O$o$Ss=gx5wj4HldGpky58F-qD}dgibKV=S_}Y#IluvvGRg0Q zuV6VFBa)S$F0iYo$JMJX2Gh9!m_Q>L5I(|_&INHW{gV--z-Ija?E_hoHG7XcC}l2uuVCf_5+j9w3Y97A>Y*&P*sLs&Gv5 zBa$1U>+;oQXOo}lTmV!cz=5F3ge9X6Idj*&bNoX5Vs!E3h{YzbHtCf_|2tf4h3PjC z;6Uj@d_w4Lk%CYV9d;j$d z5fT0V{$Zmm(;`S)jHbF-V79;Rn9pbQ>*MFO_aw99m`72GRW1M?hR{xw0Bzsm(jDA} zt&#QdMu%oRHd(SvVlyb8dlMqR-LpH|JzI}Y9WKYL0Jp`sbNphJ;L(r!k!`L}awR&Z zefgeay7sx`WxLO|_q(XO6hVRbcD`I6(D&Olwb4jrZ0hy$Ez4DR+dar}-PLQZW_~%c zPaCGE!f@uP)~!Dh%SV2$dz9mOfVMhyIix<%&lE$~0_uAP>K#~U<{^ENLx&bA7d=K? zIm&RAtCRDZ>wn>qQ-G#U$`UkX!YSFUPdPRT#(q(T#4hnb*;x86F9{$(3n>E2B|p7v z9jUtNdf6Nv9<6>hWf38Dhls*ALy66<^pk@a+h9EKy~+A9n25k!-5!LqhuuwF1ZwqRHlWZ(n*7AH(C z4sW@a1LxfDz`sUBtccjb=F9DD@2C0CA+Ctntk_|ibP$aP^vnRONx*m-kbqTH=bg5@ zRn_rS)tN8E`qA|%8vxp}VjadL&?8xgF>P7B9=KgnotqE5wyXfiiXDgTsHb(?`_^kS tI|9&!nkFULUjW0hsqmvKb#72q=K*XMO{-D-YEA$E002ovPDHLkV1h%IY?A;0 literal 0 HcmV?d00001 diff --git a/assets/decoration/grass_props.png b/assets/decoration/grass_props.png new file mode 100644 index 0000000000000000000000000000000000000000..f778357174a6aa2190c1814b9a34effe623e369c GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c!3HEhl+{lMQk9-Ajv*QolM^H|4s_@x6zthpctHuXa zuGYjIX3ftPJi0-0ktEZVnmFSh)9YO&8gx3>ainpa2`FKnd2XKV=?*<0|7Pilbv8ir al^I^dTbXWHxa1tr5e%NLelF{r5}E*!vP9Vc literal 0 HcmV?d00001 diff --git a/assets/decoration/health_potion.png b/assets/decoration/health_potion.png new file mode 100644 index 0000000000000000000000000000000000000000..d8416aff138cd25843dd9e50810285226e0f5791 GIT binary patch literal 225 zcmV<703QE|P)O}}4XfN36FRhmJ7FL3{@F3nGrC{X^Os*hSp1_c9`Ms=#WZn3xVVFNK zA0kwpS9P9$LO-Y8(3 zI{;0V1}`1z>%3suo&l)y0&6Q&oexoSIq|dy0A79nYX}qf$6(IOGU(BYm|;Z{KPe6v bGfe z@Bhh*r*j_j2oX(HI4-b*(f?k(+GzndiNiN;{Mf&mgT1*&LI3cd+v_FI&9gn-;ji4r z_(ZB{VMB=X2CqfZhYlQQxU4W|nY6U@|LYgcT0XCjvF*PqFva1>^NwG7vcSvEH*h zf}@*{$8X1kYNdIT-3`R!4^4FG?2eAiSll`7(4j}$zZUJ+5C4%qzoSD~kbOe#!MiJY z-iNZv-G6u9z&N_VeosK?Y_(JBpnoD+hACe7p2D_Y7n#k-OO@<|7X(wm|lDQ uc%j<)ZWWt8eum|%j;%X-U{5sj4$c|=Zr@Z)Pj&!Z#o+1c=d#Wzp$PzW5ls64 literal 0 HcmV?d00001 diff --git a/assets/decoration/loot_box_anim.gif b/assets/decoration/loot_box_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..b294eb8eb03bcc9e3d09976066c7908d8c0b9122 GIT binary patch literal 1055 zcmZ?wbh9u|6ky0%tQA6uC-cv63#GTM8~ zV%=ESgCN~f-MZ_56A??>sPrk)Ga@tO-X z6gk~9>w?|OX{fbx21{g>?6K6ID1*82Wrj}S9Bx)^Yq*bJjoEg$x7p;f=LFA8A)IL+ zXe=a00kab@FhJQ!2WoQ1Uh_4EnLn?E3!FLN8xbYt#xA5J$&+K<`SH{|Cc9~B!V4FB k;dL_Hy+BJq25Z8C7)w4~xar|(iBD124e|oieV7=m0aL77Gynhq literal 0 HcmV?d00001 diff --git a/assets/decoration/loot_box_anim_opening.gif b/assets/decoration/loot_box_anim_opening.gif new file mode 100644 index 0000000000000000000000000000000000000000..d49f3426eefb1eca296d2d19a27dab270d4d7542 GIT binary patch literal 596 zcmZ?wbh9u|6kyrEm%=BE@hc4z7#;yjg*UC;EOWkhpow zmhS||5s$jFntQI4nr3K;RP;3~6~4BNJIl^0up?H7u+BG3(7PUA$5XMSm4@FAR$VALEdmR1;0p}!ZfVeY4U+FI5ZK!q`fYRQ0+@M+}88Ehh z)Yj$k|H~+2jK#y#UGh(a_7)_O3eY-?=n%{KTcEd?oWBRB;(r3^VpI9z6UrR`0000< KMNUMnLSTZtrMQs* literal 0 HcmV?d00001 diff --git a/assets/decoration/loot_box_open.png b/assets/decoration/loot_box_open.png new file mode 100644 index 0000000000000000000000000000000000000000..0f92d1af9b8c4f4034f3d504ed923c98c84afb81 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~g!3HGv?z=Y!NKN*1aSYLzn4HqUl$`wdKM%`+ zo14=mFCLXhob`EgmIMeKQFSSh3J48v$n4m-@#BBj;_LtWHx~SnPk#90{*4ljvBoDoewKQA@K<(s|H0dcVtVh3V3WPelH(Gr~{ zclhnmwH2nTkA)c<7z8NttPtvu|F0Kl!kx_Sa90UnG2& U)&CRQ544=Y)78&qol`;+02P%%2LJ#7 literal 0 HcmV?d00001 diff --git a/assets/decoration/orb.png b/assets/decoration/orb.png new file mode 100644 index 0000000000000000000000000000000000000000..7a92389cb0fd0ac614404605deab17741fb6ec62 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFq)}AhoAre!Q6BJml+^P7x|JkwE z|1DH|dwc&&OG_tfHF;XOzW-bQ{;sKrtIrFyrBCdR=i2*ecND4UF)$QdG2Hki=F)GV OF$|urelF{r5}E+PXea^z literal 0 HcmV?d00001 diff --git a/assets/decoration/orb_anim.gif b/assets/decoration/orb_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..e421ac8e3376d10af8592b6e137eccc13f112cd9 GIT binary patch literal 346 zcmZ?wbh9u|VAnLk-GA@hHJ}%OTnJzm z;MjOUQAxwlqvpsd@!69cn2;TZt{JEks2`@6ftjB}V4?ORRzr_D$w#(}26Hl40|3H? BP*(r| literal 0 HcmV?d00001 diff --git a/assets/decoration/orb_anim_strip_6.png b/assets/decoration/orb_anim_strip_6.png new file mode 100644 index 0000000000000000000000000000000000000000..411882d376002b978f4d2f870b3e6e51a05f6821 GIT binary patch literal 262 zcmV+h0r~!kP)ST5Jf)`Jrz5+_XbojgWI%esa#UA26Dv!Mndf24N|yb0;e)^9LqQ;mh#(oy8HjE zGw_AD(uON-uJY`P8Q@AAN~xig25VAy)_^esmNjfM4ck6yQur?dhIna#WGyN(0stgy z!Id@xsf)`S@s!eEvi30QGwadkx0K-nsf$i5*j0~R_2|R`cfc7xlQlQ56Dl$u0exPP z5%W5|@zNS_6Lw+=hKN0{%YE~q{-J>P$MZC7v?lkV<@_Z6LRXIX1z#)*OtLT{)Bpeg M07*qoM6N<$f6JkGy3 Z=FJW^F5Jqvc>3B-zvZ79wUB|q8US~zHt_%e literal 0 HcmV?d00001 diff --git a/assets/decoration/orb_collected_anim_strip_5.png b/assets/decoration/orb_collected_anim_strip_5.png new file mode 100644 index 0000000000000000000000000000000000000000..525df011923d3d5c10c55f343a466decde80adaa GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^8bHj!!3HF|gZ4%PsQ^zG#}JF&^pMu$<*Wx*c|!ilQQ91psaf{wC_Dwr!@ kxLUlUOCp9((QG<1L-XrYPnXu>GN9QEp00i_>zopr09&pq_y7O^ literal 0 HcmV?d00001 diff --git a/assets/decoration/root_props.png b/assets/decoration/root_props.png new file mode 100644 index 0000000000000000000000000000000000000000..6e18d2f1eca8a7d0ebdc38ed1b69163212cf5213 GIT binary patch literal 160 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c!3HEhl+{lMQt6&9jv*Qo&-NeWJ)pqDJhw|! zqLI@^aI)b<^#qnS4|`XZd2g40?-a4zmRzCma%;*KI|FrwE0dO|+}>)Za8j>E<>;3g zDknXve5R%N$KU5Uci1>}=4I8$D@&g4iBT_+Z}~E>A*Sal`~h0 z&B$ua{L*&ULO|l!!~Zru?;A9fYS?<-bJ(aDaH{0b;Q6zzeO|$-ubLCDzc4raW6Ru; zakJbn{pOK$76NVpItb`2WH-sr1UVWRumlQtNFLe~!qe?2ajT7$C2$Ih`NZ^FmCJ91 z=I5RdU02;!_~$^}(Q*d~L3`(??L2ZqQ(ZQ>hp;u=XkNc)K~?=}l`ttkfyN6APF4Sw zUXLmllw!o`Dqt`H1B)nEg}_}UFzbLXW1`qIkGU;gLao)IvAOp{*F`rb${bj*{*$#r zAIE})Og>!vonB5awe^?}zIhlPSh2rLNqEHxzvG>ob~eorYrg1E%{^xuvmiAbh6pZ! z2W_k_kz#jT=DpmyP5I8*Ezx&(q)WKJe=mBE(b44#&(wJz%RNGbj?WF4_$5-by({VT z-EXVd*YHRAb{rRF`EsY2?aIS%7bH=FixHTxgkcGbgy0H51Q(jCLUTc3RkJ>PH*-?Q z14*qti{4LIq0+N!0n^RZT706dWvibC@?XCbhd^;S>!`=v%;z(;!giWO;ti?=jtAco3@RpIPzfOg6n=_L(L+>Wf=lNXx>vA^OP7imDP2-TB!ioS zgLH~Rr$DCbQ6xnjI%GJ6*FoR&y*KyceJ;ITg7-|x-RF7pywCF{Bm}sIAR<9TVpjZr z7n}wWk=VO96Kkg@Mmat#+>|5KAp1|V|)7}=sdXTV$^Hw4Zn1ot)KY~l+6<_(>-nAZc5r=BVd zqRgKSmR!&T%ZXRMJZ}?`c=G5O0KoJ7Sm-#-zmEkQYNZ9wrSYO@J? kKQPshQ`LVPRK7g_8)wrlbU-W8qyPW_07*qoM6N<$f>DoA?EnA( literal 0 HcmV?d00001 diff --git a/assets/decoration/save_point_saving_anim.gif b/assets/decoration/save_point_saving_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..998225ec1daa7fda2dd6724c5bc6474558509387 GIT binary patch literal 487 zcmZ?wbh9u|f~8vCAIN!DdvfqAeBgfB}l+S^3a|To^Hnrhuc_P5@+3U znfG$*Hsw2Kw?yCFk^ZJ8UY5fpX$FU!*1;qJ#*h$^W6dTzICa){FfI~$Ro3kBN>nN= zpTFMCSZuG~}zk?p|kETEf!E(5v==rW+QAZ`LW4vVvb;m#6x0CZNQ7|2$jM4Y!5SCGr)0`qSEnjQYw-$XQ# za2UlZhmK2#h{ugB2m3u5VRq*@FfaQ%isYu;n(?~Cs~Nwh{QN~xrqkqXw-tCNvfUPE zI?YggP=8VMXTGw3Nz#DH69$2;ml^{H@*I)op$?E{HY<|Hs2LOPV*XJo_ zer^E(kWQy?Ym3iZKl<{Y>q{aQ#$N|81zUinbUFpo9N_e>4j|@e#)~&DjszdZUn3&c zSI5XFivqCAGK*JBXcx)=0F}HBK)`muu6VVC_xhPQtK@Yn;3vDeYF?KE@^k=j^>#ir zrAj^`C)|`z7F}~HcpaE*|3mauh)z$+q!MV>T{*xJzl{G8 zD597mivNaS(AQk(Ea9IZ`IRpZ0%eCom7-~Ax%o9PXo!8>epd-)00L#_Y- N002ovPDHLkV1iC*jbQ)) literal 0 HcmV?d00001 diff --git a/assets/decoration/spikes_trap.png b/assets/decoration/spikes_trap.png new file mode 100644 index 0000000000000000000000000000000000000000..16a97eed8c50766f21744513d48720b1692fd67e GIT binary patch literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Q$1ZALo9le6B?M3lOO*-cI?=H z$q5XGNj(OR;evc@K+twKzs_KeZS}N?5r$$jJdK+62ppR&&$Fb%&@h0*jd#H^#{Lu^ zNx73V7I_FMyKUr_=iE-(e?Kn71&KbLh*2~7Yi CXG@>} literal 0 HcmV?d00001 diff --git a/assets/decoration/spikes_trap_hit_wall_dust_effect.gif b/assets/decoration/spikes_trap_hit_wall_dust_effect.gif new file mode 100644 index 0000000000000000000000000000000000000000..40d846e4f00b02540071ec14fca8ad11ebc29ced GIT binary patch literal 143 zcmZ?wbh9u|6kuRsC}&_${Lk&@8WQa67~pE8XTZ$J02KPk!pQ}sb%2-wq^to*fBN)+ yiMORcQ?P4KRLjQ=Wrn)w>X_l`xLg`mRxE!Pl#(xsu80Y)h>fRj=C--44AuY+z#>xs literal 0 HcmV?d00001 diff --git a/assets/decoration/spikes_trap_hit_wall_dust_effect_strip_3.png b/assets/decoration/spikes_trap_hit_wall_dust_effect_strip_3.png new file mode 100644 index 0000000000000000000000000000000000000000..9e523017ed5132df85aa1913b10802bcd7929f85 GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^20+Zh!3HExyxe00qOmX9z_hS4T7^-YigK!UWhH~ i{`is8z=(&5fkBcZ{nXK8@AZM^GI+ZBxvXd#ao!+r5L{9aY*bKIU=Zlwph{6e+f)W; zSSfOWbN-3i+RdQ5y_?CG`u6Xk!#4X)W?JG~`oM#$8x|52RFg(0@$|xYE;7!cSbwDqbdbih<_CD~;DIOL1D+ zwsGqm%`HHm?V1+5-_CT#sF#>mQa_dyePd7Se-+$)ww`rfiY807UZ!*bOGaa8JC8=I zVnAO_n^xZhrLfxQ84(_{lje(}?E70m_jmYe*a;lA)JZWNrm>KJo z>0u2lIzjWKjN=VOW9LuP&6zRRZt6OvIh$99Zdh-f7GuT4nvtNmUzvzn2a%WN kD5_lMW0Ezmzb|~++zm=AH!hq$d5XWT<&p`CUYrcp04Z)SPyhe` literal 0 HcmV?d00001 diff --git a/assets/decoration/strange_door_closed_anim_strip_10.png b/assets/decoration/strange_door_closed_anim_strip_10.png new file mode 100644 index 0000000000000000000000000000000000000000..d1df09e66bf2eaae664c88cda26ecd0f214b5d65 GIT binary patch literal 844 zcmV-S1GD^zP)001xu1^@s6mZ@=W0009MNklBjE7zW_a#(0${8$*lf;6jHEL1Pw`ZiP;T{+9kFLo<{@<}4Ytv{R;F5-`>zEnVHA zJ#jgoPT!rPobL3#TO2=>~@!A5cs*;jqK}oWp)pG5$a(H-- z*Pa75MO~QfhYQ``TyB(CHbg(Z!!skd_ij6>K=?znAp z@i8X9+s=uItVWaQPWE5YtJ}ZZ&O3Rc{@Q<{?mp#8ZL9jKD(T_zp5XPqZLia}_r3ib zKP4jPW4{PIylbXJ!y6$1KOR5(|781#=wBDQ?YfP4;6wx-zKefyA)2!*HC)VO0UPN7vt(Rk*nnTWzdQ3jN@m5#>{#YEegBxso{aKXd*m^l)Y7X`x zIF#wW;KTB)0t{)oFZi%LdpMR&#_qd30Q4N*_x9U(;~ddqLAvR-Oc}cu=WU{pUfTQK zejCr8pwf3|06tES>wt*Ypa2oCK>;FOg91dn1_g+Cjj;fIPYN^yk4c64^{jir@1oYaTb`Y+re)@R`x0Ne2}-tz0A2e|q(2maVocuTGjKn)a&2wy<@>7bWJ6 z+XRj>=G|A|=aVaae>hjCCa$dCeT)5Y0!2wQW-*5nZqk+da6F9go{>x=`T)i}? z=dAU~Sc{rdCPI&9ENm8=)N^2$xJT|gw%IZ3n)iwesO$WUS##HL#hV`?Zs~?b+U>W402@jwcuQoDuIj9$}T2(dZ&yY*MP)P#YFk z88yLSQXng<*fdt(X|glrXLhR3V_47@F@Ks^bj?JIto~9I$MXOkuY$+%jZ|{{v|~ye zKEC9R&kHN8)Z?iMmbc`szn8u{sm`aCnKgwqF`2bQmX)E;CPld~q$e$IQdGXkteP2C zI?5=n6#%+c0gr3*sqR|0$~c}aTwnYanyB}GOEQs*ZH(|qZ&He?>(=b;LUJ1ug9rm3 zgA9h-ASoJ@r~^0z?ws>J;h8F9kzKU)d82_qOM9b}Wk>vyO;=SD-`u>IyW;A$c^?-`ZD=mLfCxc6>G(8Z9#$v`umTw@#jaJ9T5kY z1cwG`t@Kq=xB7}|oeI!09z50=V_Fv?&|)DHX_cXP(5Q(!USaD&Y0vUKavj1lyyY7o zufFb$nb=(#R#t33&xLFYNChKY1q)B#%s^ym2B0KF8fXR+ JlM5q*H2@P=E>Zvh literal 0 HcmV?d00001 diff --git a/assets/decoration/strange_door_opening_anim_strip_14.png b/assets/decoration/strange_door_opening_anim_strip_14.png new file mode 100644 index 0000000000000000000000000000000000000000..50954c3b057120e97eb527d7eb5580153f01e88a GIT binary patch literal 1045 zcmV+w1nT>VP)3tj(~cxNv5F+ zG9*BlXbQ@O3<MhBpjN~3lJF+V1reFi{)EXjRfOp;kyN!AMgA?---_z5)Mg5v?)GmUgAQAbVG(5wt58o_Vv5>2V+lSWJo_`$YHZ)KwCD7 zIq8uh{V)ZFOie#+SxI{JM}`ED$%y1R$Ak>I3mFnPG9uon5P}T3feZ;;+5anOMf5&> zbmba_Q>@64cF2%m+PVqD83oOvK!)6f3<+FGK91B@_DcmB(hV7MzcQk_6Dp$P;1tv* zMTR8u=SXD8Fl5M&ryc=S5r%H2n2;g6gA93il71dACPNZ!=SXBoWXK`e%O~P(MbYOR zi45t64B1Su0DV(R)yYjWq}o@TYmvy1VaSl(3l<=^^I|ikzAdMKks;$DL-r4Q3K~15 zNzGRjO){iQ---_z^02V}L8t0;y<^+<>-SIRYm4QZ_jTWEy62ZC@o~ja7lstLeQ>+jFcE}Yw5UEX+)WRH zGo-8iIHc`oUVv=dB13kkEySjvmO;8Oo6g0BiFL@Zq9~$fQEHne zGq9$!H=;y;38M}|HK0CiA+k?txIW@CfHXsz?WYW79a7C6PEJmVDBS1j-h?#6>Y5gx z+DGiRN?m}X(c~!R3dGg)Bt(T0BB$yt${t!p5v9)NCY@5!mFGz2<>}@p7;2 z2EXt9HhQq<&U$vOEjjAb9luJO2_sv;1hha5zXf|P8tgjWl>5y}QA5JTgXdJh9M+$b zYZlfypPBLU%)ZsxuTK}ew~&7yoN(1g*ZGusiW-U!5EkqWjDmXt=zO3jKt3?$Shew= zfu5uM+G3uEEzh_DdsqdfRwObh?cC(@M&QNizOvbmjrYIUd+EGE(8dmxsUG28DCRQ* zJs^t51Ew6icm&_tsy*a7bZ^bv6Q><|jx6ADjhb;FVGrAFK9lBk-?X<^$^Evzu7AZ^ zG|ocg%!VS)xtz#BM1&18=N>pJu<$6|StEXqIyS%q2ogrSWDdS^R8=du@KCg6!U32c z6eIPV&&+#yXWxg6?jI|S_uTC_i)!UsH&r8ov@kN@*d_DFVATVuwZR-V9qPa&lp@H~ zyiiKrYR{RBV_DtTOlIF+x$n!`iCJnfGlLw$n2>`95y9}-MNgt&!{va6^E4fUB~hm4 zhf>_mw29cjg_NzRI;l6(xod7T`)j0=NDd*g49s_3cr7^A39o zx=(%z0_HJr3Q`mev#r@F1ew;mYl1z@pQE$j7qwCOrSQ+1Wu6JI`_u0|O2C$j|q z#=OXa_~P-|g9d8iujBjrzu(<#!ohm%%754Vp02paf;b$k$HGMAx|2`=1S_&21^^HX zf&B&3ae(atnwY4^3#|IP&X2hmLwSe`*fWKztNvt`P!rUJ!;=tFC#QOt7Wlv9H_b!m zk1z0}CSgsBqy{vFqg2+!<>yyD;*Gu4jJCz2##j`GgEau1QM!U1>;yx;6nJbLknm!#7 z*?dp%2Y=fmk7;R<7`E^*G{NYE?uy3=hnkOdznoo6c^p@vNUvCTz1vXLvt>B zSvQCsJugl(xUwpIwSf0k zp&c#FKLq5aA2nrB+B_Y6N5DXKAqjd literal 0 HcmV?d00001 diff --git a/assets/decoration/trap_spikes_anim_strip_7.png b/assets/decoration/trap_spikes_anim_strip_7.png new file mode 100644 index 0000000000000000000000000000000000000000..249ba86e9444d0eee6cb69e1cfb022473532aedc GIT binary patch literal 577 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 literal 0 HcmV?d00001 diff --git a/assets/decoration/vase.png b/assets/decoration/vase.png new file mode 100644 index 0000000000000000000000000000000000000000..c3aed084a1b2b99aa96e3102a21bdcd4058cd997 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`b)GJcAr`&K2@PSuce$1uJw=LO+56JX+~O!nWOlDoa1a8 zb~3d#uamr+mJ_FViu=crhzqPPxpyTcfZzse>xS8Tp0d<2$I0L8yu8hS`?|!AhrBK+ d&IPWj3{8zj1_k>kI{;n6;OXk;vd$@?2>?9_L&X39 literal 0 HcmV?d00001 diff --git a/assets/decoration/vase_breaking_anim.gif b/assets/decoration/vase_breaking_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..806e3080a684a8a9b9f78e19c1f65b366ea4d914 GIT binary patch literal 408 zcmZ?wbh9u|6krfwC}&_${Lk&@8WQa67~pE8XTZ$J02KPk!pQ}sb$}SCNPwXMNPqhD zfk~#Nf92`7{EK@QwxzE{-zI)tq}Li+9({U5a9Q-^z?y9G1j&$1A&rQuluKig7jbY#W5k9 z$_X@;9cC)fNT9(ermArWp8D|G(XdJ2+@oc$!>$K4-bk8tIGxqGDsa|i9+%kgiA%P; z*HA?^k_%`g8y+K-IHVTxy)jgr#eL;bN2llO56pG$QTCxbNrP3(37 literal 0 HcmV?d00001 diff --git a/assets/decoration/vase_breaking_anim_strip_5.png b/assets/decoration/vase_breaking_anim_strip_5.png new file mode 100644 index 0000000000000000000000000000000000000000..1345da35b5c0626a03c8dff93924942c94b78654 GIT binary patch literal 462 zcmV;<0WtoGP)+@^5N0am_%DZ+%w#Lfs5 z2?74qj_rx}rD+Bc$VD4*+O@MeLlb2&QwcqI`71(?ARZ6<5v=bg;Jj}pi{SeSOz?B~ zTF=ZQU<3qU;Z!Pu=3p(K_Gs}5k;CWx zJSAStO#l)A+MJvyMdPXJ@^1jZ_1!}@pDr+6UN~6GUvn@i_lkIdTG+U_h}H+S{zv@@ zm^(mT`m6cm9_1#g^*NdU4hhylF{2KLv;Y7A07*qoM6N<$ Ef(viZo&W#< literal 0 HcmV?d00001 diff --git a/assets/decoration/wood_slab_left.png b/assets/decoration/wood_slab_left.png new file mode 100644 index 0000000000000000000000000000000000000000..d3a9ba6226cc433195813623582c5618da70602e GIT binary patch literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c!3HEhl+{lMQWHI0978lFCYzX<{X6f#m{2JC zFrmP}+)>b`;1f?^($(mGgAE2iaA#+!u&a~Xgy|ZFY(SuvbFS*sKjXlp0_F*-^Y{Ee zv*Gty{zXS5fFPo5|IdRDv<@+bA31Q~K*6^+k#20skN@)o*x4B#<0^msp9ctb-~W@~ v5h9v;CUPV5>fk~~u^DThWTYh|Brq_zX9bk#f0^|T=r{&XS3j3^P6GG&k?$JUlnrTr%X!l|Ye4Ldk0iw*S*tK5_cPlfUU~ARy@&H!0?T zOXF+Fd3*k!Iq)aeVU6RIm+~x{txr)z4*}Q$iB}VXIDA literal 0 HcmV?d00001 diff --git a/assets/decoration/wood_slab_right.png b/assets/decoration/wood_slab_right.png new file mode 100644 index 0000000000000000000000000000000000000000..b1ef0448d4de8433d6367a96c6caf8398345982e GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~c!3HEhl+{lMQe~bljv*QolTFOb{+)MVOh`;f zNXYoQ%~5bq@oTl_u31)&8=2M5JMioPa@$TG=`u_#zV_$#`c9!{=?_o-rte_r@m(XK z%nSro4)biQrwPuVv6_PSGb++Klg0@E^=3WGEI|NgQ+BQS~A!K|gRv5}F%=B1rq U=*$cMfG%M0boFyt=akR{0ACe7?EnA( literal 0 HcmV?d00001 diff --git a/assets/decoration/wooden_plate.png b/assets/decoration/wooden_plate.png new file mode 100644 index 0000000000000000000000000000000000000000..1754c9e50dc1153fec86881274b555e5085d3ffd GIT binary patch literal 256 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 literal 0 HcmV?d00001 diff --git a/assets/menu/spaceship.png b/assets/menu/spaceship.png new file mode 100644 index 0000000000000000000000000000000000000000..acba336e5068c003c4f73596ceca6e2ff2f5e644 GIT binary patch literal 1063 zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4kn<;H+e}VAjMhW5n0T@z;^_M8K-LVNi#4o z-}H2G45^s&_O5S-Z=wYIhmV4@H*QMoiU>3-(=q7L5Npm+Gut#HW&M#^%S2L_M*i|r zlJ5>Y+!oA++-^AfZ3Hvi|{w%op) z9cVR8!3@@CF7XbkIdPYM-#>rnzsbEu?L@X&(zT2MrLzQ@&i3zX$eR}YVrS#kl@Yt@ zDz)tFYNvNy_rG_|e(#ch;d*POCJQuWI&q{~N9}v0SMuob_O|eO^LJhRaH{PxyHwmn zZ|y@WEeSw_ZuU)6TYh2h-tM5n+CSA=>qP$D`N zpPT)IChotG@1*xOPYq&*%-fbZPSx%1L4_4N{$1PF{5z;{#kWyschoF<{w?!o zxu?rbE0Rm&hIn4BZ`!jf{qn}IY|e;59B^j6(bknypIiINmtQLvMg&o1bMnd`1?lx# zY~QZtFOk2q$x!rqoQ?OnpqMC}e%j*u!@z!a#Ee8XLgC z2;TkEPW0#PZ#wK(!i>`Y71$}>JqwA@&c&BC*iVPqC0j>DLOtC)@6`6vAC6jG*_U+M z&nKmv^}blWc=ob~uVxfN{qi>B=fAFr|IaU-DFWA3wncc>8}Fq7aPJ1HAG^22iA&WO v7};tq3H#Q(*DyaFoC1zGnq~#K;eT%Dw^^=z_NZakDv+3`tDnm{r-UW|d7_GG literal 0 HcmV?d00001 diff --git a/assets/objects/loot_box_anim_strip_12.png b/assets/objects/loot_box_anim_strip_12.png new file mode 100644 index 0000000000000000000000000000000000000000..baea0280de337c314b98088cbf3528c15a9e4014 GIT binary patch literal 434 zcmV;j0ZsmiP)Px$Y)M2xR9J=WmoZMmFcgM=Q*OZl7z(~YrLZuzL$ja=)(pKtm#Rx|z`&Xcb!mq( zc4?*Fz|esMa0~u z{C<4{0DISpvH}1kKQ6yLSpfJ-f{?H00>EzAXT=|^r3@ z0Eq<9Y(qCm9NPYH9s1u<2h##|Mm_6>TVg^a|9|*uGe5ZbeLi*Clf}XQ-t{?-%V0e< c^SJN-368`fBqbR?=l}o!07*qoM6N<$f}gL=O#lD@ literal 0 HcmV?d00001 diff --git a/assets/projectiles/energy1.png b/assets/projectiles/energy1.png new file mode 100644 index 0000000000000000000000000000000000000000..7640de80d6aead74c716286ff3e1948a391e5028 GIT binary patch literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^tRT$61|)m))t&+=#^NA%Cx&(BWL^R}rk*a2AsjQ4 z|43|UY&`G(*q)imVAF@6nSatbcDD&cE&V#blac#?)`>$04jeeK!HYXFZI6{Q!_iG# VNgp46=m#3W;OXk;vd$@?2>?1sDb@f0 literal 0 HcmV?d00001 diff --git a/assets/projectiles/energy2.png b/assets/projectiles/energy2.png new file mode 100644 index 0000000000000000000000000000000000000000..a235b779eba9a07381de46e8fda796e2d58c64de GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^tRT$61|)m))t&+=#^NA%Cx&(BWL^R}cAhSdAsjQ4 z|43|U1cHb5%uEKG3=9nZJpX*Tp}Xc*$zyxrIpSr!=Uh0}U1~CplmG(z++B?3lh6A% a3o?i_@G%7UO78-i#Ng@b=d#Wzp$PyWf+w*6 literal 0 HcmV?d00001 diff --git a/assets/projectiles/plasma1.png b/assets/projectiles/plasma1.png new file mode 100644 index 0000000000000000000000000000000000000000..7aafb6d36bc1b691ef8ab0f7a3a0ad3d5263c821 GIT binary patch literal 192 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)N!3HEB$FfNSDaPU;cPEB*=VV?2IaQu6jv*3L zlM@awOGrvcNc{W%|NMt{f1m$9@#v6K4UZ2G5aiyLSMWACWAX8uJu@@2i;%d2*QCN@ zo!bqRALbogJ(=-Y)blOQ|L^bn{pG&p+Y9wTjzpQ!q^AmPw#K=EGR+H%@3$Rq>Ah=w nS?poQ|NsA!H4;)%QWzLK4K<&O>^xNobOnQ_tDnm{r-UW|9pOqx literal 0 HcmV?d00001 diff --git a/assets/projectiles/plasma2.png b/assets/projectiles/plasma2.png new file mode 100644 index 0000000000000000000000000000000000000000..17e52146e2dad8e07621c19a884b916734f6b24d GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)N!3HEB$FfNSDaPU;cPEB*=VV?2Ipv-%jv*3L zr}ppVbx06#JukeqiB)IOUGVm6Q$% nt6O_FEB{eY^<$N@8i$$mofHp*+A4bioxtGf>gTe~DWM4fD|1Bh literal 0 HcmV?d00001 diff --git a/assets/spr_bunni_hat_strip4.png b/assets/spr_bunni_hat_strip4.png new file mode 100644 index 0000000000000000000000000000000000000000..137fe1a08cea079f15aa4a4ae3ecce16365d138f GIT binary patch literal 400 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3-oPT6RhUDaPU;cPEB*=VV?2IV|apzK#qG z8~eHcB(ehex&b~Ru0UE`CGyzO$8EhU)yy-!lc#BT=H3WC5F1nWzy7(7Zs5Il*QE4A zj%JhrRsM5pdJUxbOM?7@|DyngD|cor1WIuhctjR6Fz_7)VaDV6D^h@h7d>4ZLoEE4 zPQ1u>Sb@WJHAmFlU;pP@ADG3db92(iE5+4ShTnGllhO0gy!+vH#Qz;Z=We>}yRh-| zQN2kx+*hupIcsdmsr}b`A*!`#UJJvbA5O>5*$W9O84693yCiP)&2GMflJD+! z#ZEB^wR?}8yHPFwN2cY#x#>+G6RP??PH9NzocFxxw!95fj6#3$7t_yr9uLG;?EaB_ eaMt^pSpCBdD%X`Z?VSPi9D}E;pUXO@geCy9LaSo{ literal 0 HcmV?d00001 diff --git a/assets/spr_witch_full_strip8.png b/assets/spr_witch_full_strip8.png new file mode 100644 index 0000000000000000000000000000000000000000..0bd900ee8abbf435556eb0d070310c2d335258b5 GIT binary patch literal 2673 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 KMNUMnLSTaVskl!7 literal 0 HcmV?d00001 diff --git a/assets/terrain/background.png b/assets/terrain/background.png new file mode 100644 index 0000000000000000000000000000000000000000..7903666f991d4c2b15400c6f70ab32d89cea7365 GIT binary patch literal 11122 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 literal 0 HcmV?d00001 diff --git a/assets/terrain/bg_0.png b/assets/terrain/bg_0.png new file mode 100644 index 0000000000000000000000000000000000000000..36250bca25992eb2b58dbe11939333811a1db716 GIT binary patch literal 1279 zcmeAS@N?(olHy`uVBq!ia0vp^AAooP2OE$yy8SSffq~_ir;B4q#hkZyz4IQsNwi*6 zxp1UGe6DUv?9Dz#e;yU(-J{`uK4fQF z|G)H=alxtX-+HCHv#pDl?s>M)*S1e}+wIU7el>gc->quMt}}JBzRPy!GgpAu$@9L- zZ|2Vmdba*{!+EbA6;IRp3a{F&d)Jz`Q;1Yib;Je+nJ9G3mzYz0~E!D+J2QDQaxX; zG52qI?2=BhQhy!-JFVFp5)YV{L9&|}RYx%D`$G_dxSADMkPedxs>?qfsqviXL z>&#`^RabCt>d(zg#k-$BEPlFw&CBoywuhe<-~HvayX^Ud?zrDEwZ)s6oHwitd+>gF zS#a#iKTHSyC_;2oSw~1c2KP}d7j(+rcrQ#mF z%>7?&>Z50|-Fe(~IcxT}7#^!n7HgSison|d%M0ENbSZQ7vj@|E$$fhBZBF5ra)+IH zQ-1EQWzDPH{b=5Kp6ICK#mB$d*MGnD>+2P>+kftEW7_`bP~A4gr~lLD?vD<8Fm1l- zv^<>|wlAJv-gWEu;-g#^pZ~=2?Rd`3xON?n-ps$gsb{Y?&QJY!%_i#pg@8}8*>5+V zkGrY6QFrOQ??2P4|EKm&OZVmc{QdD``Pxs`<_nHJj;lRmy*=~g+{)MY9%-N7{I&et zzj&+Y*_r>g$vr sx7@$JM81Dzopr079K&0ssI2 literal 0 HcmV?d00001 diff --git a/assets/terrain/bg_1.png b/assets/terrain/bg_1.png new file mode 100644 index 0000000000000000000000000000000000000000..ff50f9a04598a1450cac73925c1baaba31f26d6b GIT binary patch literal 3171 zcmb`KX*d*$8pp>BvWyIhNrTMDQuZx-S(@y75@nAVvZV$MMrI~tvYwJXgCT1OS*9$> zHY5%+##*vu8E0%K;dbu#`#kr#&;9Ve@0Z`_-~0b3+FD=Z;}PWn004YurY82kFZ1^l za&i9Ns#EiK008g>GZRBcbnbc{<(^cFz(<-6O*!NP$DTN+;>47e-j(v=>xId=Jd-2A z#gEu11keeB8uf!#^9mcG>+*GAWGzUNicQNeL3zef03)n!%!#)Bz|qdFI|kIbK_pLF#8(Jp_^lq*AR5F@$IE< zsyf#szjhcLq2cq2P0}p~rkF3Z5~(K+*q=stU$Xd71@Yv8OOf}1% z(LM0UH}2aF;MR@rYH0yV?*zmz;P%FCZUkQ~s_RM>40fzkDUF&t$!a{c)p;Q5iQn77 zdngng%;$#B9`75kwWlM@#MFL16wGpt*+~?(PXTPL8fP5d$_>Bf-5YvojaRTja3a#L z%U;~s1xlJxN)Mu*#%8*KSmo_X4m#fx4twB)5k-`cm*TIOSO%xS8yD)-y(fMF#+~n#OZv{=ADb&y!YOv3VdEWiS{u}l`xlyj5-=9*tEXjwcn@2 zCHgYj;bzJ?NJW#BDe?xp)%l4!>wLO4H^F3@Ljy&2ei?w#AvRbcO<;%2xn$Hj2MxYm z9sKqL)C^tKQm$Q2RM^vZ@fAX%J;QPg#BBc7bLvE(%G2k42V1h2yR>O413oV|rk@aX z^gfd7lyJy{aB5o6iZI`Ebj;6R%JzbPS`W3OrwTjKbh{ckW?g>ETJ<>rNAw?_gRNoUJw%a zenqcLl(rpvKU1r5?!w9`ZW#6a#QK}GhRYY|O=FUXh{p~R%vCNQ+kO_ zze&*rDwoD)L{V|bWZOk zV>iHWtMjh6*IDJdHEVsymPEpoP0AZX0XEctQAZmFCWqy^Owo{!CdHIdpda+qR=Y3_ zwArj>gbS%aLVg9?A~QA~XIz}Fsrq4DS%WM{5o9ZGpmZ-lRZ8(A?Z%&+s~W-sz|}lG zo=q3n?4bU!z>EE_gyQrDG=L55D*B182w{l zXMk0rWUUCK7RFdoXBz>3d@o=we%&iKscu7Oku(}YzvIWB`&az)xh3Z8s3hyX26gIB zEBB&F_cR3##^jG04>bH^I8dqI_)YuUQ%vfWKor}*&E8D>M&za6jQrJs_+)g+!x>D* zxv`_?^v*xlT)~BVJPqXK(lT6BO9Vj8RTA#e+#?0v>4}M71*?0+Mv}$Ruf6a>AB78V zg?6D>lcPtnWB3u}E6PHXv!|b84b_-<*4>v#`r5~cGrUUOOsjRxdWx(9aCc8rvk4(d zaMR_%KRWn{+a?cOhmg%?JCDLFd5fxi1!{&pT|NRH^i&+;Jiy>mETma1(_Z?8hE0xI zz@ppZgFsS=xDtYI{K!SWb|=Al;GOf9?aztWmGdUTdZedQ`dNC$00wh>&lNI3Gii!uwv(h* zNPlRbtrQMPb)1{gV%^<>xu7EtpmgchsoBIN2%Q%6C=r4h7`Z7a9TXBEhzeKIRR3z} z|6^J+XOG@ZLg(ddV#j5;pE$SR8Idk6oc@;Xdx31vUx>O1wh4E-x02ntk%=!I2SGBB z+c+UjWUZy@14R89dnNyRb6`oot%w9?iZi#!27w5=SkS$si^%JgSE>y7 zHMA`MdYIOfLyq(2em&M!mMS9tr@$C>7H=ffd@o3BZv7FI+d^gD_F4AbhjIcI)6eo- zUg@?*LPAIe>d&iA>wZovI_uEgf^zu65+SQF?YIYCde0chH1kxHYwCxdESn6_eX%gh zNWt>kF=5OWEB)64&lpjLD16j<8CJLWIS@saq<@@QuK?CXSr8n17q zi`giv&`W*{U3=NcjHIvidj4zsFUwHKd{_CwVf2jT(qF$0YAAO3PJZVdNyL(hF0++x zhlK;9&sPa*<(=tx6ftEWV`nmC4erNqIT2{C`KAD9{819bY7qTu#Rnxxvp6c6$&8_erxGChLBM1+ccV?!vrmdJHfzyfW?`7Zl|a1r&e_{mk7+FC_pMPH&e@x7EsJZ= z#{<(Rlyr#U4J((|L(1G;HVEdP_T{$+&zV`t3iEouxztv~jOpgWc4UC5 zbi(?3rWmn^FqKEar<0T)cHL0ptbTE$H74Y0R$OBCH7EjbL!BGi$sX7D)^!z73;bWQ i@qZDY|If%T3G+{tyj$zu@xRLh!0f8ENwtwj{J#JqU&ht| literal 0 HcmV?d00001 diff --git a/assets/terrain/bg_2.png b/assets/terrain/bg_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1187e6c37d080c5d36dce3981df62a96d2b522dc GIT binary patch literal 1378 zcmcJP|2xwO0LQ1AFRLyW9Z8&9a&x}cx|AU!wTxcLAynlQbhGLIwhS)$rAkb#i z(ZH}ZYS&zCYP^+p2%@M`Aj&s~PTeyWw~eF6KcmCA1L!Nna}!+)#ATTg!S zhcyfJ7aVfUi5+d~`GZ^c4tGd^0WiM!Xg zLkX54Re;g+z1Cf;c@J9b8jyc(1tSVOw^xDa_e}OpP`o3o=#l&6|Ocvw5;2i zYf!7-pf2e+isforaJX_T=_#a?C6|(q6lnm4Sp}wL>4QQyyX$zSKTq#=;6v_BS!zsx zJe9&KQ!b0HBQ3KvDHmJ43UBOg!`1s`Juz#FA!PHr_$`V7f5jbi_TnOAW_|>EnxLGg ztAw@3BfOE`9ISQSDr+{lwx94gL$`q8cVM|+LV*WRiv1vBpdI(w)9INbUgr4*mPkQ6 z_K9EGkYQWS+KSScx?aT~eym9lje{gm>;s-@y5k+&aomDm8IAh_-T_R^a5!Qm=?S~0 zx{8;)9_cG;OZL16j>R$qPQ-mvixG{p5(Cyg_~Z@Z~i6vFtS*NdYT*o7%dKZC?{B1`5;;?C5 z>{WIhI%j7KHM}8xCp_pr7~|y7lUYr4)=3j6XMPLp58IkgmA-l!n21 zgRHtU2bQ-UNT&Oq&*0?KC!H-i>4^NjEps)Al4B7SmXqY5D{ zXL=zo=^y})wPa9}O*FSUu!_EtdQsdqNnBcn5VcW-pNL0op)>gVaZh_BQ*PTA!?>>LCim|0~0nD5ts3n_;+o)nF!;O_7gdph6wN1P{a#N1qTx9fbE89sh zkvnw$?mk6PWpr){KiO&onm2ZIx$E^HfvGQUeJ1#USgj}rxl3I30`V(iO{T@oLTS~V zp#~lK5rI7xmg8hoU(cQ<0;~{b{{Wbhp~Z;NYcfB08cf39{>OV literal 0 HcmV?d00001 diff --git a/assets/terrain/fg_0.png b/assets/terrain/fg_0.png new file mode 100644 index 0000000000000000000000000000000000000000..b21d7d119a5ef17af2021d6cf9fcaa74cde9673c GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^AAooP2OE$yy8SQ}NS*a`aSW-L^Y*eMFN1;ri=l(; zp$Q%G8ytSbm}QEdNsnR%su?t(p}clo?JDI4`^8oaKhhI8(oj(u$hp%{s?lh Mr>mdKI;Vst0Kf+(hyVZp literal 0 HcmV?d00001 diff --git a/assets/terrain/fg_1.png b/assets/terrain/fg_1.png new file mode 100644 index 0000000000000000000000000000000000000000..acf2ec29c5a7bfcc644a026dd991d233c63c6cb5 GIT binary patch literal 927 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 HI3V~p{WZY| literal 0 HcmV?d00001 diff --git a/assets/terrain/lava_bottom.png b/assets/terrain/lava_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..e5355ceac98431e1397a600112fc46198c528a34 GIT binary patch literal 400 zcmeAS@N?(olHy`uVBq!ia0vp^4L~fw!3-o{wzcm9QjEnx?oJHr&dIz4a$Ey^LR^9L zmR;^T(t5c)M&YW~8sW)vQgak|RosQ0I5;>iZt1y_XFSE!_Wzd${bx?QOzG6uj`6mh z<63j=(>B}3PDv0lsp*Ui&>-=WAirRS|5(9>?&AAECD%M%978-hpHA5=c36R6QkBK0LvpECaB1TvnUF6$dDbk}Ci8ahtpIM&YaG@E6i z^GuiT?eRUT3qGYzWD>h7DYx(J%G#7$HVLKNcDes^?Y^t~yz)EafA9As`JK%FV-9dH XU*y5dsxW&k(1#43u6{1-oD!M<8LY7F literal 0 HcmV?d00001 diff --git a/assets/terrain/lava_fall.png b/assets/terrain/lava_fall.png new file mode 100644 index 0000000000000000000000000000000000000000..af2ac5aeda022e72ec41ed87b91f32c85832c7cb GIT binary patch literal 591 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 literal 0 HcmV?d00001 diff --git a/assets/terrain/ta_lava_fall_end.png b/assets/terrain/ta_lava_fall_end.png new file mode 100644 index 0000000000000000000000000000000000000000..bfa12001532245e3a1977f9c11e66748b972ba8b GIT binary patch literal 533 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 a03M!Oq`?(k=pH|J0#p?>U^ViVq5lVea+Kfz literal 0 HcmV?d00001 diff --git a/assets/terrain/tileset2.png b/assets/terrain/tileset2.png new file mode 100644 index 0000000000000000000000000000000000000000..0dc2aa14da73717c36e133119b2cf32f4af6de60 GIT binary patch literal 11519 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 Zz@rPR47joz<9}aI)s?kiHHy~Z{|9npdf@;7 literal 0 HcmV?d00001 diff --git a/assets/terrain/waterfall_anim.gif b/assets/terrain/waterfall_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..a7724fec12703008d46d1e43216e285ffd36aa42 GIT binary patch literal 273 zcmZ?wbh9u|6kw2GC}&_${Lk&@8WQa67~pE8XTZ$J02KPk!pQ}sb%2-wq^uE0yDq%v z(Q*aIV3O+TUwQhi?xHzcZgm^i?Wtbh`pBa0S>~iytHiKt1?mIp25FT6YVCf+zZj_X i)TVoT+PT{ny_otev**>SMRAOTG?Q#E!pZpUwFUrUa$Lax literal 0 HcmV?d00001 diff --git a/assets/terrain/waterfall_anim_strip_4.png b/assets/terrain/waterfall_anim_strip_4.png new file mode 100644 index 0000000000000000000000000000000000000000..871d47e16fa58b65a0f98046a4a88ce317ddce82 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^4nQoy!3HF~w)}PhQnj8gjv*1PZ!e$bZE+A_4y;># zwy}U?%8?xtn750v1bR$!{knJUwKJc0yghE)F!Ox(n#Vua+i$VoTjKs!$E4vOgQ&}Q zQHS^mTprv(47?fQOBzbpFE@!eFyCU;RJeO^ivsI~hB8Mkk8%TD4@Q#(u@jgs$@)N) deyL>SzbtCc`SL>WZ=gdMJYD@<);T3K0RTOYK?eW; literal 0 HcmV?d00001 diff --git a/assets/terrain/waterfall_bottom_anim.gif b/assets/terrain/waterfall_bottom_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..8237dc57b391417d12a5fe4475106e3e5c4a7615 GIT binary patch literal 217 zcmZ?wbh9u|6kyw^L!>YHM~As{`^N`oJSHXvU(<L?Vm z8G&lq;cA6IYES(*(7kq6L%QA0-~3G|2BRt#X-Qsrx@+#eNd|6J1vjjV&$lK8FfdpH E0NW`-PXGV_ literal 0 HcmV?d00001 diff --git a/assets/terrain/waterfall_bottom_anim_strip_4.png b/assets/terrain/waterfall_bottom_anim_strip_4.png new file mode 100644 index 0000000000000000000000000000000000000000..8ac0191d7e25896c69b10bf5c2de626fd5dfae11 GIT binary patch literal 173 zcmeAS@N?(olHy`uVBq!ia0vp^4nWMo!3HEflYZU@QYD@)jv*eMZ$qNF4j6E37N2nM z|CCAGJJuhX@YVG7pUAo;ZoQccUFI?kp9bFhxNywy?-7myZvFT zqO`lI`h%IQ9byhsc8Xbd?3^|+;B{uHfA^XK1|%O$WD@{V&7LlfAre!QQyQ3(lOO-*$$0SQ z=H?zAAkZ;j{r&xYYQi3IhVTzRMC6^{__X~`KR+)u#U%{HX9j}iH8<5&TKy$wOej4y zt2SwZ>F*;4lpi)H=?ViSyG(B|2**WgBs3aMSo`x+5_gx9+l=>oXP&xFY_R+VvZlwt dvF0HQ!~aCXcVA0R`vaZB;OXk;vd$@?2>|GeM%MrU literal 0 HcmV?d00001 diff --git a/assets/ui/fonts.png b/assets/ui/fonts.png new file mode 100644 index 0000000000000000000000000000000000000000..fa002b829f55771d132279167116630cafbfe503 GIT binary patch literal 1850 zcmZvcYdG5p7RJ+=S*E%!sqSc9qNp+~c3lR4)QVUXVYEqGMs-%}TCrA=28~RqscH#D zjkXbyMpg+m#IFfPp65B2ukShM{oN0N`)X?FYk)u? zO@BXFCmu&i3hA#&hCV0yrcM`R zewKUpnO`zEz|qg~#8-Zf7b#wa1!k0sO$VQ#zw*&o&bRxgjV3sB;sB z%;QzM|A7Nfen#SQgS?Z)xrUJ|lH9Xst;==;w27fvYJetveDGb0m^(%l2&~5A`L9x5Wlf4NLXkbX4v~r))4& zxy@J4c*F$GX&N-DR`yX$rZ(D5Cuw)-feVS}y2fz(g2?g*Id5)tOkE$-_9)}GM_`~> zrzpYB(nh@xY?e+Y{AFaQB1;Qc1cY6KF2Zp)+ZWU|Da;nHc*^8l77Ufz*?q6kkWm^C zsYJ3-PvH!?WJf~Oo}A+LzaJ{2F&C<%m!)@@oJXYIWP|YZ-VCz$J)EOY%(B>lpL*V1 znAascw!6($Y8uT9y+tF<>r5dlRn&$sR$rz}R+s!k@6x$yfi*!{J}j6MJjnAZa@vbSdz#BZm>649UXE>ke5Wd*rl z(wE4G!DdCB?@a-wkm_)zZzd@b3sq3-0LoTHQ~rWdaqa}TkWSd=sbV(4g3sb;C;ie86+qRSB%@VC-KA)m>gfbdpNWq&_j*m<@)x$77AH< z2aJWbbL9ccczZoO`A7X=DYm%TjnqYD#n;9%^P{{&C`bQCdKRrkV<3#jF37=`Vr_59 z$^md;A5k!GI%nSm-Ig*}JsD9-PJD12X>zhm7wqaX`XSP3bvizq>3Mlv7Eq6zuVCV( z8eu{Ip4tb@vz4q(k-EuVc^E+BW*`z|nO*h`R!bZoj$muz;dYlL$yL;nPnRp-XpoP} zzMK=Jx!3Xso0DY;_>;#dtt}^*z4T_|y9c5l*PUmE+&g-xlgsHjzE4dc=8%;OectYA zu02%ocQ{Aw8XWIZPa-Nq$K_zJMoiFty?VS(S&W00kSVQ|3Ffh}6Ycpi;eSY|#$HCS z;dI%qG1bc978V{jBh$GU`^m>U`03h}9gTsIs%vqz3gL&6GLsJ4_(-$fbsM9ahoWIw zue|J0z@MHV8rXidP6TK>)4`Q7bp%y%$9RceS2Aq^6|4xV)wQD$o9D+{M0-E6>%HaY z_r^oycTY;)M^5$A6qZN7?JVbWLRzkB@3LF%Rs<9bqlTm08zjAvrk62EcG>n$j9v?Q zo=FsiLGGPb$0M%l5V4I?6G%{F@P9Q=o`%?bx)y7wI<*e5sv&+&auYjnIEuqJjyYL8 zy6PWy2jL_#OcL}U%tDZ)F9fG&98Uz=uogvIqaF^CJA;u| zfVThl3qjI%Mcg7RBiyRnylLV3;yXav2_z`O!+Y~bws~yyi@7A^N`u@vk=~q-U~SQ; zEIX#N52F)hHvd2ctVxfzt%K~^4J^a@=EVd0A9IE$isSzpAQDp9<#Eo5VeZ5_;KB{dIFjPE zt8NjkpPKPFum)ZiL5w6qOUibE_}@|B3uiLm>M z!T=YV9)?t{@~}5cGu&6=j8>~{>{PzKpR>GTr2Vf>I5(MnFgmURo@7?~5`yOTciIJ> zZJC%!@mNw|vG9qRjj_{xF@(crm5tnAfid_tB{G1HWHFu?S6uLokz@=gf1`gt_gfE1 zg|~bAcR2LV2%_(}@WSq{r*c`>!gPI3&oejY4atr01?gU!zq4zt44Y*r$c`Sxx*uO=I*y1{s7wl?fw0I;IKOAwaotjBuTOG literal 0 HcmV?d00001 diff --git a/assets/ui/health_hud_left.png b/assets/ui/health_hud_left.png new file mode 100644 index 0000000000000000000000000000000000000000..17e41c0f84564d4d74d95da7ec69a6fce68d644e GIT binary patch literal 136 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`{+=$5Ar`&K2@3=aj0_A6B&4PP ztKVjr@od(%IJVkg!%MyfW@i8P*FA6i|NUO9@@Y{Y9v+@2H+ymzR1>Z=I3^!BdU^c` jvxY}Ydw4h3)MWpwSGTu6{1-oD!MOV literal 0 HcmV?d00001 diff --git a/assets/ui/health_hud_right.png b/assets/ui/health_hud_right.png new file mode 100644 index 0000000000000000000000000000000000000000..ffd38d5c0ce7b4d8b0a2ca528d8b9ee209c0cd75 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`ah@)YAr`&K2@3=aq@<<)tA~HS zxj9`@^8Mc3Zkrgz{r4wjtkhDw9>>;J{eIow`2C*`)F&rD{_pcdYEiz{u>(Nhu#M5c vAnU*cvj>k}hVy`ch9oaX9p5UbaX-&hK7$|f*-(%IGC_9v5}61#DT#WH#g(tz=*_!!NEuvSPFxw zP8dtlf!&;oZ&ND;+j_^Hxo4uK_uk9H{d-eDqtS50pbw^LvP~u;8>7+40KNo~9IM?y zsa!}Md^~i~YBv1qzltk@VD2OdrfITnf505iW{zj48c7tR+aIuC-1Mo7A(%S=Wata} zhxc*^Mnv0RLG3A?DkCRIFz3vQ=QPlQ)}jTiAyQD>g;k}6I1Wn%CH=AgQPNUDNq4ev zyW9KgBw?f?a*D;3l=gTaD_j@pFi+5+OW&>8cqs;mgE|a(m0`RRv zRiHYIyCA>dQxqX1h_I&fAJeQ=%u6j$m>_F9XT54=>3x|c2@ynca@(i)*xmQ}3|Lo9le6BY;X8!TaHo9Fxu=zIoGS3j3^P6$g) z#iLVNwisO5{NR$zE2-{KnY#i!%n7q3O@k$SdV3!}N?2|Y3ywj@IykA qJ6x%W@rlNfEQT`zF>DFm=a{(}G7cuNa-9Zyiow&>&t;ucLK6UVI$vA> literal 0 HcmV?d00001 diff --git a/assets/ui/lost_hearts_anim.gif b/assets/ui/lost_hearts_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..40190f4015555ec9cfc63169c1926cdc4b1b3c20 GIT binary patch literal 287 zcmZ?wbh9u|6krfwC}&_${Lk&@8WQa67~pE8XTZ$J02KPk!pQ}sb$}SCNPwXcNZ)&R z&Dhv@w}BCpVN3tY(*pd_0$bWl+wVPEw5RnhBcH!TPu~K^6;X?3?K-vDeUtvbm)n;t zHdJ%sT;B*Z25uq~12Y2;11Fk^axKl7(vRe4NNnl4k+tG+TAre?N9=*)GmkUtx;N>t zVrp-IIEabQrJ=L@)!RjLw%iK6X@f^04^Lm_$+!HA=M?P?KynVy7zRcl1epf}OiV6} G4Auai_E7Zz literal 0 HcmV?d00001 diff --git a/assets/ui/lost_hearts_anim_strip_5.png b/assets/ui/lost_hearts_anim_strip_5.png new file mode 100644 index 0000000000000000000000000000000000000000..657f3bd8f8484ad3d1f0553e695acbe0e349e533 GIT binary patch literal 284 zcmV+%0ptFOP)0H74W9YHAYU;tkrQX>L}8en2z z!0vJ7eM=aW_btKD(DC;_L#S&kMmEJ|1~GbvGGM|ch%MmA0e78ZsAA4w1{jqH1H;Jh zIJLlN8Au@*t%WHBM5iKBQqM?g2jaBA*x300ZUdwLyA6!~8yg${A5JwVT>vZ)M+1)n iaPQr<(ZCx8v;_b~HQs|P#ADC^0000l oBy;tI)Co`Zg5H#DH8BQ;`br~<1|%O$WD@{V&7LlfAre!QQyQ9PNw5EJyr5Bx zH_(j@2*hSIy}c;+B1X~D gl9Gu`KMrv+B#Y_heaV=Y2y_mEr>mdKI;Vst0Qzu2K>z>% literal 0 HcmV?d00001 diff --git a/assets/ui/select_icon_anim.gif b/assets/ui/select_icon_anim.gif new file mode 100644 index 0000000000000000000000000000000000000000..c48cce1ccafc84565f57933bd3ce8cc2f461d71a GIT binary patch literal 435 zcmZ?wbh9u|^k#t;Yx*79ezAc$Ii+;Ph=2ni`SeJlhyXvDK}OtdK
zK!kZRzq~yj#tAe}a9n#qDm+%<#zfV^x&0RR>&h_gMF0q0vT}|92#p9t@A%_5ICzsoM^zs&5`8 zzRTaf@w)rQW79wV6jDE4EX%c8$KuOlufANlN8WQp&X=xOv+2Q=EibmPF`PM;@Z$Ia z0f?~0nl0SsHOozxE&Iz=Cox~YP{Zc>!VQ^-Gg_Z%WLG z_m9aJzmyvV7M_|ndGpHC(=Dz%kZC`}rBJhUdDD@3s_Q08PkS72^Oc?4)vN4_4|#rF T^nYRn(2oqBu6{1-oD!M cx then self.pos.x = cx end + if self.pos.y < 0 then self.pos.y = 0 end + if self.pos.y > cy then self.pos.y = cy end + end +end + +function Camera:ScreenAt(x,y,width,height) + self.pos.x = math.floor(x/width)*width + self.pos.y = math.floor(y/height)*height +end diff --git a/data/scripts/collision.lua b/data/scripts/collision.lua new file mode 100644 index 0000000..1e8b9c2 --- /dev/null +++ b/data/scripts/collision.lua @@ -0,0 +1,76 @@ +Collision = {} +--[[ + Collision + + [bool] isDisabled + > if true used for collision + + [bool] isActive + > if true, this collision is active (on collision, duh) + + [bool] isColliding + > if true, this collision is colliding + + [2d pos] from - x, y + > top right corner of collision box + + [2d pos] to - x, y + > bottom left corner of collision box + + [int] width + > width of collision box + + [int] height + > height of collision box +--]] + +-- can also be called with only ox and oy, where they become the width and height instead +function Collision:new(ox,oy,tx,ty) + local o = {isColliding = false, isDisabled = false, isActive = false} + + if tx ~= nil and ty ~= nil then + o.from = {x = ox, y = oy} + o.to = {x = tx, y = ty} + + o.width = o.to.x - o.from.x + o.height = o.to.y - o.from.y + else + o.width = ox + o.height = oy + + o.from = {x = 0, y = 0} + o.to = {x = 0, y = 0} + end + + setmetatable(o, self) + self.__index = self + + return o +end + +function Collision:CenterAt(x, y) + self.from.x = x-self.width/2 + self.from.y = y-self.height/2 + self.to.x = x+self.width/2 + self.to.y = y+self.height/2 +end + +function Collision:PlaceAt(x, y) + self.from.x = x or self.from.x + self.from.y = y or self.from.y + self.to.x = self.from.x + self.width + self.to.y = self.from.x + self.height +end + +function Collision:Draw(color) + if self.isColliding == true then + love.graphics.setColor(0,1,0,0.5) + elseif self.isActive == 1 then + love.graphics.setColor(0,1,1,0.5) + elseif color == 1 then + love.graphics.setColor(1,0,0,0.5) + elseif color == 2 then + love.graphics.setColor(0,1,1,0.5) + end + love.graphics.rectangle("fill",self.from.x-Camera.pos.x, self.from.y-Camera.pos.y, self.width, self.height) +end diff --git a/data/scripts/debug.lua b/data/scripts/debug.lua new file mode 100644 index 0000000..0ef8723 --- /dev/null +++ b/data/scripts/debug.lua @@ -0,0 +1,27 @@ +function DebugUI() +love.graphics.print("time: "..fps_total..", fps: "..fps_draw..", frametime: "..math.floor(current_dt* 1000).."ms", 10*textScale, 0*textScale, 0, textScale) + + love.graphics.setColor(1,1,1) + -- lots of variables + love.graphics.print("[main_player]",10*textScale,40*textScale, 0, textScale) + love.graphics.print("position: {"..main_player.pos.x..", "..main_player.pos.y.."}",10*textScale,60*textScale, 0, textScale) + love.graphics.print("velocity: {"..main_player.vel.x..", "..main_player.vel.y.."}",10*textScale,80*textScale, 0, textScale) + love.graphics.print("scale: {"..main_player.scale.x..", "..main_player.scale.y.."}",10*textScale,100*textScale, 0, textScale) + love.graphics.print("sprite: "..tostring(main_player.sprite)..", anim_speed: "..main_player.anim_speed,10*textScale,120*textScale, 0, textScale) + love.graphics.print("booleans: \"isOnGround\": "..tostring(main_player.isOnGround),10*textScale,140*textScale, 0, textScale) + + love.graphics.print("[Camera]",10*textScale,160*textScale, 0, textScale) + love.graphics.print("position: {"..Camera.pos.x..", "..Camera.pos.y.."}",10*textScale,180*textScale, 0, textScale) + love.graphics.print("size: {"..Camera.width..", "..Camera.height.."}",10*textScale,200*textScale, 0, textScale) + + love.graphics.print(textScale,10*textScale,240*textScale, 0, textScale) + love.graphics.print("Level: "..levelNum.." / "..#levelList.." \""..currLevel.."\"",10*textScale,260*textScale, 0, textScale) + + -- player isOnGroundCheck + love.graphics.setColor(1,0,0) + love.graphics.points(-Camera.pos.x + main_player.pos.x, -Camera.pos.y + main_player.pos.y) +end + +function DebugColisions() + objects.DrawCollisions() +end diff --git a/data/scripts/entities/player.lua b/data/scripts/entities/player.lua new file mode 100644 index 0000000..ae66135 --- /dev/null +++ b/data/scripts/entities/player.lua @@ -0,0 +1,205 @@ + player = entity:newEntity(x,y) + +function InitPlayer(id) + player.health = 3 + player.coins = 0 + + -- physics + player.vel = { + x = 0, + y = 0 + } + -- constants + player.acc = 90 + player.friction = 20 + player.gravity = 9.81 + player.climbHeight = 3 + player.jumpForce = 5 + player.maxSpeed = 600 + player.jumpMaxSpeed = 9.5 + player.zeroSpeed = 0.001 + -- bools + player.isJumping = false + player.isOnGround = false + player.isOnLadder = false + player.canJump = true + player.canFall = true + player.canFriction = true + + -- sprite + player.offset = {x = -8, y = -16} +end + +function player:DoInput() + -- PLATFORMER INPUT + if self.isOnGround then + -- apply friction + + -- horizontal input (slide~~) + if love.keyboard.isDown('a',"left") then + self.vel.x = self.vel.x - self.acc*current_dt + end + if love.keyboard.isDown('d',"right") then + self.vel.x = self.vel.x + self.acc*current_dt + end + if self.canJump then + -- vertical input (jump!) + if love.keyboard.isDown("up", "w") and self.isJumping ~= true then + self.vel.y = self.vel.y - self.jumpForce + self.isOnGround = false + self.isJumping = true + end + end + end + + -- fall if down input on platforms + if not isThereCollisionAt( + self.pos.x, + self.pos.y + self.vel.y + ) and not isThereLadderAt( + self.pos.x, + self.pos.y + self.vel.y + ) and isTherePlatformAt( + self.pos.x, + self.pos.y + self.vel.y + ) and love.keyboard.isDown("down", "s") + then + self.pos.y = self.pos.y + tileProperties.height/3 + self.isOnGround = false + end +end + +function player:HandleAnimation() + + -- flip sprite to look in the direction is moving + if self.vel.x ~= 0 then self.flip.x = math.sign(self.vel.x) end + + -- animation manager + if self.isOnLadder then + self:LoadAnimation(animation.nancy.jump) + elseif not self.isOnGround and self.isJumping and self.vel.y > 1.25 then + self:LoadAnimation(animation.nancy.fall) + elseif not self.isOnGround and self.vel.y < 0 then + self:LoadAnimation(animation.nancy.jump) + elseif self.vel.x ~= 0 then + self:LoadAnimation(animation.nancy.run) + else + self:LoadAnimation(animation.nancy.idle) + end + + -- special case: idle animation gets slower by time + if self.anim_path == animation.nancy.idle.path then + if self.anim_speed < 0.5 then self.anim_speed = self.anim_speed + 0.001 end + end +end + +function player:DoPhysics() + -- reset physics resolution + self.canFall = true + self.canJump = true + self.canFriction = true + -- reset flags + self.isOnGround = false + self.isOnLadder = false + -- truncate to max & min values + if math.abs(self.vel.x) > self.maxSpeed then + self.vel.x = self.maxSpeed * math.sign(self.vel.x) + end + if math.abs(self.vel.y) > self.maxSpeed then + self.vel.y = self.maxSpeed * math.sign(self.vel.y) + end + if math.abs(self.vel.x) < self.zeroSpeed then + self.vel.x = 0 + end + if math.abs(self.vel.y) < self.zeroSpeed then + self.vel.y = 0 + end + + -- if on air, say so! + if self.vel.y > 5 then + self.isJumping = true + end + + -- if its on ground, then say so. + if self.vel.y > 0 then + if isThereAnyCollisionAt( + self.pos.x, + self.pos.y + self.vel.y + ) then + self.isOnGround = true + self.isJumping = false + end + end + -- horizontal collisions + if isThereAnyCollisionAt(self.pos.x + self.vel.x, self.pos.y) then + -- checks for ladders + if isThereLadderAt(self.pos.x + self.vel.x, self.pos.y) + and self.vel.x ~= 0 + and not isThereLadderAt(self.pos.x, self.pos.y) + then + self.vel.y = 0 + self.vel.x = 0 + + self.pos.y = self.pos.y - 4*game.scale * current_dt + + self.canFall = false + self.canJump = false + self.canFriction = false + + self.isOnLadder = true + self.isOnGround = true + end + + -- checks for slopes + for i = 1, self.climbHeight do + if not isThereCollisionAt(self.pos.x + self.vel.x, self.pos.y - i * game.scale) + and self.isOnGround then + + self.pos.x = self.pos.x + self.vel.x + self.pos.y = self.pos.y - i * game.scale + + self.canFriction = false + break + end + end + + -- hey, you arent permanently stopped while collisioning, just lose a bit of force! + if self.canFriction then + self.vel.x = self.vel.x * (1 - math.min(current_dt * self.friction/15, 1)) + end + else + self.pos.x = self.pos.x + self.vel.x + end + + -- vertical collision + if self.vel.y > 0 + and isThereAnyCollisionAt(self.pos.x, self.pos.y + self.vel.y) then + self.isOnGround = true + self.isJumping = false + self.vel.y = 0 + else + self.pos.y = self.pos.y + self.vel.y + end + + -- drop. + if self.canFall then + self.vel.y = self.vel.y + 2*self.gravity * current_dt + end + + -- friction hard in ground, soft in air + if self.isOnGround then + self.vel.x = self.vel.x * (1 - math.min(current_dt * self.friction, 1)) + else + self.vel.x = self.vel.x * (1 - math.min(current_dt * self.friction/20, 1)) + end +end + + +function player:newPlayer(x,y) + local o = entity:newEntity(x,y) + + setmetatable(o, self) + self.__index = self + + return o +end diff --git a/data/scripts/entity.lua b/data/scripts/entity.lua new file mode 100644 index 0000000..5a7eef5 --- /dev/null +++ b/data/scripts/entity.lua @@ -0,0 +1,65 @@ +entity = {class = "entity", anim_subframe = 0, anim_frame = 0, anim_imgs = {}, offset = {x = 0, y = 0}, scale = {x = 1, y = 1}, flip = { x = 1, y = 1}} + +function entity:newEntity(x,y) + o = {} + o.pos = {x = x, y = y} + + setmetatable(o, self) + self.__index = self + return o +end + +function entity:Move(target, speed) -- target = {tx int, ty int} / speed = int + +end + +function entity:Draw() + if self.sprite ~= nil then + love.graphics.draw( + self.sprite, + self.pos.x - Camera.pos.x + self.offset.x * game.scale * self.scale.x * self.flip.x, + self.pos.y - Camera.pos.y + self.offset.y * game.scale * self.scale.y * self.flip.y, + 0, + game.scale * self.scale.x * self.flip.x, + game.scale * self.scale.y * self.flip.y + ) + end +end + +function entity:Animate() + if game_paused ~= true then + -- try to animate + self.anim_subframe = self.anim_subframe + current_dt + + if self.anim_subframe >= self.anim_speed then + self.anim_frame = self.anim_frame + 1 + self.anim_subframe = self.anim_subframe - self.anim_speed + end + + -- cycle + if self.anim_frame >= self.anim_frames+1 then + self.anim_frame = self.anim_frame - self.anim_frames + end + + -- change + self.sprite = self.anim_imgs[self.anim_frame] + end +end + +function entity:LoadAnimation(anim,frames,speed) + if self.anim_path ~= anim and self.anim_path ~= anim.path then + if frames ~= nil and speed ~= nil then + self.anim_path = anim or nil + self.anim_frames = frames or 4 + self.anim_speed = speed or frames + else + self.anim_path = anim.path + self.anim_frames = anim.frames + self.anim_speed = anim.speed + end + + self.anim_imgs = anim.imgs + end +end + +require "data/scripts/entities/player" diff --git a/data/scripts/enums.lua b/data/scripts/enums.lua new file mode 100644 index 0000000..e7966d1 --- /dev/null +++ b/data/scripts/enums.lua @@ -0,0 +1,61 @@ +image = { + background = love.graphics.newImage("assets/terrain/background.png"), + cartridge = { + nancy = love.graphics.newImage("assets/menu/nancy.png") + } +} +-- animations +animation = { + nancy = { + idle = { + path = "assets/characters/nancy/idle", + frames = 4, + speed = 1/8, + imgs = {} + }, + run = { + path = "assets/characters/nancy/run", + frames = 6, + speed = 1/8, + imgs = {} + }, + fall = { + path = "assets/characters/nancy/fall", + frames = 3, + speed = 1/8, + imgs = {} + }, + jump = { + path = "assets/characters/nancy/jump", + frames = 3, + speed = 1/8, + imgs = {} + } + } +} + +for _, object in pairs(animation) do + for _, anim in pairs(object) do + for i = 1, anim.frames do + table.insert(anim.imgs,love.graphics.newImage(anim.path..tostring(i)..".png")) + end + end +end + +levelProperties = { + pos = { + x = 0, + y = 0 + }, + offset = { + x = 0, + y = 0 + } +} + +tileProperties = { + width = 16, + height = 16, + scale = game.scale, + tileset = love.graphics.newImage("assets/terrain/tileset.png") +} diff --git a/data/scripts/in_out.lua b/data/scripts/in_out.lua new file mode 100644 index 0000000..914782e --- /dev/null +++ b/data/scripts/in_out.lua @@ -0,0 +1,14 @@ +function doOutput(table) + local file = io.open("map.json", "w") + io.output(file) + io.write(json.encode(table)) + io.close(file) +end + +function getInput(filename) + local file = io.open(filename, "r") + io.input(file) + local content = io.read() + io.close(file) + return content +end diff --git a/data/scripts/json.lua b/data/scripts/json.lua new file mode 100644 index 0000000..711ef78 --- /dev/null +++ b/data/scripts/json.lua @@ -0,0 +1,388 @@ +-- +-- json.lua +-- +-- Copyright (c) 2020 rxi +-- +-- Permission is hereby granted, free of charge, to any person obtaining a copy of +-- this software and associated documentation files (the "Software"), to deal in +-- the Software without restriction, including without limitation the rights to +-- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +-- of the Software, and to permit persons to whom the Software is furnished to do +-- so, subject to the following conditions: +-- +-- The above copyright notice and this permission notice shall be included in all +-- copies or substantial portions of the Software. +-- +-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +-- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +-- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +-- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +-- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +-- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +-- SOFTWARE. +-- + +local json = { _version = "0.1.2" } + +------------------------------------------------------------------------------- +-- Encode +------------------------------------------------------------------------------- + +local encode + +local escape_char_map = { + [ "\\" ] = "\\", + [ "\"" ] = "\"", + [ "\b" ] = "b", + [ "\f" ] = "f", + [ "\n" ] = "n", + [ "\r" ] = "r", + [ "\t" ] = "t", +} + +local escape_char_map_inv = { [ "/" ] = "/" } +for k, v in pairs(escape_char_map) do + escape_char_map_inv[v] = k +end + + +local function escape_char(c) + return "\\" .. (escape_char_map[c] or string.format("u%04x", c:byte())) +end + + +local function encode_nil(val) + return "null" +end + + +local function encode_table(val, stack) + local res = {} + stack = stack or {} + + -- Circular reference? + if stack[val] then error("circular reference") end + + stack[val] = true + + if rawget(val, 1) ~= nil or next(val) == nil then + -- Treat as array -- check keys are valid and it is not sparse + local n = 0 + for k in pairs(val) do + if type(k) ~= "number" then + error("invalid table: mixed or invalid key types") + end + n = n + 1 + end + if n ~= #val then + error("invalid table: sparse array") + end + -- Encode + for i, v in ipairs(val) do + table.insert(res, encode(v, stack)) + end + stack[val] = nil + return "[" .. table.concat(res, ",") .. "]" + + else + -- Treat as an object + for k, v in pairs(val) do + if type(k) ~= "string" then + error("invalid table: mixed or invalid key types") + end + table.insert(res, encode(k, stack) .. ":" .. encode(v, stack)) + end + stack[val] = nil + return "{" .. table.concat(res, ",") .. "}" + end +end + + +local function encode_string(val) + return '"' .. val:gsub('[%z\1-\31\\"]', escape_char) .. '"' +end + + +local function encode_number(val) + -- Check for NaN, -inf and inf + if val ~= val or val <= -math.huge or val >= math.huge then + error("unexpected number value '" .. tostring(val) .. "'") + end + return string.format("%.14g", val) +end + + +local type_func_map = { + [ "nil" ] = encode_nil, + [ "table" ] = encode_table, + [ "string" ] = encode_string, + [ "number" ] = encode_number, + [ "boolean" ] = tostring, +} + + +encode = function(val, stack) + local t = type(val) + local f = type_func_map[t] + if f then + return f(val, stack) + end + error("unexpected type '" .. t .. "'") +end + + +function json.encode(val) + return ( encode(val) ) +end + + +------------------------------------------------------------------------------- +-- Decode +------------------------------------------------------------------------------- + +local parse + +local function create_set(...) + local res = {} + for i = 1, select("#", ...) do + res[ select(i, ...) ] = true + end + return res +end + +local space_chars = create_set(" ", "\t", "\r", "\n") +local delim_chars = create_set(" ", "\t", "\r", "\n", "]", "}", ",") +local escape_chars = create_set("\\", "/", '"', "b", "f", "n", "r", "t", "u") +local literals = create_set("true", "false", "null") + +local literal_map = { + [ "true" ] = true, + [ "false" ] = false, + [ "null" ] = nil, +} + + +local function next_char(str, idx, set, negate) + for i = idx, #str do + if set[str:sub(i, i)] ~= negate then + return i + end + end + return #str + 1 +end + + +local function decode_error(str, idx, msg) + local line_count = 1 + local col_count = 1 + for i = 1, idx - 1 do + col_count = col_count + 1 + if str:sub(i, i) == "\n" then + line_count = line_count + 1 + col_count = 1 + end + end + error( string.format("%s at line %d col %d", msg, line_count, col_count) ) +end + + +local function codepoint_to_utf8(n) + -- http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&id=iws-appendixa + local f = math.floor + if n <= 0x7f then + return string.char(n) + elseif n <= 0x7ff then + return string.char(f(n / 64) + 192, n % 64 + 128) + elseif n <= 0xffff then + return string.char(f(n / 4096) + 224, f(n % 4096 / 64) + 128, n % 64 + 128) + elseif n <= 0x10ffff then + return string.char(f(n / 262144) + 240, f(n % 262144 / 4096) + 128, + f(n % 4096 / 64) + 128, n % 64 + 128) + end + error( string.format("invalid unicode codepoint '%x'", n) ) +end + + +local function parse_unicode_escape(s) + local n1 = tonumber( s:sub(1, 4), 16 ) + local n2 = tonumber( s:sub(7, 10), 16 ) + -- Surrogate pair? + if n2 then + return codepoint_to_utf8((n1 - 0xd800) * 0x400 + (n2 - 0xdc00) + 0x10000) + else + return codepoint_to_utf8(n1) + end +end + + +local function parse_string(str, i) + local res = "" + local j = i + 1 + local k = j + + while j <= #str do + local x = str:byte(j) + + if x < 32 then + decode_error(str, j, "control character in string") + + elseif x == 92 then -- `\`: Escape + res = res .. str:sub(k, j - 1) + j = j + 1 + local c = str:sub(j, j) + if c == "u" then + local hex = str:match("^[dD][89aAbB]%x%x\\u%x%x%x%x", j + 1) + or str:match("^%x%x%x%x", j + 1) + or decode_error(str, j - 1, "invalid unicode escape in string") + res = res .. parse_unicode_escape(hex) + j = j + #hex + else + if not escape_chars[c] then + decode_error(str, j - 1, "invalid escape char '" .. c .. "' in string") + end + res = res .. escape_char_map_inv[c] + end + k = j + 1 + + elseif x == 34 then -- `"`: End of string + res = res .. str:sub(k, j - 1) + return res, j + 1 + end + + j = j + 1 + end + + decode_error(str, i, "expected closing quote for string") +end + + +local function parse_number(str, i) + local x = next_char(str, i, delim_chars) + local s = str:sub(i, x - 1) + local n = tonumber(s) + if not n then + decode_error(str, i, "invalid number '" .. s .. "'") + end + return n, x +end + + +local function parse_literal(str, i) + local x = next_char(str, i, delim_chars) + local word = str:sub(i, x - 1) + if not literals[word] then + decode_error(str, i, "invalid literal '" .. word .. "'") + end + return literal_map[word], x +end + + +local function parse_array(str, i) + local res = {} + local n = 1 + i = i + 1 + while 1 do + local x + i = next_char(str, i, space_chars, true) + -- Empty / end of array? + if str:sub(i, i) == "]" then + i = i + 1 + break + end + -- Read token + x, i = parse(str, i) + res[n] = x + n = n + 1 + -- Next token + i = next_char(str, i, space_chars, true) + local chr = str:sub(i, i) + i = i + 1 + if chr == "]" then break end + if chr ~= "," then decode_error(str, i, "expected ']' or ','") end + end + return res, i +end + + +local function parse_object(str, i) + local res = {} + i = i + 1 + while 1 do + local key, val + i = next_char(str, i, space_chars, true) + -- Empty / end of object? + if str:sub(i, i) == "}" then + i = i + 1 + break + end + -- Read key + if str:sub(i, i) ~= '"' then + decode_error(str, i, "expected string for key") + end + key, i = parse(str, i) + -- Read ':' delimiter + i = next_char(str, i, space_chars, true) + if str:sub(i, i) ~= ":" then + decode_error(str, i, "expected ':' after key") + end + i = next_char(str, i + 1, space_chars, true) + -- Read value + val, i = parse(str, i) + -- Set + res[key] = val + -- Next token + i = next_char(str, i, space_chars, true) + local chr = str:sub(i, i) + i = i + 1 + if chr == "}" then break end + if chr ~= "," then decode_error(str, i, "expected '}' or ','") end + end + return res, i +end + + +local char_func_map = { + [ '"' ] = parse_string, + [ "0" ] = parse_number, + [ "1" ] = parse_number, + [ "2" ] = parse_number, + [ "3" ] = parse_number, + [ "4" ] = parse_number, + [ "5" ] = parse_number, + [ "6" ] = parse_number, + [ "7" ] = parse_number, + [ "8" ] = parse_number, + [ "9" ] = parse_number, + [ "-" ] = parse_number, + [ "t" ] = parse_literal, + [ "f" ] = parse_literal, + [ "n" ] = parse_literal, + [ "[" ] = parse_array, + [ "{" ] = parse_object, +} + + +parse = function(str, idx) + local chr = str:sub(idx, idx) + local f = char_func_map[chr] + if f then + return f(str, idx) + end + decode_error(str, idx, "unexpected character '" .. chr .. "'") +end + + +function json.decode(str) + if type(str) ~= "string" then + error("expected argument of type string, got " .. type(str)) + end + local res, idx = parse(str, next_char(str, 1, space_chars, true)) + idx = next_char(str, idx, space_chars, true) + if idx <= #str then + decode_error(str, idx, "trailing garbage") + end + return res +end + + +return json diff --git a/data/scripts/level.lua b/data/scripts/level.lua new file mode 100644 index 0000000..57abb8a --- /dev/null +++ b/data/scripts/level.lua @@ -0,0 +1,493 @@ +function LoadTiles() + LevelInfo = {} + Tiles = dofile("Mothback/data/tiles.lua") + --[[ + on level format: + + id = tile identifier + depth = order in the render + force = rendering other tile instead of the one in this position + overlay = render another tile id + overlay_depth = foreground/background overlay depth + type = collision type + + ]] + LevelTiles = json.decode(getInput("Mothback/data/levels/"..currLevel..".json")) + LevelInfo.Width = GetLevelWidth() + LevelInfo.Height = #LevelTiles * tileProperties.height + IndexLevelTiles() + LoadTileObjects() +end + +function GetLevelWidth() + local width = 0 + for i = 1, #LevelTiles do + if width < #LevelTiles[i] then width = #LevelTiles[i] end + end + return width * tileProperties.width +end + +function IndexLevelTiles() + TileIndex = {} + + -- number of tiles in tileset! + local width = tileProperties.tileset:getPixelWidth()/tileProperties.width + local height = tileProperties.tileset:getPixelHeight()/tileProperties.height + for i = 0, height do + for j = 0, width do + TileIndex[i*width+j+1] = love.graphics.newQuad( + j*tileProperties.width, + i*tileProperties.height, + tileProperties.width, + tileProperties.height, + tileProperties.tileset:getDimensions() + ) + end + end + + + for _, properties in pairs(Tiles) do + if properties.animation ~= nil then + properties.tileset = love.graphics.newImage("assets/terrain/"..properties.animation..".png") + properties.imgs = {} + properties.current_image = 1 + properties.current_subimage = 1 + + local tileset = properties.tileset + local width = tileset:getPixelWidth()/tileProperties.width + local height = tileset:getPixelHeight()/tileProperties.height + local image_count = 0 + + for i = 0, height-1 do + for j = 0, width-1 do + local quad = + love.graphics.newQuad( + j*tileProperties.width, + i*tileProperties.height, + tileProperties.width, + tileProperties.height, + tileset:getDimensions() + ) + image_count = image_count + 1 + + table.insert(properties.imgs,quad) + + end + end + properties.image_count = image_count + end + end +end + +function TilesDisplayFront() + for i = 1, #LevelTiles do + for j = 1, #LevelTiles[i] do + if LevelTiles[i][j] ~= 0 then + + local depth = getTileDepth(LevelTiles[i][j]) + DrawTile( + LevelTiles[i][j], + tileProperties.scale * j * tileProperties.width + tileProperties.scale * (levelProperties.offset.x - tileProperties.width) - Camera.pos.x, + tileProperties.scale * i * tileProperties.height + tileProperties.scale * (levelProperties.offset.y - tileProperties.height) - Camera.pos.y, + "foreground" + ) + + end + end + end +end + +function TilesDisplayBack() + for i = 1, #LevelTiles do + for j = 1, #LevelTiles[i] do + if LevelTiles[i][j] ~= 0 then + + local depth = getTileDepth(LevelTiles[i][j]) + DrawTile( + LevelTiles[i][j], + tileProperties.scale * j * tileProperties.width + tileProperties.scale * (levelProperties.offset.x - tileProperties.width) - Camera.pos.x, + tileProperties.scale * i * tileProperties.height + tileProperties.scale * (levelProperties.offset.y - tileProperties.height) - Camera.pos.y, + "background" + ) + + end + end + end +end + + +function getTileType(tile_id) + for _, properties in ipairs(Tiles) do + if properties.id == tile_id then + return properties.type + end + end +end + +function getTileDepth(tile_id) + for _, properties in ipairs(Tiles) do + if properties.id == tile_id then + return properties.depth + end + end +end + +function GridDisplay() + for i = 1, #LevelTiles do + for j = 1, #LevelTiles[i] do + love.graphics.rectangle( + "line", + tileProperties.scale * j * tileProperties.width + tileProperties.scale * (levelProperties.offset.x - tileProperties.width) - Camera.pos.x, + tileProperties.scale * i * tileProperties.height + tileProperties.scale * (levelProperties.offset.y - tileProperties.height) - Camera.pos.y, + tileProperties.scale * tileProperties.width, + tileProperties.scale * tileProperties.height + ) + end + end +end + +function LoadTileObjects() + objects.collisions = {} + objects.platforms = {} + objects.ladders = {} + + for i = 1, #LevelTiles do + for j = 1, #LevelTiles[i] do + if LevelTiles[i][j] ~= 0 then + + local type = getTileType(LevelTiles[i][j]) + + local base_x = tileProperties.scale * j * tileProperties.width + tileProperties.scale * (levelProperties.offset.x - tileProperties.height) + local base_y = tileProperties.scale * i * tileProperties.height + tileProperties.scale * (levelProperties.offset.y - tileProperties.height) + + if type == "whole" then + local col = Collision:new( + base_x, + base_y, + base_x + tileProperties.width * tileProperties.scale, + base_y + tileProperties.height * tileProperties.scale + ) + table.insert(objects.collisions,col) + + elseif type == "half" then + + local col = Collision:new( + base_x, + base_y + tileProperties.height/2 * tileProperties.scale, + base_x + tileProperties.width * tileProperties.scale, + base_y + tileProperties.height * tileProperties.scale + ) + table.insert(objects.collisions,col) + + elseif type == "platform" then + local plat = Collision:new( + base_x, + base_y + tileProperties.scale * 2, + base_x + tileProperties.width * tileProperties.scale, + base_y + tileProperties.height/4 * tileProperties.scale + tileProperties.scale * 2 + ) + table.insert(objects.platforms,plat) + + elseif type == "ramp2_bot_left_whole" then + for k = 1, 8 do + -- do ramp owo + local slope = Collision:new( + base_x, + base_y + k * tileProperties.scale - tileProperties.scale, + base_x + k * 2 * tileProperties.scale, + base_y + k * tileProperties.scale + ) + table.insert(objects.collisions,slope) + + end + -- fill lower half + local col = Collision:new( + base_x, + base_y + tileProperties.height/2 * tileProperties.scale, + base_x + tileProperties.width * tileProperties.scale, + base_y + tileProperties.height * tileProperties.scale + ) + table.insert(objects.collisions,col) + + elseif type == "ramp2_bot_left_half" then + for k = 1, 8 do + -- do ramp owo + local slope = Collision:new( + base_x, + base_y + tileProperties.height/2 * tileProperties.scale + k * tileProperties.scale - tileProperties.scale, + base_x + k * 2 * tileProperties.scale, + base_y + tileProperties.height/2 * tileProperties.scale + k * tileProperties.scale + ) + table.insert(objects.collisions,slope) + + end + + elseif type == "ramp2_top_left_whole" then + for k = 1, 8 do + -- do ramp owo + local slope = Collision:new( + base_x, + base_y + tileProperties.height/2 * tileProperties.scale - tileProperties.scale + k * tileProperties.scale, + base_x + tileProperties.width * tileProperties.scale - (k-1) * 2 * tileProperties.scale, + base_y + tileProperties.height/2 * tileProperties.scale - tileProperties.scale + k * tileProperties.scale + tileProperties.scale + ) + table.insert(objects.collisions,slope) + + end + -- fill higher half + local col = Collision:new( + base_x, + base_y, + base_x + tileProperties.width * tileProperties.scale, + base_y + tileProperties.height/2 * tileProperties.scale + ) + table.insert(objects.collisions,col) + + elseif type == "ramp2_top_left_half" then + for k = 1, 8 do + -- do ramp owo + local slope = Collision:new( + base_x, + base_y - tileProperties.scale + k * tileProperties.scale, + base_x + tileProperties.width * tileProperties.scale - (k-1) * 2 * tileProperties.scale, + base_y - tileProperties.scale + k * tileProperties.scale + tileProperties.scale + ) + table.insert(objects.collisions,slope) + + end + + elseif type == "ramp2_bot_right_whole" then + for k = 1, 8 do + -- do ramp owo + local slope = Collision:new( + base_x + (k-8) * -2 * tileProperties.scale, + base_y - tileProperties.scale + k * tileProperties.scale, + base_x + tileProperties.width * tileProperties.scale, + base_y - tileProperties.scale + k * tileProperties.scale + tileProperties.scale + ) + table.insert(objects.collisions,slope) + + end + -- fill lower half + local col = Collision:new( + base_x, + base_y + tileProperties.height/2 * tileProperties.scale, + base_x + tileProperties.width * tileProperties.scale, + base_y + tileProperties.height * tileProperties.scale + ) + table.insert(objects.collisions,col) + + elseif type == "ramp2_bot_right_half" then + for k = 1, 8 do + -- do ramp owo + local slope = Collision:new( + base_x + (k-8) * -2 * tileProperties.scale, + base_y + tileProperties.height/2 * tileProperties.scale - tileProperties.scale + k * tileProperties.scale, + base_x + tileProperties.width * tileProperties.scale, + base_y + tileProperties.height/2 * tileProperties.scale - tileProperties.scale + k * tileProperties.scale + tileProperties.scale + ) + table.insert(objects.collisions,slope) + + end + + elseif type == "ramp2_top_right_half" then + for k = 1, 8 do + -- do ramp owo + local slope = Collision:new( + base_x + (k-8) * -2 * tileProperties.scale, + base_y + tileProperties.height/2 * tileProperties.scale - k * tileProperties.scale, + base_x + tileProperties.width * tileProperties.scale, + base_y + tileProperties.height/2 * tileProperties.scale - k * tileProperties.scale + tileProperties.scale + ) + table.insert(objects.collisions,slope) + + end + + elseif type == "ramp2_top_right_whole" then + for k = 1, 8 do + -- do ramp owo + local slope = Collision:new( + base_x + (k-8) * -2 * tileProperties.scale, + base_y + tileProperties.height/2 * tileProperties.scale + tileProperties.height/2 * tileProperties.scale - k * tileProperties.scale, + base_x + tileProperties.width * tileProperties.scale, + base_y + tileProperties.height/2 * tileProperties.scale + tileProperties.height/2 * tileProperties.scale - k * tileProperties.scale + tileProperties.scale + ) + table.insert(objects.collisions,slope) + + end + -- fill higher half + local col = Collision:new( + base_x, + base_y, + base_x + tileProperties.width * tileProperties.scale, + base_y + tileProperties.height/2 * tileProperties.scale + ) + table.insert(objects.collisions,col) + + elseif type == "ramp1_bot_left" then + + for k = 1, 16 do + -- do ramp owo + local slope = Collision:new( + base_x, + base_y + k * tileProperties.scale - tileProperties.scale, + base_x + k * tileProperties.scale, + base_y + k * tileProperties.scale + ) + table.insert(objects.collisions,slope) + + end + + elseif type == "ladder_right" then + + local ladder = Collision:new( + base_x + (tileProperties.width-4)* tileProperties.scale, + base_y, + base_x + tileProperties.width * tileProperties.scale, + base_y + tileProperties.height * tileProperties.scale + ) + table.insert(objects.ladders,ladder) + + elseif type == "ladder_platform_right" then + + local ladder = Collision:new( + base_x + (tileProperties.width-4)* tileProperties.scale, + base_y + tileProperties.scale * 2, + base_x + tileProperties.width * tileProperties.scale, + base_y + tileProperties.height * tileProperties.scale + ) + table.insert(objects.ladders,ladder) + + local plat = Collision:new( + base_x, + base_y + tileProperties.scale * 2, + base_x + tileProperties.width * tileProperties.scale, + base_y + tileProperties.height/4 * tileProperties.scale + tileProperties.scale * 2 + ) + table.insert(objects.platforms,plat) + + elseif type == "ladder_left" then + + + local ladder = Collision:new( + base_x, + base_y, + base_x + tileProperties.scale * 4, + base_y + tileProperties.height * tileProperties.scale + ) + table.insert(objects.ladders,ladder) + + elseif type == "ladder_platform_left" then + + + local ladder = Collision:new( + base_x, + base_y + tileProperties.scale * 2, + base_x + tileProperties.scale * 4, + base_y + tileProperties.height * tileProperties.scale + ) + table.insert(objects.ladders,ladder) + + local plat = Collision:new( + base_x, + base_y + tileProperties.scale * 2, + base_x + tileProperties.width * tileProperties.scale, + base_y + tileProperties.height/4 * tileProperties.scale + tileProperties.scale * 2 + ) + table.insert(objects.platforms,plat) + + end + end + end + end +end + +function AnimateTiles() + for _, properties in pairs(Tiles) do + if properties.animation ~= nil then + -- calculate subimage + properties.current_subimage = properties.current_subimage + current_dt + -- cycle image + if properties.current_subimage >= properties.delay then + properties.current_subimage = properties.current_subimage - properties.delay + properties.current_image = properties.current_image + 1 + end + + if properties.current_image > properties.image_count then + properties.current_image = properties.current_image - properties.image_count + end + end + end +end + +function DrawTile(tile_id,x,y,depth) + for _, properties in pairs(Tiles) do + if tile_id == properties.id then + if properties.animation ~= nil then + if properties.imgs[properties.current_image] ~= nil + and properties.depth == depth + then love.graphics.draw( + properties.tileset, + properties.imgs[properties.current_image], + x, + y, + 0, + tileProperties.scale, + tileProperties.scale + ) end + elseif properties.depth == depth then + if properties.force ~= nil then + love.graphics.draw( + tileProperties.tileset, + TileIndex[properties.force], + x, + y, + 0, + tileProperties.scale, + tileProperties.scale + ) + else + love.graphics.draw( + tileProperties.tileset, + TileIndex[properties.id], + x, + y, + 0, + tileProperties.scale, + tileProperties.scale + ) + end + end + + if properties.overlay ~= nil then + if properties.overlay_depth == depth or properties.overlay_depth == nil and properties.depth == depth then + if properties.overlay_animated then + for _, overlay_properties in pairs(Tiles) do + if overlay_properties.id == properties.overlay then + love.graphics.draw( + overlay_properties.tileset, + overlay_properties.imgs[overlay_properties.current_image], + x, + y, + 0, + tileProperties.scale, + tileProperties.scale + ) + end + end + else + love.graphics.draw( + tileProperties.tileset, + TileIndex[properties.overlay], + x, + y, + 0, + tileProperties.scale, + tileProperties.scale + ) + end + end + end + end + end +end diff --git a/data/scripts/math.lua b/data/scripts/math.lua new file mode 100644 index 0000000..5501086 --- /dev/null +++ b/data/scripts/math.lua @@ -0,0 +1,9 @@ +function math.sign(x) + if x<0 then + return -1 + elseif x>0 then + return 1 + else + return 0 + end +end \ No newline at end of file diff --git a/data/scripts/objects.lua b/data/scripts/objects.lua new file mode 100644 index 0000000..b3f7286 --- /dev/null +++ b/data/scripts/objects.lua @@ -0,0 +1,106 @@ +objects = { + entities = {}, + + collisions = {}, + platforms = {}, + ladders = {} +} + + +-- level functions +function objects.DrawCollisions() + for _, col in pairs(objects.collisions) do + col:Draw(1) + end + + for _, plat in pairs(objects.platforms) do + if plat.disable == true then plat:Draw(2) end + if plat.disable == false then plat:Draw(1) end + end + + for _, ladder in pairs(objects.ladders) do + ladder:Draw(2) + end +end + +-- returns true if theres a collision at that point. also marks collisioned tile as collision true +function isThereCollisionAt(x,y) + local result = false + for _, col in pairs(objects.collisions) do + if x >= col.from.x and x <= col.to.x and y >= col.from.y and y <= col.to.y then + result = true + col.collision = true + end + end + return result +end + +function isTherePlatformAt(x,y) + local result = false + for _, col in pairs(objects.platforms) do + if x >= col.from.x and x <= col.to.x and y >= col.from.y and y <= col.to.y and col.disable ~= true then + result = true + col.collision = true + end + end + return result +end + +function isThereLadderAt(x,y) + local result = false + for _, col in pairs(objects.ladders) do + if x >= col.from.x and x <= col.to.x and y >= col.from.y and y <= col.to.y and col.disable ~= true then + result = true + col.collision = true + end + end + return result +end + +function isThereAnyCollisionAt(x,y) + local result = false + if not result then + for _, col in pairs(objects.collisions) do + if x >= col.from.x and x <= col.to.x and y >= col.from.y and y <= col.to.y then + result = true + col.collision = true + end + end + end + if not result then + for _, col in pairs(objects.ladders) do + if x >= col.from.x and x <= col.to.x and y >= col.from.y and y <= col.to.y and col.disable ~= true then + result = true + col.collision = true + end + end + end + if not result then + for _, col in pairs(objects.platforms) do + if x >= col.from.x and x <= col.to.x and y >= col.from.y and y <= col.to.y and col.disable ~= true then + result = true + col.collision = true + end + end + end + return result +end +-- flags +function SetCollisionFlags(player) + for _, col in pairs(objects.collisions) do + col.collision = false + end + + for _, plat in pairs(objects.platforms) do + plat.collision = false + if player.pos.y < plat.from.y then + plat.disable = false + else + plat.disable = true + end + end + + for _, ladder in pairs(objects.ladders) do + ladder.collision = false + end +end diff --git a/data/scripts/pause.lua b/data/scripts/pause.lua new file mode 100644 index 0000000..9d34cd6 --- /dev/null +++ b/data/scripts/pause.lua @@ -0,0 +1,60 @@ +function PauseUI() + --Parameters + local pauseWidth = 640 + local pauseHeight = 480 + local pauseX = (game.width/2)-(pauseWidth/2) + local pauseY = (game.height/2)-(pauseHeight/2) + local mouse_x, mouse_y = love.mouse.getPosition() + + --Base items + love.graphics.setColor(0,0,0,0.3) + love.graphics.rectangle("fill", 0, 0, game.width, game.height) + love.graphics.setColor(1,1,1,1) + love.graphics.rectangle("fill", pauseX, pauseY, pauseWidth, pauseHeight) + --Close buttom + love.graphics.setColor(1,0,0,1) + love.graphics.rectangle("fill", pauseX+pauseWidth-40, pauseY+10, 30, 30) + if love.mouse.isDown(1) then + if mouse_x >= pauseX+pauseWidth-40 + and mouse_y >= pauseY+10 + and mouse_x <= pauseX+pauseWidth-10 + and mouse_y <= pauseY+40 then + do_pause = false + end + end + if pausepage == 1 then + --Game list button + love.graphics.setColor(0.5,0.5,0.5,1) + love.graphics.rectangle("fill", pauseX+(pauseWidth/2)-150, pauseY+100, 300, 40) + love.graphics.setColor(0,0.5,0.5,1) + love.graphics.printf("GAMES", pauseX+(pauseWidth/2), pauseY+100, 150, "left",0,3) + if love.mouse.isDown(1) then + if mouse_x >= pauseX+(pauseWidth/2)-150 + and mouse_y >= pauseY+100 + and mouse_x <= pauseX+(pauseWidth/2)+150 + and mouse_y <= pauseY+140 then + pausepage = 2 + end + end + elseif pausepage == 2 then + --Back button + love.graphics.setColor(0.5,0.5,0.5,1) + love.graphics.rectangle("fill", pauseX+10, pauseY+10, 30, 30) + love.graphics.setColor(0,0,0,1) + love.graphics.printf("<", pauseX+10, pauseY+10, 30, "left", 0, 2) + if love.mouse.isDown(1) then + if mouse_x >= pauseX+10 + and mouse_y >= pauseY+10 + and mouse_x <= pauseX+40 + and mouse_y <= pauseY+40 then + pausepage = 1 + end + end + love.graphics.setColor(1,1,1,1) + for i=1,2 do + for j=1,3 do + love.graphics.draw(image.cartridge.nancy, j*110, i*85, 0, 100/image.cartridge.nancy:getPixelWidth(), 80/image.cartridge.nancy:getPixelHeight()) + end + end + end +end diff --git a/data/tiles.lua b/data/tiles.lua new file mode 100644 index 0000000..add3076 --- /dev/null +++ b/data/tiles.lua @@ -0,0 +1,1180 @@ +return { + { + id = 1, + type = "whole", + depth = "foreground" + }, + { + id = 2, + type = "whole", + depth = "foreground" + }, + { + id = 3, + type = "whole", + depth = "foreground" + }, + { + id = 14, + type = "whole", + depth = "foreground" + }, + { + id = 15, + type = "whole", + depth = "foreground" + }, + { + id = 16, + type = "whole", + depth = "foreground" + }, + { + id = 17, + type = "whole", + depth = "foreground" + }, + { + id = 18, + type = "whole", + depth = "foreground" + }, + { + id = 19, + type = "whole", + depth = "foreground" + }, + { + id = 20, + type = "whole", + depth = "foreground" + }, + { + id = 21, + type = "whole", + depth = "foreground" + }, + { + id = 22, + type = "whole", + depth = "foreground" + }, + { + id = 23, + type = "whole", + depth = "foreground" + }, + { + id = 24, + type = "whole", + depth = "foreground" + }, + { + id = 25, + type = "whole", + depth = "foreground" + }, + { + id = 26, + type = "whole", + depth = "foreground" + }, + { + id = 27, + type = "whole", + depth = "foreground" + }, + { + id = 28, + type = "whole", + depth = "foreground" + }, + { + id = 29, + type = "whole", + depth = "foreground" + }, + { + id = 30, + type = "whole", + depth = "foreground" + }, + { + id = 31, + type = "whole", + depth = "foreground" + }, + { + id = 32, + type = "whole", + depth = "foreground" + }, + { + id = 33, + type = "whole", + depth = "foreground" + }, + { + id = 34, + type = "whole", + depth = "foreground" + }, + { + id = 35, + type = "whole", + depth = "foreground" + }, + { + id = 36, + type = "whole", + depth = "foreground" + }, + { + id = 37, + type = "whole", + depth = "foreground" + }, + { + id = 38, + type = "whole", + depth = "foreground" + }, + { + id = 39, + type = "whole", + depth = "foreground" + }, + { + id = 40, + type = "whole", + depth = "foreground" + }, + { + id = 41, + type = "whole", + depth = "foreground" + }, + { + id = 42, + type = "whole", + depth = "foreground" + }, + { + id = 53, + type = "whole", + depth = "foreground" + }, + { + id = 54, + type = "whole", + depth = "foreground" + }, + { + id = 55, + type = "whole", + depth = "foreground" + }, + { + id = 62, + type = "whole", + depth = "foreground" + }, + { + id = 63, + type = "whole", + depth = "foreground" + }, + { + id = 64, + type = "whole", + depth = "foreground" + }, + { + id = 65, + type = "whole", + depth = "foreground" + }, + { + id = 66, + type = "whole", + depth = "foreground" + }, + { + id = 67, + type = "whole", + depth = "foreground" + }, + { + id = 68, + type = "whole", + depth = "foreground" + }, + { + id = 69, + type = "whole", + depth = "foreground" + }, + { + id = 70, + type = "whole", + depth = "foreground" + }, + { + id = 71, + type = "whole", + depth = "foreground" + }, + { + id = 72, + type = "whole", + depth = "foreground" + }, + { + id = 73, + type = "whole", + depth = "foreground" + }, + { + id = 74, + type = "whole", + depth = "foreground" + }, + { + id = 75, + type = "whole", + depth = "foreground" + }, + { + id = 76, + type = "whole", + depth = "foreground" + }, + { + id = 77, + type = "whole", + depth = "foreground" + }, + { + id = 78, + type = "whole", + depth = "foreground" + }, + { + id = 79, + type = "whole", + depth = "foreground" + }, + { + id = 80, + type = "whole", + depth = "foreground" + }, + { + id = 81, + type = "whole", + depth = "foreground" + }, + { + id = 82, + type = "whole", + depth = "foreground" + }, + { + id = 83, + type = "whole", + depth = "foreground" + }, + { + id = 84, + type = "whole", + depth = "foreground" + }, + { + id = 85, + type = "whole", + depth = "foreground" + }, + { + id = 86, + type = "whole", + depth = "foreground" + }, + { + id = 87, + type = "whole", + depth = "foreground" + }, + { + id = 88, + type = "whole", + depth = "foreground" + }, + { + id = 89, + type = "whole", + depth = "foreground" + }, + { + id = 90, + type = "whole", + depth = "foreground" + }, + { + id = 91, + type = "whole", + depth = "foreground" + }, + { + id = 92, + type = "whole", + depth = "foreground" + }, + { + id = 93, + type = "whole", + depth = "foreground" + }, + { + id = 94, + type = "whole", + depth = "foreground" + }, + { + id = 104, + type = "whole", + depth = "foreground" + }, + { + id = 105, + type = "whole", + depth = "foreground" + }, + { + id = 106, + type = "whole", + depth = "foreground" + }, + { + id = 107, + type = "whole", + depth = "foreground" + }, + { + id = 108, + type = "ramp1_bot_right", + depth = "foreground" + }, + { + id = 109, + type = "ramp1_bot_left", + depth = "foreground" + }, + { + id = 110, + type = "air", + depth = "foreground" + }, + { + id = 111, + type = "air", + depth = "foreground" + }, + { + id = 112, + type = "air", + depth = "foreground" + }, + { + id = 113, + type = "air", + depth = "background" + }, + { + id = 114, + type = "ramp2_bot_right_half", + depth = "foreground" + }, + { + id = 115, + type = "ramp2_bot_right_whole", + depth = "foreground" + }, + { + id = 116, + type = "ramp2_bot_left_whole", + depth = "foreground" + }, + { + id = 117, + type = "ramp2_bot_left_half", + depth = "foreground" + }, + { + id = 118, + type = "whole", + depth = "foreground" + }, + { + id = 119, + type = "whole", + depth = "foreground" + }, + { + id = 120, + type = "whole", + depth = "foreground" + }, + { + id = 121, + type = "whole", + depth = "foreground" + }, + { + id = 122, + type = "whole", + depth = "foreground" + }, + { + id = 123, + type = "air", + depth = "foreground" + }, + { + id = 124, + type = "air", + depth = "foreground" + }, + { + id = 125, + type = "air", + depth = "foreground" + }, + { + id = 126, + type = "air", + depth = "background" + }, + { + id = 127, + type = "whole", + depth = "foreground" + }, + { + id = 128, + type = "whole", + depth = "foreground" + }, + { + id = 129, + type = "whole", + depth = "foreground" + }, + { + id = 130, + type = "whole", + depth = "foreground" + }, + { + id = 131, + type = "whole", + depth = "foreground" + }, + { + id = 132, + type = "whole", + depth = "foreground" + }, + { + id = 133, + type = "whole", + depth = "foreground" + }, + { + id = 134, + type = "whole", + depth = "foreground" + }, + { + id = 135, + type = "whole", + depth = "foreground" + }, + { + id = 138, + type = "air", + depth = "foreground" + }, + { + id = 144, + type = "whole", + depth = "foreground" + }, + { + id = 145, + type = "whole", + depth = "foreground" + }, + { + id = 146, + type = "whole", + depth = "foreground" + }, + { + id = 152, + type = "air", + depth = "background" + }, + { + id = 153, + type = "air", + depth = "background" + }, + { + id = 154, + type = "air", + depth = "background" + }, + { + id = 155, + type = "air", + depth = "background" + }, + { + id = 156, + type = "air", + depth = "background" + }, + { + id = 157, + type = "whole", + depth = "foreground" + }, + { + id = 158, + type = "whole", + depth = "foreground" + }, + { + id = 159, + type = "whole", + depth = "foreground" + }, + { + id = 160, + type = "whole", + depth = "foreground" + }, + { + id = 161, + type = "whole", + depth = "foreground" + }, + { + id = 162, + type = "air", + depth = "background" + }, + { + id = 163, + type = "air", + depth = "background" + }, + { + id = 164, + type = "air", + depth = "background" + }, + { + id = 165, + type = "ladder_right", + depth = "background" + }, + { + id = 166, + type = "whole", + depth = "foreground" + }, + { + id = 167, + type = "whole", + depth = "foreground" + }, + { + id = 168, + type = "ladder_left", + depth = "background" + }, + { + id = 169, + depth = "background", + force = 165, + overlay = 176, + overlay_depth = "foreground", + type = "ladder_platform_right" + }, + { + id = 170, + type = "air", + depth = "foreground" + }, + { + id = 171, + type = "air", + depth = "foreground" + }, + { + id = 172, + type = "air", + depth = "foreground" + }, + { + id = 173, + type = "air", + depth = "foreground" + }, + { + id = 174, + type = "air", + depth = "foreground" + }, + { + id = 175, + type = "platform", + depth = "foreground" + }, + { + id = 176, + type = "platform", + depth = "foreground" + }, + { + id = 177, + type = "platform", + depth = "foreground" + }, + { + id = 178, + type = "ladder_right", + depth = "background" + }, + { + id = 179, + type = "whole", + depth = "foreground" + }, + { + id = 180, + type = "whole", + depth = "foreground" + }, + { + id = 181, + type = "ladder_left", + depth = "background" + }, + { + id = 182, + depth = "background", + force = 168, + overlay = 176, + overlay_depth = "foreground", + type = "ladder_platform_left" + }, + { + id = 183, + type = "whole", + depth = "foreground" + }, + { + id = 184, + type = "whole", + depth = "foreground" + }, + { + id = 185, + type = "whole", + depth = "foreground" + }, + { + id = 186, + type = "whole", + depth = "foreground" + }, + { + id = 187, + type = "whole", + depth = "foreground" + }, + { + id = 188, + type = "air", + depth = "background" + }, + { + id = 189, + type = "air", + depth = "background" + }, + { + id = 190, + type = "air", + depth = "background" + }, + { + id = 191, + type = "air", + depth = "background" + }, + { + id = 192, + type = "air", + depth = "background" + }, + { + id = 193, + type = "air", + depth = "background" + }, + { + id = 194, + type = "air", + depth = "background" + }, + { + id = 195, + type = "air", + depth = "background" + }, + { + id = 196, + type = "air", + depth = "foreground" + }, + { + id = 197, + type = "air", + depth = "foreground" + }, + { + id = 198, + type = "air", + depth = "foreground" + }, + { + id = 199, + type = "air", + depth = "foreground" + }, + { + id = 200, + type = "air", + depth = "foreground" + }, + { + id = 201, + type = "platform", + depth = "foreground" + }, + { + id = 202, + type = "platform", + depth = "foreground" + }, + { + id = 203, + type = "platform", + depth = "foreground" + }, + { + id = 204, + type = "ladder_right", + depth = "background" + }, + { + id = 205, + type = "whole", + depth = "foreground" + }, + { + id = 206, + type = "whole", + depth = "foreground" + }, + { + id = 207, + type = "ladder_left", + depth = "background" + }, + { + id = 208, + depth = "background", + force = 204, + overlay = 202, + overlay_depth = "foreground", + type = "ladder_platform_right" + }, + { + id = 217, + type = "ladder_right", + depth = "background" + }, + { + id = 218, + type = "whole", + depth = "foreground" + }, + { + id = 219, + type = "whole", + depth = "foreground" + }, + { + id = 220, + type = "ladder_left", + depth = "background" + }, + { + id = 221, + depth = "background", + force = 207, + overlay = 202, + overlay_depth = "foreground", + type = "ladder_platform_left" + }, + { + id = 235, + type = "air", + depth = "background" + }, + { + id = 236, + type = "air", + depth = "background" + }, + { + id = 237, + type = "air", + depth = "background" + }, + { + id = 238, + type = "air", + depth = "foreground" + }, + { + id = 239, + type = "air", + depth = "foreground" + }, + { + id = 241, + type = "air", + depth = "background" + }, + { + id = 242, + type = "air", + depth = "background" + }, + { + id = 243, + type = "air", + depth = "background" + }, + { + id = 244, + type = "air", + depth = "foreground" + }, + { + id = 245, + type = "air", + depth = "foreground" + }, + { + id = 248, + type = "air", + depth = "background" + }, + { + id = 249, + type = "air", + depth = "background" + }, + { + id = 250, + type = "air", + depth = "background" + }, + { + id = 251, + type = "air", + depth = "background" + }, + { + id = 252, + type = "half", + depth = "foreground" + }, + { + id = 253, + type = "air", + depth = "foreground" + }, + { + id = 254, + type = "air", + depth = "background" + }, + { + id = 255, + type = "air", + depth = "background" + }, + { + id = 256, + type = "air", + depth = "background" + }, + { + id = 257, + type = "air", + depth = "background" + }, + { + id = 258, + type = "half", + depth = "foreground" + }, + { + id = 259, + type = "air", + depth = "foreground" + }, + { + id = 261, + type = "air", + depth = "background" + }, + { + id = 262, + type = "air", + depth = "background" + }, + { + id = 263, + type = "air", + depth = "background" + }, + { + id = 264, + type = "air", + depth = "background" + }, + { + id = 266, + type = "air", + depth = "foreground" + }, + { + id = 267, + type = "air", + depth = "background" + }, + { + id = 268, + type = "air", + depth = "background" + }, + { + id = 269, + type = "air", + depth = "background" + }, + { + id = 270, + type = "air", + depth = "background" + }, + { + id = 272, + type = "air", + depth = "foreground" + }, + { + id = 274, + type = "air", + depth = "background" + }, + { + id = 275, + type = "air", + depth = "background" + }, + { + id = 276, + type = "air", + depth = "background" + }, + { + id = 277, + type = "air", + depth = "background" + }, + { + id = 279, + type = "air", + depth = "foreground" + }, + { + id = 280, + type = "air", + depth = "background" + }, + { + id = 281, + type = "air", + depth = "background" + }, + { + id = 282, + type = "air", + depth = "background" + }, + { + id = 283, + type = "air", + depth = "background" + }, + { + id = 285, + type = "air", + depth = "foreground" + }, + { + id = 287, + type = "air", + depth = "foreground", + animation = "lava_top", + delay = 0.125 + }, + { + id = 288, + type = "air", + depth = "foreground", + animation = "lava_bottom", + delay = 0.125 + }, + { + id = 289, + type = "air", + depth = "foreground" + }, + { + id = 290, + type = "air", + depth = "background", + animation = "lava_fall", + delay = 0.125 + }, + { + id = 291, + type = "air", + depth = "background", + overlay = 287, + overlay_depth = "foreground", + overlay_animated = true, + animation = "lava_fall", + delay = 0.125 + }, + { + id = 300, + type = "air", + depth = "background", + overlay = 163, + animation = "lava_fall", + delay = 0.125 + }, + { + id = 301, + type = "platform", + depth = "background", + overlay = 176, + animation = "lava_fall", + delay = 0.125 + }, + { + id = 302, + type = "air", + depth = "background", + overlay = 189, + animation = "lava_fall", + delay = 0.125 + }, + { + id = 303, + type = "platform", + depth = "background", + overlay = 202, + animation = "lava_fall", + delay = 0.125 + }, + { + id = 304, + type = "ramp2_bot_left_whole", + depth = "foreground", + overlay = 116, + overlay_depth = "foreground", + animation = "lava_top", + delay = 0.125 + }, + { + id = 305, + type = "ramp2_bot_left_half", + depth = "foreground", + overlay = 117, + animation = "lava_top", + delay = 0.125 + }, + { + id = 306, + type = "ramp2_bot_right_half", + depth = "foreground", + overlay = 114, + overlay_depth = "foreground", + animation = "lava_top", + delay = 0.125 + }, + { + id = 307, + type = "ramp2_bot_right_whole", + depth = "foreground", + overlay = 115, + animation = "lava_top", + delay = 0.125 + }, + { + id = 308, + type = "air", + depth = "foreground", + animation = "myrheon_flag_1", + delay = 0.0625 + }, + { + id = 309, + type = "air", + depth = "foreground", + animation = "myrheon_flag_2", + delay = 0.0625 + }, + { + id = 310, + type = "air", + depth = "foreground" + }, + { + id = 311, + type = "air", + depth = "foreground" + } +} diff --git a/main.lua b/main.lua new file mode 100644 index 0000000..cb5dfa9 --- /dev/null +++ b/main.lua @@ -0,0 +1,125 @@ +function love.load() + do_pause = false + debug = false + debug_collision = false + textScale = 1 + fps_count = 0 + fps_second = 0 + fps_draw = 0 + fps_total = 0 + love.graphics.setColor(1,1,1) + love.keyboard.setKeyRepeat(true) + love.graphics.setDefaultFilter("nearest") -- good pixel + game = { + scale = 2.5, + width = love.graphics.getWidth(), + height = love.graphics.getHeight(), + paused = false + } + require "data/scripts" + Camera.width = game.width + Camera.height = game.height + levelList = {"level1","level2","level3","tileset"} + levelNum = 1 + currLevel = levelList[levelNum] + LoadTiles() + InitPlayer() + main_player = player:newPlayer(0,0) + main_player.sprite = love.graphics.newImage("assets/characters/nancy/idle1.png") + main_player:LoadAnimation(animation.nancy.idle) +end + +function love.update(dt) + -- fps counter + if fps_second >= 1 then + fps_second = fps_second - 1 + fps_draw = fps_count + fps_count = 0 + fps_total = fps_total + 1 + end + fps_second = fps_second + dt + fps_count = fps_count + 1 + current_dt = dt + + -- saveproof to game resize + game.width = love.graphics.getWidth() + game.height = love.graphics.getHeight() + + -- GAME STEP + if not do_pause then + SetCollisionFlags(main_player) + main_player:DoInput() + main_player:DoPhysics() + main_player:HandleAnimation() + main_player:Animate() + AnimateTiles() + Camera:CenterAt(main_player.pos.x, main_player.pos.y,LevelInfo.Width,LevelInfo.Height) + --camera:ScreenAt(main_player.pos.x, main_player.pos.y,game.width,game.height) + end +end + +function love.keypressed(key) + + if key == "escape" then + if do_pause then + do_pause = false + else + pausepage = 1 + do_pause = true + end + end + + if key == "f1" then + if debug then + debug = false + debug_collision = true + elseif debug_collision then + debug_collision = false + else + debug = true + end + end + + if key == "f2" then + main_player.pos.x, main_player.pos.y = 0,-0.1 + end + + if key == "f3" then + LoadLevel() + end + + if key == "f5" then + levelNum = levelNum + 1 + if levelNum > #levelList then levelNum = levelNum - #levelList end + currLevel = levelList[levelNum] + LoadTiles() + main_player.pos.x, main_player.pos.y = 0,-0.1 + end +end + +function love.draw() + TilesDisplayBack() + main_player:Draw() + TilesDisplayFront() + + -- Save color + local pcr, pcg, pcb, pca = love.graphics.getColor() + -- Scale control + if game.height > game.width then + textScale = game.height/480 + else + textScale = game.width/640 + end + + --debug + if debug then DebugUI() end + if debug_collision then DebugColisions() end + + -- reset color + love.graphics.setColor(pcr,pcg,pcb,pca) + + + local pcr, pcg, pcb, pca = love.graphics.getColor() + if do_pause then PauseUI() end + love.graphics.setColor(pcr,pcg,pcb,pca) +end