Grog-Knight

some game in C++
Log | Files | Refs | Submodules | README | LICENSE | git clone https://git.ne02ptzero.me/git/Grog-Knight

commit d7fcd5169344301e9817e003b0c6a1d227535fe2
parent 2d2c5fa673a9216ae9682673384f2dba830b3cac
Author: Ne02ptzero <louis@ne02ptzero.me>
Date:   Sat, 17 Oct 2015 19:08:15 +0200

Merge

Diffstat:
MAngel/Actors/Actor.cpp | 1-
MAngel/Actors/Actor.h | 2+-
MAngel/Input/InputKeys.h | 20++++++++++----------
MAngel/Makefile | 2+-
MConfig/Bindings.json | 62+++++++++++++++++++++++++++++++++++++++++++++++---------------
MConfig/input_bindings.ini | 29++++++++++++++++++++++++-----
MMACOSX/Makefile | 21++++++++++++++++++---
MMakefile | 7++++++-
MMaps/MapCastle_1.json | 22+++++++++++++++++++++-
MMaps/MapCastle_2.json | 22+++++++++++++++++++++-
MMaps/MapCastle_3.json | 99++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
MMaps/MapCastle_4.json | 22+++++++++++++++++++++-
MMaps/MapCastle_5.json | 23++++++++++++++++++++++-
MMaps/Menu/kitchen.json | 19+++++++++++++++++--
MMaps/background/backgroundMenu.json | 3+--
AMaps/bossMap.json | 640+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MMaps/castle_final.tsx | 9+++++++++
MMaps/mapCastle_small10.json | 22+++++++++++++++++++++-
MMaps/mapCastle_small11.json | 22+++++++++++++++++++++-
MMaps/mapCastle_small12.json | 22+++++++++++++++++++++-
MMaps/mapCastle_small13.json | 22+++++++++++++++++++++-
MMaps/mapCastle_small14.json | 22+++++++++++++++++++++-
MMaps/mapCastle_small15.json | 23++++++++++++++++++++++-
MMaps/mapCastle_small16.json | 22+++++++++++++++++++++-
MMaps/mapCastle_small17.json | 23++++++++++++++++++++++-
MMaps/mapCastle_small18.json | 23++++++++++++++++++++++-
MMaps/mapCastle_small5.json | 23++++++++++++++++++++++-
MMaps/mapCastle_small6.json | 22+++++++++++++++++++++-
DMaps/mapCastle_small7.json | 192-------------------------------------------------------------------------------
MMaps/mapCastle_small8.json | 22+++++++++++++++++++++-
MMaps/mapCastle_small9.json | 22+++++++++++++++++++++-
AMaps/secretMap.json | 557+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MREADME.md | 10+++-------
MResources/Elements/Archer.json | 204++++++++++++++++++++++++++++++++++++++++++++++---------------------------------
AResources/Elements/Armors/Armor_000.json | 17+++++++++++++++++
AResources/Elements/Armors/Armor_001.json | 17+++++++++++++++++
AResources/Elements/Armors/Armor_002.json | 17+++++++++++++++++
AResources/Elements/Armors/Armor_003.json | 16++++++++++++++++
AResources/Elements/Armors/Armor_004.json | 16++++++++++++++++
AResources/Elements/Armors/Armor_005.json | 16++++++++++++++++
AResources/Elements/Armors/Armor_006.json | 17+++++++++++++++++
AResources/Elements/Armors/Armor_007.json | 17+++++++++++++++++
DResources/Elements/Armors/ChestArmor.json | 13-------------
DResources/Elements/Armors/Robes.json | 13-------------
DResources/Elements/Armors/SomeArmor.json | 13-------------
AResources/Elements/Bosses/Boss0.json | 43+++++++++++++++++++++++++++++++++++++++++++
MResources/Elements/Dealer.json | 6+++++-
MResources/Elements/Drugs/Cocaine.json | 9+++------
AResources/Elements/Drugs/Mdma.json | 9+++++++++
AResources/Elements/Drugs/Morphine.json | 9+++++++++
AResources/Elements/Drugs/Mushroom.json | 9+++++++++
MResources/Elements/Drugs/Pot.json | 11++++-------
DResources/Elements/Enemies/Enemy.json | 43-------------------------------------------
DResources/Elements/Enemies/Enemy2.json | 55-------------------------------------------------------
AResources/Elements/Enemies/EnemyFly_000.json | 67+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AResources/Elements/Enemies/EnemyFly_001.json | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AResources/Elements/Enemies/EnemyFly_002.json | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AResources/Elements/Enemies/EnemyGround_000.json | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AResources/Elements/Enemies/EnemyGround_001.json | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AResources/Elements/Enemies/EnemyGround_002.json | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MResources/Elements/MenuCharacter.json | 7+++++--
DResources/Elements/Rings/NiceRing.json | 10----------
AResources/Elements/Rings/Ring_000.json | 17+++++++++++++++++
AResources/Elements/Rings/Ring_001.json | 17+++++++++++++++++
AResources/Elements/Rings/Ring_002.json | 17+++++++++++++++++
AResources/Elements/Rings/Ring_003.json | 16++++++++++++++++
AResources/Elements/Rings/Ring_004.json | 16++++++++++++++++
AResources/Elements/Rings/Ring_005.json | 16++++++++++++++++
AResources/Elements/Rings/Ring_006.json | 17+++++++++++++++++
AResources/Elements/Rings/Ring_007.json | 17+++++++++++++++++
DResources/Elements/Rings/SmallRing.json | 10----------
DResources/Elements/Rings/SomeRing.json | 10----------
AResources/Elements/Skills.json | 65+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AResources/Elements/SpecialAttack.json | 47+++++++++++++++++++++++++++++++++++++++++++++++
AResources/Elements/SpecialMoves.json | 99+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MResources/Elements/Warrior.json | 211+++++++++++++++++++++++++++++++++++++++++++++++++------------------------------
AResources/Elements/Weapons/Axe_000.json | 21+++++++++++++++++++++
AResources/Elements/Weapons/Axe_001.json | 21+++++++++++++++++++++
AResources/Elements/Weapons/Axe_002.json | 21+++++++++++++++++++++
AResources/Elements/Weapons/Axe_003.json | 20++++++++++++++++++++
AResources/Elements/Weapons/Axe_004.json | 21+++++++++++++++++++++
AResources/Elements/Weapons/Axe_005.json | 20++++++++++++++++++++
DResources/Elements/Weapons/Bow.json | 19-------------------
AResources/Elements/Weapons/Bow_000.json | 21+++++++++++++++++++++
AResources/Elements/Weapons/Bow_001.json | 21+++++++++++++++++++++
AResources/Elements/Weapons/Bow_002.json | 21+++++++++++++++++++++
AResources/Elements/Weapons/Bow_003.json | 20++++++++++++++++++++
AResources/Elements/Weapons/Bow_004.json | 20++++++++++++++++++++
AResources/Elements/Weapons/Bow_005.json | 20++++++++++++++++++++
AResources/Elements/Weapons/Dagger_000.json | 21+++++++++++++++++++++
AResources/Elements/Weapons/Dagger_001.json | 21+++++++++++++++++++++
AResources/Elements/Weapons/Dagger_002.json | 21+++++++++++++++++++++
AResources/Elements/Weapons/Dagger_003.json | 20++++++++++++++++++++
AResources/Elements/Weapons/Dagger_004.json | 21+++++++++++++++++++++
AResources/Elements/Weapons/Dagger_005.json | 20++++++++++++++++++++
AResources/Elements/Weapons/Spear_000.json | 21+++++++++++++++++++++
AResources/Elements/Weapons/Spear_001.json | 21+++++++++++++++++++++
AResources/Elements/Weapons/Spear_002.json | 21+++++++++++++++++++++
AResources/Elements/Weapons/Spear_003.json | 20++++++++++++++++++++
AResources/Elements/Weapons/Spear_004.json | 20++++++++++++++++++++
AResources/Elements/Weapons/Spear_005.json | 20++++++++++++++++++++
DResources/Elements/Weapons/Sword.json | 38--------------------------------------
DResources/Elements/Weapons/Sword2.json | 38--------------------------------------
AResources/Elements/Weapons/Sword_000.json | 21+++++++++++++++++++++
AResources/Elements/Weapons/Sword_001.json | 21+++++++++++++++++++++
AResources/Elements/Weapons/Sword_002.json | 21+++++++++++++++++++++
AResources/Elements/Weapons/Sword_003.json | 20++++++++++++++++++++
AResources/Elements/Weapons/Sword_004.json | 20++++++++++++++++++++
AResources/Elements/Weapons/Sword_005.json | 20++++++++++++++++++++
AResources/HUD/spell.png | 0
MResources/Images/Archer/archer_000.png | 0
MResources/Images/Archer/archer_001.png | 0
MResources/Images/Archer/archer_002.png | 0
MResources/Images/Archer/archer_003.png | 0
MResources/Images/Archer/archer_004.png | 0
MResources/Images/Archer/archer_005.png | 0
MResources/Images/Archer/archer_006.png | 0
MResources/Images/Archer/archer_007.png | 0
MResources/Images/Archer/archer_008.png | 0
MResources/Images/Archer/archer_009.png | 0
MResources/Images/Archer/archer_010.png | 0
MResources/Images/Archer/archer_011.png | 0
MResources/Images/Archer/archer_012.png | 0
MResources/Images/Archer/archer_013.png | 0
MResources/Images/Archer/archer_014.png | 0
MResources/Images/Archer/archer_015.png | 0
MResources/Images/Archer/archer_016.png | 0
MResources/Images/Archer/archer_017.png | 0
MResources/Images/Archer/archer_018.png | 0
MResources/Images/Archer/archer_019.png | 0
MResources/Images/Archer/archer_020.png | 0
MResources/Images/Archer/archer_021.png | 0
MResources/Images/Archer/archer_022.png | 0
MResources/Images/Archer/archer_023.png | 0
MResources/Images/Archer/archer_024.png | 0
MResources/Images/Archer/archer_025.png | 0
MResources/Images/Archer/archer_026.png | 0
MResources/Images/Archer/archer_027.png | 0
MResources/Images/Archer/archer_028.png | 0
MResources/Images/Archer/archer_029.png | 0
MResources/Images/Archer/archer_030.png | 0
MResources/Images/Archer/archer_031.png | 0
MResources/Images/Archer/archer_032.png | 0
MResources/Images/Archer/archer_033.png | 0
MResources/Images/Archer/archer_034.png | 0
MResources/Images/Archer/archer_035.png | 0
MResources/Images/Archer/archer_036.png | 0
MResources/Images/Archer/archer_037.png | 0
MResources/Images/Archer/archer_038.png | 0
MResources/Images/Archer/archer_039.png | 0
CResources/Images/Archer/archer_037.png -> Resources/Images/Archer/archer_040.png | 0
CResources/Images/Archer/archer_038.png -> Resources/Images/Archer/archer_041.png | 0
CResources/Images/Archer/archer_039.png -> Resources/Images/Archer/archer_042.png | 0
AResources/Images/Archer/archer_043.png | 0
AResources/Images/Archer/archer_044.png | 0
AResources/Images/Archer/archer_045.png | 0
AResources/Images/Archer/archer_046.png | 0
AResources/Images/Archer/archer_047.png | 0
AResources/Images/Archer/archer_048.png | 0
AResources/Images/Archer/archer_049.png | 0
AResources/Images/Archer/archer_050.png | 0
AResources/Images/Archer/archer_051.png | 0
AResources/Images/Archer/archer_052.png | 0
AResources/Images/Archer/archer_053.png | 0
AResources/Images/Archer/archer_054.png | 0
AResources/Images/Archer/archer_055.png | 0
AResources/Images/Archer/archer_056.png | 0
AResources/Images/Archer/archer_057.png | 0
AResources/Images/Archer/archer_058.png | 0
AResources/Images/Archer/archer_059.png | 0
AResources/Images/Archer/archer_060.png | 0
AResources/Images/Archer/archer_061.png | 0
AResources/Images/Archer/archer_062.png | 0
AResources/Images/Archer/archer_063.png | 0
AResources/Images/Archer/archer_064.png | 0
AResources/Images/Archer/archer_065.png | 0
AResources/Images/Archer/archer_066.png | 0
AResources/Images/Archer/archer_067.png | 0
AResources/Images/Archer/archer_068.png | 0
AResources/Images/Archer/archer_069.png | 0
RResources/Images/Armors/Robes.png -> Resources/Images/Armors/Armor_000.png | 0
RResources/Images/Armors/SomeArmor.png -> Resources/Images/Armors/Armor_001.png | 0
RResources/Images/Armors/ChestArmor.png -> Resources/Images/Armors/Armor_002.png | 0
AResources/Images/Armors/Armor_003.png | 0
AResources/Images/Armors/Armor_004.png | 0
AResources/Images/Armors/Armor_005.png | 0
AResources/Images/Boss/Boss1/boss_000.png | 0
AResources/Images/Boss/Boss1/boss_001.png | 0
AResources/Images/Boss/Boss1/boss_002.png | 0
AResources/Images/Boss/Boss1/boss_003.png | 0
AResources/Images/Boss/Boss1/boss_004.png | 0
AResources/Images/Boss/Boss1/boss_005.png | 0
AResources/Images/Boss/Boss1/boss_006.png | 0
AResources/Images/Boss/Boss1/boss_007.png | 0
AResources/Images/Boss/Boss1/boss_008.png | 0
AResources/Images/Boss/Boss1/boss_009.png | 0
AResources/Images/Boss/Boss1/boss_010.png | 0
AResources/Images/Boss/Boss1/boss_011.png | 0
AResources/Images/Boss/Boss1/boss_012.png | 0
AResources/Images/Boss/Boss1/boss_013.png | 0
AResources/Images/Boss/Boss1/boss_014.png | 0
AResources/Images/Boss/Boss1/boss_015.png | 0
AResources/Images/Boss/Boss1/boss_016.png | 0
AResources/Images/Boss/Boss1/boss_017.png | 0
AResources/Images/Boss/Boss1/boss_018.png | 0
AResources/Images/Boss/Boss1/boss_019.png | 0
AResources/Images/Boss/Boss1/boss_020.png | 0
AResources/Images/Boss/Boss1/boss_021.png | 0
AResources/Images/Boss/Boss1/boss_022.png | 0
AResources/Images/Boss/Boss1/boss_023.png | 0
AResources/Images/Boss/Boss1/boss_024.png | 0
AResources/Images/Boss/Boss1/boss_025.png | 0
AResources/Images/Boss/Boss1/boss_026.png | 0
AResources/Images/Chest/chest_000.png | 0
AResources/Images/Chest/chest_001.png | 0
AResources/Images/Chest/chest_002.png | 0
AResources/Images/Chest/chest_003.png | 0
AResources/Images/Chest/chest_004.png | 0
AResources/Images/Door/BossDoor.png | 0
AResources/Images/Door/SecretDoor.png | 0
RResources/Images/Enemy2/enemy2_000.png -> Resources/Images/Enemy/EnemyFly_000/enemy_000.png | 0
RResources/Images/Enemy2/enemy2_001.png -> Resources/Images/Enemy/EnemyFly_000/enemy_001.png | 0
RResources/Images/Enemy2/enemy2_002.png -> Resources/Images/Enemy/EnemyFly_000/enemy_002.png | 0
RResources/Images/Enemy2/enemy2_003.png -> Resources/Images/Enemy/EnemyFly_000/enemy_003.png | 0
RResources/Images/Enemy2/enemy2_004.png -> Resources/Images/Enemy/EnemyFly_000/enemy_004.png | 0
RResources/Images/Enemy2/enemy2_005.png -> Resources/Images/Enemy/EnemyFly_000/enemy_005.png | 0
RResources/Images/Enemy2/enemy2_006.png -> Resources/Images/Enemy/EnemyFly_000/enemy_006.png | 0
AResources/Images/Enemy/EnemyFly_001/enemy_000.png | 0
AResources/Images/Enemy/EnemyFly_001/enemy_001.png | 0
AResources/Images/Enemy/EnemyFly_001/enemy_002.png | 0
AResources/Images/Enemy/EnemyFly_001/enemy_003.png | 0
AResources/Images/Enemy/EnemyFly_001/enemy_004.png | 0
AResources/Images/Enemy/EnemyFly_001/enemy_005.png | 0
AResources/Images/Enemy/EnemyFly_001/enemy_006.png | 0
AResources/Images/Enemy/EnemyFly_002/enemy_000.png | 0
AResources/Images/Enemy/EnemyFly_002/enemy_001.png | 0
AResources/Images/Enemy/EnemyFly_002/enemy_002.png | 0
AResources/Images/Enemy/EnemyFly_002/enemy_003.png | 0
AResources/Images/Enemy/EnemyFly_002/enemy_004.png | 0
AResources/Images/Enemy/EnemyFly_002/enemy_005.png | 0
AResources/Images/Enemy/EnemyFly_002/enemy_006.png | 0
RResources/Images/Enemy/enemy_000.png -> Resources/Images/Enemy/EnemyGround_000/enemy_000.png | 0
RResources/Images/Enemy/enemy_001.png -> Resources/Images/Enemy/EnemyGround_000/enemy_001.png | 0
RResources/Images/Enemy/enemy_002.png -> Resources/Images/Enemy/EnemyGround_000/enemy_002.png | 0
RResources/Images/Enemy/enemy_003.png -> Resources/Images/Enemy/EnemyGround_000/enemy_003.png | 0
RResources/Images/Enemy/enemy_004.png -> Resources/Images/Enemy/EnemyGround_000/enemy_004.png | 0
AResources/Images/Enemy/EnemyGround_001/enemy_000.png | 0
AResources/Images/Enemy/EnemyGround_001/enemy_001.png | 0
AResources/Images/Enemy/EnemyGround_001/enemy_002.png | 0
AResources/Images/Enemy/EnemyGround_001/enemy_003.png | 0
AResources/Images/Enemy/EnemyGround_001/enemy_004.png | 0
AResources/Images/Enemy/EnemyGround_002/enemy_000.png | 0
AResources/Images/Enemy/EnemyGround_002/enemy_001.png | 0
AResources/Images/Enemy/EnemyGround_002/enemy_002.png | 0
AResources/Images/Enemy/EnemyGround_002/enemy_003.png | 0
AResources/Images/Enemy/EnemyGround_002/enemy_004.png | 0
DResources/Images/Enemy/enemy_005.png | 0
DResources/Images/Enemy2/._enemy2_000.png | 0
DResources/Images/Enemy2/._enemy2_001.png | 0
DResources/Images/Enemy2/._enemy2_002.png | 0
DResources/Images/Enemy2/._enemy2_003.png | 0
DResources/Images/Enemy2/._enemy2_004.png | 0
DResources/Images/Enemy2/._enemy2_005.png | 0
DResources/Images/Enemy2/._enemy2_006.png | 0
AResources/Images/HUD/hp_begin.png | 0
AResources/Images/HUD/hp_empty_end.png | 0
AResources/Images/HUD/hp_empty_middle.png | 0
AResources/Images/HUD/hp_end.png | 0
AResources/Images/HUD/hp_middle.png | 0
DResources/Images/Hero/big_hit/Sword_bighit-2015-05-21.zip | 0
AResources/Images/Hero/hero_088.png | 0
AResources/Images/Hero/hero_089.png | 0
AResources/Images/Hero/hero_090.png | 0
AResources/Images/Hero/hero_091.png | 0
AResources/Images/Hero/hero_092.png | 0
AResources/Images/Hero/hero_093.png | 0
AResources/Images/Hero/hero_094.png | 0
AResources/Images/Hero/hero_095.png | 0
AResources/Images/Hero/hero_096.png | 0
AResources/Images/Hero/hero_097.png | 0
AResources/Images/Hero/hero_098.png | 0
AResources/Images/Hero/hero_099.png | 0
AResources/Images/Hero/hero_100.png | 0
AResources/Images/Hero/hero_101.png | 0
AResources/Images/Hero/hero_102.png | 0
AResources/Images/Hero/hero_103.png | 0
AResources/Images/Hero/hero_104.png | 0
AResources/Images/Hero/hero_105.png | 0
AResources/Images/Hero/hero_106.png | 0
AResources/Images/Hero/hero_107.png | 0
AResources/Images/Hero/hero_108.png | 0
AResources/Images/Hero/hero_109.png | 0
AResources/Images/Hero/hero_110.png | 0
AResources/Images/Hero/hero_111.png | 0
AResources/Images/Hero/hero_112.png | 0
AResources/Images/Hero/hero_113.png | 0
AResources/Images/Hero/hero_114.png | 0
AResources/Images/Hero/hero_115.png | 0
AResources/Images/Hero/hero_116.png | 0
AResources/Images/Hero/hero_117.png | 0
AResources/Images/Hero/hero_118.png | 0
AResources/Images/Hero/hero_119.png | 0
AResources/Images/Hero/hero_120.png | 0
AResources/Images/Hero/hero_121.png | 0
AResources/Images/Hero/hero_122.png | 0
AResources/Images/Hero/hero_123.png | 0
AResources/Images/Hero/hero_124.png | 0
AResources/Images/Hero/hero_125.png | 0
AResources/Images/Hero/hero_126.png | 0
AResources/Images/Hero/hero_127.png | 0
AResources/Images/Hero/hero_128.png | 0
AResources/Images/Hero/hero_129.png | 0
AResources/Images/Hero/hero_130.png | 0
AResources/Images/Hero/hero_131.png | 0
AResources/Images/Hero/hero_132.png | 0
AResources/Images/Hero/hero_133.png | 0
AResources/Images/Hero/hero_134.png | 0
AResources/Images/Hero/hero_135.png | 0
AResources/Images/Hero/hero_136.png | 0
AResources/Images/Hero/hero_137.png | 0
AResources/Images/Hero/hero_138.png | 0
AResources/Images/Hero/hero_139.png | 0
AResources/Images/Hero/hero_140.png | 0
AResources/Images/Hero/hero_141.png | 0
AResources/Images/Hero/hero_142.png | 0
AResources/Images/Hero/hero_143.png | 0
AResources/Images/Hero/hero_144.png | 0
AResources/Images/Hero/hero_145.png | 0
AResources/Images/Hero/hero_146.png | 0
AResources/Images/Hero/hero_147.png | 0
AResources/Images/Hero/hero_148.png | 0
AResources/Images/Hero/hero_149.png | 0
AResources/Images/Hero/hero_150.png | 0
AResources/Images/Hero/hero_151.png | 0
AResources/Images/Hero/hero_152.png | 0
AResources/Images/Hero/hero_153.png | 0
AResources/Images/Hero/hero_154.png | 0
AResources/Images/Hero/hero_155.png | 0
AResources/Images/Hero/hero_156.png | 0
AResources/Images/Hero/hero_157.png | 0
AResources/Images/Hero/hero_158.png | 0
AResources/Images/Hero/hero_159.png | 0
AResources/Images/Hero/hero_160.png | 0
AResources/Images/Hero/hero_161.png | 0
AResources/Images/Hero/hero_162.png | 0
AResources/Images/Hero/hero_163.png | 0
AResources/Images/Hero/hero_164.png | 0
AResources/Images/Hero/hero_165.png | 0
AResources/Images/Hero/hero_166.png | 0
AResources/Images/Hero/hero_167.png | 0
MResources/Images/Menu/Archer/perso_016.png | 0
MResources/Images/Menu/Archer/perso_017.png | 0
MResources/Images/Menu/Archer/perso_018.png | 0
MResources/Images/Menu/Archer/perso_019.png | 0
MResources/Images/Menu/menu.png | 0
DResources/Images/Perso1/psd/sonné.psd | 0
AResources/Images/Rings/Ring_000.png | 0
AResources/Images/Rings/Ring_001.png | 0
RResources/Images/Rings/NiceRing.png -> Resources/Images/Rings/Ring_002.png | 0
RResources/Images/Rings/NiceRing.png -> Resources/Images/Rings/Ring_003.png | 0
RResources/Images/Rings/SomeRing.png -> Resources/Images/Rings/Ring_004.png | 0
AResources/Images/Rings/Ring_005.png | 0
AResources/Images/Rings/Ring_006.png | 0
AResources/Images/Rings/Ring_007.png | 0
AResources/Images/Rings/Ring_008.png | 0
DResources/Images/Rings/SmallRing.png | 0
AResources/Images/Shockwave.png | 0
AResources/Images/Skills/berserk.png | 0
AResources/Images/Skills/blink.png | 0
AResources/Images/Skills/charge.png | 0
AResources/Images/Skills/dash.png | 0
AResources/Images/Skills/disengage.png | 0
AResources/Images/Skills/fly.png | 0
AResources/Images/Skills/passive_both.png | 0
AResources/Images/Skills/passive_bow.png | 0
AResources/Images/Skills/passive_dague.png | 0
AResources/Images/Skills/passive_hammer.png | 0
AResources/Images/Skills/passive_spear.png | 0
AResources/Images/Skills/passive_sword.png | 0
AResources/Images/Skills/rapidFire.png | 0
AResources/Images/Skills/rapid_fire.png | 0
AResources/Images/Skills/shockwave.png | 0
AResources/Images/Skills/shunpo.png | 0
AResources/Images/Skills/stomp.png | 0
AResources/Images/Skills/throw_weapon.png | 0
AResources/Images/Skills/wallJump.png | 0
AResources/Images/Skills/whirlwind.png | 0
AResources/Images/Weapons/Axe_000.png | 0
AResources/Images/Weapons/Axe_001.png | 0
AResources/Images/Weapons/Axe_002.png | 0
AResources/Images/Weapons/Axe_003.png | 0
AResources/Images/Weapons/Axe_004.png | 0
AResources/Images/Weapons/Axe_005.png | 0
RResources/Images/bow.png -> Resources/Images/Weapons/Bow_000.png | 0
AResources/Images/Weapons/Bow_001.png | 0
AResources/Images/Weapons/Bow_002.png | 0
AResources/Images/Weapons/Bow_003.png | 0
AResources/Images/Weapons/Bow_004.png | 0
AResources/Images/Weapons/Bow_005.png | 0
AResources/Images/Weapons/Dagger_000.png | 0
AResources/Images/Weapons/Dagger_001.png | 0
AResources/Images/Weapons/Dagger_002.png | 0
AResources/Images/Weapons/Dagger_003.png | 0
AResources/Images/Weapons/Dagger_004.png | 0
AResources/Images/Weapons/Dagger_005.png | 0
AResources/Images/Weapons/Spear_000.png | 0
AResources/Images/Weapons/Spear_001.png | 0
AResources/Images/Weapons/Spear_002.png | 0
AResources/Images/Weapons/Spear_003.png | 0
AResources/Images/Weapons/Spear_004.png | 0
AResources/Images/Weapons/Spear_005.png | 0
RResources/Images/Sword.png -> Resources/Images/Weapons/Sword_000.png | 0
RResources/Images/Sword2.png -> Resources/Images/Weapons/Sword_001.png | 0
AResources/Images/Weapons/Sword_002.png | 0
AResources/Images/Weapons/Sword_003.png | 0
AResources/Images/Weapons/Sword_004.png | 0
AResources/Images/Weapons/Sword_005.png | 0
AResources/Images/boss_projectile.png | 0
AResources/Images/bubulle/Portes/PBoss.png | 0
AResources/Images/bubulle/Portes/PSec.png | 0
AResources/Images/bubulle/Portes/light-portes.png | 0
AResources/Images/bubulle/Portes/portes-Boss.png | 0
AResources/Images/bubulle/Portes/portes-Sec.png | 0
AResources/Images/bubulle/Portes/portes.png | 0
AResources/Images/bubulle/chest/Chest-00.png | 0
AResources/Images/bubulle/chest/Chest-01.png | 0
AResources/Images/bubulle/chest/Chest-02.png | 0
AResources/Images/bubulle/chest/Chest-03.png | 0
AResources/Images/bubulle/chest/Chest-04.png | 0
AResources/Images/bubulle/chest/Chest-C.png | 0
AResources/Images/bubulle/chest/Chest.png | 0
AResources/Images/bubulle/chest/Chest_flash_lumineux.png | 0
DResources/Images/bubulle/spawn_Dealer.png | 0
DResources/Images/bubulle/spawn_Marchant.png | 0
MResources/Images/castle.png | 0
AResources/Images/kitchen_gray.png | 0
AResources/Images/kitchen_levels_background.png | 0
AResources/Images/kitchen_skills_background.png | 0
AResources/Images/kitchen_target.png | 0
AResources/Images/level_up.png | 0
MSources/inc/Armor.hpp | 6++++++
MSources/inc/ArmorList.hpp | 2+-
ASources/inc/Boss.hpp | 58++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MSources/inc/Characters.hpp | 48+++++++++++++++++++++++++++++++++++++++---------
ASources/inc/Chest.hpp | 65+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ASources/inc/ControllerInputManager.hpp | 58++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ASources/inc/Door.hpp | 39+++++++++++++++++++++++++++++++++++++++
MSources/inc/Drug.hpp | 8+++++++-
MSources/inc/Enemy.hpp | 2+-
MSources/inc/EnemyList.hpp | 8++++----
MSources/inc/Equipment.hpp | 4++++
MSources/inc/Game.hpp | 30+++++++++++++++++++++++++++++-
MSources/inc/HUDWindow.hpp | 18+++++++++++++-----
MSources/inc/Hero.hpp | 8+++++++-
MSources/inc/InGameMenu.hpp | 2+-
MSources/inc/Inventory.hpp | 1+
MSources/inc/LevelGenerator.hpp | 2++
MSources/inc/Map.hpp | 11++++++++++-
MSources/inc/Maps.hpp | 5++++-
MSources/inc/Menu.hpp | 1+
MSources/inc/MenuCharacter.hpp | 22++++++++++++++++++++++
MSources/inc/Projectile.hpp | 4++++
MSources/inc/Quit.hpp | 2++
MSources/inc/Ring.hpp | 6++++++
MSources/inc/RingList.hpp | 2+-
MSources/inc/Shop.hpp | 4++--
MSources/inc/Shopkeeper.hpp | 1+
ASources/inc/SpecialAttack.hpp | 67+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MSources/inc/SpecialMoves.hpp | 40+++++++++++++++++++++-------------------
MSources/inc/Tooltip.hpp | 4+++-
MSources/inc/Weapon.hpp | 12++++++++++++
MSources/inc/WeaponList.hpp | 2+-
DSources/src/#Ring.cpp# | 150-------------------------------------------------------------------------------
DSources/src/.#PassivePattern.cpp | 2--
DSources/src/.#Pattern.cpp | 2--
DSources/src/.#Ring.cpp | 2--
MSources/src/Armor.cpp | 35+++++++++++++++++++++++++++--------
MSources/src/ArmorList.cpp | 13++++++++-----
ASources/src/Boss.cpp | 183+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MSources/src/Characters.cpp | 551++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------
ASources/src/Chest.cpp | 226+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MSources/src/Consumable.cpp | 34++++++----------------------------
ASources/src/ControllerInputManager.cpp | 130+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MSources/src/Dealer.cpp | 8++++----
ASources/src/Door.cpp | 60++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MSources/src/Drug.cpp | 128++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------
MSources/src/DrugList.cpp | 10+++++++---
MSources/src/Elements.cpp | 4++++
MSources/src/Enemy.cpp | 69++++++++++++++++++++++++++++++++++++++++++++++++---------------------
MSources/src/EnemyList.cpp | 10++++++----
MSources/src/Equipment.cpp | 57+++++++++++++++++++++++++++++++++++++++++++++++----------
MSources/src/Game.cpp | 246+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------
MSources/src/GameContactListener.cpp | 9+++++++--
MSources/src/HUDTargeting.cpp | 2--
MSources/src/HUDWindow.cpp | 275+++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------
MSources/src/Hero.cpp | 306+++++++++++++++++++++++++++++++++++++++++++++++++------------------------------
MSources/src/InGameMenu.cpp | 1+
MSources/src/Inventory.cpp | 25+++++++++++++++++++------
MSources/src/LevelGenerator.cpp | 36++++++++++++++++++++++++------------
MSources/src/Loot.cpp | 28++++++++++++++--------------
MSources/src/Map.cpp | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
MSources/src/Maps.cpp | 115++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
MSources/src/Menu.cpp | 36+++++++++++++++++++++++++++++++-----
MSources/src/MenuCharacter.cpp | 385++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------
MSources/src/Object.cpp | 4++--
MSources/src/Projectile.cpp | 111++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
MSources/src/Quit.cpp | 36+++++++++++++++++++++++++++++++-----
MSources/src/Ring.cpp | 32+++++++++++++++++++++++++-------
MSources/src/RingList.cpp | 13++++++++-----
MSources/src/Shop.cpp | 123++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------
MSources/src/Shopkeeper.cpp | 8+++++++-
ASources/src/SpecialAttack.cpp | 208+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
MSources/src/SpecialMoves.cpp | 161++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------
MSources/src/Tooltip.cpp | 53++++++++++++++++++++++++++++++++++++-----------------
MSources/src/Weapon.cpp | 111++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
MSources/src/WeaponList.cpp | 13++++++++-----
MSources/src/main.cpp | 2+-
MTodo.md | 8++++++++
518 files changed, 7263 insertions(+), 1701 deletions(-)

diff --git a/Angel/Actors/Actor.cpp b/Angel/Actors/Actor.cpp @@ -261,7 +261,6 @@ void Actor::ChangeSizeTo(const Vector2& newSize, float duration, bool smooth, St _sizeInterval = Interval<Vector2>(_size, newSize, duration, smooth); _sizeIntervalMessage = onCompletionMessage; _size = newSize; - std::cout << "Calling ChangeSizeTo with Vector2" << std::endl; } /* CODE BY LOUIS */ diff --git a/Angel/Actors/Actor.h b/Angel/Actors/Actor.h @@ -35,7 +35,7 @@ #include "../Infrastructure/Interval.h" #include "../Messaging/Message.h" -#define MAX_SPRITE_FRAMES 120 +#define MAX_SPRITE_FRAMES 200 #define CIRCLE_DRAW_SECTIONS 32 /** diff --git a/Angel/Input/InputKeys.h b/Angel/Input/InputKeys.h @@ -53,16 +53,16 @@ USEINPUTKEY(ANGEL_KEY_W,'w',"W") USEINPUTKEY(ANGEL_KEY_X,'x',"X") USEINPUTKEY(ANGEL_KEY_Y,'y',"Y") USEINPUTKEY(ANGEL_KEY_Z,'z',"Z") -USEINPUTKEY(ANGEL_KEY_1,'1',"ONE") -USEINPUTKEY(ANGEL_KEY_2,'2',"TWO") -USEINPUTKEY(ANGEL_KEY_3,'3',"THREE") -USEINPUTKEY(ANGEL_KEY_4,'4',"FOUR") -USEINPUTKEY(ANGEL_KEY_5,'5',"FIVE") -USEINPUTKEY(ANGEL_KEY_6,'6',"SIX") -USEINPUTKEY(ANGEL_KEY_7,'7',"SEVEN") -USEINPUTKEY(ANGEL_KEY_8,'8',"EIGHT") -USEINPUTKEY(ANGEL_KEY_9,'9',"NINE") -USEINPUTKEY(ANGEL_KEY_0,'0',"ZERO") +USEINPUTKEY(ANGEL_KEY_1,'1',"1") +USEINPUTKEY(ANGEL_KEY_2,'2',"2") +USEINPUTKEY(ANGEL_KEY_3,'3',"3") +USEINPUTKEY(ANGEL_KEY_4,'4',"4") +USEINPUTKEY(ANGEL_KEY_5,'5',"5") +USEINPUTKEY(ANGEL_KEY_6,'6',"6") +USEINPUTKEY(ANGEL_KEY_7,'7',"7") +USEINPUTKEY(ANGEL_KEY_8,'8',"8") +USEINPUTKEY(ANGEL_KEY_9,'9',"9") +USEINPUTKEY(ANGEL_KEY_0,'0',"0") diff --git a/Angel/Makefile b/Angel/Makefile @@ -1,6 +1,6 @@ ANGEL_DISABLE_FMOD := $(shell sed -rn 's/^[[:space:]]*\#define[[:space:]]+ANGEL_DISABLE_FMOD[[:space:]]+([[:digit:]])[[:space:]]*$$/\1/p' AngelConfig.h) ANGEL_DISABLE_DEVIL := $(shell sed -rn 's/^[[:space:]]*\#define[[:space:]]+ANGEL_DISABLE_DEVIL[[:space:]]+([[:digit:]])[[:space:]]*$$/\1/p' AngelConfig.h) -CXX = g++ -g +CXX = g++ -g -std=c++0x CXXFLAGS = TARGET = libangel.a ANGEL_FLAGS = -D ANGEL_RELEASE diff --git a/Config/Bindings.json b/Config/Bindings.json @@ -5,97 +5,127 @@ "Backspace" : { "broadcast" : "deletePressed", + "controller" : "", "key" : "BACKSPACE" }, "Enter" : { "broadcast" : "enterPressed", + "controller" : "", "key" : "ENTER" }, "Escape" : { "broadcast" : "escape", + "controller" : "START", "key" : "ESCAPE" }, "MapToggle" : { "broadcast" : "map", + "controller" : "BACK", "key" : "M" }, "Return" : { "broadcast" : "return", + "controller" : "", "key" : "BACKSPACE" } }, "Inventory" : { - "Drop an Item" : + "Pick/Drop an Item" : { - "broadcast" : "dropItem", - "key" : "V" + "broadcast" : "pickupItemPressed", + "controller" : "RB", + "key" : "F" }, - "Drug yourself" : + "Select/equip 1st item" : { - "broadcast" : "drug", - "key" : "D" + "broadcast" : "chooseItem1", + "controller" : "", + "key" : "1" }, - "Equip an Item" : + "Select/equip 2nd item" : { - "broadcast" : "equipSelectedItem", - "key" : "R" + "broadcast" : "chooseItem2", + "controller" : "", + "key" : "2" }, - "Go to next Item" : + "Select/equip 3rd item" : { - "broadcast" : "cycleInventory", - "key" : "TAB" + "broadcast" : "chooseItem3", + "controller" : "", + "key" : "3" }, - "Pick an Item" : + "Select/equip 4th item" : { - "broadcast" : "pickupItemPressed", - "key" : "F" + "broadcast" : "chooseItem4", + "controller" : "", + "key" : "4" } }, "Move" : { + "Action" : + { + "broadcast" : "action", + "controller" : "Y", + "key" : "R" + }, "Attack" : { "broadcast" : "attack", + "controller" : "B", "key" : "E" }, "Backward" : { "broadcast" : "backward", + "controller" : "", "key" : "LEFT_ARROW" }, "Forward" : { "broadcast" : "forward", + "controller" : "", "key" : "RIGHT_ARROW" }, "Jump" : { "broadcast" : "jump", + "controller" : "A", "key" : "SPACE" }, "Look Down" : { "broadcast" : "down", + "controller" : "", "key" : "DOWN_ARROW" }, "Look Up" : { "broadcast" : "up", + "controller" : "", "key" : "UP_ARROW" }, + "Special Attack" : + { + "broadcast" : "specialattack", + "controller" : "", + "key" : "Y" + }, "Special Move" : { "broadcast" : "specialmove", + "controller" : "X", "key" : "T" }, "Swap Charcaters(Debug)" : { "broadcast" : "changeCharacter", + "controller" : "", "key" : "P" } }, @@ -104,11 +134,13 @@ "Target an Enemy" : { "broadcast" : "lockTarget", + "controller" : "", "key" : "N" }, "Unlock Target" : { "broadcast" : "unlockTarget", + "controller" : "", "key" : "K" } } diff --git a/Config/input_bindings.ini b/Config/input_bindings.ini @@ -9,13 +9,14 @@ BACKSPACE = +returnPressed BACKSPACE = -returnReleased ;; Inventory - V = dropItem - D = +drugPressed - D = -drugReleased - R = equipSelectedItem - TAB = cycleInventory F = pickupItemPressed + 1 = chooseItem1 + 2 = chooseItem2 + 3 = chooseItem3 + 4 = chooseItem4 ;; Move + R = +actionPressed + R = -actionReleased E = +attackPressed E = -attackReleased LEFT_ARROW = +backwardPressed @@ -28,9 +29,26 @@ DOWN_ARROW = -downReleased UP_ARROW = +upPressed UP_ARROW = -upReleased + Y = +specialattackPressed + Y = -specialattackReleased T = +specialmovePressed T = -specialmoveReleased P = changeCharacter ;; Targeting N = lockTarget K = unlockTarget + +;; Controller + + P1BUTTON_A = +buttonAPressed + P1BUTTON_A = -buttonAReleased + P1BUTTON_B = +buttonBPressed + P1BUTTON_B = -buttonBReleased + P1BUTTON_X = +buttonXPressed + P1BUTTON_X = -buttonXReleased + P1BUTTON_Y = +buttonYPressed + P1BUTTON_Y = -buttonYReleased + P1BUTTON_START = buttonSTARTPressed + P1BUTTON_BACK = buttonBACKPressed + P1BUTTON_RIGHTBUMPER = buttonRBPressed + P1BUTTON_LEFTBUMPER = buttonLBPressed+ \ No newline at end of file diff --git a/MACOSX/Makefile b/MACOSX/Makefile @@ -2,7 +2,7 @@ NAME = rogue-like CC = g++ CFLAGS = -std=c++0x -arch i386 -Wno-deprecated -g -Wno-error=unused-command-line-argument -Wno-error=null-conversion -Wno-return-type ANGEL_FLAG = -D ANGEL -SRCS = ../Sources/src/Armor.cpp \ +SRCS = ../Sources/src/Armor.cpp \ ../Sources/src/ArmorList.cpp \ ../Sources/src/Characters.cpp \ ../Sources/src/Consumable.cpp \ @@ -14,6 +14,7 @@ SRCS = ../Sources/src/Armor.cpp \ ../Sources/src/Game.cpp \ ../Sources/src/GameContactListener.cpp \ ../Sources/src/Hero.cpp \ + ../Sources/src/Dealer.cpp \ ../Sources/src/Hitbox.cpp \ ../Sources/src/HUDTargeting.cpp \ ../Sources/src/HUDWindow.cpp \ @@ -34,9 +35,20 @@ SRCS = ../Sources/src/Armor.cpp \ ../Sources/src/RingList.cpp \ ../Sources/src/Room.cpp \ ../Sources/src/SpecialMoves.cpp \ + ../Sources/src/SpecialAttack.cpp \ ../Sources/src/Tooltip.cpp \ ../Sources/src/Weapon.cpp \ ../Sources/src/WeaponList.cpp \ + ../Sources/src/InGameMenu.cpp \ + ../Sources/src/Shopkeeper.cpp \ + ../Sources/src/Shop.cpp \ + ../Sources/src/MenuCharacter.cpp \ + ../Sources/src/Drug.cpp \ + ../Sources/src/DrugList.cpp \ + ../Sources/src/Chest.cpp \ + ../Sources/src/Door.cpp \ + ../Sources/src/ControllerInputManager.cpp \ + ../Sources/src/Boss.cpp OBJS = $(SRCS:.cpp=.o) @@ -73,7 +85,7 @@ FRAMEWORKS = -framework Cocoa \ -framework ForceFeedback \ -framework AGL -LIBS_FLAG = -lAngel -lFtgl -lGlfw -lBox2d -lFreetype -lLua -lOgg -lVorbis -lHidUtilities -lGwen -lJson -lfmodex -lfmodexL \ +LIBS_FLAG = -lAngel -lFTGL -lGLFW -lBox2D -lFreeType -lLua -lOgg -lVorbis -lHIDUtilities -lGWEN -ljson -lfmodex -lfmodexL \ -lILU -lIL -lILUT -ljpeg -llcms -lmng -ltiff -lpng -lz LIBS_DIRS = -L../Angel/build \ @@ -90,7 +102,7 @@ $(NAME): angel json $(OBJS) quick: $(OBJS) $(CC) $(CFLAGS) $(ANGEL_FLAG) -o build/$(NAME) $^ $(INCLUDES) $(LIBS) $(FRAMEWORKS) $(LIBS_FLAG) $(LIBS_DIRS) - cd build/ && lldb ./rogue-like + cd build/ && ./rogue-like %.o: %.cpp $(CC) $(CFLAGS) $(INCLUDES) $(FRAMEWORKS) $(LIBS_FLAG) $(LIBS_DIRS) -o $@ -c $^ @@ -114,6 +126,9 @@ quick-clean: rm $(OBJS) exec: + cd build/ && ./rogue-like + +exec-debug: cd build/ && lldb ./rogue-like re: clean all diff --git a/Makefile b/Makefile @@ -92,6 +92,7 @@ SRCS = ./Sources/src/Armor.cpp \ ./Sources/src/RingList.cpp \ ./Sources/src/Room.cpp \ ./Sources/src/SpecialMoves.cpp \ + ./Sources/src/SpecialAttack.cpp \ ./Sources/src/Tooltip.cpp \ ./Sources/src/Weapon.cpp \ ./Sources/src/WeaponList.cpp \ @@ -100,7 +101,11 @@ SRCS = ./Sources/src/Armor.cpp \ ./Sources/src/Shop.cpp \ ./Sources/src/MenuCharacter.cpp \ ./Sources/src/Drug.cpp \ - ./Sources/src/DrugList.cpp + ./Sources/src/Chest.cpp \ + ./Sources/src/Door.cpp \ + ./Sources/src/DrugList.cpp \ + ./Sources/src/ControllerInputManager.cpp \ + ./Sources/src/Boss.cpp SYSOBJS = $(patsubst %.cpp,%.o,$(SYSSRCS)) OBJS = $(patsubst %.cpp,%.o,$(SRCS)) diff --git a/Maps/MapCastle_1.json b/Maps/MapCastle_1.json @@ -12,7 +12,7 @@ "y":0 }, { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 77, 0, 0, 77, 0, 0, 0, 0, 0, 38, 39, 0, 0, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 19, 20, 21, 0, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 41, 0, 0, 77, 77, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 41, 0, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 77, 0, 0, 77, 0, 0, 0, 0, 0, 38, 39, 0, 0, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 19, 20, 21, 0, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 41, 0, 0, 77, 77, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 41, 0, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 99, 108, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":16, "name":"Tile Layer 2", "opacity":1, @@ -325,6 +325,26 @@ "next":"12", "physic":"0", "time":"0.1" + }, + "97": + { + "physic":"0", + "spawnDealer":"true", + "transparency":"100" + }, + "98": + { + "doorType":"boss", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" + }, + "107": + { + "doorType":"secret", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" } }, "tilewidth":32 diff --git a/Maps/MapCastle_2.json b/Maps/MapCastle_2.json @@ -12,7 +12,7 @@ "y":0 }, { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 32, 0, 0, 0, 0, 32, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 41, 38, 39, 0, 0, 0, 41, 0, 0, 0, 0, 41, 0, 0, 0, 0, 41, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 77, 77, 77, 77, 77, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 32, 0, 0, 0, 0, 32, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 41, 38, 39, 0, 0, 0, 41, 0, 0, 0, 0, 41, 0, 0, 0, 0, 41, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 99, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 77, 77, 77, 77, 77, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":16, "name":"Tile Layer 2", "opacity":1, @@ -317,6 +317,26 @@ "next":"12", "physic":"0", "time":"0.1" + }, + "97": + { + "physic":"0", + "spawnDealer":"true", + "transparency":"100" + }, + "98": + { + "doorType":"boss", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" + }, + "107": + { + "doorType":"secret", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" } }, "tilewidth":32 diff --git a/Maps/MapCastle_3.json b/Maps/MapCastle_3.json @@ -12,7 +12,7 @@ "y":0 }, { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 78, 78, 79, 79, 79, 79, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 0, 0, 16, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 23, 24, 0, 0, 25, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 0, 0, 16, 17, 18, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 22, 23, 24, 0, 0, 25, 26, 27, 0, 0, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":16, "name":"Tile Layer 2", "opacity":1, @@ -49,7 +49,6 @@ }, "spacing":0, - "tilecount":216, "tileheight":32, "tileproperties": { @@ -117,9 +116,17 @@ "spawnShop":"true", "transparency":"100" }, + "107": + { + "doorType":"secret", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" + }, "108": { - "physic":"0" + "physic":"0", + "spawnChest":"true" }, "109": { @@ -133,6 +140,30 @@ "physic":"0", "time":"0.1" }, + "110": + { + "physic":"0" + }, + "111": + { + "physic":"0" + }, + "112": + { + "physic":"0" + }, + "113": + { + "physic":"0" + }, + "114": + { + "physic":"0" + }, + "115": + { + "physic":"0" + }, "117": { "physic":"0" @@ -141,6 +172,10 @@ { "physic":"0" }, + "119": + { + "physic":"0" + }, "12": { "animate":"1", @@ -148,12 +183,41 @@ "physic":"0", "time":"0.1" }, + "120": + { + "physic":"0" + }, + "121": + { + "physic":"0" + }, + "122": + { + "physic":"0" + }, + "123": + { + "physic":"0" + }, + "124": + { + "physic":"0" + }, "126": { "physic":"0" }, "127": { + "physic":"0", + "speType":"chest" + }, + "128": + { + "physic":"0" + }, + "129": + { "physic":"0" }, "13": @@ -163,6 +227,22 @@ "physic":"0", "time":"0.1" }, + "130": + { + "physic":"0" + }, + "131": + { + "physic":"0" + }, + "132": + { + "physic":"0" + }, + "133": + { + "physic":"0" + }, "14": { "animate":"1", @@ -478,6 +558,12 @@ "hitbox":"upperTierHitbox", "speType":"canCross" }, + "89": + { + "physic":"0", + "spawnChest":"true", + "transparency":"100" + }, "9": { "animate":"1", @@ -529,6 +615,13 @@ "spawnDealer":"true", "transparency":"100" }, + "98": + { + "doorType":"boss", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" + }, "99": { "physic":"0" diff --git a/Maps/MapCastle_4.json b/Maps/MapCastle_4.json @@ -12,7 +12,7 @@ "y":0 }, { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 28, 0, 0, 0, 0, 37, 0, 0, 0, 0, 37, 0, 0, 78, 78, 78, 78, 78, 78, 78, 0, 0, 37, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 28, 0, 0, 0, 0, 37, 0, 0, 0, 0, 37, 0, 0, 78, 78, 78, 78, 78, 78, 78, 0, 0, 37, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 77, 0, 98, 99, 108, 0, 0, 0, 0, 0, 77, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":16, "name":"Tile Layer 2", "opacity":1, @@ -349,6 +349,26 @@ "next":"12", "physic":"0", "time":"0.1" + }, + "97": + { + "physic":"0", + "spawnDealer":"true", + "transparency":"100" + }, + "98": + { + "doorType":"boss", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" + }, + "107": + { + "doorType":"secret", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" } }, "tilewidth":32 diff --git a/Maps/MapCastle_5.json b/Maps/MapCastle_5.json @@ -12,7 +12,7 @@ "y":0 }, { - "data":[57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 0, 0, 32, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 0, 0, 0, 32, 0, 0, 55, 0, 0, 41, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 42, 0, 0, 0, 0, 41, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 55, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 10, 11, 12, 55, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 19, 20, 21, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "data":[57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 0, 0, 32, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 98, 99, 108, 32, 0, 0, 55, 0, 0, 41, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 42, 0, 0, 0, 0, 41, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 55, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 10, 11, 12, 55, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 19, 20, 21, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":16, "name":"Tile Layer 2", "opacity":1, @@ -44,6 +44,7 @@ }, "spacing":0, + "tilecount":180, "tileheight":32, "tileproperties": { @@ -316,6 +317,26 @@ "next":"12", "physic":"0", "time":"0.1" + }, + "97": + { + "physic":"0", + "spawnDealer":"true", + "transparency":"100" + }, + "98": + { + "doorType":"boss", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" + }, + "107": + { + "doorType":"secret", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" } }, "tilewidth":32 diff --git a/Maps/Menu/kitchen.json b/Maps/Menu/kitchen.json @@ -22,7 +22,6 @@ "x":0, "y":0 }], - "nextobjectid":1, "orientation":"orthogonal", "properties": { @@ -7726,7 +7725,15 @@ { "physic":"0" }, - "20956": + "20967": + { + "trigger":"skills" + }, + "20984": + { + "trigger":"skills" + }, + "21002": { "trigger":"startGame" }, @@ -11333,6 +11340,14 @@ "6478": { "physic":"0" + }, + "6555": + { + "trigger":"skills" + }, + "6558": + { + "trigger":"skills" } }, "tilewidth":16 diff --git a/Maps/background/backgroundMenu.json b/Maps/background/backgroundMenu.json @@ -1,7 +1,7 @@ { "height":40, "layers":[ { - "data":[6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 3449, 6862, 3449, 3432, 3433, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 3426, 3426, 3426, 3426, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 3426, 6862, 3426, 3426, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 3426, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 3426, 3426, 6862, 3426, 3426, 3426, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862, 6862], + "data":[3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3166, 3166, 3166, 3166, 3166, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3165, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3166, 3381, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3313, 3313, 3313, 3313, 3194, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3313, 3313, 3313, 3313, 3313, 3313, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3406, 3313, 3313, 3313, 3313, 3313, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3426, 3426, 3426, 3426, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3426, 3402, 3426, 3426, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3137, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3165, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3426, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3426, 3426, 3402, 3426, 3426, 3426, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3381, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402, 3402], "height":40, "name":"Tile Layer 1", "opacity":1, @@ -11,7 +11,6 @@ "x":0, "y":0 }], - "nextobjectid":1, "orientation":"orthogonal", "properties": { diff --git a/Maps/bossMap.json b/Maps/bossMap.json @@ -0,0 +1,639 @@ +{ "height":16, + "layers":[ + { + "data":[57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57], + "height":16, + "name":"Tile Layer 1", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":27, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "name":"Tile Layer 2", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":27, + "x":0, + "y":0 + }], + "orientation":"orthogonal", + "properties": + { + "bossMap":"1" + }, + "renderorder":"right-down", + "tileheight":32, + "tilesets":[ + { + "firstgid":1, + "image":"Resources\/Images\/castle.png", + "imageheight":768, + "imagewidth":288, + "margin":0, + "name":"castle_final", + "properties": + { + + }, + "spacing":0, + "tileheight":32, + "tileproperties": + { + "0": + { + "animate":"1", + "next":"3", + "physic":"0", + "time":"0.1" + }, + "1": + { + "animate":"1", + "next":"4", + "physic":"0", + "time":"0.1" + }, + "10": + { + "animate":"1", + "next":"13", + "physic":"0", + "time":"0.1" + }, + "100": + { + "hitbox":"leftHalfHitbox", + "speType":"spikes" + }, + "101": + { + "physic":"0" + }, + "102": + { + "physic":"0" + }, + "103": + { + "enemyLevel":"-1", + "isFlying":"true", + "physic":"0", + "spawnEnemy":"true", + "transparency":"100" + }, + "104": + { + "enemyLevel":"0", + "isFlying":"true", + "physic":"0", + "spawnEnemy":"true", + "transparency":"100" + }, + "105": + { + "enemyLevel":"+1", + "isFlying":"true", + "physic":"0", + "spawnEnemy":"true", + "transparency":"100" + }, + "106": + { + "physic":"0", + "spawnShop":"true", + "transparency":"100" + }, + "107": + { + "doorType":"secret", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" + }, + "108": + { + "physic":"0", + "spawnChest":"true" + }, + "109": + { + "hitbox":"upperHalfHitbox", + "speType":"spikes" + }, + "11": + { + "animate":"1", + "next":"14", + "physic":"0", + "time":"0.1" + }, + "110": + { + "physic":"0" + }, + "111": + { + "physic":"0" + }, + "112": + { + "physic":"0" + }, + "113": + { + "physic":"0" + }, + "114": + { + "physic":"0" + }, + "115": + { + "physic":"0" + }, + "116": + { + "physic":"0", + "spawnBoss":"true", + "transparency":"100" + }, + "117": + { + "physic":"0" + }, + "118": + { + "physic":"0" + }, + "119": + { + "physic":"0" + }, + "12": + { + "animate":"1", + "next":"15", + "physic":"0", + "time":"0.1" + }, + "120": + { + "physic":"0" + }, + "121": + { + "physic":"0" + }, + "122": + { + "physic":"0" + }, + "123": + { + "physic":"0" + }, + "124": + { + "physic":"0" + }, + "126": + { + "physic":"0" + }, + "127": + { + "physic":"0", + "speType":"chest" + }, + "128": + { + "physic":"0" + }, + "129": + { + "physic":"0" + }, + "13": + { + "animate":"1", + "next":"16", + "physic":"0", + "time":"0.1" + }, + "130": + { + "physic":"0" + }, + "131": + { + "physic":"0" + }, + "132": + { + "physic":"0" + }, + "133": + { + "physic":"0" + }, + "14": + { + "animate":"1", + "next":"17", + "physic":"0", + "time":"0.1" + }, + "149": + { + "spawnBoss":"true", + "transparency":"100" + }, + "15": + { + "animate":"1", + "next":"9", + "physic":"0", + "time":"0.08" + }, + "16": + { + "animate":"1", + "next":"10", + "physic":"0", + "time":"0.08" + }, + "17": + { + "animate":"1", + "next":"11", + "physic":"0", + "time":"0.08" + }, + "18": + { + "animate":"1", + "next":"21", + "physic":"0", + "time":"0.1" + }, + "19": + { + "animate":"1", + "next":"22", + "physic":"0", + "time":"0.1" + }, + "2": + { + "animate":"1", + "next":"5", + "physic":"0", + "time":"0.1" + }, + "20": + { + "animate":"1", + "next":"23", + "physic":"0", + "time":"0.1" + }, + "21": + { + "animate":"1", + "next":"24", + "physic":"0", + "time":"0.1" + }, + "22": + { + "animate":"1", + "next":"25", + "physic":"0", + "time":"0.1" + }, + "23": + { + "animate":"1", + "next":"26", + "physic":"0", + "time":"0.1" + }, + "24": + { + "animate":"1", + "next":"18", + "physic":"0", + "time":"0.08" + }, + "25": + { + "animate":"1", + "next":"19", + "physic":"0", + "time":"0.08" + }, + "26": + { + "animate":"1", + "next":"20", + "physic":"0", + "time":"0.08" + }, + "27": + { + "physic":"0" + }, + "28": + { + "physic":"0" + }, + "29": + { + "physic":"0" + }, + "3": + { + "animate":"1", + "next":"6", + "physic":"0", + "time":"0.1" + }, + "30": + { + "physic":"0" + }, + "31": + { + "physic":"0" + }, + "32": + { + "physic":"0" + }, + "33": + { + "physic":"0" + }, + "34": + { + "physic":"0" + }, + "35": + { + "physic":"0" + }, + "36": + { + "physic":"0" + }, + "37": + { + "physic":"0" + }, + "38": + { + "physic":"0" + }, + "39": + { + "physic":"0" + }, + "4": + { + "animate":"1", + "next":"7", + "physic":"0", + "time":"0.1" + }, + "40": + { + "physic":"0" + }, + "41": + { + "physic":"0" + }, + "42": + { + "physic":"0" + }, + "43": + { + "physic":"0" + }, + "44": + { + "physic":"0" + }, + "5": + { + "animate":"1", + "next":"8", + "physic":"0", + "time":"0.1" + }, + "51": + { + "physic":"0" + }, + "52": + { + "hitbox":"upperTierHitbox", + "speType":"canCross" + }, + "53": + { + "hitbox":"upperTierHitbox", + "speType":"canCross" + }, + "57": + { + "physic":"0" + }, + "6": + { + "animate":"1", + "next":"0", + "physic":"0", + "time":"0.08" + }, + "60": + { + "physic":"0" + }, + "61": + { + "physic":"0" + }, + "62": + { + "physic":"0" + }, + "69": + { + "physic":"0" + }, + "7": + { + "animate":"1", + "next":"1", + "physic":"0", + "time":"0.08" + }, + "70": + { + "physic":"0" + }, + "71": + { + "physic":"0" + }, + "75": + { + "hitbox":"lowerHalfHitbox", + "speType":"spikes" + }, + "76": + { + "hitbox":"lowerHalfHitbox", + "speType":"spikes" + }, + "77": + { + "animate":"1", + "next":"78", + "physic":"0", + "speType":"water", + "time":"0.1" + }, + "78": + { + "animate":"1", + "next":"77", + "physic":"0", + "speType":"water", + "time":"0.1" + }, + "79": + { + "physic":"0", + "speType":"water" + }, + "8": + { + "animate":"1", + "next":"2", + "physic":"0", + "time":"0.08" + }, + "81": + { + "hitbox":"upperTierHitbox", + "speType":"canCross" + }, + "82": + { + "hitbox":"upperTierHitbox", + "speType":"canCross" + }, + "83": + { + "hitbox":"upperTierHitbox", + "speType":"canCross" + }, + "84": + { + "hitbox":"upperTierHitbox", + "speType":"canCross" + }, + "85": + { + "hitbox":"upperTierHitbox", + "speType":"canCross" + }, + "86": + { + "hitbox":"upperTierHitbox", + "speType":"canCross" + }, + "89": + { + "physic":"0", + "spawnChest":"true", + "transparency":"100" + }, + "9": + { + "animate":"1", + "next":"12", + "physic":"0", + "time":"0.1" + }, + "90": + { + "physic":"0" + }, + "91": + { + "hitbox":"rightHalfHitbox", + "speType":"spikes" + }, + "92": + { + "physic":"0" + }, + "93": + { + "physic":"0" + }, + "94": + { + "enemyLevel":"-1", + "physic":"0", + "spawnEnemy":"true", + "transparency":"100" + }, + "95": + { + "enemyLevel":"0", + "physic":"0", + "spawnEnemy":"true", + "transparency":"100" + }, + "96": + { + "enemyLevel":"+1", + "physic":"0", + "spawnEnemy":"true", + "transparency":"100" + }, + "97": + { + "physic":"0", + "spawnDealer":"true", + "transparency":"100" + }, + "98": + { + "doorType":"boss", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" + }, + "99": + { + "physic":"0" + } + }, + "tilewidth":32 + }], + "tilewidth":32, + "version":1, + "width":27 +}+ \ No newline at end of file diff --git a/Maps/castle_final.tsx b/Maps/castle_final.tsx @@ -541,6 +541,7 @@ <tile id="108"> <properties> <property name="physic" value="0"/> + <property name="spawnChest" value="true"/> </properties> </tile> <tile id="109"> @@ -549,6 +550,13 @@ <property name="speType" value="spikes"/> </properties> </tile> + <tile id="115"> + <properties> + <property name="physic" value="0"/> + <property name="spawnChest" value="true"/> + <property name="transparency" value="100"/> + </properties> + </tile> <tile id="117"> <properties> <property name="physic" value="0"/> @@ -567,6 +575,7 @@ <tile id="127"> <properties> <property name="physic" value="0"/> + <property name="speType" value="chest"/> </properties> </tile> </tileset> diff --git a/Maps/mapCastle_small10.json b/Maps/mapCastle_small10.json @@ -12,7 +12,7 @@ "y":0 }, { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 16, 17, 18, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 22, 23, 24, 0, 0, 0, 0, 0, 0, 0, 25, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 0], + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 16, 17, 18, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 22, 23, 24, 0, 0, 0, 0, 0, 0, 0, 25, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 99, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 0], "height":16, "name":"Calque 2", "opacity":1, @@ -245,6 +245,26 @@ "9": { "physic":"0" + }, + "97": + { + "physic":"0", + "spawnDealer":"true", + "transparency":"100" + }, + "98": + { + "doorType":"boss", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" + }, + "107": + { + "doorType":"secret", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" } }, "tilewidth":32 diff --git a/Maps/mapCastle_small11.json b/Maps/mapCastle_small11.json @@ -12,7 +12,7 @@ "y":0 }, { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 98, 108, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":16, "name":"Calque 2", "opacity":1, @@ -246,6 +246,26 @@ "9": { "physic":"0" + }, + "97": + { + "physic":"0", + "spawnDealer":"true", + "transparency":"100" + }, + "98": + { + "doorType":"boss", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" + }, + "107": + { + "doorType":"secret", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" } }, "tilewidth":32 diff --git a/Maps/mapCastle_small12.json b/Maps/mapCastle_small12.json @@ -12,7 +12,7 @@ "y":0 }, { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 18, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57, 0, 0, 57, 57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57, 0, 0, 57, 57, 57, 57, 57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57, 57, 57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 18, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57, 0, 0, 57, 57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57, 0, 0, 57, 57, 57, 57, 57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 57, 57, 57, 57, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 99, 98, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":16, "name":"Calque 2", "opacity":1, @@ -239,6 +239,26 @@ "9": { "physic":"0" + }, + "97": + { + "physic":"0", + "spawnDealer":"true", + "transparency":"100" + }, + "98": + { + "doorType":"boss", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" + }, + "107": + { + "doorType":"secret", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" } }, "tilewidth":32 diff --git a/Maps/mapCastle_small13.json b/Maps/mapCastle_small13.json @@ -12,7 +12,7 @@ "y":0 }, { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 39, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 28, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 10, 11, 12, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 63, 63, 0, 0, 0, 0, 86, 86, 0, 0, 32, 0, 37, 0, 0, 32, 0, 0, 0, 0, 0, 32, 0, 37, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 32, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 86, 86, 0, 41, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 63, 63, 0, 0, 0, 0, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 63, 63, 0, 0, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 0, 0, 0, 0, 0, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 39, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 28, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 10, 11, 12, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 63, 63, 0, 0, 0, 0, 86, 86, 0, 0, 32, 0, 37, 0, 0, 32, 0, 0, 0, 0, 0, 32, 0, 37, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 32, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 86, 86, 0, 41, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 63, 63, 0, 0, 0, 0, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 63, 63, 0, 0, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 86, 0, 0, 0, 0, 0, 0, 0, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 99, 98, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":16, "name":"Tile Layer 2", "opacity":1, @@ -404,6 +404,26 @@ { "hitbox":"rightHalfHitbox", "speType":"spikes" + }, + "97": + { + "physic":"0", + "spawnDealer":"true", + "transparency":"100" + }, + "98": + { + "doorType":"boss", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" + }, + "107": + { + "doorType":"secret", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" } }, "tilewidth":32 diff --git a/Maps/mapCastle_small14.json b/Maps/mapCastle_small14.json @@ -12,7 +12,7 @@ "y":0 }, { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 80, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 28, 0, 0, 63, 63, 61, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 70, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 80, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 28, 0, 0, 63, 63, 61, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 70, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 99, 108, 0, 0, 0, 0, 0, 0, 0], "height":16, "name":"Tile Layer 2", "opacity":1, @@ -338,6 +338,26 @@ "next":"12", "physic":"0", "time":"0.1" + }, + "97": + { + "physic":"0", + "spawnDealer":"true", + "transparency":"100" + }, + "98": + { + "doorType":"boss", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" + }, + "107": + { + "doorType":"secret", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" } }, "tilewidth":32 diff --git a/Maps/mapCastle_small15.json b/Maps/mapCastle_small15.json @@ -12,7 +12,7 @@ "y":0 }, { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 57, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 0, 57, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 57, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 57, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 57, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 57, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 77, 77, 77, 77, 77, 77, 77, 77, 77, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 57, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 0, 57, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 57, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 57, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 57, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 57, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, 77, 77, 77, 77, 77, 77, 77, 77, 77, 70, 0, 0, 0, 108, 99, 98, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":16, "name":"Tile Layer 2", "opacity":1, @@ -335,7 +335,28 @@ "next":"12", "physic":"0", "time":"0.1" + }, + "97": + { + "physic":"0", + "spawnDealer":"true", + "transparency":"100" + }, + "98": + { + "doorType":"boss", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" + }, + "107": + { + "doorType":"secret", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" } + }, "tilewidth":32 }], diff --git a/Maps/mapCastle_small16.json b/Maps/mapCastle_small16.json @@ -12,7 +12,7 @@ "y":0 }, { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 37, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 61, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 37, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 61, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 77, 0, 0, 108, 99, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":16, "name":"Tile Layer 2", "opacity":1, @@ -341,6 +341,26 @@ "next":"12", "physic":"0", "time":"0.1" + }, + "97": + { + "physic":"0", + "spawnDealer":"true", + "transparency":"100" + }, + "98": + { + "doorType":"boss", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" + }, + "107": + { + "doorType":"secret", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" } }, "tilewidth":32 diff --git a/Maps/mapCastle_small17.json b/Maps/mapCastle_small17.json @@ -12,7 +12,7 @@ "y":0 }, { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 0, 77, 77, 77, 0, 77, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 0, 77, 77, 77, 0, 77, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 99, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":16, "name":"Tile Layer 2", "opacity":1, @@ -334,7 +334,28 @@ "next":"12", "physic":"0", "time":"0.1" + }, + "97": + { + "physic":"0", + "spawnDealer":"true", + "transparency":"100" + }, + "98": + { + "doorType":"boss", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" + }, + "107": + { + "doorType":"secret", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" } + }, "tilewidth":32 }], diff --git a/Maps/mapCastle_small18.json b/Maps/mapCastle_small18.json @@ -12,7 +12,7 @@ "y":0 }, { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 38, 39, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 77, 0, 77, 77, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 78, 78, 0, 0, 78, 78, 78, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 0, 0, 80, 80, 80, 80, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 63, 63, 0, 0, 80, 80, 80, 80, 0, 0, 80, 80, 80, 80, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 61, 0, 0, 0, 80, 80, 80, 80, 0, 0, 80, 80, 80, 80, 56, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 38, 39, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77, 77, 0, 77, 77, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 78, 78, 78, 0, 0, 78, 78, 78, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 80, 80, 80, 0, 0, 80, 80, 80, 80, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 63, 63, 0, 0, 80, 80, 80, 80, 0, 0, 80, 80, 80, 80, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 61, 0, 0, 0, 80, 80, 80, 80, 0, 0, 80, 80, 80, 80, 56, 0, 0, 0, 0, 19, 20, 21, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 0, 0, 98, 99, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":16, "name":"Tile Layer 2", "opacity":1, @@ -334,7 +334,28 @@ "next":"12", "physic":"0", "time":"0.1" + }, + "97": + { + "physic":"0", + "spawnDealer":"true", + "transparency":"100" + }, + "98": + { + "doorType":"boss", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" + }, + "107": + { + "doorType":"secret", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" } + }, "tilewidth":32 }], diff --git a/Maps/mapCastle_small5.json b/Maps/mapCastle_small5.json @@ -12,7 +12,7 @@ "y":0 }, { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 37, 0, 0, 4, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 37, 0, 0, 4, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 5, 6, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 99, 108, 0, 0, 0, 0, 0, 0, 0, 0], "height":16, "name":"Calque 2", "opacity":1, @@ -230,7 +230,28 @@ "9": { "physic":"0" + }, + "97": + { + "physic":"0", + "spawnDealer":"true", + "transparency":"100" + }, + "98": + { + "doorType":"boss", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" + }, + "107": + { + "doorType":"secret", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" } + }, "tilewidth":32 }], diff --git a/Maps/mapCastle_small6.json b/Maps/mapCastle_small6.json @@ -12,7 +12,7 @@ "y":0 }, { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76, 0, 0, 0, 0, 0, 0, 0, 76, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 98, 99, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76, 0, 0, 0, 0, 0, 0, 0, 76, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":16, "name":"Calque 2", "opacity":1, @@ -231,6 +231,26 @@ "9": { "physic":"0" + }, + "97": + { + "physic":"0", + "spawnDealer":"true", + "transparency":"100" + }, + "98": + { + "doorType":"boss", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" + }, + "107": + { + "doorType":"secret", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" } }, "tilewidth":32 diff --git a/Maps/mapCastle_small7.json b/Maps/mapCastle_small7.json @@ -1,191 +0,0 @@ -{ "height":16, - "layers":[ - { - "data":[57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 40, 40, 40, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 40, 40, 40, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 40, 40, 40, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 40, 40, 40, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 40, 40, 40, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 40, 40, 40, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 40, 40, 40, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 1, 2, 3, 57, 57, 57, 57, 57, 57, 40, 40, 40, 57, 57, 57, 57, 57, 57, 1, 2, 3, 57, 57, 57, 40, 40, 40, 10, 11, 12, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 10, 11, 12, 40, 40, 40, 40, 40, 40, 19, 20, 21, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 19, 20, 21, 40, 40, 40, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 40, 40, 40, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 40, 40, 40, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 40, 40, 40, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 40, 40, 40, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 40, 40, 40, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 40, 40, 40, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57], - "height":16, - "name":"Calque de Tile 1", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":27, - "x":0, - "y":0 - }, - { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, 0, 61, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], - "height":16, - "name":"Tile Layer 2", - "opacity":1, - "type":"tilelayer", - "visible":true, - "width":27, - "x":0, - "y":0 - }], - "nextobjectid":1, - "orientation":"orthogonal", - "properties": - { - "doorDown":"1", - "doorLeft":"1", - "doorRight":"1", - "doorUp":"1" - }, - "renderorder":"right-down", - "tileheight":32, - "tilesets":[ - { - "firstgid":1, - "image":"Resources\/Images\/castle_1.png", - "imageheight":640, - "imagewidth":288, - "margin":0, - "name":"castle", - "properties": - { - - }, - "spacing":0, - "tileheight":32, - "tileproperties": - { - "0": - { - "physic":"0" - }, - "1": - { - "physic":"0" - }, - "10": - { - "physic":"0" - }, - "11": - { - "physic":"0" - }, - "12": - { - "physic":"0" - }, - "13": - { - "physic":"0" - }, - "14": - { - "physic":"0" - }, - "15": - { - "physic":"0" - }, - "16": - { - "physic":"0" - }, - "17": - { - "physic":"0" - }, - "18": - { - "physic":"0" - }, - "19": - { - "physic":"0" - }, - "2": - { - "physic":"0" - }, - "20": - { - "physic":"0" - }, - "21": - { - "physic":"0" - }, - "22": - { - "physic":"0" - }, - "23": - { - "physic":"0" - }, - "24": - { - "physic":"0" - }, - "25": - { - "physic":"0" - }, - "26": - { - "physic":"0" - }, - "27": - { - "physic":"0" - }, - "3": - { - "physic":"0" - }, - "36": - { - "physic":"0" - }, - "39": - { - "physic":"0" - }, - "4": - { - "physic":"0" - }, - "5": - { - "physic":"0" - }, - "6": - { - "physic":"0" - }, - "60": - { - "physic":"0" - }, - "62": - { - "hitbox":"upperTierHitbox", - "speType":"canCross" - }, - "69": - { - "physic":"0" - }, - "7": - { - "physic":"0" - }, - "8": - { - "physic":"0" - }, - "9": - { - "physic":"0" - } - }, - "tilewidth":32 - }], - "tilewidth":32, - "version":1, - "width":27 -}- \ No newline at end of file diff --git a/Maps/mapCastle_small8.json b/Maps/mapCastle_small8.json @@ -12,7 +12,7 @@ "y":0 }, { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 4, 5, 6, 0, 0, 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 13, 14, 15, 0, 0, 0, 0, 0, 0, 16, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 0], + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 4, 5, 6, 0, 0, 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 13, 14, 15, 0, 0, 0, 0, 0, 0, 16, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 99, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 0], "height":16, "name":"Calque 2", "opacity":1, @@ -163,6 +163,26 @@ "9": { "physic":"0" + }, + "97": + { + "physic":"0", + "spawnDealer":"true", + "transparency":"100" + }, + "98": + { + "doorType":"boss", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" + }, + "107": + { + "doorType":"secret", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" } }, "tilewidth":32 diff --git a/Maps/mapCastle_small9.json b/Maps/mapCastle_small9.json @@ -12,7 +12,7 @@ "y":0 }, { - "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 17, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 98, 99, 108, 0, 0, 0, 63, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], "height":16, "name":"Calque 2", "opacity":1, @@ -229,6 +229,26 @@ "9": { "physic":"0" + }, + "97": + { + "physic":"0", + "spawnDealer":"true", + "transparency":"100" + }, + "98": + { + "doorType":"boss", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" + }, + "107": + { + "doorType":"secret", + "physic":"0", + "spawnDoor":"true", + "transparency":"100" } }, "tilewidth":32 diff --git a/Maps/secretMap.json b/Maps/secretMap.json @@ -0,0 +1,556 @@ +{ "height":16, + "layers":[ + { + "data":[57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 1, 2, 3, 40, 40, 40, 1, 2, 3, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 10, 11, 12, 40, 66, 40, 10, 11, 12, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 19, 20, 21, 40, 40, 40, 19, 20, 21, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 66, 40, 40, 66, 40, 40, 66, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 40, 40, 40, 40, 40, 40, 40, 40, 40, 75, 40, 40, 75, 40, 40, 75, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 57, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 57], + "height":16, + "name":"Tile Layer 1", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":27, + "x":0, + "y":0 + }, + { + "data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 33, 0, 0, 0, 34, 0, 0, 62, 0, 0, 34, 0, 0, 0, 33, 0, 0, 0, 32, 0, 0, 0, 0, 41, 0, 0, 0, 42, 0, 0, 0, 43, 0, 0, 71, 0, 0, 43, 0, 0, 0, 42, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 38, 39, 0, 100, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + "height":16, + "name":"Tile Layer 2", + "opacity":1, + "type":"tilelayer", + "visible":true, + "width":27, + "x":0, + "y":0 + }], + "nextobjectid":1, + "orientation":"orthogonal", + "properties": + { + "secretMap":"1" + }, + "renderorder":"right-down", + "tileheight":32, + "tilesets":[ + { + "firstgid":1, + "image":"Resources\/Images\/castle.png", + "imageheight":768, + "imagewidth":288, + "margin":0, + "name":"castle_final", + "properties": + { + + }, + "spacing":0, + "tilecount":216, + "tileheight":32, + "tileproperties": + { + "0": + { + "animate":"1", + "next":"3", + "physic":"0", + "time":"0.1" + }, + "1": + { + "animate":"1", + "next":"4", + "physic":"0", + "time":"0.1" + }, + "10": + { + "animate":"1", + "next":"13", + "physic":"0", + "time":"0.1" + }, + "100": + { + "hitbox":"leftHalfHitbox", + "speType":"spikes" + }, + "101": + { + "speType":"chestDoor" + }, + "102": + { + "physic":"0" + }, + "103": + { + "enemyLevel":"-1", + "isFlying":"true", + "physic":"0", + "spawnEnemy":"true", + "transparency":"100" + }, + "104": + { + "enemyLevel":"0", + "isFlying":"true", + "physic":"0", + "spawnEnemy":"true", + "transparency":"100" + }, + "105": + { + "enemyLevel":"+1", + "isFlying":"true", + "physic":"0", + "spawnEnemy":"true", + "transparency":"100" + }, + "106": + { + "physic":"0", + "spawnShop":"true", + "transparency":"100" + }, + "107": + { + "doorType":"secret", + "physic":"0", + "spawnDoor":"1", + "speType":"return", + "transparency":"100" + }, + "108": + { + "physic":"0" + }, + "109": + { + "hitbox":"upperHalfHitbox", + "speType":"spikes" + }, + "11": + { + "animate":"1", + "next":"14", + "physic":"0", + "time":"0.1" + }, + "115": + { + "physic":"0", + "spawnChest":"true" + }, + "117": + { + "physic":"0" + }, + "118": + { + "physic":"0" + }, + "12": + { + "animate":"1", + "next":"15", + "physic":"0", + "time":"0.1" + }, + "126": + { + "physic":"0" + }, + "127": + { + "physic":"0", + "speType":"chest" + }, + "13": + { + "animate":"1", + "next":"16", + "physic":"0", + "time":"0.1" + }, + "14": + { + "animate":"1", + "next":"17", + "physic":"0", + "time":"0.1" + }, + "15": + { + "animate":"1", + "next":"9", + "physic":"0", + "time":"0.08" + }, + "16": + { + "animate":"1", + "next":"10", + "physic":"0", + "time":"0.08" + }, + "17": + { + "animate":"1", + "next":"11", + "physic":"0", + "time":"0.08" + }, + "18": + { + "animate":"1", + "next":"21", + "physic":"0", + "time":"0.1" + }, + "19": + { + "animate":"1", + "next":"22", + "physic":"0", + "time":"0.1" + }, + "2": + { + "animate":"1", + "next":"5", + "physic":"0", + "time":"0.1" + }, + "20": + { + "animate":"1", + "next":"23", + "physic":"0", + "time":"0.1" + }, + "21": + { + "animate":"1", + "next":"24", + "physic":"0", + "time":"0.1" + }, + "22": + { + "animate":"1", + "next":"25", + "physic":"0", + "time":"0.1" + }, + "23": + { + "animate":"1", + "next":"26", + "physic":"0", + "time":"0.1" + }, + "24": + { + "animate":"1", + "next":"18", + "physic":"0", + "time":"0.08" + }, + "25": + { + "animate":"1", + "next":"19", + "physic":"0", + "time":"0.08" + }, + "26": + { + "animate":"1", + "next":"20", + "physic":"0", + "time":"0.08" + }, + "27": + { + "physic":"0" + }, + "28": + { + "physic":"0" + }, + "29": + { + "physic":"0" + }, + "3": + { + "animate":"1", + "next":"6", + "physic":"0", + "time":"0.1" + }, + "30": + { + "physic":"0" + }, + "31": + { + "physic":"0" + }, + "32": + { + "physic":"0" + }, + "33": + { + "physic":"0" + }, + "34": + { + "physic":"0" + }, + "35": + { + "physic":"0" + }, + "36": + { + "physic":"0" + }, + "37": + { + "physic":"0" + }, + "38": + { + "physic":"0" + }, + "39": + { + "physic":"0" + }, + "4": + { + "animate":"1", + "next":"7", + "physic":"0", + "time":"0.1" + }, + "40": + { + "physic":"0" + }, + "41": + { + "physic":"0" + }, + "42": + { + "physic":"0" + }, + "43": + { + "physic":"0" + }, + "44": + { + "physic":"0" + }, + "5": + { + "animate":"1", + "next":"8", + "physic":"0", + "time":"0.1" + }, + "51": + { + "physic":"0" + }, + "52": + { + "hitbox":"upperTierHitbox", + "speType":"canCross" + }, + "53": + { + "hitbox":"upperTierHitbox", + "speType":"canCross" + }, + "57": + { + "physic":"0" + }, + "6": + { + "animate":"1", + "next":"0", + "physic":"0", + "time":"0.08" + }, + "60": + { + "physic":"0" + }, + "61": + { + "physic":"0" + }, + "62": + { + "physic":"0" + }, + "69": + { + "physic":"0" + }, + "7": + { + "animate":"1", + "next":"1", + "physic":"0", + "time":"0.08" + }, + "70": + { + "physic":"0" + }, + "71": + { + "physic":"0" + }, + "75": + { + "hitbox":"lowerHalfHitbox", + "speType":"spikes" + }, + "76": + { + "hitbox":"lowerHalfHitbox", + "speType":"spikes" + }, + "77": + { + "animate":"1", + "next":"78", + "physic":"0", + "speType":"water", + "time":"0.1" + }, + "78": + { + "animate":"1", + "next":"77", + "physic":"0", + "speType":"water", + "time":"0.1" + }, + "79": + { + "physic":"0", + "speType":"water" + }, + "8": + { + "animate":"1", + "next":"2", + "physic":"0", + "time":"0.08" + }, + "81": + { + "hitbox":"upperTierHitbox", + "speType":"canCross" + }, + "82": + { + "hitbox":"upperTierHitbox", + "speType":"canCross" + }, + "83": + { + "hitbox":"upperTierHitbox", + "speType":"canCross" + }, + "84": + { + "hitbox":"upperTierHitbox", + "speType":"canCross" + }, + "85": + { + "hitbox":"upperTierHitbox", + "speType":"canCross" + }, + "86": + { + "hitbox":"upperTierHitbox", + "speType":"canCross" + }, + "89": + { + "physic":"0", + "spawnChest":"true", + "transparency":"100" + }, + "9": + { + "animate":"1", + "next":"12", + "physic":"0", + "time":"0.1" + }, + "90": + { + "physic":"0" + }, + "91": + { + "hitbox":"rightHalfHitbox", + "speType":"spikes" + }, + "92": + { + "speType":"chestDoor" + }, + "93": + { + "physic":"0" + }, + "94": + { + "enemyLevel":"-1", + "physic":"0", + "spawnEnemy":"true", + "transparency":"100" + }, + "95": + { + "enemyLevel":"0", + "physic":"0", + "spawnEnemy":"true", + "transparency":"100" + }, + "96": + { + "enemyLevel":"+1", + "physic":"0", + "spawnEnemy":"true", + "transparency":"100" + }, + "97": + { + "physic":"0", + "spawnDealer":"true", + "transparency":"100" + }, + "99": + { + "physic":"0" + } + }, + "tilewidth":32 + }], + "tilewidth":32, + "version":1, + "width":27 +}+ \ No newline at end of file diff --git a/README.md b/README.md @@ -1,5 +1,5 @@ # Rogue-Like -[![Build Status](https://travis-ci.org/Ne02ptzero/Grog-Like.svg?branch=build)](https://travis-ci.org/Ne02ptzero/Grog-Like) +[![Build Status](https://travis-ci.org/Ne02ptzero/Grog-Knight.svg?branch=master)](https://travis-ci.org/Ne02ptzero/Grog-Knight) ![Language](https://img.shields.io/badge/language-c%2B%2B-orange.svg) [![License](https://img.shields.io/badge/license-BSD-blue.svg)](LICENSE) [![Join the chat at https://gitter.im/Ne02ptzero/Grog-Like](https://img.shields.io/badge/chat-gitter-red.svg)](https://gitter.im/Ne02ptzero/Grog-Like?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) @@ -18,7 +18,7 @@ On the topic of our game, we are looking to create a 2D scrolling game with proc **Clone**: ``` -git clone --recursive http://github.com/Ne02ptzero/rogue-like +git clone --recursive http://github.com/Ne02ptzero/Grog-Knight ``` @@ -34,8 +34,4 @@ This project use [Angel2d](https://github.com/angel2d/angel2d), [Documentation]( ### Contributing [Rules Here :)](Contributing.md) -[Docs Here](http://ne02ptzero.github.io/Grog-Like) - - -[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/Ne02ptzero/grog-like/trend.png)](https://bitdeli.com/free "Bitdeli Badge") - +[Docs Here](http://ne02ptzero.github.io/Grog-Knight) diff --git a/Resources/Elements/Archer.json b/Resources/Elements/Archer.json @@ -7,44 +7,67 @@ "mana": 120, "maxMana": 120, "sprites": "Resources/Images/Archer/archer_000.png", - "size": 1.3, + "size": 1, "hitboxType": "special", - "hitbox": "heroHitbox" + "hitbox": "heroHitbox", + "baseCrit": 5, + "baseDamage": 15 + }, + "Stats": { + "critMult": 0.2, + "damageMult": 0.5, + "HPMult": 0.1 }, "Actions": { "starting": { "weapon": "Bow", "armor": "Robes", "ring": "SmallRing", - "specialMove": "wallJump", + "specialMove": "disengage", + "specialAttack": "rapidFire", "inventorySlots": 3 }, + "executeAction": { + "subscribe": "action" + }, "forward": { "subscribe": "forward", - "beginFrame": 02, - "endFrame": 09, + "beginFrame": 5, + "endFrame": 12, "time": 0.1, - "force": 12 + "x": 1, + "y": 1, + "force": 8 }, "backward": { "subscribe": "backward", - "beginFrame": 10, - "endFrame": 17, + "beginFrame": 13, + "endFrame": 20, "time": 0.1, - "force": 12 + "x": 1, + "y": 1, + "force": 8 }, "jump": { "subscribe": "jump", - "max": 3, - "force": 8, - "rejump": 12, - "beginFrame_right": 2, - "beginFrame_left": 10, - "fallingFrame_right": 5, - "fallingFrame_left": 13, - "endFrame_right": 9, - "endFrame_left": 17, - "time": 0.1 + "max": 93, + "force": 6, + "rejump": 10, + "beginFrame_right": 49, + "beginFrame_left": 55, + "holdFrame_right": 62, + "holdFrame_left": 66, + "endFrame_right": 54, + "endFrame_left": 61, + "fallingFrame_right": 53, + "fallingFrame_left": 60, + "rejumpFrame_right": 65, + "rejumpFrame_left": 69, + "x": 1, + "y": 1, + "holdX": 1, + "holdY": 1, + "time": 0.12 }, "pickupItem": { "subscribe": "pickupItem", @@ -53,69 +76,72 @@ "time": 0.1 }, "attack": { + "subscribe": "attack" + }, + "Bow": { "subscribe": "attack", - "beginFrameBow_right": 18, - "endFrameBow_right": 22, - "beginFrameBow_left": 23, - "endFrameBow_left": 27, - "beginFrameBow_down": 28, - "endFrameBow_down": 33, - "beginFrameBow_up": 34, - "endFrameBow_up": 39, + "beginFrameRight": 21, + "endFrameRight": 25, + "beginFrameLeft": 26, + "endFrameLeft": 30, + "beginFrameRightUp": 37, + "endFrameRightUp": 42, + "beginFrameRightDown": 31, + "endFrameRightDown": 36, + "beginFrameLeftUp": 37, + "endFrameLeftUp": 42, + "beginFrameLeftDown": 31, + "endFrameLeftDown": 36, + "beginFrameLoadRight": 21, + "holdFrameLoadRight": 23, + "endFrameLoadRight": 25, + "beginFrameLoadLeft": 26, + "holdFrameLoadLeft": 28, + "endFrameLoadLeft": 30, + "loadX":1.2, + "loadY":1, + "upX":1.2, + "upY":1, + "downX":1.2, + "downY":1, + "x":1.2, + "y":1, "time": 0.05 - }, - "loadAttack_charge": { - "beginFrame_right": 0, - "holdFrame_right": 0, - "endFrame_right": 0, - "beginFrame_left": 0, - "holdFrame_left": 0, - "endFrame_left": 0, - "time": 0.1 - }, - "loadAttack_done": { - "beginFrame_right": 0, - "endFrame_right": 0, - "beginFrame_left": 0, - "endFrame_left": 0, - "time": 0.1 - }, + }, + "Dagger": { + "beginFrameRight": 21, + "endFrameRight": 25, + "beginFrameLeft": 26, + "endFrameLeft": 30, + "beginFrameRightUp": 37, + "endFrameRightUp": 42, + "beginFrameRightDown": 31, + "endFrameRightDown": 36, + "beginFrameLeftUp": 37, + "endFrameLeftUp": 42, + "beginFrameLeftDown": 31, + "endFrameLeftDown": 36, + "beginFrameLoadRight": 21, + "holdFrameLoadRight": 23, + "endFrameLoadRight": 25, + "beginFrameLoadLeft": 26, + "holdFrameLoadLeft": 28, + "endFrameLoadLeft": 30, + "loadX":1, + "loadY":1, + "upX":1, + "upY":1, + "downX":1, + "downY":1, + "x":1, + "y":1, + "time": 0.05 + }, "specialMove": { "subscribe": "specialmove" }, - "dash": { - "cooldown": 1, - "dashSpeed": 30, - "uptime": 0.15, - "time": 0.1 - }, - "disengage": { - "cooldown": 1, - "disengageSpeed": 30, - "uptime": 0.1, - "time": 0.1 - }, - "charge": { - "cooldown": 1, - "chargeSpeed": 20, - "uptime": 1 - }, - "stomp": { - "cooldown": 0, - "stompSpeed": 50 - }, - "blink": { - "cooldown": 0, - "blinkRange": 4 - }, - "wallJump": { - "maxJump": 1, - "force": 6 - }, - "shunpo": { - "damageScale":2, - "range":10, - "cooldown":15 + "specialAttack": { + "subscribe": "specialattack" }, "down": { "subscribe": "down" @@ -123,18 +149,28 @@ "up": { "subscribe": "up" }, + "map": { + "subscribe": "map" + }, + "deleteMap": { + "subscribe": "deleteMap" + }, "breath": { "beginFrame_right": 0, - "endFrame_right": 0, - "beginFrame_left": 1, - "endFrame_left": 1, + "endFrame_right": 1, + "beginFrame_left": 2, + "x": 1, + "y": 1, + "endFrame_left": 3, "time": 0.3 }, "takeDamage": { - "beginFrame_right": 0, - "endFrame_right": 0, - "beginFrame_left": 0, - "endFrame_left": 0, + "beginFrame_right": 43, + "endFrame_right": 44, + "beginFrame_left": 46, + "endFrame_left": 47, + "x": 1, + "y": 1, "time": 0.1 }, "death": { diff --git a/Resources/Elements/Armors/Armor_000.json b/Resources/Elements/Armors/Armor_000.json @@ -0,0 +1,17 @@ +{ + "infos": { + "name": "Armor_000", + "displayName": "Stick Armor", + "flavor": "Hey look, its a ARMOR.\nA pretty shitty one actually...", + "price": 10, + "sprites": "Resources/Images/Armors/Armor_000.png", + "lootLevel": 1, + "starterLevel": 1 + }, + "bonus": { + "hpBuff": 0, + "dmgReduc": 1, + "bonusSpeed": 2, + "bonusDmg": 5 + } +} diff --git a/Resources/Elements/Armors/Armor_001.json b/Resources/Elements/Armors/Armor_001.json @@ -0,0 +1,17 @@ +{ + "infos": { + "name": "Armor_001", + "displayName": "Light Armor", + "flavor": "Legends pretend it can\nprotect its user", + "price": 15, + "sprites": "Resources/Images/Armors/Armor_001.png", + "lootLevel": 2, + "starterLevel": 2 + }, + "bonus": { + "hpBuff": 10, + "dmgReduc": 0, + "bonusSpeed": 0, + "bonusDmg": 0 + } +} diff --git a/Resources/Elements/Armors/Armor_002.json b/Resources/Elements/Armors/Armor_002.json @@ -0,0 +1,17 @@ +{ + "infos": { + "name": "Armor_002", + "displayName": "Solid Armor", + "flavor": "Looks like this thing is an armor.\nMaybe.", + "price": 20, + "sprites": "Resources/Images/Armors/Armor_002.png", + "lootLevel": 3, + "starterLevel": 3 + }, + "bonus": { + "hpBuff": 50, + "dmgReduc": 0, + "bonusSpeed": 0, + "bonusDmg": 0 + } +} diff --git a/Resources/Elements/Armors/Armor_003.json b/Resources/Elements/Armors/Armor_003.json @@ -0,0 +1,16 @@ +{ + "infos": { + "name": "Armor_003", + "displayName": "Paper Armor", + "flavor": "It's already teared apart", + "price": 10, + "sprites": "Resources/Images/Armors/Armor_003.png", + "lootLevel": 1 + }, + "bonus": { + "hpBuff": 0, + "dmgReduc": 1, + "bonusSpeed": 3, + "bonusDmg": 0 + } +} diff --git a/Resources/Elements/Armors/Armor_004.json b/Resources/Elements/Armors/Armor_004.json @@ -0,0 +1,16 @@ +{ + "infos": { + "name": "Armor_004", + "displayName": "Wool Armor", + "flavor": "The sheep could have killed\nyou easily", + "price": 10, + "sprites": "Resources/Images/Armors/Armor_004.png", + "lootLevel": 2 + }, + "bonus": { + "hpBuff": 20, + "dmgReduc": 2, + "bonusSpeed": 2, + "bonusDmg": 5 + } +} diff --git a/Resources/Elements/Armors/Armor_005.json b/Resources/Elements/Armors/Armor_005.json @@ -0,0 +1,16 @@ +{ + "infos": { + "name": "Armor_005", + "displayName": "Spiked Armor", + "flavor": "It hurts enemies, but you too", + "price": 10, + "sprites": "Resources/Images/Armors/Armor_005.png", + "lootLevel": 3 + }, + "bonus": { + "hpBuff": 0, + "dmgReduc": 5, + "bonusSpeed": 1, + "bonusDmg": 15 + } +} diff --git a/Resources/Elements/Armors/Armor_006.json b/Resources/Elements/Armors/Armor_006.json @@ -0,0 +1,17 @@ +{ + "infos": { + "name": "Armor_006", + "displayName": "Stick Armor", + "flavor": "Hey look, its a ARMOR.\nA pretty shitty one actually...", + "price": 10, + "sprites": "Resources/Images/Armors/Armor_000.png", + "lootLevel": 1, + "starterLevel": 1 + }, + "bonus": { + "hpBuff": 0, + "dmgReduc": 1, + "bonusSpeed": 2, + "bonusDmg": 5 + } +} diff --git a/Resources/Elements/Armors/Armor_007.json b/Resources/Elements/Armors/Armor_007.json @@ -0,0 +1,17 @@ +{ + "infos": { + "name": "Armor_007", + "displayName": "Stick Armor", + "flavor": "Hey look, its a ARMOR.\nA pretty shitty one actually...", + "price": 10, + "sprites": "Resources/Images/Armors/Armor_000.png", + "lootLevel": 1, + "starterLevel": 1 + }, + "bonus": { + "hpBuff": 0, + "dmgReduc": 1, + "bonusSpeed": 2, + "bonusDmg": 5 + } +} diff --git a/Resources/Elements/Armors/ChestArmor.json b/Resources/Elements/Armors/ChestArmor.json @@ -1,13 +0,0 @@ -{ - "infos": { - "name": "ChestArmor", - "flavor": "Hey look, its a ARMOR.\nA pretty shitty one actually...", - "lvlRequired": 1, - "sprites": "Resources/Images/Armors/ChestArmor.png", - "lootLevel": 1 - }, - "bonus": { - "hpBuff": 25, - "manaBuff": 0 - } -} diff --git a/Resources/Elements/Armors/Robes.json b/Resources/Elements/Armors/Robes.json @@ -1,13 +0,0 @@ -{ - "infos": { - "name": "Robes", - "flavor": "Hey look, its a ARMOR.\nA pretty shitty one actually...", - "lvlRequired": 1, - "sprites": "Resources/Images/Armors/Robes.png", - "lootLevel": 1 - }, - "bonus": { - "hpBuff": 50, - "manaBuff": 25 - } -} diff --git a/Resources/Elements/Armors/SomeArmor.json b/Resources/Elements/Armors/SomeArmor.json @@ -1,13 +0,0 @@ -{ - "infos": { - "name": "SomeArmor", - "flavor": "Look like this thing is an Armor.\nMaybe.", - "lvlRequired": 1, - "sprites": "Resources/Images/Armors/SomeArmor.png", - "lootLevel": 1 - }, - "bonus": { - "hpBuff": 25, - "manaBuff": 0 - } -} diff --git a/Resources/Elements/Bosses/Boss0.json b/Resources/Elements/Bosses/Boss0.json @@ -0,0 +1,43 @@ +{ + "infos": { + "name": "Ryad's Sister", + "hp": 1000, + "maxHP": 1000, + "sprites": "Resources/Images/Boss/Boss1/boss_000.png", + "size": 4, + "hitbox": "circle", + "type": "Boss" + }, + "Actions": { + "breath": { + "beginFrame_right": 0, + "beginFrame_left": 0, + "endFrame_right": 0, + "endFrame_left": 0, + "beginFrame": 1, + "endFrame": 5, + "time": 0.2, + "x": 4, + "y": 4 + }, + "jump": { + "beginFrame": 6, + "endFrame": 10, + "time": 0.1, + "x": 4, + "y": 4, + "fallingFrame_right":1, + "fallingFrame_left":1 + }, + "hit": { + "beginFrame": 1, + "endFrame": 5, + "time": 0.1 + }, + "death": { + "beginFrame": 14, + "endFrame": 26, + "time": 0.1 + } + } +} diff --git a/Resources/Elements/Dealer.json b/Resources/Elements/Dealer.json @@ -2,7 +2,7 @@ "infos": { "name": "Dealer", "id": 0, - "talk":"Press key to drug yourself\nGood and bad effect", + "talk":"Press R to drug yourself\nGood and bad effect", "sprites": "Resources/Images/Dealer/dealer_000.png", "size": 1.3, "HP": 75, @@ -13,11 +13,15 @@ "breath": { "beginFrame": 0, "endFrame": 2, + "x":1, + "y":1, "time": 0.3 }, "give": { "beginFrame": 3, "endFrame": 5, + "x":1, + "y":1, "time": 0.3 } } diff --git a/Resources/Elements/Drugs/Cocaine.json b/Resources/Elements/Drugs/Cocaine.json @@ -2,11 +2,8 @@ "infos": { "name": "Cocaine", "id": 0, - "flavor": "This cocaine gives you more damage\nAnd will increase your speed\n ...a lot.", - "sprites": "Resources/Images/gold.png" - }, - "bonus": { - "damage": 25, - "speed": 50 + "flavor": "This cocaine increase your speed\nAnd will decrease it\n ...a lot.", + "sprites": "Resources/Images/gold.png", + "effect": 1 } } diff --git a/Resources/Elements/Drugs/Mdma.json b/Resources/Elements/Drugs/Mdma.json @@ -0,0 +1,9 @@ +{ + "infos": { + "name": "Mdma", + "id": 0, + "flavor": "Enemies will not attack you!\nAnd you will feel lost.", + "sprites": "Resources/Images/gold.png", + "effect": 2 + } +} diff --git a/Resources/Elements/Drugs/Morphine.json b/Resources/Elements/Drugs/Morphine.json @@ -0,0 +1,9 @@ +{ + "infos": { + "name": "Morphine", + "id": 0, + "flavor": "You're invincible!\nAnd you loose some hp.", + "sprites": "Resources/Images/gold.png", + "effect": 25 + } +} diff --git a/Resources/Elements/Drugs/Mushroom.json b/Resources/Elements/Drugs/Mushroom.json @@ -0,0 +1,9 @@ +{ + "infos": { + "name": "Mushroom", + "id": 0, + "flavor": "Pet you\nNot petting you.", + "sprites": "Resources/Images/gold.png", + "effect": 1 + } +} diff --git a/Resources/Elements/Drugs/Pot.json b/Resources/Elements/Drugs/Pot.json @@ -2,11 +2,8 @@ "infos": { "name": "Pot", "id": 0, - "flavor": "This make you invincible\nAnd make you puke\n...a lot", - "sprites": "Resources/Images/gold.png" - }, - "bonus": { - "dmg": 2, - "puke": 30 - } + "flavor": "Your DPS is increased!\nAnd decreased, a lot.", + "sprites": "Resources/Images/gold.png", + "effect": 2 + } } diff --git a/Resources/Elements/Enemies/Enemy.json b/Resources/Elements/Enemies/Enemy.json @@ -1,43 +0,0 @@ -{ - "infos": { - "name": "Enemy", - "id": 1, - "HP": 10, - "sprites": "Resources/Images/Enemy/enemy_000.png", - "size": 1.3, - "maxSpeed": 5, - "hitboxType": "special", - "hitbox": "enemyHitbox", - "level": 1, - "flying": false - }, - "Actions": { - "breath": { - "beginFrame_right": 1, - "endFrame_right": 4, - "beginFrame_left": 1, - "endFrame_left": 4, - "time": 0.1 - }, - "jump": { - "beginFrame": 1, - "endFrame": 4, - "time": 0.1 - }, - "loot": { - "consumableRate": 50, - "equipmentRate": 25, - "HPReward": 25, - "XPReward": 20, - "EqReward": 1 - }, - "death": { - "newSprites": "Resources/Images/Explosion/explode_000.png", - "beginFrame": 0, - "endFrame": 5, - "size": 2, - "time": 0.1 - } - } -} - diff --git a/Resources/Elements/Enemies/Enemy2.json b/Resources/Elements/Enemies/Enemy2.json @@ -1,55 +0,0 @@ -{ - "infos": { - "name": "Enemy2", - "id": 1, - "HP": 10, - "sprites": "Resources/Images/Enemy2/enemy2_000.png", - "size": 1.3, - "maxSpeed": 8, - "hitboxType": "special", - "hitbox": "enemyHitbox", - "level": 2, - "flying": true - }, - "Actions": { - "breath": { - "beginFrame_right": 0, - "endFrame_right": 6, - "beginFrame_left": 0, - "endFrame_left": 6, - "time": 0.05 - }, - "jump": { - "beginFrame": 1, - "endFrame": 4, - "time": 0.1 - }, - "loot": { - "consumableRate": 50, - "equipmentRate": 25, - "HPReward": 25, - "XPReward": 20, - "EqReward": 2 - }, - "death": { - "newSprites": "Resources/Images/Explosion/explode_000.png", - "beginFrame": 0, - "endFrame": 5, - "size": 2, - "time": 0.1 - }, - "forward": { - "beginFrame": 0, - "endFrame": 6, - "time": 0.05, - "force": 3 - }, - "backward": { - "beginFrame": 0, - "endFrame": 6, - "time": 0.05, - "force": 3 - } - - } -} diff --git a/Resources/Elements/Enemies/EnemyFly_000.json b/Resources/Elements/Enemies/EnemyFly_000.json @@ -0,0 +1,67 @@ +{ + "infos": { + "name": "EnemyFly_000", + "id": 1, + "maxHP": 10, + "sprites": "Resources/Images/Enemy/EnemyFly_000/enemy_000.png", + "size": 1.3, + "maxSpeed": 8, + "hitboxType": "special", + "hitbox": "enemyHitbox", + "level": 0, + "flying": true, + "damage": "25" + }, + "Actions": { + "breath": { + "beginFrame": 1, + "endFrame": 4, + "beginFrame_right": 0, + "endFrame_right": 6, + "beginFrame_left": 0, + "endFrame_left": 6, + "x": 1, + "y": 1, + "time": 0.05 + }, + "jump": { + "beginFrame_right": 1, + "beginFrame": 1, + "endFrame": 4, + "endFrame_right": 4, + "beginFrame_left": 1, + "endFrame_left": 4, + "fallingFrame_right":1, + "fallingFrame_left":1, + "x":1, + "y":1, + "time": 0.1 + }, + "loot": { + "consumableRate": 50, + "equipmentRate": 25, + "HPReward": 25, + "XPReward": 20, + "EqReward": 2 + }, + "death": { + "newSprites": "Resources/Images/Explosion/explode_000.png", + "beginFrame": 0, + "endFrame": 5, + "size": 2, + "time": 0.1 + }, + "forward": { + "beginFrame": 0, + "endFrame": 6, + "time": 0.05, + "force": 3 + }, + "backward": { + "beginFrame": 0, + "endFrame": 6, + "time": 0.05, + "force": 3 + } + } +} diff --git a/Resources/Elements/Enemies/EnemyFly_001.json b/Resources/Elements/Enemies/EnemyFly_001.json @@ -0,0 +1,68 @@ +{ + "infos": { + "name": "EnemyFly_001", + "id": 1, + "maxHP": 10, + "sprites": "Resources/Images/Enemy/EnemyFly_001/enemy_000.png", + "size": 1.3, + "maxSpeed": 5, + "hitboxType": "special", + "hitbox": "enemyHitbox", + "level": 1, + "flying": true, + "damage": "20" + }, + "Actions": { + "breath": { + "beginFrame": 1, + "endFrame": 4, + "beginFrame_right": 1, + "endFrame_right": 4, + "beginFrame_left": 1, + "endFrame_left": 4, + "x": 1, + "y": 1, + "time": 0.1 + }, + "jump": { + "beginFrame": 1, + "endFrame": 4, + "beginFrame_right": 1, + "endFrame_right": 4, + "beginFrame_left": 1, + "endFrame_left": 4, + "fallingFrame_right":1, + "fallingFrame_left":1, + "x": 1, + "y": 1, + "time": 0.1 + }, + "loot": { + "consumableRate": 50, + "equipmentRate": 25, + "HPReward": 25, + "XPReward": 20, + "EqReward": 1 + }, + "death": { + "newSprites": "Resources/Images/Explosion/explode_000.png", + "beginFrame": 0, + "endFrame": 5, + "size": 2, + "time": 0.1 + }, + "forward": { + "beginFrame": 0, + "endFrame": 6, + "time": 0.05, + "force": 3 + }, + "backward": { + "beginFrame": 0, + "endFrame": 6, + "time": 0.05, + "force": 3 + } + } +} + diff --git a/Resources/Elements/Enemies/EnemyFly_002.json b/Resources/Elements/Enemies/EnemyFly_002.json @@ -0,0 +1,68 @@ +{ + "infos": { + "name": "EnemyFly_002", + "id": 1, + "maxHP": 10, + "sprites": "Resources/Images/Enemy/EnemyFly_002/enemy_000.png", + "size": 1.3, + "maxSpeed": 8, + "hitboxType": "special", + "hitbox": "enemyHitbox", + "level": 2, + "flying": true, + "damage": "25" + }, + "Actions": { + "breath": { + "beginFrame": 1, + "endFrame": 4, + "beginFrame_right": 0, + "endFrame_right": 6, + "beginFrame_left": 0, + "endFrame_left": 6, + "x": 1, + "y": 1, + "time": 0.05 + }, + "jump": { + "beginFrame": 1, + "endFrame": 4, + "beginFrame_right": 1, + "endFrame_right": 4, + "beginFrame_left": 1, + "endFrame_left": 4, + "fallingFrame_right":1, + "fallingFrame_left":1, + "x":1, + "y":1, + "time": 0.1 + }, + "loot": { + "consumableRate": 50, + "equipmentRate": 25, + "HPReward": 25, + "XPReward": 20, + "EqReward": 2 + }, + "death": { + "newSprites": "Resources/Images/Explosion/explode_000.png", + "beginFrame": 0, + "endFrame": 5, + "size": 2, + "time": 0.1 + }, + "forward": { + "beginFrame": 0, + "endFrame": 6, + "time": 0.05, + "force": 3 + }, + "backward": { + "beginFrame": 0, + "endFrame": 6, + "time": 0.05, + "force": 3 + } + + } +} diff --git a/Resources/Elements/Enemies/EnemyGround_000.json b/Resources/Elements/Enemies/EnemyGround_000.json @@ -0,0 +1,68 @@ +{ + "infos": { + "name": "EnemyGround_000", + "id": 1, + "maxHP": 10, + "sprites": "Resources/Images/Enemy/EnemyGround_000/enemy_000.png", + "size": 1.3, + "maxSpeed": 5, + "hitboxType": "special", + "hitbox": "enemyHitbox", + "level": 0, + "flying": false, + "damage": "20" + }, + "Actions": { + "breath": { + "beginFrame": 1, + "endFrame": 4, + "beginFrame_right": 1, + "endFrame_right": 4, + "beginFrame_left": 1, + "endFrame_left": 4, + "x": 1, + "y": 1, + "time": 0.1 + }, + "jump": { + "beginFrame": 1, + "endFrame": 4, + "beginFrame_right": 1, + "endFrame_right": 4, + "beginFrame_left": 1, + "endFrame_left": 4, + "fallingFrame_right":1, + "fallingFrame_left":1, + "x": 1, + "y": 1, + "time": 0.1 + }, + "forward": { + "beginFrame": 0, + "endFrame": 4, + "time": 0.1, + "force": 3 + }, + "backward": { + "beginFrame": 0, + "endFrame": 4, + "time": 0.1, + "force": 3 + }, + "loot": { + "consumableRate": 50, + "equipmentRate": 25, + "HPReward": 25, + "XPReward": 20, + "EqReward": 1 + }, + "death": { + "newSprites": "Resources/Images/Explosion/explode_000.png", + "beginFrame": 0, + "endFrame": 5, + "size": 2, + "time": 0.1 + } + } +} + diff --git a/Resources/Elements/Enemies/EnemyGround_001.json b/Resources/Elements/Enemies/EnemyGround_001.json @@ -0,0 +1,68 @@ +{ + "infos": { + "name": "EnemyGround_001", + "id": 1, + "maxHP": 10, + "sprites": "Resources/Images/Enemy/EnemyGround_001/enemy_000.png", + "size": 1.3, + "maxSpeed": 5, + "hitboxType": "special", + "hitbox": "enemyHitbox", + "level": 1, + "flying": false, + "damage": "20" + }, + "Actions": { + "breath": { + "beginFrame": 1, + "endFrame": 4, + "beginFrame_right": 1, + "endFrame_right": 4, + "beginFrame_left": 1, + "endFrame_left": 4, + "x": 1, + "y": 1, + "time": 0.1 + }, + "jump": { + "beginFrame": 1, + "endFrame": 4, + "beginFrame_right": 1, + "endFrame_right": 4, + "beginFrame_left": 1, + "endFrame_left": 4, + "fallingFrame_right":1, + "fallingFrame_left":1, + "x": 1, + "y": 1, + "time": 0.1 + }, + "forward": { + "beginFrame": 0, + "endFrame": 4, + "time": 0.1, + "force": 3 + }, + "backward": { + "beginFrame": 0, + "endFrame": 4, + "time": 0.1, + "force": 3 + }, + "loot": { + "consumableRate": 50, + "equipmentRate": 25, + "HPReward": 25, + "XPReward": 20, + "EqReward": 1 + }, + "death": { + "newSprites": "Resources/Images/Explosion/explode_000.png", + "beginFrame": 0, + "endFrame": 5, + "size": 2, + "time": 0.1 + } + } +} + diff --git a/Resources/Elements/Enemies/EnemyGround_002.json b/Resources/Elements/Enemies/EnemyGround_002.json @@ -0,0 +1,68 @@ +{ + "infos": { + "name": "EnemyGround_002", + "id": 1, + "maxHP": 10, + "sprites": "Resources/Images/Enemy/EnemyGround_002/enemy_000.png", + "size": 1.3, + "maxSpeed": 5, + "hitboxType": "special", + "hitbox": "enemyHitbox", + "level": 2, + "flying": false, + "damage": "20" + }, + "Actions": { + "breath": { + "beginFrame": 1, + "endFrame": 4, + "beginFrame_right": 1, + "endFrame_right": 4, + "beginFrame_left": 1, + "endFrame_left": 4, + "x": 1, + "y": 1, + "time": 0.1 + }, + "jump": { + "beginFrame": 1, + "endFrame": 4, + "beginFrame_right": 1, + "endFrame_right": 4, + "beginFrame_left": 1, + "endFrame_left": 4, + "fallingFrame_right":1, + "fallingFrame_left":1, + "x": 1, + "y": 1, + "time": 0.1 + }, + "forward": { + "beginFrame": 0, + "endFrame": 4, + "time": 0.1, + "force": 3 + }, + "backward": { + "beginFrame": 0, + "endFrame": 4, + "time": 0.1, + "force": 3 + }, + "loot": { + "consumableRate": 50, + "equipmentRate": 25, + "HPReward": 25, + "XPReward": 20, + "EqReward": 1 + }, + "death": { + "newSprites": "Resources/Images/Explosion/explode_000.png", + "beginFrame": 0, + "endFrame": 5, + "size": 2, + "time": 0.1 + } + } +} + diff --git a/Resources/Elements/MenuCharacter.json b/Resources/Elements/MenuCharacter.json @@ -13,14 +13,14 @@ "beginFrame": 0, "endFrame": 7, "time": 0.1, - "force": 12 + "force": 20 }, "backward": { "subscribe": "backward", "beginFrame": 8, "endFrame": 15, "time": 0.1, - "force": 12 + "force": 20 }, "breath": { "beginFrame_right": 18, @@ -34,6 +34,9 @@ }, "up": { "subscribe": "up" + }, + "jump": { + "subscribe": "jump" } } } diff --git a/Resources/Elements/Rings/NiceRing.json b/Resources/Elements/Rings/NiceRing.json @@ -1,10 +0,0 @@ -{ - "infos": { - "name": "NiceRing", - "flavor": "Hey look, its a FUCKING RING.\nA pretty shitty one actually...", - "lvlRequired": 1, - "sprites": "Resources/Images/Rings/NiceRing.png", - "lootLevel": 1, - "bonus": {} - } -} diff --git a/Resources/Elements/Rings/Ring_000.json b/Resources/Elements/Rings/Ring_000.json @@ -0,0 +1,17 @@ +{ + "infos": { + "name": "Ring_000", + "displayName": "Ring of lack of ideas", + "flavor": "Hey look, its a FUCKING RING.\nFUCK YOU TOO IM NOT A DESIGNER", + "price": 10, + "sprites": "Resources/Images/Rings/Ring_000.png", + "lootLevel": 1, + "starterLevel": 1 + }, + "bonus": { + "hpBuff": 0, + "dmgReduc": 1, + "bonusSpeed": 2, + "bonusDmg": 5 + } +} diff --git a/Resources/Elements/Rings/Ring_001.json b/Resources/Elements/Rings/Ring_001.json @@ -0,0 +1,17 @@ +{ + "infos": { + "name": "Ring_001", + "displayName": "Ring of Union", + "flavor": "Legends says you can wear it\nBut it does nothing", + "price": 15, + "sprites": "Resources/Images/Rings/Ring_001.png", + "lootLevel": 2, + "starterLevel": 2 + }, + "bonus": { + "hpBuff": 0, + "dmgReduc": 0, + "bonusSpeed": 0, + "bonusDmg": 0 + } +} diff --git a/Resources/Elements/Rings/Ring_002.json b/Resources/Elements/Rings/Ring_002.json @@ -0,0 +1,17 @@ +{ + "infos": { + "name": "Ring_002", + "displayName": "Ring of Boredom", + "price": 20, + "flavor": "A pretty shitty one actually...", + "sprites": "Resources/Images/Rings/Ring_002.png", + "lootLevel": 3, + "starterLevel": 3 + }, + "bonus": { + "hpBuff": 0, + "dmgReduc": 0, + "bonusSpeed": 0, + "bonusDmg": 0 + } +} diff --git a/Resources/Elements/Rings/Ring_003.json b/Resources/Elements/Rings/Ring_003.json @@ -0,0 +1,16 @@ +{ + "infos": { + "name": "Ring_003", + "displayName": "Thorns Ring", + "flavor": "Not really enjoyable", + "price": 10, + "sprites": "Resources/Images/Rings/Ring_000.png", + "lootLevel": 1 + }, + "bonus": { + "hpBuff": 0, + "dmgReduc": 1, + "bonusSpeed": 2, + "bonusDmg": 5 + } +} diff --git a/Resources/Elements/Rings/Ring_004.json b/Resources/Elements/Rings/Ring_004.json @@ -0,0 +1,16 @@ +{ + "infos": { + "name": "Ring_004", + "displayName": "Sacred Ring", + "flavor": "A gift from the church", + "price": 10, + "sprites": "Resources/Images/Rings/Ring_004.png", + "lootLevel": 2 + }, + "bonus": { + "hpBuff": 0, + "dmgReduc": 1, + "bonusSpeed": 2, + "bonusDmg": 5 + } +} diff --git a/Resources/Elements/Rings/Ring_005.json b/Resources/Elements/Rings/Ring_005.json @@ -0,0 +1,16 @@ +{ + "infos": { + "name": "Ring_005", + "displayName": "Ringing Ring", + "flavor": "Answer the damn phone", + "price": 10, + "sprites": "Resources/Images/Rings/Ring_005.png", + "lootLevel": 3 + }, + "bonus": { + "hpBuff": 0, + "dmgReduc": 1, + "bonusSpeed": 2, + "bonusDmg": 5 + } +} diff --git a/Resources/Elements/Rings/Ring_006.json b/Resources/Elements/Rings/Ring_006.json @@ -0,0 +1,17 @@ +{ + "infos": { + "name": "Ring_006", + "displayName": "Ring of lack of ideas", + "flavor": "Hey look, its a FUCKING RING.\nFUCK YOU TOO IM NOT A DESIGNER", + "price": 10, + "sprites": "Resources/Images/Rings/Ring_000.png", + "lootLevel": 1, + "starterLevel": 1 + }, + "bonus": { + "hpBuff": 0, + "dmgReduc": 1, + "bonusSpeed": 2, + "bonusDmg": 5 + } +} diff --git a/Resources/Elements/Rings/Ring_007.json b/Resources/Elements/Rings/Ring_007.json @@ -0,0 +1,17 @@ +{ + "infos": { + "name": "Ring_007", + "displayName": "Infiltrator Ring", + "flavor": "Yames bonds ring", + "price": 10, + "sprites": "Resources/Images/Rings/Ring_000.png", + "lootLevel": 1, + "starterLevel": 1 + }, + "bonus": { + "hpBuff": 0, + "dmgReduc": 1, + "bonusSpeed": 2, + "bonusDmg": 5 + } +} diff --git a/Resources/Elements/Rings/SmallRing.json b/Resources/Elements/Rings/SmallRing.json @@ -1,10 +0,0 @@ -{ - "infos": { - "name": "SmallRing", - "flavor": "Hey look, its a FUCKING RING.\nA pretty shitty one actually...", - "lvlRequired": 1, - "sprites": "Resources/Images/Rings/SmallRing.png", - "lootLevel": 1, - "bonus": {} - } -} diff --git a/Resources/Elements/Rings/SomeRing.json b/Resources/Elements/Rings/SomeRing.json @@ -1,10 +0,0 @@ -{ - "infos": { - "name": "SomeRing", - "lvlRequired": 1, - "sprites": "Resources/Images/Rings/SomeRing.png", - "lootLevel": 2, - "flavor": "Some trinket", - "bonus": {} - } -} diff --git a/Resources/Elements/Skills.json b/Resources/Elements/Skills.json @@ -0,0 +1,65 @@ +{ + "1": { + "Warrior": [ + "charge", + "dash", + "stomp" + ], + "Mage" : [ + "blink", + "fly", + "totem" + ], + "Archer": [ + "shunpo", + "wallJump", + "disengage" + ] + }, + "2" : { + "Warrior": [ + "whirlwind", + "shockwave", + "throw_weapon" + ], + "Mage": [ + "ice_projectile", + "fire_projectile", + "shield" + ], + "Archer": [ + "rapid_fire", + "smoke_cloud", + "execute" + ] + }, + "3": { + "Warrior": [ + "passive_sword", + "passive_hammer", + "passive_spear" + ], + "Mage": [ + "passive_ice", + "passive_fire", + "passive_thunder" + ], + "Archer": [ + "passive_bow", + "passive_dague", + "passive_both" + ] + }, + "4": { + "Warrior": [ + "berserk" + ], + "Mage": [ + "ulti_mage" + ], + "Archer": [ + "ulti_dagger", + "ulti_bow" + ] + } +} diff --git a/Resources/Elements/SpecialAttack.json b/Resources/Elements/SpecialAttack.json @@ -0,0 +1,47 @@ +{ + "whirlwind": { + "subscribe": "specialattack", + "usable": "warrior", + "cooldown": 6, + "time": 0.1, + "uptime": 2, + "beginFrame": 36, + "endFrame": 43, + "time": 0.1, + "x":2, + "y":1, + "description": "Wiggle wiggle wiggle", + "displayName": "WhirlWind" + }, + "shockwave": { + "subscribe": "specialattack", + "usable": "warrior", + "cooldown": 1, + "damage": 25, + "beginFrame_right": 99, + "endFrame_right": 101, + "beginFrame_left": 105, + "endFrame_left": 107, + "time": 0.1, + "x":2, + "y":2, + "description": "Fall with force on the ground,\nMake a shockwave around you", + "displayName": "Shockwave" + }, + "rapidFire": { + "subscribe": "specialattack", + "usable": "archer", + "cooldown": 10, + "uptime": 2, + "interval": 0.2, + "beginFrame_right": 21, + "endFrame_right": 25, + "beginFrame_left": 26, + "endFrame_left": 30, + "time": 0.05, + "x":1, + "y":1, + "description": "Attack is temporarly more rapid.", + "displayName": "Rapid Fire" + } +} diff --git a/Resources/Elements/SpecialMoves.json b/Resources/Elements/SpecialMoves.json @@ -0,0 +1,99 @@ +{ + "dash": { + "subscribe": "specialmove", + "usable": "warrior", + "cooldown": 1, + "dashSpeed": 30, + "uptime": 0.15, + "beginFrame_right": 74, + "endFrame_right": 78, + "beginFrame_left": 79, + "endFrame_left": 83, + "time": 0.05, + "description": "A short-distance dash", + "displayName": "Dash" + }, + "charge": { + "subscribe": "specialmove", + "usable": "warrior", + "cooldown": 1, + "chargeSpeed": 20, + "time": 0.1, + "uptime": 1, + "description": "Charge to an enemy.\nVery men, Much damage", + "displayName": "Charge" + }, + "stomp": { + "subscribe": "specialmove", + "usable": "warrior", + "cooldown": 0, + "stompSpeed": 50, + "beginFrame_right": 84, + "endFrame_right": 87, + "beginFrame_left": 84, + "endFrame_left": 87, + "time": 0.05, + "description": "Fall with force on the ground", + "displayName": "Stomp" + }, + "blink": { + "subscribe": "specialmove", + "usable": "mage", + "time": 0.1, + "cooldown": 4, + "blinkRange": 4, + "description": "Short-range teleport", + "displayName": "Blink" + }, + "fly": { + "subscribe": "specialmove", + "usable": "mage", + "force": 4, + "beginFrame_right": 44, + "beginFrame_left": 44, + "fallingFrame_right": 44, + "fallingFrame_left": 44, + "endFrame_right": 44, + "endFrame_left": 44, + "time": 0.1, + "description": "Flying instead of jump", + "displayName": "Fly" + }, + "totem": { + "subscribe": "specialmove", + "usable": "mage", + "sprite": "Resources/Images/totem.png", + "description": "Place your totem and re-use\nit to go back to that point", + "displayName": "Totem" + }, + "wallJump": { + "subscribe": "specialmove", + "usable": "archer", + "time": 0.1, + "maxJump": 1, + "force": 6, + "description": "Jump on walls", + "displayName": "Wall Jump" + }, + "shunpo": { + "subscribe": "specialmove", + "usable": "archer", + "damageScale": 2, + "time": 0.1, + "range": 10, + "cooldown": 1, + "description": "Select a target, and teleport/hit them", + "displayName": "Shunpo" + }, + "disengage": { + "subscribe": "specialmove", + "usable": "archer", + "cooldown": 1, + "disengageSpeed": 30, + "djump": 8, + "uptime": 0.1, + "time": 0.1, + "description": "Short range backward jump", + "displayName": "Disengage" + } +} diff --git a/Resources/Elements/Warrior.json b/Resources/Elements/Warrior.json @@ -2,28 +2,40 @@ "infos": { "name": "Warrior", "id": 0, - "HP": 75, "maxHP": 75, "mana": 80, "maxMana": 80, "sprites": "Resources/Images/Hero/hero_000.png", "size": 1.3, "hitboxType": "special", - "hitbox": "heroHitbox" + "hitbox": "heroHitbox", + "baseCrit": 2, + "baseDamage": 30 + }, + "Stats": { + "critMult": 0.2, + "damageMult": 0.5, + "HPMult": 0.1 }, "Actions": { "starting": { "weapon": "Sword", "armor": "ChestArmor", "ring": "NiceRing", - "specialMove": "totem", + "specialMove": "shunpo", + "specialAttack": "shockwave", "inventorySlots": 2 }, + "executeAction": { + "subscribe": "action" + }, "forward": { "subscribe": "forward", "beginFrame": 20, "endFrame": 27, "time": 0.1, + "x": 1, + "y": 1, "force": 8 }, "backward": { @@ -31,6 +43,8 @@ "beginFrame": 28, "endFrame": 35, "time": 0.1, + "x": 1, + "y": 1, "force": 8 }, "jump": { @@ -44,6 +58,8 @@ "fallingFrame_left": 16, "endFrame_right": 11, "endFrame_left": 19, + "x": 1, + "y": 1, "time": 0.1 }, "pickupItem": { @@ -53,86 +69,119 @@ "time": 0.1 }, "attack": { - "subscribe": "attack", - "beginFrameSword_right": 36, - "endFrameSword_right": 39, - "beginFrameSword_left": 43, - "endFrameSword_left": 40, - "beginFrameAxe_right": 88, - "endFrameAxe_right": 91, - "beginFrameAxe_left": 92, - "endFrameAxe_left": 95, - "beginFrameSword_up": 61, - "endFrameSword_up": 63, - "beginFrameSword_down": 58, - "endFrameSword_down": 60, - "time": 0.05 - }, - "loadAttack_charge": { - "beginFrame_right": 64, - "holdFrame_right": 65, - "endFrame_right": 66, - "beginFrame_left": 69, - "holdFrame_left": 70, - "endFrame_left": 71, - "time": 0.1 - }, - "loadAttack_done": { - "beginFrame_right": 66, - "endFrame_right": 68, - "beginFrame_left": 71, - "endFrame_left": 73, - "time": 0.1 - }, + "subscribe": "attack" + }, + "Sword": { + "beginFrameRight": 36, + "endFrameRight": 39, + "beginFrameLeft": 43, + "endFrameLeft": 40, + "beginFrameRightUp": 61, + "endFrameRightUp": 63, + "beginFrameRightDown": 58, + "endFrameRightDown": 60, + "beginFrameLeftUp": 120, + "endFrameLeftUp": 122, + "beginFrameLeftDown": 123, + "endFrameLeftDown": 125, + "beginFrameLoadRight": 64, + "holdFrameLoadRight": 66, + "endFrameLoadRight": 68, + "beginFrameLoadLeft": 69, + "holdFrameLoadLeft": 71, + "endFrameLoadLeft": 73, + "beginFrameChargeRight": 126, + "endFrameChargeRight": 129, + "beginFrameChargeLeft": 130, + "endFrameChargeLeft": 133, + "loadX":2, + "loadY":2, + "chargeX":2, + "chargeY":1, + "upX":1.5, + "upY":2, + "downX":1, + "downY":2.5, + "x":2, + "y":1, + "time": 0.07 + }, + "Axe": { + "subscribe": "test", + "beginFrameRight": 88, + "endFrameRight": 91, + "beginFrameLeft": 92, + "endFrameLeft": 95, + "beginFrameRightUp": 114, + "endFrameRightUp": 116, + "beginFrameRightDown": 108, + "endFrameRightDown": 110, + "beginFrameLeftUp": 117, + "endFrameLeftUp": 119, + "beginFrameLeftDown": 111, + "endFrameLeftDown": 113, + "beginFrameLoadRight": 96, + "holdFrameLoadRight": 99, + "endFrameLoadRight": 101, + "beginFrameLoadLeft": 102, + "holdFrameLoadLeft": 105, + "endFrameLoadLeft": 107, + "beginFrameChargeRight": 134, + "endFrameChargeRight": 137, + "beginFrameChargeLeft": 138, + "endFrameChargeLeft": 141, + "loadX":2, + "loadY":2, + "chargeX":2, + "chargeY":1, + "upX":1.5, + "upY":2, + "downX":1.5, + "downY":2, + "x":2, + "y":1.5, + "time": 0.07 + }, + "Spear": { + "beginFrameRight": 150, + "endFrameRight": 152, + "beginFrameLeft": 153, + "endFrameLeft": 155, + "beginFrameRightUp": 162, + "endFrameRightUp": 164, + "beginFrameRightDown": 156, + "endFrameRightDown": 158, + "beginFrameLeftUp": 165, + "endFrameLeftUp": 167, + "beginFrameLeftDown": 159, + "endFrameLeftDown": 161, + "beginFrameLoadRight": 64, + "holdFrameLoadRight": 65, + "endFrameLoadRight": 66, + "beginFrameLoadLeft": 69, + "holdFrameLoadLeft": 70, + "endFrameLoadLeft": 71, + "beginFrameChargeRight": 142, + "endFrameChargeRight": 145, + "beginFrameChargeLeft": 146, + "endFrameChargeLeft": 149, + "loadX":2, + "loadY":2, + "chargeX":3, + "chargeY":1, + "upX":1.5, + "upY":2.5, + "downX":1.5, + "downY":2.5, + "x":3, + "y":1, + "time": 0.15 + }, "specialMove": { "subscribe": "specialmove" }, - "dash": { - "cooldown": 1, - "dashSpeed": 30, - "uptime": 0.15, - "beginFrame_right": 74, - "endFrame_right": 78, - "beginFrame_left": 79, - "endFrame_left": 83, - "time": 0.05 - }, - "charge": { - "cooldown": 1, - "chargeSpeed": 20, - "uptime": 1 - }, - "stomp": { - "cooldown": 0, - "stompSpeed": 50, - "beginFrame_right": 84, - "endFrame_right": 87, - "beginFrame_left": 84, - "endFrame_left": 87, - "time": 0.1 - }, - "blink": { - "cooldown": 0, - "blinkRange": 4 - }, - "fly": { - "force": 4, - "beginFrame_right": 44, - "beginFrame_left": 44, - "fallingFrame_right": 44, - "fallingFrame_left": 44, - "endFrame_right": 44, - "endFrame_left": 44, - "time": 0.1 - }, - "wallJump": { - "maxJump": 1, - "force": 6 - }, - "shunpo": { - "damageScale": 2, - "range": 10, - "cooldown": 1 + "specialAttack": { + "subscribe": "specialattack" }, "down": { "subscribe": "down" @@ -151,6 +200,8 @@ "endFrame_right": 1, "beginFrame_left": 2, "endFrame_left": 3, + "x": 1, + "y": 1, "time": 0.3 }, "takeDamage": { diff --git a/Resources/Elements/Weapons/Axe_000.json b/Resources/Elements/Weapons/Axe_000.json @@ -0,0 +1,21 @@ +{ + "infos": { + "name": "Axe_000", + "displayName": "Sexy Axe", + "flavor": "Look at my axe\nMy axe is amazing\nGive it a lick", + "equipable": "Warrior", + "type": "Axe", + "hitbox": "SWORD", + "price": 10, + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 0.1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Axe_000.png", + "lootLevel": 1, + "starterLevel": 1 + } +} diff --git a/Resources/Elements/Weapons/Axe_001.json b/Resources/Elements/Weapons/Axe_001.json @@ -0,0 +1,21 @@ +{ + "infos": { + "name": "Axe_001", + "displayName": "Impolite Axe", + "flavor": "Hey isn't iFUCK YOUJ", + "equipable": "Warrior", + "type": "Axe", + "hitbox": "SWORD", + "price": 15, + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Axe_001.png", + "lootLevel": 2, + "starterLevel": 2 + } +} diff --git a/Resources/Elements/Weapons/Axe_002.json b/Resources/Elements/Weapons/Axe_002.json @@ -0,0 +1,21 @@ +{ + "infos": { + "name": "Axe_002", + "displayName": "Taurus Axe", + "flavor": "Built from the horns of\na bull", + "equipable": "Warrior", + "type": "Axe", + "hitbox": "SWORD", + "price": 10, + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 0.1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Axe_002.png", + "lootLevel": 3, + "starterLevel": 3 + } +} diff --git a/Resources/Elements/Weapons/Axe_003.json b/Resources/Elements/Weapons/Axe_003.json @@ -0,0 +1,20 @@ +{ + "infos": { + "name": "Axe_003", + "displayName": "Silver Axe", + "flavor": "Mostly used to kill vampires", + "equipable": "Warrior", + "type": "Axe", + "hitbox": "SWORD", + "price": 10, + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 0.1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Axe_003.png", + "lootLevel": 1 + } +} diff --git a/Resources/Elements/Weapons/Axe_004.json b/Resources/Elements/Weapons/Axe_004.json @@ -0,0 +1,21 @@ +{ + "infos": { + "name": "Axe_004", + "displayName": "Sharp-edged Axe", + "flavor": "Good stuff mate", + "equipable": "Warrior", + "type": "Axe", + "hitbox": "SWORD", + "price": 10, + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 0.1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Axe_004.png", + "lootLevel": 2 + + } +} diff --git a/Resources/Elements/Weapons/Axe_005.json b/Resources/Elements/Weapons/Axe_005.json @@ -0,0 +1,20 @@ +{ + "infos": { + "name": "Axe_005", + "displayName": "King's Axe", + "flavor": "A weapon designed for\na ruler", + "equipable": "Warrior", + "type": "Axe", + "hitbox": "SWORD", + "price": 10, + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 0.1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Axe_005.png", + "lootLevel": 3 + } +} diff --git a/Resources/Elements/Weapons/Bow.json b/Resources/Elements/Weapons/Bow.json @@ -1,19 +0,0 @@ -{ - "infos": { - "name": "Bow", - "flavor": "This bow is supposed to\nshoot arrows. Supposed.", - "type": "Bow", - "hitbox": "PROJECTILE", - "size": 0.5, - "active": 0.1, - "lvlRequired": 1, - "critRate": 5, - "damage": 2, - "pushback": 1, - "recovery": 0.5, - "attack": "ranged", - "sprites": "Resources/Images/bow.png", - "heroAnim": "sword_anim_1", - "lootLevel": 2 - } -} diff --git a/Resources/Elements/Weapons/Bow_000.json b/Resources/Elements/Weapons/Bow_000.json @@ -0,0 +1,21 @@ +{ + "infos": { + "name": "Bow_000", + "displayName": "String Bow", + "flavor": "This bow is supposed to\nshoot arrows. Supposed.", + "price": 10, + "equipable": "Archer", + "type": "Bow", + "hitbox": "PROJECTILE", + "size": 0.5, + "active": 0.1, + "critRate": 5, + "damage": 2, + "pushback": 1, + "recovery": 0.5, + "attack": "ranged", + "sprites": "Resources/Images/Weapons/Bow_000.png", + "lootLevel": 1, + "starterLevel": 1 + } +} diff --git a/Resources/Elements/Weapons/Bow_001.json b/Resources/Elements/Weapons/Bow_001.json @@ -0,0 +1,21 @@ +{ + "infos": { + "name": "Bow_001", + "displayName": "Baguette Bow", + "flavor": "Is this the infamous\nBaguette Bow?", + "type": "Bow", + "equipable": "Archer", + "hitbox": "PROJECTILE", + "size": 0.5, + "price": 15, + "active": 0.1, + "critRate": 5, + "damage": 2, + "pushback": 1, + "recovery": 0.5, + "attack": "ranged", + "sprites": "Resources/Images/Weapons/Bow_001.png", + "lootLevel": 2, + "starterLevel": 2 + } +} diff --git a/Resources/Elements/Weapons/Bow_002.json b/Resources/Elements/Weapons/Bow_002.json @@ -0,0 +1,21 @@ +{ + "infos": { + "name": "Bow_002", + "displayName": "Spiked Bow", + "flavor": "Was designed to be\nusable in close combat", + "price": 10, + "equipable": "Archer", + "type": "Bow", + "hitbox": "PROJECTILE", + "size": 0.5, + "active": 0.1, + "critRate": 5, + "damage": 2, + "pushback": 1, + "recovery": 0.5, + "attack": "ranged", + "sprites": "Resources/Images/Weapons/Bow_002.png", + "lootLevel": 3, + "starterLevel": 3 + } +} diff --git a/Resources/Elements/Weapons/Bow_003.json b/Resources/Elements/Weapons/Bow_003.json @@ -0,0 +1,20 @@ +{ + "infos": { + "name": "Bow_003", + "displayName": "Broken Bow", + "flavor": "Maybe I can stab my enemies with the arrows...?", + "price": 10, + "equipable": "Archer", + "type": "Bow", + "hitbox": "PROJECTILE", + "size": 0.5, + "active": 0.1, + "critRate": 5, + "damage": 2, + "pushback": 1, + "recovery": 0.5, + "attack": "ranged", + "sprites": "Resources/Images/Weapons/Bow_003.png", + "lootLevel": 1 + } +} diff --git a/Resources/Elements/Weapons/Bow_004.json b/Resources/Elements/Weapons/Bow_004.json @@ -0,0 +1,20 @@ +{ + "infos": { + "name": "Bow_004", + "displayName": "Makeshift Bow", + "flavor": "Is that a squirrel?", + "price": 10, + "equipable": "Archer", + "type": "Bow", + "hitbox": "PROJECTILE", + "size": 0.5, + "active": 0.1, + "critRate": 5, + "damage": 2, + "pushback": 1, + "recovery": 0.5, + "attack": "ranged", + "sprites": "Resources/Images/Weapons/Bow_004.png", + "lootLevel": 2 + } +} diff --git a/Resources/Elements/Weapons/Bow_005.json b/Resources/Elements/Weapons/Bow_005.json @@ -0,0 +1,20 @@ +{ + "infos": { + "name": "Bow_005", + "displayName": "Arbalet", + "flavor": "such damage, much wow", + "price": 10, + "equipable": "Archer", + "type": "Bow", + "hitbox": "PROJECTILE", + "size": 0.5, + "active": 0.1, + "critRate": 5, + "damage": 15, + "pushback": 1, + "recovery": 2, + "attack": "ranged", + "sprites": "Resources/Images/Weapons/Bow_005.png", + "lootLevel": 3 + } +} diff --git a/Resources/Elements/Weapons/Dagger_000.json b/Resources/Elements/Weapons/Dagger_000.json @@ -0,0 +1,21 @@ +{ + "infos": { + "name": "Dagger_000", + "displayName": "Smart Dagger", + "flavor": "So smat it doesnt want\nto hurt enemies", + "equipable": "Archer", + "type": "Dagger", + "hitbox": "SWORD", + "price": 10, + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Dagger_000.png", + "lootLevel": 1, + "starterLevel": 1 + } +} diff --git a/Resources/Elements/Weapons/Dagger_001.json b/Resources/Elements/Weapons/Dagger_001.json @@ -0,0 +1,21 @@ +{ + "infos": { + "name": "Dagger_001", + "displayName": "Shining Dagger", + "flavor": "Where does the shining comes from...?", + "type": "Dagger", + "equipable": "Archer", + "price": 15, + "hitbox": "SWORD", + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Dagger_001.png", + "lootLevel": 2, + "starterLevel": 2 + } +} diff --git a/Resources/Elements/Weapons/Dagger_002.json b/Resources/Elements/Weapons/Dagger_002.json @@ -0,0 +1,21 @@ +{ + "infos": { + "name": "Dagger_002", + "displayName": "Small Dagger", + "flavor": "For long arms", + "equipable": "Archer", + "type": "Dagger", + "hitbox": "SWORD", + "price": 10, + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Dagger_002.png", + "lootLevel": 3, + "starterLevel": 3 + } +} diff --git a/Resources/Elements/Weapons/Dagger_003.json b/Resources/Elements/Weapons/Dagger_003.json @@ -0,0 +1,20 @@ +{ + "infos": { + "name": "Dagger_003", + "displayName": "Blink Dagger", + "flavor": "Wrong game!", + "equipable": "Archer", + "type": "Dagger", + "hitbox": "SWORD", + "price": 10, + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Dagger_003.png", + "lootLevel": 1 + } +} diff --git a/Resources/Elements/Weapons/Dagger_004.json b/Resources/Elements/Weapons/Dagger_004.json @@ -0,0 +1,21 @@ +{ + "infos": { + "name": "Dagger_004", + "displayName": "Heavy Dagger", + "flavor": "Its trying to help\nbut its slowing you down", + "equipable": "Archer", + "type": "Dagger", + "hitbox": "SWORD", + "price": 10, + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Dagger_004.png", + "lootLevel": 1, + "starterLevel": 1 + } +} diff --git a/Resources/Elements/Weapons/Dagger_005.json b/Resources/Elements/Weapons/Dagger_005.json @@ -0,0 +1,20 @@ +{ + "infos": { + "name": "Dagger_005", + "displayName": "Assassin's Dagger", + "flavor": "It was planted in many famous hearts", + "equipable": "Archer", + "type": "Dagger", + "hitbox": "SWORD", + "price": 10, + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Dagger_005.png", + "lootLevel": 3 + } +} diff --git a/Resources/Elements/Weapons/Spear_000.json b/Resources/Elements/Weapons/Spear_000.json @@ -0,0 +1,21 @@ +{ + "infos": { + "name": "Spear_000", + "displayName": "Light Spear", + "flavor": "Really not heavy\nDoes it actually hurts?", + "equipable": "Warrior", + "type": "Spear", + "price": 10, + "hitbox": "SWORD", + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Spear_000.png", + "lootLevel": 1, + "starterLevel": 1 + } +} diff --git a/Resources/Elements/Weapons/Spear_001.json b/Resources/Elements/Weapons/Spear_001.json @@ -0,0 +1,21 @@ +{ + "infos": { + "name": "Spear_001", + "displayName": "Halberd", + "flavor": "This must sting...", + "type": "Spear", + "equipable": "Warrior", + "price": 15, + "hitbox": "SWORD", + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Spear_001.png", + "lootLevel": 2, + "starterLevel": 2 + } +} diff --git a/Resources/Elements/Weapons/Spear_002.json b/Resources/Elements/Weapons/Spear_002.json @@ -0,0 +1,21 @@ +{ + "infos": { + "name": "Spear_002", + "displayName": "Long Spear", + "flavor": "Used during wartimes", + "equipable": "Warrior", + "type": "Spear", + "price": 10, + "hitbox": "SWORD", + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Spear_002.png", + "lootLevel": 3, + "starterLevel": 3 + } +} diff --git a/Resources/Elements/Weapons/Spear_003.json b/Resources/Elements/Weapons/Spear_003.json @@ -0,0 +1,20 @@ +{ + "infos": { + "name": "Spear_003", + "displayName": "Wooden Spear", + "flavor": "Even the spike\nis wooden", + "equipable": "Warrior", + "type": "Spear", + "price": 10, + "hitbox": "SWORD", + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Spear_003.png", + "lootLevel": 1 + } +} diff --git a/Resources/Elements/Weapons/Spear_004.json b/Resources/Elements/Weapons/Spear_004.json @@ -0,0 +1,20 @@ +{ + "infos": { + "name": "Spear_004", + "displayName": "Carved Spear", + "flavor": "The carvings seem to\ntell a story", + "equipable": "Warrior", + "type": "Spear", + "price": 10, + "hitbox": "SWORD", + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Spear_004.png", + "lootLevel": 2 + } +} diff --git a/Resources/Elements/Weapons/Spear_005.json b/Resources/Elements/Weapons/Spear_005.json @@ -0,0 +1,20 @@ +{ + "infos": { + "name": "Spear_005", + "displayName": "Iron Spear", + "flavor": "The shaft itself is iron", + "equipable": "Warrior", + "type": "Spear", + "price": 10, + "hitbox": "SWORD", + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Spear_005.png", + "lootLevel": 3 + } +} diff --git a/Resources/Elements/Weapons/Sword.json b/Resources/Elements/Weapons/Sword.json @@ -1,38 +0,0 @@ -{ - "infos": { - "name": "Sword", - "flavor": "Hey look, its a sword.\nA pretty shitty one actually...", - "type": "Sword", - "hitbox": "SWORD", - "size": 1, - "lvlRequired": 1, - "critRate": 5, - "damage": 5, - "recovery": 1, - "pushback": 5, - "active": 0.2, - "attack": "melee", - "combo": true, - "sprites": "Resources/Images/Sword.png", - "heroAnim": "sword_anim_1", - "lootLevel": 1 - }, - "combo": { - "1": { - "damage": 10, - "particule": "entrecote", - "heroAnim": "sword_anim_2" - }, - "2": { - "damage": 100, - "specialEffect": "stunSpecial", - "heroAnim": "sword_anim_3" - } - }, - "capacities": { - "stunSpecial": { - "duration": 1, - "particule": "boom" - } - } -} diff --git a/Resources/Elements/Weapons/Sword2.json b/Resources/Elements/Weapons/Sword2.json @@ -1,38 +0,0 @@ -{ - "infos": { - "name": "Sword2", - "flavor": "It was the knife of Arthas Menethil.\nFor cutting ham.\nAnd Zombies. \nOr maybe not.", - "type": "Sword", - "hitbox": "SWORD", - "size": 1, - "lvlRequired": 1, - "critRate": 5, - "damage": 5, - "recovery": 1, - "pushback": 5, - "active": 0.2, - "attack": "melee", - "combo": true, - "sprites": "Resources/Images/Sword2.png", - "heroAnim": "sword_anim_1", - "lootLevel": 2 - }, - "combo": { - "1": { - "damage": 10, - "particule": "entrecote", - "heroAnim": "sword_anim_2" - }, - "2": { - "damage": 100, - "specialEffect": "stunSpecial", - "heroAnim": "sword_anim_3" - } - }, - "capacities": { - "stunSpecial": { - "duration": 1, - "particule": "boom" - } - } -} diff --git a/Resources/Elements/Weapons/Sword_000.json b/Resources/Elements/Weapons/Sword_000.json @@ -0,0 +1,21 @@ +{ + "infos": { + "name": "Sword_000", + "displayName": "Sharp Sword", + "flavor": "Hey look, its a sword.\nA pretty shitty one actually...", + "type": "Sword", + "equipable": "Warrior", + "price": 10, + "hitbox": "SWORD", + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Sword_000.png", + "lootLevel": 1, + "starterLevel": 1 + } +} diff --git a/Resources/Elements/Weapons/Sword_001.json b/Resources/Elements/Weapons/Sword_001.json @@ -0,0 +1,21 @@ +{ + "infos": { + "name": "Sword_001", + "displayName": "Kitchen Knife", + "flavor": "It was the Arthas Menethil's knife.\nFor cutting ham.\nAnd Zombies. \nOr maybe not.", + "equipable": "Warrior", + "type": "Sword", + "hitbox": "SWORD", + "price": 15, + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Sword_001.png", + "lootLevel": 2, + "starterLevel": 2 + } +} diff --git a/Resources/Elements/Weapons/Sword_002.json b/Resources/Elements/Weapons/Sword_002.json @@ -0,0 +1,21 @@ +{ + "infos": { + "name": "Sword_002", + "displayName": "Black Sword", + "flavor": "Enemy of the man...", + "type": "Sword", + "equipable": "Warrior", + "price": 10, + "hitbox": "SWORD", + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Sword_002.png", + "lootLevel": 3, + "starterLevel": 3 + } +} diff --git a/Resources/Elements/Weapons/Sword_003.json b/Resources/Elements/Weapons/Sword_003.json @@ -0,0 +1,20 @@ +{ + "infos": { + "name": "Sword_003", + "displayName": "Sword Hilt", + "flavor": "It's broken", + "type": "Sword", + "equipable": "Warrior", + "price": 10, + "hitbox": "SWORD", + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Sword_003.png", + "lootLevel": 1 + } +} diff --git a/Resources/Elements/Weapons/Sword_004.json b/Resources/Elements/Weapons/Sword_004.json @@ -0,0 +1,20 @@ +{ + "infos": { + "name": "Sword_004", + "displayName": "Diamond Sword", + "flavor": "There's a diamond encrusted\nin the hilt", + "type": "Sword", + "equipable": "Warrior", + "price": 10, + "hitbox": "SWORD", + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Sword_004.png", + "lootLevel": 2 + } +} diff --git a/Resources/Elements/Weapons/Sword_005.json b/Resources/Elements/Weapons/Sword_005.json @@ -0,0 +1,20 @@ +{ + "infos": { + "name": "Sword_005", + "displayName": "Cursed Sword", + "flavor": "Would the curse carry\nover to me?", + "type": "Sword", + "equipable": "Warrior", + "price": 10, + "hitbox": "SWORD", + "size": 1, + "critRate": 5, + "damage": 5, + "recovery": 1, + "pushback": 5, + "active": 0.2, + "attack": "melee", + "sprites": "Resources/Images/Weapons/Sword_005.png", + "lootLevel": 3 + } +} diff --git a/Resources/HUD/spell.png b/Resources/HUD/spell.png Binary files differ. diff --git a/Resources/Images/Archer/archer_000.png b/Resources/Images/Archer/archer_000.png Binary files differ. diff --git a/Resources/Images/Archer/archer_001.png b/Resources/Images/Archer/archer_001.png Binary files differ. diff --git a/Resources/Images/Archer/archer_002.png b/Resources/Images/Archer/archer_002.png Binary files differ. diff --git a/Resources/Images/Archer/archer_003.png b/Resources/Images/Archer/archer_003.png Binary files differ. diff --git a/Resources/Images/Archer/archer_004.png b/Resources/Images/Archer/archer_004.png Binary files differ. diff --git a/Resources/Images/Archer/archer_005.png b/Resources/Images/Archer/archer_005.png Binary files differ. diff --git a/Resources/Images/Archer/archer_006.png b/Resources/Images/Archer/archer_006.png Binary files differ. diff --git a/Resources/Images/Archer/archer_007.png b/Resources/Images/Archer/archer_007.png Binary files differ. diff --git a/Resources/Images/Archer/archer_008.png b/Resources/Images/Archer/archer_008.png Binary files differ. diff --git a/Resources/Images/Archer/archer_009.png b/Resources/Images/Archer/archer_009.png Binary files differ. diff --git a/Resources/Images/Archer/archer_010.png b/Resources/Images/Archer/archer_010.png Binary files differ. diff --git a/Resources/Images/Archer/archer_011.png b/Resources/Images/Archer/archer_011.png Binary files differ. diff --git a/Resources/Images/Archer/archer_012.png b/Resources/Images/Archer/archer_012.png Binary files differ. diff --git a/Resources/Images/Archer/archer_013.png b/Resources/Images/Archer/archer_013.png Binary files differ. diff --git a/Resources/Images/Archer/archer_014.png b/Resources/Images/Archer/archer_014.png Binary files differ. diff --git a/Resources/Images/Archer/archer_015.png b/Resources/Images/Archer/archer_015.png Binary files differ. diff --git a/Resources/Images/Archer/archer_016.png b/Resources/Images/Archer/archer_016.png Binary files differ. diff --git a/Resources/Images/Archer/archer_017.png b/Resources/Images/Archer/archer_017.png Binary files differ. diff --git a/Resources/Images/Archer/archer_018.png b/Resources/Images/Archer/archer_018.png Binary files differ. diff --git a/Resources/Images/Archer/archer_019.png b/Resources/Images/Archer/archer_019.png Binary files differ. diff --git a/Resources/Images/Archer/archer_020.png b/Resources/Images/Archer/archer_020.png Binary files differ. diff --git a/Resources/Images/Archer/archer_021.png b/Resources/Images/Archer/archer_021.png Binary files differ. diff --git a/Resources/Images/Archer/archer_022.png b/Resources/Images/Archer/archer_022.png Binary files differ. diff --git a/Resources/Images/Archer/archer_023.png b/Resources/Images/Archer/archer_023.png Binary files differ. diff --git a/Resources/Images/Archer/archer_024.png b/Resources/Images/Archer/archer_024.png Binary files differ. diff --git a/Resources/Images/Archer/archer_025.png b/Resources/Images/Archer/archer_025.png Binary files differ. diff --git a/Resources/Images/Archer/archer_026.png b/Resources/Images/Archer/archer_026.png Binary files differ. diff --git a/Resources/Images/Archer/archer_027.png b/Resources/Images/Archer/archer_027.png Binary files differ. diff --git a/Resources/Images/Archer/archer_028.png b/Resources/Images/Archer/archer_028.png Binary files differ. diff --git a/Resources/Images/Archer/archer_029.png b/Resources/Images/Archer/archer_029.png Binary files differ. diff --git a/Resources/Images/Archer/archer_030.png b/Resources/Images/Archer/archer_030.png Binary files differ. diff --git a/Resources/Images/Archer/archer_031.png b/Resources/Images/Archer/archer_031.png Binary files differ. diff --git a/Resources/Images/Archer/archer_032.png b/Resources/Images/Archer/archer_032.png Binary files differ. diff --git a/Resources/Images/Archer/archer_033.png b/Resources/Images/Archer/archer_033.png Binary files differ. diff --git a/Resources/Images/Archer/archer_034.png b/Resources/Images/Archer/archer_034.png Binary files differ. diff --git a/Resources/Images/Archer/archer_035.png b/Resources/Images/Archer/archer_035.png Binary files differ. diff --git a/Resources/Images/Archer/archer_036.png b/Resources/Images/Archer/archer_036.png Binary files differ. diff --git a/Resources/Images/Archer/archer_037.png b/Resources/Images/Archer/archer_037.png Binary files differ. diff --git a/Resources/Images/Archer/archer_038.png b/Resources/Images/Archer/archer_038.png Binary files differ. diff --git a/Resources/Images/Archer/archer_039.png b/Resources/Images/Archer/archer_039.png Binary files differ. diff --git a/Resources/Images/Archer/archer_037.png b/Resources/Images/Archer/archer_040.png Binary files differ. diff --git a/Resources/Images/Archer/archer_038.png b/Resources/Images/Archer/archer_041.png Binary files differ. diff --git a/Resources/Images/Archer/archer_039.png b/Resources/Images/Archer/archer_042.png Binary files differ. diff --git a/Resources/Images/Archer/archer_043.png b/Resources/Images/Archer/archer_043.png Binary files differ. diff --git a/Resources/Images/Archer/archer_044.png b/Resources/Images/Archer/archer_044.png Binary files differ. diff --git a/Resources/Images/Archer/archer_045.png b/Resources/Images/Archer/archer_045.png Binary files differ. diff --git a/Resources/Images/Archer/archer_046.png b/Resources/Images/Archer/archer_046.png Binary files differ. diff --git a/Resources/Images/Archer/archer_047.png b/Resources/Images/Archer/archer_047.png Binary files differ. diff --git a/Resources/Images/Archer/archer_048.png b/Resources/Images/Archer/archer_048.png Binary files differ. diff --git a/Resources/Images/Archer/archer_049.png b/Resources/Images/Archer/archer_049.png Binary files differ. diff --git a/Resources/Images/Archer/archer_050.png b/Resources/Images/Archer/archer_050.png Binary files differ. diff --git a/Resources/Images/Archer/archer_051.png b/Resources/Images/Archer/archer_051.png Binary files differ. diff --git a/Resources/Images/Archer/archer_052.png b/Resources/Images/Archer/archer_052.png Binary files differ. diff --git a/Resources/Images/Archer/archer_053.png b/Resources/Images/Archer/archer_053.png Binary files differ. diff --git a/Resources/Images/Archer/archer_054.png b/Resources/Images/Archer/archer_054.png Binary files differ. diff --git a/Resources/Images/Archer/archer_055.png b/Resources/Images/Archer/archer_055.png Binary files differ. diff --git a/Resources/Images/Archer/archer_056.png b/Resources/Images/Archer/archer_056.png Binary files differ. diff --git a/Resources/Images/Archer/archer_057.png b/Resources/Images/Archer/archer_057.png Binary files differ. diff --git a/Resources/Images/Archer/archer_058.png b/Resources/Images/Archer/archer_058.png Binary files differ. diff --git a/Resources/Images/Archer/archer_059.png b/Resources/Images/Archer/archer_059.png Binary files differ. diff --git a/Resources/Images/Archer/archer_060.png b/Resources/Images/Archer/archer_060.png Binary files differ. diff --git a/Resources/Images/Archer/archer_061.png b/Resources/Images/Archer/archer_061.png Binary files differ. diff --git a/Resources/Images/Archer/archer_062.png b/Resources/Images/Archer/archer_062.png Binary files differ. diff --git a/Resources/Images/Archer/archer_063.png b/Resources/Images/Archer/archer_063.png Binary files differ. diff --git a/Resources/Images/Archer/archer_064.png b/Resources/Images/Archer/archer_064.png Binary files differ. diff --git a/Resources/Images/Archer/archer_065.png b/Resources/Images/Archer/archer_065.png Binary files differ. diff --git a/Resources/Images/Archer/archer_066.png b/Resources/Images/Archer/archer_066.png Binary files differ. diff --git a/Resources/Images/Archer/archer_067.png b/Resources/Images/Archer/archer_067.png Binary files differ. diff --git a/Resources/Images/Archer/archer_068.png b/Resources/Images/Archer/archer_068.png Binary files differ. diff --git a/Resources/Images/Archer/archer_069.png b/Resources/Images/Archer/archer_069.png Binary files differ. diff --git a/Resources/Images/Armors/Robes.png b/Resources/Images/Armors/Armor_000.png Binary files differ. diff --git a/Resources/Images/Armors/SomeArmor.png b/Resources/Images/Armors/Armor_001.png Binary files differ. diff --git a/Resources/Images/Armors/ChestArmor.png b/Resources/Images/Armors/Armor_002.png Binary files differ. diff --git a/Resources/Images/Armors/Armor_003.png b/Resources/Images/Armors/Armor_003.png Binary files differ. diff --git a/Resources/Images/Armors/Armor_004.png b/Resources/Images/Armors/Armor_004.png Binary files differ. diff --git a/Resources/Images/Armors/Armor_005.png b/Resources/Images/Armors/Armor_005.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_000.png b/Resources/Images/Boss/Boss1/boss_000.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_001.png b/Resources/Images/Boss/Boss1/boss_001.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_002.png b/Resources/Images/Boss/Boss1/boss_002.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_003.png b/Resources/Images/Boss/Boss1/boss_003.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_004.png b/Resources/Images/Boss/Boss1/boss_004.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_005.png b/Resources/Images/Boss/Boss1/boss_005.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_006.png b/Resources/Images/Boss/Boss1/boss_006.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_007.png b/Resources/Images/Boss/Boss1/boss_007.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_008.png b/Resources/Images/Boss/Boss1/boss_008.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_009.png b/Resources/Images/Boss/Boss1/boss_009.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_010.png b/Resources/Images/Boss/Boss1/boss_010.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_011.png b/Resources/Images/Boss/Boss1/boss_011.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_012.png b/Resources/Images/Boss/Boss1/boss_012.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_013.png b/Resources/Images/Boss/Boss1/boss_013.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_014.png b/Resources/Images/Boss/Boss1/boss_014.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_015.png b/Resources/Images/Boss/Boss1/boss_015.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_016.png b/Resources/Images/Boss/Boss1/boss_016.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_017.png b/Resources/Images/Boss/Boss1/boss_017.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_018.png b/Resources/Images/Boss/Boss1/boss_018.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_019.png b/Resources/Images/Boss/Boss1/boss_019.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_020.png b/Resources/Images/Boss/Boss1/boss_020.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_021.png b/Resources/Images/Boss/Boss1/boss_021.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_022.png b/Resources/Images/Boss/Boss1/boss_022.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_023.png b/Resources/Images/Boss/Boss1/boss_023.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_024.png b/Resources/Images/Boss/Boss1/boss_024.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_025.png b/Resources/Images/Boss/Boss1/boss_025.png Binary files differ. diff --git a/Resources/Images/Boss/Boss1/boss_026.png b/Resources/Images/Boss/Boss1/boss_026.png Binary files differ. diff --git a/Resources/Images/Chest/chest_000.png b/Resources/Images/Chest/chest_000.png Binary files differ. diff --git a/Resources/Images/Chest/chest_001.png b/Resources/Images/Chest/chest_001.png Binary files differ. diff --git a/Resources/Images/Chest/chest_002.png b/Resources/Images/Chest/chest_002.png Binary files differ. diff --git a/Resources/Images/Chest/chest_003.png b/Resources/Images/Chest/chest_003.png Binary files differ. diff --git a/Resources/Images/Chest/chest_004.png b/Resources/Images/Chest/chest_004.png Binary files differ. diff --git a/Resources/Images/Door/BossDoor.png b/Resources/Images/Door/BossDoor.png Binary files differ. diff --git a/Resources/Images/Door/SecretDoor.png b/Resources/Images/Door/SecretDoor.png Binary files differ. diff --git a/Resources/Images/Enemy2/enemy2_000.png b/Resources/Images/Enemy/EnemyFly_000/enemy_000.png Binary files differ. diff --git a/Resources/Images/Enemy2/enemy2_001.png b/Resources/Images/Enemy/EnemyFly_000/enemy_001.png Binary files differ. diff --git a/Resources/Images/Enemy2/enemy2_002.png b/Resources/Images/Enemy/EnemyFly_000/enemy_002.png Binary files differ. diff --git a/Resources/Images/Enemy2/enemy2_003.png b/Resources/Images/Enemy/EnemyFly_000/enemy_003.png Binary files differ. diff --git a/Resources/Images/Enemy2/enemy2_004.png b/Resources/Images/Enemy/EnemyFly_000/enemy_004.png Binary files differ. diff --git a/Resources/Images/Enemy2/enemy2_005.png b/Resources/Images/Enemy/EnemyFly_000/enemy_005.png Binary files differ. diff --git a/Resources/Images/Enemy2/enemy2_006.png b/Resources/Images/Enemy/EnemyFly_000/enemy_006.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyFly_001/enemy_000.png b/Resources/Images/Enemy/EnemyFly_001/enemy_000.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyFly_001/enemy_001.png b/Resources/Images/Enemy/EnemyFly_001/enemy_001.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyFly_001/enemy_002.png b/Resources/Images/Enemy/EnemyFly_001/enemy_002.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyFly_001/enemy_003.png b/Resources/Images/Enemy/EnemyFly_001/enemy_003.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyFly_001/enemy_004.png b/Resources/Images/Enemy/EnemyFly_001/enemy_004.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyFly_001/enemy_005.png b/Resources/Images/Enemy/EnemyFly_001/enemy_005.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyFly_001/enemy_006.png b/Resources/Images/Enemy/EnemyFly_001/enemy_006.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyFly_002/enemy_000.png b/Resources/Images/Enemy/EnemyFly_002/enemy_000.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyFly_002/enemy_001.png b/Resources/Images/Enemy/EnemyFly_002/enemy_001.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyFly_002/enemy_002.png b/Resources/Images/Enemy/EnemyFly_002/enemy_002.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyFly_002/enemy_003.png b/Resources/Images/Enemy/EnemyFly_002/enemy_003.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyFly_002/enemy_004.png b/Resources/Images/Enemy/EnemyFly_002/enemy_004.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyFly_002/enemy_005.png b/Resources/Images/Enemy/EnemyFly_002/enemy_005.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyFly_002/enemy_006.png b/Resources/Images/Enemy/EnemyFly_002/enemy_006.png Binary files differ. diff --git a/Resources/Images/Enemy/enemy_000.png b/Resources/Images/Enemy/EnemyGround_000/enemy_000.png Binary files differ. diff --git a/Resources/Images/Enemy/enemy_001.png b/Resources/Images/Enemy/EnemyGround_000/enemy_001.png Binary files differ. diff --git a/Resources/Images/Enemy/enemy_002.png b/Resources/Images/Enemy/EnemyGround_000/enemy_002.png Binary files differ. diff --git a/Resources/Images/Enemy/enemy_003.png b/Resources/Images/Enemy/EnemyGround_000/enemy_003.png Binary files differ. diff --git a/Resources/Images/Enemy/enemy_004.png b/Resources/Images/Enemy/EnemyGround_000/enemy_004.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyGround_001/enemy_000.png b/Resources/Images/Enemy/EnemyGround_001/enemy_000.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyGround_001/enemy_001.png b/Resources/Images/Enemy/EnemyGround_001/enemy_001.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyGround_001/enemy_002.png b/Resources/Images/Enemy/EnemyGround_001/enemy_002.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyGround_001/enemy_003.png b/Resources/Images/Enemy/EnemyGround_001/enemy_003.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyGround_001/enemy_004.png b/Resources/Images/Enemy/EnemyGround_001/enemy_004.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyGround_002/enemy_000.png b/Resources/Images/Enemy/EnemyGround_002/enemy_000.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyGround_002/enemy_001.png b/Resources/Images/Enemy/EnemyGround_002/enemy_001.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyGround_002/enemy_002.png b/Resources/Images/Enemy/EnemyGround_002/enemy_002.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyGround_002/enemy_003.png b/Resources/Images/Enemy/EnemyGround_002/enemy_003.png Binary files differ. diff --git a/Resources/Images/Enemy/EnemyGround_002/enemy_004.png b/Resources/Images/Enemy/EnemyGround_002/enemy_004.png Binary files differ. diff --git a/Resources/Images/Enemy/enemy_005.png b/Resources/Images/Enemy/enemy_005.png Binary files differ. diff --git a/Resources/Images/Enemy2/._enemy2_000.png b/Resources/Images/Enemy2/._enemy2_000.png Binary files differ. diff --git a/Resources/Images/Enemy2/._enemy2_001.png b/Resources/Images/Enemy2/._enemy2_001.png Binary files differ. diff --git a/Resources/Images/Enemy2/._enemy2_002.png b/Resources/Images/Enemy2/._enemy2_002.png Binary files differ. diff --git a/Resources/Images/Enemy2/._enemy2_003.png b/Resources/Images/Enemy2/._enemy2_003.png Binary files differ. diff --git a/Resources/Images/Enemy2/._enemy2_004.png b/Resources/Images/Enemy2/._enemy2_004.png Binary files differ. diff --git a/Resources/Images/Enemy2/._enemy2_005.png b/Resources/Images/Enemy2/._enemy2_005.png Binary files differ. diff --git a/Resources/Images/Enemy2/._enemy2_006.png b/Resources/Images/Enemy2/._enemy2_006.png Binary files differ. diff --git a/Resources/Images/HUD/hp_begin.png b/Resources/Images/HUD/hp_begin.png Binary files differ. diff --git a/Resources/Images/HUD/hp_empty_end.png b/Resources/Images/HUD/hp_empty_end.png Binary files differ. diff --git a/Resources/Images/HUD/hp_empty_middle.png b/Resources/Images/HUD/hp_empty_middle.png Binary files differ. diff --git a/Resources/Images/HUD/hp_end.png b/Resources/Images/HUD/hp_end.png Binary files differ. diff --git a/Resources/Images/HUD/hp_middle.png b/Resources/Images/HUD/hp_middle.png Binary files differ. diff --git a/Resources/Images/Hero/big_hit/Sword_bighit-2015-05-21.zip b/Resources/Images/Hero/big_hit/Sword_bighit-2015-05-21.zip Binary files differ. diff --git a/Resources/Images/Hero/hero_088.png b/Resources/Images/Hero/hero_088.png Binary files differ. diff --git a/Resources/Images/Hero/hero_089.png b/Resources/Images/Hero/hero_089.png Binary files differ. diff --git a/Resources/Images/Hero/hero_090.png b/Resources/Images/Hero/hero_090.png Binary files differ. diff --git a/Resources/Images/Hero/hero_091.png b/Resources/Images/Hero/hero_091.png Binary files differ. diff --git a/Resources/Images/Hero/hero_092.png b/Resources/Images/Hero/hero_092.png Binary files differ. diff --git a/Resources/Images/Hero/hero_093.png b/Resources/Images/Hero/hero_093.png Binary files differ. diff --git a/Resources/Images/Hero/hero_094.png b/Resources/Images/Hero/hero_094.png Binary files differ. diff --git a/Resources/Images/Hero/hero_095.png b/Resources/Images/Hero/hero_095.png Binary files differ. diff --git a/Resources/Images/Hero/hero_096.png b/Resources/Images/Hero/hero_096.png Binary files differ. diff --git a/Resources/Images/Hero/hero_097.png b/Resources/Images/Hero/hero_097.png Binary files differ. diff --git a/Resources/Images/Hero/hero_098.png b/Resources/Images/Hero/hero_098.png Binary files differ. diff --git a/Resources/Images/Hero/hero_099.png b/Resources/Images/Hero/hero_099.png Binary files differ. diff --git a/Resources/Images/Hero/hero_100.png b/Resources/Images/Hero/hero_100.png Binary files differ. diff --git a/Resources/Images/Hero/hero_101.png b/Resources/Images/Hero/hero_101.png Binary files differ. diff --git a/Resources/Images/Hero/hero_102.png b/Resources/Images/Hero/hero_102.png Binary files differ. diff --git a/Resources/Images/Hero/hero_103.png b/Resources/Images/Hero/hero_103.png Binary files differ. diff --git a/Resources/Images/Hero/hero_104.png b/Resources/Images/Hero/hero_104.png Binary files differ. diff --git a/Resources/Images/Hero/hero_105.png b/Resources/Images/Hero/hero_105.png Binary files differ. diff --git a/Resources/Images/Hero/hero_106.png b/Resources/Images/Hero/hero_106.png Binary files differ. diff --git a/Resources/Images/Hero/hero_107.png b/Resources/Images/Hero/hero_107.png Binary files differ. diff --git a/Resources/Images/Hero/hero_108.png b/Resources/Images/Hero/hero_108.png Binary files differ. diff --git a/Resources/Images/Hero/hero_109.png b/Resources/Images/Hero/hero_109.png Binary files differ. diff --git a/Resources/Images/Hero/hero_110.png b/Resources/Images/Hero/hero_110.png Binary files differ. diff --git a/Resources/Images/Hero/hero_111.png b/Resources/Images/Hero/hero_111.png Binary files differ. diff --git a/Resources/Images/Hero/hero_112.png b/Resources/Images/Hero/hero_112.png Binary files differ. diff --git a/Resources/Images/Hero/hero_113.png b/Resources/Images/Hero/hero_113.png Binary files differ. diff --git a/Resources/Images/Hero/hero_114.png b/Resources/Images/Hero/hero_114.png Binary files differ. diff --git a/Resources/Images/Hero/hero_115.png b/Resources/Images/Hero/hero_115.png Binary files differ. diff --git a/Resources/Images/Hero/hero_116.png b/Resources/Images/Hero/hero_116.png Binary files differ. diff --git a/Resources/Images/Hero/hero_117.png b/Resources/Images/Hero/hero_117.png Binary files differ. diff --git a/Resources/Images/Hero/hero_118.png b/Resources/Images/Hero/hero_118.png Binary files differ. diff --git a/Resources/Images/Hero/hero_119.png b/Resources/Images/Hero/hero_119.png Binary files differ. diff --git a/Resources/Images/Hero/hero_120.png b/Resources/Images/Hero/hero_120.png Binary files differ. diff --git a/Resources/Images/Hero/hero_121.png b/Resources/Images/Hero/hero_121.png Binary files differ. diff --git a/Resources/Images/Hero/hero_122.png b/Resources/Images/Hero/hero_122.png Binary files differ. diff --git a/Resources/Images/Hero/hero_123.png b/Resources/Images/Hero/hero_123.png Binary files differ. diff --git a/Resources/Images/Hero/hero_124.png b/Resources/Images/Hero/hero_124.png Binary files differ. diff --git a/Resources/Images/Hero/hero_125.png b/Resources/Images/Hero/hero_125.png Binary files differ. diff --git a/Resources/Images/Hero/hero_126.png b/Resources/Images/Hero/hero_126.png Binary files differ. diff --git a/Resources/Images/Hero/hero_127.png b/Resources/Images/Hero/hero_127.png Binary files differ. diff --git a/Resources/Images/Hero/hero_128.png b/Resources/Images/Hero/hero_128.png Binary files differ. diff --git a/Resources/Images/Hero/hero_129.png b/Resources/Images/Hero/hero_129.png Binary files differ. diff --git a/Resources/Images/Hero/hero_130.png b/Resources/Images/Hero/hero_130.png Binary files differ. diff --git a/Resources/Images/Hero/hero_131.png b/Resources/Images/Hero/hero_131.png Binary files differ. diff --git a/Resources/Images/Hero/hero_132.png b/Resources/Images/Hero/hero_132.png Binary files differ. diff --git a/Resources/Images/Hero/hero_133.png b/Resources/Images/Hero/hero_133.png Binary files differ. diff --git a/Resources/Images/Hero/hero_134.png b/Resources/Images/Hero/hero_134.png Binary files differ. diff --git a/Resources/Images/Hero/hero_135.png b/Resources/Images/Hero/hero_135.png Binary files differ. diff --git a/Resources/Images/Hero/hero_136.png b/Resources/Images/Hero/hero_136.png Binary files differ. diff --git a/Resources/Images/Hero/hero_137.png b/Resources/Images/Hero/hero_137.png Binary files differ. diff --git a/Resources/Images/Hero/hero_138.png b/Resources/Images/Hero/hero_138.png Binary files differ. diff --git a/Resources/Images/Hero/hero_139.png b/Resources/Images/Hero/hero_139.png Binary files differ. diff --git a/Resources/Images/Hero/hero_140.png b/Resources/Images/Hero/hero_140.png Binary files differ. diff --git a/Resources/Images/Hero/hero_141.png b/Resources/Images/Hero/hero_141.png Binary files differ. diff --git a/Resources/Images/Hero/hero_142.png b/Resources/Images/Hero/hero_142.png Binary files differ. diff --git a/Resources/Images/Hero/hero_143.png b/Resources/Images/Hero/hero_143.png Binary files differ. diff --git a/Resources/Images/Hero/hero_144.png b/Resources/Images/Hero/hero_144.png Binary files differ. diff --git a/Resources/Images/Hero/hero_145.png b/Resources/Images/Hero/hero_145.png Binary files differ. diff --git a/Resources/Images/Hero/hero_146.png b/Resources/Images/Hero/hero_146.png Binary files differ. diff --git a/Resources/Images/Hero/hero_147.png b/Resources/Images/Hero/hero_147.png Binary files differ. diff --git a/Resources/Images/Hero/hero_148.png b/Resources/Images/Hero/hero_148.png Binary files differ. diff --git a/Resources/Images/Hero/hero_149.png b/Resources/Images/Hero/hero_149.png Binary files differ. diff --git a/Resources/Images/Hero/hero_150.png b/Resources/Images/Hero/hero_150.png Binary files differ. diff --git a/Resources/Images/Hero/hero_151.png b/Resources/Images/Hero/hero_151.png Binary files differ. diff --git a/Resources/Images/Hero/hero_152.png b/Resources/Images/Hero/hero_152.png Binary files differ. diff --git a/Resources/Images/Hero/hero_153.png b/Resources/Images/Hero/hero_153.png Binary files differ. diff --git a/Resources/Images/Hero/hero_154.png b/Resources/Images/Hero/hero_154.png Binary files differ. diff --git a/Resources/Images/Hero/hero_155.png b/Resources/Images/Hero/hero_155.png Binary files differ. diff --git a/Resources/Images/Hero/hero_156.png b/Resources/Images/Hero/hero_156.png Binary files differ. diff --git a/Resources/Images/Hero/hero_157.png b/Resources/Images/Hero/hero_157.png Binary files differ. diff --git a/Resources/Images/Hero/hero_158.png b/Resources/Images/Hero/hero_158.png Binary files differ. diff --git a/Resources/Images/Hero/hero_159.png b/Resources/Images/Hero/hero_159.png Binary files differ. diff --git a/Resources/Images/Hero/hero_160.png b/Resources/Images/Hero/hero_160.png Binary files differ. diff --git a/Resources/Images/Hero/hero_161.png b/Resources/Images/Hero/hero_161.png Binary files differ. diff --git a/Resources/Images/Hero/hero_162.png b/Resources/Images/Hero/hero_162.png Binary files differ. diff --git a/Resources/Images/Hero/hero_163.png b/Resources/Images/Hero/hero_163.png Binary files differ. diff --git a/Resources/Images/Hero/hero_164.png b/Resources/Images/Hero/hero_164.png Binary files differ. diff --git a/Resources/Images/Hero/hero_165.png b/Resources/Images/Hero/hero_165.png Binary files differ. diff --git a/Resources/Images/Hero/hero_166.png b/Resources/Images/Hero/hero_166.png Binary files differ. diff --git a/Resources/Images/Hero/hero_167.png b/Resources/Images/Hero/hero_167.png Binary files differ. diff --git a/Resources/Images/Menu/Archer/perso_016.png b/Resources/Images/Menu/Archer/perso_016.png Binary files differ. diff --git a/Resources/Images/Menu/Archer/perso_017.png b/Resources/Images/Menu/Archer/perso_017.png Binary files differ. diff --git a/Resources/Images/Menu/Archer/perso_018.png b/Resources/Images/Menu/Archer/perso_018.png Binary files differ. diff --git a/Resources/Images/Menu/Archer/perso_019.png b/Resources/Images/Menu/Archer/perso_019.png Binary files differ. diff --git a/Resources/Images/Menu/menu.png b/Resources/Images/Menu/menu.png Binary files differ. diff --git a/Resources/Images/Perso1/psd/sonné.psd b/Resources/Images/Perso1/psd/sonné.psd Binary files differ. diff --git a/Resources/Images/Rings/Ring_000.png b/Resources/Images/Rings/Ring_000.png Binary files differ. diff --git a/Resources/Images/Rings/Ring_001.png b/Resources/Images/Rings/Ring_001.png Binary files differ. diff --git a/Resources/Images/Rings/NiceRing.png b/Resources/Images/Rings/Ring_002.png Binary files differ. diff --git a/Resources/Images/Rings/NiceRing.png b/Resources/Images/Rings/Ring_003.png Binary files differ. diff --git a/Resources/Images/Rings/SomeRing.png b/Resources/Images/Rings/Ring_004.png Binary files differ. diff --git a/Resources/Images/Rings/Ring_005.png b/Resources/Images/Rings/Ring_005.png Binary files differ. diff --git a/Resources/Images/Rings/Ring_006.png b/Resources/Images/Rings/Ring_006.png Binary files differ. diff --git a/Resources/Images/Rings/Ring_007.png b/Resources/Images/Rings/Ring_007.png Binary files differ. diff --git a/Resources/Images/Rings/Ring_008.png b/Resources/Images/Rings/Ring_008.png Binary files differ. diff --git a/Resources/Images/Rings/SmallRing.png b/Resources/Images/Rings/SmallRing.png Binary files differ. diff --git a/Resources/Images/Shockwave.png b/Resources/Images/Shockwave.png Binary files differ. diff --git a/Resources/Images/Skills/berserk.png b/Resources/Images/Skills/berserk.png Binary files differ. diff --git a/Resources/Images/Skills/blink.png b/Resources/Images/Skills/blink.png Binary files differ. diff --git a/Resources/Images/Skills/charge.png b/Resources/Images/Skills/charge.png Binary files differ. diff --git a/Resources/Images/Skills/dash.png b/Resources/Images/Skills/dash.png Binary files differ. diff --git a/Resources/Images/Skills/disengage.png b/Resources/Images/Skills/disengage.png Binary files differ. diff --git a/Resources/Images/Skills/fly.png b/Resources/Images/Skills/fly.png Binary files differ. diff --git a/Resources/Images/Skills/passive_both.png b/Resources/Images/Skills/passive_both.png Binary files differ. diff --git a/Resources/Images/Skills/passive_bow.png b/Resources/Images/Skills/passive_bow.png Binary files differ. diff --git a/Resources/Images/Skills/passive_dague.png b/Resources/Images/Skills/passive_dague.png Binary files differ. diff --git a/Resources/Images/Skills/passive_hammer.png b/Resources/Images/Skills/passive_hammer.png Binary files differ. diff --git a/Resources/Images/Skills/passive_spear.png b/Resources/Images/Skills/passive_spear.png Binary files differ. diff --git a/Resources/Images/Skills/passive_sword.png b/Resources/Images/Skills/passive_sword.png Binary files differ. diff --git a/Resources/Images/Skills/rapidFire.png b/Resources/Images/Skills/rapidFire.png Binary files differ. diff --git a/Resources/Images/Skills/rapid_fire.png b/Resources/Images/Skills/rapid_fire.png Binary files differ. diff --git a/Resources/Images/Skills/shockwave.png b/Resources/Images/Skills/shockwave.png Binary files differ. diff --git a/Resources/Images/Skills/shunpo.png b/Resources/Images/Skills/shunpo.png Binary files differ. diff --git a/Resources/Images/Skills/stomp.png b/Resources/Images/Skills/stomp.png Binary files differ. diff --git a/Resources/Images/Skills/throw_weapon.png b/Resources/Images/Skills/throw_weapon.png Binary files differ. diff --git a/Resources/Images/Skills/wallJump.png b/Resources/Images/Skills/wallJump.png Binary files differ. diff --git a/Resources/Images/Skills/whirlwind.png b/Resources/Images/Skills/whirlwind.png Binary files differ. diff --git a/Resources/Images/Weapons/Axe_000.png b/Resources/Images/Weapons/Axe_000.png Binary files differ. diff --git a/Resources/Images/Weapons/Axe_001.png b/Resources/Images/Weapons/Axe_001.png Binary files differ. diff --git a/Resources/Images/Weapons/Axe_002.png b/Resources/Images/Weapons/Axe_002.png Binary files differ. diff --git a/Resources/Images/Weapons/Axe_003.png b/Resources/Images/Weapons/Axe_003.png Binary files differ. diff --git a/Resources/Images/Weapons/Axe_004.png b/Resources/Images/Weapons/Axe_004.png Binary files differ. diff --git a/Resources/Images/Weapons/Axe_005.png b/Resources/Images/Weapons/Axe_005.png Binary files differ. diff --git a/Resources/Images/bow.png b/Resources/Images/Weapons/Bow_000.png Binary files differ. diff --git a/Resources/Images/Weapons/Bow_001.png b/Resources/Images/Weapons/Bow_001.png Binary files differ. diff --git a/Resources/Images/Weapons/Bow_002.png b/Resources/Images/Weapons/Bow_002.png Binary files differ. diff --git a/Resources/Images/Weapons/Bow_003.png b/Resources/Images/Weapons/Bow_003.png Binary files differ. diff --git a/Resources/Images/Weapons/Bow_004.png b/Resources/Images/Weapons/Bow_004.png Binary files differ. diff --git a/Resources/Images/Weapons/Bow_005.png b/Resources/Images/Weapons/Bow_005.png Binary files differ. diff --git a/Resources/Images/Weapons/Dagger_000.png b/Resources/Images/Weapons/Dagger_000.png Binary files differ. diff --git a/Resources/Images/Weapons/Dagger_001.png b/Resources/Images/Weapons/Dagger_001.png Binary files differ. diff --git a/Resources/Images/Weapons/Dagger_002.png b/Resources/Images/Weapons/Dagger_002.png Binary files differ. diff --git a/Resources/Images/Weapons/Dagger_003.png b/Resources/Images/Weapons/Dagger_003.png Binary files differ. diff --git a/Resources/Images/Weapons/Dagger_004.png b/Resources/Images/Weapons/Dagger_004.png Binary files differ. diff --git a/Resources/Images/Weapons/Dagger_005.png b/Resources/Images/Weapons/Dagger_005.png Binary files differ. diff --git a/Resources/Images/Weapons/Spear_000.png b/Resources/Images/Weapons/Spear_000.png Binary files differ. diff --git a/Resources/Images/Weapons/Spear_001.png b/Resources/Images/Weapons/Spear_001.png Binary files differ. diff --git a/Resources/Images/Weapons/Spear_002.png b/Resources/Images/Weapons/Spear_002.png Binary files differ. diff --git a/Resources/Images/Weapons/Spear_003.png b/Resources/Images/Weapons/Spear_003.png Binary files differ. diff --git a/Resources/Images/Weapons/Spear_004.png b/Resources/Images/Weapons/Spear_004.png Binary files differ. diff --git a/Resources/Images/Weapons/Spear_005.png b/Resources/Images/Weapons/Spear_005.png Binary files differ. diff --git a/Resources/Images/Sword.png b/Resources/Images/Weapons/Sword_000.png Binary files differ. diff --git a/Resources/Images/Sword2.png b/Resources/Images/Weapons/Sword_001.png Binary files differ. diff --git a/Resources/Images/Weapons/Sword_002.png b/Resources/Images/Weapons/Sword_002.png Binary files differ. diff --git a/Resources/Images/Weapons/Sword_003.png b/Resources/Images/Weapons/Sword_003.png Binary files differ. diff --git a/Resources/Images/Weapons/Sword_004.png b/Resources/Images/Weapons/Sword_004.png Binary files differ. diff --git a/Resources/Images/Weapons/Sword_005.png b/Resources/Images/Weapons/Sword_005.png Binary files differ. diff --git a/Resources/Images/boss_projectile.png b/Resources/Images/boss_projectile.png Binary files differ. diff --git a/Resources/Images/bubulle/Portes/PBoss.png b/Resources/Images/bubulle/Portes/PBoss.png Binary files differ. diff --git a/Resources/Images/bubulle/Portes/PSec.png b/Resources/Images/bubulle/Portes/PSec.png Binary files differ. diff --git a/Resources/Images/bubulle/Portes/light-portes.png b/Resources/Images/bubulle/Portes/light-portes.png Binary files differ. diff --git a/Resources/Images/bubulle/Portes/portes-Boss.png b/Resources/Images/bubulle/Portes/portes-Boss.png Binary files differ. diff --git a/Resources/Images/bubulle/Portes/portes-Sec.png b/Resources/Images/bubulle/Portes/portes-Sec.png Binary files differ. diff --git a/Resources/Images/bubulle/Portes/portes.png b/Resources/Images/bubulle/Portes/portes.png Binary files differ. diff --git a/Resources/Images/bubulle/chest/Chest-00.png b/Resources/Images/bubulle/chest/Chest-00.png Binary files differ. diff --git a/Resources/Images/bubulle/chest/Chest-01.png b/Resources/Images/bubulle/chest/Chest-01.png Binary files differ. diff --git a/Resources/Images/bubulle/chest/Chest-02.png b/Resources/Images/bubulle/chest/Chest-02.png Binary files differ. diff --git a/Resources/Images/bubulle/chest/Chest-03.png b/Resources/Images/bubulle/chest/Chest-03.png Binary files differ. diff --git a/Resources/Images/bubulle/chest/Chest-04.png b/Resources/Images/bubulle/chest/Chest-04.png Binary files differ. diff --git a/Resources/Images/bubulle/chest/Chest-C.png b/Resources/Images/bubulle/chest/Chest-C.png Binary files differ. diff --git a/Resources/Images/bubulle/chest/Chest.png b/Resources/Images/bubulle/chest/Chest.png Binary files differ. diff --git a/Resources/Images/bubulle/chest/Chest_flash_lumineux.png b/Resources/Images/bubulle/chest/Chest_flash_lumineux.png Binary files differ. diff --git a/Resources/Images/bubulle/spawn_Dealer.png b/Resources/Images/bubulle/spawn_Dealer.png Binary files differ. diff --git a/Resources/Images/bubulle/spawn_Marchant.png b/Resources/Images/bubulle/spawn_Marchant.png Binary files differ. diff --git a/Resources/Images/castle.png b/Resources/Images/castle.png Binary files differ. diff --git a/Resources/Images/kitchen_gray.png b/Resources/Images/kitchen_gray.png Binary files differ. diff --git a/Resources/Images/kitchen_levels_background.png b/Resources/Images/kitchen_levels_background.png Binary files differ. diff --git a/Resources/Images/kitchen_skills_background.png b/Resources/Images/kitchen_skills_background.png Binary files differ. diff --git a/Resources/Images/kitchen_target.png b/Resources/Images/kitchen_target.png Binary files differ. diff --git a/Resources/Images/level_up.png b/Resources/Images/level_up.png Binary files differ. diff --git a/Sources/inc/Armor.hpp b/Sources/inc/Armor.hpp @@ -48,22 +48,28 @@ public: void ReceiveMessage(Message *m); std::string getName(void); + std::string getDisplayName(void); std::string getType(void); std::string getFlavor(void); std::string getSprite(void); int getLootLevel(void); int getHp(void); + int getPrice(void); + int getStarterLevel(void); private: std::map<std::string, std::map<std::string, Json::Value> > _attr; std::string _name; + std::string _displayName; std::string _type; std::string _flavor; std::string _sprite; int _lootLevel; + int _starterLevel; int _hp; + int _price; void _readFile(std::string name); void _parseJson(std::string file); diff --git a/Sources/inc/ArmorList.hpp b/Sources/inc/ArmorList.hpp @@ -56,7 +56,7 @@ public: Armor* getArmor(std::string); Armor* getArmorRandom(void); Armor* getArmorRandom(int level); - std::list<Armor *> get3Starters(int level); + std::list<Armor *> get3Starters(int level, std::string name); private: std::list<Armor*> _allArmors; diff --git a/Sources/inc/Boss.hpp b/Sources/inc/Boss.hpp @@ -0,0 +1,58 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * File: Boss.hpp + * Creation: 2015-09-29 18:09 + * Louis Solofrizzo <louis@ne02ptzero.me> + */ + +#ifndef __BOSS__ +# define __BOSS__ +class Characters; +class HUDWindow; +# include "Characters.hpp" +# include "Projectile.hpp" +# define ORIENT 0.1f + +class Boss : public Characters { + public: + Boss(std::string name, int x, int y); + ~Boss(void); + + virtual void ReceiveMessage(Message *m); + virtual void AnimCallback(String s); + virtual void BeginContact(Elements *elem, b2Contact *contact); + virtual void EndContact(Elements *elem, b2Contact *contact); + void lifeBar(void); + void createProjectile(Vector2 force, Vector2 init); + + private: + HUDWindow *_h; + std::list<HUDActor *> _lifeList; + int _lastHitID; + int _inactive; + float _x; + float _y; + int _stade; +}; + +# include "HUDWindow.hpp" + +#endif diff --git a/Sources/inc/Characters.hpp b/Sources/inc/Characters.hpp @@ -28,6 +28,7 @@ # include "Inventory.hpp" # include "SpecialMoves.hpp" +# include "SpecialAttack.hpp" # include "Weapon.hpp" # include "Armor.hpp" # include "Ring.hpp" @@ -39,6 +40,7 @@ class Weapon; class Armor; class Ring; class SpecialMoves; +class SpecialAttack; class HUDTargeting; # ifdef __APPLE__ @@ -53,6 +55,15 @@ class HUDTargeting; # include "Elements.hpp" # endif +typedef struct s_buff { + std::string cur; + int bonusDmg; + int bonusSpeed; + int drugSpeed; + int dmgReduc; + int critBuff; +} t_buff; + class Characters : public Elements { public: @@ -60,6 +71,7 @@ class Characters : public Elements { friend class Pattern; friend class PassivePattern; friend class SpecialMoves; + friend class SpecialAttack; friend class HUDWindow; enum Orientation { @@ -69,9 +81,6 @@ class Characters : public Elements { RIGHT }; - - int bonusDmg; - Characters(void); Characters(std::string name); ~Characters(); @@ -83,6 +92,7 @@ class Characters : public Elements { virtual void trigger(std::string name, int status) {}; Characters::Orientation getOrientation(void); std::string getLastAction(void); + Characters::Orientation getLatOrientation(void); int getGold(void); void setGold(int); void setDrug(std::string name); @@ -94,6 +104,7 @@ class Characters : public Elements { int getMaxHP(void); int getLevel(void); void setLevel(int); + void setInvincibility(bool invincibility); Weapon *getWeapon(void); Armor *getArmor(void); Ring *getRing(void); @@ -101,6 +112,9 @@ class Characters : public Elements { int getMaxInventory(void); Inventory *getInventory(void); void destroyTarget(void); + Actor *getGhost(void); + std::string getSpeMove(void); + std::string getSpeAtt(void); // Virtual function, overwritten in childs virtual void actionCallback(std::string name, int status) {}; @@ -114,7 +128,11 @@ class Characters : public Elements { void changeCanMove(void); std::list<std::string> getSubscribes(void); void unsubscribeFromAll(void); + void UnsubscribeFromAll(void); void subscribeToAll(void); + t_buff buff; + int inSpecialMap; + Elements* hookedTo; //Moved in order to get loot infos outside of class Json::Value _getAttr(std::string category, std::string key); @@ -133,6 +151,7 @@ class Characters : public Elements { int _isAttacking; int _hp; int _gold; + int _isChoosingItem; int _maxHp; int _mana; int _maxMana; @@ -143,7 +162,10 @@ class Characters : public Elements { int _isLoadingAttack; bool _fullChargedAttack; int _speMoveReady; + int _speAttReady; bool _canAttack; + bool _isWhirlwinding; + bool _isRapidFiring; bool _isCharging; bool _isStomping; bool _isFlying; @@ -154,10 +176,17 @@ class Characters : public Elements { int _hasDashed; int _level; std::string _currentTrigger; + bool _speMoveIsSet; bool _isDisengaging; - + bool _isShockWaving; + bool _isTouchingChest; + bool _isTouchingSecretDoor; + bool _isTouchingBossDoor; + bool _isTouchingDealer; std::string _speMove; + std::string _speAtt; SpecialMoves* _eqMove; + SpecialAttack* _eqAtt; Weapon* _weapon; Armor* _armor; Ring* _ring; @@ -169,6 +198,7 @@ class Characters : public Elements { Inventory* _inventory; HUDTargeting* _target; Actor *_blast; + Actor *_ghost; Characters::Orientation _orientation; Characters::Orientation _latOrientation; std::list<Elements*> _grounds; @@ -177,8 +207,10 @@ class Characters : public Elements { std::list<Elements*> _ceiling; std::list<Elements*> _wallsRight; std::list<std::string> _subsc; + bool _execFlag; bool _forwardFlag; bool _backwardFlag; + bool _actionFlag; bool _doFlyFlag; Json::Value _getAttr(std::string key); @@ -193,14 +225,11 @@ class Characters : public Elements { virtual void _jump(int status); virtual void _attack(int status); virtual void _pickupItem(int status); + virtual void _executeAction(int status); virtual void _run(void); virtual void _specialMove(int status); + virtual void _specialAttack(int status); virtual void _callTrigger(std::string name, int status); - // virtual void _dash(void); - // virtual void _charge(void); - // virtual void _stomp(void); - // virtual void _blink(void); - // virtual void _fly(void); void _destroyEnemy(void); Elements* getItem(void); @@ -222,5 +251,6 @@ class Characters : public Elements { # include "Game.hpp" # include "Enemy.hpp" # include "MenuCharacter.hpp" +# include "Boss.hpp" #endif diff --git a/Sources/inc/Chest.hpp b/Sources/inc/Chest.hpp @@ -0,0 +1,65 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * File: Chest.cpp + * Creation: 2015-08-27 04:44 + * Vincent Rey <vrey@student.42.fr> + */ + +#ifndef __Chest__ +# define __Chest__ + +# include "Elements.hpp" +# include "../../Tools/jsoncpp/include/json/json.h" + +class Chest: public Elements { + + public: + Chest(void); + ~Chest(void); + void spawn(void); + void displayInterface(void); + void removeInterface(void); + void displayChestContent(void); + void ReceiveMessage(Message *m); + void makeChoices(void); + void updateItems(void); + int isUsed(void); + void reset(void); + std::map<int, std::string> getItems(void); + int getGold(void); + void applySave(std::map<std::string, Json::Value> save); + + int isSpawn; + + private: + void _makeItUsed(void); + + std::list<HUDActor *> _interfaceElem; + std::map<int, std::string> _chestItems; + std::map<int, HUDActor*> _img; + std::list<HUDActor *> _choices; + HUDActor * _choicePointer; + HUDActor* _target; + int _isUsed; + int _gold; +}; + +# endif diff --git a/Sources/inc/ControllerInputManager.hpp b/Sources/inc/ControllerInputManager.hpp @@ -0,0 +1,58 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * File: ControllerManager.hpp + * Creation: 2015-09-10 09:48 + * Louis Solofrizzo <louis@ne02ptzero.me> + */ + +#ifndef __Controller_Manager__ +# define __Controller_Manager__ + +# include "../../Angel/Angel.h" +# include "../../Tools/jsoncpp/include/json/json.h" +# include "Log.hpp" +# include <list> +# include <map> +# include <iostream> +# include <fstream> + +class ControllerInputManager : public MessageListener { + public: + ControllerInputManager(void); + ~ControllerInputManager(void); + void ReceiveMessage(Message *m); + void tick(void); + void addBindings(std::string button, std::string broadcast); + + int flag; + + private: + void _parseBindings(void); + + std::string _lastDirection; + std::list<std::string> _buttons; + std::map<std::string, std::string> _bindings; + +}; + +# include "Game.hpp" + +#endif diff --git a/Sources/inc/Door.hpp b/Sources/inc/Door.hpp @@ -0,0 +1,39 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * File: Door.cpp + * Creation: 2015-08-27 04:44 + * Vincent Rey <vrey@student.42.fr> + */ + +#ifndef __Door__ +# define __Door__ + +# include "Elements.hpp" + +class Door: public Elements { +public: + Door(std::string type); + ~Door(void); + int spawnX; + int spawnY; +}; + +# endif diff --git a/Sources/inc/Drug.hpp b/Sources/inc/Drug.hpp @@ -52,14 +52,19 @@ public: void pot(int status); void cocaine(int status); + void morphine(int status); + void mdma(int status); + void mushroom(int status); + void ReceiveMessage(Message *m); - std::string getName(void); + std::string getDisplayName(void); std::string getType(void); std::string getFlavor(void); std::string getSprite(void); + int getEffect(void); private: @@ -72,6 +77,7 @@ private: std::string _flavor; std::string _sprite; std::string _curDrug; + int _effect; void _readFile(std::string name); void _parseJson(std::string file); diff --git a/Sources/inc/Enemy.hpp b/Sources/inc/Enemy.hpp @@ -48,7 +48,7 @@ public: void setMap(Map *m); Map *getMap(void); void setPattern(CPattern *p); - CPattern *getPattern(void); + CPattern *getPattern(void); bool dead(void); protected: diff --git a/Sources/inc/EnemyList.hpp b/Sources/inc/EnemyList.hpp @@ -48,8 +48,8 @@ public: EnemyList(void); ~EnemyList(void); - std::string getEnemyRandom(bool flying); - std::string getEnemyRandom(int level, bool flying); + std::string getEnemyRandom(std::string flying); + std::string getEnemyRandom(int level, std::string flying); class EnemyData { public: @@ -57,12 +57,12 @@ public: ~EnemyData(); std::string getName(); int getLevel(); - bool isFlying(); + std::string isFlying(); private: std::string _name; int _level; - bool _flying; + std::string _flying; void _readFile(std::string name); void _parseJson(std::string file); }; diff --git a/Sources/inc/Equipment.hpp b/Sources/inc/Equipment.hpp @@ -47,12 +47,16 @@ public: void EndContact(Elements *elem, b2Contact *contact); void ReceiveMessage(Message* m); virtual std::string getName(); + virtual int getPrice(); private: Weapon* _weapon; Armor* _armor; Ring* _ring; std::string _name; std::string _flavor; + std::string _displayName; + std::string _equipable; + int _price; }; #endif diff --git a/Sources/inc/Game.hpp b/Sources/inc/Game.hpp @@ -53,6 +53,7 @@ class MenuCharacter; # include "InGameMenu.hpp" # include "Shop.hpp" # include "DrugList.hpp" +# include "ControllerInputManager.hpp" class ArmorList; class EnemyList; @@ -64,6 +65,9 @@ class Hitbox; class HUDWindow; class Menu; class Dealer; +class Chest; +class Door; +class Boss; class Game { @@ -79,6 +83,7 @@ class Game { void displayEnemy(Elements & Enemy); void displayObject(Elements & Object); void showMap(void); + Map getCurrentMap(void); void changeCharacter(std::string); void displayHUD(void); void setHero(Characters *h); @@ -89,10 +94,12 @@ class Game { Shopkeeper *getShopkeeper(void); void setShopkeeper(Shopkeeper *s); void menuInGame(void); + void endingGame(void); + std::map<std::string, Json::Value> getSave(void); static bool endGame; static bool ended; - static bool destroyAllBodies(void); + static bool destroyAllBodies(std::string msg = "YOU ARE DEAD"); static void checkHeroPosition(void); static void addToDestroyList(Elements *m); @@ -108,11 +115,13 @@ class Game { static void showText(void); static void addHUDWindow(HUDWindow *); static void removeHUDWindow(HUDWindow *); + static void addBoss(std::string n, int x, int y); static HUDWindow* getHUD(void); static int lol; static Game* currentGame; Maps *maps; + LevelGenerator *levelGenerator; Menu *menu; std::vector<Room*> *gameMap; Tooltip *tooltip; @@ -141,10 +150,25 @@ class Game { static int reloadHUD; static int asToStart; static int isPaused; + static int lvlDone; static MenuCharacter *menuCharacter; static Vector2 spawnDealer; + static Vector2 spawnSecretDoor; + static Vector2 spawnBossDoor; + static Vector2 spawnSecretReturnDoor; static Vector2 spawnShop; + static Vector2 spawnChest; static Dealer *dealer; + static Chest *chest; + static Door *bossDoor; + static Door *secretDoor; + static Door *secretReturnDoor; + static bool toggleMenu; + static bool stopPattern; + static bool deadWaiting; + static int World; + static Boss *boss; + static void newBoss(std::string n, int x, int y); private: float beginXHero; @@ -152,8 +176,12 @@ class Game { std::vector<std::vector<int> > _tmpMap; Characters *_hero; Shopkeeper *_shopkeeper; + ControllerInputManager *_controller; + std::map<std::string, Json::Value> _save; }; # include "Dealer.hpp" +# include "Chest.hpp" +# include "Door.hpp" #endif diff --git a/Sources/inc/HUDWindow.hpp b/Sources/inc/HUDWindow.hpp @@ -60,11 +60,13 @@ class HUDWindow : public HUDActor { HUDWindow(void); ~HUDWindow(void); + void ReceiveMessage(Message *m); HUDWindow::Text *setText(std::string str, int x, int y); HUDWindow::Text *setText(std::string str, int x, int y, Vector3 color, int alpha); HUDWindow::Text *setText(std::string str, int x, int y, Vector3 color, int alpha, std::string font); HUDWindow::Text *setText(std::string str, Characters *toFollow, Vector3 color, int isFading, int isTalk, int isInMenu = 0); - void removeText(std::string str); + void updateText(std::string org, std::string newStr); + void removeText(std::string str, int last = 0); void removeText(HUDWindow::Text *t); void displayText(void); HUDActor *addImage(std::string p, int x, int y); @@ -72,7 +74,6 @@ class HUDWindow : public HUDActor { HUDActor *addImage(std::string path, int x, int y, float size, int layer); HUDActor *addImage(std::string path, int x, int y, Vector2 size, int layer); void life(int l); - void mana(int mana); void gold(int g); void updateGold(int gold); void items(Weapon *w); @@ -83,7 +84,6 @@ class HUDWindow : public HUDActor { void consumable(std::map<int, std::string> m); void minimap(void); void setGame(Game *); - void setMaxMana(int m); void setMaxHP(int h); void bag(void); void initMinimapBackground(void); @@ -96,24 +96,32 @@ class HUDWindow : public HUDActor { void deleteBigMap(int n); void updateBigMap(void); void addTotemToBigMap(void); + void speAttCooldown(int time); + void speMoveCooldown(int time); + void spellText(void); + + HUDActor *getAttCooldown(void); + HUDActor *getMoveCooldown(void); static int isToggled; private: Game *_g; std::list<HUDActor *> _hearts; - std::list<HUDActor *> _mana; std::list<HUDActor *> _bag; std::list<HUDActor *> _minimap; std::map<std::string, Elements*> _dialog; std::list<HUDWindow::Text *> _text; std::list<HUDActor *> _allElems; HUDWindow::Text * _gold; - int _maxMana; int _maxHP; std::list<HUDActor *> _bigMapList; HUDActor *_currentObjectMap; HUDActor *_currentTotemMap; + HUDActor *_attackCooldown; + HUDActor *_moveCooldown; + int _cooldownAtt; + int _cooldownMove; void _drawDoor(Vector2 size, Vector2 position); int _doNotDelete; }; diff --git a/Sources/inc/Hero.hpp b/Sources/inc/Hero.hpp @@ -33,6 +33,7 @@ class Hero : public Characters { public: Hero(std::string); + Hero(Hero *); ~Hero(); void init(); @@ -40,6 +41,11 @@ class Hero : public Characters { virtual void EndContact(Elements* m, b2Contact* contact); virtual void actionCallback(std::string name, int status); void _takeDamage(Elements* m); - void setStartingValues(void); + void setStartingValues(Hero *tmp = nullptr); + + Inventory *getInventory(void); + SpecialMoves *getEqMove(void); + SpecialAttack *getEqAtt(void); + void setInventory(Inventory *i); }; #endif diff --git a/Sources/inc/InGameMenu.hpp b/Sources/inc/InGameMenu.hpp @@ -33,7 +33,7 @@ class InGameMenu { public: InGameMenu(); ~InGameMenu(); - void showMaps(); + void showMaps(void); private: Maps* _maps; diff --git a/Sources/inc/Inventory.hpp b/Sources/inc/Inventory.hpp @@ -40,6 +40,7 @@ public: Inventory(int slots); void changeItemFocus(void); + void chooseItemFocus(int n); std::string getCurrentFocus(void); int addItemToInventory(std::string item); std::string dropSelectedItem(void); diff --git a/Sources/inc/LevelGenerator.hpp b/Sources/inc/LevelGenerator.hpp @@ -53,9 +53,11 @@ public: int id(void); std::vector<std::vector<int> > getLevel(void); std::vector<Room*> *_rooms; + std::vector<std::vector <Room* > > roomMap; int getStartX(); int getStartY(); int getNbMaps(); + std::string getSpecialRoom(int i, int j); diff --git a/Sources/inc/Map.hpp b/Sources/inc/Map.hpp @@ -30,6 +30,7 @@ # include <list> # include <iostream> class Enemy; +class LevelGenerator; # include "Dealer.hpp" # include "Game.hpp" @@ -75,11 +76,16 @@ class Map { int getScore(void); void destroyMap(void); std::list<Enemy *> getEnemies(void); - std::vector<std::vector<int> > getPhysicMap(void); + std::vector<std::vector<int> > getPhysicMap(void); + std::vector<std::vector<Elements*> > getObjectMap(void); void callAllPatterns(void); void removeEnemy(Enemy *e); std::map<std::string, int> doors; + std::string getName(void); + std::string getSpecial(void); + void setSpecial(std::string); + private: int _mapCount; std::string _name; @@ -97,10 +103,13 @@ class Map { int _xStart; int _yStart; int _isUsed; + std::string _special; + std::list<Elements *> _elemOfTheMap; std::list<Enemy *> _enemies; std::map<int, std::map<std::string, Json::Value> > _properties; std::vector<std::vector<int> > _physicMap; + std::vector<std::vector<Elements*> > _objectMap; }; diff --git a/Sources/inc/Maps.hpp b/Sources/inc/Maps.hpp @@ -52,9 +52,12 @@ class Maps { void readMaps(void); int rstrncmp(char *str, char *str2, int n); + int tagCurrentMap(int nb); std::map<int, Map *> _maps; Map *getMapByDoor(int n); - void displayLevel(std::vector<std::vector<int> > map); + int displayLevel(std::vector<std::vector<int> > map); + Map* bossMap; + Map* secretMap; std::vector<std::vector<Map> > getMapXY(void); std::vector<std::vector<Map> > _XYMap; diff --git a/Sources/inc/Menu.hpp b/Sources/inc/Menu.hpp @@ -36,6 +36,7 @@ typedef struct s_bind { std::string broadcast; std::string realKey; std::string oldKey; + std::string controller; int key; } t_bind; diff --git a/Sources/inc/MenuCharacter.hpp b/Sources/inc/MenuCharacter.hpp @@ -54,6 +54,8 @@ class MenuCharacter : public Characters { Weapon *getWeapon(void); Ring *getRing(void); Armor *getArmor(void); + std::vector<std::string> getSkills(void); + int getLevel(void); protected: virtual void _forward(int status); @@ -70,6 +72,12 @@ class MenuCharacter : public Characters { void _showSelectInfo(Elements *obj); void _flavorInfo(std::string n); void _cleanCloset(void); + void _kitchen(void); + void _changeKitchen(void); + void _hideKitchen(int reload = 0); + void _getSkills(void); + void _makeSkillChoice(void); + void _levels(void); private: HUDActor *_image; @@ -87,8 +95,22 @@ class MenuCharacter : public Characters { std::list<Weapon *> _weaponList; std::list<Armor *> _armorList; std::list<Elements *> _equipSelectionBack; + std::list<Elements *> _kitchenSkills; int _chooseEquipment; std::map<std::string, Elements *> _equipSelection; MenuCharacter::itemInfo *_currentItemInfo; + Json::Value _skills; + Json::Value _skillTree; + std::vector<int> _skillsLvl; + int _characLvl; + std::vector<std::list<Elements *> > _skillsChoices; + std::vector<std::string> _finalSkillChoices; + std::vector<Elements *> _finalSkillTargets; + Elements *_descriptionBackground; + Elements *_iconBackground; + Elements *_icon; + std::list<std::string> _description; + Elements *_levelsBackground; + Elements *_lvlUp; }; #endif diff --git a/Sources/inc/Projectile.hpp b/Sources/inc/Projectile.hpp @@ -34,6 +34,8 @@ class Projectile: public Elements { public: Projectile(float x, float y, int direction, std::string owner); Projectile(Weapon *w, Characters *c); + Projectile(Weapon *w, int dmg); + Projectile(std::string img, int dmg, Vector2 pos, Vector2 force, Vector2 init, std::string name = "projectile", int rotat = -1); ~Projectile(); std::string getName(void); @@ -47,6 +49,7 @@ public: int attackReady(void); int getCritRate(void); + void WaveContact(Elements *m, b2Contact *contact); void BeginContact(Elements *elem, b2Contact *contact); void EndContact(Elements *elem, b2Contact *contact); void ReceiveMessage(Message *m); @@ -63,6 +66,7 @@ private: int _pushback; float _recovery; int _critRate; + bool _toDestroy; }; #endif diff --git a/Sources/inc/Quit.hpp b/Sources/inc/Quit.hpp @@ -54,6 +54,8 @@ class Quit { static void doSave(Hero *h); static std::map<std::string, Json::Value> getSave(void); static void cheater(void); + static int level; + static int gold; }; #endif diff --git a/Sources/inc/Ring.hpp b/Sources/inc/Ring.hpp @@ -48,19 +48,25 @@ public: void ReceiveMessage(Message *m); std::string getName(void); + std::string getDisplayName(void); std::string getType(void); std::string getFlavor(void); std::string getSprite(void); int getLootLevel(void); + int getPrice(void); + int getStarterLevel(void); private: std::map<std::string, std::map<std::string, Json::Value> > _attr; std::string _name; + std::string _displayName; std::string _type; std::string _flavor; std::string _sprite; int _lootLevel; + int _starterLevel; + int _price; void _readFile(std::string name); void _parseJson(std::string file); diff --git a/Sources/inc/RingList.hpp b/Sources/inc/RingList.hpp @@ -54,7 +54,7 @@ public: Ring* getRing(std::string); Ring* getRingRandom(void); Ring* getRingRandom(int level); - std::list<Ring *> get3Starters(int level); + std::list<Ring *> get3Starters(int level, std::string name); private: std::list<Ring*> _allRings; diff --git a/Sources/inc/Shop.hpp b/Sources/inc/Shop.hpp @@ -45,8 +45,8 @@ private: int _nbItems; int _lvlItems; - std::map<int, std::string> _items; - std::map<int, ShopItem*> _shopItems; + std::vector<std::string> _items; + std::vector<ShopItem*> _shopItems; }; diff --git a/Sources/inc/Shopkeeper.hpp b/Sources/inc/Shopkeeper.hpp @@ -43,6 +43,7 @@ public: void spawn(); void displayText(std::string say); void removeText(void); + Shop *getShop(); private: Shop* _shop; diff --git a/Sources/inc/SpecialAttack.hpp b/Sources/inc/SpecialAttack.hpp @@ -0,0 +1,67 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * File: SpecialMoves.hpp + * Creation: 2015-06-30 09:57 + * Matthieu Maudet<arkhane84@gmail.com> + */ + + #ifndef __SpecialAttack__ + # define __SpecialAttack__ + + # ifdef __APPLE__ + # include "../../Tools/jsoncpp/include/json/json.h" + # else + # include "json/json.h" + # endif + + #include "Characters.hpp" + #include "Projectile.hpp" + #include "Weapon.hpp" + + class Characters; + + class SpecialAttack : public MessageListener { + + public: + SpecialAttack(void); + SpecialAttack(Characters*); + ~SpecialAttack(void); + + Characters* character; + + void _setCategory(std::string category); + void ReceiveMessage(Message *m); + void _whirlwind(void); + void _shockwave(void); + void _rapidFire(void); + + + private: + std::string _category; + int _previousSpeed; + int _previousDmg; + int _previousResistance; + std::string _currentAttack; + Weapon* _left; + Weapon* _right; + }; + + #endif diff --git a/Sources/inc/SpecialMoves.hpp b/Sources/inc/SpecialMoves.hpp @@ -34,30 +34,32 @@ #include "Characters.hpp" - class Characters; +class Characters; - class SpecialMoves { +class SpecialMoves { - public: - SpecialMoves(void); - SpecialMoves(Characters*); - ~SpecialMoves(); +public: + SpecialMoves(void); + SpecialMoves(Characters*); + ~SpecialMoves(); - Characters* character; + Characters* character; - void _setCategory(std::string category); + void _setCategory(std::string category); + + virtual void _dash(void); + virtual void _charge(void); + virtual void _stomp(void); + virtual void _blink(void); + virtual void _fly(void); + virtual void _totem(void); + virtual void _shunpo(void); + virtual void _disengage(void); + + +private: + std::string _category; - virtual void _dash(void); - virtual void _charge(void); - virtual void _stomp(void); - virtual void _blink(void); - virtual void _fly(void); - virtual void _totem(void); - virtual void _shunpo(void); - virtual void _disengage(void); - - private: - std::string _category; }; diff --git a/Sources/inc/Tooltip.hpp b/Sources/inc/Tooltip.hpp @@ -58,7 +58,9 @@ class Tooltip : public MessageListener { std::string _flavor; std::string _talk; std::string _hp; - std::string _mana; + std::string _speed; + std::string _reduc; + std::string _dmg; std::string _val; Elements *_lastElem; }; diff --git a/Sources/inc/Weapon.hpp b/Sources/inc/Weapon.hpp @@ -43,23 +43,30 @@ public: Weapon(Weapon* weapon); Weapon(Weapon* weapon, Characters* c); Weapon(Weapon* weapon, Characters* c, int i); + Weapon(Weapon* weapon, Characters* c, int i, std::string str); ~Weapon(void); + void setActive(float f); + void attack(Characters *c); void BeginContact(Elements *elem, b2Contact *contact); void EndContact(Elements *elem, b2Contact *contact); void ReceiveMessage(Message *m); std::string getName(void); + std::string getDisplayName(void); std::string getType(void); std::string getFlavor(void); std::string getAttack(void); std::string getSprite(void); + std::string getEquipable(void); float getActive(void); int getCritRate(void); int getSize(void); int getLootLevel(void); + int getStarterLevel(void); int getDamage(void); + int getPrice(void); int getPushback(void); float getRecovery(void); @@ -67,18 +74,23 @@ private: std::map<std::string, std::map<std::string, Json::Value> > _attr; std::string _name; + std::string _displayName; std::string _flavor; std::string _sprite; std::string _attack; std::string _type; + std::string _equipable; int _lootLevel; + int _starterLevel; float _recovery; float _active; int _size; int _damage; int _pushback; int _critRate; + int _price; void _initDirection(Weapon* w, Characters* c); + void _initDirection2(Weapon* w, Characters* c, int i); void _readFile(std::string name); void _readFileFromFilename(std::string name); void _parseJson(std::string file); diff --git a/Sources/inc/WeaponList.hpp b/Sources/inc/WeaponList.hpp @@ -54,7 +54,7 @@ public: Weapon* getWeapon(std::string); Weapon* getWeaponRandom(void); Weapon* getWeaponRandom(int level); - std::list<Weapon *> get3Starters(int level); + std::list<Weapon *> get3Starters(int level, std::string name); private: std::list<Weapon*> _allWeapons; diff --git a/Sources/src/#Ring.cpp# b/Sources/src/#Ring.cpp# @@ -1,150 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -/** - * File: Ring.cpp - * Creation: 2015-05-07 17:43 - * Manon Budin <mbudin@student.42.fr> - */ - -# include "Ring.hpp" - -//!Constructor called by the Ringlist class to parse all Rings -/** - * Default constructor, using the element that called the attack - * @param name (std::string) - */ -Ring::Ring(std::string name) : _name(name) { - this->_readFile(name); -} - -//!Constructor called by hero/equipment class, to copy a parsed version from Ringlist -/** - * Copy constructor - * @param Ring (Ring*) - */ - -Ring::Ring(Ring* Ring) { - this->_name = Ring->getName(); - this->_flavor = Ring->getFlavor(); - this->_sprite = Ring->getSprite(); - this->addAttribute("type3", "Ring"); - this->addAttribute("name", this->_name); - this->addAttribute("flavor", this->_flavor); - this->addAttribute("sprite", this->_sprite); - this->_lootLevel = Ring->getLootLevel(); - if (Ring->getAttribute("hpBuff") != "") - this->addAttribute("hpBuff", Ring->getAttribute("hpBuff")); - if (Ring->getAttribute("manaBuff") != "") - this->addAttribute("manaBuff", Ring->getAttribute("manaBuff")); -} - - -//! Basic destructor - -Ring::~Ring(void) { -} - -//!Json parsing for the Ring files (differs a bit from the Characters, that's why we have both) -/** - * Read a config file, base on the name of the class - * @param: name (std::string) - */ -void Ring::_readFile(std::string name) { - std::string file; - std::stringstream buffer; - std::ifstream fd; - - file = "./Resources/Elements/Rings/" + name + ".json"; - fd.open(file.c_str()); - if (!fd.is_open()) - Log::error("Can't open the file for the " + - name + " class. (Expected path is Resources/Elements/" + name +".json)"); - buffer << fd.rdbuf(); - this->_parseJson(buffer.str()); -} - -//!Follow from the json parser, stocks value -/** - * Parse, read and stock the info in the config file - * @param: file (std::string) - * @note: file is the whole file content - */ -void Ring::_parseJson(std::string file) { - Json::Reader read; - Json::Value json; - Json::ValueIterator i, v; - std::map<std::string, Json::Value> tmp; - - if (!read.parse(file, json)) - Log::error("Error in json syntax :\n" + read.getFormattedErrorMessages()); - if (this->_name != json["infos"].get("name", "").asString()) - Log::warning("The class name is different with the name in the config file: " + this->_name + "/" + json["infos"].get("name", "").asString()); - this->_name = json["infos"].get("name", "").asString(); - this->_flavor = json["infos"].get("flavor", "").asString(); - this->_lootLevel = json["infos"].get("lootLevel", "").asInt(); - this->_sprite = json["infos"].get("sprites", "").asString(); - for (i = json["bonus"].begin(); i != json["bonus"].end(); i++) - this->addAttribute( i.key().asString(), (*i).asString()); - this->addAttribute("type3", "Armor"); - this->addAttribute("type3", "Ring"); - this->addAttribute("sprite", this->_sprite); -} - -//! Function called to get an attr value from the parsed json -/** - * Get a Json::Value of a key in the config file - * @param: category (std::string) - * @param: key (std::string) - * @note: See the docs for the utilisation of Json::Value - */ -Json::Value Ring::_getAttr(std::string category, std::string key) { - if (this->_attr.find(category) != this->_attr.end()) { - if (this->_attr[category].find(key) != this->_attr[category].end()) - return this->_attr[category][key]; - else - Log::warning("The key " + key + " not in the category " + category); - } else { - Log::warning("The category " + category + " not in the config"); - } - return nullptr; -} - -void Ring::ReceiveMessage(Message *m) { - -} - -/* GETTERS */ -std::string Ring::getName(void) { return this->_name; } -std::string Ring::getFlavor(void) { return this->_flavor; } -std::string Ring::getSprite(void) { return this->_sprite; } -int Ring::getLootLevel(void) { return this->_lootLevel; } - -/* SETTERS */ - -void Ring::BeginContact(Elements *elem, b2Contact *contact) { - if (elem->getAttribute("type") != "ground") { - contact->SetEnabled(false); - contact->enableContact = false; - } -} - -void Ring::EndContact(Elements *elem, b2Contact *contact) { -} - diff --git a/Sources/src/.#PassivePattern.cpp b/Sources/src/.#PassivePattern.cpp @@ -1 +0,0 @@ -noich@debian.9189:1434459054- \ No newline at end of file diff --git a/Sources/src/.#Pattern.cpp b/Sources/src/.#Pattern.cpp @@ -1 +0,0 @@ -noich@debian.9189:1434459054- \ No newline at end of file diff --git a/Sources/src/.#Ring.cpp b/Sources/src/.#Ring.cpp @@ -1 +0,0 @@ -vincent@vincent-GE60-0NC-0ND.3083:1440505294- \ No newline at end of file diff --git a/Sources/src/Armor.cpp b/Sources/src/Armor.cpp @@ -42,8 +42,11 @@ Armor::Armor(std::string name) : _name(name) { Armor::Armor(Armor* Armor) { this->_name = Armor->getName(); - this->addAttribute("type3", "Armor"); + this->_displayName = Armor->getDisplayName(); this->addAttribute("name", this->_name); + this->addAttribute("displayName", this->_displayName); + this->addAttribute("type3", "Armor"); + this->SetLayer(70); this->_flavor = Armor->getFlavor(); this->_sprite = Armor->getSprite(); this->addAttribute("sprite", this->_sprite); @@ -51,8 +54,12 @@ Armor::Armor(Armor* Armor) { this->_lootLevel = Armor->getLootLevel(); if (Armor->getAttribute("hpBuff") != "") this->addAttribute("hpBuff", Armor->getAttribute("hpBuff")); - if (Armor->getAttribute("manaBuff") != "") - this->addAttribute("manaBuff", Armor->getAttribute("manaBuff")); + if (Armor->getAttribute("dmgReduc") != "") + this->addAttribute("dmgReduc", Armor->getAttribute("dmgReduc")); + if (Armor->getAttribute("bonusSpeed") != "") + this->addAttribute("bonusSpeed", Armor->getAttribute("bonusSpeed")); + if (Armor->getAttribute("bonusDmg") != "") + this->addAttribute("bonusDmg", Armor->getAttribute("bonusDmg")); } @@ -97,9 +104,15 @@ void Armor::_parseJson(std::string file) { if (this->_name != json["infos"].get("name", "").asString()) Log::warning("The class name is different with the name in the config file: " + this->_name + "/" + json["infos"].get("name", "").asString()); this->_name = json["infos"].get("name", "").asString(); + this->_displayName = json["infos"].get("displayName", "").asString(); this->_flavor = json["infos"].get("flavor", "").asString(); this->_lootLevel = json["infos"].get("lootLevel", "").asInt(); + this->_price = json["infos"].get("price", "").asInt(); this->_sprite = json["infos"].get("sprites", "").asString(); + if (json["infos"].get("starterLevel", "").isConvertibleTo(Json::ValueType::intValue)) + this->_starterLevel = json["infos"].get("starterLevel", "").asInt(); + else + this->_starterLevel = -1; this->addAttribute("sprite", this->_sprite); for (i = json["bonus"].begin(); i != json["bonus"].end(); i++) this->addAttribute( i.key().asString(), (*i).asString()); @@ -126,21 +139,27 @@ Json::Value Armor::_getAttr(std::string category, std::string key) { } void Armor::ReceiveMessage(Message *m) { - + if (m->GetMessageName() == "DeleteEquipment" + this->GetName()) { + this->SetLayer(0); + Game::addToDestroyList(this); + } + if (m->GetMessageName() == "setToStatic" + this->GetName()) { + this->GetBody()->SetType(b2_staticBody); + } } /* GETTERS */ std::string Armor::getName(void) { return this->_name; } +std::string Armor::getDisplayName(void) { return this->_displayName; } std::string Armor::getFlavor(void) { return this->_flavor; } std::string Armor::getSprite(void) { return this->_sprite; } int Armor::getLootLevel(void) { return this->_lootLevel; } int Armor::getHp(void) { return this->_hp; } +int Armor::getPrice(void) { return this->_price; } +int Armor::getStarterLevel(void) { return this->_starterLevel; } + void Armor::BeginContact(Elements *elem, b2Contact *contact) { - if (elem->getAttribute("type") != "ground") { - contact->SetEnabled(false); - contact->enableContact = false; - } } void Armor::EndContact(Elements *elem, b2Contact *contact) { diff --git a/Sources/src/ArmorList.cpp b/Sources/src/ArmorList.cpp @@ -129,14 +129,17 @@ Armor *ArmorList::getArmorRandom(int level) { } -std::list<Armor *> ArmorList::get3Starters(int level) { +std::list<Armor *> ArmorList::get3Starters(int level, std::string name) { std::list<Armor *> list; Armor *tmp; + std::list<Armor*>::iterator it; - while (list.size() < 3) { - tmp = this->getArmorRandom(); - if (std::find(list.begin(), list.end(), tmp) == list.end()) - list.push_back(tmp); + for (it = this->_allArmors.begin(); it != this->_allArmors.end(); it++) { + if ((*it)->getStarterLevel() == level) { + list.push_back((*it)); + if (list.size() > 3) + break ; + } } return list; } diff --git a/Sources/src/Boss.cpp b/Sources/src/Boss.cpp @@ -0,0 +1,183 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * File: Boss.cpp + * Creation: 2015-09-29 18:09 + * Louis Solofrizzo <louis@ne02ptzero.me> + */ + +#include "../inc/Boss.hpp" + +Boss::Boss(std::string name, int x, int y) : Characters("Bosses/" + name), _inactive(0) { + this->setXStart(x); + this->setYStart(y + 1); + this->addAttribute("hitbox", "circle"); + this->addAttribute("boss", "true"); + this->display(); + this->_h = Game::getHUD(); + this->AnimCallback("idle"); + this->_h->setText(this->_name, theCamera.GetWindowWidth() / 2 - this->_name.size() * 3, + theCamera.GetWindowHeight() / 5 , Vector3(1, 1, 1), 1); + this->lifeBar(); + theSwitchboard.SubscribeTo(this, "attack"); + theSwitchboard.SubscribeTo(this, "phase1"); + theSwitchboard.SubscribeTo(this, "phase2"); + theSwitchboard.SubscribeTo(this, "deleteBoss"); + this->_x = 0; + this->_y = 2; + this->_stade = 0; +} + +Boss::~Boss(void) { + ; +} + +void Boss::ReceiveMessage(Message *m) { + float percent = this->_hp * 100 / this->_maxHp; + int x = this->GetBody()->GetWorldCenter().x, y = this->GetBody()->GetWorldCenter().y, size = this->GetSize().X / 2; + + if (m->GetMessageName() == "deleteBoss") { + Game::addToDestroyList(this); + } else if (percent > 0) { + if (m->GetMessageName() == "attack") { + if (percent > 50) + this->ReceiveMessage(new Message("phase1")); + else + this->ReceiveMessage(new Message("phase2")); + } else if (m->GetMessageName() == "phase1") { + new Projectile("Resources/Images/boss_projectile.png", 20, Vector2(x, y), Vector2(2, 0), Vector2(-1, 0), "bossProjectile"); + new Projectile("Resources/Images/boss_projectile.png", 20, Vector2(x, y), Vector2(0, 2), Vector2(0, 0), "bossProjectile"); + new Projectile("Resources/Images/boss_projectile.png", 20, Vector2(x, y), Vector2(-2, 0), Vector2(0, 0), "bossProjectile"); + new Projectile("Resources/Images/boss_projectile.png", 20, Vector2(x, y), Vector2(0, -2), Vector2(0, 0), "bossProjectile"); + theSwitchboard.DeferredBroadcast(new Message("attack"), 0.5); + } else if (m->GetMessageName() == "phase2") { + new Projectile("Resources/Images/boss_projectile.png", 20, Vector2(x, y), Vector2(2, 0), Vector2(0, 0), "bossProjectile", this->_stade); + if (this->_stade >= 360) { + this->_stade = 5; + } else { + this->_stade += 5; + } + theSwitchboard.DeferredBroadcast(new Message("attack"), 0.02); + } + } else { + std::list<HUDActor *>::iterator it; + for (it = this->_lifeList.begin(); it != this->_lifeList.end(); it++) + theWorld.Remove(*it); + this->_h->removeText(this->_name); + this->_setCategory("death"); + this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, + this->_getAttr("endFrame").asInt(), this->_getAttr("beginFrame").asInt(), "delete"); + } +} + +void Boss::createProjectile(Vector2 force, Vector2 init) { + new Projectile("Resources/Images/boss_projectile.png", 20, force, init, Vector2(0, 0), "bossProjectile"); +} + +void Boss::AnimCallback(String s) { + if (s == "idle") { + this->_setCategory("breath"); + this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, + this->_getAttr("beginFrame").asInt(), this->_getAttr("endFrame").asInt(), "reverseIdle"); + } else if (s == "reverseIdle") { + this->_setCategory("breath"); + this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, + this->_getAttr("endFrame").asInt(), this->_getAttr("beginFrame").asInt(), "idle"); + } else if (s == "delete") { + int stade; + int x = this->GetBody()->GetWorldCenter().x, y = this->GetBody()->GetWorldCenter().y; + + for (stade = 0; stade < 360; stade += 5) + new Projectile("Resources/Images/boss_projectile.png", 20, Vector2(x, y), Vector2(2, 0), Vector2(0, 0), "bossProjectile", stade); + Game::addToDestroyList(this); + theSwitchboard.DeferredBroadcast(new Message("bossEnd"), 3); + } +} + +void Boss::BeginContact(Elements *elem, b2Contact *contact) { + Weapon* w = static_cast<Weapon*>(elem); + Projectile* p = static_cast<Projectile*>(elem); + Characters *h = Game::currentGame->getHero(); + std::string type = elem->getAttribute("type"); + int damage = 0, crit; + + this->_lastHitID = (this->_lastHitID == elem->getId() ? -1 : elem->getId()); + if (this->_lastHitID == -1) + return ; + if (type == "HeroWeaponHitBox") { + damage = w->getDamage(); crit = w->getCritRate(); + } else if (type == "HeroProjectile") { + damage = p->getDamage(); crit = p->getCritRate(); + } else if (type == "Shockwave") { + damage = p->getDamage(); crit = 0; + } else if (type == "Hero" && h->getCharging() == true) { + damage = h->getWeapon()->getDamage(); crit = h->getWeapon()->getCritRate(); + } + if (damage && this->_hp > 0) { + if (!this->_inactive) { + theSwitchboard.Broadcast(new Message("attack")); + this->_inactive = 1; + } + damage += h->buff.bonusDmg * 4; + crit += h->buff.critBuff; + if (crit && (rand() % (crit + 1) == crit)) { + damage *= 2; + Game::getHUD()->setText("Crit ! (" + std::to_string(damage) + ")", this, Vector3(255, 0, 0), 1, 0); + } else + Game::getHUD()->setText(std::to_string(damage), this, Vector3(1, 1, 1), 1, 0); + this->_hp -= damage; + this->_setCategory("jump"); + this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, + this->_getAttr("endFrame").asInt(), this->_getAttr("beginFrame").asInt(), "idle"); + this->lifeBar(); + } +} + +void Boss::EndContact(Elements *elem, b2Contact *contact) { + ; +} + +void Boss::lifeBar(void) { + int x, y, j; + float percent; + std::list<HUDActor *>::iterator it; + std::string tmp; + + x = theCamera.GetWindowWidth() / 2 - (100); + y = theCamera.GetWindowHeight() / 5 - 5; + for (it = this->_lifeList.begin(); it != this->_lifeList.end(); it++) + theWorld.Remove(*it); + this->_lifeList.clear(); + percent = this->_hp * 100 / this->_maxHp; + if (percent > 0) { + for (j = 0; j <= percent; j++, x += 2) { + if (j == 0) { tmp = "begin"; } + else if (j == percent) { tmp = "end"; } + else { tmp = "middle"; } + this->_lifeList.push_back(this->_h->addImage("Resources/Images/HUD/hp_" + tmp + ".png", x, y, Vector2(2, 15), 100)); + } + if (percent < 100) { + for (; percent < 100; percent++, x += 2) { + this->_lifeList.push_back(this->_h->addImage("Resources/Images/HUD/hp_empty_middle.png", x, y, Vector2(2, 15), 100)); + } + this->_lifeList.push_back(this->_h->addImage("Resources/Images/HUD/hp_empty_end.png", x, y, Vector2(2, 15), 100)); + } + } +} diff --git a/Sources/src/Characters.cpp b/Sources/src/Characters.cpp @@ -44,17 +44,25 @@ Characters::Characters(std::string name) : _name(name), _isRunning(0), _isJump(0 this->addAttribute("class", name); this->SetDensity(1.0f); this->SetName(name); + this->inSpecialMap = false; this->SetFriction(1); this->SetRestitution(0.0f); this->SetFixedRotation(true); + this->_execFlag = 0; this->_orientation = RIGHT; this->_latOrientation = RIGHT; this->_canMove = true; this->_canAttack = true; this->_canJump = true; this->_isFlying = false; + this->_isTouchingBossDoor = false; + this->_isTouchingSecretDoor = false; + this->_isTouchingChest = false; + this->_isTouchingDealer = false; + this->_isChoosingItem = 0; this->_invincibility = false; this->_grounds.clear(); + this->_speMoveIsSet = false; this->_item = nullptr; this->_shopItem = ""; this->_drug = ""; @@ -66,14 +74,22 @@ Characters::Characters(std::string name) : _name(name), _isRunning(0), _isJump(0 this->_isStomping = 0; this->_isCharging = 0; this->_isDashing = 0; + this->_isWhirlwinding = false; + this->_isShockWaving = false; + this->_isRapidFiring = false; this->_speMoveReady = 1; + this->_speAttReady = 1; this->_hasDashed = 0; this->SetLayer(100); - this->_readFile(name); - this->_eqMove = new SpecialMoves(this); - this->_isStomping = false; this->_flyTrigger = false; this->_isDisengaging = false; + this->buff.cur = ""; + this->buff.bonusDmg = 0; + this->buff.bonusSpeed = 0; + this->buff.drugSpeed = 0; + this->buff.dmgReduc = 0; + this->buff.critBuff = 0; + this->_readFile(name); } //! Basic destructor @@ -112,32 +128,40 @@ void Characters::_parseJson(std::string file) { Json::Value json; Json::ValueIterator i, v; std::map<std::string, Json::Value> tmp; + std::string type; if (!read.parse(file, json)) Log::error("Error in json syntax :\n" + read.getFormattedErrorMessages()); if (!strncmp("Enemies/", this->_name.c_str(), 8)) { if (this->_name.substr(8, json["infos"].get("name", "").asString().length()) != json["infos"].get("name", "").asString()) - Log::error("The class name is different with the name in the config file."); + Log::error("The class name is different with the name in the config file (" + this->_name + ")."); } else { if (json["infos"].get("name", "").asString() != this->_name) Log::warning("The class name is different with the name in the config file."); } + if (json["infos"].get("type", "").isConvertibleTo(Json::ValueType::stringValue)) + type = json["infos"].get("type", "").asString(); this->_name = json["infos"].get("name", "").asString(); - this->_id = json["infos"].get("id", "").asInt(); this->_talk = json["infos"].get("talk", "").asString(); this->addAttribute("talk", json["infos"].get("talk", "").asString()); this->_size = json["infos"].get("size", "").asFloat(); this->SetSize(this->_size); - this->_hp = json["infos"].get("HP", "").asInt(); if (json["infos"].get("maxHP", "").isConvertibleTo(Json::ValueType::intValue)) this->_maxHp = json["infos"].get("maxHP", "").asInt(); - if (json["infos"].get("mana", "").isConvertibleTo(Json::ValueType::intValue)) - this->_mana = json["infos"].get("mana", "").asInt(); - if (json["infos"].get("maxMana", "").isConvertibleTo(Json::ValueType::intValue)) - this->_maxMana = json["infos"].get("maxMana", "").asInt(); this->_hitboxType = json["infos"].get("hitboxType", "").asString(); this->_hitbox = json["infos"].get("hitbox", "").asString(); this->addAttribute("spritesFrame", json["infos"].get("sprites", "").asString()); + this->_hp = this->_maxHp; + if (type != "Boss") { + this->_id = json["infos"].get("id", "").asInt(); + if (json["infos"].get("damage", "").isConvertibleTo(Json::ValueType::stringValue)) + this->addAttribute("damage", json["infos"].get("damage", "").asString()); + this->buff.critBuff = json["infos"].get("baseCrit", 0).asInt(); + this->buff.bonusDmg = json["infos"].get("baseDamage", 0).asInt(); + this->_maxHp += (this->_maxHp * json["Stats"].get("HPMult", 0).asFloat()) * this->_level; + this->buff.critBuff += (this->buff.critBuff * json["Stats"].get("critMult", 0).asFloat() * this->_level); + this->buff.bonusDmg += (this->buff.bonusDmg * json["Stats"].get("damageMult", 0).asFloat() * this->_level); + } for (i = json["Actions"].begin(); i != json["Actions"].end(); i++) { for (v = (*i).begin(); v != (*i).end(); v++) { @@ -275,22 +299,27 @@ void Characters::ReceiveMessage(Message *m) { this->_isAttacking = false; } else if (m->GetMessageName() == "moveHeroDown") { - if (this->_latOrientation == RIGHT && this->_canMove && this->_isAttacking == false) + this->_setCategory("jump"); + if (this->_latOrientation == RIGHT && this->_canMove && this->_isAttacking == false && !this->_isWhirlwinding) { + this->changeSizeTo(Vector2(this->_getAttr("x").asFloat(), this->_getAttr("y").asFloat())); this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, - this->_getAttr("jump", "fallingFrame_right").asInt(), - this->_getAttr("jump", "endFrame_right").asInt() - 3, "jump"); - else if (this->_latOrientation == LEFT && this->_canMove && this->_isAttacking == false) + this->_getAttr("jump", "fallingFrame_right").asInt(), + this->_getAttr("jump", "fallingFrame_right").asInt(), "jump"); + } + else if (this->_latOrientation == LEFT && this->_canMove && this->_isAttacking == false && !this->_isWhirlwinding) { + this->changeSizeTo(Vector2(this->_getAttr("x").asFloat(), this->_getAttr("y").asFloat())); this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, - this->_getAttr("jump", "fallingFrame_left").asInt(), - this->_getAttr("jump", "endFrame_left").asInt() - 3, "jump"); - } - else if (m->GetMessageName() == "destroyEnemy" + this->GetName()) { + this->_getAttr("jump", "fallingFrame_left").asInt(), + this->_getAttr("jump", "fallingFrame_left").asInt(), "jump"); + } + } else if (m->GetMessageName() == "destroyEnemy" + this->GetName()) { new Loot(this); this->_destroyEnemy(); return; } else if (m->GetMessageName() == "setToStatic" + this->GetName()) { this->GetBody()->SetType(b2_staticBody); + this->_isDead = true; return; } else if (m->GetMessageName() == "equipSelectedItem") { @@ -327,10 +356,21 @@ void Characters::ReceiveMessage(Message *m) { this->_inventory->changeItemFocus(); } else if (m->GetMessageName() == "dropItem") { - new Loot(this, this->_inventory->dropSelectedItem()); + new Loot(this, this->_inventory->dropSelectedItem()); } else if (m->GetMessageName() == "speMoveReady") { this->_speMoveReady = 1; + theWorld.Remove(Game::getHUD()->getMoveCooldown()); + } + else if (m->GetMessageName() == "speAttReady") { + this->_speAttReady = 1; + theWorld.Remove(Game::getHUD()->getAttCooldown()); + } + else if (m->GetMessageName().substr(0, 10) == "chooseItem") { + if (this->_isChoosingItem == 1) + return; + this->_isChoosingItem = 1; + this->_inventory->chooseItemFocus(atoi(m->GetMessageName().substr(10, 1).c_str())); } else if (m->GetMessageName() == "dashEnd") { theSwitchboard.UnsubscribeFrom(this, "dashEnd"); @@ -350,6 +390,7 @@ void Characters::ReceiveMessage(Message *m) { this->_isCharging = false; this->_invincibility = false; this->GetBody()->SetLinearVelocity(b2Vec2(0, 0)); + this->AnimCallback("base"); } else if (m->GetMessageName() == "stompEnd") { std::string orientation; @@ -398,13 +439,20 @@ void Characters::ReceiveMessage(Message *m) { Game::getHUD()->bigMap(); } else if (m->GetMessageName() == "deleteMapPressed") { Game::getHUD()->deleteBigMap(1); + } else if (m->GetMessageName() == "escapePressed") { + theSwitchboard.UnsubscribeFrom(this, "escapePressed"); + Game::toggleMenu = true; + this->subscribeToAll(); + Game::chest->removeInterface(); } for (i = this->_attr.begin(); i != this->_attr.end(); i++) { attrName = this->_getAttr(i->first, "subscribe").asString(); if (!strncmp(attrName.c_str(), m->GetMessageName().c_str(), strlen(attrName.c_str()))) { - // Get the key status (1 = Pressed, 0 = Released) status = (m->GetMessageName().substr(strlen(attrName.c_str()), 7) == "Pressed" ? 1 : 0); + //if (this->_actionFlag == false && status == 1) + //return; + this->_actionFlag = false; if (this->_canMove == false) return; if (attrName == "forward") { @@ -423,6 +471,10 @@ void Characters::ReceiveMessage(Message *m) { this->_pickupItem(status); } if (attrName == "specialmove") { this->_specialMove(status); + } if (attrName == "specialattack") { + this->_specialAttack(status); + } if (attrName == "action") { + this->_executeAction(status); } this->_lastAction = attrName; this->actionCallback(attrName, status); @@ -443,7 +495,8 @@ void Characters::AnimCallback(String s) { if (s == "base" || s == "takeDamage") { this->_isAttacking = 0; if (this->_isRunning == 0 && this->_isAttacking == 0 && this->_isLoadingAttack == 0 && - this->_grounds.size() > 0) { + this->_grounds.size() > 0 && !this->_isWhirlwinding) { + this->changeSizeTo(Vector2(this->_getAttr("x").asFloat(), this->_getAttr("y").asFloat())); if (this->_latOrientation == LEFT) { this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, this->_getAttr("beginFrame_left").asInt(), @@ -459,23 +512,19 @@ void Characters::AnimCallback(String s) { } } else if (this->_grounds.size() == 0 && this->getAttribute("type") == "Hero") { this->_setCategory("jump"); - if (this->_latOrientation == LEFT && this->_isDashing == false) { - this->changeSizeTo(Vector2(1,1)); - this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, - this->_getAttr("fallingFrame_left").asInt(), - this->_getAttr("fallingFrame_left").asInt(), "base"); - } else if (this->_latOrientation == RIGHT && this->_isDashing == false) { - this->changeSizeTo(Vector2(1,1)); + this->changeSizeTo(Vector2(this->_getAttr("jump", "x").asFloat(), this->_getAttr("jump", "y").asFloat())); + if (this->_latOrientation == LEFT && this->_isDashing == false && !this->_isWhirlwinding) { + this->changeSizeTo(Vector2(this->_getAttr("jump", "x").asFloat(), this->_getAttr("jump", "y").asFloat())); this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, - this->_getAttr("fallingFrame_right").asInt(), - this->_getAttr("fallingFrame_right").asInt(), "base"); - } else { + this->_getAttr("fallingFrame_left").asInt(), + this->_getAttr("fallingFrame_left").asInt(), "base"); + } else if (this->_latOrientation == RIGHT && this->_isDashing == false && !this->_isWhirlwinding) { + this->changeSizeTo(Vector2(this->_getAttr("jump", "x").asFloat(), this->_getAttr("jump", "y").asFloat())); this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, - this->_getAttr("beginFrame_right").asInt(), - this->_getAttr("endFrame_right").asInt(), "base"); + this->_getAttr("fallingFrame_right").asInt(), + this->_getAttr("fallingFrame_right").asInt(), "base"); } - - } else if (this->_isAttacking == 0) { + } else if (this->_isAttacking == 0 && !this->_isWhirlwinding) { if (this->_isLoadingAttack == 0) { if (this->getAttribute("class") == "Warrior" && this->_isDashing == false) this->changeSizeTo(Vector2(1, 1)); @@ -484,41 +533,54 @@ void Characters::AnimCallback(String s) { } else if (this->_isRunning == 2) { this->_setCategory("backward"); } - this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), - SAT_Loop, - this->_getAttr("beginFrame").asInt(), - this->_getAttr("endFrame").asInt()); + this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_Loop, + this->_getAttr("beginFrame").asInt(), + this->_getAttr("endFrame").asInt(), ""); } else if (this->_fullChargedAttack == true) { std::string orientation; if (this->_latOrientation == RIGHT) { - orientation = "right"; + orientation = "Right"; } else if (this->_latOrientation == LEFT) - orientation = "left"; - this->_setCategory("loadAttack_charge"); - if (this->getAttribute("class") == "Warrior" && this->_isDashing == false) - this->changeSizeTo(Vector2(2, 2)); + orientation = "Left"; + this->_setCategory(this->_weapon->getType()); + this->changeSizeTo(Vector2(this->_getAttr("loadX").asInt(), this->_getAttr("loadY").asInt())); this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, - this->_getAttr("endFrame_" + orientation).asInt(), - this->_getAttr("endFrame_" + orientation).asInt(), "loadAttack_charge"); + this->_getAttr("holdFrameLoad" + orientation).asInt() - 1, + this->_getAttr("holdFrameLoad" + orientation).asInt(), "loadAttack_charge"); } } - if (this->getAttribute("class") == "Warrior" && !this->_isLoadingAttack) - this->changeSizeTo(Vector2(1, 1)); + else { + if (this->_isRunning != 0 && !this->_isWhirlwinding) + this->changeSizeTo(Vector2(this->_getAttr("x").asFloat(), this->_getAttr("y").asFloat())); + } if (this->_isDashing == true) { this->_isDashing = false; this->_canMove = 1; } } else if (s == "endDash") { this->_setCategory("dash"); - //this->_isRunning = 0; std::string orientation; if (this->_latOrientation == RIGHT) orientation = "right"; else if (this->_latOrientation == LEFT) orientation = "left"; this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, - this->_getAttr("endFrame_" + orientation).asInt() - 1, - this->_getAttr("endFrame_" + orientation).asInt(), "base"); + this->_getAttr("endFrame_" + orientation).asInt() - 1, + this->_getAttr("endFrame_" + orientation).asInt(), "base"); + } else if (s == "stompEnd") { + this->_canMove = 1; + this->AnimCallback("base"); + } else if (s == "chargeHold") { + std::string orientation; + if (this->_latOrientation == RIGHT) { + orientation = "Right"; + } else if (this->_latOrientation == LEFT) + orientation = "Left"; + if (this->_isCharging == true) { + this->changeSizeTo(Vector2(this->_getAttr(this->_weapon->getType(), "chargeX").asFloat(), this->_getAttr(this->_weapon->getType(), "chargeY").asFloat())); + } + else + this->AnimCallback("base"); } } @@ -531,6 +593,8 @@ void Characters::AnimCallback(String s) { * @param contact The b2Contact object of the collision. See Box2D docs for more info. */ void Characters::BeginContact(Elements *elem, b2Contact *contact) { + if (!elem) + return ; if (this->_hp <= 0 && this->getAttribute("type") == "Hero") { this->_heroDeath(); return; @@ -542,10 +606,9 @@ void Characters::BeginContact(Elements *elem, b2Contact *contact) { } if (elem->getAttribute("triggerOff") != "") { this->trigger(elem->getAttribute("triggerOff"), 0); } - if (elem->getAttributes()["type"] == "ground") { if (this->_isAttacking == 0 && this->_isLoadingAttack == 0) { - if (this->getAttribute("class") == "Warrior" && this->_isDashing == false) + if (this->getAttribute("class") == "Warrior" && this->_isDashing == false && !this->_isWhirlwinding && !this->_isCharging) this->changeSizeTo(Vector2(1, 1)); } if (this->GetBody()->GetWorldCenter().y - 0.905 >= elem->GetBody()->GetWorldCenter().y) { @@ -561,32 +624,32 @@ void Characters::BeginContact(Elements *elem, b2Contact *contact) { this->_hasDashed = 0; if (this->_latOrientation == RIGHT && this->_isAttacking == false && this->_isLoadingAttack == 0 && this->_isDashing == false && - this->_isStomping == false) { - if (this->getAttribute("class") == "Warrior") - this->changeSizeTo(Vector2(1, 1)); - this->PlaySpriteAnimation(0.1f, SAT_OneShot, - this->_getAttr("jump", "endFrame_right").asInt() - 2, - this->_getAttr("jump", "endFrame_right").asInt(), "base"); + this->_isStomping == false && !this->_isWhirlwinding && !this->_isCharging) { + this->changeSizeTo(Vector2(this->_getAttr("jump", "x").asFloat(), this->_getAttr("jump", "y").asFloat())); + this->PlaySpriteAnimation(this->_getAttr("jump", "time").asFloat(), SAT_OneShot, + this->_getAttr("jump", "fallingFrame_right").asInt(), + this->_getAttr("jump", "endFrame_right").asInt(), "base"); } else if (this->_latOrientation == LEFT && this->_isAttacking == false && this->_isLoadingAttack == 0 && - this->_isStomping == false) { - if (this->getAttribute("class") == "Warrior" && this->_isDashing == false) - this->changeSizeTo(Vector2(1, 1)); - this->PlaySpriteAnimation(0.1f, SAT_OneShot, - this->_getAttr("jump", "endFrame_left").asInt() - 2, - this->_getAttr("jump", "endFrame_left").asInt(), "base"); + this->_isStomping == false && !this->_isWhirlwinding && !this->_isCharging) { + if (this->_isDashing == false) + this->changeSizeTo(Vector2(this->_getAttr("jump", "x").asFloat(), this->_getAttr("jump", "y").asFloat())); + this->PlaySpriteAnimation(this->_getAttr("jump", "time").asFloat(), SAT_OneShot, + this->_getAttr("jump", "fallingFrame_left").asInt(), + this->_getAttr("jump", "endFrame_left").asInt(), "base"); } } this->_grounds.push_back(elem); if (this->_isStomping == true) { theSwitchboard.Broadcast(new Message("stompEnd")); - new Weapon(this->_weapon, this, 1); - new Weapon(this->_weapon, this, -1); + new Weapon(this->_weapon, this, 1, "stompArea"); + new Weapon(this->_weapon, this, -1, "stompArea"); + this->_isStomping = false; } } else if (this->GetBody()->GetWorldCenter().y <= elem->GetBody()->GetWorldCenter().y - 0.905) { this->_ceiling.push_back(elem); - } else if (this->GetBody()->GetWorldCenter().x >= elem->GetBody()->GetWorldCenter().x) { + } else if (this->GetBody()->GetWorldCenter().x >= elem->GetBody()->GetWorldCenter().x && elem->getAttribute("speType") != "canCross") { if (this->_isCharging == 1) { theSwitchboard.Broadcast(new Message("chargeEnd")); } @@ -594,11 +657,16 @@ void Characters::BeginContact(Elements *elem, b2Contact *contact) { contact->SetEnabled(false); else { if (this->_speMove == "wallJump" && this->_grounds.size() == 0) { - this->GetBody()->SetGravityScale(0.3); + this->changeSizeTo(Vector2(this->_getAttr("jump", "holdX").asInt(), this->_getAttr("jump", "holdY").asInt())); + this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_Loop, + this->_getAttr("jump", "holdFrame_left").asInt(), + this->_getAttr("jump", "holdFrame_left").asInt(), "jump"); + this->GetBody()->SetLinearVelocity(b2Vec2(0, 0)); + this->GetBody()->SetGravityScale(0.1); } } this->_wallsLeft.push_back(elem); - } else if (this->GetBody()->GetWorldCenter().x < elem->GetBody()->GetWorldCenter().x) { + } else if (this->GetBody()->GetWorldCenter().x < elem->GetBody()->GetWorldCenter().x && elem->getAttribute("speType") != "canCross") { if (this->_isCharging == 1) { theSwitchboard.Broadcast(new Message("chargeEnd")); } @@ -606,7 +674,12 @@ void Characters::BeginContact(Elements *elem, b2Contact *contact) { contact->SetEnabled(false); else { if (this->_speMove == "wallJump" && this->_grounds.size() == 0) { - this->GetBody()->SetGravityScale(0.3); + this->changeSizeTo(Vector2(this->_getAttr("jump", "holdX").asInt(), this->_getAttr("jump", "holdY").asInt())); + this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_Loop, + this->_getAttr("jump", "holdFrame_right").asInt(), + this->_getAttr("jump", "holdFrame_right").asInt(), "jump"); + this->GetBody()->SetLinearVelocity(b2Vec2(0, 0)); + this->GetBody()->SetGravityScale(0.1); } } this->_wallsRight.push_back(elem); @@ -637,6 +710,8 @@ void Characters::BeginContact(Elements *elem, b2Contact *contact) { * @param: contact The b2Contact object of the collided element. See Box2D docs for more info. */ void Characters::EndContact(Elements *elem, b2Contact *contact) { + if (!elem) + return ; if (elem->getAttribute("trigger") != "") { this->_callTrigger(elem->getAttribute("trigger"), 1); } if (elem->getAttribute("triggerOn") != "") { @@ -655,29 +730,29 @@ void Characters::EndContact(Elements *elem, b2Contact *contact) { this->_isJump++; if (this->_lastAction == "forward" && this->_canMove && this->_isAttacking == false && this->_isLoadingAttack == 0) { - if (this->getAttribute("class") == "Warrior" && this->_isDashing == false) - this->changeSizeTo(Vector2(1, 1)); - if (this->_isDashing == false) - this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, - this->_getAttr("jump", "fallingFrame_right").asInt(), - this->_getAttr("jump", "endFrame_right").asInt() - 3, "jump"); + if (this->_isDashing == false && !this->_isWhirlwinding && !this->_isCharging) { + this->changeSizeTo(Vector2(this->_getAttr("jump", "x").asFloat(), this->_getAttr("jump", "y").asFloat())); + this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, + this->_getAttr("jump", "fallingFrame_right").asInt(), + this->_getAttr("jump", "fallingFrame_right").asInt(), "jump"); + } } else if (this->_lastAction == "backward" && this->_canMove && - this->_isAttacking == false && this->_isLoadingAttack == 0) { - if (this->getAttribute("class") == "Warrior" && this->_isDashing == false) - this->changeSizeTo(Vector2(1, 1)); - if (this->_isDashing == false) { - this->changeSizeTo(Vector2(1,1)); - this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, - this->_getAttr("jump", "fallingFrame_left").asInt(), - this->_getAttr("jump", "endFrame_left").asInt() - 3, "jump"); + this->_isAttacking == false && this->_isLoadingAttack == 0) { + if (this->_isDashing == false && !this->_isWhirlwinding && !this->_isCharging) { + this->changeSizeTo(Vector2(this->_getAttr("jump", "x").asFloat(), this->_getAttr("jump", "y").asFloat())); + this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, + this->_getAttr("jump", "fallingFrame_left").asInt(), + this->_getAttr("jump", "fallingFrame_left").asInt(), "jump"); } } } } else this->_grounds.remove(elem); - if (this->_wallsLeft.size() == 0 && this->_wallsRight.size() == 0 && this->_speMove == "wallJump") + if (this->_wallsLeft.size() == 0 && this->_wallsRight.size() == 0 && this->_speMove == "wallJump" && this->_grounds.size() == 0) { this->GetBody()->SetGravityScale(1); + this->AnimCallback("base"); + } } } @@ -710,9 +785,11 @@ void Characters::_tryFly(void) { } void Characters::_resetBroadcastFlags(void) { + this->_actionFlag = true; this->_forwardFlag = false; this->_backwardFlag = false; this->_doFlyFlag = false; + this->_isChoosingItem = 0; } /****************************/ @@ -721,6 +798,65 @@ void Characters::_resetBroadcastFlags(void) { /* */ /****************************/ +//! Execute action +/** + * The character will execute an action depending on what he currently touches + * if nothing is touched, drug is used + */ +void Characters::_executeAction(int status) { + if (status == 1 && this->_execFlag == 1) + return; + if (status == 0) { + this->_execFlag = 0; + return; + } + this->_execFlag = 1; + if (this->_isTouchingChest == true && Game::chest->isUsed() == 0) { + theCamera.MoveTo(Vector3(Game::spawnChest.X, Game::spawnChest.Y, 4), true); + Game::toggleMenu = false; + this->unsubscribeFromAll(); + theSwitchboard.SubscribeTo(this, "escapePressed"); + Game::chest->displayInterface(); + } else if (this->_isTouchingBossDoor == true) { + Game::stopPattern = true; + Game::currentGame->getCurrentMap().destroyMap(); + this->inSpecialMap = 1; + this->destroyTarget(); + Game::currentGame->maps->bossMap->display(); + theCamera.SetPosition(Game::currentGame->maps->bossMap->getXMid(), Game::currentGame->maps->bossMap->getYMid() + 1.8); + Game::addBoss("Boss" + std::to_string(Game::World), Game::currentGame->maps->bossMap->getXMid(), Game::currentGame->maps->bossMap->getYMid()); + this->GetBody()->SetTransform(b2Vec2(Game::currentGame->maps->bossMap->getXMid() - 10, Game::currentGame->maps->bossMap->getYMid() + 1.8), 0); + } else if (this->_isTouchingSecretDoor == true) { + this->destroyTarget(); + if (this->inSpecialMap == 2) { + Game::stopPattern = false; + Game::currentGame->maps->secretMap->destroyMap(); + this->inSpecialMap = 0; + theCamera.SetPosition(Game::currentGame->getCurrentMap().getXMid(), Game::currentGame->getCurrentMap().getYMid() + 1.8); + this->GetBody()->SetTransform(b2Vec2(Game::spawnSecretDoor.X, Game::spawnSecretDoor.Y), 0); + b2PolygonShape box = Game::hList->getHitbox(this->_hitbox); + b2Shape *shape = &box; + this->GetBody()->DestroyFixture(this->GetBody()->GetFixtureList()); + this->GetBody()->CreateFixture(shape, 1); + } else { + Game::stopPattern = true; + this->inSpecialMap = 2; + Game::currentGame->maps->secretMap->display(); + theCamera.SetPosition(Game::currentGame->getCurrentMap().getXMid(), Game::currentGame->getCurrentMap().getYMid() + 1.8); + this->GetBody()->SetTransform(b2Vec2(Game::spawnSecretReturnDoor.X, Game::spawnSecretReturnDoor.Y), 0); + b2PolygonShape box = Game::hList->getHitbox(this->_hitbox); + b2Shape *shape = &box; + this->GetBody()->DestroyFixture(this->GetBody()->GetFixtureList()); + this->GetBody()->CreateFixture(shape, 1); + } + } + if(this->_isTouchingDealer == true) + theSwitchboard.Broadcast(new Message("giveDrug")); + if (this->_drug != "") + theSwitchboard.Broadcast(new Message("drugPressed")); +} + + //! Forward action /** * Making a Characters run forward. @@ -732,37 +868,39 @@ void Characters::_resetBroadcastFlags(void) { */ void Characters::_forward(int status) { this->_setCategory("forward"); - if (this->_forwardFlag == true && status == 1) - return ; - this->_forwardFlag = true; if (status == 1) { + if (this->_forwardFlag == true) + return; + this->_forwardFlag = true; this->_orientation = RIGHT; this->_latOrientation = RIGHT; if ((this->GetSpriteFrame() < this->_getAttr("beginFrame").asInt() || (this->GetSpriteFrame() >= this->_getAttr("backward", "beginFrame").asInt() && this->GetSpriteFrame() <= this->_getAttr("backward", "endFrame").asInt())) && - !this->_isJump && !this->_isLoadingAttack && !this->_isFlying) + !this->_isJump && !this->_isLoadingAttack && !this->_isWhirlwinding && !this->_isCharging) { + this->changeSizeTo(Vector2(this->_getAttr("x").asInt(), this->_getAttr("y").asInt())); this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_Loop, - this->_getAttr("beginFrame").asInt(), this->_getAttr("endFrame").asInt()); - else if (this->_isJump && !this->_isLoadingAttack && !this->_isFlying) { + this->_getAttr("beginFrame").asInt(), this->_getAttr("endFrame").asInt()); + } + else if (this->_isJump && !this->_isLoadingAttack && !this->_isFlying && !this->_isWhirlwinding && !this->_isCharging) { this->_setCategory("jump"); + this->changeSizeTo(Vector2(this->_getAttr("x").asInt(), this->_getAttr("y").asInt())); if (this->GetSpriteFrame() >= this->_getAttr("beginFrame_left").asInt() && this->GetSpriteFrame() <= this->_getAttr("endFrame_left").asInt()) this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, - this->GetSpriteFrame() - 8, - this->_getAttr("endFrame_right").asInt() - 3, "jump"); + this->_getAttr("fallingFrame_right").asInt(), + this->_getAttr("fallingFrame_right").asInt(), "jump"); this->_setCategory("forward"); } else if (this->_isLoadingAttack) { - this->_setCategory("loadAttack_charge"); - if (this->getAttribute("class") == "Warrior") - this->changeSizeTo(Vector2(2, 2)); + this->_setCategory(this->_weapon->getType()); + this->changeSizeTo(Vector2(this->_getAttr("loadX").asInt(), this->_getAttr("loadY").asInt())); this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, - this->_getAttr("endFrame_right").asInt(), - this->_getAttr("endFrame_right").asInt(), "loadAttack_charge"); + this->_getAttr("holdFrameLoadRight").asInt() - 1, + this->_getAttr("holdFrameLoadRight").asInt(), "loadAttack_charge"); this->_setCategory("forward"); } Game::startRunning(this); if (this->_isRunning == 2 && this->_isDashing == false) - this->GetBody()->SetLinearVelocity(b2Vec2(this->_getAttr("force").asFloat(), this->GetBody()->GetLinearVelocity().y)); + this->GetBody()->SetLinearVelocity(b2Vec2(this->_getAttr("force").asFloat() + this->buff.bonusSpeed + this->buff.drugSpeed, this->GetBody()->GetLinearVelocity().y)); this->_isRunning = 1; } else if (status == 0 && this->_latOrientation == RIGHT) { if (this->_isDashing == false) @@ -772,8 +910,13 @@ void Characters::_forward(int status) { if (!this->_isJump && !this->_isAttacking && this->_isDashing == false) this->AnimCallback("base"); } else { - if (this->_wallsRight.size() == 0 && this->_canMove == true && this->_isRunning != 0 && this->_isDashing == false) - this->GetBody()->SetLinearVelocity(b2Vec2(this->_getAttr("force").asFloat(), this->GetBody()->GetLinearVelocity().y)); + if (this->_forwardFlag == true) + return; + this->_forwardFlag = true; + if (this->_wallsRight.size() == 0 && this->_canMove == true && this->_isRunning != 0 && this->_isDashing == false && this->buff.cur != "mdma") + this->GetBody()->SetLinearVelocity(b2Vec2(this->_getAttr("force").asFloat() + this->buff.bonusSpeed + this->buff.drugSpeed, this->GetBody()->GetLinearVelocity().y)); + else if (this->_wallsLeft.size() == 0 && this->_canMove == true && this->_isRunning != 0 && this->_isDashing == false && this->buff.cur == "mdma") + this->GetBody()->SetLinearVelocity(b2Vec2(this->_getAttr("force").asFloat() + this->buff.bonusSpeed + this->buff.drugSpeed, this->GetBody()->GetLinearVelocity().y)); } return ; } @@ -787,38 +930,39 @@ void Characters::_forward(int status) { */ void Characters::_backward(int status) { this->_setCategory("backward"); - if (this->_backwardFlag == true && status == 1) - return ; - this->_backwardFlag = true; if (status == 1) { + if (this->_backwardFlag == true) + return; + this->_backwardFlag = true; if (this->getAttribute("type") == "Hero") { this->_orientation = LEFT; this->_latOrientation = LEFT; } if (this->GetSpriteFrame() < this->_getAttr("beginFrame").asInt() && - !this->_isJump && !this->_isLoadingAttack) + !this->_isJump && !this->_isLoadingAttack && !this->_isWhirlwinding && !this->_isCharging) { + this->changeSizeTo(Vector2(this->_getAttr("x").asInt(), this->_getAttr("y").asInt())); this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_Loop, - this->_getAttr("beginFrame").asInt(), - this->_getAttr("endFrame").asInt()); - else if (this->_isJump && !this->_isLoadingAttack) { + this->_getAttr("beginFrame").asInt(), + this->_getAttr("endFrame").asInt()); + } else if (this->_isJump && !this->_isLoadingAttack && !this->_isWhirlwinding && !this->_isCharging) { this->_setCategory("jump"); + this->changeSizeTo(Vector2(this->_getAttr("x").asInt(), this->_getAttr("y").asInt())); if (this->GetSpriteFrame() >= this->_getAttr("beginFrame_right").asInt() && this->GetSpriteFrame() <= this->_getAttr("endFrame_right").asInt()) this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, - this->GetSpriteFrame() + 8, - this->_getAttr("endFrame_left").asInt() - 3, "jump"); + this->_getAttr("fallingFrame_left").asInt(), + this->_getAttr("fallingFrame_left").asInt(), "jump"); this->_setCategory("backward"); } else if (this->_isLoadingAttack) { - this->_setCategory("loadAttack_charge"); - if (this->getAttribute("class") == "Warrior") - this->changeSizeTo(Vector2(2, 2)); + this->_setCategory(this->_weapon->getType()); + this->changeSizeTo(Vector2(this->_getAttr("loadX").asInt(), this->_getAttr("loadY").asInt())); this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, - this->_getAttr("endFrame_left").asInt(), - this->_getAttr("endFrame_left").asInt(), "loadAttack_charge"); + this->_getAttr("holdFrameLoadLeft").asInt() - 1, + this->_getAttr("holdFrameLoadLeft").asInt(), "loadAttack_charge"); this->_setCategory("backward"); } Game::startRunning(this); if (this->_isRunning == 1 && this->_isDashing == false) - this->GetBody()->SetLinearVelocity(b2Vec2(-this->_getAttr("force").asFloat(), this->GetBody()->GetLinearVelocity().y)); + this->GetBody()->SetLinearVelocity(b2Vec2(-this->_getAttr("force").asFloat() - this->buff.bonusSpeed - this->buff.drugSpeed, this->GetBody()->GetLinearVelocity().y)); this->_isRunning = 2; } else if (status == 0 && this->_latOrientation == LEFT) { if (this->_isDashing == false) @@ -828,9 +972,13 @@ void Characters::_backward(int status) { if (!this->_isJump && !this->_isAttacking && !this->_isDashing) this->AnimCallback("base"); } else { - if (this->_wallsLeft.size() == 0 && this->_canMove == true && this->_isRunning != 0 && this->_isDashing == false) { - this->GetBody()->SetLinearVelocity(b2Vec2(-this->_getAttr("force").asFloat(), this->GetBody()->GetLinearVelocity().y)); - } + if (this->_backwardFlag == true) + return; + this->_backwardFlag = true; + if (this->_wallsLeft.size() == 0 && this->_canMove == true && this->_isRunning != 0 && this->_isDashing == false && this->buff.cur != "mdma") + this->GetBody()->SetLinearVelocity(b2Vec2(-this->_getAttr("force").asFloat() - this->buff.bonusSpeed - this->buff.drugSpeed, this->GetBody()->GetLinearVelocity().y)); + else if (this->_wallsRight.size() == 0 && this->_canMove == true && this->_isRunning != 0 && this->_isDashing == false && this->buff.cur == "mdma") + this->GetBody()->SetLinearVelocity(b2Vec2(-this->_getAttr("force").asFloat() - this->buff.bonusSpeed - this->buff.drugSpeed, this->GetBody()->GetLinearVelocity().y)); } return ; } @@ -852,44 +1000,46 @@ void Characters::_jump(int status) { this->GetBody()->SetGravityScale(1); if (this->_wallsLeft.size() > 0 && this->_wallsRight.size() == 0) { this->GetBody()->SetLinearVelocity(b2Vec2(5, this->_getAttr("rejump").asFloat())); + this->changeSizeTo(Vector2(this->_getAttr("x").asInt(), this->_getAttr("y").asInt())); this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, - this->_getAttr("beginFrame_right").asInt(), - this->_getAttr("endFrame_right").asInt() - 3, "jump"); + this->_getAttr("holdFrame_left").asInt(), + this->_getAttr("rejumpFrame_left").asInt(), "base"); } else if (this->_wallsRight.size() > 0 && this->_wallsLeft.size() == 0) { this->GetBody()->SetLinearVelocity(b2Vec2(-5, this->_getAttr("rejump").asFloat())); + this->changeSizeTo(Vector2(this->_getAttr("x").asInt(), this->_getAttr("y").asInt())); this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, - this->_getAttr("beginFrame_left").asInt(), - this->_getAttr("endFrame_left").asInt() - 3, "jump"); + this->_getAttr("holdFrame_right").asInt(), + this->_getAttr("rejumpFrame_right").asInt(), "base"); } else this->GetBody()->SetLinearVelocity(b2Vec2(0, this->_getAttr("rejump").asFloat())); Game::stopRunning(this); } else if (this->_isJump == 0 || (this->_isJump < this->_getAttr("max").asInt())) { if (this->_isJump >= 1) { this->GetBody()->SetLinearVelocity(b2Vec2(this->GetBody()->GetLinearVelocity().x, - this->_getAttr("rejump").asFloat())); - if (this->_isAttacking == false && this->_isLoadingAttack == 0) { - if (this->getAttribute("class") == "Warrior" && this->_isDashing == false) - this->changeSizeTo(Vector2(1, 1)); + this->_getAttr("rejump").asFloat())); + if (this->_isAttacking == false && this->_isLoadingAttack == 0 && !this->_isWhirlwinding && !this->_isCharging) { + if (this->_isDashing == false) + this->changeSizeTo(Vector2(this->_getAttr("jump", "x").asFloat(), this->_getAttr("jump", "y").asFloat())); if (this->_latOrientation == RIGHT) { + this->changeSizeTo(Vector2(this->_getAttr("x").asInt(), this->_getAttr("y").asInt())); this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, - this->_getAttr("beginFrame_right").asInt(), - this->_getAttr("endFrame_right").asInt() - 3, "jump"); + this->_getAttr("beginFrame_right").asInt(), + this->_getAttr("fallingFrame_right").asInt(), "jump"); } } } else { this->ApplyLinearImpulse(Vector2(0, this->_getAttr("force").asFloat()), Vector2(0, 0)); } - if (this->_isAttacking == false && this->_isLoadingAttack == 0) { - if (this->getAttribute("class") == "Warrior") - this->changeSizeTo(Vector2(1, 1)); + if (this->_isAttacking == false && this->_isLoadingAttack == 0 && !this->_isWhirlwinding && !this->_isCharging) { + this->changeSizeTo(Vector2(this->_getAttr("jump", "x").asFloat(), this->_getAttr("jump", "y").asFloat())); if (this->_latOrientation == RIGHT) { this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, this->_getAttr("beginFrame_right").asInt(), - this->_getAttr("endFrame_right").asInt() - 3, "jump"); + this->_getAttr("fallingFrame_right").asInt(), "jump"); } else if (this->_latOrientation == LEFT) { this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, this->_getAttr("beginFrame_left").asInt(), - this->_getAttr("endFrame_left").asInt() - 3, "jump"); + this->_getAttr("fallingFrame_left").asInt(), "jump"); } } if (this->_grounds.size() == 0) @@ -1013,7 +1163,7 @@ void Characters::_pickupItem(int status) { this->_inventory->addItemToInventory(this->_shopItem); } theSwitchboard.Broadcast(new Message("deleteShopItem" + - this->_shopItemNumber)); + std::to_string(this->_shopItemNumber))); theSwitchboard.DeferredBroadcast(new Message("removeShopkeeperText"), 3); this->_shopItem = ""; this->_gold -= this->_shopItemPrice; @@ -1037,6 +1187,9 @@ void Characters::_pickupItem(int status) { this->_item->GetName())); this->_item = nullptr; } + else { + theSwitchboard.Broadcast(new Message("dropItem")); + } } //! Executes special move @@ -1046,13 +1199,11 @@ void Characters::_pickupItem(int status) { */ void Characters::_specialMove(int status) { - if (status == 1) { + if (status == 1 && this->_speMoveReady) { if (this->_speMove == "totem" && this->_totemDeletionSent == 0 && this->_totem != nullptr) this->_totemDeletionSent = 1; theSwitchboard.SubscribeTo(this, "removeTotem"); theSwitchboard.DeferredBroadcast(new Message("removeTotem"), 3); - } - if (status == 0) { if (this->_speMove == "dash") this->_eqMove->_dash(); else if (this->_speMove == "charge") @@ -1063,7 +1214,14 @@ void Characters::_specialMove(int status) { this->_eqMove->_blink(); else if (this->_speMove == "fly") this->_eqMove->_fly(); - else if (this->_speMove == "totem") { + else if (this->_speMove == "shunpo") + this->_eqMove->_shunpo(); + else if (this->_speMove == "disengage") + this->_eqMove->_disengage(); + this->_speMoveReady = 0; + } + if (status == 0) { + if (this->_speMove == "totem") { this->_totemDeletionSent = 0; theSwitchboard.UnsubscribeFrom(this, "removeTotem"); if (this->_totemPlaced == 0) @@ -1071,10 +1229,17 @@ void Characters::_specialMove(int status) { else this->_totemPlaced = 0; } - else if (this->_speMove == "shunpo") - this->_eqMove->_shunpo(); - else if (this->_speMove == "disengage") - this->_eqMove->_disengage(); + } +} + +void Characters::_specialAttack(int status) { + if (status == 0) { + if (this->_speAtt == "whirlwind") + this->_eqAtt->_whirlwind(); + else if (this->_speAtt == "shockwave") + this->_eqAtt->_shockwave(); + if (this->_speAtt == "rapidFire") + this->_eqAtt->_rapidFire(); } } @@ -1084,8 +1249,10 @@ void Characters::_specialMove(int status) { * @param The Weapon object */ void Characters::equipWeapon(Weapon* weapon) { - this->_weapon = new Weapon(weapon); - Game::getHUD()->items(this->_weapon); + if (weapon->getEquipable() == this->getAttribute("class")) { + this->_weapon = new Weapon(weapon); + Game::getHUD()->items(this->_weapon); + } } //! Unequip a weapon @@ -1104,19 +1271,18 @@ void Characters::unequipWeapon(void) { */ void Characters::equipArmor(Armor* armor) { this->_armor = new Armor(armor); - if (this->_armor->getAttribute("hpBuff") != ""){ + + if (this->_armor->getAttribute("hpBuff") != "") this->_maxHp += std::stoi(this->_armor->getAttribute("hpBuff")); - this->_hp += std::stoi(this->_armor->getAttribute("hpBuff")); - } - if (this->_armor->getAttribute("manaBuff") != ""){ - this->_maxMana += std::stoi(this->_armor->getAttribute("manaBuff")); - this->_mana += std::stoi(this->_armor->getAttribute("manaBuff")); - } + if (this->_armor->getAttribute("dmgReduc") != "") + this->buff.dmgReduc += std::stoi(this->_armor->getAttribute("dmgReduc")); + if (this->_armor->getAttribute("bonusSpeed") != "") + this->buff.bonusSpeed += std::stoi(this->_armor->getAttribute("bonusSpeed")); + if (this->_armor->getAttribute("bonusDmg") != "") + this->buff.bonusDmg += std::stoi(this->_armor->getAttribute("bonusDmg")); Game::getHUD()->items(this->_armor); Game::getHUD()->setMaxHP(this->_maxHp); Game::getHUD()->life(this->_hp); - Game::getHUD()->setMaxMana(this->_maxMana); - Game::getHUD()->mana(this->_mana); } //! Unequip a armor @@ -1131,16 +1297,15 @@ void Characters::unequipArmor(void) { if (this->_hp > this->_maxHp) this->_hp = this->_maxHp; } - if (this->_armor->getAttribute("manaBuff") != "") { - this->_maxMana -= std::stoi(this->_armor->getAttribute("manaBuff")); - if (this->_mana > this->_maxMana) - this->_mana = this->_maxMana; - } + if (this->_armor->getAttribute("dmgReduc") != "") + this->buff.dmgReduc -= std::stoi(this->_armor->getAttribute("dmgReduc")); + if (this->_armor->getAttribute("bonusSpeed") != "") + this->buff.bonusSpeed -= std::stoi(this->_armor->getAttribute("bonusSpeed")); + if (this->_armor->getAttribute("bonusDmg") != "") + this->buff.bonusDmg -= std::stoi(this->_armor->getAttribute("bonusDmg")); Game::getHUD()->items(this->_armor); Game::getHUD()->setMaxHP(this->_maxHp); Game::getHUD()->life(this->_hp); - Game::getHUD()->setMaxMana(this->_maxMana); - Game::getHUD()->mana(this->_mana); } //! Equip a ring @@ -1150,19 +1315,18 @@ void Characters::unequipArmor(void) { */ void Characters::equipRing(Ring* ring) { this->_ring = new Ring(ring); - if (this->_ring->getAttribute("hpBuff") != "") { + + if (this->_ring->getAttribute("hpBuff") != "") this->_maxHp += std::stoi(this->_ring->getAttribute("hpBuff")); - this->_hp += std::stoi(this->_ring->getAttribute("hpBuff")); - } - if (this->_ring->getAttribute("manaBuff") != "") { - this->_maxMana += std::stoi(this->_ring->getAttribute("manaBuff")); - this->_mana += std::stoi(this->_ring->getAttribute("manaBuff")); - } + if (this->_ring->getAttribute("dmgReduc") != "") + this->buff.dmgReduc += std::stoi(this->_ring->getAttribute("dmgReduc")); + if (this->_ring->getAttribute("bonusSpeed") != "") + this->buff.bonusSpeed += std::stoi(this->_ring->getAttribute("bonusSpeed")); + if (this->_ring->getAttribute("bonusDmg") != "") + this->buff.bonusDmg += std::stoi(this->_ring->getAttribute("bonusDmg")); Game::getHUD()->items(this->_ring); Game::getHUD()->setMaxHP(this->_maxHp); Game::getHUD()->life(this->_hp); - Game::getHUD()->setMaxMana(this->_maxMana); - Game::getHUD()->mana(this->_mana); } //! Unequip a ring @@ -1177,11 +1341,12 @@ void Characters::unequipRing(void) { if (this->_hp > this->_maxHp) this->_hp = this->_maxHp; } - if (this->_ring->getAttribute("manaBuff") != "") { - this->_maxMana -= std::stoi(this->_ring->getAttribute("manaBuff")); - if (this->_mana > this->_maxMana) - this->_mana = this->_maxMana; - } + if (this->_ring->getAttribute("dmgReduc") != "") + this->buff.dmgReduc -= std::stoi(this->_ring->getAttribute("dmgReduc")); + if (this->_ring->getAttribute("bonusSpeed") != "") + this->buff.bonusSpeed -= std::stoi(this->_ring->getAttribute("bonusSpeed")); + if (this->_ring->getAttribute("bonusDmg") != "") + this->buff.bonusDmg -= std::stoi(this->_ring->getAttribute("bonusDmg")); } //! Set basics hp @@ -1194,18 +1359,16 @@ void Characters::setHP(int hp) { this->_hp = this->_maxHp; else this->_hp = hp; + Game::getHUD()->life(this->_hp); }; -//! Set basics mana +//! Set invincibility /** - * Set Mana to the Character. - * @param mana The Mana number + * Set invincibility to the Character. + * @param invincibility */ -void Characters::setMana(int mana) { - if (mana > this->_maxMana) - this->_mana = this->_maxMana; - else - this->_mana = mana; +void Characters::setInvincibility(bool invincibility) { + this->_invincibility = invincibility; }; //! Destroy an Enemy. @@ -1223,7 +1386,6 @@ void Characters::_destroyEnemy(void) { */ void Characters::destroyTarget(void) { if (this->_target != nullptr) { - // std::cout << "destroyTarget (Characters.cpp l.1077)" << std::endl; Game::addToDestroyList(this->_target); this->_target = nullptr; } @@ -1246,8 +1408,11 @@ void Characters::_heroDeath(void) { ghost->SetSprite("Resources/Images/Ghost/ghost_000.png", 0); ghost->LoadSpriteFrames("Resources/Images/Ghost/ghost_000.png"); ghost->MoveTo(Vector2(this->GetBody()->GetWorldCenter().x, this->GetBody()->GetWorldCenter().y + 7), 4); + ghost->SetLayer(101); theWorld.Add(ghost); + theSwitchboard.Broadcast(new Message("deleteBoss")); ghost->PlaySpriteAnimation(0.2f, SAT_OneShot, 0, 10, "ghost"); + this->_ghost = ghost; } /** @@ -1261,6 +1426,16 @@ void Characters::unsubscribeFromAll(void) { } } +void Characters::UnsubscribeFromAll(void) { + StringSet sub; + + sub = theSwitchboard.GetSubscriptionsFor(this); + for (StringSet::iterator k = sub.begin(); k != sub.end(); k++) { + theSwitchboard.UnsubscribeFrom(this, *k); + } +} + + /** * Subscribe the character to all the broadcasts */ @@ -1282,12 +1457,12 @@ void Characters::_callTrigger(std::string name, int s) { /* GETTERS */ Characters::Orientation Characters::getOrientation(void) { return this->_orientation; } std::string Characters::getLastAction(void) { return this->_lastAction; }; +Characters::Orientation Characters::getLatOrientation(void) { return this->_latOrientation; } Elements* Characters::getItem(void) { return this->_item; } int Characters::getHP(void) { return this->_hp; }; -int Characters::getMana(void) { return this->_mana; }; -int Characters::getMaxMana(void) { return this->_maxMana; }; int Characters::getMaxHP(void) { return this->_maxHp; }; int Characters::getGold(void) { return this->_gold; }; +Actor *Characters::getGhost(void) { return this->_ghost; }; void Characters::setGold(int n) { this->_gold = n; }; void Characters::setLevel(int n) { this->_level = n; }; void Characters::changeCanMove(void) { this->_canMove = (this->_canMove ? false : true); }; @@ -1300,3 +1475,5 @@ std::list<std::string> Characters::getSubscribes(void) { return this->_subsc; } int Characters::getLevel(void) { return this->_level; }; int Characters::getMaxInventory(void) { return this->_inventory->getSlots(); }; Inventory *Characters::getInventory(void) { return this->_inventory; }; +std::string Characters::getSpeMove(void) { return this->_speMove; }; +std::string Characters::getSpeAtt(void) { return this->_speAtt; }; diff --git a/Sources/src/Chest.cpp b/Sources/src/Chest.cpp @@ -0,0 +1,226 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * File: Chest.cpp + * Creation: 2015-08-27 04:44 + * Vincent Rey <vrey@student.42.fr> + */ + +#include "Chest.hpp" + +Chest::Chest(void) : isSpawn(0) { + // this->_contains = nullptr; + this->SetLayer(10); + this->SetDensity(0); + this->SetIsSensor(1); + this->addAttribute("class", "Chest"); + this->addAttribute("type", "Chest"); + this->addAttribute("chest", "1"); + this->addAttribute("physic", "1"); + this->addAttribute("sprite", ""); + this->addAttribute("spritesFrame", "Resources/Images/Chest/chest_000.png"); + this->_target = nullptr; + this->_chestItems[0] = this->_chestItems[1] = this->_chestItems[2] = ""; + this->_isUsed = this->_gold = 0; + return; +} + +Chest::~Chest(void) {} + +void Chest::spawn(void) { + this->setXStart(Game::spawnChest.X); + this->setYStart(Game::spawnChest.Y); + this->display(); + this->isSpawn = 1; + if (this->_isUsed == 0) { + if (this->_gold) + this->PlaySpriteAnimation(0.4f, SAT_OneShot, 0, 2); + else + this->PlaySpriteAnimation(0.4f, SAT_OneShot, 3, 4); + } +} + +void Chest::displayInterface(void) { + HUDWindow *w = Game::getHUD(); + int height = theCamera.GetWindowHeight(), width = theCamera.GetWindowWidth(); + + // Subscribe + theSwitchboard.SubscribeTo(this, "upPressed"); + theSwitchboard.SubscribeTo(this, "downPressed"); + theSwitchboard.SubscribeTo(this, "forwardPressed"); + theSwitchboard.SubscribeTo(this, "backwardPressed"); + theSwitchboard.SubscribeTo(this, "enterPressed"); + + // Display Interface + this->_interfaceElem.push_back(w->addImage("Resources/Images/bag.png", width / 2, + height - ((height / 3) * 2), Vector2(width - (width / 4), height / 5), 101)); + this->displayChestContent(); +} + +void Chest::displayChestContent(void) { + int height = theCamera.GetWindowHeight(), width = theCamera.GetWindowWidth(); + HUDWindow *w = Game::getHUD(); + HUDActor *tmp; + int x = width / 2 - width / 4, y = height - ((height / 3) * 2), i; + + for (i = 0; i < 3; i++, x += width / 6) { + tmp = w->addImage("Resources/Images/bag_slot.png", x, y, 80, 102); + this->_interfaceElem.push_back(tmp); + this->_choices.push_back(tmp); + if (i == 0) + this->_choicePointer = tmp; + } + tmp = w->addImage("Resources/Images/gold.png", x, y, 80, 150); + w->setText(std::to_string(this->_gold) + "G", x - (std::to_string(this->_gold).length() / 2) * 10, y + 50, Vector3(0, 0, 0), 1); + this->_choices.push_back(tmp); + this->_interfaceElem.push_back(tmp); + this->makeChoices(); + this->updateItems(); +} + +void Chest::removeInterface(void) { + std::list<HUDActor *>::iterator it; + + // Unsubscribe + theSwitchboard.UnsubscribeFrom(this, "upPressed"); + theSwitchboard.UnsubscribeFrom(this, "downPressed"); + theSwitchboard.UnsubscribeFrom(this, "forwardPressed"); + theSwitchboard.UnsubscribeFrom(this, "backwardPressed"); + theSwitchboard.UnsubscribeFrom(this, "enterPressed"); + + for (it = this->_interfaceElem.begin(); it != this->_interfaceElem.end(); it++) + theWorld.Remove(*it); + theWorld.Remove(this->_target); + theCamera.MoveTo(Vector3(Game::currentGame->getCurrentMap().getXMid(), + Game::currentGame->getCurrentMap().getYMid() + 1.8, 9.001), true); + Game::toggleMenu = true; + Game::currentGame->getHero()->subscribeToAll(); + if (this->_isUsed == 1) + this->PlaySpriteAnimation(0.4f, SAT_OneShot, 2, 0); + Game::getHUD()->removeText(std::to_string(this->_gold) + "G"); + Game::getHUD()->removeText("0G"); +} + +void Chest::ReceiveMessage(Message *m) { + std::list<HUDActor *>::iterator it = std::find(this->_choices.begin(), this->_choices.end(), this->_choicePointer); + + if (m->GetMessageName() == "forwardPressed") { + if (++it != this->_choices.end()) + this->_choicePointer = *it; + } else if (m->GetMessageName() == "backwardPressed") { + if (it != this->_choices.begin()) { + this->_choicePointer = *(--it); + } + } + this->makeChoices(); + if (m->GetMessageName() == "enterPressed") { + int i, j; + + for (i = 0, it = this->_choices.begin(); this->_choicePointer != *it; i++, it++); + if (i < 3) { + if (this->_chestItems[i] == "" && Game::currentGame->getHero()->getInventory()->getCurrentFocus() == "") + return ; + if (this->_chestItems[i] == "" && Game::currentGame->getHero()->getInventory()->getCurrentFocus() != "") { + this->_chestItems[i] = Game::currentGame->getHero()->getInventory()->getCurrentFocus(); + Game::currentGame->getHero()->getInventory()->dropSelectedItem(); + this->_isUsed = 1; + } else if (this->_chestItems[i] != "" + && Game::currentGame->getHero()->getInventory()->getCurrentFocus() != "") { + std::string tmp = Game::currentGame->getHero()->getInventory()->getCurrentFocus(); + std::string tmp2 = this->_chestItems[i]; + int focus = Game::currentGame->getHero()->getInventory()->getNumFocus(); + + theWorld.Remove(this->_img[i]); + Game::currentGame->getHero()->getInventory()->dropSelectedItem(); + Game::currentGame->getHero()->getInventory()->addItemToInventory(tmp2); + this->_chestItems[i] = tmp; + this->_isUsed = 1; + } else { + Game::currentGame->getHero()->getInventory()->addItemToInventory(this->_chestItems[i]); + this->_chestItems[i] = ""; + theWorld.Remove(this->_img[i]); + this->_isUsed = 1; + } + this->updateItems(); + } else { + if (Game::currentGame->getHero()->getGold()) { + j = this->_gold; + this->_gold += Game::currentGame->getHero()->getGold(); + Game::getHUD()->updateText(std::to_string(j) + "G", std::to_string(this->_gold) + "G"); + Game::currentGame->getHero()->setGold(0); + Game::getHUD()->updateGold(0); + this->_isUsed = 1; + } + } + } +} + +void Chest::makeChoices(void) { + if (this->_target != nullptr) + theWorld.Remove(this->_target); + this->_target = Game::getHUD()->addImage("Resources/Images/HUD/weapon_background.png", this->_choicePointer->GetPosition().X, this->_choicePointer->GetPosition().Y, 81, 103); +} + +void Chest::updateItems(void) { + std::map<int, std::string>::iterator it; + int height = theCamera.GetWindowHeight(), width = theCamera.GetWindowWidth(); + HUDWindow *w = Game::getHUD(); + int x = width / 2 - width / 4, y = height - ((height / 3) * 2); + std::string path; + HUDActor *tmp; + + for (it = this->_chestItems.begin(); it != this->_chestItems.end(); it++) { + if (it->second != "") { + if (Game::wList->checkExists(it->second)) { + path = Game::wList->getWeapon(it->second)->getSprite(); + } else if (Game::aList->checkExists(it->second)) { + path = Game::aList->getArmor(it->second)->getSprite(); + } else if (Game::rList->checkExists(it->second)) { + path = Game::rList->getRing(it->second)->getSprite(); + } + tmp = w->addImage(path, x + (width / 6 * it->first), y, 80, 104); + this->_interfaceElem.push_back(tmp); + this->_img[it->first] = tmp; + } + } +} + +void Chest::_makeItUsed(void) { + this->_isUsed = 1; + this->removeInterface(); + this->PlaySpriteAnimation(0.4f, SAT_OneShot, 2, 0); +} + +void Chest::applySave(std::map<std::string, Json::Value> save) { + Json::ValueIterator it; + + for (it = save["chest"].begin(); it != save["chest"].end(); it++) { + if (it.key().asString() != "gold") { + this->_chestItems[atoi(it.key().asString().c_str())] = it->asString(); + } else { + this->_gold = it->asInt(); + } + } +} + +int Chest::isUsed(void) { return this->_isUsed; }; +void Chest::reset(void) { this->_isUsed = 0; }; +int Chest::getGold(void) { return this->_gold; }; +std::map<int, std::string> Chest::getItems(void) { return this->_chestItems; }; diff --git a/Sources/src/Consumable.cpp b/Sources/src/Consumable.cpp @@ -35,13 +35,6 @@ * would be better ? */ Consumable::Consumable(void) { - this->addAttribute("type2", "Consumable"); - this->addAttribute("type3", "HP"); - this->addAttribute("value", "25"); - this->SetSprite("Resources/Images/heart.png"); - this->SetPosition(45, -27); - this->InitPhysics(); - theWorld.Add(this); } @@ -55,23 +48,6 @@ Consumable::Consumable(void) { * would be better ? */ Consumable::Consumable(Characters* c) { - this->addAttribute("type2", "Consumable"); - if (rand() % 3 == 1) { - this->addAttribute("type3", "HP"); - this->addAttribute("value", "25"); - this->SetSprite("Resources/Images/heart.png"); - } - else if (rand() %3 == 2 ){ - this->addAttribute("type3", "gold"); - this->addAttribute("value", "50"); - this->SetSprite("Resources/Images/gold.png"); - } else { - this->addAttribute("type3", "mana"); - this->addAttribute("value", "50"); - this->SetSprite("Resources/Images/mana.png"); - } - this->SetPosition(c->GetBody()->GetWorldCenter().x, c->GetBody()->GetWorldCenter().y); - Game::bodiesToCreate.push_back(this); } //! Third override, used to create consumable based on a Characters* position) @@ -86,12 +62,11 @@ Consumable::Consumable(std::string type, std::string value, Characters* c) { this->addAttribute("type2", "Consumable"); this->addAttribute("type3", type); this->addAttribute("value", value); + this->SetLayer(15); if (type == "HP") this->SetSprite("Resources/Images/heart.png"); else if (type == "gold") this->SetSprite("Resources/Images/gold.png"); - else - this->SetSprite("Resources/Images/mana.png"); this->SetPosition(c->GetBody()->GetWorldCenter().x, c->GetBody()->GetWorldCenter().y); Game::bodiesToCreate.push_back(this); } @@ -105,10 +80,13 @@ Consumable::Consumable(std::string type, std::string value, Characters* c) { * @todo This function is actually doing nothing. */ void Consumable::BeginContact(Elements *elem, b2Contact *contact) { - if (elem->getAttribute("type") != "ground") { + if (!elem) + return ; + if (elem->getAttribute("type") != "ground" || elem->getAttribute("speType") == "spikes") { contact->SetEnabled(false); contact->enableContact = false; - } + } else + this->GetBody()->SetGravityScale(0); } //! Destructor diff --git a/Sources/src/ControllerInputManager.cpp b/Sources/src/ControllerInputManager.cpp @@ -0,0 +1,130 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * File: ControllerInputManager.cpp + * Creation: 2015-09-10 09:48 + * Louis Solofrizzo <louis@ne02ptzero.me> + */ + +# include "ControllerInputManager.hpp" + +ControllerInputManager::ControllerInputManager(void) { + std::list<std::string>::iterator it; + + this->_buttons = {"A", "B", "X", "Y", "START", "BACK", "RB"}; + for (it = this->_buttons.begin(); it != this->_buttons.end(); it++) { + theSwitchboard.SubscribeTo(this, "button" + (*it) + "Pressed"); + theSwitchboard.SubscribeTo(this, "button" + (*it) + "Released"); + } + this->_parseBindings(); +} + +ControllerInputManager::~ControllerInputManager(void) { + ; +} + +void ControllerInputManager::ReceiveMessage(Message *m) { + int i, isUpper; + std::string message; + + for (i = 6, message = m->GetMessageName(); (message[i] >= 65 && message[i] <= 90) + && i < message.size(); i++); + std::string button = m->GetMessageName().substr(6, i - 7); + std::string status = m->GetMessageName().substr(7 + (i - 8), m->GetMessageName().size() - (i - 6)); + + if (button == "BACK") { + std::cout << "here" << std::endl; + theController.SetLeftVibration(250); + theController.SetRightVibration(250); + } + if (Game::isPaused == 1 || Game::isInMenu != 0) { + if (button == "A") + theSwitchboard.Broadcast(new Message("enterPressed")); + else if (button == "B") + theSwitchboard.Broadcast(new Message("deletePressed")); + } + for (isUpper = i = 0; i < message.size(); i++) { + if (message[i] >= 65 && message[i] <= 90) + isUpper++; + } + if (isUpper) + theSwitchboard.Broadcast(new Message(this->_bindings[button] + status)); + theSwitchboard.Broadcast(new Message(this->_bindings[button])); +} + +void ControllerInputManager::tick(void) { + Vec2i left = theController.GetLeftThumbstick(); + std::string direction = ""; + + if (left.Y > 0 && left.X > -16000 && left.X < 16000) { + direction = "up"; + } else if (left.Y < 0 && left.X > -16000 && left.X < 16000) { + direction = "down"; + } else if (left.X > 0 && left.Y > -16000 && left.Y < 16000) { + direction = "forward"; + } else if (left.X < 0 && left.Y > -16000 && left.Y < 16000) { + direction = "backward"; + } + + if ((direction == "" || this->_lastDirection != direction) && this->flag == 0) { + theSwitchboard.Broadcast(new Message(this->_lastDirection + "Released")); + } + if (direction != "" && this->flag == 0) { + theSwitchboard.Broadcast(new Message(direction + "Pressed")); + this->_lastDirection = direction; + this->flag = 1; + } +} + +void ControllerInputManager::addBindings(std::string button, std::string broadcast) { + this->_bindings[button] = broadcast; +} + +void ControllerInputManager::_parseBindings(void) { + std::stringstream buffer; + std::ifstream fd; + Json::Reader read; + Json::Value json; + Json::ValueIterator i, v, j; + std::string broadcast, controller; + + fd.open("Config/Bindings.json"); + if (!fd.is_open()) + Log::error("Can't find Config/Settings.json"); + buffer << fd.rdbuf(); + + if (!read.parse(buffer, json)) + Log::error("Error in json syntax :\n" + read.getFormattedErrorMessages()); + + for (i = json.begin(); i != json.end(); i++) { + for (v = (*i).begin(); v != (*i).end(); v++) { + broadcast = controller = ""; + for (j = (*v).begin(); j != (*v).end(); j++) { + if (j.key().asString() == "broadcast") + broadcast = (*j).asString(); + else if (j.key().asString() == "controller") + controller = (*j).asString(); + } + if (controller != "" && broadcast != "") + this->addBindings(controller, broadcast); + } + } + +} diff --git a/Sources/src/Dealer.cpp b/Sources/src/Dealer.cpp @@ -69,7 +69,7 @@ void Dealer::BeginContact(Elements* elem, b2Contact *contact) { contact->enableContact = false; } if (elem->getAttribute("type") == "Hero" && this->_give == false) { - theSwitchboard.SubscribeTo(this, "enterPressed"); + theSwitchboard.SubscribeTo(this, "giveDrug"); this->PlaySpriteAnimation(this->_getAttr("give", "time").asFloat(), SAT_Loop, this->_getAttr("give", "beginFrame").asInt(), this->_getAttr("give", "endFrame").asInt(), "base"); @@ -107,14 +107,14 @@ void Dealer::EndContact(Elements *elem, b2Contact *contact) { void Dealer::ReceiveMessage(Message *m) { HUDWindow *hud = Game::getHUD(); - if (m->GetMessageName() == "enterPressed" && Game::isPaused == 0) { + if (m->GetMessageName() == "giveDrug" && Game::isPaused == 0) { this->_give = true; - theSwitchboard.UnsubscribeFrom(this, "enterPressed"); + theSwitchboard.UnsubscribeFrom(this, "giveDrug"); this->AnimCallback("base"); hud->removeText("HI BUD YOU WANNA SOME DRUGS?"); hud->setText("Here you go buddy. See ya.", this, Vector3(255, 51, 255), 0, 0); Drug *drug = new Drug(Game::dList->getDrugRandom()); - Game::currentGame->getHero()->setDrug(drug->getName()); + Game::currentGame->getHero()->setDrug(drug->getDisplayName()); theSwitchboard.SubscribeTo(Game::currentGame->getHero(), "drugPressed"); Game::currentGame->tooltip->talk(this); } diff --git a/Sources/src/Door.cpp b/Sources/src/Door.cpp @@ -0,0 +1,60 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/** + * File: Door.cpp + * Creation: 2015-08-27 04:44 + * Vincent Rey <vrey@student.42.fr> + */ + +#include "Door.hpp" + +Door::Door(std::string type) { + this->SetLayer(10); + this->SetDensity(0); + this->SetIsSensor(1); + this->addAttribute("type", "Door"); + if (type == "SecretReturn") { + this->addAttribute("type2", "Secret"); + this->addAttribute("speType", "return"); + } + else + this->addAttribute("type2", type); + this->addAttribute("chest", "1"); + this->addAttribute("physic", "1"); + this->SetSize(Vector2(3,3)); + if (type == "Secret") { + this->addAttribute("sprite", "Resources/Images/Door/SecretDoor.png"); + this->setXStart(Game::spawnSecretDoor.X); + this->setYStart(Game::spawnSecretDoor.Y); + } else if (type == "SecretReturn") { + this->addAttribute("sprite", "Resources/Images/Door/SecretDoor.png"); + this->setXStart(Game::spawnSecretReturnDoor.X); + this->setYStart(Game::spawnSecretReturnDoor.Y); + } else if (type == "Boss") { + this->addAttribute("sprite", "Resources/Images/Door/BossDoor.png"); + this->setXStart(Game::spawnBossDoor.X); + this->setYStart(Game::spawnBossDoor.Y); + } + this->display(); + return; +} + +Door::~Door(void) {} + diff --git a/Sources/src/Drug.cpp b/Sources/src/Drug.cpp @@ -32,10 +32,11 @@ */ Drug::Drug(std::string name) : _name(name) { this->_readFile(name); - this->_name = getName(); + this->_name = getDisplayName(); this->_flavor = getFlavor(); + this->_effect = getEffect(); this->addAttribute("type3", "Drug"); - this->addAttribute("name", this->_name); + this->addAttribute("displayName", this->_name); this->addAttribute("flavor", this->_flavor); } @@ -46,10 +47,11 @@ Drug::Drug(std::string name) : _name(name) { */ Drug::Drug(Drug* Drug) { - this->_name = Drug->getName(); + this->_name = Drug->getDisplayName(); this->_flavor = Drug->getFlavor(); + this->_effect = Drug->getEffect(); this->addAttribute("type3", "Drug"); - this->addAttribute("name", this->_name); + this->addAttribute("displayName", this->_name); this->addAttribute("flavor", this->_flavor); } @@ -97,8 +99,8 @@ void Drug::_parseJson(std::string file) { this->_name = json["infos"].get("name", "").asString(); this->_flavor = json["infos"].get("flavor", "").asString(); this->_sprite = json["infos"].get("sprites", "").asString(); - for (i = json["bonus"].begin(); i != json["bonus"].end(); i++) - this->addAttribute( i.key().asString(), (*i).asString()); + this->_effect = json["infos"].get("effect", 0).asInt(); + this->addAttribute("type3", "Drug"); this->addAttribute("sprite", this->_sprite); } @@ -128,18 +130,27 @@ void Drug::ReceiveMessage(Message *m) { this->pot(0); if (this->_curDrug == "cocaine") this->cocaine(0); + if (this->_curDrug == "morphine") + this->morphine(0); + if (this->_curDrug == "mdma") + this->mdma(0); } else if (m->GetMessageName() == "endMalus") { - if (this->_curDrug == "pot") + if (this->_curDrug == "pot") this->pot(2); if (this->_curDrug == "cocaine") this->cocaine(2); + if (this->_curDrug == "morphine") + this->morphine(2); + if (this->_curDrug == "mdma") + this->mdma(2); } } /* GETTERS */ -std::string Drug::getName(void) { return this->_name; } +std::string Drug::getDisplayName(void) { return this->_name; } std::string Drug::getFlavor(void) { return this->_flavor; } +int Drug::getEffect(void) { return this->_effect; } /* EFFECTS */ @@ -147,34 +158,110 @@ std::string Drug::getFlavor(void) { return this->_flavor; } void Drug::pot(int status) { Characters *hero = Game::currentGame->getHero(); + if (status == 1) { - hero->bonusDmg = hero->getWeapon()->getDamage(); + Game::getHUD()->setText(":)", hero, Vector3(0, 255, 0), 1, 0); + hero->buff.bonusDmg += hero->getWeapon()->getDamage(); + this->_curDrug = "pot"; theSwitchboard.SubscribeTo(this, "endBonus"); theSwitchboard.SubscribeTo(this, "endMalus"); theSwitchboard.DeferredBroadcast(new Message("endBonus"), 15); theSwitchboard.DeferredBroadcast(new Message("endMalus"), 30); } else if(status == 0) { - hero->bonusDmg = -(hero->getWeapon()->getDamage() / 2); - } - else if(status == 2) { - hero->bonusDmg = 0; + Game::getHUD()->setText(":(", hero, Vector3(255, 0, 0), 1, 0); + hero->buff.bonusDmg -= hero->getWeapon()->getDamage(); + hero->buff.bonusDmg += -(hero->getWeapon()->getDamage() / getEffect()); + } else if(status == 2) { + hero->buff.bonusDmg -= -(hero->getWeapon()->getDamage() / getEffect()); } } void Drug::cocaine(int status) { Characters *hero = Game::currentGame->getHero(); + if (status == 1) { - hero->bonusDmg = hero->getWeapon()->getDamage(); - this->_curDrug = "pot"; + Game::getHUD()->setText(":)", hero, Vector3(0, 255, 0), 1, 0); + hero->buff.bonusSpeed += hero->_getAttr("forward", "force").asInt(); + this->_curDrug = "cocaine"; theSwitchboard.SubscribeTo(this, "endBonus"); theSwitchboard.SubscribeTo(this, "endMalus"); - theSwitchboard.DeferredBroadcast(new Message("endBonus"), 15); + theSwitchboard.DeferredBroadcast(new Message("endBonus"), 20); theSwitchboard.DeferredBroadcast(new Message("endMalus"), 30); } else if(status == 0) { - hero->bonusDmg = -(hero->getWeapon()->getDamage() / 2); + Game::getHUD()->setText(":(", hero, Vector3(255, 0, 0), 1, 0); + hero->buff.bonusSpeed -= hero->_getAttr("forward", "force").asInt(); + hero->buff.bonusSpeed += -(hero->_getAttr("forward", "force").asInt() / getEffect()); + } else if(status == 2) { + hero->buff.bonusSpeed -= -(hero->_getAttr("forward", "force").asInt() / getEffect()); } - else if(status == 2) { - hero->bonusDmg = 0; +} + +void Drug::morphine(int status) { + Characters *hero = Game::currentGame->getHero(); + + if (status == 1) { + Game::getHUD()->setText(":)", hero, Vector3(0, 255, 0), 1, 0); + hero->setInvincibility(true); + this->_curDrug = "morphine"; + theSwitchboard.SubscribeTo(this, "endBonus"); + theSwitchboard.SubscribeTo(this, "endMalus"); + theSwitchboard.DeferredBroadcast(new Message("endBonus"), 20); + theSwitchboard.DeferredBroadcast(new Message("endMalus"), 20); + } else if(status == 0) { + Game::getHUD()->setText(":(", hero, Vector3(255, 0, 0), 1, 0); + hero->setHP(getEffect()); + } else if(status == 2) { + hero->setInvincibility(false); } -}- \ No newline at end of file +} + +void Drug::mdma(int status) { + Characters *hero = Game::currentGame->getHero(); + + if (status == 1) { + Game::getHUD()->setText(":)", hero, Vector3(0, 255, 0), 1, 0); + + /* JUST DO IT ( Mobs are in love with you <3 ) */ + + this->_curDrug = "mdma"; + theSwitchboard.SubscribeTo(this, "endBonus"); + theSwitchboard.SubscribeTo(this, "endMalus"); + theSwitchboard.DeferredBroadcast(new Message("endBonus"), 10); + theSwitchboard.DeferredBroadcast(new Message("endMalus"), 30); + } else if(status == 0) { + Game::getHUD()->setText(":(", hero, Vector3(255, 0, 0), 1, 0); + hero->buff.cur = "mdma"; + hero->buff.drugSpeed = (hero->_getAttr("forward", "force").asInt() + hero->buff.bonusSpeed) * -(getEffect()); + + } else if(status == 2) { + hero->buff.drugSpeed = 0; + hero->buff.cur = ""; + + } +} + + +void Drug::mushroom(int status) { + + /* Don't forget Druglist.cpp */ + + + Characters *hero = Game::currentGame->getHero(); + + if (status == 1) { + Game::getHUD()->setText(":)", hero, Vector3(0, 255, 0), 1, 0); + + /* JUST DO IT ( Pet is helping you <3 ) */ + + this->_curDrug = "mushroom"; + theSwitchboard.SubscribeTo(this, "endBonus"); + theSwitchboard.SubscribeTo(this, "endMalus"); + theSwitchboard.DeferredBroadcast(new Message("endBonus"), 10); + theSwitchboard.DeferredBroadcast(new Message("endMalus"), 30); + } else if(status == 0) { + /* Pet attacks you */ + } else if(status == 2) { + /* Pet vanish */ + } +} diff --git a/Sources/src/DrugList.cpp b/Sources/src/DrugList.cpp @@ -58,7 +58,7 @@ int DrugList::checkExists(std::string name) { std::list<Drug*>::iterator it; for (it = this->_allDrugs.begin(); it != this->_allDrugs.end(); it++) { - if (name == (*it)->getName()) { + if (name == (*it)->getDisplayName()) { return 1; } } @@ -76,7 +76,7 @@ Drug *DrugList::getDrug(std::string name) { std::list<Drug*>::iterator it; for (it = this->_allDrugs.begin(); it != this->_allDrugs.end(); it++) { - if (name == (*it)->getName()) { + if (name == (*it)->getDisplayName()) { return ((*it)); } } @@ -106,12 +106,16 @@ void DrugList::useDrug(std::string name) { std::list<Drug*>::iterator it; for (it = this->_allDrugs.begin(); it != this->_allDrugs.end(); it++) { - if (name == (*it)->getName()) { + if (name == (*it)->getDisplayName()) { Game::currentGame->tooltip->info(getDrug(name)); if (name == "Pot") getDrug(name)->pot(1); if (name == "Cocaine") getDrug(name)->cocaine(1); + if (name == "Morphine") + getDrug(name)->morphine(1); + if (name == "Mdma") + getDrug(name)->mdma(1); } } removeDrug(name); diff --git a/Sources/src/Elements.cpp b/Sources/src/Elements.cpp @@ -153,6 +153,10 @@ void Elements::display(void) { if (this->_hitboxType == "special") { this->SetShapeType(PhysicsActor::SHAPETYPE_LOADED); this->setBox(Game::hList->getHitbox(this->_hitbox)); + } else if (this->getAttribute("hitbox") == "circle") { + this->SetShapeType(PhysicsActor::SHAPETYPE_CIRCLE); + this->SetDensity(0); + this->SetIsSensor(true); } else { this->SetShapeType(PhysicsActor::SHAPETYPE_BOX); } diff --git a/Sources/src/Enemy.cpp b/Sources/src/Enemy.cpp @@ -88,20 +88,22 @@ void Enemy::actionCallback(std::string name, int status) { * @param contact The Box2D contact object */ void Enemy::BeginContact(Elements* m, b2Contact *contact) { + if (!m) + return ; Characters::BeginContact(m, contact); Weapon* w = static_cast<Weapon*>(m); Projectile* p = static_cast<Projectile*>(m); if (m->getAttribute("type") == "ground") { // Game::startRunning(this); } else if (m->getAttribute("type") == "HeroWeaponHitBox") { - if (this->_lastHitID == m->getId()) - return; - else - this->_lastHitID = m->getId(); + if (this->_lastHitID == m->getId()) + return; + else + this->_lastHitID = m->getId(); Characters *h = Game::currentGame->getHero(); this->GetBody()->SetLinearVelocity(b2Vec2(-2, 2)); Game::stopRunning(this); - if (this->takeDamage(w->getDamage() + h->bonusDmg, w->getCritRate()) == 1) { + if (this->takeDamage(w->getDamage() + h->buff.bonusDmg, (w->getCritRate() + h->buff.critBuff)) == 1) { if (this->GetBody()->GetWorldCenter().x > h->GetBody()->GetWorldCenter().x) { this->ApplyLinearImpulse(Vector2(w->getPushback(), w->getPushback()), Vector2(0,0)); } else { @@ -111,14 +113,33 @@ void Enemy::BeginContact(Elements* m, b2Contact *contact) { this->GetBody()->SetLinearVelocity(b2Vec2(0, 0)); } } else if (m->getAttribute("type") == "HeroProjectile") { - if (this->_lastHitID == m->getId()) + if (this->_lastHitID == m->getId()) + return; + else + this->_lastHitID = m->getId(); + Characters *h = Game::currentGame->getHero(); + this->GetBody()->SetLinearVelocity(b2Vec2(-2, 2)); + Game::stopRunning(this); + if (this->takeDamage(p->getDamage() + h->buff.bonusDmg, (w->getCritRate() + h->buff.critBuff)) == 1) { + if (this->GetBody()->GetWorldCenter().x > h->GetBody()->GetWorldCenter().x) { + this->ApplyLinearImpulse(Vector2(p->getPushback(), p->getPushback()), Vector2(0,0)); + } else { + this->ApplyLinearImpulse(Vector2(-p->getPushback(), p->getPushback()), Vector2(0,0)); + } + } + else { + this->GetBody()->SetLinearVelocity(b2Vec2(0, 0)); + } + + } else if (m->getAttribute("type") == "Shockwave") { + if (this->_lastHitID == m->getId()) return; else this->_lastHitID = m->getId(); Characters *h = Game::currentGame->getHero(); this->GetBody()->SetLinearVelocity(b2Vec2(-2, 2)); Game::stopRunning(this); - if (this->takeDamage(p->getDamage() + h->bonusDmg, p->getCritRate()) == 1) { + if (this->takeDamage(static_cast<Projectile*>(m)->getDamage(), 0)) { if (this->GetBody()->GetWorldCenter().x > h->GetBody()->GetWorldCenter().x) { this->ApplyLinearImpulse(Vector2(p->getPushback(), p->getPushback()), Vector2(0,0)); } else { @@ -157,9 +178,11 @@ void Enemy::BeginContact(Elements* m, b2Contact *contact) { void Enemy::EndContact(Elements *m, b2Contact *contact) { Characters::EndContact(m, contact); - if (m->getAttribute("type") == "ground" && !this->_isDead && !this->_isTakingDamage) { + if (!m) + return ; + if (m->getAttribute("type") == "ground" && !this->_isDead && !this->_isTakingDamage && Game::stopPattern == false) { if (this->_lastElement != m->getId()) { - this->_pattern->tick(Game::currentGame->maps->getMapXY()[Game::currentY][Game::currentX]); + this->_pattern->tick(Game::currentGame->getCurrentMap()); this->_lastElement = m->getId(); } } @@ -176,33 +199,37 @@ int Enemy::takeDamage(int damage, int critRate) { if (this->_hp <= 0) return 0; this->actionCallback("takeDamage", 0); - if ((rand() % critRate + 1) == critRate) { - damage *= 2 ; - Game::getHUD()->setText("Crit !", Game::currentGame->getHero(), - Vector3(255, 0, 0), 1, 0); + if (critRate != 0) { + if ((rand() % critRate + 1) == critRate) { + damage *= 2 ; + Game::getHUD()->setText("Crit ! (" + std::to_string(damage) + ")", this, + Vector3(255, 0, 0), 1, 0); + } else { + // The following display damage with any hit. This is debug code, don't forget to remove it with beta. + Game::getHUD()->setText(std::to_string(damage), this, + Vector3(1, 1, 1), 1, 0); + } } if (this->_hp - damage <= 0) { - Game::stopRunning(this); - this->GetBody()->SetLinearVelocity(b2Vec2(0,0)); - this->_isDead = true; + Game::stopRunning(this); + this->GetBody()->SetLinearVelocity(b2Vec2(0,0)); Game::currentGame->maps->_XYMap[Game::currentY][Game::currentX].removeEnemy(this); this->actionCallback("death", 0); this->_setCategory("death"); theSwitchboard.SubscribeTo(this, "setToStatic" + this->GetName()); theSwitchboard.Broadcast(new Message("setToStatic" + this->GetName())); - // this->GetBody()->GetFixtureList()->SetSensor(true); this->GetBody()->GetFixtureList()->SetDensity(0); -// this->GetBody()->SetGravityScale(0); this->GetBody()->ResetMassData(); this->LoadSpriteFrames(this->_getAttr("newSprites").asString()); this->changeSizeTo(Vector2(this->_getAttr("size").asInt(), - this->_getAttr("size").asInt())); + this->_getAttr("size").asInt())); this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, - this->_getAttr("beginFrame").asInt(), - this->_getAttr("endFrame").asInt()); + this->_getAttr("beginFrame").asInt(), + this->_getAttr("endFrame").asInt()); theSwitchboard.SubscribeTo(this, "destroyEnemy" + this->GetName()); theSwitchboard.DeferredBroadcast(new Message("destroyEnemy" + this->GetName()), 0.5); theSwitchboard.Broadcast(new Message(std::to_string(this->getId()))); + this->_hp = 0; return 0; } this->_hp -= damage; diff --git a/Sources/src/EnemyList.cpp b/Sources/src/EnemyList.cpp @@ -58,7 +58,7 @@ EnemyList::EnemyData::EnemyData(std::string res) { std::string EnemyList::EnemyData::getName() { return this->_name; } int EnemyList::EnemyData::getLevel() { return this->_level; } -bool EnemyList::EnemyData::isFlying() { return this->_flying; } +std::string EnemyList::EnemyData::isFlying() { return this->_flying; } //! Json parser to get the infos on the enemy /** @@ -92,7 +92,7 @@ void EnemyList::EnemyData::_parseJson(std::string file) { if (!read.parse(file, json)) Log::error("Error in json syntax :\n" + read.getFormattedErrorMessages()); this->_level = json["infos"].get("level", "").asInt(); - this->_flying = json["infos"].get("flying", "").asBool(); + this->_flying = json["infos"].get("flying", "").asString(); } //! Destructor @@ -108,7 +108,7 @@ EnemyList::~EnemyList(void) { * Returns a enemy, no matter its level - will check whether the enemy is flying * @param flying */ -std::string EnemyList::getEnemyRandom(bool flying) { +std::string EnemyList::getEnemyRandom(std::string flying) { std::list<EnemyData*>::iterator it; std::list<EnemyData*> enemies; @@ -139,7 +139,7 @@ std::string EnemyList::getEnemyRandom(bool flying) { * @param level the enemy level queried * @param flying a boolean that asks whether the enemy should be flying or not */ -std::string EnemyList::getEnemyRandom(int level, bool flying) { +std::string EnemyList::getEnemyRandom(int level, std::string flying) { std::list<EnemyData*>::iterator it; std::list<EnemyData*> enemies; @@ -149,6 +149,8 @@ std::string EnemyList::getEnemyRandom(int level, bool flying) { } } int i = 0; + if (!enemies.size()) + Log::error("Error loading enemies for required level " + std::to_string(level)); int value = (rand() % enemies.size()); for (it = enemies.begin(); it != enemies.end(); it++) { if (i == value) { diff --git a/Sources/src/Equipment.cpp b/Sources/src/Equipment.cpp @@ -62,12 +62,21 @@ Equipment::Equipment(Characters* c): Object() { Equipment::Equipment(Weapon *w, Characters* c): Object() { this->addAttribute("type2", "Equipment"); this->addAttribute("type3", "Weapon"); + this->addAttribute("hitbox", "heroHitbox"); + this->addAttribute("hitboxType", "special"); this->SetPosition(c->GetBody()->GetWorldCenter().x, c->GetBody()->GetWorldCenter().y); this->_weapon = new Weapon(w); + this->SetLayer(15); + this->_ring = nullptr; + this->_armor = nullptr; this->_name = w->getName(); this->addAttribute("name", w->getName()); + this->_displayName = w->getDisplayName(); + this->addAttribute("displayName", w->getDisplayName()); this->_flavor = w->getFlavor(); this->addAttribute("flavor", w->getFlavor()); + this->_equipable = w->getEquipable(); + this->addAttribute("equipable", w->getEquipable()); this->SetSprite(this->_weapon->getSprite()); this->SetName("loot"); theSwitchboard.SubscribeTo(this, "DeleteEquipment" + this->GetName()); @@ -79,18 +88,23 @@ Equipment::Equipment(Weapon *w, Characters* c): Object() { Equipment::Equipment(Armor *w, Characters* c): Object() { this->addAttribute("type2", "Equipment"); this->addAttribute("type3", "Armor"); + this->addAttribute("hitbox", "heroHitbox"); + this->addAttribute("hitboxType", "special"); this->SetPosition(c->GetBody()->GetWorldCenter().x, c->GetBody()->GetWorldCenter().y); this->_armor = new Armor(w); + this->SetLayer(15); + this->_weapon = nullptr; + this->_ring = nullptr; this->_name = w->getName(); this->addAttribute("name", w->getName()); + this->_displayName = w->getDisplayName(); + this->addAttribute("displayName", w->getDisplayName()); this->_flavor = w->getFlavor(); this->addAttribute("flavor", w->getFlavor()); this->SetSprite(this->_armor->getSprite()); this->SetName("loot"); if (w->getAttribute("hpBuff") != "") this->addAttribute("hpBuff", w->getAttribute("hpBuff")); - if (w->getAttribute("manaBuff") != "") - this->addAttribute("manaBuff", w->getAttribute("manaBuff")); theSwitchboard.SubscribeTo(this, "DeleteEquipment" + this->GetName()); this->SetShapeType(PhysicsActor::SHAPETYPE_BOX); Game::bodiesToCreate.push_back(this); @@ -99,18 +113,23 @@ Equipment::Equipment(Armor *w, Characters* c): Object() { Equipment::Equipment(Ring *w, Characters* c): Object() { this->addAttribute("type2", "Equipment"); this->addAttribute("type3", "Ring"); + this->addAttribute("hitbox", "heroHitbox"); + this->addAttribute("hitboxType", "special"); this->SetPosition(c->GetBody()->GetWorldCenter().x, c->GetBody()->GetWorldCenter().y); this->_ring = new Ring(w); + this->SetLayer(15); + this->_armor = nullptr; + this->_weapon = nullptr; this->_name = w->getName(); this->addAttribute("name", w->getName()); + this->_displayName = w->getDisplayName(); + this->addAttribute("displayName", w->getDisplayName()); this->_flavor = w->getFlavor(); this->addAttribute("flavor", w->getFlavor()); this->SetSprite(this->_ring->getSprite()); this->SetName("loot"); if (w->getAttribute("hpBuff") != "") this->addAttribute("hpBuff", w->getAttribute("hpBuff")); - if (w->getAttribute("manaBuff") != "") - this->addAttribute("manaBuff", w->getAttribute("manaBuff")); theSwitchboard.SubscribeTo(this, "DeleteEquipment" + this->GetName()); this->SetShapeType(PhysicsActor::SHAPETYPE_BOX); Game::bodiesToCreate.push_back(this); @@ -131,9 +150,18 @@ Equipment::~Equipment(void) { * @param contact The Box2D contact object. */ void Equipment::BeginContact(Elements *elem, b2Contact *contact) { - if (elem->getAttribute("type") != "ground") { + if (!elem) + return ; + if (elem->getAttribute("type") != "ground" || elem->getAttribute("speType") == "spikes") { contact->SetEnabled(false); contact->enableContact = false; + } else if (elem->getAttribute("physic") != "") { + if (this->GetBody()->GetWorldCenter().y - 1 > elem->GetBody()->GetWorldCenter().y) { + theSwitchboard.SubscribeTo(this, "setToStatic" + this->GetName()); + theSwitchboard.Broadcast(new Message("setToStatic" + this->GetName())); + this->GetBody()->GetFixtureList()->SetDensity(0); + this->GetBody()->ResetMassData(); + } } } @@ -145,9 +173,6 @@ void Equipment::BeginContact(Elements *elem, b2Contact *contact) { * @param contact The Box2D contact object */ void Equipment::EndContact(Elements *elem, b2Contact *contact) { - // if (elem->getAttributes()["type"] == "Hero"){ - // Game::getHUD()->removeText(this->_weapon->getFlavor()); - // } } /*GETTERS*/ @@ -159,7 +184,7 @@ Ring* Equipment::getRing(void) { return this->_ring; } std::string Equipment::getName(void) { return this->_name; } - +int Equipment::getPrice(void) { return this->_price; } //! Intern broadcasts function. /** @@ -167,6 +192,18 @@ std::string Equipment::getName(void) { return this->_name; } * @param m The Broadcasted message. (See Angel2D docs for more info.) */ void Equipment::ReceiveMessage(Message *m) { - if (m->GetMessageName() == "DeleteEquipment" + this->GetName()) + if (m->GetMessageName() == "DeleteEquipment" + this->GetName()) { + if (this->_ring != nullptr) { + Game::addToDestroyList(this->_ring); + } else if (this->_armor != nullptr) { + Game::addToDestroyList(this->_armor); + } else if (this->_weapon != nullptr) { + Game::addToDestroyList(this->_weapon); + } + this->ChangeColorTo(Color(1,1,1,0), 0); Game::addToDestroyList(this); + } + if (m->GetMessageName() == "setToStatic" + this->GetName()) { + this->GetBody()->SetType(b2_staticBody); + } } diff --git a/Sources/src/Game.cpp b/Sources/src/Game.cpp @@ -32,7 +32,7 @@ * Load the maps with Maps::Maps * @sa Maps */ -Game::Game(void) : _hero((new Characters())) { +Game::Game(void) : _hero(nullptr) { #ifdef __APPLE__ theWorld.Initialize(1024, 720, NAME, true, false); #else @@ -44,6 +44,7 @@ Game::Game(void) : _hero((new Characters())) { ContactFilter *gFilter = new ContactFilter(); theWorld.GetPhysicsWorld().SetContactFilter(gFilter); this->maps = new Maps("Maps/"); + this->_controller = new ControllerInputManager(); return ; } @@ -78,62 +79,101 @@ void Game::grid(void) { * Let's start the game */ void Game::start(void) { + Hero *hero = nullptr, *tmp = nullptr; + + theWorld.ResumePhysics(); theWorld.SetBackgroundColor(*(new Color(0, 0, 0))); Game::wList = new WeaponList(); Game::eList = new EnemyList(); Game::aList = new ArmorList(); Game::rList = new RingList(); Game::dList = new DrugList(); + Game::chest = new Chest(); + + Game::endGame = false; + Game::deadWaiting = 0; + Game::stopPattern = false; this->tooltip = new Tooltip(); int i; - for (i = 0; i < 3; i++) { + for (i = 0; i < 3; i++) this->maps->_XYMap[0][i].destroyMap(); - } - delete(Game::currentGame->maps); this->maps = new Maps("Maps/"); this->maps->readMaps(); Game::currentGame = this; - std::map<std::string, Json::Value> save = Quit::getSave(); - Hero *hero = new Hero(Game::menuCharacter->getHeroType()); - - - - LevelGenerator *levelGenerator = new LevelGenerator(4, 3, 60); + if (Game::menuCharacter != nullptr) { + hero = new Hero(Game::menuCharacter->getHeroType()); + theWorld.GetPhysicsWorld().DestroyBody(Game::menuCharacter->GetBody()); + theWorld.Remove(Game::menuCharacter); + } else { + tmp = static_cast<Hero *>(this->getHero()); + hero = new Hero(tmp); + } + this->levelGenerator = new LevelGenerator(4, 3, 60); levelGenerator->execute(); this->_tmpMap = levelGenerator->getLevel(); - this->maps->displayLevel(this->_tmpMap); + while (this->maps->displayLevel(this->_tmpMap) == -1) { + sleep(1); + this->levelGenerator = new LevelGenerator(4, 3, 60); + levelGenerator->execute(); + this->_tmpMap = levelGenerator->getLevel(); + } // Log::info("NbMaps: " + std::to_string(levelGenerator->getNbMaps())); // Log::info("NbEnemy:" + trouver le nombre d ennemy); // Log::info("NbMaps: " + info sur la sauvegarde (nivau du hero, gold etc...)); - Game::currentX = levelGenerator->getStartX(); - Game::currentY = levelGenerator->getStartY(); +// Game::currentX = levelGenerator->getStartX(); +// Game::currentY = levelGenerator->getStartY(); theCamera.SetPosition(this->maps->getMapXY()[Game::currentY][Game::currentX].getXMid(), this->maps->getMapXY()[Game::currentY][Game::currentX].getYMid() + 1.8, 9.001); this->maps->_XYMap[Game::currentY][Game::currentX] = this->maps->getMapXY()[Game::currentY][Game::currentX].display(); this->displayHero(*(hero)); hero->init(); - hero->setGold(save["gold"].asInt()); - hero->setLevel(save["level"].asInt()); + if (Game::menuCharacter) { + hero->setLevel(Game::menuCharacter->getLevel()); + hero->setGold(0); + } else { + hero->setLevel(tmp->getLevel()); + hero->setGold(tmp->getGold()); + hero->setHP(tmp->getHP()); + Game::getHUD()->consumable(hero->getInventory()->getItems()); + } + Game::chest->applySave(this->_save); + this->setHero(hero); + hero->setStartingValues(tmp); this->setHero(hero); this->displayHUD(); - hero->setStartingValues(); + Game::getHUD()->removeText("Press Enter to continue."); + Game::getHUD()->removeText("LEVEL CLEARED"); Game::started = 1; Game::currentGame = this; - + Game::getHUD()->setText("World " + std::to_string(Game::World + 1), 300, 200, Vector3(1, 1, 1), 5, "title")->isFading = 1; + if (tmp) { + tmp->UnsubscribeFromAll(); + theWorld.GetPhysicsWorld().DestroyBody(tmp->GetBody()); + theWorld.Remove(tmp); + Game::delElement(tmp); + } } void Game::menuInGame(void) { theWorld.SetBackgroundColor(*(new Color(0, 0, 0))); + theWorld.ResumePhysics(); + Game::currentIds = 0; + Game::elementMap.clear(); InGameMenu *menu = new InGameMenu(); - Game::currentGame = this; + Game::endGame = false; + Game::deadWaiting = 0; + if (Game::currentGame == nullptr) + Game::currentGame = this; + this->_save = Quit::getSave(); MenuCharacter *charac = new MenuCharacter(); + menu->showMaps(); charac->setXStart(this->maps->getMapXY()[Game::currentY][Game::currentX].getXMid() - 10); charac->setYStart(this->maps->getMapXY()[Game::currentY][Game::currentX].getYMid() - 4); @@ -141,12 +181,29 @@ void Game::menuInGame(void) { this->maps->getMapXY()[Game::currentY][Game::currentX].getYMid() + 1.8, 18.502), 1, true, "moveMenu"); this->maps->_XYMap[Game::currentY][Game::currentX] = this->maps->getMapXY()[Game::currentY][Game::currentX].display(); charac->display(); - Game::addHUDWindow(new HUDWindow()); + if (Game::getHUD() == nullptr) + Game::addHUDWindow(new HUDWindow()); + else { + Game::getHUD()->removeText("Press Enter to continue."); + Game::getHUD()->removeText("YOU ARE DEAD"); + theWorld.Remove(this->getHero()->getGhost()); + delete this->getHero(); + } this->setHero(static_cast<Characters *>(charac)); Game::started = 1; Game::isInMenu = 1; } +Map Game::getCurrentMap(void) { + if (this->_hero->inSpecialMap == 0) + return (this->maps->getMapXY()[Game::currentY][Game::currentX]); + else if (this->_hero->inSpecialMap == 1) + return *(this->maps->bossMap); + else if (this->_hero->inSpecialMap == 2) { + return *(this->maps->secretMap); + } +} + //! Read the maps /** * Launch Maps::readMaps @@ -213,14 +270,24 @@ int Game::getNextId(void) { } void Game::checkHeroPosition(void) { - if (Game::started == 1) { + Game::currentGame->_controller->flag = 0; + Game::currentGame->_controller->tick(); + if (Game::started == 1 && Game::currentGame->getHero() != nullptr) { + std::list<Enemy*> en = Game::currentGame->getCurrentMap().getEnemies(); Game::currentGame->moveCamera(); Game::currentGame->simulateHeroItemContact(); Game::currentGame->getHero()->characterLoop(); + if (!en.empty()) { + std::list<Enemy*>::iterator it = en.begin(); + for (; it != en.end(); it++) { + if (*it != nullptr) + (*it)->characterLoop(); + } + } Game::currentGame->reloadingHUD(); if (Game::asToStart == 1) Game::currentGame->start(); - Game::asToStart = 0; + Game::asToStart = 0; } } @@ -242,33 +309,35 @@ void Game::moveCamera(void) { bool asChanged = false; Map &tmp = this->maps->_XYMap[Game::currentY][Game::currentX]; - if (this->_hero->GetBody()->GetWorldCenter().x >= (tmp.getXStart() + tmp.getWidth() - 0.5)) { - this->maps->getMapXY()[Game::currentY][Game::currentX].destroyMap(); - Game::currentX++; - asChanged = true; - } else if (this->_hero->GetBody()->GetWorldCenter().x <= (tmp.getXStart() - 1)) { - this->maps->getMapXY()[Game::currentY][Game::currentX].destroyMap(); + if (this->_hero->inSpecialMap == 0) { + if (this->_hero->GetBody()->GetWorldCenter().x >= (tmp.getXStart() + tmp.getWidth() - 0.5)) { + this->getCurrentMap().destroyMap(); + Game::currentX++; + asChanged = true; + } else if (this->_hero->GetBody()->GetWorldCenter().x <= (tmp.getXStart() - 1)) { + this->getCurrentMap().destroyMap(); Game::currentX--; asChanged = true; - } else if (this->_hero->GetBody()->GetWorldCenter().y >= tmp.getYStart()) { - this->maps->getMapXY()[Game::currentY][Game::currentX].destroyMap(); - Game::currentY--; - asChanged = true; - } else if (this->_hero->GetBody()->GetWorldCenter().y <= (tmp.getYStart() - tmp.getHeight())) { - this->maps->getMapXY()[Game::currentY][Game::currentX].destroyMap(); - Game::currentY++; - asChanged = true; - } - if (asChanged) { - this->_hero->destroyTarget(); - this->maps->_XYMap[Game::currentY][Game::currentX] = this->maps->getMapXY()[Game::currentY][Game::currentX].display(); - theCamera.SetPosition(this->maps->getMapXY()[Game::currentY][Game::currentX].getXMid(), - this->maps->getMapXY()[Game::currentY][Game::currentX].getYMid() + 1.8); - if (Game::isInMenu == 0) { - Game::getHUD()->updateBigMap(); - Game::getHUD()->minimap(); + } else if (this->_hero->GetBody()->GetWorldCenter().y >= tmp.getYStart()) { + this->getCurrentMap().destroyMap(); + Game::currentY--; + asChanged = true; + } else if (this->_hero->GetBody()->GetWorldCenter().y <= (tmp.getYStart() - tmp.getHeight())) { + this->getCurrentMap().destroyMap(); + Game::currentY++; + asChanged = true; + } + if (asChanged) { + this->_hero->destroyTarget(); + this->maps->_XYMap[Game::currentY][Game::currentX] = this->maps->getMapXY()[Game::currentY][Game::currentX].display(); + theCamera.SetPosition(this->maps->getMapXY()[Game::currentY][Game::currentX].getXMid(), + this->maps->getMapXY()[Game::currentY][Game::currentX].getYMid() + 1.8); + if (Game::isInMenu == 0) { + Game::getHUD()->updateBigMap(); + Game::getHUD()->minimap(); + } + asChanged = false; } - asChanged = false; } } @@ -338,42 +407,78 @@ void Game::addToDestroyList(Elements *m) { Game::bodiesToDestroy.push_back(m); } +void Game::endingGame(void) { + int i; + for (i = 0; i < Game::elementMap.size(); i++) { + if (Game::elementMap[i] && Game::elementMap[i]->getAttribute("type") != "Hero") { + theWorld.Remove(Game::elementMap[i]); + } + } + Quit::doSave(static_cast<Hero *>(Game::currentGame->getHero())); + Game::elementMap.clear(); + Game::getHUD()->deleteBigMap(0); + Game::getHUD()->setText("Press Enter to continue.", 500, 500); + if (!Game::lvlDone) { + theWorld.Remove(Game::currentGame->getHero()); + } + Game::menuCharacter = nullptr; + Game::ended = false; + Game::endGame = false; + Game::secretDoor = nullptr; + Game::bossDoor = nullptr; + Game::dealer = nullptr; + if (Game::currentGame->getShopkeeper()) { + if (Game::currentGame->getShopkeeper()->getShop()) + Game::currentGame->getShopkeeper()->getShop()->hideShop(); + theWorld.Remove(Game::currentGame->getShopkeeper()); + } + Game::currentGame->setShopkeeper(nullptr); + Game::chest->reset(); + Game::currentGame->tooltip->clearInfo(); + Game::deadWaiting = true; + Game::currentIds = 0; + // Chest, Shop Items +} + //! Intern callback for destroying an element. /** * Called after each tick() in order to destroy all elements set to destroy. * This function destroy each element in Game::bodiesToDestroy. * So, call this function outisde of this goal is useless. */ -bool Game::destroyAllBodies(void) { +bool Game::destroyAllBodies(std::string msg) { if (Game::ended == true) { return true ; } if (Game::endGame == true) { Game::ended = true; theWorld.PausePhysics(); - int i; - Game::getHUD()->setText("YOU ARE DEAD", 400, 400, Vector3(1, 0, 0), 1, "dead"); - for (i = 0; i < Game::elementMap.size(); i++) { + int i, j = 0, k; + Game::getHUD()->setText(msg, 400, 400, Vector3(1, 0, 0), 1, "dead"); + Game::getHUD()->clearHUD(); + k = Game::elementMap.size(); + theSwitchboard.DeferredBroadcast(new Message("PauseGame"), 1); + for (i = 0; i < k; i++) { if (Game::elementMap[i] && Game::elementMap[i]->getAttribute("type") != "Hero") { - Game::elementMap[i]->ChangeColorTo(Color(0, 0, 0, 1), 1, "PauseGame"); + if (Game::elementMap[i]->getAttribute("transparency") == "") + Game::elementMap[i]->ChangeColorTo(Color(0, 0, 0, 1), 1); if (Game::elementMap[i]->getAttribute("physic") != "") { - theWorld.GetPhysicsWorld().DestroyBody((Game::elementMap[i])->GetBody()); + if (Game::elementMap[i]->GetBody() != 0) + theWorld.GetPhysicsWorld().DestroyBody((Game::elementMap[i])->GetBody()); } - theWorld.Remove(Game::elementMap[i]); } } - Game::elementMap.clear(); return true; } else { for (std::list<Elements*>::iterator it = Game::bodiesToDestroy.begin(); it != Game::bodiesToDestroy.end(); it++) { if ((*it)->getAttribute("physic") != "") { - if ((*it)->GetBody()) { - (*it)->GetBody()->SetActive(false); - theWorld.GetPhysicsWorld().DestroyBody((*it)->GetBody()); - } + if ((*it)->GetBody()) { + (*it)->GetBody()->SetActive(false); + theWorld.GetPhysicsWorld().DestroyBody((*it)->GetBody()); + } } - theWorld.Remove(*it); - Game::delElement(*it); + theWorld.Remove(*it); + Game::delElement(*it); } Game::bodiesToDestroy.clear(); for (std::list<Elements*>::iterator it = Game::bodiesToCreate.begin(); it != Game::bodiesToCreate.end(); it++) { @@ -482,6 +587,8 @@ void Game::removeHUDWindow(HUDWindow *w) { * assuming this object is the first added to the list. */ HUDWindow *Game::getHUD(void) { + if (Game::windows.size() == 0) + return nullptr; return Game::windows.front(); } @@ -499,6 +606,7 @@ void Game::displayHUD(void) { w->showHud(); w->setMaxHP(hero->getMaxHP()); w->gold(hero->getGold()); + w->spells(); // Work //w->setText("Burp.", this->_hero, Vector3(0, 0, 0), 0, 1); /*w->removeText("Burp.");*/ @@ -515,7 +623,6 @@ void Game::reloadingHUD(void) { Game::getHUD()->minimap(); Game::getHUD()->life(this->getHero()->getHP()); Game::getHUD()->bag(); - Game::getHUD()->mana(this->getHero()->getMana()); Game::getHUD()->items(this->getHero()->getWeapon()); Game::getHUD()->items(this->getHero()->getArmor()); Game::getHUD()->items(this->getHero()->getRing()); @@ -525,11 +632,16 @@ void Game::reloadingHUD(void) { } } +void Game::addBoss(std::string n, int x, int y) { + Game::boss = new Boss(n, x, y); +} + /* SETTERS */ void Game::setHero(Characters * h) { this->_hero = h; }; Characters* Game::getHero(void) { return this->_hero; }; Shopkeeper* Game::getShopkeeper(void) { return this->_shopkeeper; }; void Game::setShopkeeper(Shopkeeper *s) { this->_shopkeeper = s; }; +std::map<std::string, Json::Value> Game::getSave(void) { return this->_save; }; // Set for the statics int Game::currentIds = 0; @@ -560,7 +672,21 @@ int Game::isWaitingForBind = 0; int Game::reloadHUD = 0; int Game::isPaused = 0; int Game::asToStart = 0; +int Game::lvlDone = 0; MenuCharacter *Game::menuCharacter = nullptr; Vector2 Game::spawnShop = Vector2(); +Vector2 Game::spawnBossDoor = Vector2(); +Vector2 Game::spawnSecretDoor = Vector2(); +Vector2 Game::spawnSecretReturnDoor = Vector2(); Vector2 Game::spawnDealer = Vector2(); Dealer *Game::dealer = nullptr; +Door *Game::bossDoor = nullptr; +Door *Game::secretDoor = nullptr; +Door *Game::secretReturnDoor = nullptr; +Vector2 Game::spawnChest = Vector2(); +Chest *Game::chest = nullptr; +bool Game::toggleMenu = true; +bool Game::stopPattern = false; +bool Game::deadWaiting = false; +int Game::World = 0; +Boss *Game::boss = nullptr; diff --git a/Sources/src/GameContactListener.cpp b/Sources/src/GameContactListener.cpp @@ -39,8 +39,10 @@ void GameContactListener::BeginContact(b2Contact * contact) { p1 = static_cast<PhysicsActor*>(contact->GetFixtureA()->GetBody()->GetUserData()); p2 = static_cast<PhysicsActor*>(contact->GetFixtureB()->GetBody()->GetUserData()); // if (Game::elementMap[p1->getId()] && Game::elementMap[p2->getId()]) { - Game::elementMap[p1->getId()]->BeginContact(Game::elementMap[p2->getId()], contact); - Game::elementMap[p2->getId()]->BeginContact(Game::elementMap[p1->getId()], contact); + if (Game::elementMap[p1->getId()]) + Game::elementMap[p1->getId()]->BeginContact(Game::elementMap[p2->getId()], contact); + if (Game::elementMap[p2->getId()]) + Game::elementMap[p2->getId()]->BeginContact(Game::elementMap[p1->getId()], contact); // } } @@ -58,7 +60,10 @@ void GameContactListener::EndContact(b2Contact * contact) { p1 = static_cast<PhysicsActor*>(contact->GetFixtureA()->GetBody()->GetUserData()); p2 = static_cast<PhysicsActor*>(contact->GetFixtureB()->GetBody()->GetUserData()); // if (Game::elementMap[p1->getId()] && Game::elementMap[p2->getId()]) { + if (Game::elementMap[p1->getId()]) Game::elementMap[p1->getId()]->EndContact(Game::elementMap[p2->getId()], contact); + if (Game::elementMap[p2->getId()]) Game::elementMap[p2->getId()]->EndContact(Game::elementMap[p1->getId()], contact); + // } } diff --git a/Sources/src/HUDTargeting.cpp b/Sources/src/HUDTargeting.cpp @@ -39,8 +39,6 @@ if ((*it) == nullptr) this->_enemies.remove((*it)); } - - std::cout << _enemies.size() << std::endl; if (_enemies.size() > 0) { this->_enemyId = 0; this->_joint = nullptr; diff --git a/Sources/src/HUDWindow.cpp b/Sources/src/HUDWindow.cpp @@ -29,13 +29,15 @@ /** * Basic constructor */ -HUDWindow::HUDWindow(void) : HUDActor() { +HUDWindow::HUDWindow(void) : HUDActor(), _cooldownAtt(0), _cooldownMove(0) { RegisterFont("Resources/font.ttf", 14, "Gamefont"); RegisterFont("Resources/font.ttf", 20, "BigGamefont"); RegisterFont("Resources/font.ttf", 10, "MediumGamefont"); RegisterFont("Resources/Fonts/fail.otf", 80, "dead"); RegisterFont("Resources/Fonts/Market_Deco.ttf", 80, "title"); RegisterFont("Resources/Fonts/Market_Deco.ttf", 40, "smallTitle"); + theSwitchboard.SubscribeTo(this, "speAttCooldownEnd"); + theSwitchboard.SubscribeTo(this, "speMoveCooldownEnd"); this->_hearts.clear(); return; } @@ -63,6 +65,7 @@ HUDWindow::Text *HUDWindow::setText(std::string str, int x, int y) { t->colorR = t->colorG = t->colorB = t->colorA = 1; t->font = "Gamefont"; t->toFollow = nullptr; + t->isFading = 0; this->_text.push_back(t); return t; } @@ -86,6 +89,7 @@ HUDWindow::Text *HUDWindow::setText(std::string str, int x, int y, Vector3 colo t->colorB = color.Z; t->colorA = alpha; t->font = "Gamefont"; + t->isFading = 0; t->toFollow = nullptr; this->_text.push_back(t); return t; @@ -111,6 +115,7 @@ HUDWindow::Text *HUDWindow::setText(std::string str, int x, int y, Vector3 colo t->colorB = color.Z; t->colorA = alpha; t->font = font; + t->isFading = 0; t->toFollow = nullptr; this->_text.push_back(t); return t; @@ -142,28 +147,27 @@ HUDWindow::Text *HUDWindow::setText(std::string str, Characters *toFollow, t->y = 0; if (isTalk) { Elements *test; - test = new Elements(); test->SetSize(2.5, 0.7); test->SetPosition(toFollow->GetBody()->GetWorldCenter().x, - (toFollow->GetBody()->GetWorldCenter().y + 1)); + (toFollow->GetBody()->GetWorldCenter().y + 1)); test->SetSprite("Resources/Images/HUD/talk.png"); test->SetDrawShape(ADS_Square); -/* test->SetFixedRotation(true); - test->SetLayer(1500); - test->SetDensity(0.001f); - test->SetRestitution(0); - test->SetFriction(0); - test->SetIsSensor(true);*/ + /* test->SetFixedRotation(true); + test->SetLayer(1500); + test->SetDensity(0.001f); + test->SetRestitution(0); + test->SetFriction(0); + test->SetIsSensor(true);*/ test->InitPhysics(); b2DistanceJointDef jointDef1; b2DistanceJointDef jointDef2; jointDef1.Initialize(toFollow->GetBody(), test->GetBody(), b2Vec2(toFollow->GetBody()->GetWorldCenter().x + 0.4f, - toFollow->GetBody()->GetWorldCenter().y + 0.4f), test->GetBody()->GetWorldCenter()); + toFollow->GetBody()->GetWorldCenter().y + 0.4f), test->GetBody()->GetWorldCenter()); jointDef1.collideConnected = false; jointDef2.Initialize(toFollow->GetBody(), test->GetBody(), - b2Vec2(toFollow->GetBody()->GetWorldCenter().x - 0.4f, test->GetBody()->GetWorldCenter().y - 0.4f), test->GetBody()->GetWorldCenter()); + b2Vec2(toFollow->GetBody()->GetWorldCenter().x - 0.4f, test->GetBody()->GetWorldCenter().y - 0.4f), test->GetBody()->GetWorldCenter()); jointDef2.collideConnected = false; b2DistanceJoint *joint1 = (b2DistanceJoint*)theWorld.GetPhysicsWorld().CreateJoint(&jointDef1); b2DistanceJoint *joint2 = (b2DistanceJoint*)theWorld.GetPhysicsWorld().CreateJoint(&jointDef2); @@ -174,17 +178,22 @@ HUDWindow::Text *HUDWindow::setText(std::string str, Characters *toFollow, return t; } + //! Remove Text /** * This function remove the asked text from the screen. * @param str The text content message */ -void HUDWindow::removeText(std::string str) { - std::list<HUDWindow::Text *>::iterator i; +void HUDWindow::removeText(std::string str, int last) { + std::list<HUDWindow::Text *>::iterator i, t = this->_text.end(); for (i = this->_text.begin(); i != this->_text.end(); i++) { - if ((*i)->str == str) - break ; + if ((*i)->str == str) { + if (last) { + this->_text.erase(i); + } else + break ; + } } if (i != this->_text.end()) { if (this->_dialog[str]) { @@ -195,6 +204,19 @@ void HUDWindow::removeText(std::string str) { } } +void HUDWindow::updateText(std::string org, std::string newStr) { + std::list<HUDWindow::Text *>::iterator i; + + for (i = this->_text.begin(); i != this->_text.end(); i++) { + if ((*i)->str == org) + break ; + } + if (i != this->_text.end()) { + (*i)->str = newStr; + } + +} + //! Remove a text with an object /** * Remove a text from the screen with a HUDWindow::Text @@ -221,24 +243,32 @@ void HUDWindow::displayText(void) { std::list<HUDWindow::Text *>::iterator i; for (i = this->_text.begin(); i != this->_text.end(); i++) { - glColor4f((*i)->colorR, (*i)->colorG, (*i)->colorB, (*i)->colorA); - if ((*i)->toFollow == nullptr) - DrawGameText((*i)->str, (*i)->font, (*i)->x, (*i)->y, theCamera.GetRotation()); - else { - int x, y, mult = 6; - Map m = Game::currentGame->maps->_XYMap[Game::currentY][Game::currentX]; - - x = ((((*i)->toFollow->GetBody()->GetWorldCenter().x + 0.5) - m.getXStart()) * 40) - 40; - y = -((((*i)->toFollow->GetBody()->GetWorldCenter().y - 0.5) - m.getYStart()) * 40) + 50; - if ((*i)->isFading) { - DrawGameText((*i)->str, (*i)->font, x, y - (*i)->y, theCamera.GetRotation()); - (*i)->y += 1; - (*i)->colorA -= 0.05f; - } else if ((*i)->isTalk) { - DrawGameText((*i)->str, (*i)->font, x - 5, y - (*i)->y + 5, theCamera.GetRotation()); - } else { - DrawGameText((*i)->str, (*i)->font, x, y - (*i)->y, theCamera.GetRotation()); + if (*i) { + glColor4f((*i)->colorR, (*i)->colorG, (*i)->colorB, (*i)->colorA); + if ((*i)->toFollow == nullptr && (*i)->isFading == 1) + (*i)->colorA -= 0.02f; + if ((*i)->toFollow == nullptr) + DrawGameText((*i)->str, (*i)->font, (*i)->x, (*i)->y, theCamera.GetRotation()); + else { + int x, y, mult = 6; + Map m = Game::currentGame->getCurrentMap(); + + if ((*i)->toFollow->GetBody()) { + x = ((((*i)->toFollow->GetBody()->GetWorldCenter().x + 0.5) - m.getXStart()) * 40) - 40; + y = -((((*i)->toFollow->GetBody()->GetWorldCenter().y + (((*i)->toFollow->GetSize().Y) / 4)) - m.getYStart()) * 40) + 50; + if ((*i)->isFading) { + DrawGameText((*i)->str, (*i)->font, x, y - (*i)->y, theCamera.GetRotation()); + (*i)->y += 1; + (*i)->colorA -= 0.02f; + } else if ((*i)->isTalk) { + DrawGameText((*i)->str, (*i)->font, x - 5, y - (*i)->y + 5, theCamera.GetRotation()); + } else { + DrawGameText((*i)->str, (*i)->font, x, y - (*i)->y, theCamera.GetRotation()); + } + } } + if ((*i)->colorA < 0) + this->removeText((*i)->str); } } } @@ -335,63 +365,41 @@ HUDActor *HUDWindow::addImage(std::string path, int x, int y, Vector2 size, int * @todo Empty heart, half-heart. */ void HUDWindow::life(int life) { - int x, v, sLife = life, y, size; + int x, v, y, size, j; + float percent; std::list<HUDActor *>::iterator i; int index; - y = theCamera.GetWindowHeight() / 20 * 0.9; - size = theCamera.GetWindowWidth() / 20 * 0.6; - for (i = this->_hearts.begin(), index = 0; i != this->_hearts.end(); i++, index++) { - (*(i))->ChangeColorTo(Color(0, 0, 0, 0), 0); - theWorld.Remove(*(i)); - } - this->_hearts.clear(); - for (x = theCamera.GetWindowWidth() / 20 * 3; life > 0; x += theCamera.GetWindowWidth() / 35) { - if (x == theCamera.GetWindowWidth() / 20 * 3) { - this->_hearts.push_back(this->addImage("Resources/Images/HUD/hp.png", (x - theCamera.GetWindowWidth() / 30), y, size - 2)); - } if (life >= 25) { - this->_hearts.push_back(this->addImage("Resources/Images/HUD/heart.png", x, y, size, 100)); - life -= 25; + if (!Game::deadWaiting) { + y = theCamera.GetWindowHeight() / 20 * 1; + size = theCamera.GetWindowWidth() / 20 * 0.6; + for (i = this->_hearts.begin(), index = 0; i != this->_hearts.end(); i++, index++) { + (*(i))->ChangeColorTo(Color(0, 0, 0, 0), 0); + theWorld.Remove(*(i)); } - } - if (sLife < this->_maxHP) { - for (v = 0; (this->_maxHP - sLife) > v; v += 25, x += theCamera.GetWindowWidth() / 35) { - this->_hearts.push_back(this->addImage("Resources/Images/HUD/empty_heart.png", x, y + 2, size - 3, 105)); + this->_hearts.clear(); + percent = life * 100 / this->_maxHP; + x = theCamera.GetWindowWidth() / 20 * 3; + this->_hearts.push_back(this->addImage("Resources/Images/HUD/hp.png", (x - theCamera.GetWindowWidth() / 30), y, size - 2)); + x += size - 2; + if (percent > 0) + this->_hearts.push_back(this->addImage("Resources/Images/HUD/hp_begin.png", + ((x - theCamera.GetWindowWidth() / 30)), y, Vector2(5, 15), 100)); + x += 1.3; + for (j = 1; j < percent; x += 1.3, j++) + this->_hearts.push_back(this->addImage("Resources/Images/HUD/hp_middle.png", (x - theCamera.GetWindowWidth() / 30), y, Vector2(1.3, 15), 100)); + this->_hearts.push_back(this->addImage("Resources/Images/HUD/hp_end.png", + ((x - theCamera.GetWindowWidth() / 30) + 1.3), y, Vector2(5, 15), 100)); + if (percent < 100) { + for (; percent < 100; percent++, x += 1.3) { + this->_hearts.push_back(this->addImage("Resources/Images/HUD/hp_empty_middle.png", (x - theCamera.GetWindowWidth() / 30), y, Vector2(1.3, 15), 100)); + } + this->_hearts.push_back(this->addImage("Resources/Images/HUD/hp_empty_end.png", + ((x - theCamera.GetWindowWidth() / 30) + 1.3), y, Vector2(5, 15), 100)); } } } -//! Display mana function -/** - * Show the mana in the HUD - * Same way as HUDWindow::life, this function handle the sprites, and the Empty mana - * @param mana The Mana point. - */ -void HUDWindow::mana(int mana) { - std::list<HUDActor *>::iterator i; - float x = theCamera.GetWindowWidth() / 20 * 3.05; - int y, max = this->_maxMana; - float yHeight = theCamera.GetWindowHeight() / 20 * 1.56, size = theCamera.GetWindowWidth() / 20 * 0.25; - - for (i = this->_mana.begin(); i != this->_mana.end(); i++) - theWorld.Remove(*(i)); - this->_mana.clear(); - this->_mana.push_back(this->addImage("Resources/Images/HUD/mp.png", (x - theCamera.GetWindowWidth() / 30), yHeight, size * 2)); - x -= theCamera.GetWindowWidth() / 80 * 0.8; - this->_mana.push_back(this->addImage("Resources/Images/HUD/mp_bar_first.png", x, yHeight, size)); - x += theCamera.GetWindowWidth() / 80; - for (y = 0; y < (mana - 1); y += 10, x += theCamera.GetWindowWidth() / 80) { - this->_mana.push_back(this->addImage("Resources/Images/HUD/mp_bar_mid.png", x, yHeight, size)); - } - if (y == max) - this->_mana.push_back(this->addImage("Resources/Images/HUD/mp_bar_full_end.png", x, yHeight, size)); - else { - for (; y < max; y += 10, x += theCamera.GetWindowWidth() / 80) - this->_mana.push_back(this->addImage("Resources/Images/HUD/mp_bar_empty.png", x, yHeight, size)); - this->_mana.push_back(this->addImage("Resources/Images/HUD/mp_bar_empty_end.png", x, yHeight, size)); - } -} - //! Display gold function /** * Make it rain baby @@ -400,7 +408,7 @@ void HUDWindow::mana(int mana) { */ void HUDWindow::gold(int gold) { float x = theCamera.GetWindowWidth() / 20 * 2.37; - int y = theCamera.GetWindowHeight() / 20 * 2.2; + int y = theCamera.GetWindowHeight() / 20 * 1.9; float size = theCamera.GetWindowWidth() / 20 * 0.41; this->addImage("Resources/Images/HUD/xp.png", x, y, Vector2(size + 3.5, size), 100); @@ -614,11 +622,13 @@ void HUDWindow::bigMap(void) { if (x == Game::currentX && y == Game::currentY) { this->_currentObjectMap = tmp; tmp->SetColor(0, 1, 0, 0); + } if (map[y][x].getSpecial() != "" && map[y][x].getSpecial() != "starter") { + this->setText(std::string(1, map[y][x].getSpecial()[0] - 32), x2 - 2, y2 + 1, Vector3(1, 0, 0), 1); } if (Game::currentGame->getHero()->_totem != nullptr) { if (std::to_string(x) == Game::currentGame->getHero()->_totem->getAttribute("currentX") - && std::to_string(y) == Game::currentGame->getHero()->_totem->getAttribute("currentY")) { - this->setText("T", x2 - 2, y2 + 1, Vector3(1, 0, 0), 1); - } + && std::to_string(y) == Game::currentGame->getHero()->_totem->getAttribute("currentY")) { + this->setText("To", x2 - 2, y2 + 1, Vector3(1, 0, 0), 1); + } } else tmp->SetColor(1, 1, 1, 0); tmp->SetDrawShape(ADS_Square); @@ -653,7 +663,10 @@ void HUDWindow::deleteBigMap(int n) { (*it)->ChangeColorTo(Color(1, 1, 1, 0), 1); } theSwitchboard.DeferredBroadcast(new Message("deleteMapPressed"), 1); - this->removeText("T"); + this->removeText("To"); + this->removeText("B"); + this->removeText("S"); + this->removeText("D"); } else { if (this->_doNotDelete == 0) { for (it = this->_bigMapList.begin(); it != this->_bigMapList.end(); it++) @@ -672,7 +685,7 @@ void HUDWindow::updateBigMap(void) { for (it = this->_bigMapList.begin(); it != this->_bigMapList.end(); it++) { if ((*it)->GetPosition() == this->_currentObjectMap->GetPosition() && - (*it) != this->_currentObjectMap) + (*it) != this->_currentObjectMap) theWorld.Remove(*it); } this->_currentObjectMap->ChangeColorTo(Color(1, 1, 1, 0.5), 0.5); @@ -689,6 +702,8 @@ void HUDWindow::updateBigMap(void) { theWorld.Add(tmp); this->_bigMapList.push_back(tmp); tmp->ChangeColorTo(Color(0, 1, 0, 0.5), 0.5); + if (map[y][x].getSpecial() != "" && map[y][x].getSpecial() != "starter") + this->setText(std::string(1, map[y][x].getSpecial()[0] - 32), x2 - 2, y2 + 1, Vector3(1, 0, 0), 1); } } } @@ -755,12 +770,29 @@ void HUDWindow::character(void) { this->addImage(this->_g->getHero()->getAttribute("spritesFrame"), theCamera.GetWindowWidth() / 20 * 1.1, theCamera.GetWindowHeight() / 20 * 1.5, theCamera.GetWindowWidth() / 18, 4); HUDActor *bag = new HUDActor(); - this->setText("Lvl " + std::to_string(this->_g->getHero()->getLevel()), theCamera.GetWindowWidth() / 20 * 0.2, theCamera.GetWindowHeight() / 20 * 0.9, Vector3(1, 1, 1), 1, "MediumGamefont"); + this->setText(std::to_string(this->_g->getHero()->getLevel()), theCamera.GetWindowWidth() / 20 * 0.3, theCamera.GetWindowHeight() / 20 * 0.9, Vector3(1, 1, 1), 1, "MediumGamefont"); } void HUDWindow::spells(void) { this->addImage("Resources/HUD/spells_bg.png", (theCamera.GetWindowWidth() / 20) * 7, theCamera.GetWindowHeight() / 20 * 1.5, - Vector2(theCamera.GetWindowWidth() / 15, theCamera.GetWindowHeight() / 10 * 1.2), 5); + Vector2(theCamera.GetWindowWidth() / 15 * 0.8, theCamera.GetWindowHeight() / 10 * 1.2), 15); + this->addImage("Resources/HUD/spell_bg.png", (theCamera.GetWindowWidth() / 20) * 7 + 3, theCamera.GetWindowHeight() / 20, + Vector2(theCamera.GetWindowWidth() / 25), 15); + this->addImage("Resources/Images/Skills/" + Game::currentGame->getHero()->getSpeMove() + ".png", (theCamera.GetWindowWidth() / 20) * 7 + 1, theCamera.GetWindowHeight() / 20 * 0.9, + Vector2(theCamera.GetWindowWidth() / 35), 15); + this->setText("T", (theCamera.GetWindowWidth() / 20) * 7.28, theCamera.GetWindowHeight() / 20 * 1.5, Vector3(0.2, 0.12, 0), 1, "MediumGamefont"); + this->addImage("Resources/HUD/spell_bg.png", (theCamera.GetWindowWidth() / 20) * 7 + 3, theCamera.GetWindowHeight() / 20 * 2.1, + Vector2(theCamera.GetWindowWidth() / 25), 15); + this->addImage("Resources/Images/Skills/" + Game::currentGame->getHero()->getSpeAtt() + ".png", (theCamera.GetWindowWidth() / 20) * 7 + 1, theCamera.GetWindowHeight() / 20 * 1.9, + Vector2(theCamera.GetWindowWidth() / 35), 15); + this->setText("Y", (theCamera.GetWindowWidth() / 20) * 7.28, theCamera.GetWindowHeight() / 20 * 2.57, Vector3(0.2, 0.12, 0), 1, "MediumGamefont"); +} + +void HUDWindow::spellText(void) { + if (Game::started && Game::isInMenu == 0) { + this->setText("Y", (theCamera.GetWindowWidth() / 20) * 7.28, theCamera.GetWindowHeight() / 20 * 2.57, Vector3(0.2, 0.12, 0), 1, "MediumGamefont"); + this->setText("T", (theCamera.GetWindowWidth() / 20) * 7.28, theCamera.GetWindowHeight() / 20 * 1.5, Vector3(0.2, 0.12, 0), 1, "MediumGamefont"); + } } void HUDWindow::clearHUD(void) { @@ -771,11 +803,72 @@ void HUDWindow::clearHUD(void) { } this->removeText(this->_gold); if (this->_g) - this->removeText("Lvl " + std::to_string(this->_g->getHero()->getLevel())); + this->removeText(std::to_string(this->_g->getHero()->getLevel())); +} + +void HUDWindow::speAttCooldown(int time) { + HUDActor *h = new HUDActor(); + + h->SetPosition((theCamera.GetWindowWidth() / 20) * 7 + 2, theCamera.GetWindowHeight() / 20 * 2.05); + h->SetSize(theCamera.GetWindowWidth() / 27); + h->SetLayer(100); + h->SetSprite("Resources/HUD/spell_cooldown.png"); + theWorld.Add(h); + this->_attackCooldown = h; + this->_cooldownAtt = time + 1; + theSwitchboard.SubscribeTo(this, "second"); + this->ReceiveMessage(new Message("second")); +} + +void HUDWindow::speMoveCooldown(int time) { + HUDActor *h = new HUDActor(); + + h->SetPosition((theCamera.GetWindowWidth() / 20) * 7 + 2, theCamera.GetWindowHeight() / 21); + h->SetSize(theCamera.GetWindowWidth() / 27); + h->SetLayer(100); + h->SetSprite("Resources/HUD/spell_cooldown.png"); + theWorld.Add(h); + this->_moveCooldown = h; + this->_cooldownMove = time + 1; + theSwitchboard.SubscribeTo(this, "second"); + this->ReceiveMessage(new Message("second")); +} + + +void HUDWindow::ReceiveMessage(Message *m) { + static size_t lastTimestamp = 0; + static HUDWindow::Text *attText = nullptr; + static HUDWindow::Text *moveText = nullptr; + + if (m->GetMessageName() == "speAttCooldownEnd") { + } else if (m->GetMessageName() == "speMoveCooldownEnd") { + } else if (m->GetMessageName() == "second") { + if (lastTimestamp != time(NULL)) { + lastTimestamp = time(NULL); + if (attText) + this->removeText(attText); + attText = nullptr; + if (this->_cooldownAtt >= 2) { + attText = this->setText(std::to_string(--this->_cooldownAtt), (theCamera.GetWindowWidth() / 20) * 7, theCamera.GetWindowHeight() / 20 * 2.1, Vector3(1, 0, 0), 1); + theSwitchboard.DeferredBroadcast(new Message("second"), 1); + } + if (moveText) + this->removeText(moveText); + moveText = nullptr; + if (this->_cooldownMove >= 2) { + moveText = this->setText(std::to_string(--this->_cooldownMove), (theCamera.GetWindowWidth() / 20) * 7, theCamera.GetWindowHeight() / 20, Vector3(1, 0, 0), 1); + theSwitchboard.DeferredBroadcast(new Message("second"), 1); + } + if (this->_cooldownAtt < 1 && this->_cooldownMove < 1) { + theSwitchboard.UnsubscribeFrom(this, "second"); + } + } + } } void HUDWindow::setGame(Game *g) { this->_g = g; }; -void HUDWindow::setMaxMana(int m) { this->_maxMana = m; }; void HUDWindow::setMaxHP(int h) { this->_maxHP = h; }; +HUDActor *HUDWindow::getAttCooldown(void) { return this->_attackCooldown; }; +HUDActor *HUDWindow::getMoveCooldown(void) { return this->_moveCooldown; }; int HUDWindow::isToggled = 0; diff --git a/Sources/src/Hero.cpp b/Sources/src/Hero.cpp @@ -38,14 +38,53 @@ Hero::Hero(std::string name) : Characters(name) { theSwitchboard.SubscribeTo(this, "dropItem"); theSwitchboard.SubscribeTo(this, "attackReady"); theSwitchboard.SubscribeTo(this, "speMoveReady"); + theSwitchboard.SubscribeTo(this, "speAttReady"); theSwitchboard.SubscribeTo(this, "changeCharacter"); theSwitchboard.SubscribeTo(this, "lockTarget"); theSwitchboard.SubscribeTo(this, "unlockTarget"); + theSwitchboard.SubscribeTo(this, "cycleInventory"); + theSwitchboard.SubscribeTo(this, "chooseItem1"); + theSwitchboard.SubscribeTo(this, "chooseItem2"); + theSwitchboard.SubscribeTo(this, "chooseItem3"); + theSwitchboard.SubscribeTo(this, "chooseItem4"); + theSwitchboard.SubscribeTo(this, "endStomp"); this->addAttribute("type", "Hero"); + this->_eqMove = new SpecialMoves(static_cast<Characters*>(this)); + this->_eqAtt = new SpecialAttack(static_cast<Characters*>(this)); + this->_inventory = new Inventory(this->_getAttr("starting", "inventorySlots").asInt()); return ; } +Hero::Hero(Hero *obj) : Characters(obj->getAttribute("class")) { + theSwitchboard.SubscribeTo(this, "canMove"); + theSwitchboard.SubscribeTo(this, "endInvincibility"); + theSwitchboard.SubscribeTo(this, "enableAttackHitbox"); + theSwitchboard.SubscribeTo(this, "disableAttackHitbox"); + theSwitchboard.SubscribeTo(this, "equipSelectedItem"); + theSwitchboard.SubscribeTo(this, "dropItem"); + theSwitchboard.SubscribeTo(this, "attackReady"); + theSwitchboard.SubscribeTo(this, "speMoveReady"); + theSwitchboard.SubscribeTo(this, "speAttReady"); + theSwitchboard.SubscribeTo(this, "changeCharacter"); + theSwitchboard.SubscribeTo(this, "lockTarget"); + theSwitchboard.SubscribeTo(this, "unlockTarget"); + theSwitchboard.SubscribeTo(this, "cycleInventory"); + theSwitchboard.SubscribeTo(this, "chooseItem1"); + theSwitchboard.SubscribeTo(this, "chooseItem2"); + theSwitchboard.SubscribeTo(this, "chooseItem3"); + theSwitchboard.SubscribeTo(this, "chooseItem4"); + theSwitchboard.SubscribeTo(this, "endStomp"); + this->addAttribute("type", "Hero"); + + delete obj->getEqMove(); + delete obj->getEqAtt(); + this->_eqMove = new SpecialMoves(static_cast<Characters*>(this)); + this->_eqAtt = new SpecialAttack(static_cast<Characters*>(this)); + + this->_inventory = obj->getInventory(); +} + //! Destructor /** * Basic Destructor @@ -73,66 +112,49 @@ void Hero::init(void) { */ void Hero::actionCallback(std::string name, int status) { std::string orientation; + std::string o2; float x = 2, y = 1; + std::string type = this->_weapon->getType(); + + if (this->_latOrientation == RIGHT) { + orientation = "Right"; + } else if (this->_latOrientation == LEFT) { + orientation = "Left"; + } + this->_setCategory(type); if (name == "attack" && status == 0 && this->_canAttack == true && this->_fullChargedAttack == false && this->_isLoadingAttack == 0 && this->_isAttacking == 1) { this->_canAttack = false; - if (this->_orientation == RIGHT) { - orientation = "right"; - } else if (this->_orientation == LEFT) { - orientation = "left"; - } else if (this->_orientation == UP) { - x = 1.5f; y = 2; - orientation = "up"; + this->changeSizeTo(Vector2(this->_getAttr("x").asFloat(), this->_getAttr("y").asFloat())); + if (this->_orientation == UP) { + this->changeSizeTo(Vector2(this->_getAttr("upX").asFloat(), this->_getAttr("upY").asFloat())); + o2 = "Up"; } else if (this->_orientation == DOWN) { - x = 1; y = 2.5f; - orientation = "down"; + this->changeSizeTo(Vector2(this->_getAttr("downX").asFloat(), this->_getAttr("downY").asFloat())); + o2 = "Down"; } - if (this->getAttribute("class") == "Warrior") - this->changeSizeTo(Vector2(x, y)); - this->_setCategory("attack"); - - std::string type = this->_weapon->getType(); - this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, - this->_getAttr("beginFrame" + type + "_" + orientation).asInt(), - this->_getAttr("endFrame" + type + "_" + orientation).asInt(), "base"); - + this->_getAttr("beginFrame" + orientation + o2).asInt(), + this->_getAttr("endFrame" + orientation + o2).asInt(), "base"); } else if (name == "attack" && status == 0 && this->_canAttack == true && this->_fullChargedAttack == true) { - if (this->_orientation == RIGHT) { - orientation = "right"; - } else if (this->_orientation == LEFT) { - orientation = "left"; - } else if (this->_orientation == UP) { - x = 1.5f; y = 2; - orientation = "up"; - } else if (this->_orientation == DOWN) { - x = 1; y = 2.5f; - orientation = "down"; - } - this->_setCategory("loadAttack_done"); this->_isLoadingAttack = 0; this->_fullChargedAttack = false; - if (this->getAttribute("class") == "Warrior") - this->changeSizeTo(Vector2(2, 2)); + this->changeSizeTo(Vector2(this->_getAttr("loadX").asFloat(), this->_getAttr("loadY").asFloat())); this->_canAttack = false; this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, - this->_getAttr("beginFrame_" + orientation).asInt(), - this->_getAttr("endFrame_" + orientation).asInt(), "base"); + this->_getAttr("holdFrameLoad" + orientation).asInt(), + this->_getAttr("endFrameLoad" + orientation).asInt(), "base"); } else if (name == "loadAttack_charge") { - if (this->_latOrientation == RIGHT) { - orientation = "right"; - } else if (this->_latOrientation == LEFT) - orientation = "left"; - this->_setCategory("loadAttack_charge"); - if (this->getAttribute("class") == "Warrior") - this->changeSizeTo(Vector2(2, 2)); +// else if (type == "Axe") +// this->changeSizeTo(Vector2(2, 1.5)); +// } + this->changeSizeTo(Vector2(this->_getAttr("loadX").asFloat(), this->_getAttr("loadY").asFloat())); this->PlaySpriteAnimation(this->_getAttr("time").asFloat(), SAT_OneShot, - this->_getAttr("beginFrame_" + orientation).asInt(), - this->_getAttr("endFrame_" + orientation).asInt()); + this->_getAttr("beginFrameLoad" + orientation).asInt(), + this->_getAttr("holdFrameLoad" + orientation).asInt()); } else if (name == "dash") { if (this->_latOrientation == RIGHT) { orientation = "right"; @@ -164,6 +186,8 @@ void Hero::actionCallback(std::string name, int status) { */ void Hero::BeginContact(Elements* elem, b2Contact *contact) { Characters::BeginContact(elem, contact); + if (!elem) + return ; if (elem->getAttribute("type") == "Enemy" && elem->isDead() == false) { if (this->_invincibility == false) this->_takeDamage(elem); @@ -176,25 +200,21 @@ void Hero::BeginContact(Elements* elem, b2Contact *contact) { new Weapon(this->_weapon, this, -1); } } + } else if (elem->getAttribute("type") == "projectile") { + this->_takeDamage(elem); } else if (elem->getAttribute("type") == "Object") { if (elem->getAttribute("type2") == "Consumable") { if (elem->getAttribute("type3") == "HP") { if (this->_hp != this->_maxHp) { + elem->ChangeColorTo(Color(0,0,0,0), 0); Game::addToDestroyList(elem); this->setHP(this->getHP() + stoi(elem->getAttribute("value"))); Game::currentGame->tooltip->tip(elem, this); Game::getHUD()->life(this->getHP()); } - } else if (elem->getAttribute("type3") == "mana") { - if (this->_mana < this->_maxMana) { - Game::addToDestroyList(elem); - this->setMana(this->getMana() + stoi(elem->getAttribute("value"))); - Game::currentGame->tooltip->tip(elem, this); - Game::getHUD()->mana(this->getMana()); - } - } - if (elem->getAttribute("type3") == "gold") { + } if (elem->getAttribute("type3") == "gold") { + elem->ChangeColorTo(Color(0,0,0,0), 0); Game::addToDestroyList(elem); this->_gold += stoi(elem->getAttribute("value")); Game::currentGame->tooltip->tip(elem, this); @@ -207,6 +227,9 @@ void Hero::BeginContact(Elements* elem, b2Contact *contact) { this->_item = elem; } } + else if (elem->getAttribute("boss") == "true") { + this->_takeDamage(elem); + } if (elem->getAttribute("type") == "ground" && elem->getAttribute("speType") == "spikes") { if (this->_isStomping == true) { @@ -227,9 +250,17 @@ void Hero::BeginContact(Elements* elem, b2Contact *contact) { this->_shopItemNumber = atoi(elem->getAttribute("number"