Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@PikalaxALT
Created November 5, 2019 22:08
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save PikalaxALT/702f2205eac650a56bf2cd69c57b54cf to your computer and use it in GitHub Desktop.
Save PikalaxALT/702f2205eac650a56bf2cd69c57b54cf to your computer and use it in GitHub Desktop.
Battle script dumper
import json
import re
SONGS = [
'MUS_DUMMY',
'SE_KAIFUKU',
'SE_PC_LOGIN',
'SE_PC_OFF',
'SE_PC_ON',
'SE_SELECT',
'SE_WIN_OPEN',
'SE_WALL_HIT',
'SE_DOOR',
'SE_KAIDAN',
'SE_DANSA',
'SE_JITENSYA',
'SE_KOUKA_L',
'SE_KOUKA_M',
'SE_KOUKA_H',
'SE_BOWA2',
'SE_POKE_DEAD',
'SE_NIGERU',
'SE_JIDO_DOA',
'SE_NAMINORI',
'SE_BAN',
'SE_PIN',
'SE_BOO',
'SE_BOWA',
'SE_JYUNI',
'SE_SEIKAI',
'SE_HAZURE',
'SE_EXP',
'SE_JITE_PYOKO',
'SE_MU_PACHI',
'SE_TK_KASYA',
'SE_FU_ZAKU',
'SE_FU_ZAKU2',
'SE_FU_ZUZUZU',
'SE_RU_GASHIN',
'SE_RU_GASYAN',
'SE_RU_BARI',
'SE_RU_HYUU',
'SE_KI_GASYAN',
'SE_TK_WARPIN',
'SE_TK_WARPOUT',
'SE_TU_SAA',
'SE_HI_TURUN',
'SE_TRACK_MOVE',
'SE_TRACK_STOP',
'SE_TRACK_HAIKI',
'SE_TRACK_DOOR',
'SE_MOTER',
'SE_SAVE',
'SE_KON',
'SE_KON2',
'SE_KON3',
'SE_KON4',
'SE_SUIKOMU',
'SE_NAGERU',
'SE_TOY_C',
'SE_TOY_D',
'SE_TOY_E',
'SE_TOY_F',
'SE_TOY_G',
'SE_TOY_A',
'SE_TOY_B',
'SE_TOY_C1',
'SE_MIZU',
'SE_HASHI',
'SE_DAUGI',
'SE_PINPON',
'SE_FUUSEN1',
'SE_FUUSEN2',
'SE_FUUSEN3',
'SE_TOY_KABE',
'SE_TOY_DANGO',
'SE_DOKU',
'SE_ESUKA',
'SE_T_AME',
'SE_T_AME_E',
'SE_T_OOAME',
'SE_T_OOAME_E',
'SE_T_KOAME',
'SE_T_KOAME_E',
'SE_T_KAMI',
'SE_T_KAMI2',
'SE_ELEBETA',
'SE_HINSI',
'SE_EXPMAX',
'SE_TAMAKORO',
'SE_TAMAKORO_E',
'SE_BASABASA',
'SE_REGI',
'SE_C_GAJI',
'SE_C_MAKU_U',
'SE_C_MAKU_D',
'SE_C_PASI',
'SE_C_SYU',
'SE_C_PIKON',
'SE_REAPOKE',
'SE_OP_BASYU',
'SE_BT_START',
'SE_DENDOU',
'SE_JIHANKI',
'SE_TAMA',
'SE_Z_SCROLL',
'SE_Z_PAGE',
'SE_PN_ON',
'SE_PN_OFF',
'SE_Z_SEARCH',
'SE_TAMAGO',
'SE_TB_START',
'SE_TB_KON',
'SE_TB_KARA',
'SE_BIDORO',
'SE_W085',
'SE_W085B',
'SE_W231',
'SE_W171',
'SE_W233',
'SE_W233B',
'SE_W145',
'SE_W145B',
'SE_W145C',
'SE_W240',
'SE_W015',
'SE_W081',
'SE_W081B',
'SE_W088',
'SE_W016',
'SE_W016B',
'SE_W003',
'SE_W104',
'SE_W013',
'SE_W196',
'SE_W086',
'SE_W004',
'SE_W025',
'SE_W025B',
'SE_W152',
'SE_W026',
'SE_W172',
'SE_W172B',
'SE_W053',
'SE_W007',
'SE_W092',
'SE_W221',
'SE_W221B',
'SE_W052',
'SE_W036',
'SE_W059',
'SE_W059B',
'SE_W010',
'SE_W011',
'SE_W017',
'SE_W019',
'SE_W028',
'SE_W013B',
'SE_W044',
'SE_W029',
'SE_W057',
'SE_W056',
'SE_W250',
'SE_W030',
'SE_W039',
'SE_W054',
'SE_W077',
'SE_W020',
'SE_W082',
'SE_W047',
'SE_W195',
'SE_W006',
'SE_W091',
'SE_W146',
'SE_W120',
'SE_W153',
'SE_W071B',
'SE_W071',
'SE_W103',
'SE_W062',
'SE_W062B',
'SE_W048',
'SE_W187',
'SE_W118',
'SE_W155',
'SE_W122',
'SE_W060',
'SE_W185',
'SE_W014',
'SE_W043',
'SE_W207',
'SE_W207B',
'SE_W215',
'SE_W109',
'SE_W173',
'SE_W280',
'SE_W202',
'SE_W060B',
'SE_W076',
'SE_W080',
'SE_W100',
'SE_W107',
'SE_W166',
'SE_W129',
'SE_W115',
'SE_W112',
'SE_W197',
'SE_W199',
'SE_W236',
'SE_W204',
'SE_W268',
'SE_W070',
'SE_W063',
'SE_W127',
'SE_W179',
'SE_W151',
'SE_W201',
'SE_W161',
'SE_W161B',
'SE_W227',
'SE_W227B',
'SE_W226',
'SE_W208',
'SE_W213',
'SE_W213B',
'SE_W234',
'SE_W260',
'SE_W328',
'SE_W320',
'SE_W255',
'SE_W291',
'SE_W089',
'SE_W239',
'SE_W230',
'SE_W281',
'SE_W327',
'SE_W287',
'SE_W257',
'SE_W253',
'SE_W258',
'SE_W322',
'SE_W298',
'SE_W287B',
'SE_W114',
'SE_W063B',
'MUS_W_DOOR',
'SE_CARD1',
'SE_CARD2',
'SE_CARD3',
'SE_BAG1',
'SE_BAG2',
'SE_GETTING',
'SE_SHOP',
'SE_KITEKI',
'SE_HELP_OP',
'SE_HELP_CL',
'SE_HELP_NG',
'SE_DEOMOV',
'SE_EXCELLENT',
'SE_NAWAMISS',
'MUS_ME_ASA',
'MUS_FANFA1',
'MUS_FANFA4',
'MUS_FANFA5',
'MUS_ME_BACHI',
'MUS_ME_WAZA',
'MUS_ME_KINOMI',
'MUS_ME_SHINKA',
'MUS_SHINKA',
'MUS_BATTLE32',
'MUS_BATTLE20',
'MUS_P_SCHOOL',
'MUS_ME_B_BIG',
'MUS_ME_B_SMALL',
'MUS_ME_WASURE',
'MUS_ME_ZANNEN',
'MUS_ANNAI',
'MUS_SLOT',
'MUS_AJITO',
'MUS_GYM',
'MUS_PURIN',
'MUS_DEMO',
'MUS_TITLE',
'MUS_GUREN',
'MUS_SHION',
'MUS_KAIHUKU',
'MUS_CYCLING',
'MUS_ROCKET',
'MUS_SHOUJO',
'MUS_SHOUNEN',
'MUS_DENDOU',
'MUS_T_MORI',
'MUS_OTSUKIMI',
'MUS_POKEYASHI',
'MUS_ENDING',
'MUS_LOAD01',
'MUS_OPENING',
'MUS_LOAD02',
'MUS_LOAD03',
'MUS_CHAMP_R',
'MUS_VS_GYM',
'MUS_VS_TORE',
'MUS_VS_YASEI',
'MUS_VS_LAST',
'MUS_MASARA',
'MUS_KENKYU',
'MUS_OHKIDO',
'MUS_POKECEN',
'MUS_SANTOAN',
'MUS_NAMINORI',
'MUS_P_TOWER',
'MUS_SHIRUHU',
'MUS_HANADA',
'MUS_TAMAMUSI',
'MUS_WIN_TRE',
'MUS_WIN_YASEI',
'MUS_WIN_GYM',
'MUS_KUCHIBA',
'MUS_NIBI',
'MUS_RIVAL1',
'MUS_RIVAL2',
'MUS_FAN2',
'MUS_FAN5',
'MUS_FAN6',
'MUS_ME_PHOTO',
'MUS_TITLEROG',
'MUS_GET_YASEI',
'MUS_SOUSA',
'MUS_SEKAIKAN',
'MUS_SEIBETU',
'MUS_JUMP',
'MUS_UNION',
'MUS_NETWORK',
'MUS_OKURIMONO',
'MUS_KINOMIKUI',
'MUS_NANADUNGEON',
'MUS_OSHIE_TV',
'MUS_NANASHIMA',
'MUS_NANAISEKI',
'MUS_NANA123',
'MUS_NANA45',
'MUS_NANA67',
'MUS_POKEFUE',
'MUS_VS_DEO',
'MUS_VS_MYU2',
'MUS_VS_DEN',
'MUS_EXEYE',
'MUS_DEOEYE',
'MUS_T_TOWER',
'MUS_SLOWMASARA',
'MUS_TVNOIZE',
]
STRING_IDS = [
'STRINGID_INTROMSG',
'STRINGID_INTROSENDOUT',
'STRINGID_RETURNMON',
'STRINGID_SWITCHINMON',
'STRINGID_USEDMOVE',
'STRINGID_BATTLEEND',
None,
None,
None,
None,
None,
None,
'STRINGID_TRAINER1LOSETEXT',
'STRINGID_PKMNGAINEDEXP',
'STRINGID_PKMNGREWTOLV',
'STRINGID_PKMNLEARNEDMOVE',
'STRINGID_TRYTOLEARNMOVE1',
'STRINGID_TRYTOLEARNMOVE2',
'STRINGID_TRYTOLEARNMOVE3',
'STRINGID_PKMNFORGOTMOVE',
'STRINGID_STOPLEARNINGMOVE',
'STRINGID_DIDNOTLEARNMOVE',
'STRINGID_PKMNLEARNEDMOVE2',
'STRINGID_ATTACKMISSED',
'STRINGID_PKMNPROTECTEDITSELF',
'STRINGID_STATSWONTINCREASE2',
'STRINGID_AVOIDEDDAMAGE',
'STRINGID_ITDOESNTAFFECT',
'STRINGID_ATTACKERFAINTED',
'STRINGID_TARGETFAINTED',
'STRINGID_PLAYERGOTMONEY',
'STRINGID_PLAYERWHITEOUT',
'STRINGID_PLAYERWHITEOUT2',
'STRINGID_PREVENTSESCAPE',
'STRINGID_HITXTIMES',
'STRINGID_PKMNFELLASLEEP',
'STRINGID_PKMNMADESLEEP',
'STRINGID_PKMNALREADYASLEEP',
'STRINGID_PKMNALREADYASLEEP2',
'STRINGID_PKMNWASNTAFFECTED',
'STRINGID_PKMNWASPOISONED',
'STRINGID_PKMNPOISONEDBY',
'STRINGID_PKMNHURTBYPOISON',
'STRINGID_PKMNALREADYPOISONED',
'STRINGID_PKMNBADLYPOISONED',
'STRINGID_PKMNENERGYDRAINED',
'STRINGID_PKMNWASBURNED',
'STRINGID_PKMNBURNEDBY',
'STRINGID_PKMNHURTBYBURN',
'STRINGID_PKMNWASFROZEN',
'STRINGID_PKMNFROZENBY',
'STRINGID_PKMNISFROZEN',
'STRINGID_PKMNWASDEFROSTED',
'STRINGID_PKMNWASDEFROSTED2',
'STRINGID_PKMNWASDEFROSTEDBY',
'STRINGID_PKMNWASPARALYZED',
'STRINGID_PKMNWASPARALYZEDBY',
'STRINGID_PKMNISPARALYZED',
'STRINGID_PKMNISALREADYPARALYZED',
'STRINGID_PKMNHEALEDPARALYSIS',
'STRINGID_PKMNDREAMEATEN',
'STRINGID_STATSWONTINCREASE',
'STRINGID_STATSWONTDECREASE',
'STRINGID_TEAMSTOPPEDWORKING',
'STRINGID_FOESTOPPEDWORKING',
'STRINGID_PKMNISCONFUSED',
'STRINGID_PKMNHEALEDCONFUSION',
'STRINGID_PKMNWASCONFUSED',
'STRINGID_PKMNALREADYCONFUSED',
'STRINGID_PKMNFELLINLOVE',
'STRINGID_PKMNINLOVE',
'STRINGID_PKMNIMMOBILIZEDBYLOVE',
'STRINGID_PKMNBLOWNAWAY',
'STRINGID_PKMNCHANGEDTYPE',
'STRINGID_PKMNFLINCHED',
'STRINGID_PKMNREGAINEDHEALTH',
'STRINGID_PKMNHPFULL',
'STRINGID_PKMNRAISEDSPDEF',
'STRINGID_PKMNRAISEDDEF',
'STRINGID_PKMNCOVEREDBYVEIL',
'STRINGID_PKMNUSEDSAFEGUARD',
'STRINGID_PKMNSAFEGUARDEXPIRED',
'STRINGID_PKMNWENTTOSLEEP',
'STRINGID_PKMNSLEPTHEALTHY',
'STRINGID_PKMNWHIPPEDWHIRLWIND',
'STRINGID_PKMNTOOKSUNLIGHT',
'STRINGID_PKMNLOWEREDHEAD',
'STRINGID_PKMNISGLOWING',
'STRINGID_PKMNFLEWHIGH',
'STRINGID_PKMNDUGHOLE',
'STRINGID_PKMNSQUEEZEDBYBIND',
'STRINGID_PKMNTRAPPEDINVORTEX',
'STRINGID_PKMNWRAPPEDBY',
'STRINGID_PKMNCLAMPED',
'STRINGID_PKMNHURTBY',
'STRINGID_PKMNFREEDFROM',
'STRINGID_PKMNCRASHED',
'STRINGID_PKMNSHROUDEDINMIST',
'STRINGID_PKMNPROTECTEDBYMIST',
'STRINGID_PKMNGETTINGPUMPED',
'STRINGID_PKMNHITWITHRECOIL',
'STRINGID_PKMNPROTECTEDITSELF2',
'STRINGID_PKMNBUFFETEDBYSANDSTORM',
'STRINGID_PKMNPELTEDBYHAIL',
'STRINGID_PKMNSEEDED',
'STRINGID_PKMNEVADEDATTACK',
'STRINGID_PKMNSAPPEDBYLEECHSEED',
'STRINGID_PKMNFASTASLEEP',
'STRINGID_PKMNWOKEUP',
'STRINGID_PKMNUPROARKEPTAWAKE',
'STRINGID_PKMNWOKEUPINUPROAR',
'STRINGID_PKMNCAUSEDUPROAR',
'STRINGID_PKMNMAKINGUPROAR',
'STRINGID_PKMNCALMEDDOWN',
'STRINGID_PKMNCANTSLEEPINUPROAR',
'STRINGID_PKMNSTOCKPILED',
'STRINGID_PKMNCANTSTOCKPILE',
'STRINGID_PKMNCANTSLEEPINUPROAR2',
'STRINGID_UPROARKEPTPKMNAWAKE',
'STRINGID_PKMNSTAYEDAWAKEUSING',
'STRINGID_PKMNSTORINGENERGY',
'STRINGID_PKMNUNLEASHEDENERGY',
'STRINGID_PKMNFATIGUECONFUSION',
'STRINGID_PKMNPICKEDUPITEM',
'STRINGID_PKMNUNAFFECTED',
'STRINGID_PKMNTRANSFORMEDINTO',
'STRINGID_PKMNMADESUBSTITUTE',
'STRINGID_PKMNHASSUBSTITUTE',
'STRINGID_SUBSTITUTEDAMAGED',
'STRINGID_PKMNSUBSTITUTEFADED',
'STRINGID_PKMNMUSTRECHARGE',
'STRINGID_PKMNRAGEBUILDING',
'STRINGID_PKMNMOVEWASDISABLED',
'STRINGID_PKMNMOVEISDISABLED',
'STRINGID_PKMNMOVEDISABLEDNOMORE',
'STRINGID_PKMNGOTENCORE',
'STRINGID_PKMNENCOREENDED',
'STRINGID_PKMNTOOKAIM',
'STRINGID_PKMNSKETCHEDMOVE',
'STRINGID_PKMNTRYINGTOTAKEFOE',
'STRINGID_PKMNTOOKFOE',
'STRINGID_PKMNREDUCEDPP',
'STRINGID_PKMNSTOLEITEM',
'STRINGID_TARGETCANTESCAPENOW',
'STRINGID_PKMNFELLINTONIGHTMARE',
'STRINGID_PKMNLOCKEDINNIGHTMARE',
'STRINGID_PKMNLAIDCURSE',
'STRINGID_PKMNAFFLICTEDBYCURSE',
'STRINGID_SPIKESSCATTERED',
'STRINGID_PKMNHURTBYSPIKES',
'STRINGID_PKMNIDENTIFIED',
'STRINGID_PKMNPERISHCOUNTFELL',
'STRINGID_PKMNBRACEDITSELF',
'STRINGID_PKMNENDUREDHIT',
'STRINGID_MAGNITUDESTRENGTH',
'STRINGID_PKMNCUTHPMAXEDATTACK',
'STRINGID_PKMNCOPIEDSTATCHANGES',
'STRINGID_PKMNGOTFREE',
'STRINGID_PKMNSHEDLEECHSEED',
'STRINGID_PKMNBLEWAWAYSPIKES',
'STRINGID_PKMNFLEDFROMBATTLE',
'STRINGID_PKMNFORESAWATTACK',
'STRINGID_PKMNTOOKATTACK',
'STRINGID_PKMNATTACK',
'STRINGID_PKMNCENTERATTENTION',
'STRINGID_PKMNCHARGINGPOWER',
'STRINGID_NATUREPOWERTURNEDINTO',
'STRINGID_PKMNSTATUSNORMAL',
'STRINGID_PKMNHASNOMOVESLEFT',
'STRINGID_PKMNSUBJECTEDTOTORMENT',
'STRINGID_PKMNCANTUSEMOVETORMENT',
'STRINGID_PKMNTIGHTENINGFOCUS',
'STRINGID_PKMNFELLFORTAUNT',
'STRINGID_PKMNCANTUSEMOVETAUNT',
'STRINGID_PKMNREADYTOHELP',
'STRINGID_PKMNSWITCHEDITEMS',
'STRINGID_PKMNCOPIEDFOE',
'STRINGID_PKMNMADEWISH',
'STRINGID_PKMNWISHCAMETRUE',
'STRINGID_PKMNPLANTEDROOTS',
'STRINGID_PKMNABSORBEDNUTRIENTS',
'STRINGID_PKMNANCHOREDITSELF',
'STRINGID_PKMNWASMADEDROWSY',
'STRINGID_PKMNKNOCKEDOFF',
'STRINGID_PKMNSWAPPEDABILITIES',
'STRINGID_PKMNSEALEDOPPONENTMOVE',
'STRINGID_PKMNCANTUSEMOVESEALED',
'STRINGID_PKMNWANTSGRUDGE',
'STRINGID_PKMNLOSTPPGRUDGE',
'STRINGID_PKMNSHROUDEDITSELF',
'STRINGID_PKMNMOVEBOUNCED',
'STRINGID_PKMNWAITSFORTARGET',
'STRINGID_PKMNSNATCHEDMOVE',
'STRINGID_PKMNMADEITRAIN',
'STRINGID_PKMNRAISEDSPEED',
'STRINGID_PKMNPROTECTEDBY',
'STRINGID_PKMNPREVENTSUSAGE',
'STRINGID_PKMNRESTOREDHPUSING',
'STRINGID_PKMNCHANGEDTYPEWITH',
'STRINGID_PKMNPREVENTSPARALYSISWITH',
'STRINGID_PKMNPREVENTSROMANCEWITH',
'STRINGID_PKMNPREVENTSPOISONINGWITH',
'STRINGID_PKMNPREVENTSCONFUSIONWITH',
'STRINGID_PKMNRAISEDFIREPOWERWITH',
'STRINGID_PKMNANCHORSITSELFWITH',
'STRINGID_PKMNCUTSATTACKWITH',
'STRINGID_PKMNPREVENTSSTATLOSSWITH',
'STRINGID_PKMNHURTSWITH',
'STRINGID_PKMNTRACED',
'STRINGID_STATSHARPLY',
'STRINGID_STATROSE',
'STRINGID_STATHARSHLY',
'STRINGID_STATFELL',
'STRINGID_PKMNSSTATCHANGED',
'STRINGID_PKMNSSTATCHANGED2',
'STRINGID_PKMNSSTATCHANGED3',
'STRINGID_PKMNSSTATCHANGED4',
'STRINGID_CRITICALHIT',
'STRINGID_ONEHITKO',
'STRINGID_123POOF',
'STRINGID_ANDELLIPSIS',
'STRINGID_NOTVERYEFFECTIVE',
'STRINGID_SUPEREFFECTIVE',
'STRINGID_GOTAWAYSAFELY',
'STRINGID_WILDPKMNFLED',
'STRINGID_NORUNNINGFROMTRAINERS',
'STRINGID_CANTESCAPE',
'STRINGID_DONTLEAVEBIRCH',
'STRINGID_BUTNOTHINGHAPPENED',
'STRINGID_BUTITFAILED',
'STRINGID_ITHURTCONFUSION',
'STRINGID_MIRRORMOVEFAILED',
'STRINGID_STARTEDTORAIN',
'STRINGID_DOWNPOURSTARTED',
'STRINGID_RAINCONTINUES',
'STRINGID_DOWNPOURCONTINUES',
'STRINGID_RAINSTOPPED',
'STRINGID_SANDSTORMBREWED',
'STRINGID_SANDSTORMRAGES',
'STRINGID_SANDSTORMSUBSIDED',
'STRINGID_SUNLIGHTGOTBRIGHT',
'STRINGID_SUNLIGHTSTRONG',
'STRINGID_SUNLIGHTFADED',
'STRINGID_STARTEDHAIL',
'STRINGID_HAILCONTINUES',
'STRINGID_HAILSTOPPED',
'STRINGID_FAILEDTOSPITUP',
'STRINGID_FAILEDTOSWALLOW',
'STRINGID_WINDBECAMEHEATWAVE',
'STRINGID_STATCHANGESGONE',
'STRINGID_COINSSCATTERED',
'STRINGID_TOOWEAKFORSUBSTITUTE',
'STRINGID_SHAREDPAIN',
'STRINGID_BELLCHIMED',
'STRINGID_FAINTINTHREE',
'STRINGID_NOPPLEFT',
'STRINGID_BUTNOPPLEFT',
'STRINGID_PLAYERUSEDITEM',
'STRINGID_WALLYUSEDITEM',
'STRINGID_TRAINERBLOCKEDBALL',
'STRINGID_DONTBEATHIEF',
'STRINGID_ITDODGEDBALL',
'STRINGID_YOUMISSEDPKMN',
'STRINGID_PKMNBROKEFREE',
'STRINGID_ITAPPEAREDCAUGHT',
'STRINGID_AARGHALMOSTHADIT',
'STRINGID_SHOOTSOCLOSE',
'STRINGID_GOTCHAPKMNCAUGHT',
'STRINGID_GOTCHAPKMNCAUGHT2',
'STRINGID_GIVENICKNAMECAPTURED',
'STRINGID_PKMNSENTTOPC',
'STRINGID_PKMNDATAADDEDTODEX',
'STRINGID_ITISRAINING',
'STRINGID_SANDSTORMISRAGING',
'STRINGID_CANTESCAPE2',
'STRINGID_PKMNIGNORESASLEEP',
'STRINGID_PKMNIGNOREDORDERS',
'STRINGID_PKMNBEGANTONAP',
'STRINGID_PKMNLOAFING',
'STRINGID_PKMNWONTOBEY',
'STRINGID_PKMNTURNEDAWAY',
'STRINGID_PKMNPRETENDNOTNOTICE',
'STRINGID_ENEMYABOUTTOSWITCHPKMN',
'STRINGID_CREPTCLOSER',
'STRINGID_CANTGETCLOSER',
'STRINGID_PKMNWATCHINGCAREFULLY',
'STRINGID_PKMNCURIOUSABOUTX',
'STRINGID_PKMNENTHRALLEDBYX',
'STRINGID_PKMNIGNOREDX',
'STRINGID_THREWPOKEBLOCKATPKMN',
'STRINGID_OUTOFSAFARIBALLS',
'STRINGID_PKMNSITEMCUREDPARALYSIS',
'STRINGID_PKMNSITEMCUREDPOISON',
'STRINGID_PKMNSITEMHEALEDBURN',
'STRINGID_PKMNSITEMDEFROSTEDIT',
'STRINGID_PKMNSITEMWOKEIT',
'STRINGID_PKMNSITEMSNAPPEDOUT',
'STRINGID_PKMNSITEMCUREDPROBLEM',
'STRINGID_PKMNSITEMRESTOREDHEALTH',
'STRINGID_PKMNSITEMRESTOREDPP',
'STRINGID_PKMNSITEMRESTOREDSTATUS',
'STRINGID_PKMNSITEMRESTOREDHPALITTLE',
'STRINGID_ITEMALLOWSONLYYMOVE',
'STRINGID_PKMNHUNGONWITHX',
'STRINGID_EMPTYSTRING3',
'STRINGID_PKMNSXPREVENTSBURNS',
'STRINGID_PKMNSXBLOCKSY',
'STRINGID_PKMNSXRESTOREDHPALITTLE2',
'STRINGID_PKMNSXWHIPPEDUPSANDSTORM',
'STRINGID_PKMNSXPREVENTSYLOSS',
'STRINGID_PKMNSXINFATUATEDY',
'STRINGID_PKMNSXMADEYINEFFECTIVE',
'STRINGID_PKMNSXCUREDYPROBLEM',
'STRINGID_ITSUCKEDLIQUIDOOZE',
'STRINGID_PKMNTRANSFORMED',
'STRINGID_ELECTRICITYWEAKENED',
'STRINGID_FIREWEAKENED',
'STRINGID_PKMNHIDUNDERWATER',
'STRINGID_PKMNSPRANGUP',
'STRINGID_HMMOVESCANTBEFORGOTTEN',
'STRINGID_XFOUNDONEY',
'STRINGID_PLAYERDEFEATEDTRAINER1',
'STRINGID_SOOTHINGAROMA',
'STRINGID_ITEMSCANTBEUSEDNOW',
'STRINGID_FORXCOMMAYZ',
'STRINGID_USINGXTHEYOFZN',
'STRINGID_PKMNUSEDXTOGETPUMPED',
'STRINGID_PKMNSXMADEYUSELESS',
'STRINGID_PKMNTRAPPEDBYSANDTOMB',
'STRINGID_EMPTYSTRING4',
'STRINGID_ABOOSTED',
'STRINGID_PKMNSXINTENSIFIEDSUN',
'STRINGID_PKMNMAKESGROUNDMISS',
'STRINGID_YOUTHROWABALLNOWRIGHT',
'STRINGID_PKMNSXTOOKATTACK',
'STRINGID_PKMNCHOSEXASDESTINY',
'STRINGID_PKMNLOSTFOCUS',
'STRINGID_USENEXTPKMN',
'STRINGID_PKMNFLEDUSINGITS',
'STRINGID_PKMNFLEDUSING',
'STRINGID_PKMNWASDRAGGEDOUT',
'STRINGID_PREVENTEDFROMWORKING',
'STRINGID_PKMNSITEMNORMALIZEDSTATUS',
'STRINGID_TRAINER1USEDITEM',
'STRINGID_BOXISFULL',
'STRINGID_PKMNAVOIDEDATTACK',
'STRINGID_PKMNSXMADEITINEFFECTIVE',
'STRINGID_PKMNSXPREVENTSFLINCHING',
'STRINGID_PKMNALREADYHASBURN',
'STRINGID_STATSWONTDECREASE2',
'STRINGID_PKMNSXBLOCKSY2',
'STRINGID_PKMNSXWOREOFF',
'STRINGID_PKMNRAISEDDEFALITTLE',
'STRINGID_PKMNRAISEDSPDEFALITTLE',
'STRINGID_THEWALLSHATTERED',
'STRINGID_PKMNSXPREVENTSYSZ',
'STRINGID_PKMNSXCUREDITSYPROBLEM',
'STRINGID_ATTACKERCANTESCAPE',
'STRINGID_PKMNOBTAINEDX',
'STRINGID_PKMNOBTAINEDX2',
'STRINGID_PKMNOBTAINEDXYOBTAINEDZ',
'STRINGID_BUTNOEFFECT',
'STRINGID_PKMNSXHADNOEFFECTONY',
'STRINGID_TWOENEMIESDEFEATED',
'STRINGID_TRAINER2LOSETEXT',
'STRINGID_PKMNINCAPABLEOFPOWER',
'STRINGID_GLINTAPPEARSINEYE',
'STRINGID_PKMNGETTINGINTOPOSITION',
'STRINGID_PKMNBEGANGROWLINGDEEPLY',
'STRINGID_PKMNEAGERFORMORE',
'STRINGID_DEFEATEDOPPONENTBYREFEREE',
'STRINGID_LOSTTOOPPONENTBYREFEREE',
'STRINGID_TIEDOPPONENTBYREFEREE',
'STRINGID_QUESTIONFORFEITMATCH',
'STRINGID_FORFEITEDMATCH',
'STRINGID_PKMNTRANSFERREDSOMEONESPC',
'STRINGID_PKMNTRANSFERREDLANETTESPC',
'STRINGID_PKMNBOXSOMEONESPCFULL',
'STRINGID_PKMNBOXLANETTESPCFULL',
'STRINGID_TRAINER1WINTEXT',
'STRINGID_TRAINER2WINTEXT'
]
MOVE_EFFECTS = [
'EFFECT_HIT',
'EFFECT_SLEEP',
'EFFECT_POISON_HIT',
'EFFECT_ABSORB',
'EFFECT_BURN_HIT',
'EFFECT_FREEZE_HIT',
'EFFECT_PARALYZE_HIT',
'EFFECT_EXPLOSION',
'EFFECT_DREAM_EATER',
'EFFECT_MIRROR_MOVE',
'EFFECT_ATTACK_UP',
'EFFECT_DEFENSE_UP',
'EFFECT_SPEED_UP',
'EFFECT_SPECIAL_ATTACK_UP',
'EFFECT_SPECIAL_DEFENSE_UP',
'EFFECT_ACCURACY_UP',
'EFFECT_EVASION_UP',
'EFFECT_ALWAYS_HIT',
'EFFECT_ATTACK_DOWN',
'EFFECT_DEFENSE_DOWN',
'EFFECT_SPEED_DOWN',
'EFFECT_SPECIAL_ATTACK_DOWN',
'EFFECT_SPECIAL_DEFENSE_DOWN',
'EFFECT_ACCURACY_DOWN',
'EFFECT_EVASION_DOWN',
'EFFECT_HAZE',
'EFFECT_BIDE',
'EFFECT_RAMPAGE',
'EFFECT_ROAR',
'EFFECT_MULTI_HIT',
'EFFECT_CONVERSION',
'EFFECT_FLINCH_HIT',
'EFFECT_RESTORE_HP',
'EFFECT_TOXIC',
'EFFECT_PAY_DAY',
'EFFECT_LIGHT_SCREEN',
'EFFECT_TRI_ATTACK',
'EFFECT_REST',
'EFFECT_OHKO',
'EFFECT_RAZOR_WIND',
'EFFECT_SUPER_FANG',
'EFFECT_DRAGON_RAGE',
'EFFECT_TRAP',
'EFFECT_HIGH_CRITICAL',
'EFFECT_DOUBLE_HIT',
'EFFECT_RECOIL_IF_MISS',
'EFFECT_MIST',
'EFFECT_FOCUS_ENERGY',
'EFFECT_RECOIL',
'EFFECT_CONFUSE',
'EFFECT_ATTACK_UP_2',
'EFFECT_DEFENSE_UP_2',
'EFFECT_SPEED_UP_2',
'EFFECT_SPECIAL_ATTACK_UP_2',
'EFFECT_SPECIAL_DEFENSE_UP_2',
'EFFECT_ACCURACY_UP_2',
'EFFECT_EVASION_UP_2',
'EFFECT_TRANSFORM',
'EFFECT_ATTACK_DOWN_2',
'EFFECT_DEFENSE_DOWN_2',
'EFFECT_SPEED_DOWN_2',
'EFFECT_SPECIAL_ATTACK_DOWN_2',
'EFFECT_SPECIAL_DEFENSE_DOWN_2',
'EFFECT_ACCURACY_DOWN_2',
'EFFECT_EVASION_DOWN_2',
'EFFECT_REFLECT',
'EFFECT_POISON',
'EFFECT_PARALYZE',
'EFFECT_ATTACK_DOWN_HIT',
'EFFECT_DEFENSE_DOWN_HIT',
'EFFECT_SPEED_DOWN_HIT',
'EFFECT_SPECIAL_ATTACK_DOWN_HIT',
'EFFECT_SPECIAL_DEFENSE_DOWN_HIT',
'EFFECT_ACCURACY_DOWN_HIT',
'EFFECT_EVASION_DOWN_HIT',
'EFFECT_SKY_ATTACK',
'EFFECT_CONFUSE_HIT',
'EFFECT_TWINEEDLE',
'EFFECT_VITAL_THROW',
'EFFECT_SUBSTITUTE',
'EFFECT_RECHARGE',
'EFFECT_RAGE',
'EFFECT_MIMIC',
'EFFECT_METRONOME',
'EFFECT_LEECH_SEED',
'EFFECT_SPLASH',
'EFFECT_DISABLE',
'EFFECT_LEVEL_DAMAGE',
'EFFECT_PSYWAVE',
'EFFECT_COUNTER',
'EFFECT_ENCORE',
'EFFECT_PAIN_SPLIT',
'EFFECT_SNORE',
'EFFECT_CONVERSION_2',
'EFFECT_LOCK_ON',
'EFFECT_SKETCH',
'EFFECT_UNUSED_60',
'EFFECT_SLEEP_TALK',
'EFFECT_DESTINY_BOND',
'EFFECT_FLAIL',
'EFFECT_SPITE',
'EFFECT_FALSE_SWIPE',
'EFFECT_HEAL_BELL',
'EFFECT_QUICK_ATTACK',
'EFFECT_TRIPLE_KICK',
'EFFECT_THIEF',
'EFFECT_MEAN_LOOK',
'EFFECT_NIGHTMARE',
'EFFECT_MINIMIZE',
'EFFECT_CURSE',
'EFFECT_UNUSED_6E',
'EFFECT_PROTECT',
'EFFECT_SPIKES',
'EFFECT_FORESIGHT',
'EFFECT_PERISH_SONG',
'EFFECT_SANDSTORM',
'EFFECT_ENDURE',
'EFFECT_ROLLOUT',
'EFFECT_SWAGGER',
'EFFECT_FURY_CUTTER',
'EFFECT_ATTRACT',
'EFFECT_RETURN',
'EFFECT_PRESENT',
'EFFECT_FRUSTRATION',
'EFFECT_SAFEGUARD',
'EFFECT_THAW_HIT',
'EFFECT_MAGNITUDE',
'EFFECT_BATON_PASS',
'EFFECT_PURSUIT',
'EFFECT_RAPID_SPIN',
'EFFECT_SONICBOOM',
'EFFECT_UNUSED_83',
'EFFECT_MORNING_SUN',
'EFFECT_SYNTHESIS',
'EFFECT_MOONLIGHT',
'EFFECT_HIDDEN_POWER',
'EFFECT_RAIN_DANCE',
'EFFECT_SUNNY_DAY',
'EFFECT_DEFENSE_UP_HIT',
'EFFECT_ATTACK_UP_HIT',
'EFFECT_ALL_STATS_UP_HIT',
'EFFECT_UNUSED_8D',
'EFFECT_BELLY_DRUM',
'EFFECT_PSYCH_UP',
'EFFECT_MIRROR_COAT',
'EFFECT_SKULL_BASH',
'EFFECT_TWISTER',
'EFFECT_EARTHQUAKE',
'EFFECT_FUTURE_SIGHT',
'EFFECT_GUST',
'EFFECT_FLINCH_MINIMIZE_HIT',
'EFFECT_SOLARBEAM',
'EFFECT_THUNDER',
'EFFECT_TELEPORT',
'EFFECT_BEAT_UP',
'EFFECT_SEMI_INVULNERABLE',
'EFFECT_DEFENSE_CURL',
'EFFECT_SOFTBOILED',
'EFFECT_FAKE_OUT',
'EFFECT_UPROAR',
'EFFECT_STOCKPILE',
'EFFECT_SPIT_UP',
'EFFECT_SWALLOW',
'EFFECT_UNUSED_A3',
'EFFECT_HAIL',
'EFFECT_TORMENT',
'EFFECT_FLATTER',
'EFFECT_WILL_O_WISP',
'EFFECT_MEMENTO',
'EFFECT_FACADE',
'EFFECT_FOCUS_PUNCH',
'EFFECT_SMELLINGSALT',
'EFFECT_FOLLOW_ME',
'EFFECT_NATURE_POWER',
'EFFECT_CHARGE',
'EFFECT_TAUNT',
'EFFECT_HELPING_HAND',
'EFFECT_TRICK',
'EFFECT_ROLE_PLAY',
'EFFECT_WISH',
'EFFECT_ASSIST',
'EFFECT_INGRAIN',
'EFFECT_SUPERPOWER',
'EFFECT_MAGIC_COAT',
'EFFECT_RECYCLE',
'EFFECT_REVENGE',
'EFFECT_BRICK_BREAK',
'EFFECT_YAWN',
'EFFECT_KNOCK_OFF',
'EFFECT_ENDEAVOR',
'EFFECT_ERUPTION',
'EFFECT_SKILL_SWAP',
'EFFECT_IMPRISON',
'EFFECT_REFRESH',
'EFFECT_GRUDGE',
'EFFECT_SNATCH',
'EFFECT_LOW_KICK',
'EFFECT_SECRET_POWER',
'EFFECT_DOUBLE_EDGE',
'EFFECT_TEETER_DANCE',
'EFFECT_BLAZE_KICK',
'EFFECT_MUD_SPORT',
'EFFECT_POISON_FANG',
'EFFECT_WEATHER_BALL',
'EFFECT_OVERHEAT',
'EFFECT_TICKLE',
'EFFECT_COSMIC_POWER',
'EFFECT_SKY_UPPERCUT',
'EFFECT_BULK_UP',
'EFFECT_POISON_TAIL',
'EFFECT_WATER_SPORT',
'EFFECT_CALM_MIND',
'EFFECT_DRAGON_DANCE',
'EFFECT_CAMOUFLAGE'
]
ABILITIES = [
'ABILITY_NONE',
'ABILITY_STENCH',
'ABILITY_DRIZZLE',
'ABILITY_SPEED_BOOST',
'ABILITY_BATTLE_ARMOR',
'ABILITY_STURDY',
'ABILITY_DAMP',
'ABILITY_LIMBER',
'ABILITY_SAND_VEIL',
'ABILITY_STATIC',
'ABILITY_VOLT_ABSORB',
'ABILITY_WATER_ABSORB',
'ABILITY_OBLIVIOUS',
'ABILITY_CLOUD_NINE',
'ABILITY_COMPOUND_EYES',
'ABILITY_INSOMNIA',
'ABILITY_COLOR_CHANGE',
'ABILITY_IMMUNITY',
'ABILITY_FLASH_FIRE',
'ABILITY_SHIELD_DUST',
'ABILITY_OWN_TEMPO',
'ABILITY_SUCTION_CUPS',
'ABILITY_INTIMIDATE',
'ABILITY_SHADOW_TAG',
'ABILITY_ROUGH_SKIN',
'ABILITY_WONDER_GUARD',
'ABILITY_LEVITATE',
'ABILITY_EFFECT_SPORE',
'ABILITY_SYNCHRONIZE',
'ABILITY_CLEAR_BODY',
'ABILITY_NATURAL_CURE',
'ABILITY_LIGHTNING_ROD',
'ABILITY_SERENE_GRACE',
'ABILITY_SWIFT_SWIM',
'ABILITY_CHLOROPHYLL',
'ABILITY_ILLUMINATE',
'ABILITY_TRACE',
'ABILITY_HUGE_POWER',
'ABILITY_POISON_POINT',
'ABILITY_INNER_FOCUS',
'ABILITY_MAGMA_ARMOR',
'ABILITY_WATER_VEIL',
'ABILITY_MAGNET_PULL',
'ABILITY_SOUNDPROOF',
'ABILITY_RAIN_DISH',
'ABILITY_SAND_STREAM',
'ABILITY_PRESSURE',
'ABILITY_THICK_FAT',
'ABILITY_EARLY_BIRD',
'ABILITY_FLAME_BODY',
'ABILITY_RUN_AWAY',
'ABILITY_KEEN_EYE',
'ABILITY_HYPER_CUTTER',
'ABILITY_PICKUP',
'ABILITY_TRUANT',
'ABILITY_HUSTLE',
'ABILITY_CUTE_CHARM',
'ABILITY_PLUS',
'ABILITY_MINUS',
'ABILITY_FORECAST',
'ABILITY_STICKY_HOLD',
'ABILITY_SHED_SKIN',
'ABILITY_GUTS',
'ABILITY_MARVEL_SCALE',
'ABILITY_LIQUID_OOZE',
'ABILITY_OVERGROW',
'ABILITY_BLAZE',
'ABILITY_TORRENT',
'ABILITY_SWARM',
'ABILITY_ROCK_HEAD',
'ABILITY_DROUGHT',
'ABILITY_ARENA_TRAP',
'ABILITY_VITAL_SPIRIT',
'ABILITY_WHITE_SMOKE',
'ABILITY_PURE_POWER',
'ABILITY_SHELL_ARMOR',
'ABILITY_CACOPHONY',
'ABILITY_AIR_LOCK',
]
COMPAR = [
'CMP_EQUAL',
'CMP_NOT_EQUAL',
'CMP_GREATER_THAN',
'CMP_LESS_THAN',
'CMP_COMMON_BITS',
'CMP_NO_COMMON_BITS'
]
BATTLE_TYPE_FLAGS = [
'BATTLE_TYPE_DOUBLE',
'BATTLE_TYPE_LINK',
'BATTLE_TYPE_IS_MASTER',
'BATTLE_TYPE_TRAINER',
'BATTLE_TYPE_FIRST_BATTLE',
'BATTLE_TYPE_20',
'BATTLE_TYPE_MULTI',
'BATTLE_TYPE_SAFARI',
'BATTLE_TYPE_BATTLE_TOWER',
'BATTLE_TYPE_OLD_MAN_TUTORIAL',
'BATTLE_TYPE_ROAMER',
'BATTLE_TYPE_EREADER_TRAINER',
'BATTLE_TYPE_KYOGRE_GROUDON',
'BATTLE_TYPE_LEGENDARY',
'BATTLE_TYPE_REGI',
'BATTLE_TYPE_GHOST',
'BATTLE_TYPE_POKEDUDE',
'BATTLE_TYPE_PALACE',
'BATTLE_TYPE_ARENA',
'BATTLE_TYPE_TRAINER_TOWER',
'BATTLE_TYPE_PIKE',
'BATTLE_TYPE_PYRAMID',
'BATTLE_TYPE_INGAME_PARTNER',
'BATTLE_TYPE_x800000',
'BATTLE_TYPE_RECORDED',
'BATTLE_TYPE_x2000000',
'BATTLE_TYPE_TRAINER_HILL',
'BATTLE_TYPE_SECRET_BASE',
'BATTLE_TYPE_GROUDON',
'BATTLE_TYPE_KYOGRE',
'BATTLE_TYPE_RAYQUAZA',
'BATTLE_TYPE_x80000000',
]
BATTLE_SCRIPT_OFFSETS = [
'sPAINSPLIT_HP',
None,
None,
None,
'sBIDE_DMG',
None,
None,
None,
'sMULTIHIT_STRING',
None,
None,
None,
None,
None,
'sDMG_MULTIPLIER',
'sTWOTURN_STRINGID',
'sB_ANIM_ARG1',
'sB_ANIM_ARG2',
'sTRIPLE_KICK_POWER',
None,
'sMOVEEND_STATE',
'sBATTLER_WITH_ABILITY',
'sMULTIHIT_EFFECT',
'sBATTLER',
'sB_ANIM_TURN',
'sB_ANIM_TARGETS_HIT',
'sSTATCHANGER',
'sSTAT_ANIM_PLAYED',
'sGIVEEXP_STATE',
'sBATTLE_STYLE',
'sLVLBOX_STATE',
'sLEARNMOVE_STATE',
'sFIELD_20',
'sRESHOW_MAIN_STATE',
'sRESHOW_HELPER_STATE',
'sFIELD_23',
'sWINDOWS_TYPE',
'sMULTIPLAYER_ID',
'sSPECIAL_TRAINER_BATTLE_TYPE'
]
HITMARKER = [
None,
None,
None,
None,
'HITMARKER_x10',
'HITMARKER_x20',
'HITMARKER_DESTINYBOND',
'HITMARKER_NO_ANIMATIONS',
'HITMARKER_IGNORE_SUBSTITUTE',
'HITMARKER_NO_ATTACKSTRING',
'HITMARKER_ATTACKSTRING_PRINTED',
'HITMARKER_NO_PPDEDUCT',
'HITMARKER_SWAP_ATTACKER_TARGET',
'HITMARKER_IGNORE_SAFEGUARD',
'HITMARKER_SYNCHRONISE_EFFECT',
'HITMARKER_RUN',
'HITMARKER_IGNORE_ON_AIR',
'HITMARKER_IGNORE_UNDERGROUND',
'HITMARKER_IGNORE_UNDERWATER',
'HITMARKER_UNABLE_TO_USE_MOVE',
'HITMARKER_x100000',
'HITMARKER_x200000',
'HITMARKER_x400000',
'HITMARKER_x800000',
'HITMARKER_GRUDGE',
'HITMARKER_OBEYS',
'HITMARKER_x4000000',
'HITMARKER_CHARGING',
'HITMARKER_UNK(0)',
'HITMARKER_UNK(1)',
'HITMARKER_UNK(2)',
'HITMARKER_UNK(3)'
]
with open('tmp.json') as fp:
commands = json.load(fp)['commands']
symbols = {}
with open('pokefirered.map') as mapfile:
for line in mapfile:
m = re.match(r'^ +(0x0[238][0-9a-f]{6}) +(\w+)$', line)
if m:
symbols[int(m[1], 0)] = m[2]
pointers = {}
name = ''
end = 0
with open('data/battle_scripts_1.s') as fp:
for line in fp:
if '::' in line:
name = line.split('::')[0]
elif 'baserom.gba' in line:
addr, size = [int(x, 0) for x in line.split(', ')[1:]]
if not name:
name = f'BattleScript_8{addr:06X}'
pointers[addr] = name
name = ''
end = max(end, addr + size)
ptr_table_addr = min(pointers)
ptr_table_name = pointers.pop(ptr_table_addr)
script_ptrs = []
with open('baserom.gba', 'rb') as rom:
print('#include "constants/moves.h"')
print('#include "constants/battle.h"')
print('#include "constants/battle_move_effects.h"')
print('#include "constants/battle_script_commands.h"')
print('#include "constants/battle_anim.h"')
print('#include "constants/items.h"')
print('#include "constants/abilities.h"')
print('#include "constants/species.h"')
print('\t.include "asm/macros/battle_script.inc"')
print('\t.section script_data, "aw", %progbits')
print('\t.align 2')
print('')
rom.seek(ptr_table_addr)
print(f'{ptr_table_name}:: @ 8{ptr_table_addr:06X}')
i = 0
while True:
ptr = int.from_bytes(rom.read(4), 'little')
if ptr >> 24 != 8:
break
ptr &= 0xFFFFFF
if ptr not in pointers:
if i < len(MOVE_EFFECTS):
name = MOVE_EFFECTS[i].title().replace('_', '')
pointers[ptr] = f'BattleScript_{name}'
else:
pointers[ptr] = f'BattleScript_8{ptr:06X}'
print(f'\t.4byte {pointers[ptr]}')
i += 1
rom.seek(min(pointers))
while rom.tell() < end:
cmd, = rom.read(1)
if cmd < len(commands):
values = commands[cmd]
if values['args']:
args = []
for arg in values['args']:
value = int.from_bytes(rom.read(arg['nbytes']), 'little')
if arg['nbytes'] == 4 and value >> 24 == 8 and value & 0xFFFFFF not in pointers and min(pointers) <= value & 0xFFFFFF < end:
pointers[value & 0xFFFFFF] = f'BattleScript_{value:X}'
rom.seek(min(pointers))
while rom.tell() < end:
if rom.tell() in pointers:
print('')
print(f'{pointers[rom.tell()]}:: @ 8{rom.tell():06X}')
cmd, = rom.read(1)
if cmd < len(commands):
values = commands[cmd]
cmdname = values['name']
if values['args']:
args = []
for i, arg in enumerate(values['args']):
value = int.from_bytes(rom.read(arg['nbytes']), 'little')
if arg['nbytes'] == 1:
if i == {'jumpifability': 1, 'jumpifabilitypresent': 0}.get(cmdname, -1):
args.append(ABILITIES[value])
elif cmdname in ('jumpifword', 'jumpifhalfword', 'jumpifbyte') and i == 0:
args.append(COMPAR[value])
else:
args.append(f'0x{value:02X}')
elif arg['nbytes'] == 2:
if cmdname == 'printstring' and value < len(STRING_IDS) and STRING_IDS[value]:
args.append(STRING_IDS[value])
elif cmdname in ('atk55', 'atk54'):
args.append(SONGS[value])
else:
args.append(f'0x{value:04X}')
else:
if i == {'jumpifword': 2, 'orword': 1}.get(cmdname, -1) and args[-1] in ('gBattleTypeFlags', 'gHitMarker'):
flags = []
array = {'gBattleTypeFlags': BATTLE_TYPE_FLAGS, 'gHitMarker': HITMARKER}[args[-1]]
for bit in range(32):
if (value >> bit) & 1:
flags.append(array[bit])
args.append(' | '.join(flags) or 0)
else:
if value >> 24 in (2, 3, 8):
if value >> 24 == 8 and value & 0xFFFFFF in pointers:
value = pointers[value & 0xFFFFFF]
else:
value = symbols.get(value, value)
if isinstance(value, int):
for delta in range(1, 0x400):
if value - delta in symbols:
break
if symbols[value - delta] == 'gBattleScripting' and delta < len(BATTLE_SCRIPT_OFFSETS) and BATTLE_SCRIPT_OFFSETS[delta]:
value = BATTLE_SCRIPT_OFFSETS[delta]
else:
value = f'{symbols[value - delta]} + 0x{delta:X}'
if isinstance(value, str):
args.append(value)
else:
args.append(f'0x{value:08X}')
print('', cmdname, sep='\t', end=' ')
print(*args, sep=', ')
else:
print('', cmdname, sep='\t')
else:
print(f'\t.byte 0x{cmd:02X}')
{
"commands": [
{
"name": "attackcanceler",
"args": [
]
},
{
"name": "accuracycheck",
"args": [
{"name": "address", "nbytes": 4},
{"name": "param1", "nbytes": 2}
]
},
{
"name": "attackstring",
"args": [
]
},
{
"name": "ppreduce",
"args": [
]
},
{
"name": "critcalc",
"args": [
]
},
{
"name": "atk5",
"args": [
]
},
{
"name": "atk6",
"args": [
]
},
{
"name": "atk7",
"args": [
]
},
{
"name": "atk8",
"args": [
]
},
{
"name": "attackanimation",
"args": [
]
},
{
"name": "waitanimation",
"args": [
]
},
{
"name": "graphicalhpupdate",
"args": [
{"name": "bank", "nbytes": 1}
]
},
{
"name": "datahpupdate",
"args": [
{"name": "bank", "nbytes": 1}
]
},
{
"name": "critmessage",
"args": [
]
},
{
"name": "missmessage",
"args": [
]
},
{
"name": "resultmessage",
"args": [
]
},
{
"name": "printstring",
"args": [
{"name": "string", "nbytes": 2}
]
},
{
"name": "printstring2",
"args": [
{"name": "string", "nbytes": 2}
]
},
{
"name": "waitmessage",
"args": [
{"name": "delay", "nbytes": 2}
]
},
{
"name": "printfromtable",
"args": [
{"name": "table", "nbytes": 4}
]
},
{
"name": "printfromtable2",
"args": [
{"name": "table", "nbytes": 4}
]
},
{
"name": "seteffectwithchancetarget",
"args": [
]
},
{
"name": "seteffecttarget",
"args": [
]
},
{
"name": "seteffectuser",
"args": [
]
},
{
"name": "clearstatus",
"args": [
{"name": "bank", "nbytes": 1}
]
},
{
"name": "faintpokemon",
"args": [
{"name": "bank", "nbytes": 1},
{"name": "param2", "nbytes": 1},
{"name": "param3", "nbytes": 4}
]
},
{
"name": "atk1a",
"args": [
{"name": "param1", "nbytes": 1}
]
},
{
"name": "atk1b",
"args": [
{"name": "bank", "nbytes": 1}
]
},
{
"name": "jumpifstatus",
"args": [
{"name": "bank", "nbytes": 1},
{"name": "status", "nbytes": 4},
{"name": "address", "nbytes": 4}
]
},
{
"name": "jumpifsecondarytstatus",
"args": [
{"name": "bank", "nbytes": 1},
{"name": "status", "nbytes": 4},
{"name": "address", "nbytes": 4}
]
},
{
"name": "jumpifability",
"args": [
{"name": "bank", "nbytes": 1},
{"name": "ability", "nbytes": 1},
{"name": "address", "nbytes": 4}
]
},
{
"name": "jumpifhalverset",
"args": [
{"name": "bank", "nbytes": 1},
{"name": "status", "nbytes": 2},
{"name": "address", "nbytes": 4}
]
},
{
"name": "jumpifstat",
"args": [
{"name": "bank", "nbytes": 1},
{"name": "flag", "nbytes": 1},
{"name": "quantity", "nbytes": 1},
{"name": "statid", "nbytes": 1},
{"name": "address", "nbytes": 4}
]
},
{
"name": "jumpifspecialstatusflag",
"args": [
{"name": "bank", "nbytes": 1},
{"name": "mask", "nbytes": 4},
{"name": "status", "nbytes": 1},
{"name": "address", "nbytes": 4}
]
},
{
"name": "jumpiftype",
"args": [
{"name": "bank", "nbytes": 1},
{"name": "type", "nbytes": 1},
{"name": "address", "nbytes": 4}
]
},
{
"name": "atk23",
"args": [
{"name": "bank", "nbytes": 1}
]
},
{
"name": "atk24",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "atk25",
"args": [
]
},
{
"name": "atk26",
"args": [
{"name": "param1", "nbytes": 1}
]
},
{
"name": "atk27",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "jump",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "jumpifbyte",
"args": [
{"name": "ifflag", "nbytes": 1},
{"name": "checkaddr", "nbytes": 4},
{"name": "compare", "nbytes": 1},
{"name": "address", "nbytes": 4}
]
},
{
"name": "jumpifhalfword",
"args": [
{"name": "ifflag", "nbytes": 1},
{"name": "checkaddr", "nbytes": 4},
{"name": "compare", "nbytes": 2},
{"name": "address", "nbytes": 4}
]
},
{
"name": "jumpifword",
"args": [
{"name": "ifflag", "nbytes": 1},
{"name": "checkaddr", "nbytes": 4},
{"name": "compare", "nbytes": 4},
{"name": "address", "nbytes": 4}
]
},
{
"name": "jumpifarrayequal",
"args": [
{"name": "mem1", "nbytes": 4},
{"name": "mem2", "nbytes": 4},
{"name": "size", "nbytes": 1},
{"name": "address", "nbytes": 4}
]
},
{
"name": "jumpifarraynotequal",
"args": [
{"name": "mem1", "nbytes": 4},
{"name": "mem2", "nbytes": 4},
{"name": "size", "nbytes": 1},
{"name": "address", "nbytes": 4}
]
},
{
"name": "setbyte",
"args": [
{"name": "pointer", "nbytes": 4},
{"name": "value", "nbytes": 1}
]
},
{
"name": "addbyte",
"args": [
{"name": "pointer", "nbytes": 4},
{"name": "value", "nbytes": 1}
]
},
{
"name": "subtractbyte",
"args": [
{"name": "pointer", "nbytes": 4},
{"name": "value", "nbytes": 1}
]
},
{
"name": "copyarray",
"args": [
{"name": "destination", "nbytes": 4},
{"name": "source", "nbytes": 4},
{"name": "size", "nbytes": 1}
]
},
{
"name": "atk32",
"args": [
{"name": "param1", "nbytes": 4},
{"name": "param2", "nbytes": 4},
{"name": "param3", "nbytes": 4},
{"name": "byte", "nbytes": 1}
]
},
{
"name": "orbyte",
"args": [
{"name": "pointer", "nbytes": 4},
{"name": "value", "nbytes": 1}
]
},
{
"name": "orhalfword",
"args": [
{"name": "pointer", "nbytes": 4},
{"name": "value", "nbytes": 2}
]
},
{
"name": "orword",
"args": [
{"name": "pointer", "nbytes": 4},
{"name": "value", "nbytes": 4}
]
},
{
"name": "bicbyte",
"args": [
{"name": "pointer", "nbytes": 4},
{"name": "value", "nbytes": 1}
]
},
{
"name": "bichalfword",
"args": [
{"name": "pointer", "nbytes": 4},
{"name": "value", "nbytes": 2}
]
},
{
"name": "bicword",
"args": [
{"name": "pointer", "nbytes": 4},
{"name": "value", "nbytes": 4}
]
},
{
"name": "pause",
"args": [
{"name": "pause_duration", "nbytes": 2}
]
},
{
"name": "waitstateatk",
"args": [
]
},
{
"name": "somethinghealatk3b",
"args": [
{"name": "bank", "nbytes": 1}
]
},
{
"name": "return",
"args": [
]
},
{
"name": "end",
"args": [
]
},
{
"name": "end2",
"args": [
]
},
{
"name": "end3",
"args": [
]
},
{
"name": "atk40",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "callatk",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "jumpiftype2",
"args": [
{"name": "bank", "nbytes": 1},
{"name": "type", "nbytes": 1},
{"name": "address", "nbytes": 4}
]
},
{
"name": "jumpifabilitypresent",
"args": [
{"name": "ability", "nbytes": 1},
{"name": "address", "nbytes": 4}
]
},
{
"name": "atk44",
"args": [
]
},
{
"name": "playanimation",
"args": [
{"name": "bank", "nbytes": 1},
{"name": "animation", "nbytes": 1},
{"name": "var_address", "nbytes": 4}
]
},
{
"name": "atk46",
"args": [
{"name": "bank", "nbytes": 1},
{"name": "address", "nbytes": 4},
{"name": "int", "nbytes": 4}
]
},
{
"name": "atk47",
"args": [
]
},
{
"name": "playstatchangeanimation",
"args": [
{"name": "bank", "nbytes": 1},
{"name": "color", "nbytes": 1},
{"name": "byte", "nbytes": 1}
]
},
{
"name": "atk49",
"args": [
{"name": "byte1", "nbytes": 1},
{"name": "byte2", "nbytes": 1}
]
},
{
"name": "damagecalc2",
"args": [
]
},
{
"name": "atk4b",
"args": [
]
},
{
"name": "switch1",
"args": [
{"name": "bank", "nbytes": 1}
]
},
{
"name": "switch2",
"args": [
{"name": "bank", "nbytes": 1}
]
},
{
"name": "switch3",
"args": [
{"name": "bank", "nbytes": 1},
{"name": "byte", "nbytes": 1}
]
},
{
"name": "jumpifcannotswitch",
"args": [
{"name": "bank", "nbytes": 1},
{"name": "address", "nbytes": 4}
]
},
{
"name": "openpartyscreen",
"args": [
{"name": "bank", "nbytes": 1},
{"name": "address", "nbytes": 4}
]
},
{
"name": "atk51",
"args": [
{"name": "bank", "nbytes": 1},
{"name": "param2", "nbytes": 1}
]
},
{
"name": "atk52",
"args": [
{"name": "bank", "nbytes": 1}
]
},
{
"name": "atk53",
"args": [
{"name": "bank", "nbytes": 1}
]
},
{
"name": "atk54",
"args": [
{"name": "word", "nbytes": 2}
]
},
{
"name": "atk55",
"args": [
{"name": "int", "nbytes": 2}
]
},
{
"name": "atk56",
"args": [
{"name": "bank_or_side", "nbytes": 1}
]
},
{
"name": "atk57",
"args": [
]
},
{
"name": "atk58",
"args": [
{"name": "bank", "nbytes": 1}
]
},
{
"name": "checkiflearnmoveinbattle",
"args": [
{"name": "param1", "nbytes": 4},
{"name": "param2", "nbytes": 4},
{"name": "bank_maybe", "nbytes": 1}
]
},
{
"name": "atk5a",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "atk5b",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "atk5c",
"args": [
{"name": "bank", "nbytes": 1}
]
},
{
"name": "atk5d",
"args": [
]
},
{
"name": "atk5e",
"args": [
{"name": "bank", "nbytes": 1}
]
},
{
"name": "atk5f",
"args": [
]
},
{
"name": "atk60",
"args": [
{"name": "byte", "nbytes": 1}
]
},
{
"name": "atk61",
"args": [
{"name": "bank_or_side", "nbytes": 1}
]
},
{
"name": "atk62_hidepartystatussummary",
"args": [
{"name": "bank_or_side", "nbytes": 1}
]
},
{
"name": "jumptoattack",
"args": [
{"name": "bank", "nbytes": 1}
]
},
{
"name": "statusanimation",
"args": [
{"name": "bank", "nbytes": 1}
]
},
{
"name": "atk65",
"args": [
{"name": "bank_or_side", "nbytes": 1},
{"name": "address", "nbytes": 4}
]
},
{
"name": "atk66",
"args": [
{"name": "bank_or_side", "nbytes": 1},
{"name": "bank_or_side2", "nbytes": 1},
{"name": "address", "nbytes": 4}
]
},
{
"name": "atk67",
"args": [
]
},
{
"name": "atk68",
"args": [
]
},
{
"name": "atk69",
"args": [
]
},
{
"name": "removeitem",
"args": [
{"name": "bank", "nbytes": 1}
]
},
{
"name": "atk6b",
"args": [
]
},
{
"name": "atk6c",
"args": [
]
},
{
"name": "atk6d",
"args": [
]
},
{
"name": "atk6e",
"args": [
]
},
{
"name": "atk6f",
"args": [
{"name": "bank", "nbytes": 1}
]
},
{
"name": "atk70",
"args": [
{"name": "bank", "nbytes": 1}
]
},
{
"name": "atk71",
"args": [
]
},
{
"name": "atk72",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "atk73",
"args": [
{"name": "bank", "nbytes": 1}
]
},
{
"name": "atk74",
"args": [
{"name": "bank", "nbytes": 1}
]
},
{
"name": "atk75",
"args": [
]
},
{
"name": "atk76",
"args": [
{"name": "bank", "nbytes": 1},
{"name": "byte", "nbytes": 1}
]
},
{
"name": "setprotect",
"args": [
]
},
{
"name": "faintifabilitynotdamp",
"args": [
]
},
{
"name": "setuserhptozero",
"args": [
]
},
{
"name": "jumpwhiletargetvalid",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "setdamageasrestorehalfmaxhp",
"args": [
{"name": "address", "nbytes": 4},
{"name": "byte", "nbytes": 1}
]
},
{
"name": "jumptolastusedattack",
"args": [
]
},
{
"name": "setrain",
"args": [
]
},
{
"name": "setreflect",
"args": [
]
},
{
"name": "setleechseed",
"args": [
]
},
{
"name": "manipulatedamage",
"args": [
{"name": "id", "nbytes": 1}
]
},
{
"name": "setrest",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "jumpifnotfirstturn",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "nop3",
"args": [
]
},
{
"name": "jumpifcannotsleep",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "stockpile",
"args": [
]
},
{
"name": "stockpiletobasedamage",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "stockpiletohprecovery",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "negativedamage",
"args": [
]
},
{
"name": "statbuffchange",
"args": [
{"name": "target", "nbytes": 1},
{"name": "address", "nbytes": 4}
]
},
{
"name": "normalisebuffs",
"args": [
]
},
{
"name": "setbide",
"args": [
]
},
{
"name": "confuseifrepeatingattackends",
"args": [
]
},
{
"name": "setloopcounter",
"args": [
{"name": "count", "nbytes": 1}
]
},
{
"name": "atk8e",
"args": [
]
},
{
"name": "forcerandomswitch",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "changetypestoenemyattacktype",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "givemoney",
"args": [
]
},
{
"name": "setlightscreen",
"args": [
]
},
{
"name": "koplussomethings",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "gethalfcurrentenemyhp",
"args": [
]
},
{
"name": "setsandstorm",
"args": [
]
},
{
"name": "weatherdamage",
"args": [
]
},
{
"name": "tryinfatuatetarget",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "atk98",
"args": [
{"name": "byte", "nbytes": 1}
]
},
{
"name": "setmisteffect",
"args": [
]
},
{
"name": "setincreasedcriticalchance",
"args": [
]
},
{
"name": "transformdataexecution",
"args": [
]
},
{
"name": "setsubstituteeffect",
"args": [
]
},
{
"name": "copyattack",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "metronomeeffect",
"args": [
]
},
{
"name": "nightshadedamageeffect",
"args": [
]
},
{
"name": "psywavedamageeffect",
"args": [
]
},
{
"name": "counterdamagecalculator",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "mirrorcoatdamagecalculator",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "disablelastusedattack",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "setencore",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "painsplitdamagecalculator",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "settypetorandomresistance",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "setalwayshitflag",
"args": [
]
},
{
"name": "copymovepermanently",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "selectrandommovefromusermoves",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "destinybondeffect",
"args": [
]
},
{
"name": "atkab",
"args": [
]
},
{
"name": "remaininghptopower",
"args": [
]
},
{
"name": "reducepprandom",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "clearstatusifnotsoundproofed",
"args": [
]
},
{
"name": "cursetarget",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "setspikes",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "setforesight",
"args": [
]
},
{
"name": "setperishsong",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "rolloutdamagecalculation",
"args": [
]
},
{
"name": "jumpifconfusedandattackmaxed",
"args": [
{"name": "bank", "nbytes": 1},
{"name": "address", "nbytes": 4}
]
},
{
"name": "furycutterdamagecalculation",
"args": [
]
},
{
"name": "happinesstodamagecalculation",
"args": [
]
},
{
"name": "presentdamagecalculation",
"args": [
]
},
{
"name": "setsafeguard",
"args": [
]
},
{
"name": "magnitudedamagecalculation",
"args": [
]
},
{
"name": "atkba",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "setsunny",
"args": [
]
},
{
"name": "maxattackhalvehp",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "copyfoestats",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "breakfree",
"args": [
]
},
{
"name": "setcurled",
"args": [
]
},
{
"name": "recoverbasedonsunlight",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "hiddenpowerdamagecalculation",
"args": [
]
},
{
"name": "selectnexttarget",
"args": [
]
},
{
"name": "setfutureattack",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "beatupcalculation",
"args": [
{"name": "address1", "nbytes": 4},
{"name": "address2", "nbytes": 4}
]
},
{
"name": "hidepreattack",
"args": [
]
},
{
"name": "unhidepostattack",
"args": [
]
},
{
"name": "setminimize",
"args": [
]
},
{
"name": "sethail",
"args": [
]
},
{
"name": "jumpifattackandspecialattackcannotfall",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "setforcedtarget",
"args": [
]
},
{
"name": "setcharge",
"args": [
]
},
{
"name": "callterrainattack",
"args": [
]
},
{
"name": "cureifburnedparalysedorpoisoned",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "settorment",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "jumpifnodamage",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "settaunt",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "sethelpinghand",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "itemswap",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "copyability",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "atkd4",
"args": [
{"name": "byte", "nbytes": 1},
{"name": "address", "nbytes": 4}
]
},
{
"name": "setroots",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "doubledamagedealtifdamaged",
"args": [
]
},
{
"name": "setyawn",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "setdamagetohealthdifference",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "scaledamagebyhealthratio",
"args": [
]
},
{
"name": "abilityswap",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "imprisoneffect",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "setgrudge",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "weightdamagecalculation",
"args": [
]
},
{
"name": "assistattackselect",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "setmagiccoat",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "setstealstatchange",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "atke1",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "atke2",
"args": [
{"name": "bank", "nbytes": 1}
]
},
{
"name": "jumpiffainted",
"args": [
{"name": "bank", "nbytes": 1},
{"name": "address", "nbytes": 4}
]
},
{
"name": "naturepowereffect",
"args": [
]
},
{
"name": "pickupitemcalculation",
"args": [
]
},
{
"name": "actualcastformswitch",
"args": [
]
},
{
"name": "castformswitch",
"args": [
]
},
{
"name": "settypebasedhalvers",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "seteffectbyweather",
"args": [
]
},
{
"name": "recycleitem",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "settypetoterrain",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "pursuitwhenswitched",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "snatchmove",
"args": [
]
},
{
"name": "removereflectlightscreen",
"args": [
]
},
{
"name": "pokemoncatchfunction",
"args": [
]
},
{
"name": "catchpoke",
"args": [
]
},
{
"name": "capturesomethingf1",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "capturesomethingf2",
"args": [
]
},
{
"name": "capturesomethingf3",
"args": [
{"name": "address", "nbytes": 4}
]
},
{
"name": "removehp",
"args": [
]
},
{
"name": "curestatusfirstword",
"args": [
]
},
{
"name": "atkf6",
"args": [
]
},
{
"name": "activesidesomething",
"args": [
]
},
{
"name": "atkf8",
"args": [
{"name": "bank", "nbytes": 1}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment