From d2d2f956ef64159d2587bc6bba833c5e0680fd51 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Tue, 18 Apr 2023 22:09:37 -0400 Subject: [PATCH] Overhaul modifiers and add temp stat boosts --- README.md | 5 - public/images/items.json | 3084 +++++++++++++++------------- public/images/items.png | Bin 34585 -> 38565 bytes public/images/items/dire_hit.png | Bin 0 -> 335 bytes public/images/items/guard_spec.png | Bin 0 -> 329 bytes public/images/items/x_accuracy.png | Bin 0 -> 331 bytes public/images/items/x_attack.png | Bin 0 -> 333 bytes public/images/items/x_defense.png | Bin 0 -> 331 bytes public/images/items/x_sp_atk.png | Bin 0 -> 324 bytes public/images/items/x_sp_def.png | Bin 0 -> 330 bytes public/images/items/x_speed.png | Bin 0 -> 325 bytes src/battle-phases.ts | 47 +- src/battle-scene.ts | 14 +- src/modifier-type.ts | 168 +- src/modifier.ts | 47 +- src/move.ts | 5 +- src/pokemon.ts | 19 +- src/status-effect.ts | 15 + 18 files changed, 1878 insertions(+), 1526 deletions(-) create mode 100644 public/images/items/dire_hit.png create mode 100644 public/images/items/guard_spec.png create mode 100644 public/images/items/x_accuracy.png create mode 100644 public/images/items/x_attack.png create mode 100644 public/images/items/x_defense.png create mode 100644 public/images/items/x_sp_atk.png create mode 100644 public/images/items/x_sp_def.png create mode 100644 public/images/items/x_speed.png diff --git a/README.md b/README.md index 446969724..06b203eeb 100644 --- a/README.md +++ b/README.md @@ -17,17 +17,12 @@ - Critical capture - Save data - Pokedex -- Battle info - - Owned icon - - Status effect indicator - Modifiers - PP Up - - Type enhancers - Various mainline game items for various enhancements - Items that cause effects on hit (?) - Capture rate booster - Balancing - - Modifiers - Biome pools - Custom art - Battle bases and backgrounds diff --git a/public/images/items.json b/public/images/items.json index 7b11c1d77..0afac3bbe 100644 --- a/public/images/items.json +++ b/public/images/items.json @@ -4,8 +4,8 @@ "image": "items.png", "format": "RGBA8888", "size": { - "w": 229, - "h": 229 + "w": 234, + "h": 234 }, "scale": 1, "frames": [ @@ -45,8 +45,8 @@ "h": 24 }, "frame": { - "x": 27, - "y": 0, + "x": 0, + "y": 26, "w": 24, "h": 24 } @@ -66,7 +66,7 @@ "h": 24 }, "frame": { - "x": 51, + "x": 27, "y": 0, "w": 24, "h": 24 @@ -87,8 +87,8 @@ "h": 24 }, "frame": { - "x": 75, - "y": 0, + "x": 0, + "y": 50, "w": 24, "h": 24 } @@ -108,12 +108,33 @@ "h": 24 }, "frame": { - "x": 99, + "x": 51, "y": 0, "w": 24, "h": 24 } }, + { + "filename": "big_root", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 0, + "y": 74, + "w": 23, + "h": 24 + } + }, { "filename": "clefairy_doll", "rotated": false, @@ -129,7 +150,7 @@ "h": 23 }, "frame": { - "x": 123, + "x": 75, "y": 0, "w": 24, "h": 23 @@ -150,12 +171,33 @@ "h": 23 }, "frame": { - "x": 147, + "x": 99, "y": 0, "w": 24, "h": 23 } }, + { + "filename": "kings_rock", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 0, + "y": 98, + "w": 23, + "h": 24 + } + }, { "filename": "scope-lens", "rotated": false, @@ -171,7 +213,7 @@ "h": 23 }, "frame": { - "x": 171, + "x": 123, "y": 0, "w": 24, "h": 23 @@ -192,75 +234,12 @@ "h": 23 }, "frame": { - "x": 195, + "x": 147, "y": 0, "w": 24, "h": 23 } }, - { - "filename": "big_root", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 123, - "y": 23, - "w": 23, - "h": 24 - } - }, - { - "filename": "kings_rock", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 146, - "y": 23, - "w": 23, - "h": 24 - } - }, - { - "filename": "rare_candy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 169, - "y": 23, - "w": 23, - "h": 23 - } - }, { "filename": "exp_share", "rotated": false, @@ -276,33 +255,12 @@ "h": 22 }, "frame": { - "x": 192, - "y": 23, + "x": 171, + "y": 0, "w": 24, "h": 22 } }, - { - "filename": "revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 12, - "h": 17 - }, - "frame": { - "x": 216, - "y": 23, - "w": 12, - "h": 17 - } - }, { "filename": "max_revive", "rotated": false, @@ -318,75 +276,12 @@ "h": 24 }, "frame": { - "x": 192, - "y": 45, + "x": 0, + "y": 122, "w": 22, "h": 24 } }, - { - "filename": "full_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 15, - "h": 23 - }, - "frame": { - "x": 214, - "y": 45, - "w": 15, - "h": 23 - } - }, - { - "filename": "prism_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 8, - "w": 15, - "h": 15 - }, - "frame": { - "x": 214, - "y": 68, - "w": 15, - "h": 15 - } - }, - { - "filename": "healing_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 23, - "h": 22 - }, - "frame": { - "x": 169, - "y": 46, - "w": 23, - "h": 22 - } - }, { "filename": "black_belt", "rotated": false, @@ -402,8 +297,8 @@ "h": 23 }, "frame": { - "x": 27, - "y": 24, + "x": 0, + "y": 146, "w": 22, "h": 23 } @@ -424,7 +319,7 @@ }, "frame": { "x": 0, - "y": 26, + "y": 169, "w": 22, "h": 23 } @@ -444,14 +339,35 @@ "h": 23 }, "frame": { - "x": 49, - "y": 24, + "x": 0, + "y": 192, "w": 22, "h": 23 } }, { - "filename": "never_melt_ice", + "filename": "dubious_disc", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 19 + }, + "frame": { + "x": 0, + "y": 215, + "w": 22, + "h": 19 + } + }, + { + "filename": "healing_charm", "rotated": false, "trimmed": true, "sourceSize": { @@ -461,18 +377,18 @@ "spriteSourceSize": { "x": 5, "y": 5, - "w": 22, - "h": 23 + "w": 23, + "h": 22 }, "frame": { - "x": 71, - "y": 24, - "w": 22, - "h": 23 + "x": 195, + "y": 0, + "w": 23, + "h": 22 } }, { - "filename": "reaper_cloth", + "filename": "calcium", "rotated": false, "trimmed": true, "sourceSize": { @@ -480,18 +396,81 @@ "h": 32 }, "spriteSourceSize": { - "x": 5, + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 218, + "y": 0, + "w": 16, + "h": 24 + } + }, + { + "filename": "carbos", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 24, + "y": 26, + "w": 16, + "h": 24 + } + }, + { + "filename": "rare_candy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, "y": 5, - "w": 22, + "w": 23, "h": 23 }, "frame": { - "x": 93, + "x": 40, "y": 24, - "w": 22, + "w": 23, "h": 23 } }, + { + "filename": "elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 24, + "y": 50, + "w": 18, + "h": 24 + } + }, { "filename": "oval_charm", "rotated": false, @@ -507,8 +486,8 @@ "h": 24 }, "frame": { - "x": 22, - "y": 47, + "x": 23, + "y": 74, "w": 21, "h": 24 } @@ -528,12 +507,54 @@ "h": 24 }, "frame": { - "x": 0, - "y": 49, + "x": 23, + "y": 98, "w": 21, "h": 24 } }, + { + "filename": "never_melt_ice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 22, + "y": 122, + "w": 22, + "h": 23 + } + }, + { + "filename": "reaper_cloth", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 22, + "y": 145, + "w": 22, + "h": 23 + } + }, { "filename": "charcoal", "rotated": false, @@ -549,8 +570,29 @@ "h": 22 }, "frame": { - "x": 43, - "y": 47, + "x": 22, + "y": 168, + "w": 22, + "h": 22 + } + }, + { + "filename": "dire_hit", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 22, + "y": 190, "w": 22, "h": 22 } @@ -570,197 +612,8 @@ "h": 22 }, "frame": { - "x": 65, - "y": 47, - "w": 22, - "h": 22 - } - }, - { - "filename": "ice_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 87, - "y": 47, - "w": 22, - "h": 22 - } - }, - { - "filename": "magmarizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 109, - "y": 47, - "w": 22, - "h": 22 - } - }, - { - "filename": "protector", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 131, - "y": 47, - "w": 22, - "h": 22 - } - }, - { - "filename": "calcium", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 153, - "y": 47, - "w": 16, - "h": 24 - } - }, - { - "filename": "thunder_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 169, - "y": 68, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_bug", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 191, - "y": 69, - "w": 22, - "h": 22 - } - }, - { - "filename": "carbos", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 213, - "y": 83, - "w": 16, - "h": 24 - } - }, - { - "filename": "tm_dark", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 43, - "y": 69, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_dragon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 21, - "y": 71, + "x": 22, + "y": 212, "w": 22, "h": 22 } @@ -780,810 +633,12 @@ "h": 23 }, "frame": { - "x": 0, - "y": 73, + "x": 42, + "y": 47, "w": 21, "h": 23 } }, - { - "filename": "tm_electric", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 65, - "y": 69, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_fairy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 87, - "y": 69, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_fighting", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 109, - "y": 69, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_fire", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 131, - "y": 69, - "w": 22, - "h": 22 - } - }, - { - "filename": "hp_up", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 153, - "y": 71, - "w": 16, - "h": 24 - } - }, - { - "filename": "tm_flying", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 169, - "y": 90, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_ghost", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 191, - "y": 91, - "w": 22, - "h": 22 - } - }, - { - "filename": "iron", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 213, - "y": 107, - "w": 16, - "h": 24 - } - }, - { - "filename": "tm_grass", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 43, - "y": 91, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_ground", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 21, - "y": 93, - "w": 22, - "h": 22 - } - }, - { - "filename": "leaf_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 0, - "y": 96, - "w": 21, - "h": 23 - } - }, - { - "filename": "tm_ice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 65, - "y": 91, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_normal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 87, - "y": 91, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_poison", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 109, - "y": 91, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_psychic", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 131, - "y": 91, - "w": 22, - "h": 22 - } - }, - { - "filename": "pp_max", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 153, - "y": 95, - "w": 16, - "h": 24 - } - }, - { - "filename": "tm_rock", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 169, - "y": 112, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_steel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 191, - "y": 113, - "w": 22, - "h": 22 - } - }, - { - "filename": "pp_up", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 213, - "y": 131, - "w": 16, - "h": 24 - } - }, - { - "filename": "tm_water", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 43, - "y": 113, - "w": 22, - "h": 22 - } - }, - { - "filename": "water_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 21, - "y": 115, - "w": 22, - "h": 22 - } - }, - { - "filename": "sharp_beak", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 0, - "y": 119, - "w": 21, - "h": 23 - } - }, - { - "filename": "moon_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 65, - "y": 113, - "w": 23, - "h": 21 - } - }, - { - "filename": "sacred_ash", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 88, - "y": 113, - "w": 24, - "h": 20 - } - }, - { - "filename": "soft_sand", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 112, - "y": 113, - "w": 24, - "h": 20 - } - }, - { - "filename": "hyper_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 136, - "y": 113, - "w": 17, - "h": 23 - } - }, - { - "filename": "protein", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 153, - "y": 119, - "w": 16, - "h": 24 - } - }, - { - "filename": "deep_sea_tooth", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 169, - "y": 134, - "w": 22, - "h": 21 - } - }, - { - "filename": "mystic_water", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 20, - "h": 23 - }, - "frame": { - "x": 191, - "y": 135, - "w": 20, - "h": 23 - } - }, - { - "filename": "elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 211, - "y": 155, - "w": 18, - "h": 24 - } - }, - { - "filename": "binding_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 23, - "h": 20 - }, - "frame": { - "x": 88, - "y": 133, - "w": 23, - "h": 20 - } - }, - { - "filename": "shell_bell", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 23, - "h": 20 - }, - "frame": { - "x": 65, - "y": 134, - "w": 23, - "h": 20 - } - }, - { - "filename": "dusk_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 43, - "y": 135, - "w": 21, - "h": 21 - } - }, - { - "filename": "poison_barb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 21, - "y": 137, - "w": 21, - "h": 21 - } - }, - { - "filename": "shiny_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 0, - "y": 142, - "w": 21, - "h": 21 - } - }, - { - "filename": "zoom_lens", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 111, - "y": 133, - "w": 21, - "h": 21 - } - }, - { - "filename": "deep_sea_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 20 - }, - "frame": { - "x": 88, - "y": 153, - "w": 22, - "h": 20 - } - }, - { - "filename": "choice_specs", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 24, - "h": 18 - }, - "frame": { - "x": 64, - "y": 154, - "w": 24, - "h": 18 - } - }, { "filename": "ether", "rotated": false, @@ -1599,8 +654,8 @@ "h": 24 }, "frame": { - "x": 42, - "y": 156, + "x": 44, + "y": 70, "w": 18, "h": 24 } @@ -1620,8 +675,8 @@ "h": 24 }, "frame": { - "x": 21, - "y": 158, + "x": 44, + "y": 94, "w": 18, "h": 24 } @@ -1641,33 +696,12 @@ "h": 24 }, "frame": { - "x": 0, - "y": 163, + "x": 44, + "y": 118, "w": 18, "h": 24 } }, - { - "filename": "dragon_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 24, - "h": 18 - }, - "frame": { - "x": 60, - "y": 172, - "w": 24, - "h": 18 - } - }, { "filename": "max_ether", "rotated": false, @@ -1683,8 +717,8 @@ "h": 24 }, "frame": { - "x": 39, - "y": 180, + "x": 44, + "y": 142, "w": 18, "h": 24 } @@ -1704,14 +738,161 @@ "h": 24 }, "frame": { - "x": 18, - "y": 182, + "x": 44, + "y": 166, "w": 18, "h": 24 } }, { - "filename": "potion", + "filename": "leaf_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 21, + "h": 23 + }, + "frame": { + "x": 44, + "y": 190, + "w": 21, + "h": 23 + } + }, + { + "filename": "moon_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 23, + "h": 21 + }, + "frame": { + "x": 44, + "y": 213, + "w": 23, + "h": 21 + } + }, + { + "filename": "hp_up", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 63, + "y": 24, + "w": 16, + "h": 24 + } + }, + { + "filename": "guard_spec", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 79, + "y": 23, + "w": 22, + "h": 22 + } + }, + { + "filename": "ice_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 101, + "y": 23, + "w": 22, + "h": 22 + } + }, + { + "filename": "magmarizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 123, + "y": 23, + "w": 22, + "h": 22 + } + }, + { + "filename": "protector", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 145, + "y": 23, + "w": 22, + "h": 22 + } + }, + { + "filename": "hyper_potion", "rotated": false, "trimmed": true, "sourceSize": { @@ -1725,12 +906,306 @@ "h": 23 }, "frame": { - "x": 0, - "y": 187, + "x": 63, + "y": 48, "w": 17, "h": 23 } }, + { + "filename": "sacred_ash", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 24, + "h": 20 + }, + "frame": { + "x": 80, + "y": 45, + "w": 24, + "h": 20 + } + }, + { + "filename": "soft_sand", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 24, + "h": 20 + }, + "frame": { + "x": 104, + "y": 45, + "w": 24, + "h": 20 + } + }, + { + "filename": "binding_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 23, + "h": 20 + }, + "frame": { + "x": 128, + "y": 45, + "w": 23, + "h": 20 + } + }, + { + "filename": "mystic_water", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 20, + "h": 23 + }, + "frame": { + "x": 62, + "y": 71, + "w": 20, + "h": 23 + } + }, + { + "filename": "sharp_beak", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 21, + "h": 23 + }, + "frame": { + "x": 62, + "y": 94, + "w": 21, + "h": 23 + } + }, + { + "filename": "thunder_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 62, + "y": 117, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_bug", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 62, + "y": 139, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_dark", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 62, + "y": 161, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_dragon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 82, + "y": 65, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_electric", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 104, + "y": 65, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_fairy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 126, + "y": 65, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_fighting", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 83, + "y": 87, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_fire", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 105, + "y": 87, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_flying", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 127, + "y": 87, + "w": 22, + "h": 22 + } + }, { "filename": "dawn_stone", "rotated": false, @@ -1746,35 +1221,14 @@ "h": 21 }, "frame": { - "x": 132, - "y": 136, + "x": 151, + "y": 45, "w": 20, "h": 21 } }, { - "filename": "super_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 152, - "y": 143, - "w": 17, - "h": 23 - } - }, - { - "filename": "dubious_disc", + "filename": "deep_sea_tooth", "rotated": false, "trimmed": true, "sourceSize": { @@ -1783,15 +1237,288 @@ }, "spriteSourceSize": { "x": 5, - "y": 7, + "y": 6, "w": 22, - "h": 19 + "h": 21 }, "frame": { - "x": 169, - "y": 155, + "x": 148, + "y": 66, "w": 22, - "h": 19 + "h": 21 + } + }, + { + "filename": "tm_ghost", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 149, + "y": 87, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_grass", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 84, + "y": 109, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_ground", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 84, + "y": 131, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_ice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 106, + "y": 109, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_normal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 84, + "y": 153, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_poison", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 106, + "y": 131, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_psychic", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 128, + "y": 109, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_rock", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 106, + "y": 153, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_steel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 128, + "y": 131, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_water", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 128, + "y": 153, + "w": 22, + "h": 22 + } + }, + { + "filename": "water_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 150, + "y": 109, + "w": 22, + "h": 22 + } + }, + { + "filename": "x_accuracy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 150, + "y": 131, + "w": 22, + "h": 22 + } + }, + { + "filename": "x_attack", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 150, + "y": 153, + "w": 22, + "h": 22 } }, { @@ -1809,14 +1536,14 @@ "h": 22 }, "frame": { - "x": 191, - "y": 158, + "x": 65, + "y": 183, "w": 19, "h": 22 } }, { - "filename": "spell_tag", + "filename": "x_defense", "rotated": false, "trimmed": true, "sourceSize": { @@ -1824,16 +1551,100 @@ "h": 32 }, "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 19, - "h": 21 + "x": 5, + "y": 5, + "w": 22, + "h": 22 }, "frame": { - "x": 210, - "y": 179, - "w": 19, - "h": 21 + "x": 84, + "y": 175, + "w": 22, + "h": 22 + } + }, + { + "filename": "x_sp_atk", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 106, + "y": 175, + "w": 22, + "h": 22 + } + }, + { + "filename": "x_sp_def", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 128, + "y": 175, + "w": 22, + "h": 22 + } + }, + { + "filename": "x_speed", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 150, + "y": 175, + "w": 22, + "h": 22 + } + }, + { + "filename": "choice_specs", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 24, + "h": 18 + }, + "frame": { + "x": 84, + "y": 197, + "w": 24, + "h": 18 } }, { @@ -1851,12 +1662,348 @@ "h": 19 }, "frame": { - "x": 110, - "y": 154, + "x": 67, + "y": 215, "w": 22, "h": 19 } }, + { + "filename": "razor_claw", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 89, + "y": 215, + "w": 20, + "h": 19 + } + }, + { + "filename": "dragon_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 24, + "h": 18 + }, + "frame": { + "x": 108, + "y": 197, + "w": 24, + "h": 18 + } + }, + { + "filename": "miracle_seed", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 19, + "h": 19 + }, + "frame": { + "x": 109, + "y": 215, + "w": 19, + "h": 19 + } + }, + { + "filename": "oval_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 19 + }, + "frame": { + "x": 128, + "y": 215, + "w": 18, + "h": 19 + } + }, + { + "filename": "black_glasses", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 132, + "y": 197, + "w": 23, + "h": 17 + } + }, + { + "filename": "shell_bell", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 23, + "h": 20 + }, + "frame": { + "x": 146, + "y": 214, + "w": 23, + "h": 20 + } + }, + { + "filename": "everstone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 17 + }, + "frame": { + "x": 155, + "y": 197, + "w": 20, + "h": 17 + } + }, + { + "filename": "deep_sea_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 169, + "y": 214, + "w": 22, + "h": 20 + } + }, + { + "filename": "metronome", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 17, + "h": 22 + }, + "frame": { + "x": 167, + "y": 23, + "w": 17, + "h": 22 + } + }, + { + "filename": "dusk_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 184, + "y": 22, + "w": 21, + "h": 21 + } + }, + { + "filename": "full_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 15, + "h": 23 + }, + "frame": { + "x": 171, + "y": 45, + "w": 15, + "h": 23 + } + }, + { + "filename": "iron", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 186, + "y": 43, + "w": 16, + "h": 24 + } + }, + { + "filename": "wise_glasses", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 170, + "y": 68, + "w": 23, + "h": 17 + } + }, + { + "filename": "poison_barb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 171, + "y": 85, + "w": 21, + "h": 21 + } + }, + { + "filename": "shiny_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 172, + "y": 106, + "w": 21, + "h": 21 + } + }, + { + "filename": "zoom_lens", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 172, + "y": 127, + "w": 21, + "h": 21 + } + }, { "filename": "gb", "rotated": false, @@ -1872,33 +2019,12 @@ "h": 20 }, "frame": { - "x": 132, - "y": 157, + "x": 172, + "y": 148, "w": 20, "h": 20 } }, - { - "filename": "zinc", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 152, - "y": 166, - "w": 16, - "h": 24 - } - }, { "filename": "magnet", "rotated": false, @@ -1914,14 +2040,14 @@ "h": 20 }, "frame": { - "x": 168, - "y": 174, + "x": 172, + "y": 168, "w": 20, "h": 20 } }, { - "filename": "mb", + "filename": "potion", "rotated": false, "trimmed": true, "sourceSize": { @@ -1929,20 +2055,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 + "x": 8, + "y": 5, + "w": 17, + "h": 23 }, "frame": { - "x": 188, - "y": 180, - "w": 20, - "h": 20 + "x": 175, + "y": 188, + "w": 17, + "h": 23 } }, { - "filename": "pb", + "filename": "super_potion", "rotated": false, "trimmed": true, "sourceSize": { @@ -1950,20 +2076,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 + "x": 8, + "y": 5, + "w": 17, + "h": 23 }, "frame": { - "x": 84, - "y": 173, - "w": 20, - "h": 20 + "x": 191, + "y": 211, + "w": 17, + "h": 23 } }, { - "filename": "pb_gold", + "filename": "revive", "rotated": false, "trimmed": true, "sourceSize": { @@ -1971,20 +2097,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 + "x": 10, + "y": 8, + "w": 12, + "h": 17 }, "frame": { - "x": 57, - "y": 190, - "w": 20, - "h": 20 + "x": 205, + "y": 22, + "w": 12, + "h": 17 } }, { - "filename": "ub", + "filename": "golden_egg", "rotated": false, "trimmed": true, "sourceSize": { @@ -1992,15 +2118,15 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, + "x": 7, "y": 6, - "w": 20, + "w": 17, "h": 20 }, "frame": { - "x": 36, - "y": 204, - "w": 20, + "x": 217, + "y": 24, + "w": 17, "h": 20 } }, @@ -2019,117 +2145,12 @@ "h": 20 }, "frame": { - "x": 17, - "y": 206, + "x": 193, + "y": 67, "w": 19, "h": 20 } }, - { - "filename": "black_glasses", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 104, - "y": 173, - "w": 23, - "h": 17 - } - }, - { - "filename": "wise_glasses", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 127, - "y": 177, - "w": 23, - "h": 17 - } - }, - { - "filename": "metronome", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 150, - "y": 190, - "w": 17, - "h": 22 - } - }, - { - "filename": "razor_claw", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 - }, - "frame": { - "x": 167, - "y": 194, - "w": 20, - "h": 19 - } - }, - { - "filename": "miracle_seed", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 19, - "h": 19 - }, - "frame": { - "x": 104, - "y": 190, - "w": 19, - "h": 19 - } - }, { "filename": "silver_powder", "rotated": false, @@ -2145,8 +2166,8 @@ "h": 15 }, "frame": { - "x": 123, - "y": 194, + "x": 192, + "y": 87, "w": 24, "h": 15 } @@ -2166,14 +2187,14 @@ "h": 20 }, "frame": { - "x": 77, - "y": 193, + "x": 216, + "y": 44, "w": 18, "h": 20 } }, { - "filename": "oval_stone", + "filename": "mb", "rotated": false, "trimmed": true, "sourceSize": { @@ -2181,36 +2202,57 @@ "h": 32 }, "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 19 - }, - "frame": { - "x": 56, - "y": 210, - "w": 18, - "h": 19 - } - }, - { - "filename": "golden_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, + "x": 6, "y": 6, - "w": 17, + "w": 20, "h": 20 }, "frame": { - "x": 95, - "y": 209, - "w": 17, + "x": 193, + "y": 102, + "w": 20, + "h": 20 + } + }, + { + "filename": "pb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 193, + "y": 122, + "w": 20, + "h": 20 + } + }, + { + "filename": "pb_gold", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 212, + "y": 64, + "w": 20, "h": 20 } }, @@ -2229,14 +2271,56 @@ "h": 20 }, "frame": { - "x": 112, - "y": 209, + "x": 216, + "y": 84, "w": 17, "h": 20 } }, { - "filename": "everstone", + "filename": "pp_max", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 213, + "y": 104, + "w": 16, + "h": 24 + } + }, + { + "filename": "pp_up", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 213, + "y": 128, + "w": 16, + "h": 24 + } + }, + { + "filename": "ub", "rotated": false, "trimmed": true, "sourceSize": { @@ -2245,15 +2329,99 @@ }, "spriteSourceSize": { "x": 6, - "y": 8, + "y": 6, "w": 20, - "h": 17 + "h": 20 }, "frame": { - "x": 129, - "y": 209, + "x": 193, + "y": 142, "w": 20, - "h": 17 + "h": 20 + } + }, + { + "filename": "protein", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 192, + "y": 162, + "w": 16, + "h": 24 + } + }, + { + "filename": "zinc", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 192, + "y": 186, + "w": 16, + "h": 24 + } + }, + { + "filename": "spell_tag", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 19, + "h": 21 + }, + "frame": { + "x": 208, + "y": 162, + "w": 19, + "h": 21 + } + }, + { + "filename": "prism_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 8, + "w": 15, + "h": 15 + }, + "frame": { + "x": 208, + "y": 183, + "w": 15, + "h": 15 } } ] @@ -2262,6 +2430,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ca7cdcfb7349d9ec8808e68c4d81012a:b87049b08a6be17ff53c8bfbe63513db:110e074689c9edd2c54833ce2e4d9270$" + "smartupdate": "$TexturePacker:SmartUpdate:b7cd9da26f45d03f815f0dd3e58a0e20:36ec8d239bc31067ead6e048a333cd97:110e074689c9edd2c54833ce2e4d9270$" } } diff --git a/public/images/items.png b/public/images/items.png index 8c5750cd0bbe1cdaf10aa37f88a097beba693527..05408871b2946bcc3fd565f8dde793ae1fe94d34 100644 GIT binary patch literal 38565 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 literal 34585 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�Nk8 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 Hu0mjfpx2Yg diff --git a/public/images/items/dire_hit.png b/public/images/items/dire_hit.png new file mode 100644 index 0000000000000000000000000000000000000000..5917fd02d9901845acbca0ed13536877e7aa9461 GIT binary patch literal 335 zcmV-V0kHmwP) z%MF7t5JWkq3|iorR?P*p`m zMGmU#de+Dee{|g@vKb-#HTD5+nucH`3w-Kt7AmdAsqmp|EL1e)YCsp60ms$=F&w|u zfQt!2t;`D;@obyTKC&9J+ydIfgAK)C5ocU1&m~AM(WUl2$zZ-m4`Y)N&gv;JnNPw>f z&>utDc0G8Gvey;PHcgyoU=4+HJJJBp30DJptj2K8HQxo?E$%NJ1;zoWd+C2Qk@YJm hhGqZkDk}PGy#cg_t5ozUQ?&p9002ovPDHLkV1k~#i%0+f literal 0 HcmV?d00001 diff --git a/public/images/items/guard_spec.png b/public/images/items/guard_spec.png new file mode 100644 index 0000000000000000000000000000000000000000..3efc9448404f127dd037dc9be0be56eba0ec6780 GIT binary patch literal 329 zcmV-P0k-~$P) zI}U>|5JWkO&%+UNgtT0Rk}@UNahsAdR{)K}pkZYtk-WHwJkkndEZ*$;16|kD)a0NL z!m3dnK2GB)su>|XF7bdv&viMBRDs{)kV2)^xD_>{RdfiVPg3ed(nDKelh zv{22MW_5fK{8aw^nlr(^WMUsvoO!MS%$DWX%(eXJcZ1u~f6JUET=u>~2&Vz`TPWME z2Tv}0UEyrg#AOB;3g>n_GT+Y$R|9&iS~%yL-vaIy_m7SOZ2;{{{R^_N>c3r0 bO@FNoByEi65U&wR00000NkvXXu0mjf5GITJ literal 0 HcmV?d00001 diff --git a/public/images/items/x_accuracy.png b/public/images/items/x_accuracy.png new file mode 100644 index 0000000000000000000000000000000000000000..d119a75f1bbac343b0c1bd739206989f690c09d4 GIT binary patch literal 331 zcmV-R0kr;!P) zJr06E5QRAkSMVwxfh%woOG-;iTaRFAYe{Koi+P)TV0x zRaJo6ww*kR!-vE07R8JJA8+FfPa2=Iks|PGe@Wr;YHSKWbwdglhC&VaA`|d&z9&Eq z*KaovVgjfhDzM_XKTQ3uOY@Dmr?I+^$yEmQXMq%MLSS8WUu~)qYT#4mxe1K{%oM1t zb+XEUKQM=S#+dc-tKeRKu1hB96Pz)tGheCz*;0Pb+{>^2FnC`2Z<%8vWbZo!I0n?8 zLurQ|JWJX83a5>U%?uC@XFFnmb0XA$AFDZ>x#nHKZV7+sI4}=E!%P3GiK1UYIjs0+ dS5?(t>jighzl;YS9PI!A002ovPDHLkV1m*}iwXb$ literal 0 HcmV?d00001 diff --git a/public/images/items/x_attack.png b/public/images/items/x_attack.png new file mode 100644 index 0000000000000000000000000000000000000000..36c76da9486a6069257bdcb952744324be8e4d8a GIT binary patch literal 333 zcmV-T0kZyyP) zy$ypf5QQ1VE3gJ*WQCL|S%H!=W!A_Dv?*O?1(Ijwp~nd&NIqOde$olYIDGHUKhQK) zRaFiOAlF<1{Vsr1)5j6oJS7l0v1`I23+Aol~f2$kl)@G60|BEdeYX zztwYCNPFzPC;tF z*GZNEeV~PE#x$$rv*22OUbjrJ4{(mj&U~u^%$DWX%(eXJcZ1u~|H_;uT=u>~2&Vz` zTPWME2hUdas}=rf)5Kv07z*chqye52t_Jj2wQ$Zg-v!()?k^n$+5ptO^m|Pd{R* zJr06E5QRAk*YFA)!z)-?TG~=lT6ztSKx;|q6)+F;k>`e}3Bwjw5Ia4sYA;EwUK_-uJ@{m+r$j8_5Dco?hYdYHSKW>~B-JFcfOQ7ny+9?lA#U zxPH5V5EDT4P=OUqa~XHL^EBUxdm5|zm|SH*e-=pLCIr@1_tmBo|@1Yz)XSK zS|_Uv_ybd@XN*}NzY6Z<=elHqKEWBYI`gFpkS*o+%)R{T4}+(r|CTu>LiWBxfMY=Y zDU^2T!LyXTuW;I!*vtUoaJC}`I4434__3P8nQPt!?3VDCjsw#WG`#e`n#lSUl)|!q db`=% zI}U>|5JWkO&%+UN1fM4*C1tKcNt@EwAR40~!^-(cEH02oTH#=aH@p5o*EKaYIVgm% zXjF#}!+jUkj1ZpEyunvJHzQTx(-d>4v>Kzr+~wd{gYhSoG86Ap`g`KnOJfFs|rFn^kc&@GWy|0%Hh%PeGs8$sq&!KnvB3 zX?8z;_9;KFB@?^{IL92$yi@^Z%kpdHTK=`q32saOD|4D~+4~A1oCa{;LfLjbcuLvp z3TK-pPBXwzIJYAW@SJcppvS6(bFTR=;BGnLrPF^5K;29KuZgN(K^9j1v#Y7;(s}_C WE4-{);)(SD0000 z%MF7t5JV}3x_qRC98&^U%Akdm!8J#YZUHhDV@*~liR8tH$Rn+AjKiBQo_8kfR{aZI72Ay)&s$N+pS&jhe={8j@l zCJ4nt0Y(hB`xZh-^G)S@sLJa;O%@rzp8-Os34n3MeY9B>R|B6iwGIyY#=BsQMLTVbwpo cnwtJvJG+CbHt;@WZU6uP07*qoM6N<$f;**+4FCWD literal 0 HcmV?d00001 diff --git a/public/images/items/x_speed.png b/public/images/items/x_speed.png new file mode 100644 index 0000000000000000000000000000000000000000..cbd1747142f05eb6b02d8602883209142e932f5c GIT binary patch literal 325 zcmV-L0lNN)P) zI}U>|5JWi&=ivxB0_RCdNtvrqrlsT>31jV`VPz$eyts%w(kjHZ{ASl5=(?t+rU3PQ z|I(-qzfaRCsu>~txorm=TKAxlD)4bxQmC{Vm%?xJoI*uIp$2r50r;@8dpQ29fe;gf zVp4z+1128FwB8i^Fc$qZS!5t(y@L>HVl^Q8SIa!yz^BZ;35+3_OEB0zDKelFdZ=bh zvpT*Aek#BH=1j0HnXoa%ndd6NY*~KIT+5I4Ft{)Mx6ElGl&N zJDkrnahU;z!g(Bz%G literal 0 HcmV?d00001 diff --git a/src/battle-phases.ts b/src/battle-phases.ts index 5becd815c..7ababcdd3 100644 --- a/src/battle-phases.ts +++ b/src/battle-phases.ts @@ -5,18 +5,18 @@ import { allMoves, applyMoveAttrs, BypassSleepAttr, ChargeAttr, ConditionalMoveA import { Mode } from './ui/ui'; import { Command } from "./ui/command-ui-handler"; import { Stat } from "./pokemon-stat"; -import { ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, HitHealModifier } from "./modifier"; +import { ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, HitHealModifier, TempBattleStatBoosterModifier } from "./modifier"; import PartyUiHandler, { PartyOption, PartyUiMode } from "./ui/party-ui-handler"; import { doPokeballBounceAnim, getPokeballAtlasKey, getPokeballCatchMultiplier, getPokeballTintColor, PokeballType } from "./pokeball"; import { CommonAnim, CommonBattleAnim, MoveAnim, initMoveAnim, loadMoveAnimAssets } from "./battle-anims"; -import { StatusEffect, getStatusEffectActivationText, getStatusEffectHealText, getStatusEffectObtainText, getStatusEffectOverlapText } from "./status-effect"; +import { StatusEffect, getStatusEffectActivationText, getStatusEffectCatchRateMultiplier, getStatusEffectHealText, getStatusEffectObtainText, getStatusEffectOverlapText } from "./status-effect"; import { SummaryUiMode } from "./ui/summary-ui-handler"; import EvolutionSceneHandler from "./ui/evolution-scene-handler"; import { EvolutionPhase } from "./evolution-phase"; import { BattlePhase } from "./battle-phase"; import { BattleStat, getBattleStatLevelChangeDescription, getBattleStatName } from "./battle-stat"; import { Biome, biomeLinks } from "./biome"; -import { ModifierTypeOption, PokemonModifierType, PokemonMoveModifierType, getModifierTypeOptionsForWave, regenerateModifierPoolThresholds } from "./modifier-type"; +import { ModifierTypeOption, PokemonModifierType, PokemonMoveModifierType, TempBattleStat, getModifierTypeOptionsForWave, regenerateModifierPoolThresholds } from "./modifier-type"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; import { BattleTagLapseType, BattleTagType, HideSpriteTag as HiddenTag } from "./battle-tag"; import { getPokemonMessage } from "./messages"; @@ -103,6 +103,7 @@ export class EncounterPhase extends BattlePhase { end() { if (this.scene.getEnemyPokemon().shiny) this.scene.unshiftPhase(new ShinySparklePhase(this.scene, false)); + // TODO: Remove //this.scene.unshiftPhase(new SelectModifierPhase(this.scene)); @@ -531,6 +532,8 @@ export class TurnEndPhase extends BattlePhase { } start() { + super.start(); + const playerPokemon = this.scene.getPlayerPokemon(); const enemyPokemon = this.scene.getEnemyPokemon(); @@ -548,6 +551,24 @@ export class TurnEndPhase extends BattlePhase { } } +export class BattleEndPhase extends BattlePhase { + constructor(scene: BattleScene) { + super(scene); + } + + start() { + super.start(); + + const tempBattleStatBoosterModifiers = this.scene.getModifiers(TempBattleStatBoosterModifier) as TempBattleStatBoosterModifier[]; + for (let m of tempBattleStatBoosterModifiers) { + if (!m.lapse()) + this.scene.removeModifier(m); + } + + this.scene.updateModifiers().then(() => this.end()); + } +} + export abstract class PokemonPhase extends BattlePhase { protected player: boolean; @@ -805,14 +826,16 @@ abstract class MoveEffectPhase extends PokemonPhase { } if (this.move.getMove().category !== MoveCategory.STATUS) { - const userAccuracyLevel = this.getUserPokemon().summonData.battleStats[BattleStat.ACC]; - const targetEvasionLevel = this.getTargetPokemon().summonData.battleStats[BattleStat.EVA]; + const userAccuracyLevel = new Utils.IntegerHolder(this.getUserPokemon().summonData.battleStats[BattleStat.ACC]); + const targetEvasionLevel = new Utils.IntegerHolder(this.getTargetPokemon().summonData.battleStats[BattleStat.EVA]); + if (this.getUserPokemon().isPlayer()) + this.scene.applyModifiers(TempBattleStatBoosterModifier, TempBattleStat.ACC, userAccuracyLevel); const rand = Utils.randInt(100, 1); let accuracyMultiplier = 1; - if (userAccuracyLevel !== targetEvasionLevel) { - accuracyMultiplier = userAccuracyLevel > targetEvasionLevel - ? (3 + Math.min(userAccuracyLevel - targetEvasionLevel, 6)) / 3 - : 3 / (3 + Math.min(targetEvasionLevel - userAccuracyLevel, 6)); + if (userAccuracyLevel.value !== targetEvasionLevel.value) { + accuracyMultiplier = userAccuracyLevel.value > targetEvasionLevel.value + ? (3 + Math.min(userAccuracyLevel.value - targetEvasionLevel.value, 6)) / 3 + : 3 / (3 + Math.min(targetEvasionLevel.value - userAccuracyLevel.value, 6)); } return rand <= this.move.getMove().accuracy * accuracyMultiplier; } @@ -1172,7 +1195,7 @@ export class VictoryPhase extends PokemonPhase { const participantIds = this.scene.currentBattle.playerParticipantIds; const party = this.scene.getParty(); - const expShareModifier = this.scene.getModifier(ExpShareModifier) as ExpShareModifier; + const expShareModifier = this.scene.findModifier(m => m instanceof ExpShareModifier) as ExpShareModifier; const expValue = this.scene.getEnemyPokemon().getExpValue(); for (let pm = 0; pm < party.length; pm++) { const pokemon = party[pm]; @@ -1192,6 +1215,8 @@ export class VictoryPhase extends PokemonPhase { this.scene.unshiftPhase(new ExpPhase(this.scene, pm, expValue * expMultiplier)); } } + + this.scene.pushPhase(new BattleEndPhase(this.scene)); this.scene.pushPhase(new SelectModifierPhase(this.scene)); this.scene.newBattle(); @@ -1434,7 +1459,7 @@ export class AttemptCapturePhase extends BattlePhase { const _2h = 2 * pokemon.hp; const catchRate = pokemon.species.catchRate; const pokeballMultiplier = getPokeballCatchMultiplier(this.pokeballType); - const statusMultiplier = 1; + const statusMultiplier = pokemon.status ? getStatusEffectCatchRateMultiplier(pokemon.status.effect) : 1; const x = Math.round((((_3m - _2h) * catchRate * pokeballMultiplier) / _3m) * statusMultiplier); const y = Math.round(65536 / Math.sqrt(Math.sqrt(255 / x))); diff --git a/src/battle-scene.ts b/src/battle-scene.ts index f1e3c1d39..acadfbca2 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -645,8 +645,18 @@ export default class BattleScene extends Phaser.Scene { }); } - getModifier(modifierType: { new(...args: any[]): Modifier }): Modifier { - return this.modifiers.find(m => m instanceof modifierType); + removeModifier(modifier: PersistentModifier): boolean { + const modifierIndex = this.modifiers.indexOf(modifier); + if (modifierIndex > -1) { + this.modifiers.splice(modifierIndex, 1); + return true; + } + + return false; + } + + getModifiers(modifierType: { new(...args: any[]): Modifier }): Modifier[] { + return this.modifiers.filter(m => m instanceof modifierType); } findModifier(modifierFilter: ModifierPredicate): Modifier { diff --git a/src/modifier-type.ts b/src/modifier-type.ts index 8fcca0016..133fa8aa1 100644 --- a/src/modifier-type.ts +++ b/src/modifier-type.ts @@ -1,3 +1,4 @@ +import { BattleStat, getBattleStatName } from './battle-stat'; import * as Modifiers from './modifier'; import { AttackMove, Moves, allMoves } from './move'; import { PokeballType, getPokeballName } from './pokeball'; @@ -25,13 +26,15 @@ export class ModifierType { public name: string; public description: string; public iconImage: string; + public group: string; public tier: ModifierTier; private newModifierFunc: NewModifierFunc; - constructor(name: string, description: string, newModifierFunc: NewModifierFunc, iconImage?: string) { + constructor(name: string, description: string, newModifierFunc: NewModifierFunc, iconImage?: string, group?: string,) { this.name = name; this.description = description; this.iconImage = iconImage || name?.replace(/[ \-]/g, '_')?.toLowerCase(); + this.group = group || ''; this.newModifierFunc = newModifierFunc; } @@ -46,15 +49,15 @@ export class ModifierType { class AddPokeballModifierType extends ModifierType { constructor(pokeballType: PokeballType, count: integer, iconImage?: string) { - super(`${count}x ${getPokeballName(pokeballType)}`, `Receive ${getPokeballName(pokeballType)} x${count}`, (_type, _args) => new Modifiers.AddPokeballModifier(this, pokeballType, count), iconImage); + super(`${count}x ${getPokeballName(pokeballType)}`, `Receive ${getPokeballName(pokeballType)} x${count}`, (_type, _args) => new Modifiers.AddPokeballModifier(this, pokeballType, count), iconImage, 'pb'); } } export class PokemonModifierType extends ModifierType { public selectFilter: PokemonSelectFilter; - constructor(name: string, description: string, newModifierFunc: NewModifierFunc, selectFilter?: PokemonSelectFilter, iconImage?: string) { - super(name, description, newModifierFunc, iconImage); + constructor(name: string, description: string, newModifierFunc: NewModifierFunc, selectFilter?: PokemonSelectFilter, iconImage?: string, group?: string) { + super(name, description, newModifierFunc, iconImage, group); this.selectFilter = selectFilter; } @@ -64,14 +67,14 @@ export class PokemonHpRestoreModifierType extends PokemonModifierType { protected restorePoints: integer; protected percent: boolean; - constructor(name: string, restorePoints: integer, percent?: boolean, newModifierFunc?: NewModifierFunc, selectFilter?: PokemonSelectFilter, iconImage?: string) { + constructor(name: string, restorePoints: integer, percent?: boolean, newModifierFunc?: NewModifierFunc, selectFilter?: PokemonSelectFilter, iconImage?: string, group?: string) { super(name, `Restore ${restorePoints}${percent ? '%' : ''} HP for one POKéMON`, newModifierFunc || ((_type, args) => new Modifiers.PokemonHpRestoreModifier(this, (args[0] as PlayerPokemon).id, this.restorePoints, this.percent, false)), selectFilter || ((pokemon: PlayerPokemon) => { if (!pokemon.hp || pokemon.hp >= pokemon.getMaxHp()) return PartyUiHandler.NoEffectMessage; return null; - }), iconImage); + }), iconImage, group || 'potion'); this.restorePoints = restorePoints; this.percent = !!percent; @@ -85,7 +88,7 @@ export class PokemonReviveModifierType extends PokemonHpRestoreModifierType { if (pokemon.hp) return PartyUiHandler.NoEffectMessage; return null; - }), iconImage); + }), iconImage, 'revive'); this.description = `Revive one POKéMON and restore ${restorePercent}% HP`; this.selectFilter = (pokemon: PlayerPokemon) => { @@ -99,8 +102,9 @@ export class PokemonReviveModifierType extends PokemonHpRestoreModifierType { export abstract class PokemonMoveModifierType extends PokemonModifierType { public moveSelectFilter: PokemonMoveSelectFilter; - constructor(name: string, description: string, newModifierFunc: NewModifierFunc, selectFilter?: PokemonSelectFilter, moveSelectFilter?: PokemonMoveSelectFilter, iconImage?: string) { - super(name, description, newModifierFunc, selectFilter, iconImage); + constructor(name: string, description: string, newModifierFunc: NewModifierFunc, selectFilter?: PokemonSelectFilter, moveSelectFilter?: PokemonMoveSelectFilter, + iconImage?: string, group?: string) { + super(name, description, newModifierFunc, selectFilter, iconImage, group); this.moveSelectFilter = moveSelectFilter; } @@ -117,7 +121,7 @@ export class PokemonPpRestoreModifierType extends PokemonMoveModifierType { if (!pokemonMove.ppUsed) return PartyUiHandler.NoEffectMessage; return null; - }, iconImage); + }, iconImage, 'ether'); this.restorePoints = this.restorePoints; } @@ -132,12 +136,60 @@ export class PokemonAllMovePpRestoreModifierType extends PokemonModifierType { if (!pokemon.moveset.filter(m => m.ppUsed).length) return PartyUiHandler.NoEffectMessage; return null; - }, iconImage); + }, iconImage, 'elixir'); this.restorePoints = this.restorePoints; } } +export enum TempBattleStat { + ATK, + DEF, + SPATK, + SPDEF, + SPD, + ACC, + CRIT +} + +function getTempBattleStatName(tempBattleStat: TempBattleStat) { + if (tempBattleStat === TempBattleStat.CRIT) + return 'critical-hit ratio'; + return getBattleStatName(tempBattleStat as integer as BattleStat); +} + +function getTempBattleStatBoosterItemName(tempBattleStat: TempBattleStat) { + switch (tempBattleStat) { + case TempBattleStat.ATK: + return 'X Attack'; + case TempBattleStat.DEF: + return 'X Defense'; + case TempBattleStat.SPATK: + return 'X Sp. Atk'; + case TempBattleStat.SPDEF: + return 'X Sp. Def'; + case TempBattleStat.SPD: + return 'X Speed'; + case TempBattleStat.ACC: + return 'X Accuracy'; + case TempBattleStat.CRIT: + return 'Dire Hit'; + } +} + +export class TempBattleStatBoosterModifierType extends ModifierType { + public tempBattleStat: TempBattleStat; + + constructor(tempBattleStat: TempBattleStat) { + super(Utils.toPokemonUpperCase(getTempBattleStatBoosterItemName(tempBattleStat)), + `Increases the ${getTempBattleStatName(tempBattleStat)} of all party members by 1 stage for 5 battles`, + (_type, _args) => new Modifiers.TempBattleStatBoosterModifier(this, this.tempBattleStat), + getTempBattleStatBoosterItemName(tempBattleStat).replace(/\./g, '').replace(/[ ]/g, '_').toLowerCase()); + + this.tempBattleStat = tempBattleStat; + } +} + function getAttackTypeBoosterItemName(type: Type) { switch (type) { case Type.NORMAL: @@ -184,7 +236,7 @@ export class AttackTypeBoosterModifierType extends PokemonModifierType { public boostPercent: integer; constructor(moveType: Type, boostPercent: integer) { - super(getAttackTypeBoosterItemName(moveType), `Inceases the power of a POKéMON's ${Type[moveType]}-type moves by 20%`, + super(Utils.toPokemonUpperCase(getAttackTypeBoosterItemName(moveType)), `Inceases the power of a POKéMON's ${Type[moveType]}-type moves by 20%`, (_type, args) => new Modifiers.AttackTypeBoosterModifier(this, (args[0] as PlayerPokemon).id, moveType, boostPercent), null, `${getAttackTypeBoosterItemName(moveType).replace(/[ \-]/g, '_').toLowerCase()}`); @@ -200,6 +252,23 @@ export class PokemonLevelIncrementModifierType extends PokemonModifierType { } } +function getBaseStatBoosterItemName(stat: Stat) { + switch (stat) { + case Stat.HP: + return 'HP-UP'; + case Stat.ATK: + return 'PROTEIN'; + case Stat.DEF: + return 'IRON'; + case Stat.SPATK: + return 'CALCIUM'; + case Stat.SPDEF: + return 'ZINC'; + case Stat.SPD: + return 'CARBOS'; + } +} + export class PokemonBaseStatBoosterModifierType extends PokemonModifierType { private stat: Stat; @@ -237,7 +306,7 @@ export class TmModifierType extends PokemonModifierType { if (pokemon.compatibleTms.indexOf(moveId) === -1 || pokemon.moveset.filter(m => m?.moveId === moveId).length) return PartyUiHandler.NoEffectMessage; return null; - }, `tm_${Type[allMoves[moveId - 1].type].toLowerCase()}`); + }, `tm_${Type[allMoves[moveId - 1].type].toLowerCase()}`, 'tm'); this.moveId = moveId; } @@ -297,10 +366,8 @@ class ModifierTypeGenerator extends ModifierType { generateType(party: PlayerPokemon[]) { const ret = this.genTypeFunc(party); - if (ret) { - console.log(ret); + if (ret) ret.setTier(this.tier); - } return ret; } } @@ -374,25 +441,43 @@ class WeightedModifierType { } } +class WeightedModifierTypeGroup { + public modifierTypes: WeightedModifierType[]; + + constructor(...modifierTypes: WeightedModifierType[]) { + this.modifierTypes = modifierTypes; + } + + setTier(tier: ModifierTier) { + for (let modifierType of this.modifierTypes) + modifierType.setTier(tier); + } +} + const modifierPool = { [ModifierTier.COMMON]: [ - new WeightedModifierType(new AddPokeballModifierType(PokeballType.POKEBALL, 5, 'pb'), 2), + new WeightedModifierType(new AddPokeballModifierType(PokeballType.POKEBALL, 5, 'pb'), 6), + new WeightedModifierType(new PokemonLevelIncrementModifierType('RARE CANDY'), 2), new WeightedModifierType(new PokemonHpRestoreModifierType('POTION', 20), (party: PlayerPokemon[]) => { const thresholdPartyMemberCount = party.filter(p => p.getInverseHp() >= 10 || p.getHpRatio() <= 0.875).length; - return thresholdPartyMemberCount; + return thresholdPartyMemberCount * 3; }), new WeightedModifierType(new PokemonHpRestoreModifierType('SUPER POTION', 50), (party: PlayerPokemon[]) => { const thresholdPartyMemberCount = party.filter(p => p.getInverseHp() >= 25 || p.getHpRatio() <= 0.75).length; - return Math.ceil(thresholdPartyMemberCount / 3); - }), - new WeightedModifierType(new PokemonPpRestoreModifierType('ETHER', 10), (party: PlayerPokemon[]) => { - const thresholdPartyMemberCount = party.filter(p => p.moveset.filter(m => m.ppUsed >= 5).length).length; return thresholdPartyMemberCount; }), + new WeightedModifierType(new PokemonPpRestoreModifierType('ETHER', 10), (party: PlayerPokemon[]) => { + const thresholdPartyMemberCount = party.filter(p => p.hp && p.moveset.filter(m => (m.getMove().pp - m.ppUsed) <= 5).length).length; + return thresholdPartyMemberCount * 3; + }), new WeightedModifierType(new PokemonPpRestoreModifierType('MAX ETHER', -1), (party: PlayerPokemon[]) => { - const thresholdPartyMemberCount = party.filter(p => p.moveset.filter(m => m.ppUsed > 10).length).length; - return Math.ceil(thresholdPartyMemberCount / 3); - }) + const thresholdPartyMemberCount = party.filter(p => p.hp && p.moveset.filter(m => (m.getMove().pp - m.ppUsed) <= 5).length).length; + return thresholdPartyMemberCount; + }), + new WeightedModifierType(new ModifierTypeGenerator((party: PlayerPokemon[]) => { + const randTempBattleStat = Utils.randInt(7) as TempBattleStat; + return new TempBattleStatBoosterModifierType(randTempBattleStat); + }), 4) ].map(m => { m.setTier(ModifierTier.COMMON); return m; }), [ModifierTier.GREAT]: [ new WeightedModifierType(new AddPokeballModifierType(PokeballType.GREAT_BALL, 5, 'gb'), 12), @@ -416,11 +501,11 @@ const modifierPool = { return Math.ceil(thresholdPartyMemberCount / 1.5); }), new WeightedModifierType(new PokemonAllMovePpRestoreModifierType('ELIXIR', 10), (party: PlayerPokemon[]) => { - const thresholdPartyMemberCount = party.filter(p => p.moveset.filter(m => m.ppUsed >= 5).length).length; + const thresholdPartyMemberCount = party.filter(p => p.hp && p.moveset.filter(m => (m.getMove().pp - m.ppUsed) <= 5).length).length; return thresholdPartyMemberCount * 2; }), new WeightedModifierType(new PokemonAllMovePpRestoreModifierType('MAX ELIXIR', -1), (party: PlayerPokemon[]) => { - const thresholdPartyMemberCount = party.filter(p => p.moveset.filter(m => m.ppUsed > 10).length).length; + const thresholdPartyMemberCount = party.filter(p => p.hp && p.moveset.filter(m => (m.getMove().pp - m.ppUsed) <= 5).length).length; return Math.ceil(thresholdPartyMemberCount / 1.5); }), new WeightedModifierType(new ModifierTypeGenerator((party: PlayerPokemon[]) => { @@ -429,13 +514,11 @@ const modifierPool = { const randTmIndex = Utils.randInt(uniqueCompatibleTms.length); return new TmModifierType(uniqueCompatibleTms[randTmIndex]); }), 4), - new WeightedModifierType(new PokemonLevelIncrementModifierType('RARE CANDY'), 4), - new WeightedModifierType(new PokemonBaseStatBoosterModifierType('HP-UP', Stat.HP), 1), - new WeightedModifierType(new PokemonBaseStatBoosterModifierType('PROTEIN', Stat.ATK), 1), - new WeightedModifierType(new PokemonBaseStatBoosterModifierType('IRON', Stat.DEF), 1), - new WeightedModifierType(new PokemonBaseStatBoosterModifierType('CALCIUM', Stat.SPATK), 1), - new WeightedModifierType(new PokemonBaseStatBoosterModifierType('ZINC', Stat.SPDEF), 1), - new WeightedModifierType(new PokemonBaseStatBoosterModifierType('CARBOS', Stat.SPD), 1) + new WeightedModifierType(new ModifierType('EXP. SHARE', 'All POKéMON in your party gain an additional 10% of a battle\'s EXP. Points', (type, _args) => new Modifiers.ExpShareModifier(type), 'exp_share'), 2), + new WeightedModifierType(new ModifierTypeGenerator((party: PlayerPokemon[]) => { + const randStat = Utils.randInt(6) as Stat; + return new PokemonBaseStatBoosterModifierType(getBaseStatBoosterItemName(randStat), randStat); + }), 4) ].map(m => { m.setTier(ModifierTier.GREAT); return m; }), [ModifierTier.ULTRA]: [ new WeightedModifierType(new AddPokeballModifierType(PokeballType.ULTRA_BALL, 5, 'ub'), 8), @@ -444,9 +527,8 @@ const modifierPool = { new ModifierType('OVAL CHARM', 'For every X (no. of party members) items in a POKéMON\'s held item stack, give one to each other party member', (type, _args) => new Modifiers.PartyShareModifier(type), 'oval_charm'), new ModifierType('HEALING CHARM', 'Doubles the effectiveness of HP restoring moves and items (excludes revives)', (type, _args) => new Modifiers.HealingBoosterModifier(type, 2), 'healing_charm'), - new WeightedModifierType(new PokemonModifierType('SHELL BELL', 'Heals 1/8 of a POKéMON\'s dealt damage', (type, args) => new Modifiers.HitHealModifier(type, (args[0] as PlayerPokemon).id)), 8), - new WeightedModifierType(new ExpBoosterModifierType('LUCKY EGG', 25), 4), - new WeightedModifierType(new ModifierType('EXP. SHARE', 'All POKéMON in your party gain an additional 10% of a battle\'s EXP. Points', (type, _args) => new Modifiers.ExpShareModifier(type), 'exp_share'), 3) + new WeightedModifierType(new PokemonModifierType('SHELL BELL', 'Heals 1/8 of a POKéMON\'s dealt damage', (type, args) => new Modifiers.HitHealModifier(type, (args[0] as PlayerPokemon).id)), 2), + new WeightedModifierType(new ExpBoosterModifierType('LUCKY EGG', 25), 4) ].map(m => { m.setTier(ModifierTier.ULTRA); return m; }), [ModifierTier.MASTER]: [ new AddPokeballModifierType(PokeballType.MASTER_BALL, 1, 'mb'), @@ -486,13 +568,21 @@ export function regenerateModifierPoolThresholds(party: PlayerPokemon[]) { }, 0); return [ t, Object.fromEntries(thresholds) ] }))); - console.log(modifierPoolThresholds) } export function getModifierTypeOptionsForWave(waveIndex: integer, count: integer, party: PlayerPokemon[]): ModifierTypeOption[] { if (waveIndex % 10 === 0) return modifierPool[ModifierTier.LUXURY].map(m => new ModifierTypeOption(m, false)); - return new Array(count).fill(0).map(() => getNewModifierTypeOption(party)); + const options: ModifierTypeOption[] = []; + const retryCount = Math.min(count * 5, 50); + new Array(count).fill(0).map(() => { + let candidate = getNewModifierTypeOption(party); + let r = 0; + while (options.length && ++r < retryCount && options.filter(o => o.type.name === candidate.type.name || o.type.group === candidate.type.group).length) + candidate = getNewModifierTypeOption(party, candidate.type.tier, candidate.upgraded); + options.push(candidate); + }); + return options; } function getNewModifierTypeOption(party: PlayerPokemon[], tier?: ModifierTier, upgrade?: boolean): ModifierTypeOption { diff --git a/src/modifier.ts b/src/modifier.ts index 20a8d1f88..7a992e82c 100644 --- a/src/modifier.ts +++ b/src/modifier.ts @@ -131,7 +131,7 @@ export abstract class PersistentModifier extends Modifier { const maxStrokeColor = '#984038'; if (virtual) { - const virtualText = addTextObject(scene, 1 * 11 + 16, 12, `+${this.virtualStackCount.toString()}`, TextStyle.PARTY, { fontSize: '66px', color: !isStackMax ? '#40c8f8' : maxColor }); + const virtualText = addTextObject(scene, 27, 12, `+${this.virtualStackCount.toString()}`, TextStyle.PARTY, { fontSize: '66px', color: !isStackMax ? '#40c8f8' : maxColor }); virtualText.setShadow(0, 0, null); virtualText.setStroke(!isStackMax ? '#006090' : maxStrokeColor, 16) virtualText.setOrigin(1, 0); @@ -181,6 +181,50 @@ export class AddPokeballModifier extends ConsumableModifier { } } +export class TempBattleStatBoosterModifier extends PersistentModifier { + private tempBattleStat: ModifierTypes.TempBattleStat; + private battlesLeft: integer; + + constructor(type: ModifierTypes.TempBattleStatBoosterModifierType, tempBattleStat: ModifierTypes.TempBattleStat) { + super(type); + + this.tempBattleStat = tempBattleStat; + this.battlesLeft = 5; + } + + clone(): TempBattleStatBoosterModifier { + return new TempBattleStatBoosterModifier(this.type as ModifierTypes.TempBattleStatBoosterModifierType, this.tempBattleStat); + } + + apply(args: any[]): boolean { + const tempBattleStat = args[0] as ModifierTypes.TempBattleStat; + + if (tempBattleStat === this.tempBattleStat) { + const statLevel = args[1] as Utils.IntegerHolder; + statLevel.value = Math.min(statLevel.value + 1, 6); + return true; + } + + return false; + } + + lapse(): boolean { + return !!--this.battlesLeft; + } + + getIcon(scene: BattleScene): Phaser.GameObjects.Container { + const container = super.getIcon(scene); + + const battleCountText = addTextObject(scene, 27, 0, this.battlesLeft.toString(), TextStyle.PARTY, { fontSize: '66px', color: '#f89890' }); + battleCountText.setShadow(0, 0, null); + battleCountText.setStroke('#984038', 16) + battleCountText.setOrigin(1, 0); + container.add(battleCountText); + + return container; + } +} + export abstract class PokemonHeldItemModifier extends PersistentModifier { public pokemonId: integer; @@ -387,7 +431,6 @@ export class PokemonPpRestoreModifier extends ConsumablePokemonMoveModifier { apply(args: any[]): boolean { const pokemon = args[0] as Pokemon; const move = pokemon.moveset[this.moveIndex]; - console.log(move.ppUsed, this.restorePoints, this.restorePoints >= -1 ? Math.max(move.ppUsed - this.restorePoints, 0) : 0); move.ppUsed = this.restorePoints >= -1 ? Math.max(move.ppUsed - this.restorePoints, 0) : 0; return true; diff --git a/src/move.ts b/src/move.ts index 233e33a95..de9e23058 100644 --- a/src/move.ts +++ b/src/move.ts @@ -1,7 +1,7 @@ import { ChargeAnim, MoveChargeAnim, initMoveAnim, loadMoveAnimAssets } from "./battle-anims"; import { DamagePhase, EnemyMovePhase, MessagePhase, ObtainStatusEffectPhase, PlayerMovePhase, PokemonHealPhase, StatChangePhase } from "./battle-phases"; import { BattleStat } from "./battle-stat"; -import { BattleTagType, ProtectedTag } from "./battle-tag"; +import { BattleTagType } from "./battle-tag"; import { getPokemonMessage } from "./messages"; import Pokemon, { EnemyPokemon, MoveResult, PlayerPokemon, PokemonMove, TurnMove } from "./pokemon"; import { StatusEffect } from "./status-effect"; @@ -684,8 +684,7 @@ export class MoveHitEffectAttr extends MoveAttr { export class HighCritAttr extends MoveAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const critChance = args[0] as Utils.IntegerHolder; - critChance.value /= 2; + (args[0] as Utils.IntegerHolder).value++; return true; } diff --git a/src/pokemon.ts b/src/pokemon.ts index 4ab358e6d..b2417c40a 100644 --- a/src/pokemon.ts +++ b/src/pokemon.ts @@ -8,7 +8,7 @@ import * as Utils from './utils'; import { Type, getTypeDamageMultiplier } from './type'; import { getLevelTotalExp } from './exp'; import { Stat } from './pokemon-stat'; -import { AttackTypeBoosterModifier, PokemonBaseStatModifier as PokemonBaseStatBoosterModifier, ShinyRateBoosterModifier } from './modifier'; +import { AttackTypeBoosterModifier, PokemonBaseStatModifier as PokemonBaseStatBoosterModifier, ShinyRateBoosterModifier, TempBattleStatBoosterModifier } from './modifier'; import { PokeballType } from './pokeball'; import { Gender } from './gender'; import { initMoveAnim, loadMoveAnimAssets } from './battle-anims'; @@ -20,6 +20,7 @@ import { BattleStat } from './battle-stat'; import { BattleTag, BattleTagLapseType, BattleTagType, getBattleTag } from './battle-tag'; import { Species } from './species'; import { WeatherType } from './weather'; +import { TempBattleStat } from './modifier-type'; export default abstract class Pokemon extends Phaser.GameObjects.Container { public id: integer; @@ -263,8 +264,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { getBattleStat(stat: Stat): integer { if (stat === Stat.HP) return this.stats[Stat.HP]; - const statLevel = this.summonData.battleStats[(stat - 1) as BattleStat]; - let ret = this.stats[stat] * (Math.max(2, 2 + statLevel) / Math.max(2, 2 - statLevel)); + const battleStat = (stat - 1) as BattleStat; + const statLevel = new Utils.IntegerHolder(this.summonData.battleStats[battleStat]); + if (this.isPlayer()) + this.scene.applyModifiers(TempBattleStatBoosterModifier, battleStat as integer as TempBattleStat, statLevel); + let ret = this.stats[stat] * (Math.max(2, 2 + statLevel.value) / Math.max(2, 2 - statLevel.value)); if (stat === Stat.SPDEF && this.scene.arena.weather?.weatherType === WeatherType.SANDSTORM) ret *= 1.5; if (this.status && this.status.effect === StatusEffect.PARALYSIS) @@ -461,9 +465,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const weatherTypeMultiplier = this.scene.arena.getAttackTypeMultiplier(move.type); applyMoveAttrs(VariablePowerAttr, source, this, move, power); this.scene.applyModifiers(AttackTypeBoosterModifier, source, power); - const critChance = new Utils.IntegerHolder(16); - applyMoveAttrs(HighCritAttr, source, this, move, critChance); - let isCritical = Utils.randInt(critChance.value) === 0; + const critLevel = new Utils.IntegerHolder(0); + applyMoveAttrs(HighCritAttr, source, this, move, critLevel); + if (source.isPlayer()) + this.scene.applyModifiers(TempBattleStatBoosterModifier, TempBattleStat.CRIT, critLevel); + const critChance = Math.ceil(16 / Math.pow(2, critLevel.value)); + let isCritical = critChance === 1 || !Utils.randInt(critChance); const sourceAtk = source.getBattleStat(isPhysical ? Stat.ATK : Stat.SPATK); const targetDef = this.getBattleStat(isPhysical ? Stat.DEF : Stat.SPDEF); const stabMultiplier = source.species.type1 === move.type || (source.species.type2 !== null && source.species.type2 === move.type) ? 1.5 : 1; diff --git a/src/status-effect.ts b/src/status-effect.ts index a829b9f7a..96d6109f8 100644 --- a/src/status-effect.ts +++ b/src/status-effect.ts @@ -103,4 +103,19 @@ export function getStatusEffectHealText(statusEffect: StatusEffect) { } return ''; +} + +export function getStatusEffectCatchRateMultiplier(statusEffect: StatusEffect) { + switch (statusEffect) { + case StatusEffect.POISON: + case StatusEffect.TOXIC: + case StatusEffect.PARALYSIS: + case StatusEffect.BURN: + return 1.5; + case StatusEffect.SLEEP: + case StatusEffect.FREEZE: + return 2.5; + } + + return 1; } \ No newline at end of file