From accd4bce1951661d38af40a7f39eae5f226642cd Mon Sep 17 00:00:00 2001 From: lnguy Date: Tue, 12 Dec 2023 13:39:08 +0100 Subject: [PATCH] Fix HTML stuff and add embed for move --- src/json_movelist/azucena.json | 2312 ---------------------------- src/json_movelist/bryan.json | 2158 -------------------------- src/main.py | 42 +- src/module/character.py | 6 +- src/module/embed.py | 112 +- src/module/json_movelist_reader.py | 15 - src/module/util.py | 21 + src/resources/character_list.json | 4 +- src/wavu/wavu_reader.py | 22 +- 9 files changed, 85 insertions(+), 4607 deletions(-) delete mode 100644 src/json_movelist/azucena.json delete mode 100644 src/json_movelist/bryan.json create mode 100644 src/module/util.py diff --git a/src/json_movelist/azucena.json b/src/json_movelist/azucena.json deleted file mode 100644 index 41def11..0000000 --- a/src/json_movelist/azucena.json +++ /dev/null @@ -1,2312 +0,0 @@ -[ - { - "damage": "5", - "gif": "", - "id": "Azucena-1", - "input": "1", - "name": "Jab", - "notes": "", - "on_block": "+1", - "on_ch": "", - "on_hit": "+8", - "recovery": "r17", - "startup": "i10", - "target": "h" - }, - { - "damage": "5,15", - "gif": "", - "id": "Azucena-1,1", - "input": "1,1", - "name": "High Mountain Combo", - "notes": "\n* Combo from 1st hit\n* Transition to LIB on hit only", - "on_block": "-9~-8", - "on_ch": "", - "on_hit": "+8", - "recovery": "r28", - "startup": ",i24~25", - "target": "h,m" - }, - { - "damage": "20", - "gif": "", - "id": "Azucena-1+2", - "input": "1+2", - "name": "Boomerang Scythe", - "notes": "Balcony break", - "on_block": "-8", - "on_ch": "+56a", - "on_hit": "+13g", - "recovery": "r30", - "startup": "i15", - "target": "h" - }, - { - "damage": "5,23", - "gif": "", - "id": "Azucena-1,2", - "input": "1,2", - "name": "High Roast Combo", - "notes": "\n* Combo from 1st hit with 4f delay\n* \nBalcony break", - "on_block": "-14~-13", - "on_ch": "", - "on_hit": "+8~+9", - "recovery": "r34", - "startup": ",i20~21", - "target": "h,h" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-1+2+3+4", - "input": "1+2+3+4", - "name": "Ki Charge", - "notes": "\n* Cannot block for 5 seconds\n* CH state for 5 seconds", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "" - }, - { - "damage": "54", - "gif": "", - "id": "Azucena-1+2+3+4,3+4", - "input": "1+2+3+4,3+4", - "name": "Black Ivory Talon", - "notes": "Deals 45 damage without Ki Charge", - "on_block": "", - "on_ch": "", - "on_hit": "-8", - "recovery": "r57", - "startup": "i75", - "target": "m!" - }, - { - "damage": "5,23", - "gif": "", - "id": "Azucena-1,2~B", - "input": "1,2~B", - "name": "", - "notes": "\n* Combo from 1st hit with 4f delay\n* \nBalcony break", - "on_block": "-14~-13", - "on_ch": "", - "on_hit": "+8~+9", - "recovery": "r34 BT", - "startup": ",i20~21", - "target": "h,h" - }, - { - "damage": "35", - "gif": "", - "id": "Azucena-1+3", - "input": "1+3", - "name": "Amaru Head Squeeze", - "notes": "\n* Throw break 1 or 2", - "on_block": "-3", - "on_ch": "", - "on_hit": "+0d", - "recovery": "r25", - "startup": "i12~14", - "target": "t" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-1+3+4", - "input": "1+3+4", - "name": "Taunt", - "notes": "", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-1+3+4*", - "input": "1+3+4*", - "name": "Shuffle Recital", - "notes": "\n* Regenerates heat\n* Heat meter won't disappear, even if it fully depletes", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "" - }, - { - "damage": "9", - "gif": "", - "id": "Azucena-2", - "input": "2", - "name": "Right Jab", - "notes": "", - "on_block": "+0", - "on_ch": "", - "on_hit": "+9", - "recovery": "r19", - "startup": "i10", - "target": "h" - }, - { - "damage": "9,11", - "gif": "", - "id": "Azucena-2,1", - "input": "2,1", - "name": "", - "notes": "Combo from 1st hit with 4f delay", - "on_block": "-3~-2", - "on_ch": "", - "on_hit": "+7~+8", - "recovery": "r22", - "startup": ",i17~18", - "target": "h,m" - }, - { - "damage": "9,11,21", - "gif": "", - "id": "Azucena-2,1,2", - "input": "2,1,2", - "name": "Andes Mountain Uppercut Combo", - "notes": "\n* \nTornado\n* \nBalcony break\n* Combo from 2nd CH with 5f delay\n* Input can be delayed 10f", - "on_block": "-5~-4", - "on_ch": "", - "on_hit": "+20a (+3)", - "recovery": "r29", - "startup": ",i24~25", - "target": "h,m,h" - }, - { - "damage": "12 (12)", - "gif": "", - "id": "Azucena-2+3", - "input": "2+3", - "name": "Heat Burst", - "notes": "\n* \nHeat Burst", - "on_block": "+1", - "on_ch": "", - "on_hit": "+2c", - "recovery": "", - "startup": "i16", - "target": "m" - }, - { - "damage": "0", - "gif": "", - "id": "Azucena-2+3+4", - "input": "2+3+4", - "name": "Coffee Break", - "notes": "", - "on_block": "", - "on_ch": "", - "on_hit": "-1", - "recovery": "r51", - "startup": "i45", - "target": "h!" - }, - { - "damage": "35", - "gif": "", - "id": "Azucena-2+4", - "input": "2+4", - "name": "El Dorado Neck Snap", - "notes": "\n* Throw break 1 or 2\n* Side switch", - "on_block": "-3", - "on_ch": "", - "on_hit": "+0d", - "recovery": "r25", - "startup": "i12~14", - "target": "t" - }, - { - "damage": "11", - "gif": "", - "id": "Azucena-3", - "input": "3", - "name": "Left Kick", - "notes": "", - "on_block": "-7", - "on_ch": "", - "on_hit": "+4", - "recovery": "r26", - "startup": "i14", - "target": "m" - }, - { - "damage": "11,18", - "gif": "", - "id": "Azucena-3,2", - "input": "3,2", - "name": "Groovy Strike", - "notes": "\n* \nBalcony break\n* Combo from 1st hit with 5f delay\n* Input can be delayed 10f delay", - "on_block": "-12~-11", - "on_ch": "+33d (+25)", - "on_hit": "+6~+7", - "recovery": "r31", - "startup": ",i23~24", - "target": "m,m" - }, - { - "damage": "11", - "gif": "", - "id": "Azucena-3,2~F", - "input": "3,2~F", - "name": "", - "notes": "", - "on_block": "-18", - "on_ch": "", - "on_hit": "-7", - "recovery": "r23 LIB", - "startup": "", - "target": "m" - }, - { - "damage": "11,23", - "gif": "", - "id": "Azucena-3,3", - "input": "3,3", - "name": "Groovy Punalada", - "notes": "\n* \nBalcony break\n* Combo from 1st hit with 6f delay", - "on_block": "-1~+0", - "on_ch": "", - "on_hit": "+43a (-15)", - "recovery": "r30", - "startup": ",i24~25", - "target": "m,h" - }, - { - "damage": "15", - "gif": "", - "id": "Azucena-4", - "input": "4", - "name": "Right Kick", - "notes": "", - "on_block": "-8~-7", - "on_ch": "+8", - "on_hit": "+3~+4", - "recovery": "r26 BT", - "startup": "i12~13", - "target": "h" - }, - { - "damage": "15,11", - "gif": "", - "id": "Azucena-4,1", - "input": "4,1", - "name": "Guapuño", - "notes": "Combo from 1st hit", - "on_block": "-2~-1", - "on_ch": "+6~+7", - "on_hit": "+4~+5", - "recovery": "r20 BT", - "startup": ",i21~22", - "target": "h,h" - }, - { - "damage": "15,17", - "gif": "", - "id": "Azucena-4,3", - "input": "4,3", - "name": "Delfin Patadas", - "notes": "\n* Balcony Break on CH\n* Combo from 1st CH with 8f delay\n* Input can be delayed 12f", - "on_block": "-11~-10", - "on_ch": "+37a", - "on_hit": "+19c~+20c", - "recovery": "r30", - "startup": ",i26~27", - "target": "h,M" - }, - { - "damage": "14", - "gif": "", - "id": "Azucena-b+1", - "input": "b+1", - "name": "", - "notes": "", - "on_block": "-8~-7", - "on_ch": "", - "on_hit": "+3~+4", - "recovery": "r26", - "startup": "i14~15", - "target": "h" - }, - { - "damage": "14,16", - "gif": "", - "id": "Azucena-b+1,1", - "input": "b+1,1", - "name": "", - "notes": "Combo from 1st hit with 6f delay", - "on_block": "+3", - "on_ch": "", - "on_hit": "+8", - "recovery": "r22 LIB", - "startup": ",i23", - "target": "h,h" - }, - { - "damage": "14,16,20", - "gif": "", - "id": "Azucena-b+1,1,2", - "input": "b+1,1,2", - "name": "Double Blend Tempestad", - "notes": "\n* \nBalcony break\n* Combo from 2nd CH with 6f delay\n* Input can be delayed 9f\n* Chip damage on block", - "on_block": "-5~-4", - "on_ch": "", - "on_hit": "+17a (+8)", - "recovery": "r32", - "startup": ",i24~25", - "target": "h,h,h" - }, - { - "damage": "14,16", - "gif": "", - "id": "Azucena-b+1,1,2~B", - "input": "b+1,1,2~B", - "name": "", - "notes": "", - "on_block": "-15", - "on_ch": "", - "on_hit": "-10", - "recovery": "r18 BT", - "startup": "", - "target": "h,h" - }, - { - "damage": "21", - "gif": "", - "id": "Azucena-b+2", - "input": "b+2", - "name": "Mil Nudillo", - "notes": "\n*\nBalcony break\n*\nHoming\n*Chip damage on block", - "on_block": "+2~+3", - "on_ch": "", - "on_hit": "+22a (+13)", - "recovery": "r27", - "startup": "i18~19", - "target": "h" - }, - { - "damage": "21", - "gif": "", - "id": "Azucena-b+3", - "input": "b+3", - "name": "Tacón Plunger", - "notes": "\n*\nHeat Engager\n*\nSpike\n*Chip damage on block", - "on_block": "+4c", - "on_ch": "", - "on_hit": "+8c", - "recovery": "r30", - "startup": "i22", - "target": "m" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-b+3+4", - "input": "b+3+4", - "name": "Hopping Turn", - "notes": "", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "r28 BT", - "startup": "", - "target": "" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-b+3+4*", - "input": "b+3+4*", - "name": "Shuffle Carnival", - "notes": "Regenerates heat", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "r55 BT", - "startup": "", - "target": "" - }, - { - "damage": "10", - "gif": "", - "id": "Azucena-b+4", - "input": "b+4", - "name": "", - "notes": "Knee", - "on_block": "-9~-8", - "on_ch": "", - "on_hit": "+2~+3", - "recovery": "r27", - "startup": "i15~16", - "target": "m" - }, - { - "damage": "10,10", - "gif": "", - "id": "Azucena-b+4,3", - "input": "b+4,3", - "name": "", - "notes": "\n* \nKnee\n* Combo from 1st hit with 6f delay", - "on_block": "-10~-9", - "on_ch": "", - "on_hit": "+4~+5", - "recovery": "r30", - "startup": ",i23~24", - "target": "m,m" - }, - { - "damage": "10,10,16", - "gif": "", - "id": "Azucena-b+4,3,4", - "input": "b+4,3,4", - "name": "", - "notes": "\n* \nKnee\n* Combo from 2nd CH with 10f delay", - "on_block": "-10~-9", - "on_ch": "", - "on_hit": "-2~-1", - "recovery": "r31", - "startup": ",i23~24", - "target": "m,m,m" - }, - { - "damage": "10,10,16,23", - "gif": "", - "id": "Azucena-b+4,3,4,3", - "input": "b+4,3,4,3", - "name": "Seattle Skipper", - "notes": "\n* \nKnee\n* \nBalcony break\n* Combo from 2nd CH with 6f delay\n* Combo from 3rd hit with 2f delay\n* Input can be delayed 6f", - "on_block": "-7~-6", - "on_ch": "", - "on_hit": "+39d (-19)", - "recovery": "r34", - "startup": ",i27~28", - "target": "m,m,m,h" - }, - { - "damage": "50", - "gif": "", - "id": "Azucena-Back throw", - "input": "Back throw", - "name": "Caffeine Abduction", - "notes": "", - "on_block": "", - "on_ch": "", - "on_hit": "+0d", - "recovery": "", - "startup": "", - "target": "t" - }, - { - "damage": "25", - "gif": "", - "id": "Azucena-(Back to wall).b,b,UB", - "input": "(Back to wall).b,b,UB", - "name": "[[Wall Jump Attack]]", - "notes": "Balcony break", - "on_block": "+1~+7", - "on_ch": "", - "on_hit": "+7a (-3)", - "recovery": "r30", - "startup": "i27~33", - "target": "m" - }, - { - "damage": "9", - "gif": "", - "id": "Azucena-BT.1", - "input": "BT.1", - "name": "", - "notes": "", - "on_block": "+0~+1", - "on_ch": "+8~+9", - "on_hit": "+6~+7", - "recovery": "r18 BT", - "startup": "i10~11", - "target": "h" - }, - { - "damage": "17", - "gif": "", - "id": "Azucena-BT.1+2", - "input": "BT.1+2", - "name": "Golpe Affogato", - "notes": "", - "on_block": "-11~-10", - "on_ch": "+58a", - "on_hit": "+3~+4", - "recovery": "r31", - "startup": "i14~15", - "target": "m" - }, - { - "damage": "9,23", - "gif": "", - "id": "Azucena-BT.1,2", - "input": "BT.1,2", - "name": "Mocha Attaque Matari", - "notes": "\n* \nBalcony break\n* Combo from 1st hit with 2f delay\n* Combo from 1st CH with 4f delay\n* Input can be delayed 10f", - "on_block": "-7~-6", - "on_ch": "", - "on_hit": "+19a (+10)", - "recovery": "r30", - "startup": ",i22~23", - "target": "h,h" - }, - { - "damage": "9", - "gif": "", - "id": "Azucena-BT.1,2~F", - "input": "BT.1,2~F", - "name": "", - "notes": "", - "on_block": "-19~-18", - "on_ch": "", - "on_hit": "-13~-12", - "recovery": "r20 LIB", - "startup": "", - "target": "h" - }, - { - "damage": "9,21", - "gif": "", - "id": "Azucena-BT.1,4", - "input": "BT.1,4", - "name": "Mocha Attaque Sidamo", - "notes": "\n* Combo from 1st hit\n* Combo from 1st CH with 2f delay\n* Input can be delayed 10f\n* Will not combo if the kick impacts on i25", - "on_block": "-11~-10", - "on_ch": "+52a", - "on_hit": "+8~+9", - "recovery": "r33", - "startup": ",i24~25", - "target": "h,m" - }, - { - "damage": "15", - "gif": "", - "id": "Azucena-BT.2", - "input": "BT.2", - "name": "", - "notes": "", - "on_block": "-8~-7", - "on_ch": "", - "on_hit": "+3~+4", - "recovery": "r31", - "startup": "i17~18", - "target": "m" - }, - { - "damage": "15,23", - "gif": "", - "id": "Azucena-BT.2,2", - "input": "BT.2&#58;2", - "name": "Qhapaq Ñan", - "notes": "Transitions to attack throw on front hit only", - "on_block": "", - "on_ch": "", - "on_hit": "+0d", - "recovery": "", - "startup": "", - "target": "m,t" - }, - { - "damage": "23", - "gif": "", - "id": "Azucena-BT.3", - "input": "BT.3", - "name": "Calf Reaper", - "notes": "", - "on_block": "-13", - "on_ch": "+14c~+16c", - "on_hit": "+4~+5", - "recovery": "r34", - "startup": "i19~20", - "target": "L" - }, - { - "damage": "23", - "gif": "", - "id": "Azucena-BT.3+4", - "input": "BT.3+4", - "name": "Foo Fighter", - "notes": "Spike", - "on_block": "-5c~-3c", - "on_ch": "", - "on_hit": "+20a", - "recovery": "r28 BT", - "startup": "i27~29", - "target": "M" - }, - { - "damage": "15", - "gif": "", - "id": "Azucena-BT.4", - "input": "BT.4", - "name": "", - "notes": "", - "on_block": "-5~-4", - "on_ch": "", - "on_hit": "+6~+7", - "recovery": "r23 BT", - "startup": "i15~16", - "target": "m" - }, - { - "damage": "15,21", - "gif": "", - "id": "Azucena-BT.4,3", - "input": "BT.4,3", - "name": "Upbeat Patadas", - "notes": "\n* \nTornado\n* \nBalcony break\n* Combo from 1st hit with 6f delay\n* Input can be delayed 10f\n* Only hits grounded up close", - "on_block": "-14~-13", - "on_ch": "", - "on_hit": "+16a (-1)", - "recovery": "r33", - "startup": ",i23~24", - "target": "m,m" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-BT.b+1+2", - "input": "BT.b+1+2", - "name": "Runaway", - "notes": "Parries all mids", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "r55", - "startup": "", - "target": "" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-BT.b+3+4", - "input": "BT.b+3+4", - "name": "Hide Turn", - "notes": "", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "r33 BT", - "startup": "", - "target": "" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-BT.b+3_4", - "input": "BT.b+3_4", - "name": "Shuffle Walk", - "notes": "", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "r33 LIB", - "startup": "", - "target": "" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-BT.f+3+4", - "input": "BT.f+3+4", - "name": "Libertador (Regreso)", - "notes": "", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "r33 LIB", - "startup": "", - "target": "" - }, - { - "damage": "20", - "gif": "", - "id": "Azucena-d+1", - "input": "d+1", - "name": "Hand Drip Hammer", - "notes": "Spike", - "on_block": "-2~-1", - "on_ch": "+45a", - "on_hit": "+4c~+5c", - "recovery": "r30", - "startup": "i20~21", - "target": "m" - }, - { - "damage": "21", - "gif": "", - "id": "Azucena-d+1+2", - "input": "d+1+2", - "name": "UFO Roll", - "notes": "\n* Transition to throw on front hit only\n* Azucena will recieve 18 damage when blocked\n* r41 FC on whiff", - "on_block": "-4", - "on_ch": "", - "on_hit": "+0d", - "recovery": "r41 LIB", - "startup": "i25~26", - "target": "l" - }, - { - "damage": "30", - "gif": "", - "id": "Azucena-d+1+3_d+2+4", - "input": "d+1+3_d+2+4", - "name": "Smell the Coffee", - "notes": "\n* \nHeat Engager\n* Crouch throw", - "on_block": "", - "on_ch": "", - "on_hit": "+0d", - "recovery": "r28", - "startup": "i12~13", - "target": "mt" - }, - { - "damage": "15", - "gif": "", - "id": "Azucena-d+2", - "input": "d+2", - "name": "", - "notes": "", - "on_block": "-9~-8", - "on_ch": "", - "on_hit": "+5~+6", - "recovery": "r29", - "startup": "i18~19", - "target": "m" - }, - { - "damage": "15,20", - "gif": "", - "id": "Azucena-d+2,3", - "input": "d+2,3", - "name": "La Niña Kick Combo", - "notes": "\n* \nBalcony break\n* Combo from 1st hit with 7f delay", - "on_block": "+1~+2", - "on_ch": "", - "on_hit": "+16g~+17g", - "recovery": "r26 LIB", - "startup": ",i24~25", - "target": "m,h" - }, - { - "damage": "10", - "gif": "", - "id": "Azucena-d+3", - "input": "d+3", - "name": "", - "notes": "", - "on_block": "-14", - "on_ch": "", - "on_hit": "-3", - "recovery": "r33", - "startup": "i15", - "target": "L" - }, - { - "damage": "10,14", - "gif": "", - "id": "Azucena-d+3,3", - "input": "d+3,3", - "name": "", - "notes": "\n* Combo from 1st CH with 7f delay\n* Input can be delayed 10f", - "on_block": "-13", - "on_ch": "", - "on_hit": "+1", - "recovery": "r34", - "startup": ",i23", - "target": "L,m" - }, - { - "damage": "10,14,21", - "gif": "", - "id": "Azucena-d+3,3,4", - "input": "d+3,3,4", - "name": "Passionate Kick Combo", - "notes": "\n* \nTornado\n* \nBalcony break\n* Combo from 2nd CH with 10f delay", - "on_block": "-14~-13", - "on_ch": "", - "on_hit": "+15a (-2)", - "recovery": "r34", - "startup": ",i25~26", - "target": "L,m,m" - }, - { - "damage": "13", - "gif": "", - "id": "Azucena-d+4", - "input": "d+4", - "name": "", - "notes": "", - "on_block": "-13~-12", - "on_ch": "", - "on_hit": "-2~-1", - "recovery": "r31", - "startup": "i15~16", - "target": "L" - }, - { - "damage": "13,5", - "gif": "", - "id": "Azucena-d+4,1", - "input": "d+4,1", - "name": "Roast Knuckle Combo", - "notes": "\n* Combo from 1st CH with 2f delay\n* Input can be delayed 10f", - "on_block": "-1~+0", - "on_ch": "", - "on_hit": "+3~+4", - "recovery": "r21", - "startup": ",i27~28", - "target": "L,h" - }, - { - "damage": "13,20", - "gif": "", - "id": "Azucena-d+4,1~2", - "input": "d+4,1~2", - "name": "Full City Roast Knuckle Combo", - "notes": "\n* \nBalcony break\n* Wall crush on hit", - "on_block": "-8~-7", - "on_ch": "", - "on_hit": "+10g~+11g", - "recovery": "r29", - "startup": ",i17~18", - "target": "L,m" - }, - { - "damage": "5", - "gif": "", - "id": "Azucena-db+1", - "input": "db+1", - "name": "Crouch Jab", - "notes": "Can recover standing with F", - "on_block": "-5", - "on_ch": "", - "on_hit": "+6", - "recovery": "r24", - "startup": "i10", - "target": "sl" - }, - { - "damage": "23", - "gif": "", - "id": "Azucena-db+1+2", - "input": "db+1+2", - "name": "Kilimanjaro Uppercut", - "notes": "", - "on_block": "-21~-20", - "on_ch": "", - "on_hit": "+33a (+23)", - "recovery": "r40", - "startup": "i20~21", - "target": "M" - }, - { - "damage": "8", - "gif": "", - "id": "Azucena-db+2", - "input": "db+2", - "name": "Crouch Straight", - "notes": "", - "on_block": "-4", - "on_ch": "", - "on_hit": "+7", - "recovery": "r23", - "startup": "i11", - "target": "sl" - }, - { - "damage": "12", - "gif": "", - "id": "Azucena-db+3", - "input": "db+3", - "name": "", - "notes": "", - "on_block": "-7~-6", - "on_ch": "", - "on_hit": "+4~+5", - "recovery": "r25 BT", - "startup": "i16~17", - "target": "L" - }, - { - "damage": "30", - "gif": "", - "id": "Azucena-db+3+4", - "input": "db+3+4", - "name": "El Cóndor Pasa", - "notes": "Balcony break", - "on_block": "-16~-12", - "on_ch": "", - "on_hit": "+15a (+5)", - "recovery": "r36", - "startup": "i26~30", - "target": "m" - }, - { - "damage": "12,20", - "gif": "", - "id": "Azucena-db+3,4", - "input": "db+3,4", - "name": "Borrasca Kick Combo", - "notes": "\n* \nTornado\n* \nBalcony break\n* Combo from 1st CH", - "on_block": "-13~-12", - "on_ch": "", - "on_hit": "+66a (+50)", - "recovery": "r34", - "startup": ",i24~25", - "target": "L,h" - }, - { - "damage": "17", - "gif": "", - "id": "Azucena-db+4", - "input": "db+4", - "name": "Bitter Low Kick", - "notes": "", - "on_block": "-14", - "on_ch": "+12g", - "on_hit": "-3", - "recovery": "r33", - "startup": ",i19", - "target": "L" - }, - { - "damage": "11", - "gif": "", - "id": "Azucena-df+1", - "input": "df+1", - "name": "Mid Check", - "notes": "", - "on_block": "-3~-2", - "on_ch": "", - "on_hit": "+8~+9", - "recovery": "r21", - "startup": "i13~14", - "target": "m" - }, - { - "damage": "11,17", - "gif": "", - "id": "Azucena-df+1,4", - "input": "df+1,4", - "name": "", - "notes": "\n*Jail from 1st attack with 1f delay\n*Combo from 1st hit with 8f delay", - "on_block": "-7~-6", - "on_ch": "", - "on_hit": "+4~+5", - "recovery": "r25", - "startup": ",i17~18", - "target": "m,h" - }, - { - "damage": "11,17,20", - "gif": "", - "id": "Azucena-df+1,4,1", - "input": "df+1,4,1", - "name": "Grande Combo", - "notes": "\n* \nBalcony break\n* Combo from 2nd CH with 7f delay\n* Combo from 2nd CH with 8f delay", - "on_block": "-5~-4", - "on_ch": "+56a", - "on_hit": "+44d (-14)", - "recovery": "r29", - "startup": ",i22~23", - "target": "m,h,h" - }, - { - "damage": "11,17,23", - "gif": "", - "id": "Azucena-df+1,4,1~2", - "input": "df+1,4,1~2", - "name": "Full Body Grande Combo", - "notes": "Spike", - "on_block": "-10~-9", - "on_ch": "", - "on_hit": "+23d", - "recovery": "r26", - "startup": ",i18~19", - "target": "m,h,M" - }, - { - "damage": "11,17", - "gif": "", - "id": "Azucena-df+1,4,1~F", - "input": "df+1,4,1~F", - "name": "", - "notes": "", - "on_block": "-17~-16", - "on_ch": "", - "on_hit": "-6~-5", - "recovery": "r20 LIB", - "startup": "", - "target": "m,h" - }, - { - "damage": "12", - "gif": "", - "id": "Azucena-df+2", - "input": "df+2", - "name": "Mount Rainier", - "notes": "Launches crouching opponent", - "on_block": "-13~-12", - "on_ch": "", - "on_hit": "+28a (+18)", - "recovery": "r31", - "startup": "i15~16", - "target": "m" - }, - { - "damage": "17", - "gif": "", - "id": "Azucena-df+3", - "input": "df+3", - "name": "Rodilla Shot", - "notes": "Knee", - "on_block": "-5~-4", - "on_ch": "+59a", - "on_hit": "+5~+6", - "recovery": "r29", - "startup": "i17~18", - "target": "m" - }, - { - "damage": "15", - "gif": "", - "id": "Azucena-df+4", - "input": "df+4", - "name": "", - "notes": "", - "on_block": "-7~-6", - "on_ch": "", - "on_hit": "+2~+3", - "recovery": "r27", - "startup": "i16~17", - "target": "m" - }, - { - "damage": "15,23", - "gif": "", - "id": "Azucena-df+4,1", - "input": "df+4,1", - "name": "Blue Mountain Combo", - "notes": "\n* \nTornado\n* \nBalcony break\n* Combo from 1st hit with 6f delay\n* Input can be delayed 10f", - "on_block": "-5~-4", - "on_ch": "", - "on_hit": "+20a (+3)", - "recovery": "r27", - "startup": "i23~24", - "target": "m,h" - }, - { - "damage": "25", - "gif": "", - "id": "Azucena-f+1+2", - "input": "f+1+2", - "name": "Aero Press Pegar", - "notes": "\n*\nHeat Engager\n*\nBalcony break", - "on_block": "-8~-7", - "on_ch": "", - "on_hit": "+41a (-17)", - "recovery": "r32", - "startup": "i16~17", - "target": "h" - }, - { - "damage": "14", - "gif": "", - "id": "Azucena-f+2", - "input": "f+2", - "name": "", - "notes": "", - "on_block": "-10~-9", - "on_ch": "", - "on_hit": "+1~+2", - "recovery": "r28", - "startup": "i17~18", - "target": "h" - }, - { - "damage": "14,17", - "gif": "", - "id": "Azucena-f+2,1", - "input": "f+2,1", - "name": "", - "notes": "\n* Combo from 1st hit with 7f delay\n* Input can be delayed 8f", - "on_block": "-10~-9", - "on_ch": "", - "on_hit": "+5~+6", - "recovery": "r29", - "startup": ",i22~23", - "target": "h,m" - }, - { - "damage": "14,17,17", - "gif": "", - "id": "Azucena-f+2,1,4", - "input": "f+2,1,4", - "name": "Danza Del Cóndor", - "notes": "\n* \nBalcony break\n* Combo from 2nd CH with 10f delay", - "on_block": "-14~-13", - "on_ch": "", - "on_hit": "+19a (+9)", - "recovery": "r35", - "startup": ",i24~25", - "target": "h,m,m" - }, - { - "damage": "15", - "gif": "", - "id": "Azucena-f+3", - "input": "f+3", - "name": "", - "notes": "", - "on_block": "-4", - "on_ch": "", - "on_hit": "+5", - "recovery": "r25 LIB", - "startup": "i18", - "target": "m" - }, - { - "damage": "15,20", - "gif": "", - "id": "Azucena-f+3,2", - "input": "f+3,2", - "name": "Sumatra Back Knuckle", - "notes": "\n*\nBalcony break\n*Combo from 1st hit with 8f delay", - "on_block": "-4~-5", - "on_ch": "", - "on_hit": "+22a", - "recovery": "r25 LIB", - "startup": ",i22~23", - "target": "m,h" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-f+3+4", - "input": "f+3+4", - "name": "Libertador", - "notes": "\n*Parries all high/low attacks\n*Cancel to r20 with DB", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "r28 LIB", - "startup": "", - "target": "" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-f+3+4*", - "input": "f+3+4*", - "name": "Shuffle Jamboree", - "notes": "\n* Regenerates heat\n* Heat meter won't disappear, even if it fully depletes", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "r456 LIB", - "startup": "", - "target": "" - }, - { - "damage": "16", - "gif": "", - "id": "Azucena-f+4", - "input": "f+4", - "name": "", - "notes": "\n*\nHoming", - "on_block": "-8~-7", - "on_ch": "", - "on_hit": "+1~+2", - "recovery": "r28", - "startup": "i17~18", - "target": "m" - }, - { - "damage": "16,21", - "gif": "", - "id": "Azucena-f+4,4", - "input": "f+4,4", - "name": "Tifón Patear", - "notes": "\n*\nBalcony break\n*\nHeat Engager\n*Combo from 1st hit", - "on_block": "-7~-6", - "on_ch": "", - "on_hit": "+19a (+10)", - "recovery": "r30", - "startup": ",i24~25", - "target": "m,h" - }, - { - "damage": "16,23", - "gif": "", - "id": "Azucena-f+4,4~2", - "input": "f+4,4~2", - "name": "Tifón Trueno", - "notes": "\n*\nBalcony break\n*Chip damage on block", - "on_block": "+1~+2", - "on_ch": "", - "on_hit": "+52a", - "recovery": "r26", - "startup": ",i23~24", - "target": "m,h" - }, - { - "damage": "16,24", - "gif": "", - "id": "Azucena-f+4,4~3", - "input": "f+4,4~3", - "name": "Tifón Cañón", - "notes": "Balcony break", - "on_block": "-9~-8", - "on_ch": "+70a (+54)", - "on_hit": "+15a (+6)", - "recovery": "r29", - "startup": ",i21~22", - "target": "m,m" - }, - { - "damage": "16", - "gif": "", - "id": "Azucena-f+4,4~B", - "input": "f+4,4~B", - "name": "", - "notes": "", - "on_block": "-19", - "on_ch": "", - "on_hit": "-10", - "recovery": "r20 BT", - "startup": "", - "target": "m" - }, - { - "damage": "0", - "gif": "", - "id": "Azucena-FC.1+2", - "input": "FC.1+2", - "name": "Ultimate Tackle", - "notes": "\n* Throw break 1+2", - "on_block": "-5", - "on_ch": "", - "on_hit": "+3", - "recovery": "r33", - "startup": "i26", - "target": "t" - }, - { - "damage": "0,25", - "gif": "", - "id": "Azucena-FC.1+2,1+2", - "input": "FC.1+2,1+2", - "name": "Arm Breaker", - "notes": "\n* Throw break 1+2", - "on_block": "-9", - "on_ch": "", - "on_hit": "+1d", - "recovery": "", - "startup": "", - "target": "t,t" - }, - { - "damage": "0,5,5,5,15", - "gif": "", - "id": "Azucena-FC.1+2,2,1,2,1", - "input": "FC.1+2,2,1,2,1", - "name": "Ultimate Punch", - "notes": "\n* Throw break 1 or 2\n* Alternate Input: 1,2,1,2", - "on_block": "", - "on_ch": "", - "on_hit": "+0d", - "recovery": "", - "startup": "", - "target": "t,t" - }, - { - "damage": "5", - "gif": "", - "id": "Azucena-FC.d+1", - "input": "FC.d+1", - "name": "Crouch Jab", - "notes": "Can recover standing with F", - "on_block": "-5", - "on_ch": "", - "on_hit": "+6", - "recovery": "r24", - "startup": "i10", - "target": "sl" - }, - { - "damage": "8", - "gif": "", - "id": "Azucena-FC.d+2", - "input": "FC.d+2", - "name": "Crouch Straight", - "notes": "", - "on_block": "-4", - "on_ch": "", - "on_hit": "+7", - "recovery": "r23", - "startup": "i11", - "target": "sl" - }, - { - "damage": "10", - "gif": "", - "id": "Azucena-FC.d+3", - "input": "FC.d+3", - "name": "Crouch Spin Kick", - "notes": "", - "on_block": "-17", - "on_ch": "", - "on_hit": "-6", - "recovery": "r36 FC", - "startup": "i16", - "target": "L" - }, - { - "damage": "6", - "gif": "", - "id": "Azucena-FC.d+4", - "input": "FC.d+4", - "name": "Crouch Shin Kick", - "notes": "", - "on_block": "-15", - "on_ch": "", - "on_hit": "-4", - "recovery": "r34 FC", - "startup": "i12", - "target": "l" - }, - { - "damage": "6", - "gif": "", - "id": "Azucena-FC.df+3", - "input": "FC.df+3", - "name": "Cosecha Látigo", - "notes": "", - "on_block": "-13~-12", - "on_ch": "+13c~+14c", - "on_hit": "+3c~+4c", - "recovery": "r31 FC", - "startup": "i18~19", - "target": "L" - }, - { - "damage": "20", - "gif": "", - "id": "Azucena-f,F+3", - "input": "f,F+3", - "name": "Luna Llena", - "notes": "Tornado", - "on_block": "-14~-12", - "on_ch": "", - "on_hit": "+35a (+25)", - "recovery": "r37", - "startup": "i15~17", - "target": "M" - }, - { - "damage": "10,18", - "gif": "", - "id": "Azucena-f,F+3+4", - "input": "f,F+3+4", - "name": "Ortiz Molino", - "notes": "\n* \nSpike\n* Chip damage on block\n* Can recover BT with B", - "on_block": "+4~+6", - "on_ch": "", - "on_hit": "+5~+7", - "recovery": "r34 LIB", - "startup": "i21~22 i32~34", - "target": "m,M" - }, - { - "damage": "21", - "gif": "", - "id": "Azucena-f,F+4", - "input": "f,F+4", - "name": "Demitasse Molino", - "notes": "\n* \nSpike\n* Chip damage on block", - "on_block": "+0~+2", - "on_ch": "", - "on_hit": "+13~+15", - "recovery": "r26", - "startup": "i25~27", - "target": "M" - }, - { - "damage": "10", - "gif": "", - "id": "Azucena-f,f,F+3", - "input": "f,f,F+3", - "name": "", - "notes": "Knee", - "on_block": "-9~-5", - "on_ch": "", - "on_hit": "-4~+0", - "recovery": "r30", - "startup": "i15~19", - "target": "m" - }, - { - "damage": "10,10", - "gif": "", - "id": "Azucena-f,f,F+3,2", - "input": "f,f,F+3,2", - "name": "Espresso Agresión", - "notes": "\n* \nBalcony break\n* Jail from 1st attack\n* Combo from 1st hit\n* Chip damage on block", - "on_block": "+5~+7", - "on_ch": "", - "on_hit": "+28a (+2)", - "recovery": "r35", - "startup": ",i10~12", - "target": "m,h" - }, - { - "damage": "15,9,29", - "gif": "", - "id": "Azucena-H.2+3", - "input": "H.2+3", - "name": "Azucena Speciality", - "notes": "\n* \nHeat Smash\n* \nBalcony break\n* Throw on hit", - "on_block": "+6", - "on_ch": "", - "on_hit": "+0a", - "recovery": "", - "startup": "i15~16", - "target": "m,m,t" - }, - { - "damage": "0", - "gif": "", - "id": "Azucena-H.2+3+4", - "input": "H.2+3+4", - "name": "Coffee Break", - "notes": "", - "on_block": "", - "on_ch": "", - "on_hit": "+35a", - "recovery": "r51", - "startup": "i45", - "target": "h!" - }, - { - "damage": "15,15,30", - "gif": "", - "id": "Azucena-H.2+3-Far", - "input": "H.2+3", - "name": "Azucena Speciality (Far)", - "notes": "\n* \nHeat Smash\n* \nSpike", - "on_block": "+6", - "on_ch": "", - "on_hit": "+15a", - "recovery": "r43 LIB", - "startup": "i15~16 i24~25 i53~54", - "target": "m,h,m" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-H.3,2~F", - "input": "H.3,2~F", - "name": "", - "notes": "", - "on_block": "-18", - "on_ch": "", - "on_hit": "-7", - "recovery": "r21 LIB", - "startup": "", - "target": "" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-H.b+1,1,2,F", - "input": "H.b+1,1,2,F", - "name": "Double Blend Tempestad > Nuevo Libertador", - "notes": "\n*Chip damage on block", - "on_block": "+7", - "on_ch": "", - "on_hit": "+54a (+34)", - "recovery": "r38 LIB", - "startup": "", - "target": "" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-H.b+2,F", - "input": "H.b+2,F", - "name": "Mil Nudillo > Nuevo Libertador", - "notes": "Chip damage on block", - "on_block": "+7", - "on_ch": "", - "on_hit": "+54a (+34)", - "recovery": "r38 LIB", - "startup": "", - "target": "" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-H.b+3,F", - "input": "H.b+3,F", - "name": "Tacón Plunger > Heat Dash", - "notes": "", - "on_block": "+5", - "on_ch": "", - "on_hit": "+67a (+50)", - "recovery": "", - "startup": "", - "target": "" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-H.f+1+2,F", - "input": "H.f+1+2,F", - "name": "Aero Press Pegar > Heat Dash", - "notes": "", - "on_block": "+5~+6", - "on_ch": "", - "on_hit": "+43a (+35)", - "recovery": "", - "startup": "", - "target": "" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-H.f+3+4", - "input": "H.f+3+4", - "name": "Libertador Revolución", - "notes": "\n* Parries all high/low attacks\n* Cancel to r20 with DB", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "r26 LIB", - "startup": "", - "target": "" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-H.f+4,4,F", - "input": "H.f+4,4,F", - "name": "Tifón Patear > Heat Dash", - "notes": "", - "on_block": "+5~+6", - "on_ch": "", - "on_hit": "+62a (+42)", - "recovery": "", - "startup": "", - "target": "" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-H.LIB.1,2,F", - "input": "H.LIB.1,2,F", - "name": "Blend Tempestad > Nuevo Libertador", - "notes": "\n*Chip damage on block", - "on_block": "+7", - "on_ch": "", - "on_hit": "+54a (+34)", - "recovery": "r38 LIB", - "startup": "", - "target": "" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-H.LIB.2,F", - "input": "H.LIB.2,F", - "name": "Golpe Cappuccino > Heat Dash", - "notes": "", - "on_block": "+5~+6", - "on_ch": "", - "on_hit": "+36a (+26)", - "recovery": "", - "startup": "", - "target": "" - }, - { - "damage": "27", - "gif": "", - "id": "Azucena-H.LIB.d+3+4", - "input": "H.LIB.d+3+4", - "name": "One Drip Cielo", - "notes": "\n* \nTornado\n* Regenerates heat\n* Restores recoverable health", - "on_block": "-9~-7", - "on_ch": "", - "on_hit": "+58a (+42)", - "recovery": "r44", - "startup": "i16~18", - "target": "m" - }, - { - "damage": "25", - "gif": "", - "id": "Azucena-H.LIB.P (High)", - "input": "H.LIB.P (High)", - "name": "Puño de Fuego Evitacion", - "notes": "\n* Regenerates heat\n* Restores recoverable health", - "on_block": "", - "on_ch": "", - "on_hit": "+32a", - "recovery": "r35", - "startup": "i17~18", - "target": "m" - }, - { - "damage": "20", - "gif": "", - "id": "Azucena-H.LIB.P (Low)", - "input": "H.LIB.P (Low)", - "name": "One Drip Cielo Evitacion", - "notes": "\n* \nTornado\n* Regenerates heat\n* Restores recoverable health", - "on_block": "", - "on_ch": "", - "on_hit": "+58a (+42)", - "recovery": "r44", - "startup": "i16~18", - "target": "m" - }, - { - "damage": "40", - "gif": "", - "id": "Azucena-Left Throw", - "input": "Left throw", - "name": "Urubamba Neck Lock", - "notes": "\n* Throw break 1", - "on_block": "-3", - "on_ch": "", - "on_hit": "-3d", - "recovery": "", - "startup": "", - "target": "t" - }, - { - "damage": "14", - "gif": "", - "id": "Azucena-LIB.1", - "input": "LIB.1", - "name": "", - "notes": "Chip damage on block", - "on_block": "+3", - "on_ch": "", - "on_hit": "+8", - "recovery": "r22 LIB", - "startup": "i13", - "target": "h" - }, - { - "damage": "23", - "gif": "", - "id": "Azucena-LIB.1+2", - "input": "LIB.1+2", - "name": "Rana Barista", - "notes": "\n* \nTornado\n* Cancel to r20 BT with B", - "on_block": "-14~-13", - "on_ch": "", - "on_hit": "+38a (+28)", - "recovery": "r35", - "startup": "i18~19", - "target": "M" - }, - { - "damage": "14,20", - "gif": "", - "id": "Azucena-LIB.1,2", - "input": "LIB.1,2", - "name": "Blend Tempestad", - "notes": "\n* \nBalcony break\n* Combo from 1st hit with 6f delay\n* Input can be delayed 9f\n* Chip damage on block", - "on_block": "-5~-4", - "on_ch": "", - "on_hit": "+17a (+8)", - "recovery": "r32", - "startup": ",i24~25", - "target": "h,h" - }, - { - "damage": "14", - "gif": "", - "id": "Azucena-LIB.1,2~B", - "input": "LIB.1,2~B", - "name": "", - "notes": "", - "on_block": "-15", - "on_ch": "", - "on_hit": "-10", - "recovery": "r18 BT", - "startup": "", - "target": "h" - }, - { - "damage": "18", - "gif": "", - "id": "Azucena-LIB.2", - "input": "LIB.2", - "name": "Golpe Cappuccino", - "notes": "\n*\nHeat Engager\n*\nBalcony break\n*Wall crush on hit", - "on_block": "-8~-7", - "on_ch": "", - "on_hit": "+11g~+12g", - "recovery": "r28", - "startup": "i14~15", - "target": "m" - }, - { - "damage": "15", - "gif": "", - "id": "Azucena-LIB.3", - "input": "LIB.3", - "name": "Acerbic Low Kick", - "notes": "", - "on_block": "-9~-8", - "on_ch": "", - "on_hit": "+2~+3", - "recovery": "r27 BT", - "startup": "i16~17", - "target": "L" - }, - { - "damage": "15,20", - "gif": "", - "id": "Azucena-LIB.3,1", - "input": "LIB.3,1", - "name": "Blend Reganar", - "notes": "\n* \nSpike\n* Combo from 1st CH with 7f delay\n* Input can be delayed 8f", - "on_block": "-10~-9", - "on_ch": "+21d", - "on_hit": "+7c~+8c", - "recovery": "r32 BT", - "startup": ",i22~23", - "target": "L,m" - }, - { - "damage": "25", - "gif": "", - "id": "Azucena-LIB.3+4", - "input": "LIB.3+4", - "name": "El Niño High Kick", - "notes": "\n* \nBalcony break\n* \nHoming\n* Chip damage on block", - "on_block": "-5~-4", - "on_ch": "", - "on_hit": "+32a", - "recovery": "r34", - "startup": "i16~17", - "target": "h" - }, - { - "damage": "14", - "gif": "", - "id": "Azucena-LIB.4", - "input": "LIB.4", - "name": "", - "notes": "", - "on_block": "-6~-5", - "on_ch": "+7a", - "on_hit": "+7~+8", - "recovery": "r27 LIB", - "startup": "i15~16", - "target": "m" - }, - { - "damage": "14,10", - "gif": "", - "id": "Azucena-LIB.4,1", - "input": "LIB.4,1", - "name": "", - "notes": "Combo from 1st hit with 9f delay", - "on_block": "-2~-1", - "on_ch": "+9~+10", - "on_hit": "+4~+5", - "recovery": "r20", - "startup": ",i23~24", - "target": "m,h" - }, - { - "damage": "14,10,23", - "gif": "", - "id": "Azucena-LIB.4,1,2", - "input": "LIB.4,1,2", - "name": "Blend Asaltar", - "notes": "\n* \nTornado\n* \nBalcony break\n* Combo from 2nd CH with 1f delay\n* Input can be delayed 10f", - "on_block": "-10~-9", - "on_ch": "", - "on_hit": "+67a (+51)", - "recovery": "r33", - "startup": ",i28~29", - "target": "m,h,m" - }, - { - "damage": "14,21", - "gif": "", - "id": "Azucena-LIB.4,2", - "input": "LIB.4,2", - "name": "Blend Martillo", - "notes": "\n* \nBalcony break\n* \nSpike\n* Combo from 1st hit with 5f delay", - "on_block": "-13~-12", - "on_ch": "", - "on_hit": "+16a", - "recovery": "r33", - "startup": ",i25~26", - "target": "m,M" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-LIB.B", - "input": "LIB.B", - "name": "Salida Castillo", - "notes": "Parries all high/low attacks", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "r72 LIB", - "startup": "", - "target": "" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-LIB.b+3+4", - "input": "LIB.b+3+4", - "name": "Hopping Turn", - "notes": "", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "r28 BT", - "startup": "", - "target": "" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-LIB.b,b", - "input": "LIB.b,b", - "name": "Caer Back Funnel", - "notes": "", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "r45 LIB", - "startup": "", - "target": "" - }, - { - "damage": "30", - "gif": "", - "id": "Azucena-LIB.d+1+3_d+2+4", - "input": "LIB.d+1+3_d+2+4", - "name": "Smell the Coffee", - "notes": "\n* \nHeat Engager\n* Crouch throw", - "on_block": "", - "on_ch": "", - "on_hit": "+0d", - "recovery": "r28", - "startup": "i12~13", - "target": "t" - }, - { - "damage": "14", - "gif": "", - "id": "Azucena-LIB.d+4", - "input": "LIB.d+4", - "name": "", - "notes": "", - "on_block": "-31", - "on_ch": "", - "on_hit": "-2~-1", - "recovery": "r31", - "startup": "i19~20", - "target": "L" - }, - { - "damage": "14,27", - "gif": "", - "id": "Azucena-LIB.d+4,4", - "input": "LIB.d+4,4", - "name": "Blend Cortar", - "notes": "\n*\nBalcony break\n*Combo from 1st hit", - "on_block": "-7~-6", - "on_ch": "", - "on_hit": "+14 (+5)", - "recovery": "r34", - "startup": ",i30~31", - "target": "L,h" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-LIB.F", - "input": "LIB.F", - "name": "Azucena Admission", - "notes": "\n* Parries all high/low attacks\n* Regenerates heat with each step", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "r48 LIB", - "startup": "", - "target": "" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-LIB.f,f", - "input": "LIB.f,f", - "name": "Libertador (Varios)", - "notes": "", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "r28 LIB", - "startup": "", - "target": "" - }, - { - "damage": "25", - "gif": "", - "id": "Azucena-LIB.P (High)", - "input": "LIB.P (High)", - "name": "Crema Petalo", - "notes": "Restores recoverable health", - "on_block": "", - "on_ch": "", - "on_hit": "+7", - "recovery": "r22 LIB", - "startup": "", - "target": "" - }, - { - "damage": "35", - "gif": "", - "id": "Azucena-LIB.P (Low)", - "input": "LIB.P (Low)", - "name": "Flush Valve Gracia", - "notes": "Restores recoverable health", - "on_block": "", - "on_ch": "", - "on_hit": "+8~+9", - "recovery": "r26 LIB", - "startup": "i7~8 i19~20", - "target": "m" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-LIB.U_D", - "input": "LIB.U_D", - "name": "Milagros Show", - "notes": "\n* Parries all high/low attacks\n* Regenerates heat with each step", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "r52 LIB", - "startup": "", - "target": "" - }, - { - "damage": "18", - "gif": "", - "id": "Azucena-LIB.uf+1", - "input": "LIB.uf+1", - "name": "Eye Opener", - "notes": "\n* \nBalcony break\n* Punch Sabaki\n* Wall crush on hit\n* Alternate Input: LIB.b,​​b+1", - "on_block": "-9~-8", - "on_ch": "", - "on_hit": "+7~+8", - "recovery": "r32", - "startup": "i18~19", - "target": "h" - }, - { - "damage": "40", - "gif": "", - "id": "Azucena-LIB.uf+1+2", - "input": "LIB.uf+1+2", - "name": "Inti Raymi Necklace", - "notes": "\n* Throw break 1+2\n* Side switch", - "on_block": "+0", - "on_ch": "", - "on_hit": "-3d", - "recovery": "r28", - "startup": "i11", - "target": "t" - }, - { - "damage": "25", - "gif": "", - "id": "Azucena-LIB.uf+1,P", - "input": "LIB.uf+1,P", - "name": "Close Encounter", - "notes": "Opponent recovers FUFA", - "on_block": "", - "on_ch": "", - "on_hit": "-4d", - "recovery": "", - "startup": "", - "target": "t" - }, - { - "damage": "23", - "gif": "", - "id": "Azucena-LIB.uf+2", - "input": "LIB.uf+2", - "name": "Rhythmic Hook", - "notes": "Balcony break", - "on_block": "-6~-7", - "on_ch": "+51a", - "on_hit": "+15 (+6)", - "recovery": "r34", - "startup": "i17~18", - "target": "h" - }, - { - "damage": "55+", - "gif": "", - "id": "Azucena-R.df+1+2", - "input": "R.df+1+2", - "name": "Alegría del Café", - "notes": "\n* Rage Art\n* Damage increases with lower health\n* Removes recoverable health on hit", - "on_block": "-15", - "on_ch": "", - "on_hit": "+0d", - "recovery": "", - "startup": "i20", - "target": "m" - }, - { - "damage": "40", - "gif": "", - "id": "Azucena-Right Throw", - "input": "Right throw", - "name": "Giratorio Sleeper Throw", - "notes": "\n* Throw break 2", - "on_block": "-3", - "on_ch": "", - "on_hit": "+0d", - "recovery": "", - "startup": "", - "target": "t" - }, - { - "damage": "", - "gif": "", - "id": "Azucena-UB,​b", - "input": "UB,​b", - "name": "Volterador", - "notes": "Transition to r28 LIB with F", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "" - }, - { - "damage": "18", - "gif": "", - "id": "Azucena-uf+1", - "input": "uf+1", - "name": "Eye Opener", - "notes": "\n* \nBalcony break\n* Punch Sabaki\n* Wall crush on hit\n* Alternate input: ub+1, u+1", - "on_block": "-9~-8", - "on_ch": "", - "on_hit": "+7~+8", - "recovery": "r32", - "startup": "i18~19", - "target": "h" - }, - { - "damage": "40", - "gif": "", - "id": "Azucena-uf+1+2", - "input": "uf+1+2", - "name": "Inti Raymi Necklace", - "notes": "\n* Throw break 1+2\n* Can side switch on hit", - "on_block": "+0", - "on_ch": "", - "on_hit": "-3d", - "recovery": "r28", - "startup": "i11", - "target": "t" - }, - { - "damage": "25", - "gif": "", - "id": "Azucena-uf+1,P", - "input": "uf+1,P", - "name": "Close Encounter", - "notes": "Opponent recovers FUFA", - "on_block": "", - "on_ch": "", - "on_hit": "-4d", - "recovery": "", - "startup": "", - "target": "t" - }, - { - "damage": "23", - "gif": "", - "id": "Azucena-uf+2", - "input": "uf+2", - "name": "Rhythmic Hook", - "notes": "\n* \nBalcony break\n* Alternate input: ub+2, u+2", - "on_block": "-6~-7", - "on_ch": "+51a", - "on_hit": "+15 (+6)", - "recovery": "r34", - "startup": "i17~18", - "target": "h" - }, - { - "damage": "20", - "gif": "", - "id": "Azucena-uf+3", - "input": "uf+3", - "name": "", - "notes": "Alternate input: ub+3, u+3", - "on_block": "-16~-15", - "on_ch": "", - "on_hit": "+36a", - "recovery": "r43 FUFT", - "startup": "i21~22", - "target": "h" - }, - { - "damage": "20,17", - "gif": "", - "id": "Azucena-uf+3,4", - "input": "uf+3,4", - "name": "Daylight Disk", - "notes": "\n* \nBalcony break\n* Alternate input: ub+3,4, u+3,4", - "on_block": "-14~-13", - "on_ch": "+55a", - "on_hit": "+15a (+6)", - "recovery": "r34", - "startup": ",i20~21", - "target": "h,m" - }, - { - "damage": "22", - "gif": "", - "id": "Azucena-uf+4", - "input": "uf+4", - "name": "Tacones Drip", - "notes": "\n* \nSpike\n* Alternate input: ub+4, u+4", - "on_block": "-8~-6", - "on_ch": "", - "on_hit": "+21a~+23a", - "recovery": "r27", - "startup": "i24~26", - "target": "M" - }, - { - "damage": "17", - "gif": "", - "id": "Azucena-ws1", - "input": "ws1", - "name": "Gold Mountain Fist", - "notes": "Only hits grounded up close", - "on_block": "-8~-7", - "on_ch": "+32a (+26)", - "on_hit": "+6~+7", - "recovery": "r26", - "startup": "i13~14", - "target": "m" - }, - { - "damage": "14", - "gif": "", - "id": "Azucena-ws2", - "input": "ws2", - "name": "Rainbow Mountain Swing", - "notes": "", - "on_block": "-13~-12", - "on_ch": "", - "on_hit": "+32 (+22)", - "recovery": "r31", - "startup": "i15~16", - "target": "m" - }, - { - "damage": "23", - "gif": "", - "id": "Azucena-ws3", - "input": "ws3", - "name": "Viento Fuerte", - "notes": "\n*\nBalcony break\n*Chip damage on block", - "on_block": "+4~+5", - "on_ch": "", - "on_hit": "+16c~+17c", - "recovery": "r33 LIB", - "startup": "i20~21", - "target": "m" - }, - { - "damage": "13", - "gif": "", - "id": "Azucena-ws4", - "input": "ws4", - "name": "", - "notes": "", - "on_block": "-6~-5", - "on_ch": "", - "on_hit": "+5~+6", - "recovery": "r24", - "startup": "i11~12", - "target": "m" - }, - { - "damage": "13,10", - "gif": "", - "id": "Azucena-ws4,1", - "input": "ws4,1", - "name": "", - "notes": "Combo from 1st hit with 6f delay", - "on_block": "-2~-1", - "on_ch": "", - "on_hit": "+6~+7", - "recovery": "r23", - "startup": ",i21~22", - "target": "m,h" - }, - { - "damage": "13,10,23", - "gif": "", - "id": "Azucena-ws4,1,3", - "input": "ws4,1,3", - "name": "Combo de Cantuta", - "notes": "\n* \nBalcony break\n* Combo from 2nd CH with 7f delay\n* Input can be delayed 10f", - "on_block": "-14~-13", - "on_ch": "+27a", - "on_hit": "+10a (+1)", - "recovery": "r39", - "startup": ",i22~23", - "target": "m,h,m" - }, - { - "damage": "13,10", - "gif": "", - "id": "Azucena-ws4,1,3~B", - "input": "ws4,1,3~B", - "name": "", - "notes": "", - "on_block": "-16~-15", - "on_ch": "", - "on_hit": "-8~-7", - "recovery": "r20 BT", - "startup": "", - "target": "m,h" - } -] \ No newline at end of file diff --git a/src/json_movelist/bryan.json b/src/json_movelist/bryan.json deleted file mode 100644 index d877a08..0000000 --- a/src/json_movelist/bryan.json +++ /dev/null @@ -1,2158 +0,0 @@ -[ - { - "damage": "5", - "gif": "", - "id": "Bryan-1", - "input": "1", - "name": "Jab", - "notes": "", - "on_block": "+1", - "on_ch": "", - "on_hit": "+8", - "recovery": "", - "startup": "i10", - "target": "h" - }, - { - "damage": "15", - "gif": "", - "id": "Bryan-1+2", - "input": "1+2", - "name": "", - "notes": "Homing", - "on_block": "-7", - "on_ch": "", - "on_hit": "+6", - "recovery": "", - "startup": "i17~18", - "target": "m" - }, - { - "damage": "5,8", - "gif": "", - "id": "Bryan-1,2", - "input": "1,2", - "name": "Left Right Combo", - "notes": "Combo from 1st hit", - "on_block": "-3", - "on_ch": "+9", - "on_hit": "+8", - "recovery": "", - "startup": ",i12", - "target": "h,h" - }, - { - "damage": "15,15", - "gif": "", - "id": "Bryan-1+2,1", - "input": "1+2,1", - "name": "Snake Bite", - "notes": "\n* Combo from 1st hit\n* Transition to Sway with B +7 on hit", - "on_block": "-1", - "on_ch": "", - "on_hit": "+6", - "recovery": "", - "startup": ",i23~24", - "target": "m,h" - }, - { - "damage": "5,8,18", - "gif": "", - "id": "Bryan-1,2,1", - "input": "1,2,1", - "name": "One Two Body Blow", - "notes": "", - "on_block": "-6", - "on_ch": "+64a", - "on_hit": "+6", - "recovery": "", - "startup": ",i19", - "target": "h,h,m" - }, - { - "damage": "15,20", - "gif": "", - "id": "Bryan-1+2,2", - "input": "1+2,2", - "name": "Snake Pit", - "notes": "\n* Combo from 1st hit with delay", - "on_block": "-14", - "on_ch": "", - "on_hit": "+51d (+20)", - "recovery": "", - "startup": ",i26~27", - "target": "m,m" - }, - { - "damage": "5,8,15", - "gif": "", - "id": "Bryan-1,2,3", - "input": "1,2,3", - "name": "One Two Low Kick", - "notes": "Combo from 1st and 2nd CH", - "on_block": "-12", - "on_ch": "+14d", - "on_hit": "+2", - "recovery": "", - "startup": ",i24", - "target": "h,h,L" - }, - { - "damage": "", - "gif": "", - "id": "Bryan-1+2+3+4", - "input": "1+2+3+4", - "name": "Ki Charge", - "notes": "\n* Cannot block while still in effect\n* Automatic counter hit", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "" - }, - { - "damage": "5,8,24", - "gif": "", - "id": "Bryan-1,2,4", - "input": "1,2,4", - "name": "One Two Neck Breaker", - "notes": "\n* \nHeat Engager", - "on_block": "-5", - "on_ch": "", - "on_hit": "+20a (+11)", - "recovery": "", - "startup": ",i20", - "target": "h,h,h" - }, - { - "damage": "35", - "gif": "", - "id": "Bryan-1+3", - "input": "1+3", - "name": "Gravity Brain Buster", - "notes": "\n* \nFloor break\n* Throw break 1 or 2", - "on_block": "", - "on_ch": "", - "on_hit": "-2d", - "recovery": "", - "startup": "i12~14", - "target": "t" - }, - { - "damage": "0", - "gif": "", - "id": "Bryan-1+3+4", - "input": "1+3+4", - "name": "Taunt", - "notes": "", - "on_block": "", - "on_ch": "", - "on_hit": "+16", - "recovery": "r SE", - "startup": "i28~31", - "target": "m!" - }, - { - "damage": "5,14", - "gif": "", - "id": "Bryan-1,4", - "input": "1,4", - "name": "", - "notes": "Combo from 1st hit", - "on_block": "-7", - "on_ch": "", - "on_hit": "+4", - "recovery": "", - "startup": ",i15", - "target": "h,h" - }, - { - "damage": "5,14,18", - "gif": "", - "id": "Bryan-1,4,2", - "input": "1,4,2", - "name": "", - "notes": "\n* Cancel last hit into 1,4,2,1 with f+1\n* Cancel last hit into 1,4,2,4 with f+4\n* Alternate input b+2", - "on_block": "-7", - "on_ch": "+53a", - "on_hit": "+4", - "recovery": "", - "startup": ",i24", - "target": "h,h,h" - }, - { - "damage": "5,14,18,16", - "gif": "", - "id": "Bryan-1,4,2,1", - "input": "1,4,2,1", - "name": "", - "notes": "\n* Cancel last hit and transition to SS with u_d\n* Transition to CD with F\n* Alternate input:\n** b+2,1\n** qcf+4,1", - "on_block": "+0", - "on_ch": "", - "on_hit": "+55a", - "recovery": "", - "startup": ",i19", - "target": "h,h,h,h" - }, - { - "damage": "5,14,18,16,22", - "gif": "", - "id": "Bryan-1,4,2,1,2", - "input": "1,4,2,1,2", - "name": "Lair's Dance", - "notes": "\n* \nBalcony break\n* Alternate input:\n** b+2,1,2\n** qcf+4,1,2", - "on_block": "-8", - "on_ch": "", - "on_hit": "+41d (-17)", - "recovery": "", - "startup": ",i24", - "target": "h,h,h,h,h" - }, - { - "damage": "5,14,18,16,21", - "gif": "", - "id": "Bryan-1,4,2,1,4", - "input": "1,4,2,1,4", - "name": "Cremation", - "notes": "\n* \nTornado\n* Alternate input:\n** b+2,1,4\n** qcf+4,1,4\n* Special? effect on airborne hit +38a (+31)", - "on_block": "-5", - "on_ch": "", - "on_hit": "+40a (+14)", - "recovery": "", - "startup": ",i30-31", - "target": "h,h,h,h,m" - }, - { - "damage": "5,14,18,21", - "gif": "", - "id": "Bryan-1,4,2,4", - "input": "1,4,2,4", - "name": "Whipping Fury", - "notes": "\n* \nBalcony break\n* Alternate input b+2,4", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "h,h,h,m" - }, - { - "damage": "5,14,15", - "gif": "", - "id": "Bryan-1,4,3", - "input": "1,4,3", - "name": "Jab > Double Spin Kick", - "notes": "", - "on_block": "-10", - "on_ch": "", - "on_hit": "+1", - "recovery": "", - "startup": ",i21", - "target": "h,h,m" - }, - { - "damage": "5,14,15,18", - "gif": "", - "id": "Bryan-1,4,3,3", - "input": "1,4,3,3", - "name": "Running Blind", - "notes": "Combo from 3rd hit", - "on_block": "-7", - "on_ch": "+14d", - "on_hit": "+7", - "recovery": "", - "startup": ",i23", - "target": "h,h,m,h" - }, - { - "damage": "10", - "gif": "", - "id": "Bryan-2", - "input": "2", - "name": "", - "notes": "", - "on_block": "+1", - "on_ch": "", - "on_hit": "+7", - "recovery": "", - "startup": "i10", - "target": "h" - }, - { - "damage": "12 (12)", - "gif": "", - "id": "Bryan-2+3", - "input": "2+3", - "name": "Heat Burst", - "notes": "\n* \nHeat Burst", - "on_block": "+1", - "on_ch": "", - "on_hit": "+2c", - "recovery": "", - "startup": "i16", - "target": "m" - }, - { - "damage": "10,14", - "gif": "", - "id": "Bryan-2,3", - "input": "2,3", - "name": "PK Combination", - "notes": "\n* Combo from 1st hit\n* CH frames also apply to combo from 1st CH", - "on_block": "-10", - "on_ch": "+16a (+7)", - "on_hit": "+6", - "recovery": "", - "startup": ",i16", - "target": "h,m" - }, - { - "damage": "35", - "gif": "", - "id": "Bryan-2+4", - "input": "2+4", - "name": "Guillotine", - "notes": "\n* \nFloor break\n* Throw break 1 or 2\n* Side switch", - "on_block": "", - "on_ch": "", - "on_hit": "+0d", - "recovery": "", - "startup": "i12~14", - "target": "t" - }, - { - "damage": "14", - "gif": "", - "id": "Bryan-3", - "input": "3", - "name": "Mid Kick", - "notes": "", - "on_block": "-4", - "on_ch": "", - "on_hit": "+7", - "recovery": "", - "startup": "i16", - "target": "m" - }, - { - "damage": "14,11", - "gif": "", - "id": "Bryan-3,2", - "input": "3,2", - "name": "", - "notes": "Combo from 1st CH", - "on_block": "-10", - "on_ch": "", - "on_hit": "+1", - "recovery": "", - "startup": ",i22", - "target": "m,m" - }, - { - "damage": "14,11,10", - "gif": "", - "id": "Bryan-3,2,1", - "input": "3,2,1", - "name": "", - "notes": "Combo from 2nd hit", - "on_block": "-9", - "on_ch": "", - "on_hit": "+2", - "recovery": "", - "startup": ",i20", - "target": "m,m,m" - }, - { - "damage": "14,11,10,14", - "gif": "", - "id": "Bryan-3,2,1,2", - "input": "3,2,1,2", - "name": "Mid Kick > Rush", - "notes": "Balcony break", - "on_block": "-10", - "on_ch": "", - "on_hit": "+14a (+10)", - "recovery": "", - "startup": ",i20", - "target": "m,m,m,m" - }, - { - "damage": "14,11,10,12", - "gif": "", - "id": "Bryan-3,2,1,4", - "input": "3,2,1,4", - "name": "Gatling Combination", - "notes": "", - "on_block": "-11", - "on_ch": "", - "on_hit": "+0", - "recovery": "", - "startup": ",i22", - "target": "m,m,m,L" - }, - { - "damage": "14,13", - "gif": "", - "id": "Bryan-3,3", - "input": "3,3", - "name": "", - "notes": "", - "on_block": "-6", - "on_ch": "", - "on_hit": "+6", - "recovery": "", - "startup": ",i23", - "target": "m,h" - }, - { - "damage": "14,13,20", - "gif": "", - "id": "Bryan-3,3,2", - "input": "3,3,2", - "name": "Anaconda Bite", - "notes": "Tornado", - "on_block": "-7", - "on_ch": "", - "on_hit": "+43 (+33)", - "recovery": "", - "startup": ",i22~23", - "target": "m,h,h" - }, - { - "damage": "14,13,25", - "gif": "", - "id": "Bryan-3,3,4", - "input": "3,3,4", - "name": "Anaconda Rage", - "notes": "Balcony break", - "on_block": "-12", - "on_ch": "", - "on_hit": "+37d (-21)", - "recovery": "", - "startup": ",i28", - "target": "m,h,h" - }, - { - "damage": "20", - "gif": "", - "id": "Bryan-3+4", - "input": "3+4", - "name": "Middle Side Kick", - "notes": "", - "on_block": "-13", - "on_ch": "+59a", - "on_hit": "+8", - "recovery": "", - "startup": "i18", - "target": "m" - }, - { - "damage": "20,20", - "gif": "", - "id": "Bryan-3+4,SE.2", - "input": "3+4,SE.2", - "name": "Neo Soul Eraser", - "notes": "\n* Combo from 1st hit\n* Consumes SE\n* Chip damage 8 (40%) on block", - "on_block": "-1", - "on_ch": "", - "on_hit": "+35a (+9)", - "recovery": "", - "startup": "i14~15", - "target": "m,m" - }, - { - "damage": "20,30", - "gif": "", - "id": "Bryan-3+4,SE.2*", - "input": "3+4,SE.2*", - "name": "Neo Soul Eraser Exceed", - "notes": "\n* \nTornado\n* \nBalcony break\n* Consumes SE\n* Chip damage on block\n* Guard break at the wall\n* Insta Tornado launcher", - "on_block": "+9", - "on_ch": "", - "on_hit": "+66a (+50)", - "recovery": "", - "startup": "i55~56", - "target": "m,m" - }, - { - "damage": "15", - "gif": "", - "id": "Bryan-4", - "input": "4", - "name": "", - "notes": "", - "on_block": "-7", - "on_ch": "", - "on_hit": "+6", - "recovery": "", - "startup": "i12", - "target": "h" - }, - { - "damage": "15,12", - "gif": "", - "id": "Bryan-4,3", - "input": "4,3", - "name": "", - "notes": "Combo from 1st hit", - "on_block": "-10", - "on_ch": "", - "on_hit": "+2", - "recovery": "", - "startup": ",i24~25", - "target": "h,m" - }, - { - "damage": "15,12,16", - "gif": "", - "id": "Bryan-4,3,4", - "input": "4,3,4", - "name": "Double Spin Tomahawk", - "notes": "\n* \nBalcony break\n* Hold to power up and deal more chip damage on block", - "on_block": "-10", - "on_ch": "", - "on_hit": "+2", - "recovery": "", - "startup": ",i24~25", - "target": "h,m,m" - }, - { - "damage": "15,12,18", - "gif": "", - "id": "Bryan-4,3,f+4", - "input": "4,3,f+4", - "name": "Triple Spin Kick", - "notes": "Combo from 2nd CH", - "on_block": "-5", - "on_ch": "+31a (+21)", - "on_hit": "+6", - "recovery": "", - "startup": ",24~25", - "target": "h,m,h" - }, - { - "damage": "21", - "gif": "", - "id": "Bryan-b+1", - "input": "b+1", - "name": "Chopping Elbow", - "notes": "Elbow", - "on_block": "+4", - "on_ch": "+78a (+58)", - "on_hit": "+7c", - "recovery": "", - "startup": "i20~21", - "target": "m" - }, - { - "damage": "", - "gif": "", - "id": "Bryan-b+1+3", - "input": "b+1+3", - "name": "Parry", - "notes": "\n* Alternate input b+2+4", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "" - }, - { - "damage": "26", - "gif": "", - "id": "Bryan-b+1+4", - "input": "b+1+4", - "name": "Gravity Blow", - "notes": "", - "on_block": "-9", - "on_ch": "", - "on_hit": "+7c", - "recovery": "", - "startup": "i28", - "target": "m" - }, - { - "damage": "45", - "gif": "", - "id": "Bryan-b+1+4*", - "input": "b+1+4*", - "name": "Meteor Smash", - "notes": "", - "on_block": "", - "on_ch": "", - "on_hit": "+7a", - "recovery": "", - "startup": "i53", - "target": "m!" - }, - { - "damage": "18", - "gif": "", - "id": "Bryan-b+2", - "input": "b+2", - "name": "", - "notes": "\n* Cancel into b+2,1 with f+1\n* Cancel into b+2,4 with f+4\n* Alternate input 1,4,2", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "h" - }, - { - "damage": "18,16", - "gif": "", - "id": "Bryan-b+2,1", - "input": "b+2,1", - "name": "", - "notes": "\n* Cancel last hit and transition to SS with u_d\n* Transition to CD with F\n* Alternate input:\n** 1,4,2,1\n** qcf+4,1", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "h,h" - }, - { - "damage": "18,16,22", - "gif": "", - "id": "Bryan-b+2,1,2", - "input": "b+2,1,2", - "name": "Hands of Doom", - "notes": "\n* \nBalcony break\n* Alternate input:\n** 1,4,2,1,2\n** qcf+4,1,2", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "h,h,h" - }, - { - "damage": "18,16,20", - "gif": "", - "id": "Bryan-b+2,1,4", - "input": "b+2,1,4", - "name": "Kickass Combo", - "notes": "\n* \nTornado\n* Alternate input:\n** 1,4,2,4\n** qcf+4,1,4", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "h,h,m" - }, - { - "damage": "18,21", - "gif": "", - "id": "Bryan-b+2,4", - "input": "b+2,4", - "name": "Wolf Call", - "notes": "\n* \nBalcony break\n* Alternate input 1,4,2,4", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "h,m" - }, - { - "damage": "12", - "gif": "", - "id": "Bryan-b+3", - "input": "b+3", - "name": "", - "notes": "Transition to CD with F +17 on hit", - "on_block": "-7", - "on_ch": "", - "on_hit": "+4", - "recovery": "", - "startup": "i19", - "target": "m" - }, - { - "damage": "12,25", - "gif": "", - "id": "Bryan-b+3,1+2", - "input": "b+3,1+2", - "name": "Front Kick > Double Hammer", - "notes": "Combo from 1st CH with delay", - "on_block": "-8", - "on_ch": "+20d", - "on_hit": "+4c", - "recovery": "", - "startup": ",i22", - "target": "m,m" - }, - { - "damage": "12,12", - "gif": "", - "id": "Bryan-b+3,2", - "input": "b+3,2", - "name": "", - "notes": "", - "on_block": "-4", - "on_ch": "", - "on_hit": "+7", - "recovery": "", - "startup": ",i16", - "target": "m,h" - }, - { - "damage": "12,12,10", - "gif": "", - "id": "Bryan-b+3,2,1", - "input": "b+3,2,1", - "name": "", - "notes": "\n* Combo from 2nd hit\n* Alternate input 3,2,1", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "m,h,m" - }, - { - "damage": "12,12,10,14", - "gif": "", - "id": "Bryan-b+3,2,1,2", - "input": "b+3,2,1,2", - "name": "Front Kick > Rush", - "notes": "\n* Alternate input 3,2,1,2", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "m,h,m,m" - }, - { - "damage": "12,12,10,12", - "gif": "", - "id": "Bryan-b+3,2,1,4", - "input": "b+3,2,1,4", - "name": "Run for Cover", - "notes": "\n* Alternate input 3,2,1,4", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "m,h,m,L" - }, - { - "damage": "18", - "gif": "", - "id": "Bryan-b+4", - "input": "b+4", - "name": "Knee Break", - "notes": "Knee", - "on_block": "-10", - "on_ch": "", - "on_hit": "+15", - "recovery": "", - "startup": "i16", - "target": "m" - }, - { - "damage": "60", - "gif": "", - "id": "Bryan-Back throw", - "input": "Back throw", - "name": "Neck throw", - "notes": "", - "on_block": "", - "on_ch": "", - "on_hit": "-1d", - "recovery": "", - "startup": "", - "target": "t" - }, - { - "damage": "24", - "gif": "", - "id": "Bryan-b,B+4", - "input": "b,B+4", - "name": "Flying Knee Kick", - "notes": "", - "on_block": "-19", - "on_ch": "", - "on_hit": "-7", - "recovery": "FUFT", - "startup": "i21~33", - "target": "M" - }, - { - "damage": "25", - "gif": "", - "id": "Bryan-b,df+4", - "input": "b,df+4", - "name": "Wedge Driver", - "notes": "\n* Cancel with B", - "on_block": "-13", - "on_ch": "", - "on_hit": "+14g", - "recovery": "", - "startup": "i29", - "target": "l" - }, - { - "damage": "10,15", - "gif": "", - "id": "Bryan-d+1+2", - "input": "d+1+2", - "name": "", - "notes": "\n* Combo from 1st hit\n* Transition to CD with F +10g on hit\n* Transition to Sway with B +8", - "on_block": "-10", - "on_ch": "", - "on_hit": "+3", - "recovery": "", - "startup": "i17", - "target": "m,m" - }, - { - "damage": "24", - "gif": "", - "id": "Bryan-d+1+2~2", - "input": "d+1+2~2", - "name": "Snake Bomb", - "notes": "Chip damage on block", - "on_block": "+7", - "on_ch": "", - "on_hit": "+53a", - "recovery": "", - "startup": "i30", - "target": "m" - }, - { - "damage": "10,15,20", - "gif": "", - "id": "Bryan-d+1+2,3", - "input": "d+1+2,3", - "name": "Hammer Driver Hatchet", - "notes": "", - "on_block": "-13", - "on_ch": "+25a", - "on_hit": "+5", - "recovery": "", - "startup": "i27~28", - "target": "m,m,l" - }, - { - "damage": "17", - "gif": "", - "id": "Bryan-d+2", - "input": "d+2", - "name": "", - "notes": "Elbow", - "on_block": "-2", - "on_ch": "", - "on_hit": "+8c", - "recovery": "", - "startup": "i14~15", - "target": "m" - }, - { - "damage": "17,21", - "gif": "", - "id": "Bryan-d+2,3", - "input": "d+2,3", - "name": "Python Crush", - "notes": "\n* \nBalcony break", - "on_block": "-10", - "on_ch": "+32a (+18)", - "on_hit": "+16a (-1)", - "recovery": "", - "startup": "i22", - "target": "m,m" - }, - { - "damage": "10", - "gif": "", - "id": "Bryan-d+3", - "input": "d+3", - "name": "", - "notes": "", - "on_block": "-11", - "on_ch": "", - "on_hit": "+0", - "recovery": "", - "startup": "i16", - "target": "l" - }, - { - "damage": "10,22", - "gif": "", - "id": "Bryan-d+3,2", - "input": "d+3,2", - "name": "Quick Low Screw Punch > Snake Eyes", - "notes": "\n* \nBalcony break\n* Gain SE on hit with 1+2", - "on_block": "-7", - "on_ch": "", - "on_hit": "+35a (+9)", - "recovery": "", - "startup": "i21", - "target": "l,h" - }, - { - "damage": "16", - "gif": "", - "id": "Bryan-d+3+4", - "input": "d+3+4", - "name": "", - "notes": "", - "on_block": "-12", - "on_ch": "", - "on_hit": "-1", - "recovery": "", - "startup": "i19", - "target": "l" - }, - { - "damage": "16,25", - "gif": "", - "id": "Bryan-d+3+4,2", - "input": "d+3+4,2", - "name": "Side Low Knuckle Whip", - "notes": "\n* \nBalcony break\n* \nTornado", - "on_block": "-12", - "on_ch": "", - "on_hit": "+14a (-3)", - "recovery": "", - "startup": ",i19", - "target": "l,m" - }, - { - "damage": "13", - "gif": "", - "id": "Bryan-d+4", - "input": "d+4", - "name": "Low Kick", - "notes": "", - "on_block": "-11", - "on_ch": "", - "on_hit": "+0", - "recovery": "", - "startup": "i15", - "target": "L" - }, - { - "damage": "8,16", - "gif": "", - "id": "Bryan-db+1+2", - "input": "db+1+2", - "name": "Crash Impact", - "notes": "\n* \nHeat Engager\n* Heat Dash +43a (+35)", - "on_block": "-9", - "on_ch": "", - "on_hit": "+4", - "recovery": "", - "startup": "i15", - "target": "m,h" - }, - { - "damage": "13", - "gif": "", - "id": "Bryan-db+2", - "input": "db+2", - "name": "Stomach Blow", - "notes": "", - "on_block": "-6", - "on_ch": "", - "on_hit": "+8", - "recovery": "", - "startup": "i15~17", - "target": "m" - }, - { - "damage": "11", - "gif": "", - "id": "Bryan-db+3", - "input": "db+3", - "name": "Sweeper kick", - "notes": "", - "on_block": "-12", - "on_ch": "+4", - "on_hit": "-1", - "recovery": "", - "startup": "i16~17", - "target": "L" - }, - { - "damage": "8", - "gif": "", - "id": "Bryan-DF+1", - "input": "DF+1", - "name": "", - "notes": "\n* Alternate input df+1\n* DF+1,1... extension available only with DF+1 input, not df+1", - "on_block": "-5", - "on_ch": "", - "on_hit": "+1", - "recovery": "", - "startup": "i15", - "target": "m" - }, - { - "damage": "8,2", - "gif": "", - "id": "Bryan-DF+1,1", - "input": "DF+1,1", - "name": "", - "notes": "Combo from 1st hit", - "on_block": "-10", - "on_ch": "", - "on_hit": "-4", - "recovery": "", - "startup": ",i10", - "target": "m,m" - }, - { - "damage": "8,2,2", - "gif": "", - "id": "Bryan-DF+1,1,1", - "input": "DF+1,1,1", - "name": "", - "notes": "Combo from 1st hit", - "on_block": "-10", - "on_ch": "", - "on_hit": "-4", - "recovery": "", - "startup": ",i10", - "target": "m,m,m" - }, - { - "damage": "8,2,2,2", - "gif": "", - "id": "Bryan-DF+1,1,1,1", - "input": "DF+1,1,1,1", - "name": "Vulcan Cannon", - "notes": "Combo from 1st hit", - "on_block": "-10", - "on_ch": "", - "on_hit": "-4", - "recovery": "", - "startup": ",i10", - "target": "m,m,m,m" - }, - { - "damage": "8,20", - "gif": "", - "id": "Bryan-df+1,2", - "input": "DF+1,2", - "name": "Double Body Blow", - "notes": "\n* Combo from 1st hit\n* Alternate input:\n** DF+1,2\n** DF+1,1,2\n** DF+1,1,1,2\n** DF+1,1,1,1,2\n* Wall Break on CH", - "on_block": "-15", - "on_ch": "+14a (+5)", - "on_hit": "+1", - "recovery": "", - "startup": ",i23", - "target": "m,m" - }, - { - "damage": "12", - "gif": "", - "id": "Bryan-df+2", - "input": "df+2", - "name": "", - "notes": "Elbow", - "on_block": "-6", - "on_ch": "", - "on_hit": "+5", - "recovery": "", - "startup": "i13", - "target": "m" - }, - { - "damage": "12,11", - "gif": "", - "id": "Bryan-df+2,1", - "input": "df+2,1", - "name": "Blackout Combo", - "notes": "\n* Combo from 1st hit\n* Transition to Sway with B +8 on hit", - "on_block": "-4", - "on_ch": "", - "on_hit": "+5", - "recovery": "", - "startup": "i6", - "target": "m,h" - }, - { - "damage": "12,20", - "gif": "", - "id": "Bryan-df+2,3", - "input": "df+2,3", - "name": "Blackout Trap", - "notes": "", - "on_block": "-13", - "on_ch": "+59a", - "on_hit": "+8", - "recovery": "", - "startup": ",i23", - "target": "m,m" - }, - { - "damage": "20", - "gif": "", - "id": "Bryan-df+3", - "input": "df+3", - "name": "Snake Edge", - "notes": "\n* \nHoming\n* Insta Tornado launch", - "on_block": "-26", - "on_ch": "", - "on_hit": "+70a (+54)", - "recovery": "", - "startup": "i29~30", - "target": "L" - }, - { - "damage": "23", - "gif": "", - "id": "Bryan-df+4", - "input": "df+4", - "name": "Wolf's Tail", - "notes": "\n* \nHoming", - "on_block": "-6", - "on_ch": "", - "on_hit": "+19d", - "recovery": "", - "startup": "i22~24", - "target": "m" - }, - { - "damage": "22", - "gif": "", - "id": "Bryan-f+1+2", - "input": "f+1+2", - "name": "Sidestep Elbow", - "notes": "\n* \nBalcony break\n* \nElbow\n* Absorb an attack to power up and deal more chip damage on block", - "on_block": "-6", - "on_ch": "", - "on_hit": "+44d (-14)", - "recovery": "", - "startup": "i20~21", - "target": "h" - }, - { - "damage": "10", - "gif": "", - "id": "Bryan-f+2", - "input": "f+2", - "name": "", - "notes": "", - "on_block": "-10", - "on_ch": "", - "on_hit": "+", - "recovery": "", - "startup": "i15", - "target": "m" - }, - { - "damage": "10,12", - "gif": "", - "id": "Bryan-f+2,1", - "input": "f+2,1", - "name": "", - "notes": "Combo from 1st hit", - "on_block": "-10", - "on_ch": "", - "on_hit": "+1", - "recovery": "", - "startup": ",i10", - "target": "m,m" - }, - { - "damage": "10,12,20", - "gif": "", - "id": "Bryan-f+2,1,4", - "input": "f+2,1,4", - "name": "Right Left > Spin Kick > Snake Eyes", - "notes": "\n* Combo from 1st hit\n* Gain SE on hit with 1+2", - "on_block": "-13", - "on_ch": "", - "on_hit": "+3a", - "recovery": "", - "startup": "i18~19", - "target": "m,m,m" - }, - { - "damage": "10,12,5", - "gif": "", - "id": "Bryan-f+2,1,SE.2", - "input": "f+2,1,SE.2", - "name": "", - "notes": "\n* \nElbow\n* Combo from 1st hit\n* Consumes SE\n* Chip damage 1 (20%) on block", - "on_block": "-12", - "on_ch": "", - "on_hit": "+3c", - "recovery": "", - "startup": "i14~15", - "target": "m,m,m" - }, - { - "damage": "10,12,5,7", - "gif": "", - "id": "Bryan-f+2,1,SE.2,3", - "input": "f+2,1,SE.2,3", - "name": "", - "notes": "\n* \nKnee\n* Combo from 1st hit\n* Chip damage 2 (28%) on block", - "on_block": "-15", - "on_ch": "", - "on_hit": "+14a (+7)", - "recovery": "", - "startup": ",i22", - "target": "m,m,m,m" - }, - { - "damage": "10,12,5,7,20", - "gif": "", - "id": "Bryan-f+2,1,SE.2,3,2", - "input": "f+2,1,SE.2,3,2", - "name": "", - "notes": "\n* Chip damage 8 (40%) on block", - "on_block": "-10", - "on_ch": "", - "on_hit": "+0a (-1)", - "recovery": "", - "startup": ",i35~36", - "target": "m,m,m,m,m" - }, - { - "damage": "18", - "gif": "", - "id": "Bryan-f+3", - "input": "f+3", - "name": "Knee Strike", - "notes": "Knee", - "on_block": "+0", - "on_ch": "+50a", - "on_hit": "+4", - "recovery": "", - "startup": "i16~18", - "target": "m" - }, - { - "damage": "10", - "gif": "", - "id": "Bryan-f+4", - "input": "f+4", - "name": "", - "notes": "", - "on_block": "-9", - "on_ch": "", - "on_hit": "+0", - "recovery": "", - "startup": "i18", - "target": "m" - }, - { - "damage": "10,10", - "gif": "", - "id": "Bryan-f+4,1", - "input": "f+4,1", - "name": "Boa Crusher", - "notes": "Combo from 1st hit", - "on_block": "-13c", - "on_ch": "", - "on_hit": "+40a (+32)", - "recovery": "", - "startup": "i25~26", - "target": "m,m" - }, - { - "damage": "45", - "gif": "", - "id": "Bryan-FC.db+1+2", - "input": "FC.db+1+2", - "name": "Chains of Misery", - "notes": "\n* Throw break 1+2", - "on_block": "", - "on_ch": "", - "on_hit": "+1d", - "recovery": "", - "startup": "i11", - "target": "t" - }, - { - "damage": "12", - "gif": "", - "id": "Bryan-FC.df+2", - "input": "FC.df+2", - "name": "", - "notes": "", - "on_block": "-9", - "on_ch": "", - "on_hit": "+4", - "recovery": "", - "startup": "i13", - "target": "m" - }, - { - "damage": "12,25", - "gif": "", - "id": "Bryan-FC.df+2,1", - "input": "FC.df+2,1", - "name": "Snake Rampage", - "notes": "\n* \nBalcony break\n* Combo from 1st hit with delay\n* Move can be delayed", - "on_block": "-8", - "on_ch": "", - "on_hit": "+34a (+8)", - "recovery": "", - "startup": "i22~23", - "target": "m,h" - }, - { - "damage": "21", - "gif": "", - "id": "Bryan-FC.df+4", - "input": "FC.df+4", - "name": "Northern Cross", - "notes": "Ballerina spin on hit", - "on_block": "-10", - "on_ch": "", - "on_hit": "+13g", - "recovery": "", - "startup": "i15~16", - "target": "m" - }, - { - "damage": "29", - "gif": "", - "id": "Bryan-f,F+2", - "input": "f,F+2", - "name": "Mach Breaker", - "notes": "\n* \nHeat Engager\n* \nBalcony break\n* Chip damage on block", - "on_block": "-9", - "on_ch": "", - "on_hit": "+41d (-17)", - "recovery": "", - "startup": "i13", - "target": "h" - }, - { - "damage": "25", - "gif": "", - "id": "Bryan-f,F+3", - "input": "f,F+3", - "name": "Slash Kick > Snake Eyes", - "notes": "\n* \nBalcony break\n* Gain SE on hit with 1+2\n* Chip damage 7 (28%) on block", - "on_block": "-13", - "on_ch": "+39a (-8)", - "on_hit": "+28a (-8)", - "recovery": "", - "startup": "i24~25", - "target": "m" - }, - { - "damage": "33", - "gif": "", - "id": "Bryan-f,F+3*", - "input": "f,F+3*", - "name": "", - "notes": "\n* \nBalcony break\n* Gain SE on hit with 1+2\n* Chip damage 9 (27%) on block\n* Wall Crush on block", - "on_block": "+8", - "on_ch": "", - "on_hit": "+71a", - "recovery": "", - "startup": "i34~35", - "target": "m" - }, - { - "damage": "32", - "gif": "", - "id": "Bryan-f,F+4", - "input": "f,F+4", - "name": "Mach Kick", - "notes": "\n* \nHoming\n* Chip damage 9 (28%) on block", - "on_block": "-9", - "on_ch": "", - "on_hit": "+15a", - "recovery": "", - "startup": "i16~19", - "target": "h" - }, - { - "damage": "30", - "gif": "", - "id": "Bryan-f,f,F+3", - "input": "f,f,F+3", - "name": "Snake Slash", - "notes": "Chip damage 9 (30%) on block", - "on_block": "+6", - "on_ch": "", - "on_hit": "+13a (+3)", - "recovery": "", - "startup": "i22~25", - "target": "m" - }, - { - "damage": "20", - "gif": "", - "id": "Bryan-f,n,b+2", - "input": "f,n,b+2", - "name": "Mach Kick", - "notes": "\n* \nTornado", - "on_block": "-7", - "on_ch": "", - "on_hit": "+43a (+33)", - "recovery": "", - "startup": "i14~15", - "target": "h" - }, - { - "damage": "20,20,20", - "gif": "", - "id": "Bryan-H.2+3", - "input": "H.2+3", - "name": "Notorious Monster", - "notes": "\n* \nHeat Smash\n* \nFloor break\n** 2nd and 3rd hit\n* Throw on hit\n* Wall crush on block", - "on_block": "+9", - "on_ch": "", - "on_hit": "-1d", - "recovery": "", - "startup": "i16", - "target": "m,m,t" - }, - { - "damage": "40", - "gif": "", - "id": "Bryan-Left throw", - "input": "Left throw", - "name": "Gravity Throw", - "notes": "\n* \nFloor break\n* Throw break 1\n* Side switch", - "on_block": "", - "on_ch": "", - "on_hit": "+1d", - "recovery": "", - "startup": "", - "target": "t" - }, - { - "damage": "30", - "gif": "", - "id": "Bryan-P.2", - "input": "P.2", - "name": "Parry > Mach Breaker > Snake Eyes", - "notes": "\n* \nBalcony break\n* Gain SE on hit\n* Chip damage on block", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "h" - }, - { - "damage": "", - "gif": "", - "id": "Bryan-qcb", - "input": "qcb", - "name": "Sway", - "notes": "", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "" - }, - { - "damage": "22", - "gif": "", - "id": "Bryan-qcb+1", - "input": "qcb+1", - "name": "Cannonball Straight", - "notes": "\n* \nTornado\n* \nBalcony break\n* Insta Tornado launcher on CH\n* Chip damage 6 (27%) on block", - "on_block": "+5", - "on_ch": "+72a (+56)", - "on_hit": "+36d (+28)", - "recovery": "", - "startup": "i13~14", - "target": "h" - }, - { - "damage": "16", - "gif": "", - "id": "Bryan-qcb+2", - "input": "qcb+2", - "name": "", - "notes": "", - "on_block": "+6", - "on_ch": "", - "on_hit": "-9", - "recovery": "", - "startup": "i15~16", - "target": "m" - }, - { - "damage": "16,25", - "gif": "", - "id": "Bryan-qcb+2,4", - "input": "qcb+2,4", - "name": "", - "notes": "\n* Combo from 1st hit with delay\n* Chip damage on block", - "on_block": "-9", - "on_ch": "", - "on_hit": "+15a", - "recovery": "", - "startup": ",i22~25", - "target": "m,h" - }, - { - "damage": "23", - "gif": "", - "id": "Bryan-qcb+3", - "input": "qcb+3", - "name": "", - "notes": "", - "on_block": "-13", - "on_ch": "+25d", - "on_hit": "+5", - "recovery": "", - "startup": "i19~20", - "target": "l" - }, - { - "damage": "23", - "gif": "", - "id": "Bryan-qcb+4", - "input": "qcb+4", - "name": "", - "notes": "", - "on_block": "-12", - "on_ch": "", - "on_hit": "+31a (+21)", - "recovery": "", - "startup": "i17~18", - "target": "M" - }, - { - "damage": "", - "gif": "", - "id": "Bryan-qcf", - "input": "qcf", - "name": "Slither Step", - "notes": "\n* Transition to FC with DF", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "" - }, - { - "damage": "28", - "gif": "", - "id": "Bryan-qcf+1+2", - "input": "qcf+1+2", - "name": "Requiem", - "notes": "\n* \nHeat Engager\n* \nBalcony break\n* Chip damage 8 (28%) on block", - "on_block": "-9", - "on_ch": "", - "on_hit": "+23a (+13)", - "recovery": "", - "startup": "i15~16", - "target": "m" - }, - { - "damage": "16", - "gif": "", - "id": "Bryan-qcf+2", - "input": "qcf+2", - "name": "", - "notes": "", - "on_block": "-6", - "on_ch": "", - "on_hit": "+2", - "recovery": "", - "startup": "i15~16", - "target": "h" - }, - { - "damage": "16,23", - "gif": "", - "id": "Bryan-qcf+2,1", - "input": "qcf+2,1", - "name": "Cross Bazooka", - "notes": "Combo from 1st hit", - "on_block": "-11", - "on_ch": "", - "on_hit": "+33a (+18)", - "recovery": "", - "startup": "i15~16", - "target": "h,m" - }, - { - "damage": "16,25", - "gif": "", - "id": "Bryan-qcf+2,2", - "input": "qcf+2,2", - "name": "Cross Grenade", - "notes": "\n* \nBalcony break\n* Combo from 1st hit", - "on_block": "-7", - "on_ch": "", - "on_hit": "+14a", - "recovery": "", - "startup": "i25", - "target": "h,m" - }, - { - "damage": "16,22", - "gif": "", - "id": "Bryan-qcf+2,4", - "input": "qcf+2,4", - "name": "Cross Bullet", - "notes": "\n* \nTornado\n* Combo from 1st hit\n* Gain SE on hit -12a", - "on_block": "", - "on_ch": "", - "on_hit": "+5a", - "recovery": "", - "startup": "i16~17", - "target": "h,m" - }, - { - "damage": "13", - "gif": "", - "id": "Bryan-qcf+4", - "input": "qcf+4", - "name": "", - "notes": "", - "on_block": "-5", - "on_ch": "", - "on_hit": "+1", - "recovery": "", - "startup": "i18", - "target": "m" - }, - { - "damage": "13,13", - "gif": "", - "id": "Bryan-qcf+4,1", - "input": "qcf+4,1", - "name": "", - "notes": "\n* Combo from 1st CH\n* Transition to SS with u_d\n* Alternate input:\n** 1,4,2,1\n** b+2,1", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "m,h" - }, - { - "damage": "13,13,22", - "gif": "", - "id": "Bryan-qcf+4,1,2", - "input": "qcf+4,1,2", - "name": "Snake Spin Mach Breaker", - "notes": "\n* Alternate input:\n** 1,4,2,1,2\n** b+2,1,2", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "m,h,h" - }, - { - "damage": "13,13,20", - "gif": "", - "id": "Bryan-qcf+4,1,4", - "input": "qcf+4,1,4", - "name": "Snake Spin Kickass", - "notes": "\n* \nTornado\n* Alternate input:\n** 1,4,2,1,4\n** b+2,1,4", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "m,h,m" - }, - { - "damage": "55+", - "gif": "", - "id": "Bryan-R.1+2", - "input": "R.1+2", - "name": "Total Vandalization", - "notes": "\n* Rage Art", - "on_block": "-15", - "on_ch": "", - "on_hit": "+0d", - "recovery": "", - "startup": "i20", - "target": "m" - }, - { - "damage": "40", - "gif": "", - "id": "Bryan-Right throw", - "input": "Right throw", - "name": "Knee Blast", - "notes": "\n* Throw break 2", - "on_block": "", - "on_ch": "", - "on_hit": "+6d", - "recovery": "", - "startup": "", - "target": "t" - }, - { - "damage": "36", - "gif": "", - "id": "Bryan-SE.f,F+1+2", - "input": "SE.f,F+1+2", - "name": "Neo Mach Breaker", - "notes": "\n* Consumes SE\n* Chip damage 14 (38%) on block\n* Transition into Immortal Payback on opponent attack absorb", - "on_block": "+5", - "on_ch": "", - "on_hit": "+33a (+7)", - "recovery": "", - "startup": "i13", - "target": "h" - }, - { - "damage": "20", - "gif": "", - "id": "Bryan-SE.f,F+1+2 (on absorb)", - "input": "SE.f,F+1+2 (on absorb)", - "name": "Immortal Payback", - "notes": "\n* \nBalcony break\n* Consumes SE (again?)[[[Template:Untested|untested]]]", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "m" - }, - { - "damage": "23", - "gif": "", - "id": "Bryan-ss1", - "input": "ss1", - "name": "Hellraiser", - "notes": "", - "on_block": "-5", - "on_ch": "+15", - "on_hit": "+8", - "recovery": "", - "startup": "i17~18", - "target": "h" - }, - { - "damage": "15", - "gif": "", - "id": "Bryan-ss2", - "input": "ss2", - "name": "", - "notes": "", - "on_block": "-9", - "on_ch": "", - "on_hit": "+1", - "recovery": "", - "startup": "i17~18", - "target": "m" - }, - { - "damage": "15,20", - "gif": "", - "id": "Bryan-ss2,1", - "input": "ss2,1", - "name": "", - "notes": "\n* \nHeat Engager\n* \nBalcony break\n* Combo from 1st hit with delay\n* Move can be delayed", - "on_block": "-5", - "on_ch": "", - "on_hit": "+43d (-15)", - "recovery": "", - "startup": "i21~22", - "target": "m,h" - }, - { - "damage": "5,2", - "gif": "", - "id": "Bryan-ub+1+2", - "input": "ub+1+2", - "name": "", - "notes": "\n* Combo from 1st hit\n* Chip damage on block", - "on_block": "-16", - "on_ch": "", - "on_hit": "-6", - "recovery": "", - "startup": "i15", - "target": "m,m" - }, - { - "damage": "5,2,2", - "gif": "", - "id": "Bryan-ub+1+2,1", - "input": "ub+1+2,1", - "name": "", - "notes": "\n* Combo from 1st hit\n* Chip damage on block", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "m,m,m" - }, - { - "damage": "5,2,2,2", - "gif": "", - "id": "Bryan-ub+1+2,1,2", - "input": "ub+1+2,1,2", - "name": "", - "notes": "\n* Combo from 1st hit\n* Chip damage on block", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "m,m,m,m" - }, - { - "damage": "5,2,2,2,2", - "gif": "", - "id": "Bryan-ub+1+2,1,2,1", - "input": "ub+1+2,1,2,1", - "name": "", - "notes": "\n* Combo from 1st hit\n* Chip damage on block", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "m,m,m,m,m" - }, - { - "damage": "5,2,2,2,2,2", - "gif": "", - "id": "Bryan-ub+1+2,1,2,1,2", - "input": "ub+1+2,1,2,1,2", - "name": "", - "notes": "\n* Combo from 1st hit\n* Chip damage on block", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "m,m,m,m,m,m" - }, - { - "damage": "5,2,2,2,2,2,2", - "gif": "", - "id": "Bryan-ub+1+2,1,2,1,2,1", - "input": "ub+1+2,1,2,1,2,1", - "name": "", - "notes": "\n* Combo from 1st hit\n* Chip damage on block", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "m,m,m,m,m,m,m" - }, - { - "damage": "5,2,2,2,2,2,2,2", - "gif": "", - "id": "Bryan-ub+1+2,1,2,1,2,1,2", - "input": "ub+1+2,1,2,1,2,1,2", - "name": "", - "notes": "\n* Combo from 1st hit\n* Chip damage on block", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "m,m,m,m,m,m,m,m" - }, - { - "damage": "5,2,2,2,2,2,2,2,2", - "gif": "", - "id": "Bryan-ub+1+2,1,2,1,2,1,2,1", - "input": "ub+1+2,1,2,1,2,1,2,1", - "name": "", - "notes": "\n* Combo from 1st hit\n* Chip damage on block", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "m,m,m,m,m,m,m,m,m" - }, - { - "damage": "5,2,2,2,2,2,2,2,2,2", - "gif": "", - "id": "Bryan-ub+1+2,1,2,1,2,1,2,1,2", - "input": "ub+1+2,1,2,1,2,1,2,1,2", - "name": "", - "notes": "\n* Combo from 1st hit\n* Chip damage on block", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "m,m,m,m,m,m,m,m,m,m" - }, - { - "damage": "5,2,2,2,2,2,2,2,2,2,2", - "gif": "", - "id": "Bryan-ub+1+2,1,2,1,2,1,2,1,2,1", - "input": "ub+1+2,1,2,1,2,1,2,1,2,1", - "name": "", - "notes": "\n* Combo from 1st hit\n* Chip damage on block", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "m,m,m,m,m,m,m,m,m,m,m" - }, - { - "damage": "5,2,2,2,2,2,2,2,2,2,2,14", - "gif": "", - "id": "Bryan-ub+1+2,1,2,1,2,1,2,1,2,1,4", - "input": "ub+1+2,1,2,1,2,1,2,1,2,1,4", - "name": "Gatling Rush", - "notes": "\n* \nKnee\n* \nBalcony break\n* Combo from 1st hit\n* Chip damage on block", - "on_block": "-35", - "on_ch": "", - "on_hit": "-15a (-24)", - "recovery": "", - "startup": "", - "target": "m,m,m,m,m,m,m,m,m,m,m,m" - }, - { - "damage": "40", - "gif": "", - "id": "Bryan-uf+1+2", - "input": "uf+1+2", - "name": "Neck throw", - "notes": "\n* \nFloor break\n* Throw break 1+2", - "on_block": "", - "on_ch": "", - "on_hit": "-5d", - "recovery": "", - "startup": "i12", - "target": "t" - }, - { - "damage": "6", - "gif": "", - "id": "Bryan-uf+2", - "input": "uf+2", - "name": "", - "notes": "", - "on_block": "-10", - "on_ch": "", - "on_hit": "+1", - "recovery": "", - "startup": "i13", - "target": "m" - }, - { - "damage": "6,4", - "gif": "", - "id": "Bryan-uf+2,2", - "input": "uf+2,2", - "name": "", - "notes": "Combo from 1st hit", - "on_block": "-10", - "on_ch": "", - "on_hit": "+1", - "recovery": "", - "startup": ",i10", - "target": "m,m" - }, - { - "damage": "6,4,4", - "gif": "", - "id": "Bryan-uf+2,2,2", - "input": "uf+2,2,2", - "name": "", - "notes": "Combo from 1st hit", - "on_block": "-10", - "on_ch": "", - "on_hit": "+1", - "recovery": "", - "startup": "i10", - "target": "m,m,m" - }, - { - "damage": "6,4,4,20", - "gif": "", - "id": "Bryan-uf+2,2,2,3", - "input": "uf+2,2,2,3", - "name": "", - "notes": "\n* \nKnee\n* Combo from 1st hit", - "on_block": "-15", - "on_ch": "", - "on_hit": "+30a (+12)", - "recovery": "", - "startup": ",i22~23", - "target": "m,m,m,m" - }, - { - "damage": "6,4,4,?", - "gif": "", - "id": "Bryan-uf+2,2,2,SE.2", - "input": "uf+2,2,2,SE.2", - "name": "", - "notes": "\n* 6 (4) damage on airborne opponent at 70% scaling - 9 damage?\n* Consumes SE\n* Chip damage 2 (22%) on block", - "on_block": "-12", - "on_ch": "", - "on_hit": "+21a (+14)", - "recovery": "", - "startup": "i10", - "target": "m,m,m,m" - }, - { - "damage": "6,4,4,?,?", - "gif": "", - "id": "Bryan-uf+2,2,2,SE.2,2", - "input": "uf+2,2,2,SE.2,2", - "name": "", - "notes": "\n* 4 (2) damage on airborne opponent at 50% (70%) scaling\n* Chip damage 2 (22%) on block", - "on_block": "-12", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "i10", - "target": "m,m,m,m,m" - }, - { - "damage": "6,4,4,?,?,?", - "gif": "", - "id": "Bryan-uf+2,2,2,SE.2,2,3", - "input": "uf+2,2,2,SE.2,2,3", - "name": "", - "notes": "\n* 9 (6) damage on airborne opponent at 40% (70%) scaling\n* Chip damage 9 (39%) on block", - "on_block": "-15", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "i22~23", - "target": "m,m,m,m,m,m" - }, - { - "damage": "15", - "gif": "", - "id": "Bryan-uf+3", - "input": "uf+3", - "name": "Rolling Driver", - "notes": "Alternate input u+3", - "on_block": "-2", - "on_ch": "", - "on_hit": "+15", - "recovery": "", - "startup": "i27~28", - "target": "m" - }, - { - "damage": "22", - "gif": "", - "id": "Bryan-uf+3+4", - "input": "uf+3+4", - "name": "Bullet Knee > Snake Eyes", - "notes": "\n* \nTornado\n* \nKnee\n* Gain SE on hit", - "on_block": "-7", - "on_ch": "", - "on_hit": "+8a", - "recovery": "", - "startup": "i16~17", - "target": "m" - }, - { - "damage": "20", - "gif": "", - "id": "Bryan-uf+4", - "input": "uf+4", - "name": "Orbital Heel Kick", - "notes": "Alternate input u+4", - "on_block": "", - "on_ch": "", - "on_hit": "", - "recovery": "", - "startup": "", - "target": "m" - }, - { - "damage": "20", - "gif": "", - "id": "Bryan-uf,n,4", - "input": "uf,n,4", - "name": "Delayed Rising Toe Kick", - "notes": "", - "on_block": "-13", - "on_ch": "", - "on_hit": "+32a (+22)", - "recovery": "", - "startup": "i23~25", - "target": "m" - }, - { - "damage": "20", - "gif": "", - "id": "Bryan-ws1", - "input": "ws1", - "name": "Left Upper", - "notes": "Alternate input qcf+1", - "on_block": "-14", - "on_ch": "", - "on_hit": "+35a (+25)", - "recovery": "", - "startup": "i15~16", - "target": "m" - }, - { - "damage": "10,20", - "gif": "", - "id": "Bryan-ws2", - "input": "ws2", - "name": "Fisherman's Slam", - "notes": "\n* Throw only on hit\n* Powerup with f+2 or b+2 (perfect) - additional 5 damage", - "on_block": "-10", - "on_ch": "", - "on_hit": "+50a", - "recovery": "", - "startup": "i19", - "target": "m,t" - }, - { - "damage": "17", - "gif": "", - "id": "Bryan-ws3", - "input": "ws3", - "name": "High Knee Kick", - "notes": "\n* Alternate input qcf+3", - "on_block": "-10", - "on_ch": "+33a (+27)", - "on_hit": "+4", - "recovery": "", - "startup": "i12", - "target": "m" - }, - { - "damage": "17,21", - "gif": "", - "id": "Bryan-ws3,4", - "input": "ws3,4", - "name": "Double High Knee Kick", - "notes": "\n* Alternate input qcf+3,4\n* Move can be delayed", - "on_block": "-10", - "on_ch": "+29g", - "on_hit": "+4", - "recovery": "", - "startup": ",i28", - "target": "m,m" - }, - { - "damage": "16", - "gif": "", - "id": "Bryan-ws4", - "input": "ws4", - "name": "Toe Kick", - "notes": "", - "on_block": "-6", - "on_ch": "", - "on_hit": "+5", - "recovery": "", - "startup": "i11~12", - "target": "m" - } -] \ No newline at end of file diff --git a/src/main.py b/src/main.py index 512d637..1c58857 100644 --- a/src/main.py +++ b/src/main.py @@ -1,8 +1,14 @@ import json, datetime, logging, os, discord, sched, time +from typing import List from src.module import character_importer from src.module import configurator from src.module import json_movelist_reader +from src.module import embed +from src.module import util +from src.module import character + + from threading import Thread @@ -14,6 +20,7 @@ character_list_path = "resources/character_list.json" discord_token = config.read_config()['DISCORD_TOKEN'] +character_list = [] class heihachi(discord.Client): def __init__(self, *, intents: discord.Intents): @@ -39,20 +46,31 @@ async def on_ready(self): @tree.command(name="fd", description="Frame data from a character move", guild=discord.Object("645011181739835397")) async def self(interaction: discord.Interaction, character_name: str, move: str): - character_name = character_name.lower() + character_name = util.correct_character_name(character_name.lower()) + character = util.get_character_by_name(character_name, character_list) + move_list = json_movelist_reader.get_movelist_from_json(character_name) - result = json_movelist_reader.get_move(move, move_list) - await interaction.response.send_message(content=result, ephemeral=False) + character_move = json_movelist_reader.get_move(move, move_list) + move_embed = embed.move_embed(character, character_move) + await interaction.response.send_message(embed=move_embed, ephemeral=False) -def create_all_character_json(character_list_path: str, scheduler): - try: - with open(character_list_path) as file: - characters = json.load(file) +def create_all_character_json(character_list_path: str) -> List[character.Character]: + with open(character_list_path) as file: + characters = json.load(file) + character_list = [] - for character_meta in characters: - character = character_importer.import_character(character_meta) - character.export_movelist_as_json() + for character_meta in characters: + character = character_importer.import_character(character_meta) + character.export_movelist_as_json() + character_list.append(character) + + return character_list + + +def schedule_create_all_characters(character_list_path: str, scheduler): + try: + create_all_character_json(character_list_path) scheduler.enter(3600,1,create_all_character_json, (character_list_path,scheduler,)) except Exception as e: @@ -61,8 +79,10 @@ def create_all_character_json(character_list_path: str, scheduler): try: ## Repeat creating character json once an hour + character_list = create_all_character_json(character_list_path) + print("Character jsons are successfully created") scheduler = sched.scheduler(time.time, time.sleep) - scheduler.enter(3600,1,create_all_character_json, (character_list_path,scheduler,)) + scheduler.enter(3600,1,schedule_create_all_characters, (character_list_path,scheduler,)) Thread(target=scheduler.run).start() client.run(discord_token) diff --git a/src/module/character.py b/src/module/character.py index 5a5866d..89266ed 100644 --- a/src/module/character.py +++ b/src/module/character.py @@ -1,7 +1,7 @@ from typing import List import os, json from json import JSONEncoder - +import re class Move: def __init__(self, id: str, name: str, input: str, target: str, damage: str, on_block: str, on_hit: str, on_ch: str, @@ -34,7 +34,7 @@ def __init__(self, name: str, portrait: str, move_list: List[Move], move_list_pa def export_movelist_as_json(self): self.__create_move_list_file() - with open(self.move_list_path, "w", encoding='utf8') as outfile: + with open(self.move_list_path, "w", encoding='utf-8') as outfile: json.dump(self.move_list, outfile, sort_keys=True, indent=4, cls=MoveEncoder, ensure_ascii=False) def __create_move_list_file(self): @@ -45,3 +45,5 @@ def __create_move_list_file(self): class ClassEncoder(JSONEncoder): def default(self, o): return o.__dict__ + + diff --git a/src/module/embed.py b/src/module/embed.py index 82b4077..59e53a3 100644 --- a/src/module/embed.py +++ b/src/module/embed.py @@ -1,111 +1,29 @@ import discord from random import randint +from src.module import character + import re MOVE_NOT_FOUND_TITLE = 'Move not found' -def move_embed(character, move): +def move_embed(character :character, move :dict): """Returns the embed message for character and move""" - embed = discord.Embed(title=character['proper_name'], + embed = discord.Embed(title=character.name, colour=0x00EAFF, - url=character['online_webpage'], - description='**Move: ' + move['Command'] + '**') - embed.set_thumbnail(url=character['portrait']) - - block = "Block" - counterhit = "Counter hit" - - if 'Throw' in move['Tags']: - block = "On Break" - counterhit = "Break Type" - - embed.add_field(name='Property', value=move['Hit level']) - embed.add_field(name='Damage', value=move['Damage']) - - result = re.match('^\d', move['Start up frame']) - - if result: - embed.add_field(name='Startup', value='i' + move['Start up frame']) - else: - embed.add_field(name='Startup', value=move['Start up frame']) - - embed.add_field(name=block, value=move['Block frame']) - embed.add_field(name='Hit', value=move['Hit frame']) - embed.add_field(name=counterhit, value=move['Counter hit frame']) - - if 'Recovery' in move: - embed.add_field(name='On whiff', value=move['Recovery']) - if 'Notes' in move and move['Notes'] and not move['Notes'] == "-": - embed.add_field(name='Notes', value=move['Notes']) - if 'Gif' in move and move['Gif'] and not move['Gif'] == "-": - embed.add_field(name='Gif', value=move['Gif'], inline=False) - if 'Tags' in move and move['Tags'] and not move['Tags'] == "-": - embed.add_field(name='Tags', value=move['Tags'], inline=False) - - random_value = randint(0, 2) - if random_value == 2: - embed.add_field(name='Dev Note', - value='**IMPORTANT** \n The bot for T7 will shutdown on the 25th Jan 2024', - inline=False) - - return embed - - -def move_list_embed(character, move_list, move_type): - """Returns the embed message for a list of moves matching to a special move type""" - desc_string = '' - move_list.sort() - for move in move_list: - desc_string += move + '\n' - - embed = discord.Embed(title=character['proper_name'] + ' ' + move_type.lower() + ':', - colour=0x00EAFF, - description=desc_string) - return embed - - -def error_embed(err): - embed = discord.Embed(title='Error', - colour=0xFF4500, - description=err) - return embed - - -def success_embed(message): - embed = discord.Embed(title='Success', - colour=0x3ddb2c, - description=message) - return embed - - -def similar_moves_embed(similar_moves, character_name): - for i in range(len(similar_moves)): - similar_moves[i] = f'**{i + 1}**. {similar_moves[i]}' - - embed = discord.Embed(title=MOVE_NOT_FOUND_TITLE, colour=0xfcba03, - description='Similar moves from {}\n{}' - .format(character_name, '\n'.join(similar_moves))) - return embed + description='**Move: ' + move['input'] + '**') + embed.set_thumbnail(url=character.portrait) + embed.set_footer(text=move['name']) + embed.add_field(name='Target', value=move['target']) + embed.add_field(name='Damage', value=move['damage']) -def help_embed(): - text = "**Slash command** \n" \ - "/fd \t\t\t- get frame data of a move from a character \n" \ - "/last-updates\t\t\t- get the messages of some latest updates\n" \ - "/feedback \t\t\t- send message including sender name to the devs \n\n" \ - "**Direct Ping** \n " \ - "@discordbot \t\t\t- get frame data of a move from a character \n\n" - embed = discord.Embed(title='Commands', description=text, colour=0x37ba25) - embed.set_author(name='Author: Tib#1303') + embed.add_field(name='Startup', value=move['startup']) - return embed + embed.add_field(name="Block", value=move['on_block']) + embed.add_field(name='Hit', value=move['on_hit']) + embed.add_field(name="CH", value=move['on_ch']) + embed.add_field(name="Notes", value=move['notes']) -def thank_embed(): - text = "\n\n" \ - "Much thanks and love especially to T7Chicken Team, Ruxx, BKNR, Vesper, Maxwell and Evil. \n\n" \ - "This project won't be possible without you guys <3" - embed = discord.Embed(title='Commands', description=text, colour=0x37ba25) - embed.set_author(name='Author: Tib') - return embed + return embed \ No newline at end of file diff --git a/src/module/json_movelist_reader.py b/src/module/json_movelist_reader.py index 514ee63..d40e586 100644 --- a/src/module/json_movelist_reader.py +++ b/src/module/json_movelist_reader.py @@ -1,27 +1,12 @@ from src.resources import const -from src.module import character_importer, character import os, json base_path = os.path.dirname(__file__) -def _correct_character_name(alias: str): - # check if input in dictionary or in dictionary values - if alias in const.CHARACTER_ALIAS: - return alias - - for key, value in const.CHARACTER_ALIAS.items(): - if alias in value: - return key - - return None - - def get_movelist_from_json(character_name: str) -> dict: - character_name = _correct_character_name(character_name) os.path.abspath(os.path.join(base_path, "..", "json_movelist", character_name + ".json")) filepath = os.path.abspath(os.path.join(base_path, "..", "json_movelist", character_name + ".json")) - with open(filepath) as move_file: move_file_contents = json.loads(move_file.read()) return move_file_contents diff --git a/src/module/util.py b/src/module/util.py new file mode 100644 index 0000000..6b14393 --- /dev/null +++ b/src/module/util.py @@ -0,0 +1,21 @@ +from src.resources import const +from src.module import character + + +def correct_character_name(alias: str): + # check if input in dictionary or in dictionary values + if alias in const.CHARACTER_ALIAS: + return alias + + for key, value in const.CHARACTER_ALIAS.items(): + if alias in value: + return key + + return None + +def get_character_by_name(name :str, character_list :[]) -> character.Character: + for character in character_list: + if character.name == name: + return character + + diff --git a/src/resources/character_list.json b/src/resources/character_list.json index b567afe..bc45741 100644 --- a/src/resources/character_list.json +++ b/src/resources/character_list.json @@ -1,10 +1,10 @@ [ { "name": "azucena", - "portrait": "x" + "portrait": "https://i.imgur.com/yeyRqH2.jpg" }, { "name": "bryan", - "portrait": "x" + "portrait": "https://i.imgur.com/PV9xTeM.jpg" } ] \ No newline at end of file diff --git a/src/wavu/wavu_reader.py b/src/wavu/wavu_reader.py index bb6f667..3723ade 100644 --- a/src/wavu/wavu_reader.py +++ b/src/wavu/wavu_reader.py @@ -54,21 +54,23 @@ def _get_all_parent_values_of(field: str, move_id: str, move_list_json: list) -> else: return "" +def _remove_non_ascii(data): + return re.sub(r'[^\x00-\x7F]+', '', data) def _convert_json_movelist(move_list_json: list) -> List[Move]: move_list = [] for move in move_list_json: - id = move["title"]["id"] - name = move["title"]["name"] - input = _get_all_parent_values_of("input", move["title"]["parent"], move_list_json) + move["title"]["input"] - target = _get_all_parent_values_of("target", move["title"]["parent"], move_list_json) + move["title"]["target"] - damage = _get_all_parent_values_of("damage", move["title"]["parent"], move_list_json) + move["title"]["damage"] + id = _remove_non_ascii(move["title"]["id"]) + name = _remove_non_ascii(move["title"]["name"]) + input = _remove_non_ascii(_get_all_parent_values_of("input", move["title"]["parent"], move_list_json) + move["title"]["input"]) + target = _remove_non_ascii(_get_all_parent_values_of("target", move["title"]["parent"], move_list_json) + move["title"]["target"]) + damage = _remove_non_ascii(_get_all_parent_values_of("damage", move["title"]["parent"], move_list_json) + move["title"]["damage"]) - on_block = move["title"]["block"] - on_hit = _normalize_hit_ch_input(move["title"]["hit"]) - on_ch = _normalize_hit_ch_input(move["title"]["ch"]) - startup = move["title"]["startup"] - recovery = move["title"]["recv"] + on_block = _remove_non_ascii(move["title"]["block"]) + on_hit = _remove_non_ascii(_normalize_hit_ch_input(move["title"]["hit"])) + on_ch = _remove_non_ascii(_normalize_hit_ch_input(move["title"]["ch"])) + startup = _remove_non_ascii(move["title"]["startup"]) + recovery = _remove_non_ascii(move["title"]["recv"]) notes = html.unescape(move["title"]["notes"]) notes = BeautifulSoup(notes, features="lxml").get_text()